diff --git a/extension/chrome/dev/ci_unit_test.ts b/extension/chrome/dev/ci_unit_test.ts index fc65a96c995..5af0ca66846 100644 --- a/extension/chrome/dev/ci_unit_test.ts +++ b/extension/chrome/dev/ci_unit_test.ts @@ -2,8 +2,8 @@ 'use strict'; -import { ApiErr } from '../../js/common/api/error/api-error.js'; -import { WellKnownHostMeta } from '../../js/common/api/well-known-host-meta.js'; +import { ApiErr } from '../../js/common/api/shared/api-error.js'; +import { WellKnownHostMeta } from '../../js/common/api/account-servers/well-known-host-meta.js'; /** * importing all libs that are tested in ci tests diff --git a/extension/chrome/dev/export.ts b/extension/chrome/dev/export.ts index 049bc03139f..f14902b57e3 100644 --- a/extension/chrome/dev/export.ts +++ b/extension/chrome/dev/export.ts @@ -4,7 +4,7 @@ import { GmailParser, GmailRes } from '../../js/common/api/email-provider/gmail/gmail-parser.js'; -import { ApiErr } from '../../js/common/api/error/api-error.js'; +import { ApiErr } from '../../js/common/api/shared/api-error.js'; import { Assert } from '../../js/common/assert.js'; import { Att } from '../../js/common/core/att.js'; import { Browser } from '../../js/common/browser/browser.js'; diff --git a/extension/chrome/elements/attachment.ts b/extension/chrome/elements/attachment.ts index fd3cda4418a..baf91fb5a8c 100644 --- a/extension/chrome/elements/attachment.ts +++ b/extension/chrome/elements/attachment.ts @@ -5,8 +5,8 @@ import { Bm, BrowserMsg } from '../../js/common/browser/browser-msg.js'; import { DecryptErrTypes, MsgUtil } from '../../js/common/core/crypto/pgp/msg-util.js'; import { PromiseCancellation, Url } from '../../js/common/core/common.js'; -import { Api } from '../../js/common/api/api.js'; -import { ApiErr } from '../../js/common/api/error/api-error.js'; +import { Api } from '../../js/common/api/shared/api.js'; +import { ApiErr } from '../../js/common/api/shared/api-error.js'; import { Assert } from '../../js/common/assert.js'; import { Att } from '../../js/common/core/att.js'; import { Browser } from '../../js/common/browser/browser.js'; diff --git a/extension/chrome/elements/compose-modules/compose-draft-module.ts b/extension/chrome/elements/compose-modules/compose-draft-module.ts index ca6f782cfb2..c160b9daaa7 100644 --- a/extension/chrome/elements/compose-modules/compose-draft-module.ts +++ b/extension/chrome/elements/compose-modules/compose-draft-module.ts @@ -4,8 +4,8 @@ import { Mime, MimeContent, MimeProccesedMsg } from '../../../js/common/core/mime.js'; import { AcctStore } from '../../../js/common/platform/store/acct-store.js'; -import { AjaxErr } from '../../../js/common/api/error/api-error.js'; -import { ApiErr } from '../../../js/common/api/error/api-error.js'; +import { AjaxErr } from '../../../js/common/api/shared/api-error.js'; +import { ApiErr } from '../../../js/common/api/shared/api-error.js'; import { BrowserMsg } from '../../../js/common/browser/browser-msg.js'; import { Buf } from '../../../js/common/core/buf.js'; import { Catch } from '../../../js/common/platform/catch.js'; @@ -15,7 +15,7 @@ import { GmailRes } from '../../../js/common/api/email-provider/gmail/gmail-pars import { MsgBlockParser } from '../../../js/common/core/msg-block-parser.js'; import { NewMsgData } from './compose-types.js'; import { MsgUtil } from '../../../js/common/core/crypto/pgp/msg-util.js'; -import { storageLocalGet, storageLocalSet, storageLocalRemove } from '../../../js/common/api/chrome.js'; +import { storageLocalGet, storageLocalSet, storageLocalRemove } from '../../../js/common/browser/chrome.js'; import { Ui } from '../../../js/common/browser/ui.js'; import { Url } from '../../../js/common/core/common.js'; import { Xss } from '../../../js/common/platform/xss.js'; diff --git a/extension/chrome/elements/compose-modules/compose-err-module.ts b/extension/chrome/elements/compose-modules/compose-err-module.ts index 30f5ea4be2c..8a735c7f4d1 100644 --- a/extension/chrome/elements/compose-modules/compose-err-module.ts +++ b/extension/chrome/elements/compose-modules/compose-err-module.ts @@ -6,7 +6,7 @@ import { Browser } from '../../../js/common/browser/browser.js'; import { BrowserEventErrHandler, Ui } from '../../../js/common/browser/ui.js'; import { Catch } from '../../../js/common/platform/catch.js'; import { NewMsgData, SendBtnTexts } from './compose-types.js'; -import { ApiErr } from '../../../js/common/api/error/api-error.js'; +import { ApiErr } from '../../../js/common/api/shared/api-error.js'; import { BrowserExtension } from '../../../js/common/browser/browser-extension.js'; import { BrowserMsg } from '../../../js/common/browser/browser-msg.js'; import { KeyInfo } from '../../../js/common/core/crypto/key.js'; @@ -15,7 +15,7 @@ import { Str } from '../../../js/common/core/common.js'; import { Xss } from '../../../js/common/platform/xss.js'; import { ViewModule } from '../../../js/common/view-module.js'; import { ComposeView } from '../compose.js'; -import { AjaxErrMsgs } from '../../../js/common/api/error/api-error.js'; +import { AjaxErrMsgs } from '../../../js/common/api/shared/api-error.js'; export class ComposerUserError extends Error { } export class ComposerNotReadyError extends ComposerUserError { } diff --git a/extension/chrome/elements/compose-modules/compose-my-pubkey-module.ts b/extension/chrome/elements/compose-modules/compose-my-pubkey-module.ts index 2d118ef8b70..a7b2cf3b0e4 100644 --- a/extension/chrome/elements/compose-modules/compose-my-pubkey-module.ts +++ b/extension/chrome/elements/compose-modules/compose-my-pubkey-module.ts @@ -2,7 +2,7 @@ 'use strict'; -import { ApiErr } from '../../../js/common/api/error/api-error.js'; +import { ApiErr } from '../../../js/common/api/shared/api-error.js'; import { Catch } from '../../../js/common/platform/catch.js'; import { KeyInfo, KeyUtil } from '../../../js/common/core/crypto/key.js'; import { Lang } from '../../../js/common/lang.js'; diff --git a/extension/chrome/elements/compose-modules/compose-pwd-or-pubkey-container-module.ts b/extension/chrome/elements/compose-modules/compose-pwd-or-pubkey-container-module.ts index 16c6fea5291..3e867927d45 100644 --- a/extension/chrome/elements/compose-modules/compose-pwd-or-pubkey-container-module.ts +++ b/extension/chrome/elements/compose-modules/compose-pwd-or-pubkey-container-module.ts @@ -2,15 +2,16 @@ 'use strict'; -import { Backend } from '../../../js/common/api/backend.js'; + import { RecipientStatuses, SendBtnTexts } from './compose-types.js'; import { KeyImportUi } from '../../../js/common/ui/key-import-ui.js'; import { Catch } from '../../../js/common/platform/catch.js'; import { Str } from '../../../js/common/core/common.js'; -import { ApiErr } from '../../../js/common/api/error/api-error.js'; +import { ApiErr } from '../../../js/common/api/shared/api-error.js'; import { ViewModule } from '../../../js/common/view-module.js'; import { ComposeView } from '../compose.js'; import { AcctStore } from '../../../js/common/platform/store/acct-store.js'; +import { AccountServer } from '../../../js/common/api/account-server.js'; export class ComposePwdOrPubkeyContainerModule extends ViewModule { @@ -90,7 +91,7 @@ export class ComposePwdOrPubkeyContainerModule extends ViewModule { expirationTextEl.text(Str.pluralize(this.MSG_EXPIRE_DAYS_DEFAULT, 'day')); } else { try { - const response = await Backend.accountGetAndUpdateLocalStore(authInfo); + const response = await AccountServer.accountGetAndUpdateLocalStore(authInfo); expirationTextEl.text(Str.pluralize(response.account.default_message_expire, 'day')); } catch (e) { ApiErr.reportIfSignificant(e); diff --git a/extension/chrome/elements/compose-modules/compose-quote-module.ts b/extension/chrome/elements/compose-modules/compose-quote-module.ts index 53862cc5084..5adde72b83b 100644 --- a/extension/chrome/elements/compose-modules/compose-quote-module.ts +++ b/extension/chrome/elements/compose-modules/compose-quote-module.ts @@ -4,7 +4,7 @@ import { Bm, BrowserMsg } from '../../../js/common/browser/browser-msg.js'; import { FormatError, MsgUtil, DecryptErrTypes } from '../../../js/common/core/crypto/pgp/msg-util.js'; -import { ApiErr } from '../../../js/common/api/error/api-error.js'; +import { ApiErr } from '../../../js/common/api/shared/api-error.js'; import { Buf } from '../../../js/common/core/buf.js'; import { Catch } from '../../../js/common/platform/catch.js'; import { Mime } from '../../../js/common/core/mime.js'; diff --git a/extension/chrome/elements/compose-modules/compose-recipients-module.ts b/extension/chrome/elements/compose-modules/compose-recipients-module.ts index ca2a676353c..558f4d29741 100644 --- a/extension/chrome/elements/compose-modules/compose-recipients-module.ts +++ b/extension/chrome/elements/compose-modules/compose-recipients-module.ts @@ -2,17 +2,17 @@ 'use strict'; -import { ChunkedCb, RecipientType } from '../../../js/common/api/api.js'; +import { ChunkedCb, RecipientType } from '../../../js/common/api/shared/api.js'; import { Contact } from '../../../js/common/core/crypto/key.js'; import { PUBKEY_LOOKUP_RESULT_FAIL, PUBKEY_LOOKUP_RESULT_WRONG } from './compose-err-module.js'; import { ProviderContactsQuery, Recipients } from '../../../js/common/api/email-provider/email-provider-api.js'; import { RecipientElement, RecipientStatus, RecipientStatuses } from './compose-types.js'; import { Str, Value } from '../../../js/common/core/common.js'; -import { ApiErr } from '../../../js/common/api/error/api-error.js'; +import { ApiErr } from '../../../js/common/api/shared/api-error.js'; import { Bm, BrowserMsg } from '../../../js/common/browser/browser-msg.js'; import { Catch } from '../../../js/common/platform/catch.js'; -import { Google } from '../../../js/common/api/google.js'; -import { GoogleAuth } from '../../../js/common/api/google-auth.js'; +import { Google } from '../../../js/common/api/email-provider/gmail/google.js'; +import { GoogleAuth } from '../../../js/common/api/email-provider/gmail/google-auth.js'; import { Lang } from '../../../js/common/lang.js'; import { Ui } from '../../../js/common/browser/ui.js'; import { Xss } from '../../../js/common/platform/xss.js'; diff --git a/extension/chrome/elements/compose-modules/compose-render-module.ts b/extension/chrome/elements/compose-modules/compose-render-module.ts index f8a35f50643..2d81fd00622 100644 --- a/extension/chrome/elements/compose-modules/compose-render-module.ts +++ b/extension/chrome/elements/compose-modules/compose-render-module.ts @@ -8,7 +8,7 @@ import { BrowserMsg } from '../../../js/common/browser/browser-msg.js'; import { Catch } from '../../../js/common/platform/catch.js'; import { KeyImportUi } from '../../../js/common/ui/key-import-ui.js'; import { Lang } from '../../../js/common/lang.js'; -import { RecipientType } from '../../../js/common/api/api.js'; +import { RecipientType } from '../../../js/common/api/shared/api.js'; import { Recipients } from '../../../js/common/api/email-provider/email-provider-api.js'; import { SendableMsg } from '../../../js/common/api/email-provider/sendable-msg.js'; import { Str } from '../../../js/common/core/common.js'; @@ -16,7 +16,7 @@ import { Ui } from '../../../js/common/browser/ui.js'; import { Xss } from '../../../js/common/platform/xss.js'; import { ViewModule } from '../../../js/common/view-module.js'; import { ComposeView } from '../compose.js'; -import { ApiErr } from '../../../js/common/api/error/api-error.js'; +import { ApiErr } from '../../../js/common/api/shared/api-error.js'; import { GmailParser } from '../../../js/common/api/email-provider/gmail/gmail-parser.js'; import { KeyStore } from '../../../js/common/platform/store/key-store.js'; import { ContactStore } from '../../../js/common/platform/store/contact-store.js'; diff --git a/extension/chrome/elements/compose-modules/compose-send-btn-module.ts b/extension/chrome/elements/compose-modules/compose-send-btn-module.ts index 8c1c249ca64..a0279d1d00d 100644 --- a/extension/chrome/elements/compose-modules/compose-send-btn-module.ts +++ b/extension/chrome/elements/compose-modules/compose-send-btn-module.ts @@ -2,7 +2,7 @@ 'use strict'; -import { ApiErr } from '../../../js/common/api/error/api-error.js'; +import { ApiErr } from '../../../js/common/api/shared/api-error.js'; import { Att } from '../../../js/common/core/att.js'; import { BrowserMsg } from '../../../js/common/browser/browser-msg.js'; import { Catch } from '../../../js/common/platform/catch.js'; diff --git a/extension/chrome/elements/compose-modules/compose-sender-module.ts b/extension/chrome/elements/compose-modules/compose-sender-module.ts index 3d411ef115e..7fe4e8c0aa4 100644 --- a/extension/chrome/elements/compose-modules/compose-sender-module.ts +++ b/extension/chrome/elements/compose-modules/compose-sender-module.ts @@ -2,7 +2,7 @@ 'use strict'; -import { ApiErr } from '../../../js/common/api/error/api-error.js'; +import { ApiErr } from '../../../js/common/api/shared/api-error.js'; import { BrowserMsg } from '../../../js/common/browser/browser-msg.js'; import { Settings } from '../../../js/common/settings.js'; import { Xss } from '../../../js/common/platform/xss.js'; diff --git a/extension/chrome/elements/compose-modules/compose-storage-module.ts b/extension/chrome/elements/compose-modules/compose-storage-module.ts index 021205daeb2..1b712f78710 100644 --- a/extension/chrome/elements/compose-modules/compose-storage-module.ts +++ b/extension/chrome/elements/compose-modules/compose-storage-module.ts @@ -4,7 +4,7 @@ import { Bm, BrowserMsg } from '../../../js/common/browser/browser-msg.js'; import { Contact, KeyInfo, KeyUtil, Key } from '../../../js/common/core/crypto/key.js'; -import { ApiErr } from '../../../js/common/api/error/api-error.js'; +import { ApiErr } from '../../../js/common/api/shared/api-error.js'; import { Assert } from '../../../js/common/assert.js'; import { Catch } from '../../../js/common/platform/catch.js'; import { CollectPubkeysResult } from './compose-types.js'; @@ -16,8 +16,9 @@ import { AcctStore } from '../../../js/common/platform/store/acct-store.js'; import { GlobalStore } from '../../../js/common/platform/store/global-store.js'; import { ContactStore } from '../../../js/common/platform/store/contact-store.js'; import { PassphraseStore } from '../../../js/common/platform/store/passphrase-store.js'; -import { Backend } from '../../../js/common/api/backend.js'; + import { Settings } from '../../../js/common/settings.js'; +import { AccountServer } from '../../../js/common/api/account-server.js'; export class ComposeStorageModule extends ViewModule { @@ -211,7 +212,7 @@ export class ComposeStorageModule extends ViewModule { const auth = await AcctStore.authInfo(this.view.acctEmail); if (auth.uuid) { try { - await Backend.accountGetAndUpdateLocalStore(auth); // updates storage + await AccountServer.accountGetAndUpdateLocalStore(auth); // updates storage } catch (e) { if (ApiErr.isAuthErr(e)) { Settings.offerToLoginWithPopupShowModalOnErr( diff --git a/extension/chrome/elements/compose-modules/compose-types.ts b/extension/chrome/elements/compose-modules/compose-types.ts index b445fd0c190..451e42daa5d 100644 --- a/extension/chrome/elements/compose-modules/compose-types.ts +++ b/extension/chrome/elements/compose-modules/compose-types.ts @@ -2,7 +2,7 @@ 'use strict'; -import { RecipientType } from '../../../js/common/api/api.js'; +import { RecipientType } from '../../../js/common/api/shared/api.js'; import { Recipients } from '../../../js/common/api/email-provider/email-provider-api.js'; import { PubkeyResult } from '../../../js/common/core/crypto/key.js'; diff --git a/extension/chrome/elements/compose-modules/formatters/encrypted-mail-msg-formatter.ts b/extension/chrome/elements/compose-modules/formatters/encrypted-mail-msg-formatter.ts index 02d5293b69e..0b858ff0169 100644 --- a/extension/chrome/elements/compose-modules/formatters/encrypted-mail-msg-formatter.ts +++ b/extension/chrome/elements/compose-modules/formatters/encrypted-mail-msg-formatter.ts @@ -2,13 +2,13 @@ 'use strict'; -import { Backend, FcUuidAuth } from '../../../../js/common/api/backend.js'; + import { BaseMailFormatter } from './base-mail-formatter.js'; import { ComposerResetBtnTrigger } from '../compose-err-module.js'; import { Mime, SendableMsgBody } from '../../../../js/common/core/mime.js'; import { NewMsgData } from '../compose-types.js'; import { Str, Value } from '../../../../js/common/core/common.js'; -import { ApiErr } from '../../../../js/common/api/error/api-error.js'; +import { ApiErr } from '../../../../js/common/api/shared/api-error.js'; import { Att } from '../../../../js/common/core/att.js'; import { Buf } from '../../../../js/common/core/buf.js'; import { Catch } from '../../../../js/common/platform/catch.js'; @@ -21,6 +21,9 @@ import { Ui } from '../../../../js/common/browser/ui.js'; import { Xss } from '../../../../js/common/platform/xss.js'; import { ContactStore } from '../../../../js/common/platform/store/contact-store.js'; import { AcctStore } from '../../../../js/common/platform/store/acct-store.js'; +import { FlowCryptWebsite } from '../../../../js/common/api/flowcrypt-website.js'; +import { AccountServer } from '../../../../js/common/api/account-server.js'; +import { FcUuidAuth } from '../../../../js/common/api/account-servers/flowcrypt-com-api.js'; export class EncryptedMsgMailFormatter extends BaseMailFormatter { @@ -43,7 +46,7 @@ export class EncryptedMsgMailFormatter extends BaseMailFormatter { const msgBodyWithReplyToken = await this.getPwdMsgSendableBodyWithOnlineReplyMsgToken(authInfo, newMsg); const pgpMimeWithAtts = await Mime.encode(msgBodyWithReplyToken, { Subject: newMsg.subject }, await this.view.attsModule.attach.collectAtts()); const { data: pwdEncryptedWithAtts } = await this.encryptDataArmor(Buf.fromUtfStr(pgpMimeWithAtts), newMsg.pwd, []); // encrypted only for pwd, not signed - const { short, admin_code } = await Backend.messageUpload( + const { short, admin_code } = await AccountServer.messageUpload( authInfo.uuid ? authInfo : undefined, pwdEncryptedWithAtts, (p) => this.view.sendBtnModule.renderUploadProgress(p, 'FIRST-HALF'), // still need to upload to Gmail later, this request represents first half of progress @@ -97,7 +100,7 @@ export class EncryptedMsgMailFormatter extends BaseMailFormatter { } const recipients = Array.prototype.concat.apply([], Object.values(newMsgData.recipients)); try { - const response = await Backend.messageToken(authInfo); + const response = await AccountServer.messageToken(authInfo); const infoDiv = Ui.e('div', { 'style': 'display: none;', 'class': 'cryptup_reply', @@ -165,7 +168,7 @@ export class EncryptedMsgMailFormatter extends BaseMailFormatter { private formatPwdEncryptedMsgBodyLink = async (short: string): Promise => { const storage = await AcctStore.get(this.acctEmail, ['outgoing_language']); const lang = storage.outgoing_language || 'EN'; - const msgUrl = Backend.url('decrypt', short); + const msgUrl = FlowCryptWebsite.url('decrypt', short); const aStyle = `padding: 2px 6px; background: #2199e8; color: #fff; display: inline-block; text-decoration: none;`; const a = `${Lang.compose.openMsg[lang]}`; const intro = this.view.S.cached('input_intro').length ? this.view.inputModule.extract('text', 'input_intro') : undefined; diff --git a/extension/chrome/elements/compose.ts b/extension/chrome/elements/compose.ts index 23669120c11..339391c7ceb 100644 --- a/extension/chrome/elements/compose.ts +++ b/extension/chrome/elements/compose.ts @@ -3,7 +3,7 @@ 'use strict'; import { EmailProviderInterface, ReplyParams } from '../../js/common/api/email-provider/email-provider-api.js'; -import { ApiErr } from '../../js/common/api/error/api-error.js'; +import { ApiErr } from '../../js/common/api/shared/api-error.js'; import { Assert } from '../../js/common/assert.js'; import { BrowserMsg } from '../../js/common/browser/browser-msg.js'; import { Gmail } from '../../js/common/api/email-provider/gmail/gmail.js'; diff --git a/extension/chrome/elements/pgp_block_modules/pgp-block-attachmens-module.ts b/extension/chrome/elements/pgp_block_modules/pgp-block-attachmens-module.ts index c65b9209a85..70f0c079f26 100644 --- a/extension/chrome/elements/pgp_block_modules/pgp-block-attachmens-module.ts +++ b/extension/chrome/elements/pgp_block_modules/pgp-block-attachmens-module.ts @@ -2,7 +2,7 @@ 'use strict'; -import { Api } from '../../../js/common/api/api.js'; +import { Api } from '../../../js/common/api/shared/api.js'; import { Att } from '../../../js/common/core/att.js'; import { Browser } from '../../../js/common/browser/browser.js'; import { BrowserMsg } from '../../../js/common/browser/browser-msg.js'; diff --git a/extension/chrome/elements/pgp_block_modules/pgp-block-error-module.ts b/extension/chrome/elements/pgp_block_modules/pgp-block-error-module.ts index f3443a71108..dc8faebeb94 100644 --- a/extension/chrome/elements/pgp_block_modules/pgp-block-error-module.ts +++ b/extension/chrome/elements/pgp_block_modules/pgp-block-error-module.ts @@ -2,7 +2,7 @@ 'use strict'; -import { ApiErr } from '../../../js/common/api/error/api-error.js'; +import { ApiErr } from '../../../js/common/api/shared/api-error.js'; import { Browser } from '../../../js/common/browser/browser.js'; import { BrowserMsg } from '../../../js/common/browser/browser-msg.js'; import { Catch } from '../../../js/common/platform/catch.js'; diff --git a/extension/chrome/elements/pgp_block_modules/pgp-block-signature-module.ts b/extension/chrome/elements/pgp_block_modules/pgp-block-signature-module.ts index 50d3c6f72a8..9a8ab5897a2 100644 --- a/extension/chrome/elements/pgp_block_modules/pgp-block-signature-module.ts +++ b/extension/chrome/elements/pgp_block_modules/pgp-block-signature-module.ts @@ -2,7 +2,7 @@ 'use strict'; -import { ApiErr } from '../../../js/common/api/error/api-error.js'; +import { ApiErr } from '../../../js/common/api/shared/api-error.js'; import { BrowserMsg } from '../../../js/common/browser/browser-msg.js'; import { Catch } from '../../../js/common/platform/catch.js'; import { PgpBlockView } from '../pgp_block'; diff --git a/extension/chrome/elements/subscribe.ts b/extension/chrome/elements/subscribe.ts index 801d2869bd2..4d5d9af7126 100644 --- a/extension/chrome/elements/subscribe.ts +++ b/extension/chrome/elements/subscribe.ts @@ -2,10 +2,9 @@ 'use strict'; -import { Backend, FcUuidAuth, PaymentMethod, SubscriptionLevel } from '../../js/common/api/backend.js'; import { Bm, BrowserMsg } from '../../js/common/browser/browser-msg.js'; import { Str, Url } from '../../js/common/core/common.js'; -import { ApiErr } from '../../js/common/api/error/api-error.js'; +import { ApiErr } from '../../js/common/api/shared/api-error.js'; import { Assert } from '../../js/common/assert.js'; import { Catch } from '../../js/common/platform/catch.js'; import { Lang } from '../../js/common/lang.js'; @@ -15,6 +14,8 @@ import { View } from '../../js/common/view.js'; import { Xss } from '../../js/common/platform/xss.js'; import { XssSafeFactory } from '../../js/common/xss-safe-factory.js'; import { AcctStore } from '../../js/common/platform/store/acct-store.js'; +import { FcUuidAuth, FlowCryptComApi, PaymentMethod, SubscriptionLevel } from '../../js/common/api/account-servers/flowcrypt-com-api.js'; +import { AccountServer } from '../../js/common/api/account-server.js'; // todo - this page should be removed, link from settings should point to flowcrypt.com/account once available @@ -73,7 +74,7 @@ View.run(class SubscribeView extends View { private renderSubscriptionDetails = async () => { this.authInfo = await AcctStore.authInfo(this.acctEmail); try { - await Backend.accountGetAndUpdateLocalStore(this.authInfo); + await AccountServer.accountGetAndUpdateLocalStore(this.authInfo); } catch (e) { if (ApiErr.isAuthErr(e)) { Xss.sanitizeRender('#content', `Not logged in. ${Ui.retryLink()}`); @@ -124,7 +125,7 @@ View.run(class SubscribeView extends View { private subscribeAndHandleResult = async (chosenProduct: Product, source: string | undefined) => { try { - const response = await Backend.accountSubscribe(this.authInfo!, chosenProduct.id!, chosenProduct.method!, source); + const response = await FlowCryptComApi.accountSubscribe(this.authInfo!, chosenProduct.id!, chosenProduct.method!, source); if (response.subscription.level === chosenProduct.level && response.subscription.method === chosenProduct.method) { await Ui.modal.info('Successfully upgraded to FlowCrypt Advanced.'); this.closeDialog(); diff --git a/extension/chrome/settings/inbox/inbox-modules/inbox-active-thread-module.ts b/extension/chrome/settings/inbox/inbox-modules/inbox-active-thread-module.ts index 528d307fe98..5c00068d35f 100644 --- a/extension/chrome/settings/inbox/inbox-modules/inbox-active-thread-module.ts +++ b/extension/chrome/settings/inbox/inbox-modules/inbox-active-thread-module.ts @@ -7,7 +7,7 @@ import { FactoryReplyParams, XssSafeFactory } from '../../../../js/common/xss-sa import { GmailParser, GmailRes } from '../../../../js/common/api/email-provider/gmail/gmail-parser.js'; import { Url, UrlParams } from '../../../../js/common/core/common.js'; -import { ApiErr } from '../../../../js/common/api/error/api-error.js'; +import { ApiErr } from '../../../../js/common/api/shared/api-error.js'; import { BrowserMsgCommonHandlers } from '../../../../js/common/browser/browser-msg-common-handlers.js'; import { Buf } from '../../../../js/common/core/buf.js'; import { Catch } from '../../../../js/common/platform/catch.js'; diff --git a/extension/chrome/settings/inbox/inbox-modules/inbox-list-threads-module.ts b/extension/chrome/settings/inbox/inbox-modules/inbox-list-threads-module.ts index 1ba9c4c8091..e9a09aae3ba 100644 --- a/extension/chrome/settings/inbox/inbox-modules/inbox-list-threads-module.ts +++ b/extension/chrome/settings/inbox/inbox-modules/inbox-list-threads-module.ts @@ -2,7 +2,7 @@ 'use strict'; -import { ApiErr } from '../../../../js/common/api/error/api-error.js'; +import { ApiErr } from '../../../../js/common/api/shared/api-error.js'; import { Catch } from '../../../../js/common/platform/catch.js'; import { GmailParser } from '../../../../js/common/api/email-provider/gmail/gmail-parser.js'; import { InboxView } from '../inbox.js'; diff --git a/extension/chrome/settings/inbox/inbox-modules/inbox-menu-module.ts b/extension/chrome/settings/inbox/inbox-modules/inbox-menu-module.ts index 319af495d3e..a93b9fdf4de 100644 --- a/extension/chrome/settings/inbox/inbox-modules/inbox-menu-module.ts +++ b/extension/chrome/settings/inbox/inbox-modules/inbox-menu-module.ts @@ -5,7 +5,7 @@ import { Catch } from '../../../../js/common/platform/catch.js'; import { Dict } from '../../../../js/common/core/common.js'; import { GmailRes } from '../../../../js/common/api/email-provider/gmail/gmail-parser.js'; -import { Google } from '../../../../js/common/api/google.js'; +import { Google } from '../../../../js/common/api/email-provider/gmail/google.js'; import { InboxView } from '../inbox.js'; import { ViewModule } from '../../../../js/common/view-module.js'; import { Xss } from '../../../../js/common/platform/xss.js'; diff --git a/extension/chrome/settings/inbox/inbox-modules/inbox-notification-module.ts b/extension/chrome/settings/inbox/inbox-modules/inbox-notification-module.ts index 00289245385..cc7269d60e7 100644 --- a/extension/chrome/settings/inbox/inbox-modules/inbox-notification-module.ts +++ b/extension/chrome/settings/inbox/inbox-modules/inbox-notification-module.ts @@ -5,7 +5,7 @@ import { Bm, BrowserMsg } from '../../../../js/common/browser/browser-msg.js'; import { Dict } from '../../../../js/common/core/common.js'; -import { GoogleAuth } from '../../../../js/common/api/google-auth.js'; +import { GoogleAuth } from '../../../../js/common/api/email-provider/gmail/google-auth.js'; import { InboxView } from '../inbox.js'; import { Notifications } from '../../../../js/common/notifications.js'; import { ViewModule } from '../../../../js/common/view-module.js'; diff --git a/extension/chrome/settings/inbox/inbox.ts b/extension/chrome/settings/inbox/inbox.ts index f69bf84977f..0fc9bd1923c 100644 --- a/extension/chrome/settings/inbox/inbox.ts +++ b/extension/chrome/settings/inbox/inbox.ts @@ -4,7 +4,7 @@ import { SelCache, Ui } from '../../../js/common/browser/ui.js'; import { Url, UrlParams } from '../../../js/common/core/common.js'; -import { ApiErr } from '../../../js/common/api/error/api-error.js'; +import { ApiErr } from '../../../js/common/api/shared/api-error.js'; import { Assert } from '../../../js/common/assert.js'; import { Browser } from '../../../js/common/browser/browser.js'; import { BrowserMsg, Bm } from '../../../js/common/browser/browser-msg.js'; diff --git a/extension/chrome/settings/index.ts b/extension/chrome/settings/index.ts index 26432760f77..e72d48c59ab 100644 --- a/extension/chrome/settings/index.ts +++ b/extension/chrome/settings/index.ts @@ -6,9 +6,9 @@ import { Bm, BrowserMsg } from '../../js/common/browser/browser-msg.js'; import { Ui } from '../../js/common/browser/ui.js'; import { KeyInfo, KeyUtil } from '../../js/common/core/crypto/key.js'; import { Str, Url, UrlParams } from '../../js/common/core/common.js'; -import { ApiErr } from '../../js/common/api/error/api-error.js'; +import { ApiErr } from '../../js/common/api/shared/api-error.js'; import { Assert } from '../../js/common/assert.js'; -import { Backend } from '../../js/common/api/backend.js'; + import { Catch } from '../../js/common/platform/catch.js'; import { Env } from '../../js/common/browser/env.js'; import { Gmail } from '../../js/common/api/email-provider/gmail/gmail.js'; @@ -26,6 +26,8 @@ import { GlobalStore } from '../../js/common/platform/store/global-store.js'; import { PassphraseStore } from '../../js/common/platform/store/passphrase-store.js'; import Swal from 'sweetalert2'; import { Subscription } from '../../js/common/subscription.js'; +import { FlowCryptWebsite } from '../../js/common/api/flowcrypt-website.js'; +import { AccountServer } from '../../js/common/api/account-server.js'; View.run(class SettingsView extends View { @@ -270,7 +272,7 @@ View.run(class SettingsView extends View { $('.hide_if_setup_not_done').css('display', 'none'); } } - Backend.retrieveBlogPosts().then(posts => { // do not await because may take a while + FlowCryptWebsite.retrieveBlogPosts().then(posts => { // do not await because may take a while for (const post of posts) { const html = `
${Xss.escape(post.title.trim())} ${Xss.escape(post.date.trim())}
`; Xss.sanitizeAppend('.blog_post_list', html); @@ -305,7 +307,7 @@ View.run(class SettingsView extends View { const authInfo = await AcctStore.authInfo(this.acctEmail!); if (authInfo.uuid) { // have auth email set try { - const response = await Backend.accountGetAndUpdateLocalStore(authInfo); + const response = await AccountServer.accountGetAndUpdateLocalStore(authInfo); $('#status-row #status_flowcrypt').text(`fc:ok`); if (response?.account?.alias) { statusContainer.find('.status-indicator-text').css('display', 'none'); diff --git a/extension/chrome/settings/modules/account.ts b/extension/chrome/settings/modules/account.ts index 9e7bdd13544..5dc9ce22278 100644 --- a/extension/chrome/settings/modules/account.ts +++ b/extension/chrome/settings/modules/account.ts @@ -2,9 +2,9 @@ 'use strict'; -import { ApiErr } from '../../../js/common/api/error/api-error.js'; +import { ApiErr } from '../../../js/common/api/shared/api-error.js'; import { Assert } from '../../../js/common/assert.js'; -import { Backend } from '../../../js/common/api/backend.js'; + import { Settings } from '../../../js/common/settings.js'; import { Ui } from '../../../js/common/browser/ui.js'; import { Url } from '../../../js/common/core/common.js'; @@ -12,6 +12,7 @@ import { View } from '../../../js/common/view.js'; import { Xss } from '../../../js/common/platform/xss.js'; import { AcctStore } from '../../../js/common/platform/store/acct-store.js'; import { Subscription } from '../../../js/common/subscription.js'; +import { AccountServer } from '../../../js/common/api/account-server.js'; // todo - this this page should be removed, link from settings should point to flowcrypt.com/account once available @@ -32,7 +33,7 @@ View.run(class AccountView extends View { const authInfo = await AcctStore.authInfo(this.acctEmail); let subscription = await AcctStore.getSubscription(this.acctEmail); try { - const r = await Backend.accountGetAndUpdateLocalStore(authInfo); + const r = await AccountServer.accountGetAndUpdateLocalStore(authInfo); subscription = new Subscription(r.subscription); } catch (e) { if (ApiErr.isAuthErr(e) && subscription.level) { diff --git a/extension/chrome/settings/modules/add_key.ts b/extension/chrome/settings/modules/add_key.ts index a0a13de11c8..e2f50e894dd 100644 --- a/extension/chrome/settings/modules/add_key.ts +++ b/extension/chrome/settings/modules/add_key.ts @@ -4,7 +4,7 @@ import { KeyCanBeFixed, KeyImportUi, UserAlert } from '../../../js/common/ui/key-import-ui.js'; import { Url } from '../../../js/common/core/common.js'; -import { ApiErr } from '../../../js/common/api/error/api-error.js'; +import { ApiErr } from '../../../js/common/api/shared/api-error.js'; import { Assert } from '../../../js/common/assert.js'; import { BrowserMsg } from '../../../js/common/browser/browser-msg.js'; import { Catch } from '../../../js/common/platform/catch.js'; diff --git a/extension/chrome/settings/modules/backup-automatic-module.ts b/extension/chrome/settings/modules/backup-automatic-module.ts index 2396c4101ae..742e14ffd19 100644 --- a/extension/chrome/settings/modules/backup-automatic-module.ts +++ b/extension/chrome/settings/modules/backup-automatic-module.ts @@ -8,9 +8,9 @@ import { BackupView } from './backup.js'; import { Settings } from '../../../js/common/settings.js'; import { UnreportableError } from '../../../js/common/platform/catch.js'; import { Ui } from '../../../js/common/browser/ui.js'; -import { ApiErr } from '../../../js/common/api/error/api-error.js'; +import { ApiErr } from '../../../js/common/api/shared/api-error.js'; import { Assert } from '../../../js/common/assert.js'; -import { GoogleAuth } from '../../../js/common/api/google-auth.js'; +import { GoogleAuth } from '../../../js/common/api/email-provider/gmail/google-auth.js'; import { KeyStore } from '../../../js/common/platform/store/key-store.js'; import { KeyUtil } from '../../../js/common/core/crypto/key.js'; diff --git a/extension/chrome/settings/modules/backup-manual-module.ts b/extension/chrome/settings/modules/backup-manual-module.ts index 3be54f16d25..e09b1199c16 100644 --- a/extension/chrome/settings/modules/backup-manual-module.ts +++ b/extension/chrome/settings/modules/backup-manual-module.ts @@ -11,7 +11,7 @@ import { SendableMsg } from '../../../js/common/api/email-provider/sendable-msg. import { GMAIL_RECOVERY_EMAIL_SUBJECTS } from '../../../js/common/core/const.js'; import { KeyInfo, KeyUtil } from '../../../js/common/core/crypto/key.js'; import { Ui } from '../../../js/common/browser/ui.js'; -import { ApiErr } from '../../../js/common/api/error/api-error.js'; +import { ApiErr } from '../../../js/common/api/shared/api-error.js'; import { BrowserMsg, Bm } from '../../../js/common/browser/browser-msg.js'; import { Catch } from '../../../js/common/platform/catch.js'; import { Browser } from '../../../js/common/browser/browser.js'; diff --git a/extension/chrome/settings/modules/backup-status-module.ts b/extension/chrome/settings/modules/backup-status-module.ts index ede7544e103..994ff43fa45 100644 --- a/extension/chrome/settings/modules/backup-status-module.ts +++ b/extension/chrome/settings/modules/backup-status-module.ts @@ -6,7 +6,7 @@ import { ViewModule } from '../../../js/common/view-module.js'; import { Xss } from '../../../js/common/platform/xss.js'; import { BackupView } from './backup.js'; import { Ui } from '../../../js/common/browser/ui.js'; -import { ApiErr } from '../../../js/common/api/error/api-error.js'; +import { ApiErr } from '../../../js/common/api/shared/api-error.js'; import { Browser } from '../../../js/common/browser/browser.js'; import { BrowserMsg } from '../../../js/common/browser/browser-msg.js'; import { Backups } from '../../../js/common/api/email-provider/email-provider-api.js'; diff --git a/extension/chrome/settings/modules/contacts.ts b/extension/chrome/settings/modules/contacts.ts index 6d209237466..d3878823179 100644 --- a/extension/chrome/settings/modules/contacts.ts +++ b/extension/chrome/settings/modules/contacts.ts @@ -4,7 +4,7 @@ import { Contact, Key, KeyUtil } from '../../../js/common/core/crypto/key.js'; import { Str, Url } from '../../../js/common/core/common.js'; -import { ApiErr } from '../../../js/common/api/error/api-error.js'; +import { ApiErr } from '../../../js/common/api/shared/api-error.js'; import { Assert } from '../../../js/common/assert.js'; import { Att } from '../../../js/common/core/att.js'; import { AttUI } from '../../../js/common/ui/att-ui.js'; diff --git a/extension/chrome/settings/modules/experimental.ts b/extension/chrome/settings/modules/experimental.ts index 1ef045b99d1..24f6fff2673 100644 --- a/extension/chrome/settings/modules/experimental.ts +++ b/extension/chrome/settings/modules/experimental.ts @@ -8,7 +8,7 @@ import { Browser } from '../../../js/common/browser/browser.js'; import { BrowserMsg } from '../../../js/common/browser/browser-msg.js'; import { Buf } from '../../../js/common/core/buf.js'; import { Catch } from '../../../js/common/platform/catch.js'; -import { GoogleAuth } from '../../../js/common/api/google-auth.js'; +import { GoogleAuth } from '../../../js/common/api/email-provider/gmail/google-auth.js'; import { Lang } from '../../../js/common/lang.js'; import { Settings } from '../../../js/common/settings.js'; import { Ui } from '../../../js/common/browser/ui.js'; @@ -17,7 +17,7 @@ import { View } from '../../../js/common/view.js'; import { KeyStore } from '../../../js/common/platform/store/key-store.js'; import { AcctStore } from '../../../js/common/platform/store/acct-store.js'; import { GlobalStore } from '../../../js/common/platform/store/global-store.js'; -import { Api } from '../../../js/common/api/api.js'; +import { Api } from '../../../js/common/api/shared/api.js'; View.run(class ExperimentalView extends View { diff --git a/extension/chrome/settings/modules/help.ts b/extension/chrome/settings/modules/help.ts index 146ad0494e8..482e51a7911 100644 --- a/extension/chrome/settings/modules/help.ts +++ b/extension/chrome/settings/modules/help.ts @@ -4,15 +4,15 @@ import { Str, Url } from '../../../js/common/core/common.js'; -import { ApiErr } from '../../../js/common/api/error/api-error.js'; +import { ApiErr } from '../../../js/common/api/shared/api-error.js'; import { Assert } from '../../../js/common/assert.js'; -import { Backend } from '../../../js/common/api/backend.js'; import { BrowserMsg } from '../../../js/common/browser/browser-msg.js'; import { Catch } from '../../../js/common/platform/catch.js'; import { Ui } from '../../../js/common/browser/ui.js'; import { VERSION } from '../../../js/common/core/const.js'; import { View } from '../../../js/common/view.js'; import { Xss } from '../../../js/common/platform/xss.js'; +import { FlowCryptWebsite } from '../../../js/common/api/flowcrypt-website.js'; View.run(class HelpView extends View { @@ -62,7 +62,7 @@ View.run(class HelpView extends View { Xss.sanitizeRender(target, Ui.spinner('white')); await Ui.delay(50); // give spinner time to load try { - const { sent } = await Backend.helpFeedback(emailVal, `${textVal}\n\n\nFlowCrypt ${Catch.browser().name} ${VERSION}`); + const { sent } = await FlowCryptWebsite.helpFeedback(emailVal, `${textVal}\n\n\nFlowCrypt ${Catch.browser().name} ${VERSION}`); if (sent) { $(target).text('sent!'); await Ui.modal.info(`Message sent! You will find your response in ${emailVal}, check your email later.`); diff --git a/extension/chrome/settings/modules/keyserver.ts b/extension/chrome/settings/modules/keyserver.ts index 9d70aadb7df..59d1611c7dd 100644 --- a/extension/chrome/settings/modules/keyserver.ts +++ b/extension/chrome/settings/modules/keyserver.ts @@ -4,7 +4,7 @@ import { Dict, Url } from '../../../js/common/core/common.js'; -import { ApiErr } from '../../../js/common/api/error/api-error.js'; +import { ApiErr } from '../../../js/common/api/shared/api-error.js'; import { Assert } from '../../../js/common/assert.js'; import { BrowserMsg } from '../../../js/common/browser/browser-msg.js'; import { Lang } from '../../../js/common/lang.js'; diff --git a/extension/chrome/settings/modules/my_key.ts b/extension/chrome/settings/modules/my_key.ts index 02d262dbc9a..665e49158e6 100644 --- a/extension/chrome/settings/modules/my_key.ts +++ b/extension/chrome/settings/modules/my_key.ts @@ -2,10 +2,9 @@ 'use strict'; -import { ApiErr } from '../../../js/common/api/error/api-error.js'; +import { ApiErr } from '../../../js/common/api/shared/api-error.js'; import { Assert } from '../../../js/common/assert.js'; import { Att } from '../../../js/common/core/att.js'; -import { Backend } from '../../../js/common/api/backend.js'; import { Browser } from '../../../js/common/browser/browser.js'; import { Buf } from '../../../js/common/core/buf.js'; import { KeyInfo, Key, KeyUtil } from '../../../js/common/core/crypto/key.js'; @@ -18,6 +17,7 @@ import { OrgRules } from '../../../js/common/org-rules.js'; import { PassphraseStore } from '../../../js/common/platform/store/passphrase-store.js'; import { KeyStore } from '../../../js/common/platform/store/key-store.js'; import { Xss } from '../../../js/common/platform/xss.js'; +import { FlowCryptWebsite } from '../../../js/common/api/flowcrypt-website.js'; declare const ClipboardJS: any; @@ -71,7 +71,7 @@ View.run(class MyKeyView extends View { private renderPubkeyShareableLink = async () => { try { const result = await this.pubLookup.attester.lookupEmail(this.acctEmail); - const url = Backend.url('pubkey', this.acctEmail); + const url = FlowCryptWebsite.url('pubkey', this.acctEmail); if (result.pubkey && (await KeyUtil.parse(result.pubkey)).id === this.keyInfo.fingerprint) { $('.pubkey_link_container a').text(url.replace('https://', '')).attr('href', url).parent().css('display', ''); } else { diff --git a/extension/chrome/settings/modules/my_key_update.ts b/extension/chrome/settings/modules/my_key_update.ts index 5b28bef0e83..7c79e963adc 100644 --- a/extension/chrome/settings/modules/my_key_update.ts +++ b/extension/chrome/settings/modules/my_key_update.ts @@ -2,7 +2,7 @@ 'use strict'; -import { ApiErr } from '../../../js/common/api/error/api-error.js'; +import { ApiErr } from '../../../js/common/api/shared/api-error.js'; import { Assert } from '../../../js/common/assert.js'; import { KeyInfo, Key, KeyUtil } from '../../../js/common/core/crypto/key.js'; import { Lang } from '../../../js/common/lang.js'; diff --git a/extension/chrome/settings/modules/security.ts b/extension/chrome/settings/modules/security.ts index 418ca09d80f..1f4780b5937 100644 --- a/extension/chrome/settings/modules/security.ts +++ b/extension/chrome/settings/modules/security.ts @@ -2,8 +2,8 @@ 'use strict'; -import { Backend, FcUuidAuth } from '../../../js/common/api/backend.js'; -import { ApiErr } from '../../../js/common/api/error/api-error.js'; + +import { ApiErr } from '../../../js/common/api/shared/api-error.js'; import { Assert } from '../../../js/common/assert.js'; import { Catch } from '../../../js/common/platform/catch.js'; import { KeyInfo } from '../../../js/common/core/crypto/key.js'; @@ -17,6 +17,8 @@ import { AcctStore } from '../../../js/common/platform/store/acct-store.js'; import { KeyStore } from '../../../js/common/platform/store/key-store.js'; import { PassphraseStore } from '../../../js/common/platform/store/passphrase-store.js'; import { OrgRules } from '../../../js/common/org-rules.js'; +import { AccountServer } from '../../../js/common/api/account-server.js'; +import { FcUuidAuth } from '../../../js/common/api/account-servers/flowcrypt-com-api.js'; View.run(class SecurityView extends View { @@ -87,7 +89,7 @@ View.run(class SecurityView extends View { if (subscription.active) { Xss.sanitizeRender('.select_loader_container', Ui.spinner('green')); try { - const response = await Backend.accountGetAndUpdateLocalStore(this.authInfo!); + const response = await AccountServer.accountGetAndUpdateLocalStore(this.authInfo!); $('.select_loader_container').text(''); $('.default_message_expire').val(Number(response.account.default_message_expire).toString()).prop('disabled', false).css('display', 'inline-block'); $('.default_message_expire').change(this.setHandler(() => this.onDefaultExpireUserChange())); @@ -111,7 +113,7 @@ View.run(class SecurityView extends View { private onDefaultExpireUserChange = async () => { Xss.sanitizeRender('.select_loader_container', Ui.spinner('green')); $('.default_message_expire').css('display', 'none'); - await Backend.accountUpdate(this.authInfo!, { default_message_expire: Number($('.default_message_expire').val()) }); + await AccountServer.accountUpdate(this.authInfo!, { default_message_expire: Number($('.default_message_expire').val()) }); window.location.reload(); } diff --git a/extension/chrome/settings/setup.ts b/extension/chrome/settings/setup.ts index 18e9ebbd766..0942511b829 100644 --- a/extension/chrome/settings/setup.ts +++ b/extension/chrome/settings/setup.ts @@ -4,12 +4,12 @@ import { Bm, BrowserMsg } from '../../js/common/browser/browser-msg.js'; import { Url } from '../../js/common/core/common.js'; -import { ApiErr } from '../../js/common/api/error/api-error.js'; +import { ApiErr } from '../../js/common/api/shared/api-error.js'; import { Assert } from '../../js/common/assert.js'; import { Catch } from '../../js/common/platform/catch.js'; import { Contact, KeyInfo, Key, KeyUtil } from '../../js/common/core/crypto/key.js'; import { Gmail } from '../../js/common/api/email-provider/gmail/gmail.js'; -import { Google } from '../../js/common/api/google.js'; +import { Google } from '../../js/common/api/email-provider/gmail/google.js'; import { KeyImportUi } from '../../js/common/ui/key-import-ui.js'; import { Lang } from '../../js/common/lang.js'; import { OrgRules } from '../../js/common/org-rules.js'; @@ -27,7 +27,7 @@ import { Scopes, AcctStoreDict, AcctStore } from '../../js/common/platform/store import { KeyStore } from '../../js/common/platform/store/key-store.js'; import { PassphraseStore } from '../../js/common/platform/store/passphrase-store.js'; import { ContactStore } from '../../js/common/platform/store/contact-store.js'; -import { KeyManager } from '../../js/common/api/key-manager.js'; +import { KeyManager } from '../../js/common/api/key-server/key-manager.js'; import { SetupKeyManagerAutogenModule } from './setup/setup-key-manager-autogen.js'; import Swal from 'sweetalert2'; diff --git a/extension/chrome/settings/setup/setup-key-manager-autogen.ts b/extension/chrome/settings/setup/setup-key-manager-autogen.ts index 5478ff9722c..879a62f7dc9 100644 --- a/extension/chrome/settings/setup/setup-key-manager-autogen.ts +++ b/extension/chrome/settings/setup/setup-key-manager-autogen.ts @@ -8,8 +8,8 @@ import { Url } from '../../../js/common/core/common.js'; import { AcctStore } from '../../../js/common/platform/store/acct-store.js'; import { Buf } from '../../../js/common/core/buf.js'; import { PgpPwd } from '../../../js/common/core/crypto/pgp/pgp-password.js'; -import { ApiErr } from '../../../js/common/api/error/api-error.js'; -import { Api } from '../../../js/common/api/api.js'; +import { ApiErr } from '../../../js/common/api/shared/api-error.js'; +import { Api } from '../../../js/common/api/shared/api.js'; import { Settings } from '../../../js/common/settings.js'; import { KeyUtil } from '../../../js/common/core/crypto/key.js'; import { OpenPGPKey } from '../../../js/common/core/crypto/pgp/openpgp-key.js'; diff --git a/extension/chrome/settings/setup/setup-recover-key.ts b/extension/chrome/settings/setup/setup-recover-key.ts index c5127489a4a..4ef9f4d3e2c 100644 --- a/extension/chrome/settings/setup/setup-recover-key.ts +++ b/extension/chrome/settings/setup/setup-recover-key.ts @@ -4,7 +4,7 @@ import { SetupOptions, SetupView } from '../setup.js'; -import { ApiErr } from '../../../js/common/api/error/api-error.js'; +import { ApiErr } from '../../../js/common/api/shared/api-error.js'; import { Lang } from '../../../js/common/lang.js'; import { Key, KeyUtil } from '../../../js/common/core/crypto/key.js'; import { Ui } from '../../../js/common/browser/ui.js'; diff --git a/extension/js/background_page/background_page.ts b/extension/js/background_page/background_page.ts index c76c0e5699f..e7ca8a2812c 100644 --- a/extension/js/background_page/background_page.ts +++ b/extension/js/background_page/background_page.ts @@ -6,7 +6,7 @@ import { Bm, BrowserMsg } from '../common/browser/browser-msg.js'; import { BgHandlers } from './bg-handlers.js'; import { BgUtils } from './bgutils.js'; import { Catch } from '../common/platform/catch.js'; -import { GoogleAuth } from '../common/api/google-auth.js'; +import { GoogleAuth } from '../common/api/email-provider/gmail/google-auth.js'; import { VERSION } from '../common/core/const.js'; import { injectFcIntoWebmail } from './inject.js'; import { migrateGlobal } from './migrations.js'; diff --git a/extension/js/background_page/bg-handlers.ts b/extension/js/background_page/bg-handlers.ts index 4b84cc0a66f..3d0f7d87ecf 100644 --- a/extension/js/background_page/bg-handlers.ts +++ b/extension/js/background_page/bg-handlers.ts @@ -2,7 +2,7 @@ 'use strict'; -import { Api } from '../common/api/api.js'; +import { Api } from '../common/api/shared/api.js'; import { BgUtils } from './bgutils.js'; import { Bm } from '../common/browser/browser-msg.js'; import { Gmail } from '../common/api/email-provider/gmail/gmail.js'; diff --git a/extension/js/common/api/account-server.ts b/extension/js/common/api/account-server.ts new file mode 100644 index 00000000000..fb6ced15d8d --- /dev/null +++ b/extension/js/common/api/account-server.ts @@ -0,0 +1,45 @@ +/* ©️ 2016 - present FlowCrypt a.s. Limitations apply. Contact human@flowcrypt.com */ + +'use strict'; + +import { BackendRes, FcUuidAuth, FlowCryptComApi, ProfileUpdate } from './account-servers/flowcrypt-com-api.js'; +import { Api, ProgressCb } from './shared/api.js'; + + +/** + * This may be calling to FlowCryptComApi or Enterprise Server (FES, customer on-prem) depending on + * domain configuration fetched using WellKnownHostMeta. + * + * Current implementation only calls FlowCryptComApi, FES integration is planned + */ +export class AccountServer extends Api { + + public static loginWithOpenid = async (acctEmail: string, uuid: string, idToken: string): Promise => { + return await FlowCryptComApi.loginWithOpenid(acctEmail, uuid, idToken); + } + + public static accountUpdate = async (fcAuth: FcUuidAuth, profileUpdate: ProfileUpdate): Promise => { + return await FlowCryptComApi.accountUpdate(fcAuth, profileUpdate); + } + + public static accountGetAndUpdateLocalStore = async (fcAuth: FcUuidAuth): Promise => { + return await FlowCryptComApi.accountGetAndUpdateLocalStore(fcAuth); + } + + public static messageUpload = async (fcAuth: FcUuidAuth | undefined, encryptedDataBinary: Uint8Array, progressCb: ProgressCb): Promise => { + return await FlowCryptComApi.messageUpload(fcAuth, encryptedDataBinary, progressCb); + } + + public static messageToken = async (fcAuth: FcUuidAuth): Promise => { + return await FlowCryptComApi.messageToken(fcAuth); + } + + public static messageExpiration = async (fcAuth: FcUuidAuth, adminCodes: string[], addDays?: number): Promise => { + return await FlowCryptComApi.messageExpiration(fcAuth, adminCodes, addDays); + } + + public static linkMessage = async (short: string): Promise => { + return await FlowCryptComApi.linkMessage(short); + } + +} diff --git a/extension/js/common/api/account-servers/enterprise-server.ts b/extension/js/common/api/account-servers/enterprise-server.ts new file mode 100644 index 00000000000..adf9bdda0d5 --- /dev/null +++ b/extension/js/common/api/account-servers/enterprise-server.ts @@ -0,0 +1,71 @@ +/* ©️ 2016 - present FlowCrypt a.s. Limitations apply. Contact human@flowcrypt.com */ + +// tslint:disable:oneliner-object-literal +// tslint:disable:no-null-keyword + +'use strict'; + +import { Api, ReqMethod } from '../shared/api.js'; +import { AcctStore } from '../../platform/store/acct-store.js'; +import { FlowCryptComApi } from './flowcrypt-com-api.js'; +import { Dict } from '../../core/common.js'; + +// todo - decide which tags to use +export type EventTag = 'compose' | 'decrypt' | 'setup' | 'settings' | 'import-pub' | 'import-prv'; + +export namespace FesRes { + export type AccessToken = { accessToken: string }; +} + +/** + * FlowCrypt Enterprise Server (FES) may be deployed on-prem by enterprise customers. + * This gives them more control. All OrgRules, log collectors, etc (as implemented) would then be handled by the FES. + * Once fully integrated, this will allow customers to be fully independent of flowcrypt.com/api + * + * WIP - currently unused, unfinished + */ +export class EnterpriseServer extends Api { + + private fesUrl: string + + constructor(fesUrl: string, private acctEmail: string) { + super(); + this.fesUrl = fesUrl.replace(/\/$/, ''); + } + + public loginWithOpenid = async (idToken: string): Promise => { + const response = await this.request('GET', '/api/account/access-token', { Authorization: `Bearer ${idToken}` }); + await AcctStore.set(this.acctEmail, { fesAccessToken: response.accessToken }); + } + + public reportException = async (/* e: any */): Promise => { + throw Error('EnterpriseServer.reportException not implemented'); + // const formattedException = Catch.formatExceptionForReport(...) + // await this.request('POST', '/api/log-collector/exception', await this.authHdr()); + } + + public reportEvent = async (tags: EventTag[], message: string, details?: string): Promise => { + await this.request('POST', '/api/log-collector/exception', await this.authHdr(), { tags, message, details }); + } + + // public accountUpdate = async (fcAuth: FcUuidAuth, profileUpdate: ProfileUpdate): Promise => { + // // noop + // } + + // public accountGetAndUpdateLocalStore = async (fcAuth: FcUuidAuth): Promise => { + // FlowCryptComApi.throwIfMissingUuid(fcAuth); + // const r = await FlowCryptComApi.request('account/get', fcAuth); + // await AcctStore.set(fcAuth.account, { rules: r.domain_org_rules, subscription: r.subscription }); + // return r; + // } + + private authHdr = async (): Promise> => { + const { fesAccessToken } = await AcctStore.get(this.acctEmail, ['fesAccessToken']); + return { Authorization: `Bearer ${fesAccessToken}` }; + } + + private request = async (method: ReqMethod, path: string, headers: Dict = {}, vals?: Dict): Promise => { + return await FlowCryptComApi.apiCall(this.fesUrl, path, vals, 'JSON', undefined, headers, 'json', method); + } + +} diff --git a/extension/js/common/api/backend.ts b/extension/js/common/api/account-servers/flowcrypt-com-api.ts similarity index 50% rename from extension/js/common/api/backend.ts rename to extension/js/common/api/account-servers/flowcrypt-com-api.ts index b22fba39b37..7ccd415cd71 100644 --- a/extension/js/common/api/backend.ts +++ b/extension/js/common/api/account-servers/flowcrypt-com-api.ts @@ -5,18 +5,15 @@ 'use strict'; -import { Api, ProgressCb, ProgressCbs, ReqFmt } from './api.js'; -import { Dict } from '../core/common.js'; -import { Att } from '../core/att.js'; -import { BACKEND_API_HOST } from '../core/const.js'; -import { BackendAuthErr } from './error/api-error.js'; -import { Catch } from '../platform/catch.js'; -import { DomainRulesJson } from '../org-rules.js'; -import { AcctStore } from '../platform/store/acct-store.js'; -import { Browser } from '../browser/browser.js'; - -type ProfileUpdate = { alias?: string, name?: string, photo?: string, intro?: string, web?: string, phone?: string, default_message_expire?: number }; - +import { Api, ProgressCb, ProgressCbs, ReqFmt } from '../shared/api.js'; +import { Dict } from '../../core/common.js'; +import { Att } from '../../core/att.js'; +import { BackendAuthErr } from '../shared/api-error.js'; +import { DomainRulesJson } from '../../org-rules.js'; +import { AcctStore } from '../../platform/store/acct-store.js'; +import { FlowCryptWebsite } from '../flowcrypt-website.js'; + +export type ProfileUpdate = { alias?: string, name?: string, photo?: string, intro?: string, web?: string, phone?: string, default_message_expire?: number }; export type SubscriptionLevel = 'pro' | null; export type FcUuidAuth = { account: string, uuid: string | undefined }; export type PaymentMethod = 'stripe' | 'group' | 'trial'; @@ -24,14 +21,12 @@ export type SubscriptionInfo = { active?: boolean | null; method?: PaymentMethod export type AwsS3UploadItem = { baseUrl: string, fields: { key: string; file?: Att }, att: Att }; export namespace BackendRes { - export type FcHelpFeedback = { sent: boolean }; export type FcAccountLogin = { registered: boolean, verified: boolean }; export type FcAccount$info = { alias: string, email: string, intro: string, name: string, photo: string, default_message_expire: number }; export type FcAccountGet = { account: FcAccount$info, subscription: SubscriptionInfo, domain_org_rules: DomainRulesJson }; export type FcAccountUpdate = { result: FcAccount$info, updated: boolean }; export type FcAccountSubscribe = { subscription: SubscriptionInfo }; export type FcAccountCheck = { email: string | null, subscription: SubscriptionInfo | null }; - export type FcBlogPost = { title: string, date: string, url: string }; export type FcMsgToken = { token: string }; export type FcMsgUpload = { short: string, admin_code: string }; export type FcLinkMsg = { expire: string, deleted: boolean, url: string, expired: boolean }; @@ -42,40 +37,10 @@ export namespace BackendRes { export type ApirFcMsgExpiration = { updated: boolean }; } -export class Backend extends Api { - - public static url = (type: 'api' | 'me' | 'pubkey' | 'decrypt' | 'web', resource = '') => { - return ({ - api: BACKEND_API_HOST, - me: `https://flowcrypt.com/me/${resource}`, - pubkey: `https://flowcrypt.com/pub/${resource}`, - decrypt: `https://flowcrypt.com/${resource}`, - web: 'https://flowcrypt.com/', - } as Dict)[type]; - } - - public static helpFeedback = async (acctEmail: string, message: string): Promise => { - return await Backend.request('help/feedback', { - email: acctEmail, - message, - }); - } - - // public static loginWithVerificationEmail = async (account: string, uuid: string, token: string): Promise<{ verified: boolean, subscription: SubscriptionInfo }> => { - // const response = await Backend.request('account/login', { - // account, - // uuid, - // token: token || null, // tslint:disable-line:no-null-keyword - // }, undefined) as BackendRes.FcAccountLogin; - // if (response.registered !== true) { - // throw new Error('account_login did not result in successful registration'); - // } - // await AcctStore.set(account, { uuid, subscription: response.subscription }); - // return { verified: response.verified === true, subscription: response.subscription }; - // } +export class FlowCryptComApi extends Api { public static loginWithOpenid = async (acctEmail: string, uuid: string, idToken: string): Promise => { - const response = await Backend.request('account/login', { + const response = await FlowCryptComApi.request('account/login', { account: acctEmail, uuid, token: null, // tslint:disable-line:no-null-keyword @@ -87,23 +52,23 @@ export class Backend extends Api { } public static accountUpdate = async (fcAuth: FcUuidAuth, profileUpdate: ProfileUpdate): Promise => { - Backend.throwIfMissingUuid(fcAuth); - return await Backend.request('account/update', { + FlowCryptComApi.throwIfMissingUuid(fcAuth); + return await FlowCryptComApi.request('account/update', { ...fcAuth, ...profileUpdate }); } public static accountGetAndUpdateLocalStore = async (fcAuth: FcUuidAuth): Promise => { - Backend.throwIfMissingUuid(fcAuth); - const r = await Backend.request('account/get', fcAuth); + FlowCryptComApi.throwIfMissingUuid(fcAuth); + const r = await FlowCryptComApi.request('account/get', fcAuth); await AcctStore.set(fcAuth.account, { rules: r.domain_org_rules, subscription: r.subscription }); return r; } public static accountSubscribe = async (fcAuth: FcUuidAuth, product: string, method: string, paymentSourceToken?: string): Promise => { - Backend.throwIfMissingUuid(fcAuth); - const response = await Backend.request('account/subscribe', { + FlowCryptComApi.throwIfMissingUuid(fcAuth); + const response = await FlowCryptComApi.request('account/subscribe', { ...fcAuth, method, source: paymentSourceToken || null, // tslint:disable-line:no-null-keyword @@ -115,17 +80,17 @@ export class Backend extends Api { public static messageUpload = async (fcAuth: FcUuidAuth | undefined, encryptedDataBinary: Uint8Array, progressCb: ProgressCb): Promise => { const content = new Att({ name: 'cryptup_encrypted_message.asc', type: 'text/plain', data: encryptedDataBinary }); - return await Backend.request('message/upload', { content, ...(fcAuth || {}) }, 'FORM', undefined, { upload: progressCb }); + return await FlowCryptComApi.request('message/upload', { content, ...(fcAuth || {}) }, 'FORM', undefined, { upload: progressCb }); } public static messageToken = async (fcAuth: FcUuidAuth): Promise => { - Backend.throwIfMissingUuid(fcAuth); - return await Backend.request('message/token', { ...fcAuth }); + FlowCryptComApi.throwIfMissingUuid(fcAuth); + return await FlowCryptComApi.request('message/token', { ...fcAuth }); } public static messageExpiration = async (fcAuth: FcUuidAuth, adminCodes: string[], addDays?: number): Promise => { - Backend.throwIfMissingUuid(fcAuth); - return await Backend.request('message/expiration', { + FlowCryptComApi.throwIfMissingUuid(fcAuth); + return await FlowCryptComApi.request('message/expiration', { ...fcAuth, admin_codes: adminCodes, add_days: addDays || null, // tslint:disable-line:no-null-keyword @@ -133,28 +98,13 @@ export class Backend extends Api { } public static linkMessage = async (short: string): Promise => { - return await Backend.request('link/message', { + return await FlowCryptComApi.request('link/message', { short, }); } - public static retrieveBlogPosts = async (): Promise => { - const xml = await Api.ajax({ url: 'https://flowcrypt.com/blog/feed.xml', dataType: 'xml' }, Catch.stackTrace()) as XMLDocument; // tslint:disable-line:no-direct-ajax - const posts: BackendRes.FcBlogPost[] = []; - for (const post of Browser.arrFromDomNodeList(xml.querySelectorAll('entry'))) { - const children = Browser.arrFromDomNodeList(post.childNodes); - const title = children.find(n => n.nodeName.toLowerCase() === 'title')?.textContent; - const date = children.find(n => n.nodeName.toLowerCase() === 'published')?.textContent?.substr(0, 10); - const url = (children.find(n => n.nodeName.toLowerCase() === 'link') as HTMLAnchorElement).getAttribute('href'); - if (title && date && url) { - posts.push({ title, date, url }); - } - } - return posts.slice(0, 5); - } - private static request = async (path: string, vals: Dict, fmt: ReqFmt = 'JSON', addHeaders: Dict = {}, progressCbs?: ProgressCbs): Promise => { - return await Backend.apiCall(Backend.url('api'), path, vals, fmt, progressCbs, { 'api-version': '3', ...addHeaders }); + return await FlowCryptComApi.apiCall(FlowCryptWebsite.url('api'), path, vals, fmt, progressCbs, { 'api-version': '3', ...addHeaders }); } private static throwIfMissingUuid = (fcAuth: FcUuidAuth) => { diff --git a/extension/js/common/api/well-known-host-meta.ts b/extension/js/common/api/account-servers/well-known-host-meta.ts similarity index 92% rename from extension/js/common/api/well-known-host-meta.ts rename to extension/js/common/api/account-servers/well-known-host-meta.ts index 823474e2d11..be4f3cfe118 100644 --- a/extension/js/common/api/well-known-host-meta.ts +++ b/extension/js/common/api/account-servers/well-known-host-meta.ts @@ -2,13 +2,13 @@ 'use strict'; -import { Buf } from '../core/buf.js'; -import { FLAVOR } from '../core/const.js'; -import { OrgRules } from '../org-rules.js'; -import { Catch } from '../platform/catch.js'; -import { AcctStore } from '../platform/store/acct-store.js'; -import { Api } from './api.js'; -import { ApiErr } from './error/api-error.js'; +import { Buf } from '../../core/buf.js'; +import { FLAVOR } from '../../core/const.js'; +import { OrgRules } from '../../org-rules.js'; +import { Catch } from '../../platform/catch.js'; +import { AcctStore } from '../../platform/store/acct-store.js'; +import { Api } from '../shared/api.js'; +import { ApiErr } from '../shared/api-error.js'; type HostMetaResponse = { links?: { rel?: string, href?: string }[] } diff --git a/extension/js/common/api/email-provider/email-provider-api.ts b/extension/js/common/api/email-provider/email-provider-api.ts index c2fe19894bc..b48a9b3b5e4 100644 --- a/extension/js/common/api/email-provider/email-provider-api.ts +++ b/extension/js/common/api/email-provider/email-provider-api.ts @@ -4,7 +4,7 @@ 'use strict'; -import { Api, ChunkedCb, ProgressCb } from '../api.js'; +import { Api, ChunkedCb, ProgressCb } from '../shared/api.js'; import { Contact, KeyInfo } from '../../core/crypto/key.js'; import { GmailRes } from './gmail/gmail-parser.js'; diff --git a/extension/js/common/api/email-provider/gmail/gmail-parser.ts b/extension/js/common/api/email-provider/gmail/gmail-parser.ts index c6ff2202d19..e43385873cc 100644 --- a/extension/js/common/api/email-provider/gmail/gmail-parser.ts +++ b/extension/js/common/api/email-provider/gmail/gmail-parser.ts @@ -7,7 +7,7 @@ import { Str, Value } from '../../../core/common.js'; import { Att } from '../../../core/att.js'; import { Buf } from '../../../core/buf.js'; -import { RecipientType } from '../../api.js'; +import { RecipientType } from '../../shared/api.js'; import { ReplyParams } from '../email-provider-api.js'; export namespace GmailRes { // responses diff --git a/extension/js/common/api/email-provider/gmail/gmail.ts b/extension/js/common/api/email-provider/gmail/gmail.ts index d386f1122cc..56fc015d7eb 100644 --- a/extension/js/common/api/email-provider/gmail/gmail.ts +++ b/extension/js/common/api/email-provider/gmail/gmail.ts @@ -3,12 +3,12 @@ 'use strict'; import { AddrParserResult, BrowserWindow } from '../../../browser/browser-window.js'; -import { ChunkedCb, ProgressCb } from '../../api.js'; +import { ChunkedCb, ProgressCb } from '../../shared/api.js'; import { Dict, Str, Value } from '../../../core/common.js'; import { EmailProviderApi, EmailProviderInterface, Backups } from '../email-provider-api.js'; import { GOOGLE_API_HOST, gmailBackupSearchQuery } from '../../../core/const.js'; import { GmailParser, GmailRes } from './gmail-parser.js'; -import { AjaxErr } from '../../error/api-error.js'; +import { AjaxErr } from '../../shared/api-error.js'; import { Att } from '../../../core/att.js'; import { BrowserMsg } from '../../../browser/browser-msg.js'; import { Buf } from '../../../core/buf.js'; @@ -16,8 +16,8 @@ import { Catch } from '../../../platform/catch.js'; import { Contact, KeyUtil } from '../../../core/crypto/key.js'; import { Env } from '../../../browser/env.js'; import { FormatError } from '../../../core/crypto/pgp/msg-util.js'; -import { Google } from '../../google.js'; -import { GoogleAuth } from '../../google-auth.js'; +import { Google } from './google.js'; +import { GoogleAuth } from './google-auth.js'; import { Mime } from '../../../core/mime.js'; import { PgpArmor } from '../../../core/crypto/pgp/pgp-armor.js'; import { SendableMsg } from '../sendable-msg.js'; diff --git a/extension/js/common/api/google-auth.ts b/extension/js/common/api/email-provider/gmail/google-auth.ts similarity index 92% rename from extension/js/common/api/google-auth.ts rename to extension/js/common/api/email-provider/gmail/google-auth.ts index f2c077cc219..901a60cfe20 100644 --- a/extension/js/common/api/google-auth.ts +++ b/extension/js/common/api/email-provider/gmail/google-auth.ts @@ -5,19 +5,21 @@ // tslint:disable:no-direct-ajax // tslint:disable:oneliner-object-literal -import { GOOGLE_API_HOST, GOOGLE_OAUTH_SCREEN_HOST, FLAVOR } from '../core/const.js'; -import { Url, Value } from '../core/common.js'; -import { tabsQuery, windowsCreate } from './chrome.js'; -import { Api } from './api.js'; -import { ApiErr } from './error/api-error.js'; -import { Backend } from './backend.js'; -import { Buf } from '../core/buf.js'; -import { Catch } from '../platform/catch.js'; -import { GmailRes } from './email-provider/gmail/gmail-parser'; -import { GoogleAuthErr } from './error/api-error.js'; -import { GoogleAuthWindowResult$result } from '../browser/browser-msg.js'; -import { Ui } from '../browser/ui.js'; -import { AcctStore, AcctStoreDict } from '../platform/store/acct-store.js'; +import { GOOGLE_API_HOST, GOOGLE_OAUTH_SCREEN_HOST, FLAVOR } from '../../../core/const.js'; +import { Url, Value } from '../../../core/common.js'; +import { tabsQuery, windowsCreate } from '../../../browser/chrome.js'; +import { Api } from './../../shared/api.js'; +import { ApiErr } from '../../shared/api-error.js'; + +import { Buf } from '../../../core/buf.js'; +import { Catch } from '../../../platform/catch.js'; +import { GmailRes } from './gmail-parser'; +import { GoogleAuthErr } from '../../shared/api-error.js'; +import { GoogleAuthWindowResult$result } from '../../../browser/browser-msg.js'; +import { Ui } from '../../../browser/ui.js'; +import { AcctStore, AcctStoreDict } from '../../../platform/store/acct-store.js'; +import { AccountServer } from '../../account-server.js'; +import { WellKnownHostMeta } from '../../account-servers/well-known-host-meta.js'; type GoogleAuthTokenInfo = { issued_to: string, audience: string, scope: string, expires_in: number, access_type: 'offline' }; type GoogleAuthTokensResponse = { access_token: string, expires_in: number, refresh_token?: string, id_token: string, token_type: 'Bearer' }; @@ -143,8 +145,15 @@ export class GoogleAuth { } try { const uuid = Api.randomFortyHexChars(); - await Backend.loginWithOpenid(authRes.acctEmail, uuid, authRes.id_token); - await Backend.accountGetAndUpdateLocalStore({ account: authRes.acctEmail, uuid }); // will store org rules and subscription + await AccountServer.loginWithOpenid(authRes.acctEmail, uuid, authRes.id_token); + await AccountServer.accountGetAndUpdateLocalStore({ account: authRes.acctEmail, uuid }); // will store org rules and subscription + try { + // this is here currently for debugging only, to test effect of this new mechanism on customer installations + const wellKnownHostMeta = new WellKnownHostMeta(authRes.acctEmail); + await wellKnownHostMeta.fetchAndCacheFesUrl(); + } catch (e) { + Catch.reportErr(Catch.rewrapErr(e, `WellKnownHostMeta on ${FLAVOR}`)); + } } catch (e) { return { result: 'Error', error: `Grant successful but error accessing fc account: ${String(e)}`, acctEmail: authRes.acctEmail, id_token: undefined }; } diff --git a/extension/js/common/api/google.ts b/extension/js/common/api/email-provider/gmail/google.ts similarity index 91% rename from extension/js/common/api/google.ts rename to extension/js/common/api/email-provider/gmail/google.ts index 657f16d9fe4..46d5970c974 100644 --- a/extension/js/common/api/google.ts +++ b/extension/js/common/api/email-provider/gmail/google.ts @@ -4,13 +4,13 @@ // tslint:disable:no-direct-ajax -import { Api, ProgressCbs, ReqMethod } from './api.js'; -import { Dict, Str } from '../core/common.js'; +import { Api, ProgressCbs, ReqMethod } from '../../shared/api.js'; +import { Dict, Str } from '../../../core/common.js'; -import { GOOGLE_API_HOST } from '../core/const.js'; -import { GmailRes } from './email-provider/gmail/gmail-parser.js'; +import { GOOGLE_API_HOST } from '../../../core/const.js'; +import { GmailRes } from './gmail-parser.js'; import { GoogleAuth } from './google-auth.js'; -import { Serializable } from '../platform/store/abstract-store.js'; +import { Serializable } from '../../../platform/store/abstract-store.js'; export class Google { diff --git a/extension/js/common/api/email-provider/sendable-msg.ts b/extension/js/common/api/email-provider/sendable-msg.ts index 09317f8b421..7f89e8a3652 100644 --- a/extension/js/common/api/email-provider/sendable-msg.ts +++ b/extension/js/common/api/email-provider/sendable-msg.ts @@ -5,7 +5,7 @@ import { Dict, Str } from '../../core/common.js'; import { Mime, MimeEncodeType, SendableMsgBody } from '../../core/mime.js'; import { Att } from '../../core/att.js'; -import { RecipientType } from '../api.js'; +import { RecipientType } from '../shared/api.js'; import { KeyStore } from '../../platform/store/key-store.js'; export type Recipients = { to?: string[], cc?: string[], bcc?: string[] }; diff --git a/extension/js/common/api/flowcrypt-website.ts b/extension/js/common/api/flowcrypt-website.ts new file mode 100644 index 00000000000..3b1fd4974cd --- /dev/null +++ b/extension/js/common/api/flowcrypt-website.ts @@ -0,0 +1,57 @@ +/* ©️ 2016 - present FlowCrypt a.s. Limitations apply. Contact human@flowcrypt.com */ + +// tslint:disable:oneliner-object-literal +// tslint:disable:no-null-keyword + +'use strict'; + +import { Api, ProgressCbs, ReqFmt } from './shared/api.js'; +import { Dict } from '../core/common.js'; +import { BACKEND_API_HOST } from '../core/const.js'; +import { Catch } from '../platform/catch.js'; +import { Browser } from '../browser/browser.js'; + +export namespace FlowCryptWebsiteRes { + export type FcHelpFeedback = { sent: boolean }; + export type FcBlogPost = { title: string, date: string, url: string }; +} + +export class FlowCryptWebsite extends Api { + + public static url = (type: 'api' | 'me' | 'pubkey' | 'decrypt' | 'web', resource = '') => { + return ({ + api: BACKEND_API_HOST, + me: `https://flowcrypt.com/me/${resource}`, + pubkey: `https://flowcrypt.com/pub/${resource}`, + decrypt: `https://flowcrypt.com/${resource}`, + web: 'https://flowcrypt.com/', + } as Dict)[type]; + } + + public static helpFeedback = async (acctEmail: string, message: string): Promise => { + return await FlowCryptWebsite.request('help/feedback', { + email: acctEmail, + message, + }); + } + + public static retrieveBlogPosts = async (): Promise => { + const xml = await Api.ajax({ url: 'https://flowcrypt.com/blog/feed.xml', dataType: 'xml' }, Catch.stackTrace()) as XMLDocument; // tslint:disable-line:no-direct-ajax + const posts: FlowCryptWebsiteRes.FcBlogPost[] = []; + for (const post of Browser.arrFromDomNodeList(xml.querySelectorAll('entry'))) { + const children = Browser.arrFromDomNodeList(post.childNodes); + const title = children.find(n => n.nodeName.toLowerCase() === 'title')?.textContent; + const date = children.find(n => n.nodeName.toLowerCase() === 'published')?.textContent?.substr(0, 10); + const url = (children.find(n => n.nodeName.toLowerCase() === 'link') as HTMLAnchorElement).getAttribute('href'); + if (title && date && url) { + posts.push({ title, date, url }); + } + } + return posts.slice(0, 5); + } + + private static request = async (path: string, vals: Dict, fmt: ReqFmt = 'JSON', addHeaders: Dict = {}, progressCbs?: ProgressCbs): Promise => { + return await FlowCryptWebsite.apiCall(FlowCryptWebsite.url('api'), path, vals, fmt, progressCbs, { 'api-version': '3', ...addHeaders }); + } + +} diff --git a/extension/js/common/api/attester.ts b/extension/js/common/api/key-server/attester.ts similarity index 93% rename from extension/js/common/api/attester.ts rename to extension/js/common/api/key-server/attester.ts index bd1d9d5b08a..2042446461d 100644 --- a/extension/js/common/api/attester.ts +++ b/extension/js/common/api/key-server/attester.ts @@ -2,12 +2,12 @@ 'use strict'; -import { Api, ReqMethod } from './api.js'; -import { Dict, Str } from '../core/common.js'; -import { PgpClient, PubkeySearchResult } from './pub-lookup.js'; -import { ApiErr } from './error/api-error.js'; -import { OrgRules } from '../org-rules.js'; -import { ATTESTER_API_HOST } from '../core/const.js'; +import { Api, ReqMethod } from './../shared/api.js'; +import { Dict, Str } from '../../core/common.js'; +import { PgpClient, PubkeySearchResult } from './../pub-lookup.js'; +import { ApiErr } from '../shared/api-error.js'; +import { OrgRules } from '../../org-rules.js'; +import { ATTESTER_API_HOST } from '../../core/const.js'; type PubCallRes = { responseText: string, getResponseHeader: (n: string) => string | null }; diff --git a/extension/js/common/api/key-manager.ts b/extension/js/common/api/key-server/key-manager.ts similarity index 93% rename from extension/js/common/api/key-manager.ts rename to extension/js/common/api/key-server/key-manager.ts index 4f3e941a2f1..f4ee58399c9 100644 --- a/extension/js/common/api/key-manager.ts +++ b/extension/js/common/api/key-server/key-manager.ts @@ -5,8 +5,8 @@ 'use strict'; -import { Api, ReqMethod } from './api.js'; -import { Dict } from '../core/common.js'; +import { Api, ReqMethod } from './../shared/api.js'; +import { Dict } from '../../core/common.js'; type LoadPrvRes = { privateKeys: { decryptedPrivateKey: string }[] }; type LoadPubRes = { publicKeys: { publicKey: string }[] }; diff --git a/extension/js/common/api/sks.ts b/extension/js/common/api/key-server/sks.ts similarity index 93% rename from extension/js/common/api/sks.ts rename to extension/js/common/api/key-server/sks.ts index 39975824b34..bb5859c9666 100644 --- a/extension/js/common/api/sks.ts +++ b/extension/js/common/api/key-server/sks.ts @@ -2,10 +2,10 @@ 'use strict'; -import { Api } from './api.js'; -import { ApiErr } from './error/api-error.js'; -import { PgpArmor } from '../core/crypto/pgp/pgp-armor.js'; -import { PubkeySearchResult } from './pub-lookup.js'; +import { Api } from './../shared/api.js'; +import { ApiErr } from '../shared/api-error.js'; +import { PgpArmor } from '../../core/crypto/pgp/pgp-armor.js'; +import { PubkeySearchResult } from './../pub-lookup.js'; export class Sks extends Api { diff --git a/extension/js/common/api/wkd.ts b/extension/js/common/api/key-server/wkd.ts similarity index 86% rename from extension/js/common/api/wkd.ts rename to extension/js/common/api/key-server/wkd.ts index 143878355c1..bffa9916e73 100644 --- a/extension/js/common/api/wkd.ts +++ b/extension/js/common/api/key-server/wkd.ts @@ -2,13 +2,13 @@ 'use strict'; -import { Api } from './api.js'; -import { ApiErr } from './error/api-error.js'; -import { opgp } from '../core/crypto/pgp/openpgpjs-custom.js'; -import { Buf } from '../core/buf.js'; -import { Catch } from '../platform/catch.js'; -import { PubkeySearchResult } from './pub-lookup.js'; -import { KeyUtil } from '../core/crypto/key.js'; +import { Api } from './../shared/api.js'; +import { ApiErr } from '../shared/api-error.js'; +import { opgp } from '../../core/crypto/pgp/openpgpjs-custom.js'; +import { Buf } from '../../core/buf.js'; +import { Catch } from '../../platform/catch.js'; +import { PubkeySearchResult } from './../pub-lookup.js'; +import { KeyUtil } from '../../core/crypto/key.js'; // tslint:disable:no-null-keyword // tslint:disable:no-direct-ajax diff --git a/extension/js/common/api/pub-lookup.ts b/extension/js/common/api/pub-lookup.ts index 8065e8ff06c..9ae4a83dafb 100644 --- a/extension/js/common/api/pub-lookup.ts +++ b/extension/js/common/api/pub-lookup.ts @@ -2,11 +2,11 @@ 'use strict'; -import { Attester } from './attester.js'; +import { Attester } from './key-server/attester.js'; +import { KeyManager } from './key-server/key-manager.js'; +import { Sks } from './key-server/sks.js'; +import { Wkd } from './key-server/wkd.js'; import { OrgRules } from '../org-rules.js'; -import { Sks } from './sks.js'; -import { KeyManager } from './key-manager.js'; -import { Wkd } from './wkd.js'; export type PgpClient = 'flowcrypt' | 'pgp-other' | null; export type PubkeySearchResult = { pubkey: string | null; pgpClient: PgpClient }; @@ -14,7 +14,8 @@ export type PubkeySearchResult = { pubkey: string | null; pgpClient: PgpClient } /** * Look up public keys. * - * Some orgs may have a preference to use their own keyserver. In such cases, results from their own keyserver will be preferred. + * Some orgs may have a preference to use their own keyserver. + * In such cases, results from their own keyserver will be preferred. */ export class PubLookup { diff --git a/extension/js/common/api/error/api-error.ts b/extension/js/common/api/shared/api-error.ts similarity index 100% rename from extension/js/common/api/error/api-error.ts rename to extension/js/common/api/shared/api-error.ts diff --git a/extension/js/common/api/api.ts b/extension/js/common/api/shared/api.ts similarity index 92% rename from extension/js/common/api/api.ts rename to extension/js/common/api/shared/api.ts index da866af9fc8..d1bf9875af0 100644 --- a/extension/js/common/api/api.ts +++ b/extension/js/common/api/shared/api.ts @@ -4,15 +4,15 @@ // tslint:disable:no-direct-ajax -import { Att } from '../core/att.js'; -import { BrowserMsg } from '../browser/browser-msg.js'; -import { Buf } from '../core/buf.js'; -import { Catch } from '../platform/catch.js'; -import { Contact } from '../core/crypto/key.js'; -import { Dict } from '../core/common.js'; -import { Env } from '../browser/env.js'; -import { secureRandomBytes } from '../platform/util.js'; -import { ApiErr, AjaxErr } from './error/api-error.js'; +import { Att } from '../../core/att.js'; +import { BrowserMsg } from '../../browser/browser-msg.js'; +import { Buf } from '../../core/buf.js'; +import { Catch } from '../../platform/catch.js'; +import { Contact } from '../../core/crypto/key.js'; +import { Dict } from '../../core/common.js'; +import { Env } from '../../browser/env.js'; +import { secureRandomBytes } from '../../platform/util.js'; +import { ApiErr, AjaxErr } from './api-error.js'; export type ReqFmt = 'JSON' | 'FORM' | 'TEXT'; export type RecipientType = 'to' | 'cc' | 'bcc'; @@ -144,7 +144,14 @@ export class Api { } protected static apiCall = async ( - url: string, path: string, fields?: Dict | string, fmt?: ReqFmt, progress?: ProgressCbs, headers?: Dict, resFmt: ResFmt = 'json', method: ReqMethod = 'POST' + url: string, + path: string, + fields?: Dict | string, + fmt?: ReqFmt, + progress?: ProgressCbs, + headers?: Dict, + resFmt: ResFmt = 'json', + method: ReqMethod = 'POST' ): Promise => { progress = progress || {} as ProgressCbs; let formattedData: FormData | string | undefined; diff --git a/extension/js/common/browser/browser-msg.ts b/extension/js/common/browser/browser-msg.ts index 90902bdcb15..bfebdc5714c 100644 --- a/extension/js/common/browser/browser-msg.ts +++ b/extension/js/common/browser/browser-msg.ts @@ -4,8 +4,8 @@ import { DecryptResult, DiagnoseMsgPubkeysResult, PgpMsgMethod, VerifyRes, PgpMsgTypeResult } from '../core/crypto/pgp/msg-util.js'; import { Dict, Str, UrlParams } from '../core/common.js'; -import { AjaxErr } from '../api/error/api-error.js'; -import { AuthRes } from '../api/google-auth.js'; +import { AjaxErr } from '../api/shared/api-error.js'; +import { AuthRes } from '../api/email-provider/gmail/google-auth.js'; import { Browser } from './browser.js'; import { BrowserMsgCommonHandlers } from './browser-msg-common-handlers.js'; import { Buf } from '../core/buf.js'; diff --git a/extension/js/common/browser/browser.ts b/extension/js/common/browser/browser.ts index 44b617fe2c7..9dc4368955c 100644 --- a/extension/js/common/browser/browser.ts +++ b/extension/js/common/browser/browser.ts @@ -4,7 +4,7 @@ 'use strict'; -import { Api } from '../api/api.js'; +import { Api } from '../api/shared/api.js'; import { Att } from '../core/att.js'; import { Catch } from '../platform/catch.js'; import { Dict, Url, UrlParam } from '../core/common.js'; diff --git a/extension/js/common/api/chrome.ts b/extension/js/common/browser/chrome.ts similarity index 95% rename from extension/js/common/api/chrome.ts rename to extension/js/common/browser/chrome.ts index 02f15cbbab1..6cfbd1b4982 100644 --- a/extension/js/common/api/chrome.ts +++ b/extension/js/common/browser/chrome.ts @@ -3,9 +3,9 @@ 'use strict'; import { Catch } from '../platform/catch.js'; -import { ContentScriptWindow } from '../browser/browser-window.js'; -import { Env } from '../browser/env.js'; -import { Ui } from '../browser/ui.js'; +import { ContentScriptWindow } from './browser-window.js'; +import { Env } from './env.js'; +import { Ui } from './ui.js'; import { Url, Dict } from '../core/common.js'; import { AbstractStore } from '../platform/store/abstract-store.js'; diff --git a/extension/js/common/browser/ui.ts b/extension/js/common/browser/ui.ts index e02352a0cf7..ce82ab5045c 100644 --- a/extension/js/common/browser/ui.ts +++ b/extension/js/common/browser/ui.ts @@ -2,7 +2,7 @@ 'use strict'; -import { ApiErr } from '../api/error/api-error.js'; +import { ApiErr } from '../api/shared/api-error.js'; import { Catch } from '../platform/catch.js'; import { Dict, Url } from '../core/common.js'; import Swal from 'sweetalert2'; diff --git a/extension/js/common/platform/store/abstract-store.ts b/extension/js/common/platform/store/abstract-store.ts index 13a0691a509..f796768882f 100644 --- a/extension/js/common/platform/store/abstract-store.ts +++ b/extension/js/common/platform/store/abstract-store.ts @@ -4,12 +4,12 @@ import { KeyInfo } from '../../core/crypto/key.js'; import { Dict } from '../../core/common.js'; -import { SubscriptionInfo } from '../../api/backend.js'; import { DomainRulesJson } from '../../org-rules.js'; import { GmailRes } from '../../api/email-provider/gmail/gmail-parser.js'; import { AcctStoreDict, AccountIndex, StoredReplyDraftMeta, StoredComposeDraftMeta } from './acct-store.js'; import { UnreportableError, Catch } from '../catch.js'; import { StoredAdminCode } from './global-store.js'; +import { SubscriptionInfo } from '../../api/account-servers/flowcrypt-com-api.js'; type SerializableTypes = FlatTypes | string[] | number[] | boolean[] | SubscriptionInfo | DomainRulesJson; export type StorageType = 'session' | 'local'; diff --git a/extension/js/common/platform/store/acct-store.ts b/extension/js/common/platform/store/acct-store.ts index 7ecbbfb752a..508d6c8583a 100644 --- a/extension/js/common/platform/store/acct-store.ts +++ b/extension/js/common/platform/store/acct-store.ts @@ -1,18 +1,18 @@ /* ©️ 2016 - present FlowCrypt a.s. Limitations apply. Contact human@flowcrypt.com */ import { Env } from '../../browser/env.js'; -import { GoogleAuth } from '../../api/google-auth.js'; +import { GoogleAuth } from '../../api/email-provider/gmail/google-auth.js'; import { KeyInfo } from '../../core/crypto/key.js'; import { Dict } from '../../core/common.js'; import { GmailRes } from '../../api/email-provider/gmail/gmail-parser.js'; -import { SubscriptionInfo, FcUuidAuth } from '../../api/backend.js'; import { DomainRulesJson } from '../../org-rules.js'; import { BrowserMsg, BgNotReadyErr } from '../../browser/browser-msg.js'; import { Ui } from '../../browser/ui.js'; -import { storageLocalGet, storageLocalSet, storageLocalRemove } from '../../api/chrome.js'; +import { storageLocalGet, storageLocalSet, storageLocalRemove } from '../../browser/chrome.js'; import { AbstractStore } from './abstract-store.js'; import { RawStore } from './abstract-store.js'; import { Subscription } from '../../subscription.js'; +import { FcUuidAuth, SubscriptionInfo } from '../../api/account-servers/flowcrypt-com-api.js'; export type StoredReplyDraftMeta = string; // draftId export type StoredComposeDraftMeta = { recipients: string[], subject: string, date: number }; @@ -35,7 +35,7 @@ export type AccountIndex = 'keys' | 'notification_setup_needed_dismissed' | 'ema 'pubkey_sent_to' | 'full_name' | 'cryptup_enabled' | 'setup_done' | 'successfully_received_at_leat_one_message' | 'notification_setup_done_seen' | 'picture' | 'outgoing_language' | 'setup_date' | 'openid' | 'tmp_submit_main' | 'tmp_submit_all' | 'subscription' | 'uuid' | 'use_rich_text' | 'rules' | - 'fesUrl'; + 'fesUrl' | 'fesAccessToken'; export type SendAsAlias = { isPrimary: boolean; @@ -72,6 +72,7 @@ export type AcctStoreDict = { uuid?: string; rules?: DomainRulesJson; fesUrl?: string; // url where FlowCrypt Enterprise Server is deployed + fesAccessToken?: string; // temporary tmp_submit_main?: boolean; tmp_submit_all?: boolean; diff --git a/extension/js/common/platform/store/global-store.ts b/extension/js/common/platform/store/global-store.ts index 669d31a8e00..839e72a7513 100644 --- a/extension/js/common/platform/store/global-store.ts +++ b/extension/js/common/platform/store/global-store.ts @@ -4,7 +4,7 @@ import { BrowserMsg } from '../../browser/browser-msg.js'; import { Env } from '../../browser/env.js'; import { RawStore, AbstractStore } from './abstract-store.js'; import { Dict, Value } from '../../core/common.js'; -import { storageLocalSet, storageLocalGet, storageLocalRemove } from '../../api/chrome.js'; +import { storageLocalSet, storageLocalGet, storageLocalRemove } from '../../browser/chrome.js'; import { Catch } from '../catch.js'; export type StoredAdminCode = { date: number, codes: string[] }; diff --git a/extension/js/common/settings.ts b/extension/js/common/settings.ts index 3c1121d8dba..ac242ef227e 100644 --- a/extension/js/common/settings.ts +++ b/extension/js/common/settings.ts @@ -4,19 +4,18 @@ import { Dict, Str, Url, UrlParams } from './core/common.js'; import { Ui } from './browser/ui.js'; -import { Api } from './api/api.js'; -import { ApiErr, AjaxErr } from './api/error/api-error.js'; -import { Backend } from './api/backend.js'; +import { ApiErr, AjaxErr } from './api/shared/api-error.js'; + import { Catch } from './platform/catch.js'; import { Env } from './browser/env.js'; import { Gmail } from './api/email-provider/gmail/gmail.js'; -import { GoogleAuth } from './api/google-auth.js'; +import { GoogleAuth } from './api/email-provider/gmail/google-auth.js'; import { Lang } from './lang.js'; import { Key, KeyUtil } from './core/crypto/key.js'; import { PgpPwd } from './core/crypto/pgp/pgp-password.js'; import { OrgRules } from './org-rules.js'; import { Xss } from './platform/xss.js'; -import { storageLocalGetAll } from './api/chrome.js'; +import { storageLocalGetAll } from './browser/chrome.js'; import { AccountIndex, AcctStore, SendAsAlias } from './platform/store/acct-store.js'; import { GlobalStore } from './platform/store/global-store.js'; import { AbstractStore } from './platform/store/abstract-store.js'; @@ -334,14 +333,7 @@ export class Settings { if (await Ui.modal.confirm(`${prepend}Please log in with FlowCrypt to continue.`)) { const authRes = await GoogleAuth.newOpenidAuthPopup({ acctEmail }); if (authRes.result === 'Success' && authRes.acctEmail && authRes.id_token) { - const uuid = Api.randomFortyHexChars(); - try { - await Backend.loginWithOpenid(authRes.acctEmail, uuid, authRes.id_token); - await Backend.accountGetAndUpdateLocalStore({ account: authRes.acctEmail, uuid }); - then(); - } catch (e) { - await Ui.modal.error(`Could not log in with FlowCrypt:\n\n${ApiErr.eli5(e)}\n\n${String(e)}`); - } + then(); } else { await Ui.modal.warning(`Could not log in:\n\n${authRes.error || authRes.result}`); } diff --git a/extension/js/common/subscription.ts b/extension/js/common/subscription.ts index 9ddce4db404..bb5f5b67b94 100644 --- a/extension/js/common/subscription.ts +++ b/extension/js/common/subscription.ts @@ -1,6 +1,6 @@ /* ©️ 2016 - present FlowCrypt a.s. Limitations apply. Contact human@flowcrypt.com */ -import { SubscriptionInfo, PaymentMethod, SubscriptionLevel } from './api/backend.js'; +import { PaymentMethod, SubscriptionInfo, SubscriptionLevel } from './api/account-servers/flowcrypt-com-api'; export class Subscription implements SubscriptionInfo { diff --git a/extension/js/common/view.ts b/extension/js/common/view.ts index 5fc7aba085c..44ad7227e9e 100644 --- a/extension/js/common/view.ts +++ b/extension/js/common/view.ts @@ -4,7 +4,7 @@ import { BrowserEventErrHandler, PreventableEventName, Ui } from './browser/ui.js'; -import { ApiErr } from './api/error/api-error.js'; +import { ApiErr } from './api/shared/api-error.js'; import { Xss } from './platform/xss.js'; export abstract class View { diff --git a/extension/js/content_scripts/webmail/gmail-element-replacer.ts b/extension/js/content_scripts/webmail/gmail-element-replacer.ts index df6b2bac95c..907bf3e569c 100644 --- a/extension/js/content_scripts/webmail/gmail-element-replacer.ts +++ b/extension/js/content_scripts/webmail/gmail-element-replacer.ts @@ -6,8 +6,8 @@ import { Dict, Str } from '../../common/core/common.js'; import { FactoryReplyParams, WebmailVariantString, XssSafeFactory } from '../../common/xss-safe-factory.js'; import { GmailParser, GmailRes } from '../../common/api/email-provider/gmail/gmail-parser.js'; import { IntervalFunction, WebmailElementReplacer } from './setup-webmail-content-script.js'; -import { AjaxErr } from '../../common/api/error/api-error.js'; -import { ApiErr } from '../../common/api/error/api-error.js'; +import { AjaxErr } from '../../common/api/shared/api-error.js'; +import { ApiErr } from '../../common/api/shared/api-error.js'; import { Att } from '../../common/core/att.js'; import { Browser } from '../../common/browser/browser.js'; import { BrowserMsg } from '../../common/browser/browser-msg.js'; diff --git a/test/source/test.ts b/test/source/test.ts index 948509d43a1..4b1d55f51ac 100644 --- a/test/source/test.ts +++ b/test/source/test.ts @@ -93,7 +93,9 @@ ava.after.always('evaluate Catch.reportErr errors', async t => { // todo - here we filter out an error that would otherwise be useful // in one test we are testing an error scenario // our S/MIME implementation is still early so it throws "reportable" errors like this during tests - const usefulErrors = mockBackendData.reportedErrors.filter(e => e.message !== 'Too few bytes to read ASN.1 value.'); + const usefulErrors = mockBackendData.reportedErrors + .filter(e => e.message !== 'Too few bytes to read ASN.1 value.') + .filter(e => !(testVariant === 'ENTERPRISE-MOCK' && e.message.includes('.well-known/host-meta.json'))); // on enterprise, these report errs // end of todo const foundExpectedErr = usefulErrors.find(re => re.message === `intentional error for debugging`); const foundUnwantedErrs = usefulErrors.filter(re => re.message !== `intentional error for debugging` && !re.message.includes('traversal forbidden')); diff --git a/tooling/bundle-content-scripts.ts b/tooling/bundle-content-scripts.ts index 7d078887f54..e0ca2a1257a 100644 --- a/tooling/bundle-content-scripts.ts +++ b/tooling/bundle-content-scripts.ts @@ -38,10 +38,12 @@ buildContentScript(([] as string[]).concat( getFilesInDir(`${sourceDir}/common/core/crypto`, /\.js$/, false), getFilesInDir(`${sourceDir}/common/core/crypto/pgp`, /\.js$/, false), getFilesInDir(`${sourceDir}/common/core/crypto/smime`, /\.js$/, false), - getFilesInDir(`${sourceDir}/common/api`, /\.js$/, false), - getFilesInDir(`${sourceDir}/common/api/error`, /\.js$/, false), + getFilesInDir(`${sourceDir}/common/api/shared`, /\.js$/, false), + getFilesInDir(`${sourceDir}/common/api/key-server`, /\.js$/, false), + // getFilesInDir(`${sourceDir}/common/api/account-server`, /\.js$/, false), // not used by content scripts yet getFilesInDir(`${sourceDir}/common/api/email-provider`, /\.js$/, false), getFilesInDir(`${sourceDir}/common/api/email-provider/gmail`, /\.js$/, false), + getFilesInDir(`${sourceDir}/common/api`, /\.js$/, false), getFilesInDir(`${sourceDir}/common/browser`, /\.js$/, false), getFilesInDir(`${sourceDir}/common`, /\.js$/, false), getFilesInDir(`${sourceDir}/content_scripts/webmail`, /\.js$/),