diff --git a/internal/bridge/api.go b/internal/bridge/api.go
new file mode 100644
index 00000000..d1f83fb1
--- /dev/null
+++ b/internal/bridge/api.go
@@ -0,0 +1,45 @@
+// Copyright (c) 2022 Proton AG
+//
+// This file is part of Proton Mail Bridge.
+//
+// Proton Mail Bridge is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// Proton Mail Bridge is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with Proton Mail Bridge. If not, see .
+
+package bridge
+
+import (
+ "net/http"
+
+ "github.com/Masterminds/semver/v3"
+ "github.com/ProtonMail/proton-bridge/v2/internal/constants"
+ "github.com/sirupsen/logrus"
+ "gitlab.protontech.ch/go/liteapi"
+)
+
+// defaultAPIOptions returns a set of default API options for the given parameters.
+func defaultAPIOptions(
+ apiURL string,
+ version *semver.Version,
+ cookieJar http.CookieJar,
+ transport http.RoundTripper,
+ poolSize int,
+) []liteapi.Option {
+ return []liteapi.Option{
+ liteapi.WithHostURL(apiURL),
+ liteapi.WithAppVersion(constants.AppVersion(version.Original())),
+ liteapi.WithCookieJar(cookieJar),
+ liteapi.WithTransport(transport),
+ liteapi.WithAttPoolSize(poolSize),
+ liteapi.WithLogger(logrus.StandardLogger()),
+ }
+}
diff --git a/internal/bridge/api_default.go b/internal/bridge/api_default.go
new file mode 100644
index 00000000..2c734d57
--- /dev/null
+++ b/internal/bridge/api_default.go
@@ -0,0 +1,38 @@
+// Copyright (c) 2022 Proton AG
+//
+// This file is part of Proton Mail Bridge.
+//
+// Proton Mail Bridge is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// Proton Mail Bridge is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with Proton Mail Bridge. If not, see .
+
+//go:build !build_qa
+
+package bridge
+
+import (
+ "net/http"
+
+ "github.com/Masterminds/semver/v3"
+ "gitlab.protontech.ch/go/liteapi"
+)
+
+// newAPIOptions returns a set of API options for the given parameters.
+func newAPIOptions(
+ apiURL string,
+ version *semver.Version,
+ cookieJar http.CookieJar,
+ transport http.RoundTripper,
+ poolSize int,
+) []liteapi.Option {
+ return defaultAPIOptions(apiURL, version, cookieJar, transport, poolSize)
+}
diff --git a/internal/bridge/api_qa.go b/internal/bridge/api_qa.go
new file mode 100644
index 00000000..7802632f
--- /dev/null
+++ b/internal/bridge/api_qa.go
@@ -0,0 +1,53 @@
+// Copyright (c) 2022 Proton AG
+//
+// This file is part of Proton Mail Bridge.
+//
+// Proton Mail Bridge is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// Proton Mail Bridge is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with Proton Mail Bridge. If not, see .
+
+//go:build build_qa
+
+package bridge
+
+import (
+ "net/http"
+ "os"
+
+ "github.com/Masterminds/semver/v3"
+ "gitlab.protontech.ch/go/liteapi"
+)
+
+// newAPIOptions returns a set of API options for the given parameters.
+func newAPIOptions(
+ apiURL string,
+ version *semver.Version,
+ cookieJar http.CookieJar,
+ transport http.RoundTripper,
+ poolSize int,
+) []liteapi.Option {
+ opt := defaultAPIOptions(apiURL, version, cookieJar, transport, poolSize)
+
+ if host := os.Getenv("BRIDGE_API_HOST"); host != "" {
+ opt = append(opt, liteapi.WithHostURL(host))
+ }
+
+ if debug := os.Getenv("BRIDGE_API_DEBUG"); debug != "" {
+ opt = append(opt, liteapi.WithDebug(true))
+ }
+
+ if skipVerify := os.Getenv("BRIDGE_API_SKIP_VERIFY"); skipVerify != "" {
+ opt = append(opt, liteapi.WithSkipVerifyProofs())
+ }
+
+ return opt
+}
diff --git a/internal/bridge/bridge.go b/internal/bridge/bridge.go
index 3ffb0048..1c76e9db 100644
--- a/internal/bridge/bridge.go
+++ b/internal/bridge/bridge.go
@@ -139,14 +139,7 @@ func New( //nolint:funlen
logSMTP bool, // whether to log SMTP activity
) (*Bridge, <-chan events.Event, error) {
// api is the user's API manager.
- api := liteapi.New(
- liteapi.WithHostURL(apiURL),
- liteapi.WithAppVersion(constants.AppVersion(curVersion.Original())),
- liteapi.WithCookieJar(cookieJar),
- liteapi.WithTransport(roundTripper),
- liteapi.WithAttPoolSize(vault.SyncAttPool()),
- liteapi.WithLogger(logrus.StandardLogger()),
- )
+ api := liteapi.New(newAPIOptions(apiURL, curVersion, cookieJar, roundTripper, vault.SyncAttPool())...)
// tasks holds all the bridge's background tasks.
tasks := async.NewGroup(context.Background(), crashHandler)