UNPKG

1.54 MBSource Map (JSON)View Raw
1{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///external \"commander\"","webpack:///external \"path\"","webpack:///external \"node-forge\"","webpack:///external \"fs\"","webpack:///external \"node-fetch\"","webpack:///external \"inquirer\"","webpack:///external \"crypto\"","webpack:///external \"tldjs\"","webpack:///external \"papaparse\"","webpack:///external \"lunr\"","webpack:///external \"chalk\"","webpack:///external \"lowdb\"","webpack:///external \"jsdom\"","webpack:///external \"big-integer\"","webpack:///external \"lowdb/adapters/FileSync\"","webpack:///external \"readline\"","webpack:///external \"form-data\"","webpack:///external \"https-proxy-agent\"","webpack:///external \"zxcvbn\"","webpack:///external \"url\"","webpack:///./jslib/src/enums/twoFactorProviderType.ts","webpack:///./jslib/src/models/domain/authResult.ts","webpack:///./jslib/src/models/request/deviceRequest.ts","webpack:///./jslib/src/models/request/keysRequest.ts","webpack:///./jslib/src/models/request/preloginRequest.ts","webpack:///./jslib/src/models/request/tokenRequest.ts","webpack:///./jslib/src/services/auth.service.ts","webpack:///./jslib/src/services/i18n.service.ts","webpack:///./src/services/i18n.service.ts","webpack:///./jslib/src/models/data/attachmentData.ts","webpack:///./jslib/src/models/view/attachmentView.ts","webpack:///./jslib/src/enums/encryptionType.ts","webpack:///./jslib/src/misc/utils.ts","webpack:///./jslib/src/models/domain/cipherString.ts","webpack:///./jslib/src/models/domain/domainBase.ts","webpack:///./jslib/src/models/domain/symmetricCryptoKey.ts","webpack:///./jslib/src/models/domain/attachment.ts","webpack:///./jslib/src/models/data/cardData.ts","webpack:///./jslib/src/models/view/cardView.ts","webpack:///./jslib/src/models/domain/card.ts","webpack:///./jslib/src/enums/cipherType.ts","webpack:///./jslib/src/models/data/fieldData.ts","webpack:///./jslib/src/models/data/identityData.ts","webpack:///./jslib/src/models/data/loginUriData.ts","webpack:///./jslib/src/models/data/loginData.ts","webpack:///./jslib/src/models/data/passwordHistoryData.ts","webpack:///./jslib/src/models/data/secureNoteData.ts","webpack:///./jslib/src/models/data/cipherData.ts","webpack:///./jslib/src/models/view/identityView.ts","webpack:///./jslib/src/models/view/loginView.ts","webpack:///./jslib/src/models/view/secureNoteView.ts","webpack:///./jslib/src/models/view/cipherView.ts","webpack:///./jslib/src/models/view/fieldView.ts","webpack:///./jslib/src/models/domain/field.ts","webpack:///./jslib/src/models/domain/identity.ts","webpack:///./jslib/src/enums/uriMatchType.ts","webpack:///./jslib/src/models/view/loginUriView.ts","webpack:///./jslib/src/models/domain/loginUri.ts","webpack:///./jslib/src/models/domain/login.ts","webpack:///./jslib/src/models/view/passwordHistoryView.ts","webpack:///./jslib/src/models/domain/password.ts","webpack:///./jslib/src/models/domain/secureNote.ts","webpack:///./jslib/src/models/domain/cipher.ts","webpack:///./jslib/src/models/view/collectionView.ts","webpack:///./jslib/src/models/domain/collection.ts","webpack:///./jslib/src/models/domain/encryptedObject.ts","webpack:///./jslib/src/models/domain/environmentUrls.ts","webpack:///./jslib/src/models/view/folderView.ts","webpack:///./jslib/src/models/domain/folder.ts","webpack:///./jslib/src/models/domain/generatedPasswordHistory.ts","webpack:///./jslib/src/models/domain/index.ts","webpack:///./src/services/nodeEnvSecureStorage.service.ts","webpack:///./jslib/src/enums/deviceType.ts","webpack:///./jslib/src/cli/services/cliPlatformUtils.service.ts","webpack:///./jslib/src/services/appId.service.ts","webpack:///./jslib/src/misc/throttle.ts","webpack:///./jslib/src/services/audit.service.ts","webpack:///./jslib/src/enums/fieldType.ts","webpack:///./jslib/src/models/request/cipherBulkDeleteRequest.ts","webpack:///./jslib/src/models/request/cipherBulkMoveRequest.ts","webpack:///./jslib/src/models/request/cipherBulkRestoreRequest.ts","webpack:///./jslib/src/models/response/baseResponse.ts","webpack:///./jslib/src/models/api/cardApi.ts","webpack:///./jslib/src/models/api/fieldApi.ts","webpack:///./jslib/src/models/api/identityApi.ts","webpack:///./jslib/src/models/api/loginUriApi.ts","webpack:///./jslib/src/models/api/loginApi.ts","webpack:///./jslib/src/models/api/secureNoteApi.ts","webpack:///./jslib/src/models/request/attachmentRequest.ts","webpack:///./jslib/src/models/request/cipherRequest.ts","webpack:///./jslib/src/models/request/cipherWithIdRequest.ts","webpack:///./jslib/src/models/request/cipherBulkShareRequest.ts","webpack:///./jslib/src/models/request/cipherCollectionsRequest.ts","webpack:///./jslib/src/models/request/cipherCreateRequest.ts","webpack:///./jslib/src/models/request/cipherShareRequest.ts","webpack:///./jslib/src/services/constants.service.ts","webpack:///./jslib/src/misc/sequentialize.ts","webpack:///./jslib/src/services/cipher.service.ts","webpack:///./jslib/src/models/data/collectionData.ts","webpack:///./jslib/src/models/domain/treeNode.ts","webpack:///./jslib/src/misc/serviceUtils.ts","webpack:///./jslib/src/services/collection.service.ts","webpack:///./jslib/src/services/container.service.ts","webpack:///./jslib/src/enums/kdfType.ts","webpack:///./jslib/src/misc/wordlist.ts","webpack:///./jslib/src/services/crypto.service.ts","webpack:///./jslib/src/services/environment.service.ts","webpack:///./jslib/src/models/export/card.ts","webpack:///./jslib/src/models/export/field.ts","webpack:///./jslib/src/models/export/identity.ts","webpack:///./jslib/src/models/export/loginUri.ts","webpack:///./jslib/src/models/export/login.ts","webpack:///./jslib/src/enums/secureNoteType.ts","webpack:///./jslib/src/models/export/secureNote.ts","webpack:///./jslib/src/models/export/cipher.ts","webpack:///./jslib/src/models/export/cipherWithIds.ts","webpack:///./jslib/src/models/export/collection.ts","webpack:///./jslib/src/models/export/collectionWithId.ts","webpack:///./jslib/src/models/export/folder.ts","webpack:///./jslib/src/models/export/folderWithId.ts","webpack:///./jslib/src/services/export.service.ts","webpack:///./jslib/src/models/data/folderData.ts","webpack:///./jslib/src/models/request/folderRequest.ts","webpack:///./jslib/src/services/folder.service.ts","webpack:///./jslib/src/models/request/collectionRequest.ts","webpack:///./jslib/src/models/request/importCiphersRequest.ts","webpack:///./jslib/src/models/request/importOrganizationCiphersRequest.ts","webpack:///./jslib/src/models/request/kvpRequest.ts","webpack:///./jslib/src/importers/baseImporter.ts","webpack:///./jslib/src/models/domain/importResult.ts","webpack:///./jslib/src/importers/ascendoCsvImporter.ts","webpack:///./jslib/src/importers/avastCsvImporter.ts","webpack:///./jslib/src/importers/avastJsonImporter.ts","webpack:///./jslib/src/importers/aviraCsvImporter.ts","webpack:///./jslib/src/importers/bitwardenCsvImporter.ts","webpack:///./jslib/src/importers/bitwardenJsonImporter.ts","webpack:///./jslib/src/importers/blackBerryCsvImporter.ts","webpack:///./jslib/src/importers/blurCsvImporter.ts","webpack:///./jslib/src/importers/buttercupCsvImporter.ts","webpack:///./jslib/src/importers/chromeCsvImporter.ts","webpack:///./jslib/src/importers/clipperzHtmlImporter.ts","webpack:///./jslib/src/importers/codebookCsvImporter.ts","webpack:///./jslib/src/importers/dashlaneJsonImporter.ts","webpack:///./jslib/src/importers/encryptrCsvImporter.ts","webpack:///./jslib/src/importers/enpassCsvImporter.ts","webpack:///./jslib/src/importers/enpassJsonImporter.ts","webpack:///./jslib/src/importers/firefoxCsvImporter.ts","webpack:///./jslib/src/importers/fsecureFskImporter.ts","webpack:///./jslib/src/importers/gnomeJsonImporter.ts","webpack:///./jslib/src/importers/kasperskyTxtImporter.ts","webpack:///./jslib/src/importers/keepass2XmlImporter.ts","webpack:///./jslib/src/importers/keepassxCsvImporter.ts","webpack:///./jslib/src/importers/keeperCsvImporter.ts","webpack:///./jslib/src/importers/lastpassCsvImporter.ts","webpack:///./jslib/src/importers/logMeOnceCsvImporter.ts","webpack:///./jslib/src/importers/meldiumCsvImporter.ts","webpack:///./jslib/src/importers/msecureCsvImporter.ts","webpack:///./jslib/src/importers/mykiCsvImporter.ts","webpack:///./jslib/src/importers/onepassword1PifImporter.ts","webpack:///./jslib/src/models/view/view.ts","webpack:///./jslib/src/models/view/index.ts","webpack:///./jslib/src/importers/onepasswordWinCsvImporter.ts","webpack:///./jslib/src/importers/padlockCsvImporter.ts","webpack:///./jslib/src/importers/passkeepCsvImporter.ts","webpack:///./jslib/src/importers/passmanJsonImporter.ts","webpack:///./jslib/src/importers/passpackCsvImporter.ts","webpack:///./jslib/src/importers/passwordAgentCsvImporter.ts","webpack:///./jslib/src/importers/passwordBossJsonImporter.ts","webpack:///./jslib/src/importers/passwordDragonXmlImporter.ts","webpack:///./jslib/src/importers/passwordSafeXmlImporter.ts","webpack:///./jslib/src/importers/passwordWalletTxtImporter.ts","webpack:///./jslib/src/importers/rememBearCsvImporter.ts","webpack:///./jslib/src/importers/roboformCsvImporter.ts","webpack:///./jslib/src/importers/safeInCloudXmlImporter.ts","webpack:///./jslib/src/importers/saferpassCsvImport.ts","webpack:///./jslib/src/importers/secureSafeCsvImporter.ts","webpack:///./jslib/src/importers/splashIdCsvImporter.ts","webpack:///./jslib/src/importers/stickyPasswordXmlImporter.ts","webpack:///./jslib/src/importers/truekeyCsvImporter.ts","webpack:///./jslib/src/importers/upmCsvImporter.ts","webpack:///./jslib/src/importers/zohoVaultCsvImporter.ts","webpack:///./jslib/src/services/import.service.ts","webpack:///./jslib/src/misc/nodeUtils.ts","webpack:///./jslib/src/services/lowdbStorage.service.ts","webpack:///./jslib/src/models/response/apiKeyResponse.ts","webpack:///./jslib/src/models/response/billingResponse.ts","webpack:///./jslib/src/models/response/breachAccountResponse.ts","webpack:///./jslib/src/models/response/attachmentResponse.ts","webpack:///./jslib/src/models/response/passwordHistoryResponse.ts","webpack:///./jslib/src/models/response/cipherResponse.ts","webpack:///./jslib/src/models/response/selectionReadOnlyResponse.ts","webpack:///./jslib/src/models/response/collectionResponse.ts","webpack:///./jslib/src/models/response/globalDomainResponse.ts","webpack:///./jslib/src/models/response/domainsResponse.ts","webpack:///./jslib/src/models/response/errorResponse.ts","webpack:///./jslib/src/models/response/eventResponse.ts","webpack:///./jslib/src/models/response/folderResponse.ts","webpack:///./jslib/src/models/response/groupResponse.ts","webpack:///./jslib/src/models/response/identityTokenResponse.ts","webpack:///./jslib/src/models/response/identityTwoFactorResponse.ts","webpack:///./jslib/src/models/response/listResponse.ts","webpack:///./jslib/src/models/response/organizationResponse.ts","webpack:///./jslib/src/models/response/subscriptionResponse.ts","webpack:///./jslib/src/models/response/organizationSubscriptionResponse.ts","webpack:///./jslib/src/models/response/organizationUserResponse.ts","webpack:///./jslib/src/models/response/profileOrganizationResponse.ts","webpack:///./jslib/src/models/response/profileResponse.ts","webpack:///./jslib/src/models/response/paymentResponse.ts","webpack:///./jslib/src/models/response/policyResponse.ts","webpack:///./jslib/src/models/response/preloginResponse.ts","webpack:///./jslib/src/models/response/syncResponse.ts","webpack:///./jslib/src/models/response/twoFactorAuthenticatorResponse.ts","webpack:///./jslib/src/models/response/twoFactorDuoResponse.ts","webpack:///./jslib/src/models/response/twoFactorEmailResponse.ts","webpack:///./jslib/src/models/response/twoFactorProviderResponse.ts","webpack:///./jslib/src/models/response/twoFactorRescoverResponse.ts","webpack:///./jslib/src/models/response/twoFactorU2fResponse.ts","webpack:///./jslib/src/models/response/twoFactorYubiKeyResponse.ts","webpack:///./jslib/src/models/response/userKeyResponse.ts","webpack:///./jslib/src/services/api.service.ts","webpack:///./jslib/src/services/nodeApi.service.ts","webpack:///./jslib/src/models/domain/decryptParameters.ts","webpack:///./jslib/src/services/nodeCryptoFunction.service.ts","webpack:///./jslib/src/services/noopMessaging.service.ts","webpack:///./jslib/src/models/domain/passwordGeneratorPolicyOptions.ts","webpack:///./jslib/src/enums/policyType.ts","webpack:///./jslib/src/services/passwordGeneration.service.ts","webpack:///./jslib/src/models/domain/masterPasswordPolicyOptions.ts","webpack:///./jslib/src/models/domain/policy.ts","webpack:///./jslib/src/services/policy.service.ts","webpack:///./jslib/src/services/search.service.ts","webpack:///./jslib/src/services/settings.service.ts","webpack:///./jslib/src/models/data/organizationData.ts","webpack:///./jslib/src/models/data/policyData.ts","webpack:///./jslib/src/services/sync.service.ts","webpack:///./jslib/src/services/token.service.ts","webpack:///./jslib/src/services/totp.service.ts","webpack:///./jslib/src/enums/organizationUserStatusType.ts","webpack:///./jslib/src/enums/organizationUserType.ts","webpack:///./jslib/src/models/domain/organization.ts","webpack:///./jslib/src/services/user.service.ts","webpack:///./jslib/src/services/vaultTimeout.service.ts","webpack:///./jslib/src/cli/models/response.ts","webpack:///./jslib/src/cli/models/response/messageResponse.ts","webpack:///./jslib/src/cli/models/response/stringResponse.ts","webpack:///./src/commands/config.command.ts","webpack:///./jslib/src/models/request/organizationUserConfirmRequest.ts","webpack:///./src/commands/confirm.command.ts","webpack:///./jslib/src/models/request/selectionReadOnlyRequest.ts","webpack:///./src/models/response/attachmentResponse.ts","webpack:///./src/models/response/loginResponse.ts","webpack:///./src/models/response/passwordHistoryResponse.ts","webpack:///./jslib/src/enums/logLevelType.ts","webpack:///./jslib/src/enums/index.ts","webpack:///./src/models/response/cipherResponse.ts","webpack:///./src/models/response/folderResponse.ts","webpack:///./src/models/response/collectionResponse.ts","webpack:///./src/models/response/organizationCollectionResponse.ts","webpack:///./src/utils.ts","webpack:///./src/commands/create.command.ts","webpack:///./src/commands/delete.command.ts","webpack:///./src/commands/edit.command.ts","webpack:///./src/commands/encode.command.ts","webpack:///./src/commands/export.command.ts","webpack:///./src/commands/generate.command.ts","webpack:///./src/models/response/organizationResponse.ts","webpack:///./src/models/response/templateResponse.ts","webpack:///./src/models/selectionReadOnly.ts","webpack:///./src/models/request/organizationCollectionRequest.ts","webpack:///./src/commands/get.command.ts","webpack:///./src/commands/import.command.ts","webpack:///./jslib/src/cli/models/response/listResponse.ts","webpack:///./src/models/response/organizationUserResponse.ts","webpack:///./src/commands/list.command.ts","webpack:///./src/commands/lock.command.ts","webpack:///./jslib/src/models/request/passwordVerificationRequest.ts","webpack:///./jslib/src/models/request/twoFactorEmailRequest.ts","webpack:///./jslib/src/cli/commands/login.command.ts","webpack:///./src/commands/login.command.ts","webpack:///./src/commands/restore.command.ts","webpack:///./src/commands/share.command.ts","webpack:///./src/commands/sync.command.ts","webpack:///./src/commands/unlock.command.ts","webpack:///./src/commands/completion.command.ts","webpack:///./jslib/src/cli/commands/logout.command.ts","webpack:///./jslib/src/cli/commands/update.command.ts","webpack:///./jslib/src/cli/baseProgram.ts","webpack:///./src/program.ts","webpack:///./src/bw.ts"],"names":[],"mappings":"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T,SAAS;IACT,UAAU;IACV,SAAS;IACT,WAAW;IACX,WAAW;IACX,QAAQ;IACR,WAAW;IACX,SAAS;IACT,WAAW;IACX,WAAW;IACX,WAAW;IACX,WAAW;IACX,WAAW;IACX,WAAW;IACX,SAAS;IACT,SAAS;IACT,QAAQ;IACR,SAAS;IACT,QAAQ;IACR,WAAW;IACX,UAAU;IACV,UAAU;IACV,WAAW;IACX,SAAS;IACT,WAAW;IACX,UAAU;IACV,UAAU;IACV,WAAW;IACX,UAAU;IACV,WAAW;IACX,SAAS;IACT,SAAS;IACT,SAAS;IACT,UAAU;IACV,SAAS;IACT,WAAW;IACX,SAAS;IACT,OAAO;IACP,WAAW;IACX,SAAS;IACT,UAAU;IACV,UAAU;IACV,QAAQ;IACR,UAAU;IACV,WAAW;IACX,WAAW;IACX,SAAS;IACT,WAAW;IACX,WAAW;IACX,SAAS;IACT,MAAM;IACN,SAAS;IACT,UAAU;IACV,WAAW;IACX,WAAW;IACX,UAAU;IACV,WAAW;IACX,WAAW;IACX,UAAU;IACV,WAAW;IACX,SAAS;IACT,UAAU;IACV,SAAS;IACT,UAAU;IACV,UAAU;IACV,UAAU;IACV,WAAW;IACX,WAAW;IACX,WAAW;IACX,WAAW;IACX,UAAU;IACV,UAAU;IACV,SAAS;IACT,WAAW;IACX,SAAS;IACT,UAAU;IACV,WAAW;IACX,WAAW;IACX,WAAW;IACX,SAAS;IACT,SAAS;IACT,WAAW;IACX,WAAW;IACX,WAAW;IACX,UAAU;IACV,WAAW;IACX,WAAW;IACX,WAAW;IACX,SAAS;IACT,UAAU;IACV,WAAW;IACX,SAAS;IACT,WAAW;IACX,UAAU;IACV,SAAS;IACT,WAAW;IACX,WAAW;IACX,UAAU;IACV,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,UAAU;IACV,SAAS;IACT,WAAW;IACX,SAAS;IACT,SAAS;IACT,WAAW;IACX,MAAM;IACN,QAAQ;IACR,QAAQ;IACR,SAAS;IACT,QAAQ;IACR,SAAS;IACT,QAAQ;IACR,MAAM;IACN,OAAO;IACP,MAAM;IACN,UAAU;IACV,WAAW;IAC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T,WAAW;IACX,WAAW;IACX,SAAS;IACT,SAAS;IACT,QAAQ;IACR,SAAS;IACT,SAAS;IACT,UAAU;IACV,UAAU;IACV,UAAU;IACV,SAAS;IACT,UAAU;IACV,UAAU;IACV,UAAU;IACV,WAAW;IACX,UAAU;IACV,WAAW;IACX,WAAW;IACX,UAAU;IACV,UAAU;IACV,SAAS;IACT,UAAU;IACV,QAAQ;IACR,MAAM;IACN,OAAO;IACP,MAAM;IACN,SAAS;IACT,SAAS;IACT,UAAU;IACV,SAAS;IACT,UAAU;IACV,UAAU;IACV,WAAW;IACX,WAAW;IACX,UAAU;IACV,WAAW;IACX,UAAU;IACV,UAAU;IACV,UAAU;IACV,UAAU;IACV,WAAW;IACX,WAAW;IACX,WAAW;IACX,WAAW;IACX,WAAW;IACX,SAAS;IACT,WAAW;IACX,WAAW;IACX,WAAW;IACX,SAAS;IACT,UAAU;IACV,UAAU;IACV,UAAU;IACV,UAAU;IACV,WAAW;IACX,UAAU;IACV,UAAU;IACV,UAAU;IACV,UAAU;IACV,UAAU;IACV,UAAU;IACV,UAAU;IACV,WAAW;IACX,UAAU;IACV,WAAW;IACX,UAAU;IACV,SAAS;IACT,SAAS;IACT,UAAU;IACV,UAAU;IACV,UAAU;IACV,WAAW;IACX,WAAW;IACX,UAAU;IACV,SAAS;IACT,WAAW;IACX,UAAU;IACV,WAAW;IACX,WAAW;IACX,UAAU;IACV,WAAW;IACX,WAAW;IACX,UAAU;IACV,UAAU;IACV,UAAU;IACV,SAAS;IACT,WAAW;IACX,UAAU;IACV,WAAW;IACX,WAAW;IACX,WAAW;IACX,UAAU;IACV,WAAW;IACX,WAAW;IACX,UAAU;IACV,UAAU;IACV,WAAW;IACX,WAAW;IACX,WAAW;IACX,UAAU;IACV,WAAW;IACX,UAAU;IACV,SAAS;IACT,UAAU;IACV,UAAU;IACV,UAAU;IACV,SAAS;IACT,WAAW;IACX,UAAU;IACV,WAAW;IACX,KAAK;IACL,QAAQ;IACR,SAAS;IACT,WAAW;IACX,SAAS;IACT,WAAW;IACX,QAAQ;IACR,UAAU;IACV,QAAQ;IACR,OAAO;IAC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P,WAAW;IACX,UAAU;IACV,UAAU;IACV,UAAU;IACV,WAAW;IACX,WAAW;IACX,SAAS;IACT,UAAU;IACV,UAAU;IACV,WAAW;IACX,SAAS;IACT,QAAQ;IACR,WAAW;IACX,UAAU;IACV,UAAU;IACV,UAAU;IACV,UAAU;IACV,WAAW;IACX,WAAW;IACX,WAAW;IACX,WAAW;IACX,SAAS;IACT,UAAU;IACV,SAAS;IACT,WAAW;IACX,SAAS;IACT,UAAU;IACV,WAAW;IACX,SAAS;IACT,WAAW;IACX,UAAU;IACV,SAAS;IACT,WAAW;IACX,WAAW;IACX,UAAU;IACV,WAAW;IACX,QAAQ;IACR,UAAU;IACV,QAAQ;IACR,WAAW;IACX,UAAU;IACV,SAAS;IACT,UAAU;IACV,UAAU;IACV,WAAW;IACX,UAAU;IACV,WAAW;IACX,WAAW;IACX,WAAW;IACX,WAAW;IACX,UAAU;IACV,QAAQ;IACR,WAAW;IACX,UAAU;IACV,SAAS;IACT,UAAU;IACV,SAAS;IACT,WAAW;IACX,WAAW;IACX,QAAQ;IACR,QAAQ;IACR,WAAW;IACX,WAAW;IACX,WAAW;IACX,UAAU;IACV,QAAQ;IACR,WAAW;IACX,WAAW;IACX,UAAU;IACV,QAAQ;IACR,WAAW;IACX,WAAW;IACX,SAAS;IACT,QAAQ;IACR,WAAW;IACX,QAAQ;IACR,UAAU;IACV,UAAU;IACV,QAAQ;IACR,QAAQ;IACR,UAAU;IACV,SAAS;IACT,UAAU;IACV,WAAW;IACX,WAAW;IACX,SAAS;IACT,UAAU;IACV,UAAU;IACV,WAAW;IACX,UAAU;IACV,UAAU;IACV,QAAQ;IACR,UAAU;IACV,WAAW;IACX,QAAQ;IACR,WAAW;IACX,WAAW;IACX,UAAU;IACV,UAAU;IACV,UAAU;IACV,WAAW;IACX,WAAW;IACX,WAAW;IACX,UAAU;IACV,WAAW;IACX,UAAU;IACV,UAAU;IACV,QAAQ;IACR,UAAU;IACV,UAAU;IACV,QAAQ;IACR,UAAU;IACV,UAAU;IACV,WAAW;IACX,UAAU;IACV,UAAU;IACV,WAAW;IACX,WAAW;IACX,UAAU;IACV,WAAW;IAC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","file":"bw.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 21);\n","module.exports = require(\"commander\");","module.exports = require(\"path\");","module.exports = require(\"node-forge\");","module.exports = require(\"fs\");","module.exports = require(\"node-fetch\");","module.exports = require(\"inquirer\");","module.exports = require(\"crypto\");","module.exports = require(\"tldjs\");","module.exports = require(\"papaparse\");","module.exports = require(\"lunr\");","module.exports = require(\"chalk\");","module.exports = require(\"lowdb\");","module.exports = require(\"jsdom\");","module.exports = require(\"big-integer\");","module.exports = require(\"lowdb/adapters/FileSync\");","module.exports = require(\"readline\");","module.exports = require(\"form-data\");","module.exports = require(\"https-proxy-agent\");","module.exports = require(\"zxcvbn\");","module.exports = require(\"url\");","export enum TwoFactorProviderType {\n Authenticator = 0,\n Email = 1,\n Duo = 2,\n Yubikey = 3,\n U2f = 4,\n Remember = 5,\n OrganizationDuo = 6,\n}\n","import { TwoFactorProviderType } from '../../enums/twoFactorProviderType';\n\nexport class AuthResult {\n twoFactor: boolean = false;\n twoFactorProviders: Map<TwoFactorProviderType, { [key: string]: string; }> = null;\n}\n","import { DeviceType } from '../../enums/deviceType';\n\nimport { PlatformUtilsService } from '../../abstractions/platformUtils.service';\n\nexport class DeviceRequest {\n type: DeviceType;\n name: string;\n identifier: string;\n pushToken?: string;\n\n constructor(appId: string, platformUtilsService: PlatformUtilsService) {\n this.type = platformUtilsService.getDevice();\n this.name = platformUtilsService.getDeviceString();\n this.identifier = appId;\n this.pushToken = null;\n }\n}\n","export class KeysRequest {\n publicKey: string;\n encryptedPrivateKey: string;\n\n constructor(publicKey: string, encryptedPrivateKey: string) {\n this.publicKey = publicKey;\n this.encryptedPrivateKey = encryptedPrivateKey;\n }\n}\n","export class PreloginRequest {\n email: string;\n\n constructor(email: string) {\n this.email = email;\n }\n}\n","import { TwoFactorProviderType } from '../../enums/twoFactorProviderType';\n\nimport { DeviceRequest } from './deviceRequest';\n\nexport class TokenRequest {\n email: string;\n masterPasswordHash: string;\n token: string;\n provider: TwoFactorProviderType;\n remember: boolean;\n device?: DeviceRequest;\n\n constructor(email: string, masterPasswordHash: string, provider: TwoFactorProviderType,\n token: string, remember: boolean, device?: DeviceRequest) {\n this.email = email;\n this.masterPasswordHash = masterPasswordHash;\n this.token = token;\n this.provider = provider;\n this.remember = remember;\n this.device = device != null ? device : null;\n }\n\n toIdentityToken(clientId: string) {\n const obj: any = {\n grant_type: 'password',\n username: this.email,\n password: this.masterPasswordHash,\n scope: 'api offline_access',\n client_id: clientId,\n };\n\n if (this.device) {\n obj.deviceType = this.device.type;\n obj.deviceIdentifier = this.device.identifier;\n obj.deviceName = this.device.name;\n // no push tokens for browser apps yet\n // obj.devicePushToken = this.device.pushToken;\n }\n\n if (this.token && this.provider != null) {\n obj.twoFactorToken = this.token;\n obj.twoFactorProvider = this.provider;\n obj.twoFactorRemember = this.remember ? '1' : '0';\n }\n\n return obj;\n }\n}\n","import { KdfType } from '../enums/kdfType';\nimport { TwoFactorProviderType } from '../enums/twoFactorProviderType';\n\nimport { AuthResult } from '../models/domain/authResult';\nimport { SymmetricCryptoKey } from '../models/domain/symmetricCryptoKey';\n\nimport { DeviceRequest } from '../models/request/deviceRequest';\nimport { KeysRequest } from '../models/request/keysRequest';\nimport { PreloginRequest } from '../models/request/preloginRequest';\nimport { TokenRequest } from '../models/request/tokenRequest';\n\nimport { ErrorResponse } from '../models/response/errorResponse';\nimport { IdentityTokenResponse } from '../models/response/identityTokenResponse';\nimport { IdentityTwoFactorResponse } from '../models/response/identityTwoFactorResponse';\n\nimport { ApiService } from '../abstractions/api.service';\nimport { AppIdService } from '../abstractions/appId.service';\nimport { AuthService as AuthServiceAbstraction } from '../abstractions/auth.service';\nimport { CryptoService } from '../abstractions/crypto.service';\nimport { I18nService } from '../abstractions/i18n.service';\nimport { MessagingService } from '../abstractions/messaging.service';\nimport { PlatformUtilsService } from '../abstractions/platformUtils.service';\nimport { TokenService } from '../abstractions/token.service';\nimport { UserService } from '../abstractions/user.service';\n\nexport const TwoFactorProviders = {\n [TwoFactorProviderType.Authenticator]: {\n type: TwoFactorProviderType.Authenticator,\n name: null as string,\n description: null as string,\n priority: 1,\n sort: 1,\n premium: false,\n },\n [TwoFactorProviderType.Yubikey]: {\n type: TwoFactorProviderType.Yubikey,\n name: null as string,\n description: null as string,\n priority: 3,\n sort: 2,\n premium: true,\n },\n [TwoFactorProviderType.Duo]: {\n type: TwoFactorProviderType.Duo,\n name: 'Duo',\n description: null as string,\n priority: 2,\n sort: 3,\n premium: true,\n },\n [TwoFactorProviderType.OrganizationDuo]: {\n type: TwoFactorProviderType.OrganizationDuo,\n name: 'Duo (Organization)',\n description: null as string,\n priority: 10,\n sort: 4,\n premium: false,\n },\n [TwoFactorProviderType.U2f]: {\n type: TwoFactorProviderType.U2f,\n name: null as string,\n description: null as string,\n priority: 4,\n sort: 5,\n premium: true,\n },\n [TwoFactorProviderType.Email]: {\n type: TwoFactorProviderType.Email,\n name: null as string,\n description: null as string,\n priority: 0,\n sort: 6,\n premium: false,\n },\n};\n\nexport class AuthService implements AuthServiceAbstraction {\n email: string;\n masterPasswordHash: string;\n twoFactorProvidersData: Map<TwoFactorProviderType, { [key: string]: string; }>;\n selectedTwoFactorProviderType: TwoFactorProviderType = null;\n\n private key: SymmetricCryptoKey;\n private kdf: KdfType;\n private kdfIterations: number;\n\n constructor(private cryptoService: CryptoService, private apiService: ApiService,\n private userService: UserService, private tokenService: TokenService,\n private appIdService: AppIdService, private i18nService: I18nService,\n private platformUtilsService: PlatformUtilsService, private messagingService: MessagingService,\n private setCryptoKeys = true) { }\n\n init() {\n TwoFactorProviders[TwoFactorProviderType.Email].name = this.i18nService.t('emailTitle');\n TwoFactorProviders[TwoFactorProviderType.Email].description = this.i18nService.t('emailDesc');\n\n TwoFactorProviders[TwoFactorProviderType.Authenticator].name = this.i18nService.t('authenticatorAppTitle');\n TwoFactorProviders[TwoFactorProviderType.Authenticator].description =\n this.i18nService.t('authenticatorAppDesc');\n\n TwoFactorProviders[TwoFactorProviderType.Duo].description = this.i18nService.t('duoDesc');\n\n TwoFactorProviders[TwoFactorProviderType.OrganizationDuo].name =\n 'Duo (' + this.i18nService.t('organization') + ')';\n TwoFactorProviders[TwoFactorProviderType.OrganizationDuo].description =\n this.i18nService.t('duoOrganizationDesc');\n\n TwoFactorProviders[TwoFactorProviderType.U2f].name = this.i18nService.t('u2fTitle');\n TwoFactorProviders[TwoFactorProviderType.U2f].description = this.i18nService.t('u2fDesc');\n\n TwoFactorProviders[TwoFactorProviderType.Yubikey].name = this.i18nService.t('yubiKeyTitle');\n TwoFactorProviders[TwoFactorProviderType.Yubikey].description = this.i18nService.t('yubiKeyDesc');\n }\n\n async logIn(email: string, masterPassword: string): Promise<AuthResult> {\n this.selectedTwoFactorProviderType = null;\n const key = await this.makePreloginKey(masterPassword, email);\n const hashedPassword = await this.cryptoService.hashPassword(masterPassword, key);\n return await this.logInHelper(email, hashedPassword, key);\n }\n\n async logInTwoFactor(twoFactorProvider: TwoFactorProviderType, twoFactorToken: string,\n remember?: boolean): Promise<AuthResult> {\n return await this.logInHelper(this.email, this.masterPasswordHash, this.key, twoFactorProvider,\n twoFactorToken, remember);\n }\n\n async logInComplete(email: string, masterPassword: string, twoFactorProvider: TwoFactorProviderType,\n twoFactorToken: string, remember?: boolean): Promise<AuthResult> {\n this.selectedTwoFactorProviderType = null;\n const key = await this.makePreloginKey(masterPassword, email);\n const hashedPassword = await this.cryptoService.hashPassword(masterPassword, key);\n return await this.logInHelper(email, hashedPassword, key, twoFactorProvider, twoFactorToken, remember);\n }\n\n logOut(callback: Function) {\n callback();\n this.messagingService.send('loggedOut');\n }\n\n getSupportedTwoFactorProviders(win: Window): any[] {\n const providers: any[] = [];\n if (this.twoFactorProvidersData == null) {\n return providers;\n }\n\n if (this.twoFactorProvidersData.has(TwoFactorProviderType.OrganizationDuo) &&\n this.platformUtilsService.supportsDuo()) {\n providers.push(TwoFactorProviders[TwoFactorProviderType.OrganizationDuo]);\n }\n\n if (this.twoFactorProvidersData.has(TwoFactorProviderType.Authenticator)) {\n providers.push(TwoFactorProviders[TwoFactorProviderType.Authenticator]);\n }\n\n if (this.twoFactorProvidersData.has(TwoFactorProviderType.Yubikey)) {\n providers.push(TwoFactorProviders[TwoFactorProviderType.Yubikey]);\n }\n\n if (this.twoFactorProvidersData.has(TwoFactorProviderType.Duo) && this.platformUtilsService.supportsDuo()) {\n providers.push(TwoFactorProviders[TwoFactorProviderType.Duo]);\n }\n\n if (this.twoFactorProvidersData.has(TwoFactorProviderType.U2f) && this.platformUtilsService.supportsU2f(win)) {\n providers.push(TwoFactorProviders[TwoFactorProviderType.U2f]);\n }\n\n if (this.twoFactorProvidersData.has(TwoFactorProviderType.Email)) {\n providers.push(TwoFactorProviders[TwoFactorProviderType.Email]);\n }\n\n return providers;\n }\n\n getDefaultTwoFactorProvider(u2fSupported: boolean): TwoFactorProviderType {\n if (this.twoFactorProvidersData == null) {\n return null;\n }\n\n if (this.selectedTwoFactorProviderType != null &&\n this.twoFactorProvidersData.has(this.selectedTwoFactorProviderType)) {\n return this.selectedTwoFactorProviderType;\n }\n\n let providerType: TwoFactorProviderType = null;\n let providerPriority = -1;\n this.twoFactorProvidersData.forEach((value, type) => {\n const provider = (TwoFactorProviders as any)[type];\n if (provider != null && provider.priority > providerPriority) {\n if (type === TwoFactorProviderType.U2f && !u2fSupported) {\n return;\n }\n\n providerType = type;\n providerPriority = provider.priority;\n }\n });\n\n return providerType;\n }\n\n async makePreloginKey(masterPassword: string, email: string): Promise<SymmetricCryptoKey> {\n email = email.trim().toLowerCase();\n this.kdf = null;\n this.kdfIterations = null;\n try {\n const preloginResponse = await this.apiService.postPrelogin(new PreloginRequest(email));\n if (preloginResponse != null) {\n this.kdf = preloginResponse.kdf;\n this.kdfIterations = preloginResponse.kdfIterations;\n }\n } catch (e) {\n if (e == null || e.statusCode !== 404) {\n throw e;\n }\n }\n return this.cryptoService.makeKey(masterPassword, email, this.kdf, this.kdfIterations);\n }\n\n private async logInHelper(email: string, hashedPassword: string, key: SymmetricCryptoKey,\n twoFactorProvider?: TwoFactorProviderType, twoFactorToken?: string, remember?: boolean): Promise<AuthResult> {\n const storedTwoFactorToken = await this.tokenService.getTwoFactorToken(email);\n const appId = await this.appIdService.getAppId();\n const deviceRequest = new DeviceRequest(appId, this.platformUtilsService);\n\n let request: TokenRequest;\n if (twoFactorToken != null && twoFactorProvider != null) {\n request = new TokenRequest(email, hashedPassword, twoFactorProvider, twoFactorToken, remember,\n deviceRequest);\n } else if (storedTwoFactorToken != null) {\n request = new TokenRequest(email, hashedPassword, TwoFactorProviderType.Remember,\n storedTwoFactorToken, false, deviceRequest);\n } else {\n request = new TokenRequest(email, hashedPassword, null, null, false, deviceRequest);\n }\n\n const response = await this.apiService.postIdentityToken(request);\n\n this.clearState();\n const result = new AuthResult();\n result.twoFactor = !(response as any).accessToken;\n\n if (result.twoFactor) {\n // two factor required\n const twoFactorResponse = response as IdentityTwoFactorResponse;\n this.email = email;\n this.masterPasswordHash = hashedPassword;\n this.key = this.setCryptoKeys ? key : null;\n this.twoFactorProvidersData = twoFactorResponse.twoFactorProviders2;\n result.twoFactorProviders = twoFactorResponse.twoFactorProviders2;\n return result;\n }\n\n const tokenResponse = response as IdentityTokenResponse;\n if (tokenResponse.twoFactorToken != null) {\n await this.tokenService.setTwoFactorToken(tokenResponse.twoFactorToken, email);\n }\n\n await this.tokenService.setTokens(tokenResponse.accessToken, tokenResponse.refreshToken);\n await this.userService.setInformation(this.tokenService.getUserId(), this.tokenService.getEmail(),\n this.kdf, this.kdfIterations);\n if (this.setCryptoKeys) {\n await this.cryptoService.setKey(key);\n await this.cryptoService.setKeyHash(hashedPassword);\n await this.cryptoService.setEncKey(tokenResponse.key);\n\n // User doesn't have a key pair yet (old account), let's generate one for them\n if (tokenResponse.privateKey == null) {\n try {\n const keyPair = await this.cryptoService.makeKeyPair();\n await this.apiService.postAccountKeys(new KeysRequest(keyPair[0], keyPair[1].encryptedString));\n tokenResponse.privateKey = keyPair[1].encryptedString;\n } catch (e) {\n // tslint:disable-next-line\n console.error(e);\n }\n }\n\n await this.cryptoService.setEncPrivateKey(tokenResponse.privateKey);\n }\n\n this.messagingService.send('loggedIn');\n return result;\n }\n\n private clearState(): void {\n this.email = null;\n this.masterPasswordHash = null;\n this.twoFactorProvidersData = null;\n this.selectedTwoFactorProviderType = null;\n }\n}\n","import { I18nService as I18nServiceAbstraction } from '../abstractions/i18n.service';\n\nexport class I18nService implements I18nServiceAbstraction {\n locale: string;\n // First locale is the default (English)\n supportedTranslationLocales: string[] = ['en'];\n translationLocale: string;\n collator: Intl.Collator;\n localeNames = new Map<string, string>([\n ['af', 'Afrikaans'],\n ['bg', 'български'],\n ['ca', 'català'],\n ['cs', 'čeština'],\n ['da', 'dansk'],\n ['de', 'Deutsch'],\n ['el', 'Ελληνικά'],\n ['en', 'English'],\n ['en-GB', 'English (British)'],\n ['eo', 'Esperanto'],\n ['es', 'español'],\n ['et', 'eesti'],\n ['fa', 'فارسی'],\n ['fi', 'suomi'],\n ['fr', 'français'],\n ['he', 'עברית'],\n ['hi', 'हिन्दी'],\n ['hr', 'hrvatski'],\n ['hu', 'magyar'],\n ['id', 'Bahasa Indonesia'],\n ['it', 'italiano'],\n ['ja', '日本語'],\n ['ko', '한국어'],\n ['nb', 'norsk (bokmål)'],\n ['nl', 'Nederlands'],\n ['pl', 'polski'],\n ['pt-BR', 'português do Brasil'],\n ['pt-PT', 'português'],\n ['ro', 'română'],\n ['ru', 'русский'],\n ['sk', 'slovenčina'],\n ['sv', 'svenska'],\n ['th', 'ไทย'],\n ['tr', 'Türkçe'],\n ['uk', 'українська'],\n ['vi', 'Tiếng Việt'],\n ['zh-CN', '中文(中国大陆)'],\n ['zh-TW', '中文(台灣)'],\n ]);\n\n protected inited: boolean;\n protected defaultMessages: any = {};\n protected localeMessages: any = {};\n\n constructor(protected systemLanguage: string, protected localesDirectory: string,\n protected getLocalesJson: (formattedLocale: string) => Promise<any>) {\n this.systemLanguage = systemLanguage.replace('_', '-');\n }\n\n async init(locale?: string) {\n if (this.inited) {\n throw new Error('i18n already initialized.');\n }\n if (this.supportedTranslationLocales == null || this.supportedTranslationLocales.length === 0) {\n throw new Error('supportedTranslationLocales not set.');\n }\n\n this.inited = true;\n this.locale = this.translationLocale = locale != null ? locale : this.systemLanguage;\n\n try {\n this.collator = new Intl.Collator(this.locale, { numeric: true, sensitivity: 'base' });\n } catch {\n this.collator = null;\n }\n\n if (this.supportedTranslationLocales.indexOf(this.translationLocale) === -1) {\n this.translationLocale = this.translationLocale.slice(0, 2);\n\n if (this.supportedTranslationLocales.indexOf(this.translationLocale) === -1) {\n this.translationLocale = this.supportedTranslationLocales[0];\n }\n }\n\n if (this.localesDirectory != null) {\n await this.loadMessages(this.translationLocale, this.localeMessages);\n if (this.translationLocale !== this.supportedTranslationLocales[0]) {\n await this.loadMessages(this.supportedTranslationLocales[0], this.defaultMessages);\n }\n }\n }\n\n t(id: string, p1?: string, p2?: string, p3?: string): string {\n return this.translate(id, p1, p2, p3);\n }\n\n translate(id: string, p1?: string, p2?: string, p3?: string): string {\n let result: string;\n if (this.localeMessages.hasOwnProperty(id) && this.localeMessages[id]) {\n result = this.localeMessages[id];\n } else if (this.defaultMessages.hasOwnProperty(id) && this.defaultMessages[id]) {\n result = this.defaultMessages[id];\n } else {\n result = '';\n }\n\n if (result !== '') {\n if (p1 != null) {\n result = result.split('__$1__').join(p1);\n }\n if (p2 != null) {\n result = result.split('__$2__').join(p2);\n }\n if (p3 != null) {\n result = result.split('__$3__').join(p3);\n }\n }\n\n return result;\n }\n\n private async loadMessages(locale: string, messagesObj: any): Promise<any> {\n const formattedLocale = locale.replace('-', '_');\n const locales = await this.getLocalesJson(formattedLocale);\n for (const prop in locales) {\n if (!locales.hasOwnProperty(prop)) {\n continue;\n }\n messagesObj[prop] = locales[prop].message;\n\n if (locales[prop].placeholders) {\n for (const placeProp in locales[prop].placeholders) {\n if (!locales[prop].placeholders.hasOwnProperty(placeProp) ||\n !locales[prop].placeholders[placeProp].content) {\n continue;\n }\n\n const replaceToken = '\\\\$' + placeProp.toUpperCase() + '\\\\$';\n let replaceContent = locales[prop].placeholders[placeProp].content;\n if (replaceContent === '$1' || replaceContent === '$2' || replaceContent === '$3') {\n replaceContent = '__$' + replaceContent + '__';\n }\n messagesObj[prop] = messagesObj[prop].replace(new RegExp(replaceToken, 'g'), replaceContent);\n }\n }\n }\n }\n\n}\n","import * as fs from 'fs';\nimport * as path from 'path';\n\nimport { I18nService as BaseI18nService } from 'jslib/services/i18n.service';\n\nexport class I18nService extends BaseI18nService {\n constructor(systemLanguage: string, localesDirectory: string) {\n super(systemLanguage, localesDirectory, (formattedLocale: string) => {\n const filePath = path.join(__dirname, this.localesDirectory + '/' + formattedLocale + '/messages.json');\n const localesJson = fs.readFileSync(filePath, 'utf8');\n const locales = JSON.parse(localesJson.replace(/^\\uFEFF/, '')); // strip the BOM\n return Promise.resolve(locales);\n });\n\n this.supportedTranslationLocales = [\n 'en',\n ];\n }\n}\n","import { AttachmentResponse } from '../response/attachmentResponse';\n\nexport class AttachmentData {\n id: string;\n url: string;\n fileName: string;\n key: string;\n size: string;\n sizeName: string;\n\n constructor(response?: AttachmentResponse) {\n if (response == null) {\n return;\n }\n this.id = response.id;\n this.url = response.url;\n this.fileName = response.fileName;\n this.key = response.key;\n this.size = response.size;\n this.sizeName = response.sizeName;\n }\n}\n","import { View } from './view';\n\nimport { Attachment } from '../domain/attachment';\nimport { SymmetricCryptoKey } from '../domain/symmetricCryptoKey';\n\nexport class AttachmentView implements View {\n id: string = null;\n url: string = null;\n size: string = null;\n sizeName: string = null;\n fileName: string = null;\n key: SymmetricCryptoKey = null;\n\n constructor(a?: Attachment) {\n if (!a) {\n return;\n }\n\n this.id = a.id;\n this.url = a.url;\n this.size = a.size;\n this.sizeName = a.sizeName;\n }\n\n get fileSize(): number {\n try {\n if (this.size != null) {\n return parseInt(this.size, null);\n }\n } catch { }\n return 0;\n }\n}\n","export enum EncryptionType {\n AesCbc256_B64 = 0,\n AesCbc128_HmacSha256_B64 = 1,\n AesCbc256_HmacSha256_B64 = 2,\n Rsa2048_OaepSha256_B64 = 3,\n Rsa2048_OaepSha1_B64 = 4,\n Rsa2048_OaepSha256_HmacSha256_B64 = 5,\n Rsa2048_OaepSha1_HmacSha256_B64 = 6,\n}\n","import * as tldjs from 'tldjs';\n\nimport { I18nService } from '../abstractions/i18n.service';\n\n// tslint:disable-next-line\nconst nodeURL = typeof window === 'undefined' ? require('url') : null;\n\nexport class Utils {\n static inited = false;\n static isNativeScript = false;\n static isNode = false;\n static isBrowser = true;\n static isMobileBrowser = false;\n static isAppleMobileBrowser = false;\n static global: any = null;\n static tldEndingRegex = /.*\\.(com|net|org|edu|uk|gov|ca|de|jp|fr|au|ru|ch|io|es|us|co|xyz|info|ly|mil)$/;\n\n static init() {\n if (Utils.inited) {\n return;\n }\n\n Utils.inited = true;\n Utils.isNode = typeof process !== 'undefined' && (process as any).release != null &&\n (process as any).release.name === 'node';\n Utils.isBrowser = typeof window !== 'undefined';\n Utils.isNativeScript = !Utils.isNode && !Utils.isBrowser;\n Utils.isMobileBrowser = Utils.isBrowser && this.isMobile(window);\n Utils.isAppleMobileBrowser = Utils.isBrowser && this.isAppleMobile(window);\n Utils.global = Utils.isNativeScript ? global : (Utils.isNode && !Utils.isBrowser ? global : window);\n }\n\n static fromB64ToArray(str: string): Uint8Array {\n if (Utils.isNode || Utils.isNativeScript) {\n return new Uint8Array(Buffer.from(str, 'base64'));\n } else {\n const binaryString = window.atob(str);\n const bytes = new Uint8Array(binaryString.length);\n for (let i = 0; i < binaryString.length; i++) {\n bytes[i] = binaryString.charCodeAt(i);\n }\n return bytes;\n }\n }\n\n static fromHexToArray(str: string): Uint8Array {\n if (Utils.isNode || Utils.isNativeScript) {\n return new Uint8Array(Buffer.from(str, 'hex'));\n } else {\n const bytes = new Uint8Array(str.length / 2);\n for (let i = 0; i < str.length; i += 2) {\n bytes[i / 2] = parseInt(str.substr(i, 2), 16);\n }\n return bytes;\n }\n }\n\n static fromUtf8ToArray(str: string): Uint8Array {\n if (Utils.isNode || Utils.isNativeScript) {\n return new Uint8Array(Buffer.from(str, 'utf8'));\n } else {\n const strUtf8 = unescape(encodeURIComponent(str));\n const arr = new Uint8Array(strUtf8.length);\n for (let i = 0; i < strUtf8.length; i++) {\n arr[i] = strUtf8.charCodeAt(i);\n }\n return arr;\n }\n }\n\n static fromByteStringToArray(str: string): Uint8Array {\n const arr = new Uint8Array(str.length);\n for (let i = 0; i < str.length; i++) {\n arr[i] = str.charCodeAt(i);\n }\n return arr;\n }\n\n static fromBufferToB64(buffer: ArrayBuffer): string {\n if (Utils.isNode || Utils.isNativeScript) {\n return Buffer.from(buffer).toString('base64');\n } else {\n let binary = '';\n const bytes = new Uint8Array(buffer);\n for (let i = 0; i < bytes.byteLength; i++) {\n binary += String.fromCharCode(bytes[i]);\n }\n return window.btoa(binary);\n }\n }\n\n static fromBufferToUtf8(buffer: ArrayBuffer): string {\n if (Utils.isNode || Utils.isNativeScript) {\n return Buffer.from(buffer).toString('utf8');\n } else {\n const bytes = new Uint8Array(buffer);\n const encodedString = String.fromCharCode.apply(null, bytes);\n return decodeURIComponent(escape(encodedString));\n }\n }\n\n static fromBufferToByteString(buffer: ArrayBuffer): string {\n return String.fromCharCode.apply(null, new Uint8Array(buffer));\n }\n\n // ref: https://stackoverflow.com/a/40031979/1090359\n static fromBufferToHex(buffer: ArrayBuffer): string {\n if (Utils.isNode || Utils.isNativeScript) {\n return Buffer.from(buffer).toString('hex');\n } else {\n const bytes = new Uint8Array(buffer);\n return Array.prototype.map.call(bytes, (x: number) => ('00' + x.toString(16)).slice(-2)).join('');\n }\n }\n\n static fromUrlB64ToUtf8(b64Str: string): string {\n let output = b64Str.replace(/-/g, '+').replace(/_/g, '/');\n switch (output.length % 4) {\n case 0:\n break;\n case 2:\n output += '==';\n break;\n case 3:\n output += '=';\n break;\n default:\n throw new Error('Illegal base64url string!');\n }\n\n return Utils.fromB64ToUtf8(output);\n }\n\n static fromB64ToUtf8(b64Str: string): string {\n if (Utils.isNode || Utils.isNativeScript) {\n return Buffer.from(b64Str, 'base64').toString('utf8');\n } else {\n return decodeURIComponent(escape(window.atob(b64Str)));\n }\n }\n\n // ref: http://stackoverflow.com/a/2117523/1090359\n static newGuid(): string {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\n // tslint:disable-next-line\n const r = Math.random() * 16 | 0;\n // tslint:disable-next-line\n const v = c === 'x' ? r : (r & 0x3 | 0x8);\n return v.toString(16);\n });\n }\n\n static isGuid(id: string) {\n return RegExp(/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/, 'i').test(id);\n }\n\n static getHostname(uriString: string): string {\n const url = Utils.getUrl(uriString);\n try {\n return url != null ? url.hostname : null;\n } catch {\n return null;\n }\n }\n\n static getHost(uriString: string): string {\n const url = Utils.getUrl(uriString);\n try {\n return url != null ? url.host : null;\n } catch {\n return null;\n }\n }\n\n static getDomain(uriString: string): string {\n if (uriString == null) {\n return null;\n }\n\n uriString = uriString.trim();\n if (uriString === '') {\n return null;\n }\n\n if (uriString.startsWith('data:')) {\n return null;\n }\n\n let httpUrl = uriString.startsWith('http://') || uriString.startsWith('https://');\n if (!httpUrl && uriString.indexOf('://') < 0 && Utils.tldEndingRegex.test(uriString)) {\n uriString = 'http://' + uriString;\n httpUrl = true;\n }\n\n if (httpUrl) {\n try {\n const url = Utils.getUrlObject(uriString);\n if (url.hostname === 'localhost' || Utils.validIpAddress(url.hostname)) {\n return url.hostname;\n }\n\n const urlDomain = tldjs != null && tldjs.getDomain != null ? tldjs.getDomain(url.hostname) : null;\n return urlDomain != null ? urlDomain : url.hostname;\n } catch (e) { }\n }\n\n const domain = tldjs != null && tldjs.getDomain != null ? tldjs.getDomain(uriString) : null;\n if (domain != null) {\n return domain;\n }\n\n return null;\n }\n\n static getQueryParams(uriString: string): Map<string, string> {\n const url = Utils.getUrl(uriString);\n if (url == null || url.search == null || url.search === '') {\n return null;\n }\n const map = new Map<string, string>();\n const pairs = (url.search[0] === '?' ? url.search.substr(1) : url.search).split('&');\n pairs.forEach((pair) => {\n const parts = pair.split('=');\n if (parts.length < 1) {\n return;\n }\n map.set(decodeURIComponent(parts[0]).toLowerCase(), parts[1] == null ? '' : decodeURIComponent(parts[1]));\n });\n return map;\n }\n\n static getSortFunction(i18nService: I18nService, prop: string) {\n return (a: any, b: any) => {\n if (a[prop] == null && b[prop] != null) {\n return -1;\n }\n if (a[prop] != null && b[prop] == null) {\n return 1;\n }\n if (a[prop] == null && b[prop] == null) {\n return 0;\n }\n\n return i18nService.collator ? i18nService.collator.compare(a[prop], b[prop]) :\n a[prop].localeCompare(b[prop]);\n };\n }\n\n static isNullOrWhitespace(str: string): boolean {\n return str == null || typeof str !== 'string' || str.trim() === '';\n }\n\n private static validIpAddress(ipString: string): boolean {\n // tslint:disable-next-line\n const ipRegex = /^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/;\n return ipRegex.test(ipString);\n }\n\n private static isMobile(win: Window) {\n let mobile = false;\n ((a) => {\n // tslint:disable-next-line\n if (/(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(a) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-/i.test(a.substr(0, 4))) {\n mobile = true;\n }\n })(win.navigator.userAgent || win.navigator.vendor || (win as any).opera);\n return mobile || win.navigator.userAgent.match(/iPad/i) != null;\n }\n\n private static isAppleMobile(win: Window) {\n return win.navigator.userAgent.match(/iPhone/i) != null || win.navigator.userAgent.match(/iPad/i) != null;\n }\n\n private static getUrl(uriString: string): URL {\n if (uriString == null) {\n return null;\n }\n\n uriString = uriString.trim();\n if (uriString === '') {\n return null;\n }\n\n let url = Utils.getUrlObject(uriString);\n if (url == null) {\n const hasHttpProtocol = uriString.indexOf('http://') === 0 || uriString.indexOf('https://') === 0;\n if (!hasHttpProtocol && uriString.indexOf('.') > -1) {\n url = Utils.getUrlObject('http://' + uriString);\n }\n }\n return url;\n }\n\n private static getUrlObject(uriString: string): URL {\n try {\n if (nodeURL != null) {\n return nodeURL.URL ? new nodeURL.URL(uriString) : nodeURL.parse(uriString);\n } else if (typeof URL === 'function') {\n return new URL(uriString);\n } else if (window != null) {\n const hasProtocol = uriString.indexOf('://') > -1;\n if (!hasProtocol && uriString.indexOf('.') > -1) {\n uriString = 'http://' + uriString;\n } else if (!hasProtocol) {\n return null;\n }\n const anchor = window.document.createElement('a');\n anchor.href = uriString;\n return anchor as any;\n }\n } catch (e) { }\n\n return null;\n }\n}\n\nUtils.init();\n","import { EncryptionType } from '../../enums/encryptionType';\n\nimport { CryptoService } from '../../abstractions/crypto.service';\n\nimport { Utils } from '../../misc/utils';\n\nexport class CipherString {\n encryptedString?: string;\n encryptionType?: EncryptionType;\n decryptedValue?: string;\n data?: string;\n iv?: string;\n mac?: string;\n\n constructor(encryptedStringOrType: string | EncryptionType, data?: string, iv?: string, mac?: string) {\n if (data != null) {\n // data and header\n const encType = encryptedStringOrType as EncryptionType;\n\n if (iv != null) {\n this.encryptedString = encType + '.' + iv + '|' + data;\n } else {\n this.encryptedString = encType + '.' + data;\n }\n\n // mac\n if (mac != null) {\n this.encryptedString += ('|' + mac);\n }\n\n this.encryptionType = encType;\n this.data = data;\n this.iv = iv;\n this.mac = mac;\n\n return;\n }\n\n this.encryptedString = encryptedStringOrType as string;\n if (!this.encryptedString) {\n return;\n }\n\n const headerPieces = this.encryptedString.split('.');\n let encPieces: string[] = null;\n\n if (headerPieces.length === 2) {\n try {\n this.encryptionType = parseInt(headerPieces[0], null);\n encPieces = headerPieces[1].split('|');\n } catch (e) {\n return;\n }\n } else {\n encPieces = this.encryptedString.split('|');\n this.encryptionType = encPieces.length === 3 ? EncryptionType.AesCbc128_HmacSha256_B64 :\n EncryptionType.AesCbc256_B64;\n }\n\n switch (this.encryptionType) {\n case EncryptionType.AesCbc128_HmacSha256_B64:\n case EncryptionType.AesCbc256_HmacSha256_B64:\n if (encPieces.length !== 3) {\n return;\n }\n\n this.iv = encPieces[0];\n this.data = encPieces[1];\n this.mac = encPieces[2];\n break;\n case EncryptionType.AesCbc256_B64:\n if (encPieces.length !== 2) {\n return;\n }\n\n this.iv = encPieces[0];\n this.data = encPieces[1];\n break;\n case EncryptionType.Rsa2048_OaepSha256_B64:\n case EncryptionType.Rsa2048_OaepSha1_B64:\n if (encPieces.length !== 1) {\n return;\n }\n\n this.data = encPieces[0];\n break;\n default:\n return;\n }\n }\n\n async decrypt(orgId: string): Promise<string> {\n if (this.decryptedValue != null) {\n return this.decryptedValue;\n }\n\n let cryptoService: CryptoService;\n const containerService = (Utils.global as any).bitwardenContainerService;\n if (containerService) {\n cryptoService = containerService.getCryptoService();\n } else {\n throw new Error('global bitwardenContainerService not initialized.');\n }\n\n try {\n const orgKey = await cryptoService.getOrgKey(orgId);\n this.decryptedValue = await cryptoService.decryptToUtf8(this, orgKey);\n } catch (e) {\n this.decryptedValue = '[error: cannot decrypt]';\n }\n return this.decryptedValue;\n }\n}\n","import { CipherString } from './cipherString';\n\nimport { View } from '../view/view';\n\nexport default class Domain {\n protected buildDomainModel<D extends Domain>(domain: D, dataObj: any, map: any,\n alreadyEncrypted: boolean, notEncList: any[] = []) {\n for (const prop in map) {\n if (!map.hasOwnProperty(prop)) {\n continue;\n }\n\n const objProp = dataObj[(map[prop] || prop)];\n if (alreadyEncrypted === true || notEncList.indexOf(prop) > -1) {\n (domain as any)[prop] = objProp ? objProp : null;\n } else {\n (domain as any)[prop] = objProp ? new CipherString(objProp) : null;\n }\n }\n }\n protected buildDataModel<D extends Domain>(domain: D, dataObj: any, map: any, notCipherStringList: any[] = []) {\n for (const prop in map) {\n if (!map.hasOwnProperty(prop)) {\n continue;\n }\n\n const objProp = (domain as any)[(map[prop] || prop)];\n if (notCipherStringList.indexOf(prop) > -1) {\n (dataObj as any)[prop] = objProp != null ? objProp : null;\n } else {\n (dataObj as any)[prop] = objProp != null ? (objProp as CipherString).encryptedString : null;\n }\n }\n }\n\n protected async decryptObj<T extends View>(viewModel: T, map: any, orgId: string): Promise<T> {\n const promises = [];\n const self: any = this;\n\n for (const prop in map) {\n if (!map.hasOwnProperty(prop)) {\n continue;\n }\n\n // tslint:disable-next-line\n (function (theProp) {\n const p = Promise.resolve().then(() => {\n const mapProp = map[theProp] || theProp;\n if (self[mapProp]) {\n return self[mapProp].decrypt(orgId);\n }\n return null;\n }).then((val: any) => {\n (viewModel as any)[theProp] = val;\n });\n promises.push(p);\n })(prop);\n }\n\n await Promise.all(promises);\n return viewModel;\n }\n}\n","import { EncryptionType } from '../../enums/encryptionType';\n\nimport { Utils } from '../../misc/utils';\n\nexport class SymmetricCryptoKey {\n key: ArrayBuffer;\n encKey?: ArrayBuffer;\n macKey?: ArrayBuffer;\n encType: EncryptionType;\n\n keyB64: string;\n encKeyB64: string;\n macKeyB64: string;\n\n meta: any;\n\n constructor(key: ArrayBuffer, encType?: EncryptionType) {\n if (key == null) {\n throw new Error('Must provide key');\n }\n\n if (encType == null) {\n if (key.byteLength === 32) {\n encType = EncryptionType.AesCbc256_B64;\n } else if (key.byteLength === 64) {\n encType = EncryptionType.AesCbc256_HmacSha256_B64;\n } else {\n throw new Error('Unable to determine encType.');\n }\n }\n\n this.key = key;\n this.encType = encType;\n\n if (encType === EncryptionType.AesCbc256_B64 && key.byteLength === 32) {\n this.encKey = key;\n this.macKey = null;\n } else if (encType === EncryptionType.AesCbc128_HmacSha256_B64 && key.byteLength === 32) {\n this.encKey = key.slice(0, 16);\n this.macKey = key.slice(16, 32);\n } else if (encType === EncryptionType.AesCbc256_HmacSha256_B64 && key.byteLength === 64) {\n this.encKey = key.slice(0, 32);\n this.macKey = key.slice(32, 64);\n } else {\n throw new Error('Unsupported encType/key length.');\n }\n\n if (this.key != null) {\n this.keyB64 = Utils.fromBufferToB64(this.key);\n }\n if (this.encKey != null) {\n this.encKeyB64 = Utils.fromBufferToB64(this.encKey);\n }\n if (this.macKey != null) {\n this.macKeyB64 = Utils.fromBufferToB64(this.macKey);\n }\n }\n}\n","import { AttachmentData } from '../data/attachmentData';\n\nimport { AttachmentView } from '../view/attachmentView';\n\nimport { CipherString } from './cipherString';\nimport Domain from './domainBase';\nimport { SymmetricCryptoKey } from './symmetricCryptoKey';\n\nimport { CryptoService } from '../../abstractions/crypto.service';\n\nimport { Utils } from '../../misc/utils';\n\nexport class Attachment extends Domain {\n id: string;\n url: string;\n size: string;\n sizeName: string;\n key: CipherString;\n fileName: CipherString;\n\n constructor(obj?: AttachmentData, alreadyEncrypted: boolean = false) {\n super();\n if (obj == null) {\n return;\n }\n\n this.size = obj.size;\n this.buildDomainModel(this, obj, {\n id: null,\n url: null,\n sizeName: null,\n fileName: null,\n key: null,\n }, alreadyEncrypted, ['id', 'url', 'sizeName']);\n }\n\n async decrypt(orgId: string): Promise<AttachmentView> {\n const view = await this.decryptObj(new AttachmentView(this), {\n fileName: null,\n }, orgId);\n\n if (this.key != null) {\n let cryptoService: CryptoService;\n const containerService = (Utils.global as any).bitwardenContainerService;\n if (containerService) {\n cryptoService = containerService.getCryptoService();\n } else {\n throw new Error('global bitwardenContainerService not initialized.');\n }\n\n try {\n const orgKey = await cryptoService.getOrgKey(orgId);\n const decValue = await cryptoService.decryptToBytes(this.key, orgKey);\n view.key = new SymmetricCryptoKey(decValue);\n } catch (e) {\n // TODO: error?\n }\n }\n\n return view;\n }\n\n toAttachmentData(): AttachmentData {\n const a = new AttachmentData();\n a.size = this.size;\n this.buildDataModel(this, a, {\n id: null,\n url: null,\n sizeName: null,\n fileName: null,\n key: null,\n }, ['id', 'url', 'sizeName']);\n return a;\n }\n}\n","import { CardApi } from '../api/cardApi';\n\nexport class CardData {\n cardholderName: string;\n brand: string;\n number: string;\n expMonth: string;\n expYear: string;\n code: string;\n\n constructor(data?: CardApi) {\n if (data == null) {\n return;\n }\n\n this.cardholderName = data.cardholderName;\n this.brand = data.brand;\n this.number = data.number;\n this.expMonth = data.expMonth;\n this.expYear = data.expYear;\n this.code = data.code;\n }\n}\n","import { View } from './view';\n\nimport { Card } from '../domain/card';\n\nexport class CardView implements View {\n cardholderName: string = null;\n expMonth: string = null;\n expYear: string = null;\n code: string = null;\n\n // tslint:disable\n private _brand: string = null;\n private _number: string = null;\n private _subTitle: string = null;\n // tslint:enable\n\n constructor(c?: Card) {\n // ctor\n }\n\n get maskedCode(): string {\n return this.code != null ? '•'.repeat(this.code.length) : null;\n }\n\n get brand(): string {\n return this._brand;\n }\n set brand(value: string) {\n this._brand = value;\n this._subTitle = null;\n }\n\n get number(): string {\n return this._number;\n }\n set number(value: string) {\n this._number = value;\n this._subTitle = null;\n }\n\n get subTitle(): string {\n if (this._subTitle == null) {\n this._subTitle = this.brand;\n if (this.number != null && this.number.length >= 4) {\n if (this._subTitle != null && this._subTitle !== '') {\n this._subTitle += ', ';\n } else {\n this._subTitle = '';\n }\n\n // Show last 5 on amex, last 4 for all others\n const count = this.number.length >= 5 && this.number.match(new RegExp('^3[47]')) != null ? 5 : 4;\n this._subTitle += ('*' + this.number.substr(this.number.length - count));\n }\n }\n return this._subTitle;\n }\n\n get expiration(): string {\n if (!this.expMonth && !this.expYear) {\n return null;\n }\n\n let exp = this.expMonth != null ? ('0' + this.expMonth).slice(-2) : '__';\n exp += (' / ' + (this.expYear != null ? this.formatYear(this.expYear) : '____'));\n return exp;\n }\n\n private formatYear(year: string): string {\n return year.length === 2 ? '20' + year : year;\n }\n}\n","import { CardData } from '../data/cardData';\n\nimport { CipherString } from './cipherString';\nimport Domain from './domainBase';\n\nimport { CardView } from '../view/cardView';\n\nexport class Card extends Domain {\n cardholderName: CipherString;\n brand: CipherString;\n number: CipherString;\n expMonth: CipherString;\n expYear: CipherString;\n code: CipherString;\n\n constructor(obj?: CardData, alreadyEncrypted: boolean = false) {\n super();\n if (obj == null) {\n return;\n }\n\n this.buildDomainModel(this, obj, {\n cardholderName: null,\n brand: null,\n number: null,\n expMonth: null,\n expYear: null,\n code: null,\n }, alreadyEncrypted, []);\n }\n\n decrypt(orgId: string): Promise<CardView> {\n return this.decryptObj(new CardView(this), {\n cardholderName: null,\n brand: null,\n number: null,\n expMonth: null,\n expYear: null,\n code: null,\n }, orgId);\n }\n\n toCardData(): CardData {\n const c = new CardData();\n this.buildDataModel(this, c, {\n cardholderName: null,\n brand: null,\n number: null,\n expMonth: null,\n expYear: null,\n code: null,\n });\n return c;\n }\n}\n","export enum CipherType {\n Login = 1,\n SecureNote = 2,\n Card = 3,\n Identity = 4,\n}\n","import { FieldType } from '../../enums/fieldType';\n\nimport { FieldApi } from '../api/fieldApi';\n\nexport class FieldData {\n type: FieldType;\n name: string;\n value: string;\n\n constructor(response?: FieldApi) {\n if (response == null) {\n return;\n }\n this.type = response.type;\n this.name = response.name;\n this.value = response.value;\n }\n}\n","import { IdentityApi } from '../api/identityApi';\n\nexport class IdentityData {\n title: string;\n firstName: string;\n middleName: string;\n lastName: string;\n address1: string;\n address2: string;\n address3: string;\n city: string;\n state: string;\n postalCode: string;\n country: string;\n company: string;\n email: string;\n phone: string;\n ssn: string;\n username: string;\n passportNumber: string;\n licenseNumber: string;\n\n constructor(data?: IdentityApi) {\n if (data == null) {\n return;\n }\n\n this.title = data.title;\n this.firstName = data.firstName;\n this.middleName = data.middleName;\n this.lastName = data.lastName;\n this.address1 = data.address1;\n this.address2 = data.address2;\n this.address3 = data.address3;\n this.city = data.city;\n this.state = data.state;\n this.postalCode = data.postalCode;\n this.country = data.country;\n this.company = data.company;\n this.email = data.email;\n this.phone = data.phone;\n this.ssn = data.ssn;\n this.username = data.username;\n this.passportNumber = data.passportNumber;\n this.licenseNumber = data.licenseNumber;\n }\n}\n","import { UriMatchType } from '../../enums/uriMatchType';\n\nimport { LoginUriApi } from '../api/loginUriApi';\n\nexport class LoginUriData {\n uri: string;\n match: UriMatchType = null;\n\n constructor(data?: LoginUriApi) {\n if (data == null) {\n return;\n }\n this.uri = data.uri;\n this.match = data.match;\n }\n}\n","import { LoginApi } from '../api/loginApi';\n\nimport { LoginUriData } from './loginUriData';\n\nexport class LoginData {\n uris: LoginUriData[];\n username: string;\n password: string;\n passwordRevisionDate: string;\n totp: string;\n\n constructor(data?: LoginApi) {\n if (data == null) {\n return;\n }\n\n this.username = data.username;\n this.password = data.password;\n this.passwordRevisionDate = data.passwordRevisionDate;\n this.totp = data.totp;\n\n if (data.uris) {\n this.uris = data.uris.map((u) => new LoginUriData(u));\n }\n }\n}\n","import { PasswordHistoryResponse } from '../response/passwordHistoryResponse';\n\nexport class PasswordHistoryData {\n password: string;\n lastUsedDate: string;\n\n constructor(response?: PasswordHistoryResponse) {\n if (response == null) {\n return;\n }\n\n this.password = response.password;\n this.lastUsedDate = response.lastUsedDate;\n }\n}\n","import { SecureNoteType } from '../../enums/secureNoteType';\n\nimport { SecureNoteApi } from '../api/secureNoteApi';\n\nexport class SecureNoteData {\n type: SecureNoteType;\n\n constructor(data?: SecureNoteApi) {\n if (data == null) {\n return;\n }\n\n this.type = data.type;\n }\n}\n","import { CipherType } from '../../enums/cipherType';\n\nimport { AttachmentData } from './attachmentData';\nimport { CardData } from './cardData';\nimport { FieldData } from './fieldData';\nimport { IdentityData } from './identityData';\nimport { LoginData } from './loginData';\nimport { PasswordHistoryData } from './passwordHistoryData';\nimport { SecureNoteData } from './secureNoteData';\n\nimport { CipherResponse } from '../response/cipherResponse';\n\nexport class CipherData {\n id: string;\n organizationId: string;\n folderId: string;\n userId: string;\n edit: boolean;\n organizationUseTotp: boolean;\n favorite: boolean;\n revisionDate: string;\n type: CipherType;\n sizeName: string;\n name: string;\n notes: string;\n login?: LoginData;\n secureNote?: SecureNoteData;\n card?: CardData;\n identity?: IdentityData;\n fields?: FieldData[];\n attachments?: AttachmentData[];\n passwordHistory?: PasswordHistoryData[];\n collectionIds?: string[];\n deletedDate: string;\n\n constructor(response?: CipherResponse, userId?: string, collectionIds?: string[]) {\n if (response == null) {\n return;\n }\n\n this.id = response.id;\n this.organizationId = response.organizationId;\n this.folderId = response.folderId;\n this.userId = userId;\n this.edit = response.edit;\n this.organizationUseTotp = response.organizationUseTotp;\n this.favorite = response.favorite;\n this.revisionDate = response.revisionDate;\n this.type = response.type;\n this.name = response.name;\n this.notes = response.notes;\n this.collectionIds = collectionIds != null ? collectionIds : response.collectionIds;\n this.deletedDate = response.deletedDate;\n\n switch (this.type) {\n case CipherType.Login:\n this.login = new LoginData(response.login);\n break;\n case CipherType.SecureNote:\n this.secureNote = new SecureNoteData(response.secureNote);\n break;\n case CipherType.Card:\n this.card = new CardData(response.card);\n break;\n case CipherType.Identity:\n this.identity = new IdentityData(response.identity);\n break;\n default:\n break;\n }\n\n if (response.fields != null) {\n this.fields = response.fields.map((f) => new FieldData(f));\n }\n if (response.attachments != null) {\n this.attachments = response.attachments.map((a) => new AttachmentData(a));\n }\n if (response.passwordHistory != null) {\n this.passwordHistory = response.passwordHistory.map((ph) => new PasswordHistoryData(ph));\n }\n }\n}\n","import { View } from './view';\n\nimport { Identity } from '../domain/identity';\n\nimport { Utils } from '../../misc/utils';\n\nexport class IdentityView implements View {\n title: string = null;\n middleName: string = null;\n address1: string = null;\n address2: string = null;\n address3: string = null;\n city: string = null;\n state: string = null;\n postalCode: string = null;\n country: string = null;\n company: string = null;\n email: string = null;\n phone: string = null;\n ssn: string = null;\n username: string = null;\n passportNumber: string = null;\n licenseNumber: string = null;\n\n // tslint:disable\n private _firstName: string = null;\n private _lastName: string = null;\n private _subTitle: string = null;\n // tslint:enable\n\n constructor(i?: Identity) {\n // ctor\n }\n\n get firstName(): string {\n return this._firstName;\n }\n set firstName(value: string) {\n this._firstName = value;\n this._subTitle = null;\n }\n\n get lastName(): string {\n return this._lastName;\n }\n set lastName(value: string) {\n this._lastName = value;\n this._subTitle = null;\n }\n\n get subTitle(): string {\n if (this._subTitle == null && (this.firstName != null || this.lastName != null)) {\n this._subTitle = '';\n if (this.firstName != null) {\n this._subTitle = this.firstName;\n }\n if (this.lastName != null) {\n if (this._subTitle !== '') {\n this._subTitle += ' ';\n }\n this._subTitle += this.lastName;\n }\n }\n\n return this._subTitle;\n }\n\n get fullName(): string {\n if (this.title != null || this.firstName != null || this.middleName != null || this.lastName != null) {\n let name = '';\n if (this.title != null) {\n name += (this.title + ' ');\n }\n if (this.firstName != null) {\n name += (this.firstName + ' ');\n }\n if (this.middleName != null) {\n name += (this.middleName + ' ');\n }\n if (this.lastName != null) {\n name += this.lastName;\n }\n return name.trim();\n }\n\n return null;\n }\n\n get fullAddress(): string {\n let address = this.address1;\n if (!Utils.isNullOrWhitespace(this.address2)) {\n if (!Utils.isNullOrWhitespace(address)) {\n address += ', ';\n }\n address += this.address2;\n }\n if (!Utils.isNullOrWhitespace(this.address3)) {\n if (!Utils.isNullOrWhitespace(address)) {\n address += ', ';\n }\n address += this.address3;\n }\n return address;\n }\n\n get fullAddressPart2(): string {\n if (this.city == null && this.state == null && this.postalCode == null) {\n return null;\n }\n const city = this.city || '-';\n const state = this.state;\n const postalCode = this.postalCode || '-';\n let addressPart2 = city;\n if (!Utils.isNullOrWhitespace(state)) {\n addressPart2 += ', ' + state;\n }\n addressPart2 += ', ' + postalCode;\n return addressPart2;\n }\n}\n","import { LoginUriView } from './loginUriView';\nimport { View } from './view';\n\nimport { Login } from '../domain/login';\n\nexport class LoginView implements View {\n username: string = null;\n password: string = null;\n passwordRevisionDate?: Date = null;\n totp: string = null;\n uris: LoginUriView[] = null;\n\n constructor(l?: Login) {\n if (!l) {\n return;\n }\n\n this.passwordRevisionDate = l.passwordRevisionDate;\n }\n\n get uri(): string {\n return this.hasUris ? this.uris[0].uri : null;\n }\n\n get maskedPassword(): string {\n return this.password != null ? '••••••••' : null;\n }\n\n get subTitle(): string {\n return this.username;\n }\n\n get canLaunch(): boolean {\n return this.hasUris && this.uris.some((u) => u.canLaunch);\n }\n\n get launchUri(): string {\n if (this.hasUris) {\n const uri = this.uris.find((u) => u.canLaunch);\n if (uri != null) {\n return uri.launchUri;\n }\n }\n return null;\n }\n\n get hasUris(): boolean {\n return this.uris != null && this.uris.length > 0;\n }\n}\n","import { SecureNoteType } from '../../enums/secureNoteType';\n\nimport { View } from './view';\n\nimport { SecureNote } from '../domain/secureNote';\n\nexport class SecureNoteView implements View {\n type: SecureNoteType = null;\n\n constructor(n?: SecureNote) {\n if (!n) {\n return;\n }\n\n this.type = n.type;\n }\n\n get subTitle(): string {\n return null;\n }\n}\n","import { CipherType } from '../../enums/cipherType';\n\nimport { Cipher } from '../domain/cipher';\n\nimport { AttachmentView } from './attachmentView';\nimport { CardView } from './cardView';\nimport { FieldView } from './fieldView';\nimport { IdentityView } from './identityView';\nimport { LoginView } from './loginView';\nimport { PasswordHistoryView } from './passwordHistoryView';\nimport { SecureNoteView } from './secureNoteView';\nimport { View } from './view';\n\nexport class CipherView implements View {\n id: string = null;\n organizationId: string = null;\n folderId: string = null;\n name: string = null;\n notes: string = null;\n type: CipherType = null;\n favorite = false;\n organizationUseTotp = false;\n edit = false;\n localData: any;\n login = new LoginView();\n identity = new IdentityView();\n card = new CardView();\n secureNote = new SecureNoteView();\n attachments: AttachmentView[] = null;\n fields: FieldView[] = null;\n passwordHistory: PasswordHistoryView[] = null;\n collectionIds: string[] = null;\n revisionDate: Date = null;\n deletedDate: Date = null;\n\n constructor(c?: Cipher) {\n if (!c) {\n return;\n }\n\n this.id = c.id;\n this.organizationId = c.organizationId;\n this.folderId = c.folderId;\n this.favorite = c.favorite;\n this.organizationUseTotp = c.organizationUseTotp;\n this.edit = c.edit;\n this.type = c.type;\n this.localData = c.localData;\n this.collectionIds = c.collectionIds;\n this.revisionDate = c.revisionDate;\n this.deletedDate = c.deletedDate;\n }\n\n get subTitle(): string {\n switch (this.type) {\n case CipherType.Login:\n return this.login.subTitle;\n case CipherType.SecureNote:\n return this.secureNote.subTitle;\n case CipherType.Card:\n return this.card.subTitle;\n case CipherType.Identity:\n return this.identity.subTitle;\n default:\n break;\n }\n\n return null;\n }\n\n get hasPasswordHistory(): boolean {\n return this.passwordHistory && this.passwordHistory.length > 0;\n }\n\n get hasAttachments(): boolean {\n return this.attachments && this.attachments.length > 0;\n }\n\n get hasOldAttachments(): boolean {\n if (this.hasAttachments) {\n for (let i = 0; i < this.attachments.length; i++) {\n if (this.attachments[i].key == null) {\n return true;\n }\n }\n }\n return false;\n }\n\n get hasFields(): boolean {\n return this.fields && this.fields.length > 0;\n }\n\n get passwordRevisionDisplayDate(): Date {\n if (this.type !== CipherType.Login || this.login == null) {\n return null;\n } else if (this.login.password == null || this.login.password === '') {\n return null;\n }\n return this.login.passwordRevisionDate;\n }\n\n get isDeleted(): boolean {\n return this.deletedDate != null;\n }\n}\n","import { FieldType } from '../../enums/fieldType';\n\nimport { View } from './view';\n\nimport { Field } from '../domain/field';\n\nexport class FieldView implements View {\n name: string = null;\n value: string = null;\n type: FieldType = null;\n\n constructor(f?: Field) {\n if (!f) {\n return;\n }\n\n this.type = f.type;\n }\n\n get maskedValue(): string {\n return this.value != null ? '••••••••' : null;\n }\n}\n","import { FieldType } from '../../enums/fieldType';\n\nimport { FieldData } from '../data/fieldData';\n\nimport { CipherString } from './cipherString';\nimport Domain from './domainBase';\n\nimport { FieldView } from '../view/fieldView';\n\nexport class Field extends Domain {\n name: CipherString;\n value: CipherString;\n type: FieldType;\n\n constructor(obj?: FieldData, alreadyEncrypted: boolean = false) {\n super();\n if (obj == null) {\n return;\n }\n\n this.type = obj.type;\n this.buildDomainModel(this, obj, {\n name: null,\n value: null,\n }, alreadyEncrypted, []);\n }\n\n decrypt(orgId: string): Promise<FieldView> {\n return this.decryptObj(new FieldView(this), {\n name: null,\n value: null,\n }, orgId);\n }\n\n toFieldData(): FieldData {\n const f = new FieldData();\n this.buildDataModel(this, f, {\n name: null,\n value: null,\n type: null,\n }, ['type']);\n return f;\n }\n}\n","import { IdentityData } from '../data/identityData';\n\nimport { CipherString } from './cipherString';\nimport Domain from './domainBase';\n\nimport { IdentityView } from '../view/identityView';\n\nexport class Identity extends Domain {\n title: CipherString;\n firstName: CipherString;\n middleName: CipherString;\n lastName: CipherString;\n address1: CipherString;\n address2: CipherString;\n address3: CipherString;\n city: CipherString;\n state: CipherString;\n postalCode: CipherString;\n country: CipherString;\n company: CipherString;\n email: CipherString;\n phone: CipherString;\n ssn: CipherString;\n username: CipherString;\n passportNumber: CipherString;\n licenseNumber: CipherString;\n\n constructor(obj?: IdentityData, alreadyEncrypted: boolean = false) {\n super();\n if (obj == null) {\n return;\n }\n\n this.buildDomainModel(this, obj, {\n title: null,\n firstName: null,\n middleName: null,\n lastName: null,\n address1: null,\n address2: null,\n address3: null,\n city: null,\n state: null,\n postalCode: null,\n country: null,\n company: null,\n email: null,\n phone: null,\n ssn: null,\n username: null,\n passportNumber: null,\n licenseNumber: null,\n }, alreadyEncrypted, []);\n }\n\n decrypt(orgId: string): Promise<IdentityView> {\n return this.decryptObj(new IdentityView(this), {\n title: null,\n firstName: null,\n middleName: null,\n lastName: null,\n address1: null,\n address2: null,\n address3: null,\n city: null,\n state: null,\n postalCode: null,\n country: null,\n company: null,\n email: null,\n phone: null,\n ssn: null,\n username: null,\n passportNumber: null,\n licenseNumber: null,\n }, orgId);\n }\n\n toIdentityData(): IdentityData {\n const i = new IdentityData();\n this.buildDataModel(this, i, {\n title: null,\n firstName: null,\n middleName: null,\n lastName: null,\n address1: null,\n address2: null,\n address3: null,\n city: null,\n state: null,\n postalCode: null,\n country: null,\n company: null,\n email: null,\n phone: null,\n ssn: null,\n username: null,\n passportNumber: null,\n licenseNumber: null,\n });\n return i;\n }\n}\n","export enum UriMatchType {\n Domain = 0,\n Host = 1,\n StartsWith = 2,\n Exact = 3,\n RegularExpression = 4,\n Never = 5,\n}\n","import { UriMatchType } from '../../enums/uriMatchType';\n\nimport { View } from './view';\n\nimport { LoginUri } from '../domain/loginUri';\n\nimport { Utils } from '../../misc/utils';\n\nconst CanLaunchWhitelist = [\n 'https://',\n 'http://',\n 'ssh://',\n 'ftp://',\n 'sftp://',\n 'irc://',\n 'vnc://',\n 'chrome://',\n 'iosapp://',\n 'androidapp://',\n];\n\nexport class LoginUriView implements View {\n match: UriMatchType = null;\n\n // tslint:disable\n private _uri: string = null;\n private _domain: string = null;\n private _hostname: string = null;\n private _canLaunch: boolean = null;\n // tslint:enable\n\n constructor(u?: LoginUri) {\n if (!u) {\n return;\n }\n\n this.match = u.match;\n }\n\n get uri(): string {\n return this._uri;\n }\n set uri(value: string) {\n this._uri = value;\n this._domain = null;\n this._canLaunch = null;\n }\n\n get domain(): string {\n if (this._domain == null && this.uri != null) {\n this._domain = Utils.getDomain(this.uri);\n if (this._domain === '') {\n this._domain = null;\n }\n }\n\n return this._domain;\n }\n\n get hostname(): string {\n if (this._hostname == null && this.uri != null) {\n this._hostname = Utils.getHostname(this.uri);\n if (this._hostname === '') {\n this._hostname = null;\n }\n }\n\n return this._hostname;\n }\n\n get hostnameOrUri(): string {\n return this.hostname != null ? this.hostname : this.uri;\n }\n\n get isWebsite(): boolean {\n return this.uri != null && (this.uri.indexOf('http://') === 0 || this.uri.indexOf('https://') === 0 ||\n (this.uri.indexOf('://') < 0 && Utils.tldEndingRegex.test(this.uri)));\n }\n\n get canLaunch(): boolean {\n if (this._canLaunch != null) {\n return this._canLaunch;\n }\n if (this.uri != null && this.match !== UriMatchType.RegularExpression) {\n const uri = this.launchUri;\n for (let i = 0; i < CanLaunchWhitelist.length; i++) {\n if (uri.indexOf(CanLaunchWhitelist[i]) === 0) {\n this._canLaunch = true;\n return this._canLaunch;\n }\n }\n }\n this._canLaunch = false;\n return this._canLaunch;\n }\n\n get launchUri(): string {\n return this.uri.indexOf('://') < 0 && Utils.tldEndingRegex.test(this.uri) ? ('http://' + this.uri) : this.uri;\n }\n}\n","import { UriMatchType } from '../../enums/uriMatchType';\n\nimport { LoginUriData } from '../data/loginUriData';\n\nimport { LoginUriView } from '../view/loginUriView';\n\nimport { CipherString } from './cipherString';\nimport Domain from './domainBase';\n\nexport class LoginUri extends Domain {\n uri: CipherString;\n match: UriMatchType;\n\n constructor(obj?: LoginUriData, alreadyEncrypted: boolean = false) {\n super();\n if (obj == null) {\n return;\n }\n\n this.match = obj.match;\n this.buildDomainModel(this, obj, {\n uri: null,\n }, alreadyEncrypted, []);\n }\n\n decrypt(orgId: string): Promise<LoginUriView> {\n return this.decryptObj(new LoginUriView(this), {\n uri: null,\n }, orgId);\n }\n\n toLoginUriData(): LoginUriData {\n const u = new LoginUriData();\n this.buildDataModel(this, u, {\n uri: null,\n }, ['match']);\n return u;\n }\n}\n","import { LoginUri } from './loginUri';\n\nimport { LoginData } from '../data/loginData';\n\nimport { LoginView } from '../view/loginView';\n\nimport { CipherString } from './cipherString';\nimport Domain from './domainBase';\n\nexport class Login extends Domain {\n uris: LoginUri[];\n username: CipherString;\n password: CipherString;\n passwordRevisionDate?: Date;\n totp: CipherString;\n\n constructor(obj?: LoginData, alreadyEncrypted: boolean = false) {\n super();\n if (obj == null) {\n return;\n }\n\n this.passwordRevisionDate = obj.passwordRevisionDate != null ? new Date(obj.passwordRevisionDate) : null;\n this.buildDomainModel(this, obj, {\n username: null,\n password: null,\n totp: null,\n }, alreadyEncrypted, []);\n\n if (obj.uris) {\n this.uris = [];\n obj.uris.forEach((u) => {\n this.uris.push(new LoginUri(u, alreadyEncrypted));\n });\n }\n }\n\n async decrypt(orgId: string): Promise<LoginView> {\n const view = await this.decryptObj(new LoginView(this), {\n username: null,\n password: null,\n totp: null,\n }, orgId);\n\n if (this.uris != null) {\n view.uris = [];\n for (let i = 0; i < this.uris.length; i++) {\n const uri = await this.uris[i].decrypt(orgId);\n view.uris.push(uri);\n }\n }\n\n return view;\n }\n\n toLoginData(): LoginData {\n const l = new LoginData();\n l.passwordRevisionDate = this.passwordRevisionDate != null ? this.passwordRevisionDate.toISOString() : null;\n this.buildDataModel(this, l, {\n username: null,\n password: null,\n totp: null,\n });\n\n if (this.uris != null && this.uris.length > 0) {\n l.uris = [];\n this.uris.forEach((u) => {\n l.uris.push(u.toLoginUriData());\n });\n }\n\n return l;\n }\n}\n","import { View } from './view';\n\nimport { Password } from '../domain/password';\n\nexport class PasswordHistoryView implements View {\n password: string = null;\n lastUsedDate: Date = null;\n\n constructor(ph?: Password) {\n if (!ph) {\n return;\n }\n\n this.lastUsedDate = ph.lastUsedDate;\n }\n}\n","import { PasswordHistoryData } from '../data/passwordHistoryData';\n\nimport { CipherString } from './cipherString';\nimport Domain from './domainBase';\n\nimport { PasswordHistoryView } from '../view/passwordHistoryView';\n\nexport class Password extends Domain {\n password: CipherString;\n lastUsedDate: Date;\n\n constructor(obj?: PasswordHistoryData, alreadyEncrypted: boolean = false) {\n super();\n if (obj == null) {\n return;\n }\n\n this.buildDomainModel(this, obj, {\n password: null,\n }, alreadyEncrypted);\n this.lastUsedDate = new Date(obj.lastUsedDate);\n }\n\n decrypt(orgId: string): Promise<PasswordHistoryView> {\n return this.decryptObj(new PasswordHistoryView(this), {\n password: null,\n }, orgId);\n }\n\n toPasswordHistoryData(): PasswordHistoryData {\n const ph = new PasswordHistoryData();\n ph.lastUsedDate = this.lastUsedDate.toISOString();\n this.buildDataModel(this, ph, {\n password: null,\n });\n return ph;\n }\n}\n","import { SecureNoteType } from '../../enums/secureNoteType';\n\nimport { SecureNoteData } from '../data/secureNoteData';\n\nimport Domain from './domainBase';\n\nimport { SecureNoteView } from '../view/secureNoteView';\n\nexport class SecureNote extends Domain {\n type: SecureNoteType;\n\n constructor(obj?: SecureNoteData, alreadyEncrypted: boolean = false) {\n super();\n if (obj == null) {\n return;\n }\n\n this.type = obj.type;\n }\n\n decrypt(orgId: string): Promise<SecureNoteView> {\n return Promise.resolve(new SecureNoteView(this));\n }\n\n toSecureNoteData(): SecureNoteData {\n const n = new SecureNoteData();\n n.type = this.type;\n return n;\n }\n}\n","import { CipherType } from '../../enums/cipherType';\n\nimport { CipherData } from '../data/cipherData';\n\nimport { CipherView } from '../view/cipherView';\n\nimport { Attachment } from './attachment';\nimport { Card } from './card';\nimport { CipherString } from './cipherString';\nimport Domain from './domainBase';\nimport { Field } from './field';\nimport { Identity } from './identity';\nimport { Login } from './login';\nimport { Password } from './password';\nimport { SecureNote } from './secureNote';\n\nexport class Cipher extends Domain {\n id: string;\n organizationId: string;\n folderId: string;\n name: CipherString;\n notes: CipherString;\n type: CipherType;\n favorite: boolean;\n organizationUseTotp: boolean;\n edit: boolean;\n revisionDate: Date;\n localData: any;\n login: Login;\n identity: Identity;\n card: Card;\n secureNote: SecureNote;\n attachments: Attachment[];\n fields: Field[];\n passwordHistory: Password[];\n collectionIds: string[];\n deletedDate: Date;\n\n constructor(obj?: CipherData, alreadyEncrypted: boolean = false, localData: any = null) {\n super();\n if (obj == null) {\n return;\n }\n\n this.buildDomainModel(this, obj, {\n id: null,\n userId: null,\n organizationId: null,\n folderId: null,\n name: null,\n notes: null,\n }, alreadyEncrypted, ['id', 'userId', 'organizationId', 'folderId']);\n\n this.type = obj.type;\n this.favorite = obj.favorite;\n this.organizationUseTotp = obj.organizationUseTotp;\n this.edit = obj.edit;\n this.revisionDate = obj.revisionDate != null ? new Date(obj.revisionDate) : null;\n this.collectionIds = obj.collectionIds;\n this.localData = localData;\n this.deletedDate = obj.deletedDate != null ? new Date(obj.deletedDate) : null;\n\n switch (this.type) {\n case CipherType.Login:\n this.login = new Login(obj.login, alreadyEncrypted);\n break;\n case CipherType.SecureNote:\n this.secureNote = new SecureNote(obj.secureNote, alreadyEncrypted);\n break;\n case CipherType.Card:\n this.card = new Card(obj.card, alreadyEncrypted);\n break;\n case CipherType.Identity:\n this.identity = new Identity(obj.identity, alreadyEncrypted);\n break;\n default:\n break;\n }\n\n if (obj.attachments != null) {\n this.attachments = obj.attachments.map((a) => new Attachment(a, alreadyEncrypted));\n } else {\n this.attachments = null;\n }\n\n if (obj.fields != null) {\n this.fields = obj.fields.map((f) => new Field(f, alreadyEncrypted));\n } else {\n this.fields = null;\n }\n\n if (obj.passwordHistory != null) {\n this.passwordHistory = obj.passwordHistory.map((ph) => new Password(ph, alreadyEncrypted));\n } else {\n this.passwordHistory = null;\n }\n }\n\n async decrypt(): Promise<CipherView> {\n const model = new CipherView(this);\n\n await this.decryptObj(model, {\n name: null,\n notes: null,\n }, this.organizationId);\n\n switch (this.type) {\n case CipherType.Login:\n model.login = await this.login.decrypt(this.organizationId);\n break;\n case CipherType.SecureNote:\n model.secureNote = await this.secureNote.decrypt(this.organizationId);\n break;\n case CipherType.Card:\n model.card = await this.card.decrypt(this.organizationId);\n break;\n case CipherType.Identity:\n model.identity = await this.identity.decrypt(this.organizationId);\n break;\n default:\n break;\n }\n\n const orgId = this.organizationId;\n\n if (this.attachments != null && this.attachments.length > 0) {\n const attachments: any[] = [];\n await this.attachments.reduce((promise, attachment) => {\n return promise.then(() => {\n return attachment.decrypt(orgId);\n }).then((decAttachment) => {\n attachments.push(decAttachment);\n });\n }, Promise.resolve());\n model.attachments = attachments;\n }\n\n if (this.fields != null && this.fields.length > 0) {\n const fields: any[] = [];\n await this.fields.reduce((promise, field) => {\n return promise.then(() => {\n return field.decrypt(orgId);\n }).then((decField) => {\n fields.push(decField);\n });\n }, Promise.resolve());\n model.fields = fields;\n }\n\n if (this.passwordHistory != null && this.passwordHistory.length > 0) {\n const passwordHistory: any[] = [];\n await this.passwordHistory.reduce((promise, ph) => {\n return promise.then(() => {\n return ph.decrypt(orgId);\n }).then((decPh) => {\n passwordHistory.push(decPh);\n });\n }, Promise.resolve());\n model.passwordHistory = passwordHistory;\n }\n\n return model;\n }\n\n toCipherData(userId: string): CipherData {\n const c = new CipherData();\n c.id = this.id;\n c.organizationId = this.organizationId;\n c.folderId = this.folderId;\n c.userId = this.organizationId != null ? userId : null;\n c.edit = this.edit;\n c.organizationUseTotp = this.organizationUseTotp;\n c.favorite = this.favorite;\n c.revisionDate = this.revisionDate != null ? this.revisionDate.toISOString() : null;\n c.type = this.type;\n c.collectionIds = this.collectionIds;\n c.deletedDate = this.deletedDate != null ? this.deletedDate.toISOString() : null;\n\n this.buildDataModel(this, c, {\n name: null,\n notes: null,\n });\n\n switch (c.type) {\n case CipherType.Login:\n c.login = this.login.toLoginData();\n break;\n case CipherType.SecureNote:\n c.secureNote = this.secureNote.toSecureNoteData();\n break;\n case CipherType.Card:\n c.card = this.card.toCardData();\n break;\n case CipherType.Identity:\n c.identity = this.identity.toIdentityData();\n break;\n default:\n break;\n }\n\n if (this.fields != null) {\n c.fields = this.fields.map((f) => f.toFieldData());\n }\n if (this.attachments != null) {\n c.attachments = this.attachments.map((a) => a.toAttachmentData());\n }\n if (this.passwordHistory != null) {\n c.passwordHistory = this.passwordHistory.map((ph) => ph.toPasswordHistoryData());\n }\n return c;\n }\n}\n","import { View } from './view';\n\nimport { Collection } from '../domain/collection';\nimport { ITreeNodeObject } from '../domain/treeNode';\n\nimport { CollectionGroupDetailsResponse } from '../response/collectionResponse';\n\nexport class CollectionView implements View, ITreeNodeObject {\n id: string = null;\n organizationId: string = null;\n name: string = null;\n externalId: string = null;\n readOnly: boolean = null;\n\n constructor(c?: Collection | CollectionGroupDetailsResponse) {\n if (!c) {\n return;\n }\n\n this.id = c.id;\n this.organizationId = c.organizationId;\n this.externalId = c.externalId;\n if (c instanceof Collection) {\n this.readOnly = c.readOnly;\n }\n }\n}\n","import { CollectionData } from '../data/collectionData';\n\nimport { CollectionView } from '../view/collectionView';\n\nimport { CipherString } from './cipherString';\nimport Domain from './domainBase';\n\nexport class Collection extends Domain {\n id: string;\n organizationId: string;\n name: CipherString;\n externalId: string;\n readOnly: boolean;\n\n constructor(obj?: CollectionData, alreadyEncrypted: boolean = false) {\n super();\n if (obj == null) {\n return;\n }\n\n this.buildDomainModel(this, obj, {\n id: null,\n organizationId: null,\n name: null,\n externalId: null,\n readOnly: null,\n }, alreadyEncrypted, ['id', 'organizationId', 'externalId', 'readOnly']);\n }\n\n decrypt(): Promise<CollectionView> {\n return this.decryptObj(new CollectionView(this), {\n name: null,\n }, this.organizationId);\n }\n}\n","import { SymmetricCryptoKey } from './symmetricCryptoKey';\n\nexport class EncryptedObject {\n iv: ArrayBuffer;\n data: ArrayBuffer;\n mac: ArrayBuffer;\n key: SymmetricCryptoKey;\n}\n","export class EnvironmentUrls {\n base: string;\n api: string;\n identity: string;\n events: string;\n}\n","import { View } from './view';\n\nimport { Folder } from '../domain/folder';\nimport { ITreeNodeObject } from '../domain/treeNode';\n\nexport class FolderView implements View, ITreeNodeObject {\n id: string = null;\n name: string = null;\n revisionDate: Date = null;\n\n constructor(f?: Folder) {\n if (!f) {\n return;\n }\n\n this.id = f.id;\n this.revisionDate = f.revisionDate;\n }\n}\n","import { FolderData } from '../data/folderData';\n\nimport { FolderView } from '../view/folderView';\n\nimport { CipherString } from './cipherString';\nimport Domain from './domainBase';\n\nexport class Folder extends Domain {\n id: string;\n name: CipherString;\n revisionDate: Date;\n\n constructor(obj?: FolderData, alreadyEncrypted: boolean = false) {\n super();\n if (obj == null) {\n return;\n }\n\n this.buildDomainModel(this, obj, {\n id: null,\n name: null,\n }, alreadyEncrypted, ['id']);\n\n this.revisionDate = obj.revisionDate != null ? new Date(obj.revisionDate) : null;\n }\n\n decrypt(): Promise<FolderView> {\n return this.decryptObj(new FolderView(this), {\n name: null,\n }, null);\n }\n}\n","export class GeneratedPasswordHistory {\n password: string;\n date: number;\n\n constructor(password: string, date: number) {\n this.password = password;\n this.date = date;\n }\n}\n","export { Attachment } from './attachment';\nexport { AuthResult } from './authResult';\nexport { Card } from './card';\nexport { Cipher } from './cipher';\nexport { CipherString } from './cipherString';\nexport { Collection } from './collection';\nexport { EncryptedObject } from './encryptedObject';\nexport { EnvironmentUrls } from './environmentUrls';\nexport { Field } from './field';\nexport { Folder } from './folder';\nexport { Identity } from './identity';\nexport { Login } from './login';\nexport { LoginUri } from './loginUri';\nexport { GeneratedPasswordHistory } from './generatedPasswordHistory';\nexport { SecureNote } from './secureNote';\nexport { SymmetricCryptoKey } from './symmetricCryptoKey';\n","import { CryptoService } from 'jslib/abstractions/crypto.service';\nimport { StorageService } from 'jslib/abstractions/storage.service';\nimport { SymmetricCryptoKey } from 'jslib/models/domain';\nimport { ErrorResponse } from 'jslib/models/response';\n\nimport { Utils } from 'jslib/misc/utils';\n\nexport class NodeEnvSecureStorageService implements StorageService {\n constructor(private storageService: StorageService, private cryptoService: () => CryptoService) { }\n\n async get<T>(key: string): Promise<T> {\n const value = await this.storageService.get<string>(this.makeProtectedStorageKey(key));\n if (value == null) {\n return null;\n }\n const obj = await this.decrypt(value);\n return obj as any;\n }\n\n async save(key: string, obj: any): Promise<any> {\n if (typeof (obj) !== 'string') {\n throw new Error('Only string storage is allowed.');\n }\n const protectedObj = await this.encrypt(obj);\n await this.storageService.save(this.makeProtectedStorageKey(key), protectedObj);\n }\n\n remove(key: string): Promise<any> {\n return this.storageService.remove(this.makeProtectedStorageKey(key));\n }\n\n private async encrypt(plainValue: string): Promise<string> {\n const sessionKey = this.getSessionKey();\n if (sessionKey == null) {\n throw new Error('No session key available.');\n }\n const encValue = await this.cryptoService().encryptToBytes(\n Utils.fromB64ToArray(plainValue).buffer, sessionKey);\n if (encValue == null) {\n throw new Error('Value didn\\'t encrypt.');\n }\n\n return Utils.fromBufferToB64(encValue);\n }\n\n private async decrypt(encValue: string): Promise<string> {\n try {\n const sessionKey = this.getSessionKey();\n if (sessionKey == null) {\n return null;\n }\n\n const decValue = await this.cryptoService().decryptFromBytes(\n Utils.fromB64ToArray(encValue).buffer, sessionKey);\n if (decValue == null) {\n // tslint:disable-next-line\n console.log('Failed to decrypt.');\n return null;\n }\n\n return Utils.fromBufferToB64(decValue);\n } catch (e) {\n // tslint:disable-next-line\n console.log('Decrypt error.');\n return null;\n }\n }\n\n private getSessionKey() {\n try {\n if (process.env.BW_SESSION != null) {\n const sessionBuffer = Utils.fromB64ToArray(process.env.BW_SESSION).buffer;\n if (sessionBuffer != null) {\n const sessionKey = new SymmetricCryptoKey(sessionBuffer);\n if (sessionBuffer != null) {\n return sessionKey;\n }\n }\n }\n } catch (e) {\n // tslint:disable-next-line\n console.log('Session key is invalid.');\n }\n\n return null;\n }\n\n private makeProtectedStorageKey(key: string) {\n return '__PROTECTED__' + key;\n }\n}\n","export enum DeviceType {\n Android = 0,\n iOS = 1,\n ChromeExtension = 2,\n FirefoxExtension = 3,\n OperaExtension = 4,\n EdgeExtension = 5,\n WindowsDesktop = 6,\n MacOsDesktop = 7,\n LinuxDesktop = 8,\n ChromeBrowser = 9,\n FirefoxBrowser = 10,\n OperaBrowser = 11,\n EdgeBrowser = 12,\n IEBrowser = 13,\n UnknownBrowser = 14,\n AndroidAmazon = 15,\n UWP = 16,\n SafariBrowser = 17,\n VivaldiBrowser = 18,\n VivaldiExtension = 19,\n SafariExtension = 20,\n}\n","\nimport { DeviceType } from '../../enums/deviceType';\n\nimport { PlatformUtilsService } from '../../abstractions/platformUtils.service';\n\nexport class CliPlatformUtilsService implements PlatformUtilsService {\n identityClientId: string;\n\n private deviceCache: DeviceType = null;\n\n constructor(identityClientId: string, private packageJson: any) {\n this.identityClientId = identityClientId;\n }\n\n getDevice(): DeviceType {\n if (!this.deviceCache) {\n switch (process.platform) {\n case 'win32':\n this.deviceCache = DeviceType.WindowsDesktop;\n break;\n case 'darwin':\n this.deviceCache = DeviceType.MacOsDesktop;\n break;\n case 'linux':\n default:\n this.deviceCache = DeviceType.LinuxDesktop;\n break;\n }\n }\n\n return this.deviceCache;\n }\n\n getDeviceString(): string {\n const device = DeviceType[this.getDevice()].toLowerCase();\n return device.replace('desktop', '');\n }\n\n isFirefox() {\n return false;\n }\n\n isChrome() {\n return false;\n }\n\n isEdge() {\n return false;\n }\n\n isOpera() {\n return false;\n }\n\n isVivaldi() {\n return false;\n }\n\n isSafari() {\n return false;\n }\n\n isIE() {\n return false;\n }\n\n isMacAppStore() {\n return false;\n }\n\n analyticsId() {\n return null as string;\n }\n\n isViewOpen() {\n return Promise.resolve(false);\n }\n\n lockTimeout(): number {\n return null;\n }\n\n launchUri(uri: string, options?: any): void {\n throw new Error('Not implemented.');\n }\n\n saveFile(win: Window, blobData: any, blobOptions: any, fileName: string): void {\n throw new Error('Not implemented.');\n }\n\n getApplicationVersion(): string {\n return this.packageJson.version;\n }\n\n supportsU2f(win: Window) {\n return false;\n }\n\n supportsDuo(): boolean {\n return false;\n }\n\n showToast(type: 'error' | 'success' | 'warning' | 'info', title: string, text: string | string[],\n options?: any): void {\n throw new Error('Not implemented.');\n }\n\n showDialog(text: string, title?: string, confirmText?: string, cancelText?: string, type?: string):\n Promise<boolean> {\n throw new Error('Not implemented.');\n }\n\n eventTrack(action: string, label?: string, options?: any) {\n throw new Error('Not implemented.');\n }\n\n isDev(): boolean {\n return process.env.BWCLI_ENV === 'development';\n }\n\n isSelfHost(): boolean {\n return false;\n }\n\n copyToClipboard(text: string, options?: any): void {\n throw new Error('Not implemented.');\n }\n\n readFromClipboard(options?: any): Promise<string> {\n throw new Error('Not implemented.');\n }\n}\n","import { Utils } from '../misc/utils';\n\nimport { AppIdService as AppIdServiceAbstraction } from '../abstractions/appId.service';\nimport { StorageService } from '../abstractions/storage.service';\n\nexport class AppIdService implements AppIdServiceAbstraction {\n constructor(private storageService: StorageService) {\n }\n\n getAppId(): Promise<string> {\n return this.makeAndGetAppId('appId');\n }\n\n getAnonymousAppId(): Promise<string> {\n return this.makeAndGetAppId('anonymousAppId');\n }\n\n private async makeAndGetAppId(key: string) {\n const existingId = await this.storageService.get<string>(key);\n if (existingId != null) {\n return existingId;\n }\n\n const guid = Utils.newGuid();\n await this.storageService.save(key, guid);\n return guid;\n }\n}\n","/**\n * Use as a Decorator on async functions, it will limit how many times the function can be\n * in-flight at a time.\n *\n * Calls beyond the limit will be queued, and run when one of the active calls finishes\n */\nexport function throttle(limit: number, throttleKey: (args: any[]) => string) {\n return <T>(target: any, propertyKey: string | symbol,\n descriptor: TypedPropertyDescriptor<(...args: any[]) => Promise<T>>) => {\n const originalMethod: () => Promise<T> = descriptor.value;\n const allThrottles = new Map<any, Map<string, Array<() => void>>>();\n\n const getThrottles = (obj: any) => {\n let throttles = allThrottles.get(obj);\n if (throttles != null) {\n return throttles;\n }\n throttles = new Map<string, Array<() => void>>();\n allThrottles.set(obj, throttles);\n return throttles;\n };\n\n return {\n value: function(...args: any[]) {\n const throttles = getThrottles(this);\n const argsThrottleKey = throttleKey(args);\n let queue = throttles.get(argsThrottleKey);\n if (queue == null) {\n queue = [];\n throttles.set(argsThrottleKey, queue);\n }\n\n return new Promise<T>((resolve, reject) => {\n const exec = () => {\n const onFinally = () => {\n queue.splice(queue.indexOf(exec), 1);\n if (queue.length >= limit) {\n queue[limit - 1]();\n } else if (queue.length === 0) {\n throttles.delete(argsThrottleKey);\n if (throttles.size === 0) {\n allThrottles.delete(this);\n }\n }\n };\n originalMethod.apply(this, args).then((val: any) => {\n onFinally();\n return val;\n }).catch((err: any) => {\n onFinally();\n throw err;\n }).then(resolve, reject);\n };\n queue.push(exec);\n if (queue.length <= limit) {\n exec();\n }\n });\n },\n };\n };\n}\n","import { ApiService } from '../abstractions/api.service';\nimport { AuditService as AuditServiceAbstraction } from '../abstractions/audit.service';\nimport { CryptoFunctionService } from '../abstractions/cryptoFunction.service';\n\nimport { throttle } from '../misc/throttle';\nimport { Utils } from '../misc/utils';\n\nimport { BreachAccountResponse } from '../models/response/breachAccountResponse';\nimport { ErrorResponse } from '../models/response/errorResponse';\n\nconst PwnedPasswordsApi = 'https://api.pwnedpasswords.com/range/';\n\nexport class AuditService implements AuditServiceAbstraction {\n constructor(private cryptoFunctionService: CryptoFunctionService, private apiService: ApiService) { }\n\n @throttle(100, () => 'passwordLeaked')\n async passwordLeaked(password: string): Promise<number> {\n const hashBytes = await this.cryptoFunctionService.hash(password, 'sha1');\n const hash = Utils.fromBufferToHex(hashBytes).toUpperCase();\n const hashStart = hash.substr(0, 5);\n const hashEnding = hash.substr(5);\n\n const response = await this.apiService.nativeFetch(new Request(PwnedPasswordsApi + hashStart));\n const leakedHashes = await response.text();\n const match = leakedHashes.split(/\\r?\\n/).find((v) => {\n return v.split(':')[0] === hashEnding;\n });\n\n return match != null ? parseInt(match.split(':')[1], 10) : 0;\n }\n\n async breachedAccounts(username: string): Promise<BreachAccountResponse[]> {\n try {\n return await this.apiService.getHibpBreach(username);\n } catch (e) {\n const error = e as ErrorResponse;\n if (error.statusCode === 404) {\n return [];\n }\n throw new Error();\n }\n }\n}\n","export enum FieldType {\n Text = 0,\n Hidden = 1,\n Boolean = 2,\n}\n","export class CipherBulkDeleteRequest {\n ids: string[];\n\n constructor(ids: string[]) {\n this.ids = ids == null ? [] : ids;\n }\n}\n","export class CipherBulkMoveRequest {\n ids: string[];\n folderId: string;\n\n constructor(ids: string[], folderId: string) {\n this.ids = ids == null ? [] : ids;\n this.folderId = folderId;\n }\n}\n","export class CipherBulkRestoreRequest {\n ids: string[];\n\n constructor(ids: string[]) {\n this.ids = ids == null ? [] : ids;\n }\n}\n","export abstract class BaseResponse {\n protected response: any;\n\n constructor(response: any) {\n this.response = response;\n }\n\n protected getResponseProperty(propertyName: string, response: any = null, exactName = false): any {\n if (propertyName == null || propertyName === '') {\n throw new Error('propertyName must not be null/empty.');\n }\n if (response == null && this.response != null) {\n response = this.response;\n }\n if (response == null) {\n return null;\n }\n if (!exactName && response[propertyName] === undefined) {\n let otherCasePropertyName: string = null;\n if (propertyName.charAt(0) === propertyName.charAt(0).toUpperCase()) {\n otherCasePropertyName = propertyName.charAt(0).toLowerCase();\n } else {\n otherCasePropertyName = propertyName.charAt(0).toUpperCase();\n }\n if (propertyName.length > 1) {\n otherCasePropertyName += propertyName.slice(1);\n }\n\n propertyName = otherCasePropertyName;\n if (response[propertyName] === undefined) {\n propertyName = propertyName.toLowerCase();\n }\n if (response[propertyName] === undefined) {\n propertyName = propertyName.toUpperCase();\n }\n }\n return response[propertyName];\n }\n}\n","import { BaseResponse } from '../response/baseResponse';\n\nexport class CardApi extends BaseResponse {\n cardholderName: string;\n brand: string;\n number: string;\n expMonth: string;\n expYear: string;\n code: string;\n\n constructor(data: any = null) {\n super(data);\n if (data == null) {\n return;\n }\n this.cardholderName = this.getResponseProperty('CardholderName');\n this.brand = this.getResponseProperty('Brand');\n this.number = this.getResponseProperty('Number');\n this.expMonth = this.getResponseProperty('ExpMonth');\n this.expYear = this.getResponseProperty('ExpYear');\n this.code = this.getResponseProperty('Code');\n }\n}\n","import { BaseResponse } from '../response/baseResponse';\n\nimport { FieldType } from '../../enums/fieldType';\n\nexport class FieldApi extends BaseResponse {\n name: string;\n value: string;\n type: FieldType;\n\n constructor(data: any = null) {\n super(data);\n if (data == null) {\n return;\n }\n this.type = this.getResponseProperty('Type');\n this.name = this.getResponseProperty('Name');\n this.value = this.getResponseProperty('Value');\n }\n}\n","import { BaseResponse } from '../response/baseResponse';\n\nexport class IdentityApi extends BaseResponse {\n title: string;\n firstName: string;\n middleName: string;\n lastName: string;\n address1: string;\n address2: string;\n address3: string;\n city: string;\n state: string;\n postalCode: string;\n country: string;\n company: string;\n email: string;\n phone: string;\n ssn: string;\n username: string;\n passportNumber: string;\n licenseNumber: string;\n\n constructor(data: any = null) {\n super(data);\n if (data == null) {\n return;\n }\n this.title = this.getResponseProperty('Title');\n this.firstName = this.getResponseProperty('FirstName');\n this.middleName = this.getResponseProperty('MiddleName');\n this.lastName = this.getResponseProperty('LastName');\n this.address1 = this.getResponseProperty('Address1');\n this.address2 = this.getResponseProperty('Address2');\n this.address3 = this.getResponseProperty('Address3');\n this.city = this.getResponseProperty('City');\n this.state = this.getResponseProperty('State');\n this.postalCode = this.getResponseProperty('PostalCode');\n this.country = this.getResponseProperty('Country');\n this.company = this.getResponseProperty('Company');\n this.email = this.getResponseProperty('Email');\n this.phone = this.getResponseProperty('Phone');\n this.ssn = this.getResponseProperty('SSN');\n this.username = this.getResponseProperty('Username');\n this.passportNumber = this.getResponseProperty('PassportNumber');\n this.licenseNumber = this.getResponseProperty('LicenseNumber');\n }\n}\n","import { BaseResponse } from '../response/baseResponse';\n\nimport { UriMatchType } from '../../enums/uriMatchType';\n\nexport class LoginUriApi extends BaseResponse {\n uri: string;\n match: UriMatchType = null;\n\n constructor(data: any = null) {\n super(data);\n if (data == null) {\n return;\n }\n this.uri = this.getResponseProperty('Uri');\n const match = this.getResponseProperty('Match');\n this.match = match != null ? match : null;\n }\n}\n","import { BaseResponse } from '../response/baseResponse';\n\nimport { LoginUriApi } from './loginUriApi';\n\nexport class LoginApi extends BaseResponse {\n uris: LoginUriApi[];\n username: string;\n password: string;\n passwordRevisionDate: string;\n totp: string;\n\n constructor(data: any = null) {\n super(data);\n if (data == null) {\n return;\n }\n this.username = this.getResponseProperty('Username');\n this.password = this.getResponseProperty('Password');\n this.passwordRevisionDate = this.getResponseProperty('PasswordRevisionDate');\n this.totp = this.getResponseProperty('Totp');\n\n const uris = this.getResponseProperty('Uris');\n if (uris != null) {\n this.uris = uris.map((u: any) => new LoginUriApi(u));\n }\n }\n}\n","import { BaseResponse } from '../response/baseResponse';\n\nimport { SecureNoteType } from '../../enums/secureNoteType';\n\nexport class SecureNoteApi extends BaseResponse {\n type: SecureNoteType;\n\n constructor(data: any = null) {\n super(data);\n if (data == null) {\n return;\n }\n this.type = this.getResponseProperty('Type');\n }\n}\n","export class AttachmentRequest {\n fileName: string;\n key: string;\n}\n","import { CipherType } from '../../enums/cipherType';\n\nimport { Cipher } from '../domain/cipher';\n\nimport { CardApi } from '../api/cardApi';\nimport { FieldApi } from '../api/fieldApi';\nimport { IdentityApi } from '../api/identityApi';\nimport { LoginApi } from '../api/loginApi';\nimport { LoginUriApi } from '../api/loginUriApi';\nimport { SecureNoteApi } from '../api/secureNoteApi';\n\nimport { AttachmentRequest } from './attachmentRequest';\nimport { PasswordHistoryRequest } from './passwordHistoryRequest';\n\nexport class CipherRequest {\n type: CipherType;\n folderId: string;\n organizationId: string;\n name: string;\n notes: string;\n favorite: boolean;\n login: LoginApi;\n secureNote: SecureNoteApi;\n card: CardApi;\n identity: IdentityApi;\n fields: FieldApi[];\n passwordHistory: PasswordHistoryRequest[];\n // Deprecated, remove at some point and rename attachments2 to attachments\n attachments: { [id: string]: string; };\n attachments2: { [id: string]: AttachmentRequest; };\n\n constructor(cipher: Cipher) {\n this.type = cipher.type;\n this.folderId = cipher.folderId;\n this.organizationId = cipher.organizationId;\n this.name = cipher.name ? cipher.name.encryptedString : null;\n this.notes = cipher.notes ? cipher.notes.encryptedString : null;\n this.favorite = cipher.favorite;\n\n switch (this.type) {\n case CipherType.Login:\n this.login = new LoginApi();\n this.login.uris = null;\n this.login.username = cipher.login.username ? cipher.login.username.encryptedString : null;\n this.login.password = cipher.login.password ? cipher.login.password.encryptedString : null;\n this.login.passwordRevisionDate = cipher.login.passwordRevisionDate != null ?\n cipher.login.passwordRevisionDate.toISOString() : null;\n this.login.totp = cipher.login.totp ? cipher.login.totp.encryptedString : null;\n\n if (cipher.login.uris != null) {\n this.login.uris = cipher.login.uris.map((u) => {\n const uri = new LoginUriApi();\n uri.uri = u.uri != null ? u.uri.encryptedString : null;\n uri.match = u.match != null ? u.match : null;\n return uri;\n });\n }\n break;\n case CipherType.SecureNote:\n this.secureNote = new SecureNoteApi();\n this.secureNote.type = cipher.secureNote.type;\n break;\n case CipherType.Card:\n this.card = new CardApi();\n this.card.cardholderName = cipher.card.cardholderName != null ?\n cipher.card.cardholderName.encryptedString : null;\n this.card.brand = cipher.card.brand != null ? cipher.card.brand.encryptedString : null;\n this.card.number = cipher.card.number != null ? cipher.card.number.encryptedString : null;\n this.card.expMonth = cipher.card.expMonth != null ? cipher.card.expMonth.encryptedString : null;\n this.card.expYear = cipher.card.expYear != null ? cipher.card.expYear.encryptedString : null;\n this.card.code = cipher.card.code != null ? cipher.card.code.encryptedString : null;\n break;\n case CipherType.Identity:\n this.identity = new IdentityApi();\n this.identity.title = cipher.identity.title != null ? cipher.identity.title.encryptedString : null;\n this.identity.firstName = cipher.identity.firstName != null ?\n cipher.identity.firstName.encryptedString : null;\n this.identity.middleName = cipher.identity.middleName != null ?\n cipher.identity.middleName.encryptedString : null;\n this.identity.lastName = cipher.identity.lastName != null ?\n cipher.identity.lastName.encryptedString : null;\n this.identity.address1 = cipher.identity.address1 != null ?\n cipher.identity.address1.encryptedString : null;\n this.identity.address2 = cipher.identity.address2 != null ?\n cipher.identity.address2.encryptedString : null;\n this.identity.address3 = cipher.identity.address3 != null ?\n cipher.identity.address3.encryptedString : null;\n this.identity.city = cipher.identity.city != null ? cipher.identity.city.encryptedString : null;\n this.identity.state = cipher.identity.state != null ? cipher.identity.state.encryptedString : null;\n this.identity.postalCode = cipher.identity.postalCode != null ?\n cipher.identity.postalCode.encryptedString : null;\n this.identity.country = cipher.identity.country != null ?\n cipher.identity.country.encryptedString : null;\n this.identity.company = cipher.identity.company != null ?\n cipher.identity.company.encryptedString : null;\n this.identity.email = cipher.identity.email != null ? cipher.identity.email.encryptedString : null;\n this.identity.phone = cipher.identity.phone != null ? cipher.identity.phone.encryptedString : null;\n this.identity.ssn = cipher.identity.ssn != null ? cipher.identity.ssn.encryptedString : null;\n this.identity.username = cipher.identity.username != null ?\n cipher.identity.username.encryptedString : null;\n this.identity.passportNumber = cipher.identity.passportNumber != null ?\n cipher.identity.passportNumber.encryptedString : null;\n this.identity.licenseNumber = cipher.identity.licenseNumber != null ?\n cipher.identity.licenseNumber.encryptedString : null;\n break;\n default:\n break;\n }\n\n if (cipher.fields != null) {\n this.fields = cipher.fields.map((f) => {\n const field = new FieldApi();\n field.type = f.type;\n field.name = f.name ? f.name.encryptedString : null;\n field.value = f.value ? f.value.encryptedString : null;\n return field;\n });\n }\n\n if (cipher.passwordHistory != null) {\n this.passwordHistory = [];\n cipher.passwordHistory.forEach((ph) => {\n this.passwordHistory.push({\n lastUsedDate: ph.lastUsedDate,\n password: ph.password ? ph.password.encryptedString : null,\n });\n });\n }\n\n if (cipher.attachments != null) {\n this.attachments = {};\n this.attachments2 = {};\n cipher.attachments.forEach((attachment) => {\n const fileName = attachment.fileName ? attachment.fileName.encryptedString : null;\n this.attachments[attachment.id] = fileName;\n const attachmentRequest = new AttachmentRequest();\n attachmentRequest.fileName = fileName;\n if (attachment.key != null) {\n attachmentRequest.key = attachment.key.encryptedString;\n }\n this.attachments2[attachment.id] = attachmentRequest;\n });\n }\n }\n}\n","import { CipherRequest } from './cipherRequest';\n\nimport { Cipher } from '../domain/cipher';\n\nexport class CipherWithIdRequest extends CipherRequest {\n id: string;\n\n constructor(cipher: Cipher) {\n super(cipher);\n this.id = cipher.id;\n }\n}\n","import { CipherWithIdRequest } from './cipherWithIdRequest';\n\nimport { Cipher } from '../domain/cipher';\n\nexport class CipherBulkShareRequest {\n ciphers: CipherWithIdRequest[];\n collectionIds: string[];\n\n constructor(ciphers: Cipher[], collectionIds: string[]) {\n if (ciphers != null) {\n this.ciphers = [];\n ciphers.forEach((c) => {\n this.ciphers.push(new CipherWithIdRequest(c));\n });\n }\n this.collectionIds = collectionIds;\n }\n}\n","export class CipherCollectionsRequest {\n collectionIds: string[];\n\n constructor(collectionIds: string[]) {\n this.collectionIds = collectionIds == null ? [] : collectionIds;\n }\n}\n","import { CipherRequest } from './cipherRequest';\n\nimport { Cipher } from '../domain/cipher';\n\nexport class CipherCreateRequest {\n cipher: CipherRequest;\n collectionIds: string[];\n\n constructor(cipher: Cipher) {\n this.cipher = new CipherRequest(cipher);\n this.collectionIds = cipher.collectionIds;\n }\n}\n","import { CipherRequest } from './cipherRequest';\n\nimport { Cipher } from '../domain/cipher';\n\nexport class CipherShareRequest {\n cipher: CipherRequest;\n collectionIds: string[];\n\n constructor(cipher: Cipher) {\n this.cipher = new CipherRequest(cipher);\n this.collectionIds = cipher.collectionIds;\n }\n}\n","export class ConstantsService {\n static readonly environmentUrlsKey: string = 'environmentUrls';\n static readonly disableGaKey: string = 'disableGa';\n static readonly disableAddLoginNotificationKey: string = 'disableAddLoginNotification';\n static readonly disableChangedPasswordNotificationKey: string = 'disableChangedPasswordNotification';\n static readonly disableContextMenuItemKey: string = 'disableContextMenuItem';\n static readonly disableFaviconKey: string = 'disableFavicon';\n static readonly disableAutoTotpCopyKey: string = 'disableAutoTotpCopy';\n static readonly enableAutoFillOnPageLoadKey: string = 'enableAutoFillOnPageLoad';\n static readonly vaultTimeoutKey: string = 'lockOption';\n static readonly vaultTimeoutActionKey: string = 'vaultTimeoutAction';\n static readonly lastActiveKey: string = 'lastActive';\n static readonly neverDomainsKey: string = 'neverDomains';\n static readonly installedVersionKey: string = 'installedVersion';\n static readonly localeKey: string = 'locale';\n static readonly themeKey: string = 'theme';\n static readonly collapsedGroupingsKey: string = 'collapsedGroupings';\n static readonly autoConfirmFingerprints: string = 'autoConfirmFingerprints';\n static readonly dontShowCardsCurrentTab: string = 'dontShowCardsCurrentTab';\n static readonly dontShowIdentitiesCurrentTab: string = 'dontShowIdentitiesCurrentTab';\n static readonly defaultUriMatch: string = 'defaultUriMatch';\n static readonly pinProtectedKey: string = 'pinProtectedKey';\n static readonly protectedPin: string = 'protectedPin';\n static readonly clearClipboardKey: string = 'clearClipboardKey';\n static readonly eventCollectionKey: string = 'eventCollection';\n\n readonly environmentUrlsKey: string = ConstantsService.environmentUrlsKey;\n readonly disableGaKey: string = ConstantsService.disableGaKey;\n readonly disableAddLoginNotificationKey: string = ConstantsService.disableAddLoginNotificationKey;\n readonly disableContextMenuItemKey: string = ConstantsService.disableContextMenuItemKey;\n readonly disableFaviconKey: string = ConstantsService.disableFaviconKey;\n readonly disableAutoTotpCopyKey: string = ConstantsService.disableAutoTotpCopyKey;\n readonly enableAutoFillOnPageLoadKey: string = ConstantsService.enableAutoFillOnPageLoadKey;\n readonly vaultTimeoutKey: string = ConstantsService.vaultTimeoutKey;\n readonly vaultTimeoutActionKey: string = ConstantsService.vaultTimeoutActionKey;\n readonly lastActiveKey: string = ConstantsService.lastActiveKey;\n readonly neverDomainsKey: string = ConstantsService.neverDomainsKey;\n readonly installedVersionKey: string = ConstantsService.installedVersionKey;\n readonly localeKey: string = ConstantsService.localeKey;\n readonly themeKey: string = ConstantsService.themeKey;\n readonly collapsedGroupingsKey: string = ConstantsService.collapsedGroupingsKey;\n readonly autoConfirmFingerprints: string = ConstantsService.autoConfirmFingerprints;\n readonly dontShowCardsCurrentTab: string = ConstantsService.dontShowCardsCurrentTab;\n readonly dontShowIdentitiesCurrentTab: string = ConstantsService.dontShowIdentitiesCurrentTab;\n readonly defaultUriMatch: string = ConstantsService.defaultUriMatch;\n readonly pinProtectedKey: string = ConstantsService.pinProtectedKey;\n readonly protectedPin: string = ConstantsService.protectedPin;\n readonly clearClipboardKey: string = ConstantsService.clearClipboardKey;\n readonly eventCollectionKey: string = ConstantsService.eventCollectionKey;\n}\n","/**\n * Use as a Decorator on async functions, it will prevent multiple 'active' calls as the same time\n *\n * If a promise was returned from a previous call to this function, that hasn't yet resolved it will\n * be returned, instead of calling the original function again\n *\n * Results are not cached, once the promise has returned, the next call will result in a fresh call\n *\n * Read more at https://github.com/bitwarden/jslib/pull/7\n */\nexport function sequentialize(cacheKey: (args: any[]) => string) {\n return (target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor) => {\n const originalMethod: () => Promise<any> = descriptor.value;\n const caches = new Map<any, Map<string, Promise<any>>>();\n\n const getCache = (obj: any) => {\n let cache = caches.get(obj);\n if (cache != null) {\n return cache;\n }\n cache = new Map<string, Promise<any>>();\n caches.set(obj, cache);\n return cache;\n };\n\n return {\n value: function(...args: any[]) {\n const cache = getCache(this);\n const argsCacheKey = cacheKey(args);\n let response = cache.get(argsCacheKey);\n if (response != null) {\n return response;\n }\n\n const onFinally = () => {\n cache.delete(argsCacheKey);\n if (cache.size === 0) {\n caches.delete(this);\n }\n };\n response = originalMethod.apply(this, args).then((val: any) => {\n onFinally();\n return val;\n }).catch((err: any) => {\n onFinally();\n throw err;\n });\n\n cache.set(argsCacheKey, response);\n return response;\n },\n };\n };\n}\n","import { CipherType } from '../enums/cipherType';\nimport { FieldType } from '../enums/fieldType';\nimport { UriMatchType } from '../enums/uriMatchType';\n\nimport { CipherData } from '../models/data/cipherData';\n\nimport { Attachment } from '../models/domain/attachment';\nimport { Card } from '../models/domain/card';\nimport { Cipher } from '../models/domain/cipher';\nimport { CipherString } from '../models/domain/cipherString';\nimport Domain from '../models/domain/domainBase';\nimport { Field } from '../models/domain/field';\nimport { Identity } from '../models/domain/identity';\nimport { Login } from '../models/domain/login';\nimport { LoginUri } from '../models/domain/loginUri';\nimport { Password } from '../models/domain/password';\nimport { SecureNote } from '../models/domain/secureNote';\nimport { SymmetricCryptoKey } from '../models/domain/symmetricCryptoKey';\n\nimport { CipherBulkDeleteRequest } from '../models/request/cipherBulkDeleteRequest';\nimport { CipherBulkMoveRequest } from '../models/request/cipherBulkMoveRequest';\nimport { CipherBulkRestoreRequest } from '../models/request/cipherBulkRestoreRequest';\nimport { CipherBulkShareRequest } from '../models/request/cipherBulkShareRequest';\nimport { CipherCollectionsRequest } from '../models/request/cipherCollectionsRequest';\nimport { CipherCreateRequest } from '../models/request/cipherCreateRequest';\nimport { CipherRequest } from '../models/request/cipherRequest';\nimport { CipherShareRequest } from '../models/request/cipherShareRequest';\n\nimport { CipherResponse } from '../models/response/cipherResponse';\nimport { ErrorResponse } from '../models/response/errorResponse';\n\nimport { AttachmentView } from '../models/view/attachmentView';\nimport { CipherView } from '../models/view/cipherView';\nimport { FieldView } from '../models/view/fieldView';\nimport { PasswordHistoryView } from '../models/view/passwordHistoryView';\nimport { View } from '../models/view/view';\n\nimport { ApiService } from '../abstractions/api.service';\nimport { CipherService as CipherServiceAbstraction } from '../abstractions/cipher.service';\nimport { CryptoService } from '../abstractions/crypto.service';\nimport { I18nService } from '../abstractions/i18n.service';\nimport { SearchService } from '../abstractions/search.service';\nimport { SettingsService } from '../abstractions/settings.service';\nimport { StorageService } from '../abstractions/storage.service';\nimport { UserService } from '../abstractions/user.service';\n\nimport { ConstantsService } from './constants.service';\n\nimport { sequentialize } from '../misc/sequentialize';\nimport { Utils } from '../misc/utils';\n\nconst Keys = {\n ciphersPrefix: 'ciphers_',\n localData: 'sitesLocalData',\n neverDomains: 'neverDomains',\n};\n\nconst DomainMatchBlacklist = new Map<string, Set<string>>([\n ['google.com', new Set(['script.google.com'])],\n]);\n\nexport class CipherService implements CipherServiceAbstraction {\n // tslint:disable-next-line\n _decryptedCipherCache: CipherView[];\n\n constructor(private cryptoService: CryptoService, private userService: UserService,\n private settingsService: SettingsService, private apiService: ApiService,\n private storageService: StorageService, private i18nService: I18nService,\n private searchService: () => SearchService) {\n }\n\n get decryptedCipherCache() {\n return this._decryptedCipherCache;\n }\n set decryptedCipherCache(value: CipherView[]) {\n this._decryptedCipherCache = value;\n if (this.searchService != null) {\n if (value == null) {\n this.searchService().clearIndex();\n } else {\n this.searchService().indexCiphers();\n }\n }\n }\n\n clearCache(): void {\n this.decryptedCipherCache = null;\n }\n\n async encrypt(model: CipherView, key?: SymmetricCryptoKey, originalCipher: Cipher = null): Promise<Cipher> {\n // Adjust password history\n if (model.id != null) {\n if (originalCipher == null) {\n originalCipher = await this.get(model.id);\n }\n if (originalCipher != null) {\n const existingCipher = await originalCipher.decrypt();\n model.passwordHistory = existingCipher.passwordHistory || [];\n if (model.type === CipherType.Login && existingCipher.type === CipherType.Login) {\n if (existingCipher.login.password != null && existingCipher.login.password !== '' &&\n existingCipher.login.password !== model.login.password) {\n const ph = new PasswordHistoryView();\n ph.password = existingCipher.login.password;\n ph.lastUsedDate = model.login.passwordRevisionDate = new Date();\n model.passwordHistory.splice(0, 0, ph);\n } else {\n model.login.passwordRevisionDate = existingCipher.login.passwordRevisionDate;\n }\n }\n if (existingCipher.hasFields) {\n const existingHiddenFields = existingCipher.fields.filter((f) => f.type === FieldType.Hidden &&\n f.name != null && f.name !== '' && f.value != null && f.value !== '');\n const hiddenFields = model.fields == null ? [] :\n model.fields.filter((f) => f.type === FieldType.Hidden && f.name != null && f.name !== '');\n existingHiddenFields.forEach((ef) => {\n const matchedField = hiddenFields.find((f) => f.name === ef.name);\n if (matchedField == null || matchedField.value !== ef.value) {\n const ph = new PasswordHistoryView();\n ph.password = ef.name + ': ' + ef.value;\n ph.lastUsedDate = new Date();\n model.passwordHistory.splice(0, 0, ph);\n }\n });\n }\n }\n if (model.passwordHistory != null && model.passwordHistory.length === 0) {\n model.passwordHistory = null;\n } else if (model.passwordHistory != null && model.passwordHistory.length > 5) {\n // only save last 5 history\n model.passwordHistory = model.passwordHistory.slice(0, 5);\n }\n }\n\n const cipher = new Cipher();\n cipher.id = model.id;\n cipher.folderId = model.folderId;\n cipher.favorite = model.favorite;\n cipher.organizationId = model.organizationId;\n cipher.type = model.type;\n cipher.collectionIds = model.collectionIds;\n\n if (key == null && cipher.organizationId != null) {\n key = await this.cryptoService.getOrgKey(cipher.organizationId);\n if (key == null) {\n throw new Error('Cannot encrypt cipher for organization. No key.');\n }\n }\n await Promise.all([\n this.encryptObjProperty(model, cipher, {\n name: null,\n notes: null,\n }, key),\n this.encryptCipherData(cipher, model, key),\n this.encryptFields(model.fields, key).then((fields) => {\n cipher.fields = fields;\n }),\n this.encryptPasswordHistories(model.passwordHistory, key).then((ph) => {\n cipher.passwordHistory = ph;\n }),\n this.encryptAttachments(model.attachments, key).then((attachments) => {\n cipher.attachments = attachments;\n }),\n ]);\n\n return cipher;\n }\n\n async encryptAttachments(attachmentsModel: AttachmentView[], key: SymmetricCryptoKey): Promise<Attachment[]> {\n if (attachmentsModel == null || attachmentsModel.length === 0) {\n return null;\n }\n\n const promises: Array<Promise<any>> = [];\n const encAttachments: Attachment[] = [];\n attachmentsModel.forEach(async (model) => {\n const attachment = new Attachment();\n attachment.id = model.id;\n attachment.size = model.size;\n attachment.sizeName = model.sizeName;\n attachment.url = model.url;\n const promise = this.encryptObjProperty(model, attachment, {\n fileName: null,\n }, key).then(async () => {\n if (model.key != null) {\n attachment.key = await this.cryptoService.encrypt(model.key.key, key);\n }\n encAttachments.push(attachment);\n });\n promises.push(promise);\n });\n\n await Promise.all(promises);\n return encAttachments;\n }\n\n async encryptFields(fieldsModel: FieldView[], key: SymmetricCryptoKey): Promise<Field[]> {\n if (!fieldsModel || !fieldsModel.length) {\n return null;\n }\n\n const self = this;\n const encFields: Field[] = [];\n await fieldsModel.reduce((promise, field) => {\n return promise.then(() => {\n return self.encryptField(field, key);\n }).then((encField: Field) => {\n encFields.push(encField);\n });\n }, Promise.resolve());\n\n return encFields;\n }\n\n async encryptField(fieldModel: FieldView, key: SymmetricCryptoKey): Promise<Field> {\n const field = new Field();\n field.type = fieldModel.type;\n // normalize boolean type field values\n if (fieldModel.type === FieldType.Boolean && fieldModel.value !== 'true') {\n fieldModel.value = 'false';\n }\n\n await this.encryptObjProperty(fieldModel, field, {\n name: null,\n value: null,\n }, key);\n\n return field;\n }\n\n async encryptPasswordHistories(phModels: PasswordHistoryView[], key: SymmetricCryptoKey): Promise<Password[]> {\n if (!phModels || !phModels.length) {\n return null;\n }\n\n const self = this;\n const encPhs: Password[] = [];\n await phModels.reduce((promise, ph) => {\n return promise.then(() => {\n return self.encryptPasswordHistory(ph, key);\n }).then((encPh: Password) => {\n encPhs.push(encPh);\n });\n }, Promise.resolve());\n\n return encPhs;\n }\n\n async encryptPasswordHistory(phModel: PasswordHistoryView, key: SymmetricCryptoKey): Promise<Password> {\n const ph = new Password();\n ph.lastUsedDate = phModel.lastUsedDate;\n\n await this.encryptObjProperty(phModel, ph, {\n password: null,\n }, key);\n\n return ph;\n }\n\n async get(id: string): Promise<Cipher> {\n const userId = await this.userService.getUserId();\n const localData = await this.storageService.get<any>(Keys.localData);\n const ciphers = await this.storageService.get<{ [id: string]: CipherData; }>(\n Keys.ciphersPrefix + userId);\n if (ciphers == null || !ciphers.hasOwnProperty(id)) {\n return null;\n }\n\n return new Cipher(ciphers[id], false, localData ? localData[id] : null);\n }\n\n async getAll(): Promise<Cipher[]> {\n const userId = await this.userService.getUserId();\n const localData = await this.storageService.get<any>(Keys.localData);\n const ciphers = await this.storageService.get<{ [id: string]: CipherData; }>(\n Keys.ciphersPrefix + userId);\n const response: Cipher[] = [];\n for (const id in ciphers) {\n if (ciphers.hasOwnProperty(id)) {\n response.push(new Cipher(ciphers[id], false, localData ? localData[id] : null));\n }\n }\n return response;\n }\n\n @sequentialize(() => 'getAllDecrypted')\n async getAllDecrypted(): Promise<CipherView[]> {\n if (this.decryptedCipherCache != null) {\n return this.decryptedCipherCache;\n }\n\n const decCiphers: CipherView[] = [];\n const hasKey = await this.cryptoService.hasKey();\n if (!hasKey) {\n throw new Error('No key.');\n }\n\n const promises: any[] = [];\n const ciphers = await this.getAll();\n ciphers.forEach((cipher) => {\n promises.push(cipher.decrypt().then((c) => decCiphers.push(c)));\n });\n\n await Promise.all(promises);\n decCiphers.sort(this.getLocaleSortingFunction());\n this.decryptedCipherCache = decCiphers;\n return this.decryptedCipherCache;\n }\n\n async getAllDecryptedForGrouping(groupingId: string, folder: boolean = true): Promise<CipherView[]> {\n const ciphers = await this.getAllDecrypted();\n\n return ciphers.filter((cipher) => {\n if (cipher.isDeleted) {\n return false;\n }\n if (folder && cipher.folderId === groupingId) {\n return true;\n } else if (!folder && cipher.collectionIds != null && cipher.collectionIds.indexOf(groupingId) > -1) {\n return true;\n }\n\n return false;\n });\n }\n\n async getAllDecryptedForUrl(url: string, includeOtherTypes?: CipherType[]): Promise<CipherView[]> {\n if (url == null && includeOtherTypes == null) {\n return Promise.resolve([]);\n }\n\n const domain = Utils.getDomain(url);\n const eqDomainsPromise = domain == null ? Promise.resolve([]) :\n this.settingsService.getEquivalentDomains().then((eqDomains: any[][]) => {\n let matches: any[] = [];\n eqDomains.forEach((eqDomain) => {\n if (eqDomain.length && eqDomain.indexOf(domain) >= 0) {\n matches = matches.concat(eqDomain);\n }\n });\n\n if (!matches.length) {\n matches.push(domain);\n }\n\n return matches;\n });\n\n const result = await Promise.all([eqDomainsPromise, this.getAllDecrypted()]);\n const matchingDomains = result[0];\n const ciphers = result[1];\n\n let defaultMatch = await this.storageService.get<UriMatchType>(ConstantsService.defaultUriMatch);\n if (defaultMatch == null) {\n defaultMatch = UriMatchType.Domain;\n }\n\n return ciphers.filter((cipher) => {\n if (cipher.deletedDate != null) {\n return false;\n }\n if (includeOtherTypes != null && includeOtherTypes.indexOf(cipher.type) > -1) {\n return true;\n }\n\n if (url != null && cipher.type === CipherType.Login && cipher.login.uris != null) {\n for (let i = 0; i < cipher.login.uris.length; i++) {\n const u = cipher.login.uris[i];\n if (u.uri == null) {\n continue;\n }\n\n const match = u.match == null ? defaultMatch : u.match;\n switch (match) {\n case UriMatchType.Domain:\n if (domain != null && u.domain != null && matchingDomains.indexOf(u.domain) > -1) {\n if (DomainMatchBlacklist.has(u.domain)) {\n const domainUrlHost = Utils.getHost(url);\n if (!DomainMatchBlacklist.get(u.domain).has(domainUrlHost)) {\n return true;\n }\n } else {\n return true;\n }\n }\n break;\n case UriMatchType.Host:\n const urlHost = Utils.getHost(url);\n if (urlHost != null && urlHost === Utils.getHost(u.uri)) {\n return true;\n }\n break;\n case UriMatchType.Exact:\n if (url === u.uri) {\n return true;\n }\n break;\n case UriMatchType.StartsWith:\n if (url.startsWith(u.uri)) {\n return true;\n }\n break;\n case UriMatchType.RegularExpression:\n try {\n const regex = new RegExp(u.uri, 'i');\n if (regex.test(url)) {\n return true;\n }\n } catch { }\n break;\n case UriMatchType.Never:\n default:\n break;\n }\n }\n }\n\n return false;\n });\n }\n\n async getAllFromApiForOrganization(organizationId: string): Promise<CipherView[]> {\n const ciphers = await this.apiService.getCiphersOrganization(organizationId);\n if (ciphers != null && ciphers.data != null && ciphers.data.length) {\n const decCiphers: CipherView[] = [];\n const promises: any[] = [];\n ciphers.data.forEach((r) => {\n const data = new CipherData(r);\n const cipher = new Cipher(data);\n promises.push(cipher.decrypt().then((c) => decCiphers.push(c)));\n });\n await Promise.all(promises);\n decCiphers.sort(this.getLocaleSortingFunction());\n return decCiphers;\n } else {\n return [];\n }\n }\n\n async getLastUsedForUrl(url: string): Promise<CipherView> {\n const ciphers = await this.getAllDecryptedForUrl(url);\n if (ciphers.length === 0) {\n return null;\n }\n\n const sortedCiphers = ciphers.sort(this.sortCiphersByLastUsed);\n return sortedCiphers[0];\n }\n\n async updateLastUsedDate(id: string): Promise<void> {\n let ciphersLocalData = await this.storageService.get<any>(Keys.localData);\n if (!ciphersLocalData) {\n ciphersLocalData = {};\n }\n\n if (ciphersLocalData[id]) {\n ciphersLocalData[id].lastUsedDate = new Date().getTime();\n } else {\n ciphersLocalData[id] = {\n lastUsedDate: new Date().getTime(),\n };\n }\n\n await this.storageService.save(Keys.localData, ciphersLocalData);\n\n if (this.decryptedCipherCache == null) {\n return;\n }\n\n for (let i = 0; i < this.decryptedCipherCache.length; i++) {\n const cached = this.decryptedCipherCache[i];\n if (cached.id === id) {\n cached.localData = ciphersLocalData[id];\n break;\n }\n }\n }\n\n async saveNeverDomain(domain: string): Promise<void> {\n if (domain == null) {\n return;\n }\n\n let domains = await this.storageService.get<{ [id: string]: any; }>(Keys.neverDomains);\n if (!domains) {\n domains = {};\n }\n domains[domain] = null;\n await this.storageService.save(Keys.neverDomains, domains);\n }\n\n async saveWithServer(cipher: Cipher): Promise<any> {\n let response: CipherResponse;\n if (cipher.id == null) {\n if (cipher.collectionIds != null) {\n const request = new CipherCreateRequest(cipher);\n response = await this.apiService.postCipherCreate(request);\n } else {\n const request = new CipherRequest(cipher);\n response = await this.apiService.postCipher(request);\n }\n cipher.id = response.id;\n } else {\n const request = new CipherRequest(cipher);\n response = await this.apiService.putCipher(cipher.id, request);\n }\n\n const userId = await this.userService.getUserId();\n const data = new CipherData(response, userId, cipher.collectionIds);\n await this.upsert(data);\n }\n\n async shareWithServer(cipher: CipherView, organizationId: string, collectionIds: string[]): Promise<any> {\n const attachmentPromises: Array<Promise<any>> = [];\n if (cipher.attachments != null) {\n cipher.attachments.forEach((attachment) => {\n if (attachment.key == null) {\n attachmentPromises.push(this.shareAttachmentWithServer(attachment, cipher.id, organizationId));\n }\n });\n }\n await Promise.all(attachmentPromises);\n\n cipher.organizationId = organizationId;\n cipher.collectionIds = collectionIds;\n const encCipher = await this.encrypt(cipher);\n const request = new CipherShareRequest(encCipher);\n const response = await this.apiService.putShareCipher(cipher.id, request);\n const userId = await this.userService.getUserId();\n const data = new CipherData(response, userId, collectionIds);\n await this.upsert(data);\n }\n\n async shareManyWithServer(ciphers: CipherView[], organizationId: string, collectionIds: string[]): Promise<any> {\n const promises: Array<Promise<any>> = [];\n const encCiphers: Cipher[] = [];\n for (const cipher of ciphers) {\n cipher.organizationId = organizationId;\n cipher.collectionIds = collectionIds;\n promises.push(this.encrypt(cipher).then((c) => {\n encCiphers.push(c);\n }));\n }\n await Promise.all(promises);\n const request = new CipherBulkShareRequest(encCiphers, collectionIds);\n await this.apiService.putShareCiphers(request);\n const userId = await this.userService.getUserId();\n await this.upsert(encCiphers.map((c) => c.toCipherData(userId)));\n }\n\n saveAttachmentWithServer(cipher: Cipher, unencryptedFile: any, admin = false): Promise<Cipher> {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.readAsArrayBuffer(unencryptedFile);\n reader.onload = async (evt: any) => {\n try {\n const cData = await this.saveAttachmentRawWithServer(cipher,\n unencryptedFile.name, evt.target.result, admin);\n resolve(cData);\n } catch (e) {\n reject(e);\n }\n };\n reader.onerror = (evt) => {\n reject('Error reading file.');\n };\n });\n }\n\n async saveAttachmentRawWithServer(cipher: Cipher, filename: string,\n data: ArrayBuffer, admin = false): Promise<Cipher> {\n const key = await this.cryptoService.getOrgKey(cipher.organizationId);\n const encFileName = await this.cryptoService.encrypt(filename, key);\n\n const dataEncKey = await this.cryptoService.makeEncKey(key);\n const encData = await this.cryptoService.encryptToBytes(data, dataEncKey[0]);\n\n const fd = new FormData();\n try {\n const blob = new Blob([encData], { type: 'application/octet-stream' });\n fd.append('key', dataEncKey[1].encryptedString);\n fd.append('data', blob, encFileName.encryptedString);\n } catch (e) {\n if (Utils.isNode && !Utils.isBrowser) {\n fd.append('key', dataEncKey[1].encryptedString);\n fd.append('data', Buffer.from(encData) as any, {\n filepath: encFileName.encryptedString,\n contentType: 'application/octet-stream',\n } as any);\n } else {\n throw e;\n }\n }\n\n let response: CipherResponse;\n try {\n if (admin) {\n response = await this.apiService.postCipherAttachmentAdmin(cipher.id, fd);\n } else {\n response = await this.apiService.postCipherAttachment(cipher.id, fd);\n }\n } catch (e) {\n throw new Error((e as ErrorResponse).getSingleMessage());\n }\n\n const userId = await this.userService.getUserId();\n const cData = new CipherData(response, userId, cipher.collectionIds);\n if (!admin) {\n await this.upsert(cData);\n }\n return new Cipher(cData);\n }\n\n async saveCollectionsWithServer(cipher: Cipher): Promise<any> {\n const request = new CipherCollectionsRequest(cipher.collectionIds);\n await this.apiService.putCipherCollections(cipher.id, request);\n const userId = await this.userService.getUserId();\n const data = cipher.toCipherData(userId);\n await this.upsert(data);\n }\n\n async upsert(cipher: CipherData | CipherData[]): Promise<any> {\n const userId = await this.userService.getUserId();\n let ciphers = await this.storageService.get<{ [id: string]: CipherData; }>(\n Keys.ciphersPrefix + userId);\n if (ciphers == null) {\n ciphers = {};\n }\n\n if (cipher instanceof CipherData) {\n const c = cipher as CipherData;\n ciphers[c.id] = c;\n } else {\n (cipher as CipherData[]).forEach((c) => {\n ciphers[c.id] = c;\n });\n }\n\n await this.storageService.save(Keys.ciphersPrefix + userId, ciphers);\n this.decryptedCipherCache = null;\n }\n\n async replace(ciphers: { [id: string]: CipherData; }): Promise<any> {\n const userId = await this.userService.getUserId();\n await this.storageService.save(Keys.ciphersPrefix + userId, ciphers);\n this.decryptedCipherCache = null;\n }\n\n async clear(userId: string): Promise<any> {\n await this.storageService.remove(Keys.ciphersPrefix + userId);\n this.clearCache();\n }\n\n async moveManyWithServer(ids: string[], folderId: string): Promise<any> {\n await this.apiService.putMoveCiphers(new CipherBulkMoveRequest(ids, folderId));\n\n const userId = await this.userService.getUserId();\n let ciphers = await this.storageService.get<{ [id: string]: CipherData; }>(\n Keys.ciphersPrefix + userId);\n if (ciphers == null) {\n ciphers = {};\n }\n\n ids.forEach((id) => {\n if (ciphers.hasOwnProperty(id)) {\n ciphers[id].folderId = folderId;\n }\n });\n\n await this.storageService.save(Keys.ciphersPrefix + userId, ciphers);\n this.decryptedCipherCache = null;\n }\n\n async delete(id: string | string[]): Promise<any> {\n const userId = await this.userService.getUserId();\n const ciphers = await this.storageService.get<{ [id: string]: CipherData; }>(\n Keys.ciphersPrefix + userId);\n if (ciphers == null) {\n return;\n }\n\n if (typeof id === 'string') {\n if (ciphers[id] == null) {\n return;\n }\n delete ciphers[id];\n } else {\n (id as string[]).forEach((i) => {\n delete ciphers[i];\n });\n }\n\n await this.storageService.save(Keys.ciphersPrefix + userId, ciphers);\n this.decryptedCipherCache = null;\n }\n\n async deleteWithServer(id: string): Promise<any> {\n await this.apiService.deleteCipher(id);\n await this.delete(id);\n }\n\n async deleteManyWithServer(ids: string[]): Promise<any> {\n await this.apiService.deleteManyCiphers(new CipherBulkDeleteRequest(ids));\n await this.delete(ids);\n }\n\n async deleteAttachment(id: string, attachmentId: string): Promise<void> {\n const userId = await this.userService.getUserId();\n const ciphers = await this.storageService.get<{ [id: string]: CipherData; }>(\n Keys.ciphersPrefix + userId);\n\n if (ciphers == null || !ciphers.hasOwnProperty(id) || ciphers[id].attachments == null) {\n return;\n }\n\n for (let i = 0; i < ciphers[id].attachments.length; i++) {\n if (ciphers[id].attachments[i].id === attachmentId) {\n ciphers[id].attachments.splice(i, 1);\n }\n }\n\n await this.storageService.save(Keys.ciphersPrefix + userId, ciphers);\n this.decryptedCipherCache = null;\n }\n\n async deleteAttachmentWithServer(id: string, attachmentId: string): Promise<void> {\n try {\n await this.apiService.deleteCipherAttachment(id, attachmentId);\n } catch (e) {\n return Promise.reject((e as ErrorResponse).getSingleMessage());\n }\n await this.deleteAttachment(id, attachmentId);\n }\n\n sortCiphersByLastUsed(a: CipherView, b: CipherView): number {\n const aLastUsed = a.localData && a.localData.lastUsedDate ? a.localData.lastUsedDate as number : null;\n const bLastUsed = b.localData && b.localData.lastUsedDate ? b.localData.lastUsedDate as number : null;\n\n const bothNotNull = aLastUsed != null && bLastUsed != null;\n if (bothNotNull && aLastUsed < bLastUsed) {\n return 1;\n }\n if (aLastUsed != null && bLastUsed == null) {\n return -1;\n }\n\n if (bothNotNull && aLastUsed > bLastUsed) {\n return -1;\n }\n if (bLastUsed != null && aLastUsed == null) {\n return 1;\n }\n\n return 0;\n }\n\n sortCiphersByLastUsedThenName(a: CipherView, b: CipherView): number {\n const result = this.sortCiphersByLastUsed(a, b);\n if (result !== 0) {\n return result;\n }\n\n return this.getLocaleSortingFunction()(a, b);\n }\n\n getLocaleSortingFunction(): (a: CipherView, b: CipherView) => number {\n return (a, b) => {\n let aName = a.name;\n let bName = b.name;\n\n if (aName == null && bName != null) {\n return -1;\n }\n if (aName != null && bName == null) {\n return 1;\n }\n if (aName == null && bName == null) {\n return 0;\n }\n\n const result = this.i18nService.collator ? this.i18nService.collator.compare(aName, bName) :\n aName.localeCompare(bName);\n\n if (result !== 0 || a.type !== CipherType.Login || b.type !== CipherType.Login) {\n return result;\n }\n\n if (a.login.username != null) {\n aName += a.login.username;\n }\n\n if (b.login.username != null) {\n bName += b.login.username;\n }\n\n return this.i18nService.collator ? this.i18nService.collator.compare(aName, bName) :\n aName.localeCompare(bName);\n };\n }\n\n async softDelete(id: string | string[]): Promise<any> {\n const userId = await this.userService.getUserId();\n const ciphers = await this.storageService.get<{ [id: string]: CipherData; }>(\n Keys.ciphersPrefix + userId);\n if (ciphers == null) {\n return;\n }\n\n const setDeletedDate = (cipherId: string) => {\n if (ciphers[cipherId] == null) {\n return;\n }\n ciphers[cipherId].deletedDate = new Date().toISOString();\n };\n\n if (typeof id === 'string') {\n setDeletedDate(id);\n } else {\n (id as string[]).forEach(setDeletedDate);\n }\n\n await this.storageService.save(Keys.ciphersPrefix + userId, ciphers);\n this.decryptedCipherCache = null;\n }\n\n async softDeleteWithServer(id: string): Promise<any> {\n await this.apiService.putDeleteCipher(id);\n await this.softDelete(id);\n }\n\n async softDeleteManyWithServer(ids: string[]): Promise<any> {\n await this.apiService.putDeleteManyCiphers(new CipherBulkDeleteRequest(ids));\n await this.softDelete(ids);\n }\n\n async restore(id: string | string[]): Promise<any> {\n const userId = await this.userService.getUserId();\n const ciphers = await this.storageService.get<{ [id: string]: CipherData; }>(\n Keys.ciphersPrefix + userId);\n if (ciphers == null) {\n return;\n }\n\n const clearDeletedDate = (cipherId: string) => {\n if (ciphers[cipherId] == null) {\n return;\n }\n ciphers[cipherId].deletedDate = null;\n };\n\n if (typeof id === 'string') {\n clearDeletedDate(id);\n } else {\n (id as string[]).forEach(clearDeletedDate);\n }\n\n await this.storageService.save(Keys.ciphersPrefix + userId, ciphers);\n this.decryptedCipherCache = null;\n }\n\n async restoreWithServer(id: string): Promise<any> {\n await this.apiService.putRestoreCipher(id);\n await this.restore(id);\n }\n\n async restoreManyWithServer(ids: string[]): Promise<any> {\n await this.apiService.putRestoreManyCiphers(new CipherBulkRestoreRequest(ids));\n await this.restore(ids);\n }\n\n // Helpers\n\n private async shareAttachmentWithServer(attachmentView: AttachmentView, cipherId: string,\n organizationId: string): Promise<any> {\n const attachmentResponse = await this.apiService.nativeFetch(\n new Request(attachmentView.url, { cache: 'no-store' }));\n if (attachmentResponse.status !== 200) {\n throw Error('Failed to download attachment: ' + attachmentResponse.status.toString());\n }\n\n const buf = await attachmentResponse.arrayBuffer();\n const decBuf = await this.cryptoService.decryptFromBytes(buf, null);\n const key = await this.cryptoService.getOrgKey(organizationId);\n const encFileName = await this.cryptoService.encrypt(attachmentView.fileName, key);\n\n const dataEncKey = await this.cryptoService.makeEncKey(key);\n const encData = await this.cryptoService.encryptToBytes(decBuf, dataEncKey[0]);\n\n const fd = new FormData();\n try {\n const blob = new Blob([encData], { type: 'application/octet-stream' });\n fd.append('key', dataEncKey[1].encryptedString);\n fd.append('data', blob, encFileName.encryptedString);\n } catch (e) {\n if (Utils.isNode && !Utils.isBrowser) {\n fd.append('key', dataEncKey[1].encryptedString);\n fd.append('data', Buffer.from(encData) as any, {\n filepath: encFileName.encryptedString,\n contentType: 'application/octet-stream',\n } as any);\n } else {\n throw e;\n }\n }\n\n try {\n await this.apiService.postShareCipherAttachment(cipherId, attachmentView.id, fd, organizationId);\n } catch (e) {\n throw new Error((e as ErrorResponse).getSingleMessage());\n }\n }\n\n private async encryptObjProperty<V extends View, D extends Domain>(model: V, obj: D,\n map: any, key: SymmetricCryptoKey): Promise<void> {\n const promises = [];\n const self = this;\n\n for (const prop in map) {\n if (!map.hasOwnProperty(prop)) {\n continue;\n }\n\n // tslint:disable-next-line\n (function (theProp, theObj) {\n const p = Promise.resolve().then(() => {\n const modelProp = (model as any)[(map[theProp] || theProp)];\n if (modelProp && modelProp !== '') {\n return self.cryptoService.encrypt(modelProp, key);\n }\n return null;\n }).then((val: CipherString) => {\n (theObj as any)[theProp] = val;\n });\n promises.push(p);\n })(prop, obj);\n }\n\n await Promise.all(promises);\n }\n\n private async encryptCipherData(cipher: Cipher, model: CipherView, key: SymmetricCryptoKey) {\n switch (cipher.type) {\n case CipherType.Login:\n cipher.login = new Login();\n cipher.login.passwordRevisionDate = model.login.passwordRevisionDate;\n await this.encryptObjProperty(model.login, cipher.login, {\n username: null,\n password: null,\n totp: null,\n }, key);\n\n if (model.login.uris != null) {\n cipher.login.uris = [];\n for (let i = 0; i < model.login.uris.length; i++) {\n const loginUri = new LoginUri();\n loginUri.match = model.login.uris[i].match;\n await this.encryptObjProperty(model.login.uris[i], loginUri, {\n uri: null,\n }, key);\n cipher.login.uris.push(loginUri);\n }\n }\n return;\n case CipherType.SecureNote:\n cipher.secureNote = new SecureNote();\n cipher.secureNote.type = model.secureNote.type;\n return;\n case CipherType.Card:\n cipher.card = new Card();\n await this.encryptObjProperty(model.card, cipher.card, {\n cardholderName: null,\n brand: null,\n number: null,\n expMonth: null,\n expYear: null,\n code: null,\n }, key);\n return;\n case CipherType.Identity:\n cipher.identity = new Identity();\n await this.encryptObjProperty(model.identity, cipher.identity, {\n title: null,\n firstName: null,\n middleName: null,\n lastName: null,\n address1: null,\n address2: null,\n address3: null,\n city: null,\n state: null,\n postalCode: null,\n country: null,\n company: null,\n email: null,\n phone: null,\n ssn: null,\n username: null,\n passportNumber: null,\n licenseNumber: null,\n }, key);\n return;\n default:\n throw new Error('Unknown cipher type.');\n }\n }\n}\n","import { CollectionDetailsResponse } from '../response/collectionResponse';\n\nexport class CollectionData {\n id: string;\n organizationId: string;\n name: string;\n externalId: string;\n readOnly: boolean;\n\n constructor(response: CollectionDetailsResponse) {\n this.id = response.id;\n this.organizationId = response.organizationId;\n this.name = response.name;\n this.externalId = response.externalId;\n this.readOnly = response.readOnly;\n }\n}\n","export class TreeNode<T extends ITreeNodeObject> {\n parent: T;\n node: T;\n children: Array<TreeNode<T>> = [];\n\n constructor(node: T, name: string, parent: T) {\n this.parent = parent;\n this.node = node;\n this.node.name = name;\n }\n}\n\nexport interface ITreeNodeObject {\n id: string;\n name: string;\n}\n","import {\n ITreeNodeObject,\n TreeNode,\n} from '../models/domain/treeNode';\n\nexport class ServiceUtils {\n static nestedTraverse(nodeTree: Array<TreeNode<ITreeNodeObject>>, partIndex: number, parts: string[],\n obj: ITreeNodeObject, parent: ITreeNodeObject, delimiter: string) {\n if (parts.length <= partIndex) {\n return;\n }\n\n const end = partIndex === parts.length - 1;\n const partName = parts[partIndex];\n\n for (let i = 0; i < nodeTree.length; i++) {\n if (nodeTree[i].node.name !== parts[partIndex]) {\n continue;\n }\n if (end && nodeTree[i].node.id !== obj.id) {\n // Another node with the same name.\n nodeTree.push(new TreeNode(obj, partName, parent));\n return;\n }\n ServiceUtils.nestedTraverse(nodeTree[i].children, partIndex + 1, parts,\n obj, nodeTree[i].node, delimiter);\n return;\n }\n\n if (nodeTree.filter((n) => n.node.name === partName).length === 0) {\n if (end) {\n nodeTree.push(new TreeNode(obj, partName, parent));\n return;\n }\n const newPartName = parts[partIndex] + delimiter + parts[partIndex + 1];\n ServiceUtils.nestedTraverse(nodeTree, 0, [newPartName, ...parts.slice(partIndex + 2)],\n obj, parent, delimiter);\n }\n }\n\n static getTreeNodeObject(nodeTree: Array<TreeNode<ITreeNodeObject>>, id: string): TreeNode<ITreeNodeObject> {\n for (let i = 0; i < nodeTree.length; i++) {\n if (nodeTree[i].node.id === id) {\n return nodeTree[i];\n } else if (nodeTree[i].children != null) {\n const node = ServiceUtils.getTreeNodeObject(nodeTree[i].children, id);\n if (node !== null) {\n return node;\n }\n }\n }\n return null;\n }\n}\n","import { CollectionData } from '../models/data/collectionData';\n\nimport { Collection } from '../models/domain/collection';\nimport { TreeNode } from '../models/domain/treeNode';\n\nimport { CollectionView } from '../models/view/collectionView';\n\nimport { CollectionService as CollectionServiceAbstraction } from '../abstractions/collection.service';\nimport { CryptoService } from '../abstractions/crypto.service';\nimport { I18nService } from '../abstractions/i18n.service';\nimport { StorageService } from '../abstractions/storage.service';\nimport { UserService } from '../abstractions/user.service';\n\nimport { ServiceUtils } from '../misc/serviceUtils';\nimport { Utils } from '../misc/utils';\n\nconst Keys = {\n collectionsPrefix: 'collections_',\n};\nconst NestingDelimiter = '/';\n\nexport class CollectionService implements CollectionServiceAbstraction {\n decryptedCollectionCache: CollectionView[];\n\n constructor(private cryptoService: CryptoService, private userService: UserService,\n private storageService: StorageService, private i18nService: I18nService) {\n }\n\n clearCache(): void {\n this.decryptedCollectionCache = null;\n }\n\n async encrypt(model: CollectionView): Promise<Collection> {\n if (model.organizationId == null) {\n throw new Error('Collection has no organization id.');\n }\n const key = await this.cryptoService.getOrgKey(model.organizationId);\n if (key == null) {\n throw new Error('No key for this collection\\'s organization.');\n }\n const collection = new Collection();\n collection.id = model.id;\n collection.organizationId = model.organizationId;\n collection.readOnly = model.readOnly;\n collection.name = await this.cryptoService.encrypt(model.name, key);\n return collection;\n }\n\n async decryptMany(collections: Collection[]): Promise<CollectionView[]> {\n if (collections == null) {\n return [];\n }\n const decCollections: CollectionView[] = [];\n const promises: Array<Promise<any>> = [];\n collections.forEach((collection) => {\n promises.push(collection.decrypt().then((c) => decCollections.push(c)));\n });\n await Promise.all(promises);\n return decCollections.sort(Utils.getSortFunction(this.i18nService, 'name'));\n }\n\n async get(id: string): Promise<Collection> {\n const userId = await this.userService.getUserId();\n const collections = await this.storageService.get<{ [id: string]: CollectionData; }>(\n Keys.collectionsPrefix + userId);\n if (collections == null || !collections.hasOwnProperty(id)) {\n return null;\n }\n\n return new Collection(collections[id]);\n }\n\n async getAll(): Promise<Collection[]> {\n const userId = await this.userService.getUserId();\n const collections = await this.storageService.get<{ [id: string]: CollectionData; }>(\n Keys.collectionsPrefix + userId);\n const response: Collection[] = [];\n for (const id in collections) {\n if (collections.hasOwnProperty(id)) {\n response.push(new Collection(collections[id]));\n }\n }\n return response;\n }\n\n async getAllDecrypted(): Promise<CollectionView[]> {\n if (this.decryptedCollectionCache != null) {\n return this.decryptedCollectionCache;\n }\n\n const hasKey = await this.cryptoService.hasKey();\n if (!hasKey) {\n throw new Error('No key.');\n }\n\n const collections = await this.getAll();\n this.decryptedCollectionCache = await this.decryptMany(collections);\n return this.decryptedCollectionCache;\n }\n\n async getAllNested(collections: CollectionView[] = null): Promise<Array<TreeNode<CollectionView>>> {\n if (collections == null) {\n collections = await this.getAllDecrypted();\n }\n const nodes: Array<TreeNode<CollectionView>> = [];\n collections.forEach((c) => {\n const collectionCopy = new CollectionView();\n collectionCopy.id = c.id;\n collectionCopy.organizationId = c.organizationId;\n const parts = c.name != null ? c.name.replace(/^\\/+|\\/+$/g, '').split(NestingDelimiter) : [];\n ServiceUtils.nestedTraverse(nodes, 0, parts, collectionCopy, null, NestingDelimiter);\n });\n return nodes;\n }\n\n async getNested(id: string): Promise<TreeNode<CollectionView>> {\n const collections = await this.getAllNested();\n return ServiceUtils.getTreeNodeObject(collections, id) as TreeNode<CollectionView>;\n }\n\n async upsert(collection: CollectionData | CollectionData[]): Promise<any> {\n const userId = await this.userService.getUserId();\n let collections = await this.storageService.get<{ [id: string]: CollectionData; }>(\n Keys.collectionsPrefix + userId);\n if (collections == null) {\n collections = {};\n }\n\n if (collection instanceof CollectionData) {\n const c = collection as CollectionData;\n collections[c.id] = c;\n } else {\n (collection as CollectionData[]).forEach((c) => {\n collections[c.id] = c;\n });\n }\n\n await this.storageService.save(Keys.collectionsPrefix + userId, collections);\n this.decryptedCollectionCache = null;\n }\n\n async replace(collections: { [id: string]: CollectionData; }): Promise<any> {\n const userId = await this.userService.getUserId();\n await this.storageService.save(Keys.collectionsPrefix + userId, collections);\n this.decryptedCollectionCache = null;\n }\n\n async clear(userId: string): Promise<any> {\n await this.storageService.remove(Keys.collectionsPrefix + userId);\n this.decryptedCollectionCache = null;\n }\n\n async delete(id: string | string[]): Promise<any> {\n const userId = await this.userService.getUserId();\n const collections = await this.storageService.get<{ [id: string]: CollectionData; }>(\n Keys.collectionsPrefix + userId);\n if (collections == null) {\n return;\n }\n\n if (typeof id === 'string') {\n const i = id as string;\n delete collections[id];\n } else {\n (id as string[]).forEach((i) => {\n delete collections[i];\n });\n }\n\n await this.storageService.save(Keys.collectionsPrefix + userId, collections);\n this.decryptedCollectionCache = null;\n }\n}\n","import { CryptoService } from '../abstractions/crypto.service';\n\nexport class ContainerService {\n constructor(private cryptoService: CryptoService) {\n }\n\n // deprecated, use attachToGlobal instead\n attachToWindow(win: any) {\n this.attachToGlobal(win);\n }\n\n attachToGlobal(global: any) {\n if (!global.bitwardenContainerService) {\n global.bitwardenContainerService = this;\n }\n }\n\n getCryptoService(): CryptoService {\n return this.cryptoService;\n }\n}\n","export enum KdfType {\n PBKDF2_SHA256 = 0,\n}\n","// EFF's Long Wordlist from https://www.eff.org/dice\nexport const EEFLongWordList = [\n 'abacus',\n 'abdomen',\n 'abdominal',\n 'abide',\n 'abiding',\n 'ability',\n 'ablaze',\n 'able',\n 'abnormal',\n 'abrasion',\n 'abrasive',\n 'abreast',\n 'abridge',\n 'abroad',\n 'abruptly',\n 'absence',\n 'absentee',\n 'absently',\n 'absinthe',\n 'absolute',\n 'absolve',\n 'abstain',\n 'abstract',\n 'absurd',\n 'accent',\n 'acclaim',\n 'acclimate',\n 'accompany',\n 'account',\n 'accuracy',\n 'accurate',\n 'accustom',\n 'acetone',\n 'achiness',\n 'aching',\n 'acid',\n 'acorn',\n 'acquaint',\n 'acquire',\n 'acre',\n 'acrobat',\n 'acronym',\n 'acting',\n 'action',\n 'activate',\n 'activator',\n 'active',\n 'activism',\n 'activist',\n 'activity',\n 'actress',\n 'acts',\n 'acutely',\n 'acuteness',\n 'aeration',\n 'aerobics',\n 'aerosol',\n 'aerospace',\n 'afar',\n 'affair',\n 'affected',\n 'affecting',\n 'affection',\n 'affidavit',\n 'affiliate',\n 'affirm',\n 'affix',\n 'afflicted',\n 'affluent',\n 'afford',\n 'affront',\n 'aflame',\n 'afloat',\n 'aflutter',\n 'afoot',\n 'afraid',\n 'afterglow',\n 'afterlife',\n 'aftermath',\n 'aftermost',\n 'afternoon',\n 'aged',\n 'ageless',\n 'agency',\n 'agenda',\n 'agent',\n 'aggregate',\n 'aghast',\n 'agile',\n 'agility',\n 'aging',\n 'agnostic',\n 'agonize',\n 'agonizing',\n 'agony',\n 'agreeable',\n 'agreeably',\n 'agreed',\n 'agreeing',\n 'agreement',\n 'aground',\n 'ahead',\n 'ahoy',\n 'aide',\n 'aids',\n 'aim',\n 'ajar',\n 'alabaster',\n 'alarm',\n 'albatross',\n 'album',\n 'alfalfa',\n 'algebra',\n 'algorithm',\n 'alias',\n 'alibi',\n 'alienable',\n 'alienate',\n 'aliens',\n 'alike',\n 'alive',\n 'alkaline',\n 'alkalize',\n 'almanac',\n 'almighty',\n 'almost',\n 'aloe',\n 'aloft',\n 'aloha',\n 'alone',\n 'alongside',\n 'aloof',\n 'alphabet',\n 'alright',\n 'although',\n 'altitude',\n 'alto',\n 'aluminum',\n 'alumni',\n 'always',\n 'amaretto',\n 'amaze',\n 'amazingly',\n 'amber',\n 'ambiance',\n 'ambiguity',\n 'ambiguous',\n 'ambition',\n 'ambitious',\n 'ambulance',\n 'ambush',\n 'amendable',\n 'amendment',\n 'amends',\n 'amenity',\n 'amiable',\n 'amicably',\n 'amid',\n 'amigo',\n 'amino',\n 'amiss',\n 'ammonia',\n 'ammonium',\n 'amnesty',\n 'amniotic',\n 'among',\n 'amount',\n 'amperage',\n 'ample',\n 'amplifier',\n 'amplify',\n 'amply',\n 'amuck',\n 'amulet',\n 'amusable',\n 'amused',\n 'amusement',\n 'amuser',\n 'amusing',\n 'anaconda',\n 'anaerobic',\n 'anagram',\n 'anatomist',\n 'anatomy',\n 'anchor',\n 'anchovy',\n 'ancient',\n 'android',\n 'anemia',\n 'anemic',\n 'aneurism',\n 'anew',\n 'angelfish',\n 'angelic',\n 'anger',\n 'angled',\n 'angler',\n 'angles',\n 'angling',\n 'angrily',\n 'angriness',\n 'anguished',\n 'angular',\n 'animal',\n 'animate',\n 'animating',\n 'animation',\n 'animator',\n 'anime',\n 'animosity',\n 'ankle',\n 'annex',\n 'annotate',\n 'announcer',\n 'annoying',\n 'annually',\n 'annuity',\n 'anointer',\n 'another',\n 'answering',\n 'antacid',\n 'antarctic',\n 'anteater',\n 'antelope',\n 'antennae',\n 'anthem',\n 'anthill',\n 'anthology',\n 'antibody',\n 'antics',\n 'antidote',\n 'antihero',\n 'antiquely',\n 'antiques',\n 'antiquity',\n 'antirust',\n 'antitoxic',\n 'antitrust',\n 'antiviral',\n 'antivirus',\n 'antler',\n 'antonym',\n 'antsy',\n 'anvil',\n 'anybody',\n 'anyhow',\n 'anymore',\n 'anyone',\n 'anyplace',\n 'anything',\n 'anytime',\n 'anyway',\n 'anywhere',\n 'aorta',\n 'apache',\n 'apostle',\n 'appealing',\n 'appear',\n 'appease',\n 'appeasing',\n 'appendage',\n 'appendix',\n 'appetite',\n 'appetizer',\n 'applaud',\n 'applause',\n 'apple',\n 'appliance',\n 'applicant',\n 'applied',\n 'apply',\n 'appointee',\n 'appraisal',\n 'appraiser',\n 'apprehend',\n 'approach',\n 'approval',\n 'approve',\n 'apricot',\n 'april',\n 'apron',\n 'aptitude',\n 'aptly',\n 'aqua',\n 'aqueduct',\n 'arbitrary',\n 'arbitrate',\n 'ardently',\n 'area',\n 'arena',\n 'arguable',\n 'arguably',\n 'argue',\n 'arise',\n 'armadillo',\n 'armband',\n 'armchair',\n 'armed',\n 'armful',\n 'armhole',\n 'arming',\n 'armless',\n 'armoire',\n 'armored',\n 'armory',\n 'armrest',\n 'army',\n 'aroma',\n 'arose',\n 'around',\n 'arousal',\n 'arrange',\n 'array',\n 'arrest',\n 'arrival',\n 'arrive',\n 'arrogance',\n 'arrogant',\n 'arson',\n 'art',\n 'ascend',\n 'ascension',\n 'ascent',\n 'ascertain',\n 'ashamed',\n 'ashen',\n 'ashes',\n 'ashy',\n 'aside',\n 'askew',\n 'asleep',\n 'asparagus',\n 'aspect',\n 'aspirate',\n 'aspire',\n 'aspirin',\n 'astonish',\n 'astound',\n 'astride',\n 'astrology',\n 'astronaut',\n 'astronomy',\n 'astute',\n 'atlantic',\n 'atlas',\n 'atom',\n 'atonable',\n 'atop',\n 'atrium',\n 'atrocious',\n 'atrophy',\n 'attach',\n 'attain',\n 'attempt',\n 'attendant',\n 'attendee',\n 'attention',\n 'attentive',\n 'attest',\n 'attic',\n 'attire',\n 'attitude',\n 'attractor',\n 'attribute',\n 'atypical',\n 'auction',\n 'audacious',\n 'audacity',\n 'audible',\n 'audibly',\n 'audience',\n 'audio',\n 'audition',\n 'augmented',\n 'august',\n 'authentic',\n 'author',\n 'autism',\n 'autistic',\n 'autograph',\n 'automaker',\n 'automated',\n 'automatic',\n 'autopilot',\n 'available',\n 'avalanche',\n 'avatar',\n 'avenge',\n 'avenging',\n 'avenue',\n 'average',\n 'aversion',\n 'avert',\n 'aviation',\n 'aviator',\n 'avid',\n 'avoid',\n 'await',\n 'awaken',\n 'award',\n 'aware',\n 'awhile',\n 'awkward',\n 'awning',\n 'awoke',\n 'awry',\n 'axis',\n 'babble',\n 'babbling',\n 'babied',\n 'baboon',\n 'backache',\n 'backboard',\n 'backboned',\n 'backdrop',\n 'backed',\n 'backer',\n 'backfield',\n 'backfire',\n 'backhand',\n 'backing',\n 'backlands',\n 'backlash',\n 'backless',\n 'backlight',\n 'backlit',\n 'backlog',\n 'backpack',\n 'backpedal',\n 'backrest',\n 'backroom',\n 'backshift',\n 'backside',\n 'backslid',\n 'backspace',\n 'backspin',\n 'backstab',\n 'backstage',\n 'backtalk',\n 'backtrack',\n 'backup',\n 'backward',\n 'backwash',\n 'backwater',\n 'backyard',\n 'bacon',\n 'bacteria',\n 'bacterium',\n 'badass',\n 'badge',\n 'badland',\n 'badly',\n 'badness',\n 'baffle',\n 'baffling',\n 'bagel',\n 'bagful',\n 'baggage',\n 'bagged',\n 'baggie',\n 'bagginess',\n 'bagging',\n 'baggy',\n 'bagpipe',\n 'baguette',\n 'baked',\n 'bakery',\n 'bakeshop',\n 'baking',\n 'balance',\n 'balancing',\n 'balcony',\n 'balmy',\n 'balsamic',\n 'bamboo',\n 'banana',\n 'banish',\n 'banister',\n 'banjo',\n 'bankable',\n 'bankbook',\n 'banked',\n 'banker',\n 'banking',\n 'banknote',\n 'bankroll',\n 'banner',\n 'bannister',\n 'banshee',\n 'banter',\n 'barbecue',\n 'barbed',\n 'barbell',\n 'barber',\n 'barcode',\n 'barge',\n 'bargraph',\n 'barista',\n 'baritone',\n 'barley',\n 'barmaid',\n 'barman',\n 'barn',\n 'barometer',\n 'barrack',\n 'barracuda',\n 'barrel',\n 'barrette',\n 'barricade',\n 'barrier',\n 'barstool',\n 'bartender',\n 'barterer',\n 'bash',\n 'basically',\n 'basics',\n 'basil',\n 'basin',\n 'basis',\n 'basket',\n 'batboy',\n 'batch',\n 'bath',\n 'baton',\n 'bats',\n 'battalion',\n 'battered',\n 'battering',\n 'battery',\n 'batting',\n 'battle',\n 'bauble',\n 'bazooka',\n 'blabber',\n 'bladder',\n 'blade',\n 'blah',\n 'blame',\n 'blaming',\n 'blanching',\n 'blandness',\n 'blank',\n 'blaspheme',\n 'blasphemy',\n 'blast',\n 'blatancy',\n 'blatantly',\n 'blazer',\n 'blazing',\n 'bleach',\n 'bleak',\n 'bleep',\n 'blemish',\n 'blend',\n 'bless',\n 'blighted',\n 'blimp',\n 'bling',\n 'blinked',\n 'blinker',\n 'blinking',\n 'blinks',\n 'blip',\n 'blissful',\n 'blitz',\n 'blizzard',\n 'bloated',\n 'bloating',\n 'blob',\n 'blog',\n 'bloomers',\n 'blooming',\n 'blooper',\n 'blot',\n 'blouse',\n 'blubber',\n 'bluff',\n 'bluish',\n 'blunderer',\n 'blunt',\n 'blurb',\n 'blurred',\n 'blurry',\n 'blurt',\n 'blush',\n 'blustery',\n 'boaster',\n 'boastful',\n 'boasting',\n 'boat',\n 'bobbed',\n 'bobbing',\n 'bobble',\n 'bobcat',\n 'bobsled',\n 'bobtail',\n 'bodacious',\n 'body',\n 'bogged',\n 'boggle',\n 'bogus',\n 'boil',\n 'bok',\n 'bolster',\n 'bolt',\n 'bonanza',\n 'bonded',\n 'bonding',\n 'bondless',\n 'boned',\n 'bonehead',\n 'boneless',\n 'bonelike',\n 'boney',\n 'bonfire',\n 'bonnet',\n 'bonsai',\n 'bonus',\n 'bony',\n 'boogeyman',\n 'boogieman',\n 'book',\n 'boondocks',\n 'booted',\n 'booth',\n 'bootie',\n 'booting',\n 'bootlace',\n 'bootleg',\n 'boots',\n 'boozy',\n 'borax',\n 'boring',\n 'borough',\n 'borrower',\n 'borrowing',\n 'boss',\n 'botanical',\n 'botanist',\n 'botany',\n 'botch',\n 'both',\n 'bottle',\n 'bottling',\n 'bottom',\n 'bounce',\n 'bouncing',\n 'bouncy',\n 'bounding',\n 'boundless',\n 'bountiful',\n 'bovine',\n 'boxcar',\n 'boxer',\n 'boxing',\n 'boxlike',\n 'boxy',\n 'breach',\n 'breath',\n 'breeches',\n 'breeching',\n 'breeder',\n 'breeding',\n 'breeze',\n 'breezy',\n 'brethren',\n 'brewery',\n 'brewing',\n 'briar',\n 'bribe',\n 'brick',\n 'bride',\n 'bridged',\n 'brigade',\n 'bright',\n 'brilliant',\n 'brim',\n 'bring',\n 'brink',\n 'brisket',\n 'briskly',\n 'briskness',\n 'bristle',\n 'brittle',\n 'broadband',\n 'broadcast',\n 'broaden',\n 'broadly',\n 'broadness',\n 'broadside',\n 'broadways',\n 'broiler',\n 'broiling',\n 'broken',\n 'broker',\n 'bronchial',\n 'bronco',\n 'bronze',\n 'bronzing',\n 'brook',\n 'broom',\n 'brought',\n 'browbeat',\n 'brownnose',\n 'browse',\n 'browsing',\n 'bruising',\n 'brunch',\n 'brunette',\n 'brunt',\n 'brush',\n 'brussels',\n 'brute',\n 'brutishly',\n 'bubble',\n 'bubbling',\n 'bubbly',\n 'buccaneer',\n 'bucked',\n 'bucket',\n 'buckle',\n 'buckshot',\n 'buckskin',\n 'bucktooth',\n 'buckwheat',\n 'buddhism',\n 'buddhist',\n 'budding',\n 'buddy',\n 'budget',\n 'buffalo',\n 'buffed',\n 'buffer',\n 'buffing',\n 'buffoon',\n 'buggy',\n 'bulb',\n 'bulge',\n 'bulginess',\n 'bulgur',\n 'bulk',\n 'bulldog',\n 'bulldozer',\n 'bullfight',\n 'bullfrog',\n 'bullhorn',\n 'bullion',\n 'bullish',\n 'bullpen',\n 'bullring',\n 'bullseye',\n 'bullwhip',\n 'bully',\n 'bunch',\n 'bundle',\n 'bungee',\n 'bunion',\n 'bunkbed',\n 'bunkhouse',\n 'bunkmate',\n 'bunny',\n 'bunt',\n 'busboy',\n 'bush',\n 'busily',\n 'busload',\n 'bust',\n 'busybody',\n 'buzz',\n 'cabana',\n 'cabbage',\n 'cabbie',\n 'cabdriver',\n 'cable',\n 'caboose',\n 'cache',\n 'cackle',\n 'cacti',\n 'cactus',\n 'caddie',\n 'caddy',\n 'cadet',\n 'cadillac',\n 'cadmium',\n 'cage',\n 'cahoots',\n 'cake',\n 'calamari',\n 'calamity',\n 'calcium',\n 'calculate',\n 'calculus',\n 'caliber',\n 'calibrate',\n 'calm',\n 'caloric',\n 'calorie',\n 'calzone',\n 'camcorder',\n 'cameo',\n 'camera',\n 'camisole',\n 'camper',\n 'campfire',\n 'camping',\n 'campsite',\n 'campus',\n 'canal',\n 'canary',\n 'cancel',\n 'candied',\n 'candle',\n 'candy',\n 'cane',\n 'canine',\n 'canister',\n 'cannabis',\n 'canned',\n 'canning',\n 'cannon',\n 'cannot',\n 'canola',\n 'canon',\n 'canopener',\n 'canopy',\n 'canteen',\n 'canyon',\n 'capable',\n 'capably',\n 'capacity',\n 'cape',\n 'capillary',\n 'capital',\n 'capitol',\n 'capped',\n 'capricorn',\n 'capsize',\n 'capsule',\n 'caption',\n 'captivate',\n 'captive',\n 'captivity',\n 'capture',\n 'caramel',\n 'carat',\n 'caravan',\n 'carbon',\n 'cardboard',\n 'carded',\n 'cardiac',\n 'cardigan',\n 'cardinal',\n 'cardstock',\n 'carefully',\n 'caregiver',\n 'careless',\n 'caress',\n 'caretaker',\n 'cargo',\n 'caring',\n 'carless',\n 'carload',\n 'carmaker',\n 'carnage',\n 'carnation',\n 'carnival',\n 'carnivore',\n 'carol',\n 'carpenter',\n 'carpentry',\n 'carpool',\n 'carport',\n 'carried',\n 'carrot',\n 'carrousel',\n 'carry',\n 'cartel',\n 'cartload',\n 'carton',\n 'cartoon',\n 'cartridge',\n 'cartwheel',\n 'carve',\n 'carving',\n 'carwash',\n 'cascade',\n 'case',\n 'cash',\n 'casing',\n 'casino',\n 'casket',\n 'cassette',\n 'casually',\n 'casualty',\n 'catacomb',\n 'catalog',\n 'catalyst',\n 'catalyze',\n 'catapult',\n 'cataract',\n 'catatonic',\n 'catcall',\n 'catchable',\n 'catcher',\n 'catching',\n 'catchy',\n 'caterer',\n 'catering',\n 'catfight',\n 'catfish',\n 'cathedral',\n 'cathouse',\n 'catlike',\n 'catnap',\n 'catnip',\n 'catsup',\n 'cattail',\n 'cattishly',\n 'cattle',\n 'catty',\n 'catwalk',\n 'caucasian',\n 'caucus',\n 'causal',\n 'causation',\n 'cause',\n 'causing',\n 'cauterize',\n 'caution',\n 'cautious',\n 'cavalier',\n 'cavalry',\n 'caviar',\n 'cavity',\n 'cedar',\n 'celery',\n 'celestial',\n 'celibacy',\n 'celibate',\n 'celtic',\n 'cement',\n 'census',\n 'ceramics',\n 'ceremony',\n 'certainly',\n 'certainty',\n 'certified',\n 'certify',\n 'cesarean',\n 'cesspool',\n 'chafe',\n 'chaffing',\n 'chain',\n 'chair',\n 'chalice',\n 'challenge',\n 'chamber',\n 'chamomile',\n 'champion',\n 'chance',\n 'change',\n 'channel',\n 'chant',\n 'chaos',\n 'chaperone',\n 'chaplain',\n 'chapped',\n 'chaps',\n 'chapter',\n 'character',\n 'charbroil',\n 'charcoal',\n 'charger',\n 'charging',\n 'chariot',\n 'charity',\n 'charm',\n 'charred',\n 'charter',\n 'charting',\n 'chase',\n 'chasing',\n 'chaste',\n 'chastise',\n 'chastity',\n 'chatroom',\n 'chatter',\n 'chatting',\n 'chatty',\n 'cheating',\n 'cheddar',\n 'cheek',\n 'cheer',\n 'cheese',\n 'cheesy',\n 'chef',\n 'chemicals',\n 'chemist',\n 'chemo',\n 'cherisher',\n 'cherub',\n 'chess',\n 'chest',\n 'chevron',\n 'chevy',\n 'chewable',\n 'chewer',\n 'chewing',\n 'chewy',\n 'chief',\n 'chihuahua',\n 'childcare',\n 'childhood',\n 'childish',\n 'childless',\n 'childlike',\n 'chili',\n 'chill',\n 'chimp',\n 'chip',\n 'chirping',\n 'chirpy',\n 'chitchat',\n 'chivalry',\n 'chive',\n 'chloride',\n 'chlorine',\n 'choice',\n 'chokehold',\n 'choking',\n 'chomp',\n 'chooser',\n 'choosing',\n 'choosy',\n 'chop',\n 'chosen',\n 'chowder',\n 'chowtime',\n 'chrome',\n 'chubby',\n 'chuck',\n 'chug',\n 'chummy',\n 'chump',\n 'chunk',\n 'churn',\n 'chute',\n 'cider',\n 'cilantro',\n 'cinch',\n 'cinema',\n 'cinnamon',\n 'circle',\n 'circling',\n 'circular',\n 'circulate',\n 'circus',\n 'citable',\n 'citadel',\n 'citation',\n 'citizen',\n 'citric',\n 'citrus',\n 'city',\n 'civic',\n 'civil',\n 'clad',\n 'claim',\n 'clambake',\n 'clammy',\n 'clamor',\n 'clamp',\n 'clamshell',\n 'clang',\n 'clanking',\n 'clapped',\n 'clapper',\n 'clapping',\n 'clarify',\n 'clarinet',\n 'clarity',\n 'clash',\n 'clasp',\n 'class',\n 'clatter',\n 'clause',\n 'clavicle',\n 'claw',\n 'clay',\n 'clean',\n 'clear',\n 'cleat',\n 'cleaver',\n 'cleft',\n 'clench',\n 'clergyman',\n 'clerical',\n 'clerk',\n 'clever',\n 'clicker',\n 'client',\n 'climate',\n 'climatic',\n 'cling',\n 'clinic',\n 'clinking',\n 'clip',\n 'clique',\n 'cloak',\n 'clobber',\n 'clock',\n 'clone',\n 'cloning',\n 'closable',\n 'closure',\n 'clothes',\n 'clothing',\n 'cloud',\n 'clover',\n 'clubbed',\n 'clubbing',\n 'clubhouse',\n 'clump',\n 'clumsily',\n 'clumsy',\n 'clunky',\n 'clustered',\n 'clutch',\n 'clutter',\n 'coach',\n 'coagulant',\n 'coastal',\n 'coaster',\n 'coasting',\n 'coastland',\n 'coastline',\n 'coat',\n 'coauthor',\n 'cobalt',\n 'cobbler',\n 'cobweb',\n 'cocoa',\n 'coconut',\n 'cod',\n 'coeditor',\n 'coerce',\n 'coexist',\n 'coffee',\n 'cofounder',\n 'cognition',\n 'cognitive',\n 'cogwheel',\n 'coherence',\n 'coherent',\n 'cohesive',\n 'coil',\n 'coke',\n 'cola',\n 'cold',\n 'coleslaw',\n 'coliseum',\n 'collage',\n 'collapse',\n 'collar',\n 'collected',\n 'collector',\n 'collide',\n 'collie',\n 'collision',\n 'colonial',\n 'colonist',\n 'colonize',\n 'colony',\n 'colossal',\n 'colt',\n 'coma',\n 'come',\n 'comfort',\n 'comfy',\n 'comic',\n 'coming',\n 'comma',\n 'commence',\n 'commend',\n 'comment',\n 'commerce',\n 'commode',\n 'commodity',\n 'commodore',\n 'common',\n 'commotion',\n 'commute',\n 'commuting',\n 'compacted',\n 'compacter',\n 'compactly',\n 'compactor',\n 'companion',\n 'company',\n 'compare',\n 'compel',\n 'compile',\n 'comply',\n 'component',\n 'composed',\n 'composer',\n 'composite',\n 'compost',\n 'composure',\n 'compound',\n 'compress',\n 'comprised',\n 'computer',\n 'computing',\n 'comrade',\n 'concave',\n 'conceal',\n 'conceded',\n 'concept',\n 'concerned',\n 'concert',\n 'conch',\n 'concierge',\n 'concise',\n 'conclude',\n 'concrete',\n 'concur',\n 'condense',\n 'condiment',\n 'condition',\n 'condone',\n 'conducive',\n 'conductor',\n 'conduit',\n 'cone',\n 'confess',\n 'confetti',\n 'confidant',\n 'confident',\n 'confider',\n 'confiding',\n 'configure',\n 'confined',\n 'confining',\n 'confirm',\n 'conflict',\n 'conform',\n 'confound',\n 'confront',\n 'confused',\n 'confusing',\n 'confusion',\n 'congenial',\n 'congested',\n 'congrats',\n 'congress',\n 'conical',\n 'conjoined',\n 'conjure',\n 'conjuror',\n 'connected',\n 'connector',\n 'consensus',\n 'consent',\n 'console',\n 'consoling',\n 'consonant',\n 'constable',\n 'constant',\n 'constrain',\n 'constrict',\n 'construct',\n 'consult',\n 'consumer',\n 'consuming',\n 'contact',\n 'container',\n 'contempt',\n 'contend',\n 'contented',\n 'contently',\n 'contents',\n 'contest',\n 'context',\n 'contort',\n 'contour',\n 'contrite',\n 'control',\n 'contusion',\n 'convene',\n 'convent',\n 'copartner',\n 'cope',\n 'copied',\n 'copier',\n 'copilot',\n 'coping',\n 'copious',\n 'copper',\n 'copy',\n 'coral',\n 'cork',\n 'cornball',\n 'cornbread',\n 'corncob',\n 'cornea',\n 'corned',\n 'corner',\n 'cornfield',\n 'cornflake',\n 'cornhusk',\n 'cornmeal',\n 'cornstalk',\n 'corny',\n 'coronary',\n 'coroner',\n 'corporal',\n 'corporate',\n 'corral',\n 'correct',\n 'corridor',\n 'corrode',\n 'corroding',\n 'corrosive',\n 'corsage',\n 'corset',\n 'cortex',\n 'cosigner',\n 'cosmetics',\n 'cosmic',\n 'cosmos',\n 'cosponsor',\n 'cost',\n 'cottage',\n 'cotton',\n 'couch',\n 'cough',\n 'could',\n 'countable',\n 'countdown',\n 'counting',\n 'countless',\n 'country',\n 'county',\n 'courier',\n 'covenant',\n 'cover',\n 'coveted',\n 'coveting',\n 'coyness',\n 'cozily',\n 'coziness',\n 'cozy',\n 'crabbing',\n 'crabgrass',\n 'crablike',\n 'crabmeat',\n 'cradle',\n 'cradling',\n 'crafter',\n 'craftily',\n 'craftsman',\n 'craftwork',\n 'crafty',\n 'cramp',\n 'cranberry',\n 'crane',\n 'cranial',\n 'cranium',\n 'crank',\n 'crate',\n 'crave',\n 'craving',\n 'crawfish',\n 'crawlers',\n 'crawling',\n 'crayfish',\n 'crayon',\n 'crazed',\n 'crazily',\n 'craziness',\n 'crazy',\n 'creamed',\n 'creamer',\n 'creamlike',\n 'crease',\n 'creasing',\n 'creatable',\n 'create',\n 'creation',\n 'creative',\n 'creature',\n 'credible',\n 'credibly',\n 'credit',\n 'creed',\n 'creme',\n 'creole',\n 'crepe',\n 'crept',\n 'crescent',\n 'crested',\n 'cresting',\n 'crestless',\n 'crevice',\n 'crewless',\n 'crewman',\n 'crewmate',\n 'crib',\n 'cricket',\n 'cried',\n 'crier',\n 'crimp',\n 'crimson',\n 'cringe',\n 'cringing',\n 'crinkle',\n 'crinkly',\n 'crisped',\n 'crisping',\n 'crisply',\n 'crispness',\n 'crispy',\n 'criteria',\n 'critter',\n 'croak',\n 'crock',\n 'crook',\n 'croon',\n 'crop',\n 'cross',\n 'crouch',\n 'crouton',\n 'crowbar',\n 'crowd',\n 'crown',\n 'crucial',\n 'crudely',\n 'crudeness',\n 'cruelly',\n 'cruelness',\n 'cruelty',\n 'crumb',\n 'crummiest',\n 'crummy',\n 'crumpet',\n 'crumpled',\n 'cruncher',\n 'crunching',\n 'crunchy',\n 'crusader',\n 'crushable',\n 'crushed',\n 'crusher',\n 'crushing',\n 'crust',\n 'crux',\n 'crying',\n 'cryptic',\n 'crystal',\n 'cubbyhole',\n 'cube',\n 'cubical',\n 'cubicle',\n 'cucumber',\n 'cuddle',\n 'cuddly',\n 'cufflink',\n 'culinary',\n 'culminate',\n 'culpable',\n 'culprit',\n 'cultivate',\n 'cultural',\n 'culture',\n 'cupbearer',\n 'cupcake',\n 'cupid',\n 'cupped',\n 'cupping',\n 'curable',\n 'curator',\n 'curdle',\n 'cure',\n 'curfew',\n 'curing',\n 'curled',\n 'curler',\n 'curliness',\n 'curling',\n 'curly',\n 'curry',\n 'curse',\n 'cursive',\n 'cursor',\n 'curtain',\n 'curtly',\n 'curtsy',\n 'curvature',\n 'curve',\n 'curvy',\n 'cushy',\n 'cusp',\n 'cussed',\n 'custard',\n 'custodian',\n 'custody',\n 'customary',\n 'customer',\n 'customize',\n 'customs',\n 'cut',\n 'cycle',\n 'cyclic',\n 'cycling',\n 'cyclist',\n 'cylinder',\n 'cymbal',\n 'cytoplasm',\n 'cytoplast',\n 'dab',\n 'dad',\n 'daffodil',\n 'dagger',\n 'daily',\n 'daintily',\n 'dainty',\n 'dairy',\n 'daisy',\n 'dallying',\n 'dance',\n 'dancing',\n 'dandelion',\n 'dander',\n 'dandruff',\n 'dandy',\n 'danger',\n 'dangle',\n 'dangling',\n 'daredevil',\n 'dares',\n 'daringly',\n 'darkened',\n 'darkening',\n 'darkish',\n 'darkness',\n 'darkroom',\n 'darling',\n 'darn',\n 'dart',\n 'darwinism',\n 'dash',\n 'dastardly',\n 'data',\n 'datebook',\n 'dating',\n 'daughter',\n 'daunting',\n 'dawdler',\n 'dawn',\n 'daybed',\n 'daybreak',\n 'daycare',\n 'daydream',\n 'daylight',\n 'daylong',\n 'dayroom',\n 'daytime',\n 'dazzler',\n 'dazzling',\n 'deacon',\n 'deafening',\n 'deafness',\n 'dealer',\n 'dealing',\n 'dealmaker',\n 'dealt',\n 'dean',\n 'debatable',\n 'debate',\n 'debating',\n 'debit',\n 'debrief',\n 'debtless',\n 'debtor',\n 'debug',\n 'debunk',\n 'decade',\n 'decaf',\n 'decal',\n 'decathlon',\n 'decay',\n 'deceased',\n 'deceit',\n 'deceiver',\n 'deceiving',\n 'december',\n 'decency',\n 'decent',\n 'deception',\n 'deceptive',\n 'decibel',\n 'decidable',\n 'decimal',\n 'decimeter',\n 'decipher',\n 'deck',\n 'declared',\n 'decline',\n 'decode',\n 'decompose',\n 'decorated',\n 'decorator',\n 'decoy',\n 'decrease',\n 'decree',\n 'dedicate',\n 'dedicator',\n 'deduce',\n 'deduct',\n 'deed',\n 'deem',\n 'deepen',\n 'deeply',\n 'deepness',\n 'deface',\n 'defacing',\n 'defame',\n 'default',\n 'defeat',\n 'defection',\n 'defective',\n 'defendant',\n 'defender',\n 'defense',\n 'defensive',\n 'deferral',\n 'deferred',\n 'defiance',\n 'defiant',\n 'defile',\n 'defiling',\n 'define',\n 'definite',\n 'deflate',\n 'deflation',\n 'deflator',\n 'deflected',\n 'deflector',\n 'defog',\n 'deforest',\n 'defraud',\n 'defrost',\n 'deftly',\n 'defuse',\n 'defy',\n 'degraded',\n 'degrading',\n 'degrease',\n 'degree',\n 'dehydrate',\n 'deity',\n 'dejected',\n 'delay',\n 'delegate',\n 'delegator',\n 'delete',\n 'deletion',\n 'delicacy',\n 'delicate',\n 'delicious',\n 'delighted',\n 'delirious',\n 'delirium',\n 'deliverer',\n 'delivery',\n 'delouse',\n 'delta',\n 'deluge',\n 'delusion',\n 'deluxe',\n 'demanding',\n 'demeaning',\n 'demeanor',\n 'demise',\n 'democracy',\n 'democrat',\n 'demote',\n 'demotion',\n 'demystify',\n 'denatured',\n 'deniable',\n 'denial',\n 'denim',\n 'denote',\n 'dense',\n 'density',\n 'dental',\n 'dentist',\n 'denture',\n 'deny',\n 'deodorant',\n 'deodorize',\n 'departed',\n 'departure',\n 'depict',\n 'deplete',\n 'depletion',\n 'deplored',\n 'deploy',\n 'deport',\n 'depose',\n 'depraved',\n 'depravity',\n 'deprecate',\n 'depress',\n 'deprive',\n 'depth',\n 'deputize',\n 'deputy',\n 'derail',\n 'deranged',\n 'derby',\n 'derived',\n 'desecrate',\n 'deserve',\n 'deserving',\n 'designate',\n 'designed',\n 'designer',\n 'designing',\n 'deskbound',\n 'desktop',\n 'deskwork',\n 'desolate',\n 'despair',\n 'despise',\n 'despite',\n 'destiny',\n 'destitute',\n 'destruct',\n 'detached',\n 'detail',\n 'detection',\n 'detective',\n 'detector',\n 'detention',\n 'detergent',\n 'detest',\n 'detonate',\n 'detonator',\n 'detoxify',\n 'detract',\n 'deuce',\n 'devalue',\n 'deviancy',\n 'deviant',\n 'deviate',\n 'deviation',\n 'deviator',\n 'device',\n 'devious',\n 'devotedly',\n 'devotee',\n 'devotion',\n 'devourer',\n 'devouring',\n 'devoutly',\n 'dexterity',\n 'dexterous',\n 'diabetes',\n 'diabetic',\n 'diabolic',\n 'diagnoses',\n 'diagnosis',\n 'diagram',\n 'dial',\n 'diameter',\n 'diaper',\n 'diaphragm',\n 'diary',\n 'dice',\n 'dicing',\n 'dictate',\n 'dictation',\n 'dictator',\n 'difficult',\n 'diffused',\n 'diffuser',\n 'diffusion',\n 'diffusive',\n 'dig',\n 'dilation',\n 'diligence',\n 'diligent',\n 'dill',\n 'dilute',\n 'dime',\n 'diminish',\n 'dimly',\n 'dimmed',\n 'dimmer',\n 'dimness',\n 'dimple',\n 'diner',\n 'dingbat',\n 'dinghy',\n 'dinginess',\n 'dingo',\n 'dingy',\n 'dining',\n 'dinner',\n 'diocese',\n 'dioxide',\n 'diploma',\n 'dipped',\n 'dipper',\n 'dipping',\n 'directed',\n 'direction',\n 'directive',\n 'directly',\n 'directory',\n 'direness',\n 'dirtiness',\n 'disabled',\n 'disagree',\n 'disallow',\n 'disarm',\n 'disarray',\n 'disaster',\n 'disband',\n 'disbelief',\n 'disburse',\n 'discard',\n 'discern',\n 'discharge',\n 'disclose',\n 'discolor',\n 'discount',\n 'discourse',\n 'discover',\n 'discuss',\n 'disdain',\n 'disengage',\n 'disfigure',\n 'disgrace',\n 'dish',\n 'disinfect',\n 'disjoin',\n 'disk',\n 'dislike',\n 'disliking',\n 'dislocate',\n 'dislodge',\n 'disloyal',\n 'dismantle',\n 'dismay',\n 'dismiss',\n 'dismount',\n 'disobey',\n 'disorder',\n 'disown',\n 'disparate',\n 'disparity',\n 'dispatch',\n 'dispense',\n 'dispersal',\n 'dispersed',\n 'disperser',\n 'displace',\n 'display',\n 'displease',\n 'disposal',\n 'dispose',\n 'disprove',\n 'dispute',\n 'disregard',\n 'disrupt',\n 'dissuade',\n 'distance',\n 'distant',\n 'distaste',\n 'distill',\n 'distinct',\n 'distort',\n 'distract',\n 'distress',\n 'district',\n 'distrust',\n 'ditch',\n 'ditto',\n 'ditzy',\n 'dividable',\n 'divided',\n 'dividend',\n 'dividers',\n 'dividing',\n 'divinely',\n 'diving',\n 'divinity',\n 'divisible',\n 'divisibly',\n 'division',\n 'divisive',\n 'divorcee',\n 'dizziness',\n 'dizzy',\n 'doable',\n 'docile',\n 'dock',\n 'doctrine',\n 'document',\n 'dodge',\n 'dodgy',\n 'doily',\n 'doing',\n 'dole',\n 'dollar',\n 'dollhouse',\n 'dollop',\n 'dolly',\n 'dolphin',\n 'domain',\n 'domelike',\n 'domestic',\n 'dominion',\n 'dominoes',\n 'donated',\n 'donation',\n 'donator',\n 'donor',\n 'donut',\n 'doodle',\n 'doorbell',\n 'doorframe',\n 'doorknob',\n 'doorman',\n 'doormat',\n 'doornail',\n 'doorpost',\n 'doorstep',\n 'doorstop',\n 'doorway',\n 'doozy',\n 'dork',\n 'dormitory',\n 'dorsal',\n 'dosage',\n 'dose',\n 'dotted',\n 'doubling',\n 'douche',\n 'dove',\n 'down',\n 'dowry',\n 'doze',\n 'drab',\n 'dragging',\n 'dragonfly',\n 'dragonish',\n 'dragster',\n 'drainable',\n 'drainage',\n 'drained',\n 'drainer',\n 'drainpipe',\n 'dramatic',\n 'dramatize',\n 'drank',\n 'drapery',\n 'drastic',\n 'draw',\n 'dreaded',\n 'dreadful',\n 'dreadlock',\n 'dreamboat',\n 'dreamily',\n 'dreamland',\n 'dreamless',\n 'dreamlike',\n 'dreamt',\n 'dreamy',\n 'drearily',\n 'dreary',\n 'drench',\n 'dress',\n 'drew',\n 'dribble',\n 'dried',\n 'drier',\n 'drift',\n 'driller',\n 'drilling',\n 'drinkable',\n 'drinking',\n 'dripping',\n 'drippy',\n 'drivable',\n 'driven',\n 'driver',\n 'driveway',\n 'driving',\n 'drizzle',\n 'drizzly',\n 'drone',\n 'drool',\n 'droop',\n 'drop-down',\n 'dropbox',\n 'dropkick',\n 'droplet',\n 'dropout',\n 'dropper',\n 'drove',\n 'drown',\n 'drowsily',\n 'drudge',\n 'drum',\n 'dry',\n 'dubbed',\n 'dubiously',\n 'duchess',\n 'duckbill',\n 'ducking',\n 'duckling',\n 'ducktail',\n 'ducky',\n 'duct',\n 'dude',\n 'duffel',\n 'dugout',\n 'duh',\n 'duke',\n 'duller',\n 'dullness',\n 'duly',\n 'dumping',\n 'dumpling',\n 'dumpster',\n 'duo',\n 'dupe',\n 'duplex',\n 'duplicate',\n 'duplicity',\n 'durable',\n 'durably',\n 'duration',\n 'duress',\n 'during',\n 'dusk',\n 'dust',\n 'dutiful',\n 'duty',\n 'duvet',\n 'dwarf',\n 'dweeb',\n 'dwelled',\n 'dweller',\n 'dwelling',\n 'dwindle',\n 'dwindling',\n 'dynamic',\n 'dynamite',\n 'dynasty',\n 'dyslexia',\n 'dyslexic',\n 'each',\n 'eagle',\n 'earache',\n 'eardrum',\n 'earflap',\n 'earful',\n 'earlobe',\n 'early',\n 'earmark',\n 'earmuff',\n 'earphone',\n 'earpiece',\n 'earplugs',\n 'earring',\n 'earshot',\n 'earthen',\n 'earthlike',\n 'earthling',\n 'earthly',\n 'earthworm',\n 'earthy',\n 'earwig',\n 'easeful',\n 'easel',\n 'easiest',\n 'easily',\n 'easiness',\n 'easing',\n 'eastbound',\n 'eastcoast',\n 'easter',\n 'eastward',\n 'eatable',\n 'eaten',\n 'eatery',\n 'eating',\n 'eats',\n 'ebay',\n 'ebony',\n 'ebook',\n 'ecard',\n 'eccentric',\n 'echo',\n 'eclair',\n 'eclipse',\n 'ecologist',\n 'ecology',\n 'economic',\n 'economist',\n 'economy',\n 'ecosphere',\n 'ecosystem',\n 'edge',\n 'edginess',\n 'edging',\n 'edgy',\n 'edition',\n 'editor',\n 'educated',\n 'education',\n 'educator',\n 'eel',\n 'effective',\n 'effects',\n 'efficient',\n 'effort',\n 'eggbeater',\n 'egging',\n 'eggnog',\n 'eggplant',\n 'eggshell',\n 'egomaniac',\n 'egotism',\n 'egotistic',\n 'either',\n 'eject',\n 'elaborate',\n 'elastic',\n 'elated',\n 'elbow',\n 'eldercare',\n 'elderly',\n 'eldest',\n 'electable',\n 'election',\n 'elective',\n 'elephant',\n 'elevate',\n 'elevating',\n 'elevation',\n 'elevator',\n 'eleven',\n 'elf',\n 'eligible',\n 'eligibly',\n 'eliminate',\n 'elite',\n 'elitism',\n 'elixir',\n 'elk',\n 'ellipse',\n 'elliptic',\n 'elm',\n 'elongated',\n 'elope',\n 'eloquence',\n 'eloquent',\n 'elsewhere',\n 'elude',\n 'elusive',\n 'elves',\n 'email',\n 'embargo',\n 'embark',\n 'embassy',\n 'embattled',\n 'embellish',\n 'ember',\n 'embezzle',\n 'emblaze',\n 'emblem',\n 'embody',\n 'embolism',\n 'emboss',\n 'embroider',\n 'emcee',\n 'emerald',\n 'emergency',\n 'emission',\n 'emit',\n 'emote',\n 'emoticon',\n 'emotion',\n 'empathic',\n 'empathy',\n 'emperor',\n 'emphases',\n 'emphasis',\n 'emphasize',\n 'emphatic',\n 'empirical',\n 'employed',\n 'employee',\n 'employer',\n 'emporium',\n 'empower',\n 'emptier',\n 'emptiness',\n 'empty',\n 'emu',\n 'enable',\n 'enactment',\n 'enamel',\n 'enchanted',\n 'enchilada',\n 'encircle',\n 'enclose',\n 'enclosure',\n 'encode',\n 'encore',\n 'encounter',\n 'encourage',\n 'encroach',\n 'encrust',\n 'encrypt',\n 'endanger',\n 'endeared',\n 'endearing',\n 'ended',\n 'ending',\n 'endless',\n 'endnote',\n 'endocrine',\n 'endorphin',\n 'endorse',\n 'endowment',\n 'endpoint',\n 'endurable',\n 'endurance',\n 'enduring',\n 'energetic',\n 'energize',\n 'energy',\n 'enforced',\n 'enforcer',\n 'engaged',\n 'engaging',\n 'engine',\n 'engorge',\n 'engraved',\n 'engraver',\n 'engraving',\n 'engross',\n 'engulf',\n 'enhance',\n 'enigmatic',\n 'enjoyable',\n 'enjoyably',\n 'enjoyer',\n 'enjoying',\n 'enjoyment',\n 'enlarged',\n 'enlarging',\n 'enlighten',\n 'enlisted',\n 'enquirer',\n 'enrage',\n 'enrich',\n 'enroll',\n 'enslave',\n 'ensnare',\n 'ensure',\n 'entail',\n 'entangled',\n 'entering',\n 'entertain',\n 'enticing',\n 'entire',\n 'entitle',\n 'entity',\n 'entomb',\n 'entourage',\n 'entrap',\n 'entree',\n 'entrench',\n 'entrust',\n 'entryway',\n 'entwine',\n 'enunciate',\n 'envelope',\n 'enviable',\n 'enviably',\n 'envious',\n 'envision',\n 'envoy',\n 'envy',\n 'enzyme',\n 'epic',\n 'epidemic',\n 'epidermal',\n 'epidermis',\n 'epidural',\n 'epilepsy',\n 'epileptic',\n 'epilogue',\n 'epiphany',\n 'episode',\n 'equal',\n 'equate',\n 'equation',\n 'equator',\n 'equinox',\n 'equipment',\n 'equity',\n 'equivocal',\n 'eradicate',\n 'erasable',\n 'erased',\n 'eraser',\n 'erasure',\n 'ergonomic',\n 'errand',\n 'errant',\n 'erratic',\n 'error',\n 'erupt',\n 'escalate',\n 'escalator',\n 'escapable',\n 'escapade',\n 'escapist',\n 'escargot',\n 'eskimo',\n 'esophagus',\n 'espionage',\n 'espresso',\n 'esquire',\n 'essay',\n 'essence',\n 'essential',\n 'establish',\n 'estate',\n 'esteemed',\n 'estimate',\n 'estimator',\n 'estranged',\n 'estrogen',\n 'etching',\n 'eternal',\n 'eternity',\n 'ethanol',\n 'ether',\n 'ethically',\n 'ethics',\n 'euphemism',\n 'evacuate',\n 'evacuee',\n 'evade',\n 'evaluate',\n 'evaluator',\n 'evaporate',\n 'evasion',\n 'evasive',\n 'even',\n 'everglade',\n 'evergreen',\n 'everybody',\n 'everyday',\n 'everyone',\n 'evict',\n 'evidence',\n 'evident',\n 'evil',\n 'evoke',\n 'evolution',\n 'evolve',\n 'exact',\n 'exalted',\n 'example',\n 'excavate',\n 'excavator',\n 'exceeding',\n 'exception',\n 'excess',\n 'exchange',\n 'excitable',\n 'exciting',\n 'exclaim',\n 'exclude',\n 'excluding',\n 'exclusion',\n 'exclusive',\n 'excretion',\n 'excretory',\n 'excursion',\n 'excusable',\n 'excusably',\n 'excuse',\n 'exemplary',\n 'exemplify',\n 'exemption',\n 'exerciser',\n 'exert',\n 'exes',\n 'exfoliate',\n 'exhale',\n 'exhaust',\n 'exhume',\n 'exile',\n 'existing',\n 'exit',\n 'exodus',\n 'exonerate',\n 'exorcism',\n 'exorcist',\n 'expand',\n 'expanse',\n 'expansion',\n 'expansive',\n 'expectant',\n 'expedited',\n 'expediter',\n 'expel',\n 'expend',\n 'expenses',\n 'expensive',\n 'expert',\n 'expire',\n 'expiring',\n 'explain',\n 'expletive',\n 'explicit',\n 'explode',\n 'exploit',\n 'explore',\n 'exploring',\n 'exponent',\n 'exporter',\n 'exposable',\n 'expose',\n 'exposure',\n 'express',\n 'expulsion',\n 'exquisite',\n 'extended',\n 'extending',\n 'extent',\n 'extenuate',\n 'exterior',\n 'external',\n 'extinct',\n 'extortion',\n 'extradite',\n 'extras',\n 'extrovert',\n 'extrude',\n 'extruding',\n 'exuberant',\n 'fable',\n 'fabric',\n 'fabulous',\n 'facebook',\n 'facecloth',\n 'facedown',\n 'faceless',\n 'facelift',\n 'faceplate',\n 'faceted',\n 'facial',\n 'facility',\n 'facing',\n 'facsimile',\n 'faction',\n 'factoid',\n 'factor',\n 'factsheet',\n 'factual',\n 'faculty',\n 'fade',\n 'fading',\n 'failing',\n 'falcon',\n 'fall',\n 'false',\n 'falsify',\n 'fame',\n 'familiar',\n 'family',\n 'famine',\n 'famished',\n 'fanatic',\n 'fancied',\n 'fanciness',\n 'fancy',\n 'fanfare',\n 'fang',\n 'fanning',\n 'fantasize',\n 'fantastic',\n 'fantasy',\n 'fascism',\n 'fastball',\n 'faster',\n 'fasting',\n 'fastness',\n 'faucet',\n 'favorable',\n 'favorably',\n 'favored',\n 'favoring',\n 'favorite',\n 'fax',\n 'feast',\n 'federal',\n 'fedora',\n 'feeble',\n 'feed',\n 'feel',\n 'feisty',\n 'feline',\n 'felt-tip',\n 'feminine',\n 'feminism',\n 'feminist',\n 'feminize',\n 'femur',\n 'fence',\n 'fencing',\n 'fender',\n 'ferment',\n 'fernlike',\n 'ferocious',\n 'ferocity',\n 'ferret',\n 'ferris',\n 'ferry',\n 'fervor',\n 'fester',\n 'festival',\n 'festive',\n 'festivity',\n 'fetal',\n 'fetch',\n 'fever',\n 'fiber',\n 'fiction',\n 'fiddle',\n 'fiddling',\n 'fidelity',\n 'fidgeting',\n 'fidgety',\n 'fifteen',\n 'fifth',\n 'fiftieth',\n 'fifty',\n 'figment',\n 'figure',\n 'figurine',\n 'filing',\n 'filled',\n 'filler',\n 'filling',\n 'film',\n 'filter',\n 'filth',\n 'filtrate',\n 'finale',\n 'finalist',\n 'finalize',\n 'finally',\n 'finance',\n 'financial',\n 'finch',\n 'fineness',\n 'finer',\n 'finicky',\n 'finished',\n 'finisher',\n 'finishing',\n 'finite',\n 'finless',\n 'finlike',\n 'fiscally',\n 'fit',\n 'five',\n 'flaccid',\n 'flagman',\n 'flagpole',\n 'flagship',\n 'flagstick',\n 'flagstone',\n 'flail',\n 'flakily',\n 'flaky',\n 'flame',\n 'flammable',\n 'flanked',\n 'flanking',\n 'flannels',\n 'flap',\n 'flaring',\n 'flashback',\n 'flashbulb',\n 'flashcard',\n 'flashily',\n 'flashing',\n 'flashy',\n 'flask',\n 'flatbed',\n 'flatfoot',\n 'flatly',\n 'flatness',\n 'flatten',\n 'flattered',\n 'flatterer',\n 'flattery',\n 'flattop',\n 'flatware',\n 'flatworm',\n 'flavored',\n 'flavorful',\n 'flavoring',\n 'flaxseed',\n 'fled',\n 'fleshed',\n 'fleshy',\n 'flick',\n 'flier',\n 'flight',\n 'flinch',\n 'fling',\n 'flint',\n 'flip',\n 'flirt',\n 'float',\n 'flock',\n 'flogging',\n 'flop',\n 'floral',\n 'florist',\n 'floss',\n 'flounder',\n 'flyable',\n 'flyaway',\n 'flyer',\n 'flying',\n 'flyover',\n 'flypaper',\n 'foam',\n 'foe',\n 'fog',\n 'foil',\n 'folic',\n 'folk',\n 'follicle',\n 'follow',\n 'fondling',\n 'fondly',\n 'fondness',\n 'fondue',\n 'font',\n 'food',\n 'fool',\n 'footage',\n 'football',\n 'footbath',\n 'footboard',\n 'footer',\n 'footgear',\n 'foothill',\n 'foothold',\n 'footing',\n 'footless',\n 'footman',\n 'footnote',\n 'footpad',\n 'footpath',\n 'footprint',\n 'footrest',\n 'footsie',\n 'footsore',\n 'footwear',\n 'footwork',\n 'fossil',\n 'foster',\n 'founder',\n 'founding',\n 'fountain',\n 'fox',\n 'foyer',\n 'fraction',\n 'fracture',\n 'fragile',\n 'fragility',\n 'fragment',\n 'fragrance',\n 'fragrant',\n 'frail',\n 'frame',\n 'framing',\n 'frantic',\n 'fraternal',\n 'frayed',\n 'fraying',\n 'frays',\n 'freckled',\n 'freckles',\n 'freebase',\n 'freebee',\n 'freebie',\n 'freedom',\n 'freefall',\n 'freehand',\n 'freeing',\n 'freeload',\n 'freely',\n 'freemason',\n 'freeness',\n 'freestyle',\n 'freeware',\n 'freeway',\n 'freewill',\n 'freezable',\n 'freezing',\n 'freight',\n 'french',\n 'frenzied',\n 'frenzy',\n 'frequency',\n 'frequent',\n 'fresh',\n 'fretful',\n 'fretted',\n 'friction',\n 'friday',\n 'fridge',\n 'fried',\n 'friend',\n 'frighten',\n 'frightful',\n 'frigidity',\n 'frigidly',\n 'frill',\n 'fringe',\n 'frisbee',\n 'frisk',\n 'fritter',\n 'frivolous',\n 'frolic',\n 'from',\n 'front',\n 'frostbite',\n 'frosted',\n 'frostily',\n 'frosting',\n 'frostlike',\n 'frosty',\n 'froth',\n 'frown',\n 'frozen',\n 'fructose',\n 'frugality',\n 'frugally',\n 'fruit',\n 'frustrate',\n 'frying',\n 'gab',\n 'gaffe',\n 'gag',\n 'gainfully',\n 'gaining',\n 'gains',\n 'gala',\n 'gallantly',\n 'galleria',\n 'gallery',\n 'galley',\n 'gallon',\n 'gallows',\n 'gallstone',\n 'galore',\n 'galvanize',\n 'gambling',\n 'game',\n 'gaming',\n 'gamma',\n 'gander',\n 'gangly',\n 'gangrene',\n 'gangway',\n 'gap',\n 'garage',\n 'garbage',\n 'garden',\n 'gargle',\n 'garland',\n 'garlic',\n 'garment',\n 'garnet',\n 'garnish',\n 'garter',\n 'gas',\n 'gatherer',\n 'gathering',\n 'gating',\n 'gauging',\n 'gauntlet',\n 'gauze',\n 'gave',\n 'gawk',\n 'gazing',\n 'gear',\n 'gecko',\n 'geek',\n 'geiger',\n 'gem',\n 'gender',\n 'generic',\n 'generous',\n 'genetics',\n 'genre',\n 'gentile',\n 'gentleman',\n 'gently',\n 'gents',\n 'geography',\n 'geologic',\n 'geologist',\n 'geology',\n 'geometric',\n 'geometry',\n 'geranium',\n 'gerbil',\n 'geriatric',\n 'germicide',\n 'germinate',\n 'germless',\n 'germproof',\n 'gestate',\n 'gestation',\n 'gesture',\n 'getaway',\n 'getting',\n 'getup',\n 'giant',\n 'gibberish',\n 'giblet',\n 'giddily',\n 'giddiness',\n 'giddy',\n 'gift',\n 'gigabyte',\n 'gigahertz',\n 'gigantic',\n 'giggle',\n 'giggling',\n 'giggly',\n 'gigolo',\n 'gilled',\n 'gills',\n 'gimmick',\n 'girdle',\n 'giveaway',\n 'given',\n 'giver',\n 'giving',\n 'gizmo',\n 'gizzard',\n 'glacial',\n 'glacier',\n 'glade',\n 'gladiator',\n 'gladly',\n 'glamorous',\n 'glamour',\n 'glance',\n 'glancing',\n 'glandular',\n 'glare',\n 'glaring',\n 'glass',\n 'glaucoma',\n 'glazing',\n 'gleaming',\n 'gleeful',\n 'glider',\n 'gliding',\n 'glimmer',\n 'glimpse',\n 'glisten',\n 'glitch',\n 'glitter',\n 'glitzy',\n 'gloater',\n 'gloating',\n 'gloomily',\n 'gloomy',\n 'glorified',\n 'glorifier',\n 'glorify',\n 'glorious',\n 'glory',\n 'gloss',\n 'glove',\n 'glowing',\n 'glowworm',\n 'glucose',\n 'glue',\n 'gluten',\n 'glutinous',\n 'glutton',\n 'gnarly',\n 'gnat',\n 'goal',\n 'goatskin',\n 'goes',\n 'goggles',\n 'going',\n 'goldfish',\n 'goldmine',\n 'goldsmith',\n 'golf',\n 'goliath',\n 'gonad',\n 'gondola',\n 'gone',\n 'gong',\n 'good',\n 'gooey',\n 'goofball',\n 'goofiness',\n 'goofy',\n 'google',\n 'goon',\n 'gopher',\n 'gore',\n 'gorged',\n 'gorgeous',\n 'gory',\n 'gosling',\n 'gossip',\n 'gothic',\n 'gotten',\n 'gout',\n 'gown',\n 'grab',\n 'graceful',\n 'graceless',\n 'gracious',\n 'gradation',\n 'graded',\n 'grader',\n 'gradient',\n 'grading',\n 'gradually',\n 'graduate',\n 'graffiti',\n 'grafted',\n 'grafting',\n 'grain',\n 'granddad',\n 'grandkid',\n 'grandly',\n 'grandma',\n 'grandpa',\n 'grandson',\n 'granite',\n 'granny',\n 'granola',\n 'grant',\n 'granular',\n 'grape',\n 'graph',\n 'grapple',\n 'grappling',\n 'grasp',\n 'grass',\n 'gratified',\n 'gratify',\n 'grating',\n 'gratitude',\n 'gratuity',\n 'gravel',\n 'graveness',\n 'graves',\n 'graveyard',\n 'gravitate',\n 'gravity',\n 'gravy',\n 'gray',\n 'grazing',\n 'greasily',\n 'greedily',\n 'greedless',\n 'greedy',\n 'green',\n 'greeter',\n 'greeting',\n 'grew',\n 'greyhound',\n 'grid',\n 'grief',\n 'grievance',\n 'grieving',\n 'grievous',\n 'grill',\n 'grimace',\n 'grimacing',\n 'grime',\n 'griminess',\n 'grimy',\n 'grinch',\n 'grinning',\n 'grip',\n 'gristle',\n 'grit',\n 'groggily',\n 'groggy',\n 'groin',\n 'groom',\n 'groove',\n 'grooving',\n 'groovy',\n 'grope',\n 'ground',\n 'grouped',\n 'grout',\n 'grove',\n 'grower',\n 'growing',\n 'growl',\n 'grub',\n 'grudge',\n 'grudging',\n 'grueling',\n 'gruffly',\n 'grumble',\n 'grumbling',\n 'grumbly',\n 'grumpily',\n 'grunge',\n 'grunt',\n 'guacamole',\n 'guidable',\n 'guidance',\n 'guide',\n 'guiding',\n 'guileless',\n 'guise',\n 'gulf',\n 'gullible',\n 'gully',\n 'gulp',\n 'gumball',\n 'gumdrop',\n 'gumminess',\n 'gumming',\n 'gummy',\n 'gurgle',\n 'gurgling',\n 'guru',\n 'gush',\n 'gusto',\n 'gusty',\n 'gutless',\n 'guts',\n 'gutter',\n 'guy',\n 'guzzler',\n 'gyration',\n 'habitable',\n 'habitant',\n 'habitat',\n 'habitual',\n 'hacked',\n 'hacker',\n 'hacking',\n 'hacksaw',\n 'had',\n 'haggler',\n 'haiku',\n 'half',\n 'halogen',\n 'halt',\n 'halved',\n 'halves',\n 'hamburger',\n 'hamlet',\n 'hammock',\n 'hamper',\n 'hamster',\n 'hamstring',\n 'handbag',\n 'handball',\n 'handbook',\n 'handbrake',\n 'handcart',\n 'handclap',\n 'handclasp',\n 'handcraft',\n 'handcuff',\n 'handed',\n 'handful',\n 'handgrip',\n 'handgun',\n 'handheld',\n 'handiness',\n 'handiwork',\n 'handlebar',\n 'handled',\n 'handler',\n 'handling',\n 'handmade',\n 'handoff',\n 'handpick',\n 'handprint',\n 'handrail',\n 'handsaw',\n 'handset',\n 'handsfree',\n 'handshake',\n 'handstand',\n 'handwash',\n 'handwork',\n 'handwoven',\n 'handwrite',\n 'handyman',\n 'hangnail',\n 'hangout',\n 'hangover',\n 'hangup',\n 'hankering',\n 'hankie',\n 'hanky',\n 'haphazard',\n 'happening',\n 'happier',\n 'happiest',\n 'happily',\n 'happiness',\n 'happy',\n 'harbor',\n 'hardcopy',\n 'hardcore',\n 'hardcover',\n 'harddisk',\n 'hardened',\n 'hardener',\n 'hardening',\n 'hardhat',\n 'hardhead',\n 'hardiness',\n 'hardly',\n 'hardness',\n 'hardship',\n 'hardware',\n 'hardwired',\n 'hardwood',\n 'hardy',\n 'harmful',\n 'harmless',\n 'harmonica',\n 'harmonics',\n 'harmonize',\n 'harmony',\n 'harness',\n 'harpist',\n 'harsh',\n 'harvest',\n 'hash',\n 'hassle',\n 'haste',\n 'hastily',\n 'hastiness',\n 'hasty',\n 'hatbox',\n 'hatchback',\n 'hatchery',\n 'hatchet',\n 'hatching',\n 'hatchling',\n 'hate',\n 'hatless',\n 'hatred',\n 'haunt',\n 'haven',\n 'hazard',\n 'hazelnut',\n 'hazily',\n 'haziness',\n 'hazing',\n 'hazy',\n 'headache',\n 'headband',\n 'headboard',\n 'headcount',\n 'headdress',\n 'headed',\n 'header',\n 'headfirst',\n 'headgear',\n 'heading',\n 'headlamp',\n 'headless',\n 'headlock',\n 'headphone',\n 'headpiece',\n 'headrest',\n 'headroom',\n 'headscarf',\n 'headset',\n 'headsman',\n 'headstand',\n 'headstone',\n 'headway',\n 'headwear',\n 'heap',\n 'heat',\n 'heave',\n 'heavily',\n 'heaviness',\n 'heaving',\n 'hedge',\n 'hedging',\n 'heftiness',\n 'hefty',\n 'helium',\n 'helmet',\n 'helper',\n 'helpful',\n 'helping',\n 'helpless',\n 'helpline',\n 'hemlock',\n 'hemstitch',\n 'hence',\n 'henchman',\n 'henna',\n 'herald',\n 'herbal',\n 'herbicide',\n 'herbs',\n 'heritage',\n 'hermit',\n 'heroics',\n 'heroism',\n 'herring',\n 'herself',\n 'hertz',\n 'hesitancy',\n 'hesitant',\n 'hesitate',\n 'hexagon',\n 'hexagram',\n 'hubcap',\n 'huddle',\n 'huddling',\n 'huff',\n 'hug',\n 'hula',\n 'hulk',\n 'hull',\n 'human',\n 'humble',\n 'humbling',\n 'humbly',\n 'humid',\n 'humiliate',\n 'humility',\n 'humming',\n 'hummus',\n 'humongous',\n 'humorist',\n 'humorless',\n 'humorous',\n 'humpback',\n 'humped',\n 'humvee',\n 'hunchback',\n 'hundredth',\n 'hunger',\n 'hungrily',\n 'hungry',\n 'hunk',\n 'hunter',\n 'hunting',\n 'huntress',\n 'huntsman',\n 'hurdle',\n 'hurled',\n 'hurler',\n 'hurling',\n 'hurray',\n 'hurricane',\n 'hurried',\n 'hurry',\n 'hurt',\n 'husband',\n 'hush',\n 'husked',\n 'huskiness',\n 'hut',\n 'hybrid',\n 'hydrant',\n 'hydrated',\n 'hydration',\n 'hydrogen',\n 'hydroxide',\n 'hyperlink',\n 'hypertext',\n 'hyphen',\n 'hypnoses',\n 'hypnosis',\n 'hypnotic',\n 'hypnotism',\n 'hypnotist',\n 'hypnotize',\n 'hypocrisy',\n 'hypocrite',\n 'ibuprofen',\n 'ice',\n 'iciness',\n 'icing',\n 'icky',\n 'icon',\n 'icy',\n 'idealism',\n 'idealist',\n 'idealize',\n 'ideally',\n 'idealness',\n 'identical',\n 'identify',\n 'identity',\n 'ideology',\n 'idiocy',\n 'idiom',\n 'idly',\n 'igloo',\n 'ignition',\n 'ignore',\n 'iguana',\n 'illicitly',\n 'illusion',\n 'illusive',\n 'image',\n 'imaginary',\n 'imagines',\n 'imaging',\n 'imbecile',\n 'imitate',\n 'imitation',\n 'immature',\n 'immerse',\n 'immersion',\n 'imminent',\n 'immobile',\n 'immodest',\n 'immorally',\n 'immortal',\n 'immovable',\n 'immovably',\n 'immunity',\n 'immunize',\n 'impaired',\n 'impale',\n 'impart',\n 'impatient',\n 'impeach',\n 'impeding',\n 'impending',\n 'imperfect',\n 'imperial',\n 'impish',\n 'implant',\n 'implement',\n 'implicate',\n 'implicit',\n 'implode',\n 'implosion',\n 'implosive',\n 'imply',\n 'impolite',\n 'important',\n 'importer',\n 'impose',\n 'imposing',\n 'impotence',\n 'impotency',\n 'impotent',\n 'impound',\n 'imprecise',\n 'imprint',\n 'imprison',\n 'impromptu',\n 'improper',\n 'improve',\n 'improving',\n 'improvise',\n 'imprudent',\n 'impulse',\n 'impulsive',\n 'impure',\n 'impurity',\n 'iodine',\n 'iodize',\n 'ion',\n 'ipad',\n 'iphone',\n 'ipod',\n 'irate',\n 'irk',\n 'iron',\n 'irregular',\n 'irrigate',\n 'irritable',\n 'irritably',\n 'irritant',\n 'irritate',\n 'islamic',\n 'islamist',\n 'isolated',\n 'isolating',\n 'isolation',\n 'isotope',\n 'issue',\n 'issuing',\n 'italicize',\n 'italics',\n 'item',\n 'itinerary',\n 'itunes',\n 'ivory',\n 'ivy',\n 'jab',\n 'jackal',\n 'jacket',\n 'jackknife',\n 'jackpot',\n 'jailbird',\n 'jailbreak',\n 'jailer',\n 'jailhouse',\n 'jalapeno',\n 'jam',\n 'janitor',\n 'january',\n 'jargon',\n 'jarring',\n 'jasmine',\n 'jaundice',\n 'jaunt',\n 'java',\n 'jawed',\n 'jawless',\n 'jawline',\n 'jaws',\n 'jaybird',\n 'jaywalker',\n 'jazz',\n 'jeep',\n 'jeeringly',\n 'jellied',\n 'jelly',\n 'jersey',\n 'jester',\n 'jet',\n 'jiffy',\n 'jigsaw',\n 'jimmy',\n 'jingle',\n 'jingling',\n 'jinx',\n 'jitters',\n 'jittery',\n 'job',\n 'jockey',\n 'jockstrap',\n 'jogger',\n 'jogging',\n 'john',\n 'joining',\n 'jokester',\n 'jokingly',\n 'jolliness',\n 'jolly',\n 'jolt',\n 'jot',\n 'jovial',\n 'joyfully',\n 'joylessly',\n 'joyous',\n 'joyride',\n 'joystick',\n 'jubilance',\n 'jubilant',\n 'judge',\n 'judgingly',\n 'judicial',\n 'judiciary',\n 'judo',\n 'juggle',\n 'juggling',\n 'jugular',\n 'juice',\n 'juiciness',\n 'juicy',\n 'jujitsu',\n 'jukebox',\n 'july',\n 'jumble',\n 'jumbo',\n 'jump',\n 'junction',\n 'juncture',\n 'june',\n 'junior',\n 'juniper',\n 'junkie',\n 'junkman',\n 'junkyard',\n 'jurist',\n 'juror',\n 'jury',\n 'justice',\n 'justifier',\n 'justify',\n 'justly',\n 'justness',\n 'juvenile',\n 'kabob',\n 'kangaroo',\n 'karaoke',\n 'karate',\n 'karma',\n 'kebab',\n 'keenly',\n 'keenness',\n 'keep',\n 'keg',\n 'kelp',\n 'kennel',\n 'kept',\n 'kerchief',\n 'kerosene',\n 'kettle',\n 'kick',\n 'kiln',\n 'kilobyte',\n 'kilogram',\n 'kilometer',\n 'kilowatt',\n 'kilt',\n 'kimono',\n 'kindle',\n 'kindling',\n 'kindly',\n 'kindness',\n 'kindred',\n 'kinetic',\n 'kinfolk',\n 'king',\n 'kinship',\n 'kinsman',\n 'kinswoman',\n 'kissable',\n 'kisser',\n 'kissing',\n 'kitchen',\n 'kite',\n 'kitten',\n 'kitty',\n 'kiwi',\n 'kleenex',\n 'knapsack',\n 'knee',\n 'knelt',\n 'knickers',\n 'knoll',\n 'koala',\n 'kooky',\n 'kosher',\n 'krypton',\n 'kudos',\n 'kung',\n 'labored',\n 'laborer',\n 'laboring',\n 'laborious',\n 'labrador',\n 'ladder',\n 'ladies',\n 'ladle',\n 'ladybug',\n 'ladylike',\n 'lagged',\n 'lagging',\n 'lagoon',\n 'lair',\n 'lake',\n 'lance',\n 'landed',\n 'landfall',\n 'landfill',\n 'landing',\n 'landlady',\n 'landless',\n 'landline',\n 'landlord',\n 'landmark',\n 'landmass',\n 'landmine',\n 'landowner',\n 'landscape',\n 'landside',\n 'landslide',\n 'language',\n 'lankiness',\n 'lanky',\n 'lantern',\n 'lapdog',\n 'lapel',\n 'lapped',\n 'lapping',\n 'laptop',\n 'lard',\n 'large',\n 'lark',\n 'lash',\n 'lasso',\n 'last',\n 'latch',\n 'late',\n 'lather',\n 'latitude',\n 'latrine',\n 'latter',\n 'latticed',\n 'launch',\n 'launder',\n 'laundry',\n 'laurel',\n 'lavender',\n 'lavish',\n 'laxative',\n 'lazily',\n 'laziness',\n 'lazy',\n 'lecturer',\n 'left',\n 'legacy',\n 'legal',\n 'legend',\n 'legged',\n 'leggings',\n 'legible',\n 'legibly',\n 'legislate',\n 'lego',\n 'legroom',\n 'legume',\n 'legwarmer',\n 'legwork',\n 'lemon',\n 'lend',\n 'length',\n 'lens',\n 'lent',\n 'leotard',\n 'lesser',\n 'letdown',\n 'lethargic',\n 'lethargy',\n 'letter',\n 'lettuce',\n 'level',\n 'leverage',\n 'levers',\n 'levitate',\n 'levitator',\n 'liability',\n 'liable',\n 'liberty',\n 'librarian',\n 'library',\n 'licking',\n 'licorice',\n 'lid',\n 'life',\n 'lifter',\n 'lifting',\n 'liftoff',\n 'ligament',\n 'likely',\n 'likeness',\n 'likewise',\n 'liking',\n 'lilac',\n 'lilly',\n 'lily',\n 'limb',\n 'limeade',\n 'limelight',\n 'limes',\n 'limit',\n 'limping',\n 'limpness',\n 'line',\n 'lingo',\n 'linguini',\n 'linguist',\n 'lining',\n 'linked',\n 'linoleum',\n 'linseed',\n 'lint',\n 'lion',\n 'lip',\n 'liquefy',\n 'liqueur',\n 'liquid',\n 'lisp',\n 'list',\n 'litigate',\n 'litigator',\n 'litmus',\n 'litter',\n 'little',\n 'livable',\n 'lived',\n 'lively',\n 'liver',\n 'livestock',\n 'lividly',\n 'living',\n 'lizard',\n 'lubricant',\n 'lubricate',\n 'lucid',\n 'luckily',\n 'luckiness',\n 'luckless',\n 'lucrative',\n 'ludicrous',\n 'lugged',\n 'lukewarm',\n 'lullaby',\n 'lumber',\n 'luminance',\n 'luminous',\n 'lumpiness',\n 'lumping',\n 'lumpish',\n 'lunacy',\n 'lunar',\n 'lunchbox',\n 'luncheon',\n 'lunchroom',\n 'lunchtime',\n 'lung',\n 'lurch',\n 'lure',\n 'luridness',\n 'lurk',\n 'lushly',\n 'lushness',\n 'luster',\n 'lustfully',\n 'lustily',\n 'lustiness',\n 'lustrous',\n 'lusty',\n 'luxurious',\n 'luxury',\n 'lying',\n 'lyrically',\n 'lyricism',\n 'lyricist',\n 'lyrics',\n 'macarena',\n 'macaroni',\n 'macaw',\n 'mace',\n 'machine',\n 'machinist',\n 'magazine',\n 'magenta',\n 'maggot',\n 'magical',\n 'magician',\n 'magma',\n 'magnesium',\n 'magnetic',\n 'magnetism',\n 'magnetize',\n 'magnifier',\n 'magnify',\n 'magnitude',\n 'magnolia',\n 'mahogany',\n 'maimed',\n 'majestic',\n 'majesty',\n 'majorette',\n 'majority',\n 'makeover',\n 'maker',\n 'makeshift',\n 'making',\n 'malformed',\n 'malt',\n 'mama',\n 'mammal',\n 'mammary',\n 'mammogram',\n 'manager',\n 'managing',\n 'manatee',\n 'mandarin',\n 'mandate',\n 'mandatory',\n 'mandolin',\n 'manger',\n 'mangle',\n 'mango',\n 'mangy',\n 'manhandle',\n 'manhole',\n 'manhood',\n 'manhunt',\n 'manicotti',\n 'manicure',\n 'manifesto',\n 'manila',\n 'mankind',\n 'manlike',\n 'manliness',\n 'manly',\n 'manmade',\n 'manned',\n 'mannish',\n 'manor',\n 'manpower',\n 'mantis',\n 'mantra',\n 'manual',\n 'many',\n 'map',\n 'marathon',\n 'marauding',\n 'marbled',\n 'marbles',\n 'marbling',\n 'march',\n 'mardi',\n 'margarine',\n 'margarita',\n 'margin',\n 'marigold',\n 'marina',\n 'marine',\n 'marital',\n 'maritime',\n 'marlin',\n 'marmalade',\n 'maroon',\n 'married',\n 'marrow',\n 'marry',\n 'marshland',\n 'marshy',\n 'marsupial',\n 'marvelous',\n 'marxism',\n 'mascot',\n 'masculine',\n 'mashed',\n 'mashing',\n 'massager',\n 'masses',\n 'massive',\n 'mastiff',\n 'matador',\n 'matchbook',\n 'matchbox',\n 'matcher',\n 'matching',\n 'matchless',\n 'material',\n 'maternal',\n 'maternity',\n 'math',\n 'mating',\n 'matriarch',\n 'matrimony',\n 'matrix',\n 'matron',\n 'matted',\n 'matter',\n 'maturely',\n 'maturing',\n 'maturity',\n 'mauve',\n 'maverick',\n 'maximize',\n 'maximum',\n 'maybe',\n 'mayday',\n 'mayflower',\n 'moaner',\n 'moaning',\n 'mobile',\n 'mobility',\n 'mobilize',\n 'mobster',\n 'mocha',\n 'mocker',\n 'mockup',\n 'modified',\n 'modify',\n 'modular',\n 'modulator',\n 'module',\n 'moisten',\n 'moistness',\n 'moisture',\n 'molar',\n 'molasses',\n 'mold',\n 'molecular',\n 'molecule',\n 'molehill',\n 'mollusk',\n 'mom',\n 'monastery',\n 'monday',\n 'monetary',\n 'monetize',\n 'moneybags',\n 'moneyless',\n 'moneywise',\n 'mongoose',\n 'mongrel',\n 'monitor',\n 'monkhood',\n 'monogamy',\n 'monogram',\n 'monologue',\n 'monopoly',\n 'monorail',\n 'monotone',\n 'monotype',\n 'monoxide',\n 'monsieur',\n 'monsoon',\n 'monstrous',\n 'monthly',\n 'monument',\n 'moocher',\n 'moodiness',\n 'moody',\n 'mooing',\n 'moonbeam',\n 'mooned',\n 'moonlight',\n 'moonlike',\n 'moonlit',\n 'moonrise',\n 'moonscape',\n 'moonshine',\n 'moonstone',\n 'moonwalk',\n 'mop',\n 'morale',\n 'morality',\n 'morally',\n 'morbidity',\n 'morbidly',\n 'morphine',\n 'morphing',\n 'morse',\n 'mortality',\n 'mortally',\n 'mortician',\n 'mortified',\n 'mortify',\n 'mortuary',\n 'mosaic',\n 'mossy',\n 'most',\n 'mothball',\n 'mothproof',\n 'motion',\n 'motivate',\n 'motivator',\n 'motive',\n 'motocross',\n 'motor',\n 'motto',\n 'mountable',\n 'mountain',\n 'mounted',\n 'mounting',\n 'mourner',\n 'mournful',\n 'mouse',\n 'mousiness',\n 'moustache',\n 'mousy',\n 'mouth',\n 'movable',\n 'move',\n 'movie',\n 'moving',\n 'mower',\n 'mowing',\n 'much',\n 'muck',\n 'mud',\n 'mug',\n 'mulberry',\n 'mulch',\n 'mule',\n 'mulled',\n 'mullets',\n 'multiple',\n 'multiply',\n 'multitask',\n 'multitude',\n 'mumble',\n 'mumbling',\n 'mumbo',\n 'mummified',\n 'mummify',\n 'mummy',\n 'mumps',\n 'munchkin',\n 'mundane',\n 'municipal',\n 'muppet',\n 'mural',\n 'murkiness',\n 'murky',\n 'murmuring',\n 'muscular',\n 'museum',\n 'mushily',\n 'mushiness',\n 'mushroom',\n 'mushy',\n 'music',\n 'musket',\n 'muskiness',\n 'musky',\n 'mustang',\n 'mustard',\n 'muster',\n 'mustiness',\n 'musty',\n 'mutable',\n 'mutate',\n 'mutation',\n 'mute',\n 'mutilated',\n 'mutilator',\n 'mutiny',\n 'mutt',\n 'mutual',\n 'muzzle',\n 'myself',\n 'myspace',\n 'mystified',\n 'mystify',\n 'myth',\n 'nacho',\n 'nag',\n 'nail',\n 'name',\n 'naming',\n 'nanny',\n 'nanometer',\n 'nape',\n 'napkin',\n 'napped',\n 'napping',\n 'nappy',\n 'narrow',\n 'nastily',\n 'nastiness',\n 'national',\n 'native',\n 'nativity',\n 'natural',\n 'nature',\n 'naturist',\n 'nautical',\n 'navigate',\n 'navigator',\n 'navy',\n 'nearby',\n 'nearest',\n 'nearly',\n 'nearness',\n 'neatly',\n 'neatness',\n 'nebula',\n 'nebulizer',\n 'nectar',\n 'negate',\n 'negation',\n 'negative',\n 'neglector',\n 'negligee',\n 'negligent',\n 'negotiate',\n 'nemeses',\n 'nemesis',\n 'neon',\n 'nephew',\n 'nerd',\n 'nervous',\n 'nervy',\n 'nest',\n 'net',\n 'neurology',\n 'neuron',\n 'neurosis',\n 'neurotic',\n 'neuter',\n 'neutron',\n 'never',\n 'next',\n 'nibble',\n 'nickname',\n 'nicotine',\n 'niece',\n 'nifty',\n 'nimble',\n 'nimbly',\n 'nineteen',\n 'ninetieth',\n 'ninja',\n 'nintendo',\n 'ninth',\n 'nuclear',\n 'nuclei',\n 'nucleus',\n 'nugget',\n 'nullify',\n 'number',\n 'numbing',\n 'numbly',\n 'numbness',\n 'numeral',\n 'numerate',\n 'numerator',\n 'numeric',\n 'numerous',\n 'nuptials',\n 'nursery',\n 'nursing',\n 'nurture',\n 'nutcase',\n 'nutlike',\n 'nutmeg',\n 'nutrient',\n 'nutshell',\n 'nuttiness',\n 'nutty',\n 'nuzzle',\n 'nylon',\n 'oaf',\n 'oak',\n 'oasis',\n 'oat',\n 'obedience',\n 'obedient',\n 'obituary',\n 'object',\n 'obligate',\n 'obliged',\n 'oblivion',\n 'oblivious',\n 'oblong',\n 'obnoxious',\n 'oboe',\n 'obscure',\n 'obscurity',\n 'observant',\n 'observer',\n 'observing',\n 'obsessed',\n 'obsession',\n 'obsessive',\n 'obsolete',\n 'obstacle',\n 'obstinate',\n 'obstruct',\n 'obtain',\n 'obtrusive',\n 'obtuse',\n 'obvious',\n 'occultist',\n 'occupancy',\n 'occupant',\n 'occupier',\n 'occupy',\n 'ocean',\n 'ocelot',\n 'octagon',\n 'octane',\n 'october',\n 'octopus',\n 'ogle',\n 'oil',\n 'oink',\n 'ointment',\n 'okay',\n 'old',\n 'olive',\n 'olympics',\n 'omega',\n 'omen',\n 'ominous',\n 'omission',\n 'omit',\n 'omnivore',\n 'onboard',\n 'oncoming',\n 'ongoing',\n 'onion',\n 'online',\n 'onlooker',\n 'only',\n 'onscreen',\n 'onset',\n 'onshore',\n 'onslaught',\n 'onstage',\n 'onto',\n 'onward',\n 'onyx',\n 'oops',\n 'ooze',\n 'oozy',\n 'opacity',\n 'opal',\n 'open',\n 'operable',\n 'operate',\n 'operating',\n 'operation',\n 'operative',\n 'operator',\n 'opium',\n 'opossum',\n 'opponent',\n 'oppose',\n 'opposing',\n 'opposite',\n 'oppressed',\n 'oppressor',\n 'opt',\n 'opulently',\n 'osmosis',\n 'other',\n 'otter',\n 'ouch',\n 'ought',\n 'ounce',\n 'outage',\n 'outback',\n 'outbid',\n 'outboard',\n 'outbound',\n 'outbreak',\n 'outburst',\n 'outcast',\n 'outclass',\n 'outcome',\n 'outdated',\n 'outdoors',\n 'outer',\n 'outfield',\n 'outfit',\n 'outflank',\n 'outgoing',\n 'outgrow',\n 'outhouse',\n 'outing',\n 'outlast',\n 'outlet',\n 'outline',\n 'outlook',\n 'outlying',\n 'outmatch',\n 'outmost',\n 'outnumber',\n 'outplayed',\n 'outpost',\n 'outpour',\n 'output',\n 'outrage',\n 'outrank',\n 'outreach',\n 'outright',\n 'outscore',\n 'outsell',\n 'outshine',\n 'outshoot',\n 'outsider',\n 'outskirts',\n 'outsmart',\n 'outsource',\n 'outspoken',\n 'outtakes',\n 'outthink',\n 'outward',\n 'outweigh',\n 'outwit',\n 'oval',\n 'ovary',\n 'oven',\n 'overact',\n 'overall',\n 'overarch',\n 'overbid',\n 'overbill',\n 'overbite',\n 'overblown',\n 'overboard',\n 'overbook',\n 'overbuilt',\n 'overcast',\n 'overcoat',\n 'overcome',\n 'overcook',\n 'overcrowd',\n 'overdraft',\n 'overdrawn',\n 'overdress',\n 'overdrive',\n 'overdue',\n 'overeager',\n 'overeater',\n 'overexert',\n 'overfed',\n 'overfeed',\n 'overfill',\n 'overflow',\n 'overfull',\n 'overgrown',\n 'overhand',\n 'overhang',\n 'overhaul',\n 'overhead',\n 'overhear',\n 'overheat',\n 'overhung',\n 'overjoyed',\n 'overkill',\n 'overlabor',\n 'overlaid',\n 'overlap',\n 'overlay',\n 'overload',\n 'overlook',\n 'overlord',\n 'overlying',\n 'overnight',\n 'overpass',\n 'overpay',\n 'overplant',\n 'overplay',\n 'overpower',\n 'overprice',\n 'overrate',\n 'overreach',\n 'overreact',\n 'override',\n 'overripe',\n 'overrule',\n 'overrun',\n 'overshoot',\n 'overshot',\n 'oversight',\n 'oversized',\n 'oversleep',\n 'oversold',\n 'overspend',\n 'overstate',\n 'overstay',\n 'overstep',\n 'overstock',\n 'overstuff',\n 'oversweet',\n 'overtake',\n 'overthrow',\n 'overtime',\n 'overtly',\n 'overtone',\n 'overture',\n 'overturn',\n 'overuse',\n 'overvalue',\n 'overview',\n 'overwrite',\n 'owl',\n 'oxford',\n 'oxidant',\n 'oxidation',\n 'oxidize',\n 'oxidizing',\n 'oxygen',\n 'oxymoron',\n 'oyster',\n 'ozone',\n 'paced',\n 'pacemaker',\n 'pacific',\n 'pacifier',\n 'pacifism',\n 'pacifist',\n 'pacify',\n 'padded',\n 'padding',\n 'paddle',\n 'paddling',\n 'padlock',\n 'pagan',\n 'pager',\n 'paging',\n 'pajamas',\n 'palace',\n 'palatable',\n 'palm',\n 'palpable',\n 'palpitate',\n 'paltry',\n 'pampered',\n 'pamperer',\n 'pampers',\n 'pamphlet',\n 'panama',\n 'pancake',\n 'pancreas',\n 'panda',\n 'pandemic',\n 'pang',\n 'panhandle',\n 'panic',\n 'panning',\n 'panorama',\n 'panoramic',\n 'panther',\n 'pantomime',\n 'pantry',\n 'pants',\n 'pantyhose',\n 'paparazzi',\n 'papaya',\n 'paper',\n 'paprika',\n 'papyrus',\n 'parabola',\n 'parachute',\n 'parade',\n 'paradox',\n 'paragraph',\n 'parakeet',\n 'paralegal',\n 'paralyses',\n 'paralysis',\n 'paralyze',\n 'paramedic',\n 'parameter',\n 'paramount',\n 'parasail',\n 'parasite',\n 'parasitic',\n 'parcel',\n 'parched',\n 'parchment',\n 'pardon',\n 'parish',\n 'parka',\n 'parking',\n 'parkway',\n 'parlor',\n 'parmesan',\n 'parole',\n 'parrot',\n 'parsley',\n 'parsnip',\n 'partake',\n 'parted',\n 'parting',\n 'partition',\n 'partly',\n 'partner',\n 'partridge',\n 'party',\n 'passable',\n 'passably',\n 'passage',\n 'passcode',\n 'passenger',\n 'passerby',\n 'passing',\n 'passion',\n 'passive',\n 'passivism',\n 'passover',\n 'passport',\n 'password',\n 'pasta',\n 'pasted',\n 'pastel',\n 'pastime',\n 'pastor',\n 'pastrami',\n 'pasture',\n 'pasty',\n 'patchwork',\n 'patchy',\n 'paternal',\n 'paternity',\n 'path',\n 'patience',\n 'patient',\n 'patio',\n 'patriarch',\n 'patriot',\n 'patrol',\n 'patronage',\n 'patronize',\n 'pauper',\n 'pavement',\n 'paver',\n 'pavestone',\n 'pavilion',\n 'paving',\n 'pawing',\n 'payable',\n 'payback',\n 'paycheck',\n 'payday',\n 'payee',\n 'payer',\n 'paying',\n 'payment',\n 'payphone',\n 'payroll',\n 'pebble',\n 'pebbly',\n 'pecan',\n 'pectin',\n 'peculiar',\n 'peddling',\n 'pediatric',\n 'pedicure',\n 'pedigree',\n 'pedometer',\n 'pegboard',\n 'pelican',\n 'pellet',\n 'pelt',\n 'pelvis',\n 'penalize',\n 'penalty',\n 'pencil',\n 'pendant',\n 'pending',\n 'penholder',\n 'penknife',\n 'pennant',\n 'penniless',\n 'penny',\n 'penpal',\n 'pension',\n 'pentagon',\n 'pentagram',\n 'pep',\n 'perceive',\n 'percent',\n 'perch',\n 'percolate',\n 'perennial',\n 'perfected',\n 'perfectly',\n 'perfume',\n 'periscope',\n 'perish',\n 'perjurer',\n 'perjury',\n 'perkiness',\n 'perky',\n 'perm',\n 'peroxide',\n 'perpetual',\n 'perplexed',\n 'persecute',\n 'persevere',\n 'persuaded',\n 'persuader',\n 'pesky',\n 'peso',\n 'pessimism',\n 'pessimist',\n 'pester',\n 'pesticide',\n 'petal',\n 'petite',\n 'petition',\n 'petri',\n 'petroleum',\n 'petted',\n 'petticoat',\n 'pettiness',\n 'petty',\n 'petunia',\n 'phantom',\n 'phobia',\n 'phoenix',\n 'phonebook',\n 'phoney',\n 'phonics',\n 'phoniness',\n 'phony',\n 'phosphate',\n 'photo',\n 'phrase',\n 'phrasing',\n 'placard',\n 'placate',\n 'placidly',\n 'plank',\n 'planner',\n 'plant',\n 'plasma',\n 'plaster',\n 'plastic',\n 'plated',\n 'platform',\n 'plating',\n 'platinum',\n 'platonic',\n 'platter',\n 'platypus',\n 'plausible',\n 'plausibly',\n 'playable',\n 'playback',\n 'player',\n 'playful',\n 'playgroup',\n 'playhouse',\n 'playing',\n 'playlist',\n 'playmaker',\n 'playmate',\n 'playoff',\n 'playpen',\n 'playroom',\n 'playset',\n 'plaything',\n 'playtime',\n 'plaza',\n 'pleading',\n 'pleat',\n 'pledge',\n 'plentiful',\n 'plenty',\n 'plethora',\n 'plexiglas',\n 'pliable',\n 'plod',\n 'plop',\n 'plot',\n 'plow',\n 'ploy',\n 'pluck',\n 'plug',\n 'plunder',\n 'plunging',\n 'plural',\n 'plus',\n 'plutonium',\n 'plywood',\n 'poach',\n 'pod',\n 'poem',\n 'poet',\n 'pogo',\n 'pointed',\n 'pointer',\n 'pointing',\n 'pointless',\n 'pointy',\n 'poise',\n 'poison',\n 'poker',\n 'poking',\n 'polar',\n 'police',\n 'policy',\n 'polio',\n 'polish',\n 'politely',\n 'polka',\n 'polo',\n 'polyester',\n 'polygon',\n 'polygraph',\n 'polymer',\n 'poncho',\n 'pond',\n 'pony',\n 'popcorn',\n 'pope',\n 'poplar',\n 'popper',\n 'poppy',\n 'popsicle',\n 'populace',\n 'popular',\n 'populate',\n 'porcupine',\n 'pork',\n 'porous',\n 'porridge',\n 'portable',\n 'portal',\n 'portfolio',\n 'porthole',\n 'portion',\n 'portly',\n 'portside',\n 'poser',\n 'posh',\n 'posing',\n 'possible',\n 'possibly',\n 'possum',\n 'postage',\n 'postal',\n 'postbox',\n 'postcard',\n 'posted',\n 'poster',\n 'posting',\n 'postnasal',\n 'posture',\n 'postwar',\n 'pouch',\n 'pounce',\n 'pouncing',\n 'pound',\n 'pouring',\n 'pout',\n 'powdered',\n 'powdering',\n 'powdery',\n 'power',\n 'powwow',\n 'pox',\n 'praising',\n 'prance',\n 'prancing',\n 'pranker',\n 'prankish',\n 'prankster',\n 'prayer',\n 'praying',\n 'preacher',\n 'preaching',\n 'preachy',\n 'preamble',\n 'precinct',\n 'precise',\n 'precision',\n 'precook',\n 'precut',\n 'predator',\n 'predefine',\n 'predict',\n 'preface',\n 'prefix',\n 'preflight',\n 'preformed',\n 'pregame',\n 'pregnancy',\n 'pregnant',\n 'preheated',\n 'prelaunch',\n 'prelaw',\n 'prelude',\n 'premiere',\n 'premises',\n 'premium',\n 'prenatal',\n 'preoccupy',\n 'preorder',\n 'prepaid',\n 'prepay',\n 'preplan',\n 'preppy',\n 'preschool',\n 'prescribe',\n 'preseason',\n 'preset',\n 'preshow',\n 'president',\n 'presoak',\n 'press',\n 'presume',\n 'presuming',\n 'preteen',\n 'pretended',\n 'pretender',\n 'pretense',\n 'pretext',\n 'pretty',\n 'pretzel',\n 'prevail',\n 'prevalent',\n 'prevent',\n 'preview',\n 'previous',\n 'prewar',\n 'prewashed',\n 'prideful',\n 'pried',\n 'primal',\n 'primarily',\n 'primary',\n 'primate',\n 'primer',\n 'primp',\n 'princess',\n 'print',\n 'prior',\n 'prism',\n 'prison',\n 'prissy',\n 'pristine',\n 'privacy',\n 'private',\n 'privatize',\n 'prize',\n 'proactive',\n 'probable',\n 'probably',\n 'probation',\n 'probe',\n 'probing',\n 'probiotic',\n 'problem',\n 'procedure',\n 'process',\n 'proclaim',\n 'procreate',\n 'procurer',\n 'prodigal',\n 'prodigy',\n 'produce',\n 'product',\n 'profane',\n 'profanity',\n 'professed',\n 'professor',\n 'profile',\n 'profound',\n 'profusely',\n 'progeny',\n 'prognosis',\n 'program',\n 'progress',\n 'projector',\n 'prologue',\n 'prolonged',\n 'promenade',\n 'prominent',\n 'promoter',\n 'promotion',\n 'prompter',\n 'promptly',\n 'prone',\n 'prong',\n 'pronounce',\n 'pronto',\n 'proofing',\n 'proofread',\n 'proofs',\n 'propeller',\n 'properly',\n 'property',\n 'proponent',\n 'proposal',\n 'propose',\n 'props',\n 'prorate',\n 'protector',\n 'protegee',\n 'proton',\n 'prototype',\n 'protozoan',\n 'protract',\n 'protrude',\n 'proud',\n 'provable',\n 'proved',\n 'proven',\n 'provided',\n 'provider',\n 'providing',\n 'province',\n 'proving',\n 'provoke',\n 'provoking',\n 'provolone',\n 'prowess',\n 'prowler',\n 'prowling',\n 'proximity',\n 'proxy',\n 'prozac',\n 'prude',\n 'prudishly',\n 'prune',\n 'pruning',\n 'pry',\n 'psychic',\n 'public',\n 'publisher',\n 'pucker',\n 'pueblo',\n 'pug',\n 'pull',\n 'pulmonary',\n 'pulp',\n 'pulsate',\n 'pulse',\n 'pulverize',\n 'puma',\n 'pumice',\n 'pummel',\n 'punch',\n 'punctual',\n 'punctuate',\n 'punctured',\n 'pungent',\n 'punisher',\n 'punk',\n 'pupil',\n 'puppet',\n 'puppy',\n 'purchase',\n 'pureblood',\n 'purebred',\n 'purely',\n 'pureness',\n 'purgatory',\n 'purge',\n 'purging',\n 'purifier',\n 'purify',\n 'purist',\n 'puritan',\n 'purity',\n 'purple',\n 'purplish',\n 'purposely',\n 'purr',\n 'purse',\n 'pursuable',\n 'pursuant',\n 'pursuit',\n 'purveyor',\n 'pushcart',\n 'pushchair',\n 'pusher',\n 'pushiness',\n 'pushing',\n 'pushover',\n 'pushpin',\n 'pushup',\n 'pushy',\n 'putdown',\n 'putt',\n 'puzzle',\n 'puzzling',\n 'pyramid',\n 'pyromania',\n 'python',\n 'quack',\n 'quadrant',\n 'quail',\n 'quaintly',\n 'quake',\n 'quaking',\n 'qualified',\n 'qualifier',\n 'qualify',\n 'quality',\n 'qualm',\n 'quantum',\n 'quarrel',\n 'quarry',\n 'quartered',\n 'quarterly',\n 'quarters',\n 'quartet',\n 'quench',\n 'query',\n 'quicken',\n 'quickly',\n 'quickness',\n 'quicksand',\n 'quickstep',\n 'quiet',\n 'quill',\n 'quilt',\n 'quintet',\n 'quintuple',\n 'quirk',\n 'quit',\n 'quiver',\n 'quizzical',\n 'quotable',\n 'quotation',\n 'quote',\n 'rabid',\n 'race',\n 'racing',\n 'racism',\n 'rack',\n 'racoon',\n 'radar',\n 'radial',\n 'radiance',\n 'radiantly',\n 'radiated',\n 'radiation',\n 'radiator',\n 'radio',\n 'radish',\n 'raffle',\n 'raft',\n 'rage',\n 'ragged',\n 'raging',\n 'ragweed',\n 'raider',\n 'railcar',\n 'railing',\n 'railroad',\n 'railway',\n 'raisin',\n 'rake',\n 'raking',\n 'rally',\n 'ramble',\n 'rambling',\n 'ramp',\n 'ramrod',\n 'ranch',\n 'rancidity',\n 'random',\n 'ranged',\n 'ranger',\n 'ranging',\n 'ranked',\n 'ranking',\n 'ransack',\n 'ranting',\n 'rants',\n 'rare',\n 'rarity',\n 'rascal',\n 'rash',\n 'rasping',\n 'ravage',\n 'raven',\n 'ravine',\n 'raving',\n 'ravioli',\n 'ravishing',\n 'reabsorb',\n 'reach',\n 'reacquire',\n 'reaction',\n 'reactive',\n 'reactor',\n 'reaffirm',\n 'ream',\n 'reanalyze',\n 'reappear',\n 'reapply',\n 'reappoint',\n 'reapprove',\n 'rearrange',\n 'rearview',\n 'reason',\n 'reassign',\n 'reassure',\n 'reattach',\n 'reawake',\n 'rebalance',\n 'rebate',\n 'rebel',\n 'rebirth',\n 'reboot',\n 'reborn',\n 'rebound',\n 'rebuff',\n 'rebuild',\n 'rebuilt',\n 'reburial',\n 'rebuttal',\n 'recall',\n 'recant',\n 'recapture',\n 'recast',\n 'recede',\n 'recent',\n 'recess',\n 'recharger',\n 'recipient',\n 'recital',\n 'recite',\n 'reckless',\n 'reclaim',\n 'recliner',\n 'reclining',\n 'recluse',\n 'reclusive',\n 'recognize',\n 'recoil',\n 'recollect',\n 'recolor',\n 'reconcile',\n 'reconfirm',\n 'reconvene',\n 'recopy',\n 'record',\n 'recount',\n 'recoup',\n 'recovery',\n 'recreate',\n 'rectal',\n 'rectangle',\n 'rectified',\n 'rectify',\n 'recycled',\n 'recycler',\n 'recycling',\n 'reemerge',\n 'reenact',\n 'reenter',\n 'reentry',\n 'reexamine',\n 'referable',\n 'referee',\n 'reference',\n 'refill',\n 'refinance',\n 'refined',\n 'refinery',\n 'refining',\n 'refinish',\n 'reflected',\n 'reflector',\n 'reflex',\n 'reflux',\n 'refocus',\n 'refold',\n 'reforest',\n 'reformat',\n 'reformed',\n 'reformer',\n 'reformist',\n 'refract',\n 'refrain',\n 'refreeze',\n 'refresh',\n 'refried',\n 'refueling',\n 'refund',\n 'refurbish',\n 'refurnish',\n 'refusal',\n 'refuse',\n 'refusing',\n 'refutable',\n 'refute',\n 'regain',\n 'regalia',\n 'regally',\n 'reggae',\n 'regime',\n 'region',\n 'register',\n 'registrar',\n 'registry',\n 'regress',\n 'regretful',\n 'regroup',\n 'regular',\n 'regulate',\n 'regulator',\n 'rehab',\n 'reheat',\n 'rehire',\n 'rehydrate',\n 'reimburse',\n 'reissue',\n 'reiterate',\n 'rejoice',\n 'rejoicing',\n 'rejoin',\n 'rekindle',\n 'relapse',\n 'relapsing',\n 'relatable',\n 'related',\n 'relation',\n 'relative',\n 'relax',\n 'relay',\n 'relearn',\n 'release',\n 'relenting',\n 'reliable',\n 'reliably',\n 'reliance',\n 'reliant',\n 'relic',\n 'relieve',\n 'relieving',\n 'relight',\n 'relish',\n 'relive',\n 'reload',\n 'relocate',\n 'relock',\n 'reluctant',\n 'rely',\n 'remake',\n 'remark',\n 'remarry',\n 'rematch',\n 'remedial',\n 'remedy',\n 'remember',\n 'reminder',\n 'remindful',\n 'remission',\n 'remix',\n 'remnant',\n 'remodeler',\n 'remold',\n 'remorse',\n 'remote',\n 'removable',\n 'removal',\n 'removed',\n 'remover',\n 'removing',\n 'rename',\n 'renderer',\n 'rendering',\n 'rendition',\n 'renegade',\n 'renewable',\n 'renewably',\n 'renewal',\n 'renewed',\n 'renounce',\n 'renovate',\n 'renovator',\n 'rentable',\n 'rental',\n 'rented',\n 'renter',\n 'reoccupy',\n 'reoccur',\n 'reopen',\n 'reorder',\n 'repackage',\n 'repacking',\n 'repaint',\n 'repair',\n 'repave',\n 'repaying',\n 'repayment',\n 'repeal',\n 'repeated',\n 'repeater',\n 'repent',\n 'rephrase',\n 'replace',\n 'replay',\n 'replica',\n 'reply',\n 'reporter',\n 'repose',\n 'repossess',\n 'repost',\n 'repressed',\n 'reprimand',\n 'reprint',\n 'reprise',\n 'reproach',\n 'reprocess',\n 'reproduce',\n 'reprogram',\n 'reps',\n 'reptile',\n 'reptilian',\n 'repugnant',\n 'repulsion',\n 'repulsive',\n 'repurpose',\n 'reputable',\n 'reputably',\n 'request',\n 'require',\n 'requisite',\n 'reroute',\n 'rerun',\n 'resale',\n 'resample',\n 'rescuer',\n 'reseal',\n 'research',\n 'reselect',\n 'reseller',\n 'resemble',\n 'resend',\n 'resent',\n 'reset',\n 'reshape',\n 'reshoot',\n 'reshuffle',\n 'residence',\n 'residency',\n 'resident',\n 'residual',\n 'residue',\n 'resigned',\n 'resilient',\n 'resistant',\n 'resisting',\n 'resize',\n 'resolute',\n 'resolved',\n 'resonant',\n 'resonate',\n 'resort',\n 'resource',\n 'respect',\n 'resubmit',\n 'result',\n 'resume',\n 'resupply',\n 'resurface',\n 'resurrect',\n 'retail',\n 'retainer',\n 'retaining',\n 'retake',\n 'retaliate',\n 'retention',\n 'rethink',\n 'retinal',\n 'retired',\n 'retiree',\n 'retiring',\n 'retold',\n 'retool',\n 'retorted',\n 'retouch',\n 'retrace',\n 'retract',\n 'retrain',\n 'retread',\n 'retreat',\n 'retrial',\n 'retrieval',\n 'retriever',\n 'retry',\n 'return',\n 'retying',\n 'retype',\n 'reunion',\n 'reunite',\n 'reusable',\n 'reuse',\n 'reveal',\n 'reveler',\n 'revenge',\n 'revenue',\n 'reverb',\n 'revered',\n 'reverence',\n 'reverend',\n 'reversal',\n 'reverse',\n 'reversing',\n 'reversion',\n 'revert',\n 'revisable',\n 'revise',\n 'revision',\n 'revisit',\n 'revivable',\n 'revival',\n 'reviver',\n 'reviving',\n 'revocable',\n 'revoke',\n 'revolt',\n 'revolver',\n 'revolving',\n 'reward',\n 'rewash',\n 'rewind',\n 'rewire',\n 'reword',\n 'rework',\n 'rewrap',\n 'rewrite',\n 'rhyme',\n 'ribbon',\n 'ribcage',\n 'rice',\n 'riches',\n 'richly',\n 'richness',\n 'rickety',\n 'ricotta',\n 'riddance',\n 'ridden',\n 'ride',\n 'riding',\n 'rifling',\n 'rift',\n 'rigging',\n 'rigid',\n 'rigor',\n 'rimless',\n 'rimmed',\n 'rind',\n 'rink',\n 'rinse',\n 'rinsing',\n 'riot',\n 'ripcord',\n 'ripeness',\n 'ripening',\n 'ripping',\n 'ripple',\n 'rippling',\n 'riptide',\n 'rise',\n 'rising',\n 'risk',\n 'risotto',\n 'ritalin',\n 'ritzy',\n 'rival',\n 'riverbank',\n 'riverbed',\n 'riverboat',\n 'riverside',\n 'riveter',\n 'riveting',\n 'roamer',\n 'roaming',\n 'roast',\n 'robbing',\n 'robe',\n 'robin',\n 'robotics',\n 'robust',\n 'rockband',\n 'rocker',\n 'rocket',\n 'rockfish',\n 'rockiness',\n 'rocking',\n 'rocklike',\n 'rockslide',\n 'rockstar',\n 'rocky',\n 'rogue',\n 'roman',\n 'romp',\n 'rope',\n 'roping',\n 'roster',\n 'rosy',\n 'rotten',\n 'rotting',\n 'rotunda',\n 'roulette',\n 'rounding',\n 'roundish',\n 'roundness',\n 'roundup',\n 'roundworm',\n 'routine',\n 'routing',\n 'rover',\n 'roving',\n 'royal',\n 'rubbed',\n 'rubber',\n 'rubbing',\n 'rubble',\n 'rubdown',\n 'ruby',\n 'ruckus',\n 'rudder',\n 'rug',\n 'ruined',\n 'rule',\n 'rumble',\n 'rumbling',\n 'rummage',\n 'rumor',\n 'runaround',\n 'rundown',\n 'runner',\n 'running',\n 'runny',\n 'runt',\n 'runway',\n 'rupture',\n 'rural',\n 'ruse',\n 'rush',\n 'rust',\n 'rut',\n 'sabbath',\n 'sabotage',\n 'sacrament',\n 'sacred',\n 'sacrifice',\n 'sadden',\n 'saddlebag',\n 'saddled',\n 'saddling',\n 'sadly',\n 'sadness',\n 'safari',\n 'safeguard',\n 'safehouse',\n 'safely',\n 'safeness',\n 'saffron',\n 'saga',\n 'sage',\n 'sagging',\n 'saggy',\n 'said',\n 'saint',\n 'sake',\n 'salad',\n 'salami',\n 'salaried',\n 'salary',\n 'saline',\n 'salon',\n 'saloon',\n 'salsa',\n 'salt',\n 'salutary',\n 'salute',\n 'salvage',\n 'salvaging',\n 'salvation',\n 'same',\n 'sample',\n 'sampling',\n 'sanction',\n 'sanctity',\n 'sanctuary',\n 'sandal',\n 'sandbag',\n 'sandbank',\n 'sandbar',\n 'sandblast',\n 'sandbox',\n 'sanded',\n 'sandfish',\n 'sanding',\n 'sandlot',\n 'sandpaper',\n 'sandpit',\n 'sandstone',\n 'sandstorm',\n 'sandworm',\n 'sandy',\n 'sanitary',\n 'sanitizer',\n 'sank',\n 'santa',\n 'sapling',\n 'sappiness',\n 'sappy',\n 'sarcasm',\n 'sarcastic',\n 'sardine',\n 'sash',\n 'sasquatch',\n 'sassy',\n 'satchel',\n 'satiable',\n 'satin',\n 'satirical',\n 'satisfied',\n 'satisfy',\n 'saturate',\n 'saturday',\n 'sauciness',\n 'saucy',\n 'sauna',\n 'savage',\n 'savanna',\n 'saved',\n 'savings',\n 'savior',\n 'savor',\n 'saxophone',\n 'say',\n 'scabbed',\n 'scabby',\n 'scalded',\n 'scalding',\n 'scale',\n 'scaling',\n 'scallion',\n 'scallop',\n 'scalping',\n 'scam',\n 'scandal',\n 'scanner',\n 'scanning',\n 'scant',\n 'scapegoat',\n 'scarce',\n 'scarcity',\n 'scarecrow',\n 'scared',\n 'scarf',\n 'scarily',\n 'scariness',\n 'scarring',\n 'scary',\n 'scavenger',\n 'scenic',\n 'schedule',\n 'schematic',\n 'scheme',\n 'scheming',\n 'schilling',\n 'schnapps',\n 'scholar',\n 'science',\n 'scientist',\n 'scion',\n 'scoff',\n 'scolding',\n 'scone',\n 'scoop',\n 'scooter',\n 'scope',\n 'scorch',\n 'scorebook',\n 'scorecard',\n 'scored',\n 'scoreless',\n 'scorer',\n 'scoring',\n 'scorn',\n 'scorpion',\n 'scotch',\n 'scoundrel',\n 'scoured',\n 'scouring',\n 'scouting',\n 'scouts',\n 'scowling',\n 'scrabble',\n 'scraggly',\n 'scrambled',\n 'scrambler',\n 'scrap',\n 'scratch',\n 'scrawny',\n 'screen',\n 'scribble',\n 'scribe',\n 'scribing',\n 'scrimmage',\n 'script',\n 'scroll',\n 'scrooge',\n 'scrounger',\n 'scrubbed',\n 'scrubber',\n 'scruffy',\n 'scrunch',\n 'scrutiny',\n 'scuba',\n 'scuff',\n 'sculptor',\n 'sculpture',\n 'scurvy',\n 'scuttle',\n 'secluded',\n 'secluding',\n 'seclusion',\n 'second',\n 'secrecy',\n 'secret',\n 'sectional',\n 'sector',\n 'secular',\n 'securely',\n 'security',\n 'sedan',\n 'sedate',\n 'sedation',\n 'sedative',\n 'sediment',\n 'seduce',\n 'seducing',\n 'segment',\n 'seismic',\n 'seizing',\n 'seldom',\n 'selected',\n 'selection',\n 'selective',\n 'selector',\n 'self',\n 'seltzer',\n 'semantic',\n 'semester',\n 'semicolon',\n 'semifinal',\n 'seminar',\n 'semisoft',\n 'semisweet',\n 'senate',\n 'senator',\n 'send',\n 'senior',\n 'senorita',\n 'sensation',\n 'sensitive',\n 'sensitize',\n 'sensually',\n 'sensuous',\n 'sepia',\n 'september',\n 'septic',\n 'septum',\n 'sequel',\n 'sequence',\n 'sequester',\n 'series',\n 'sermon',\n 'serotonin',\n 'serpent',\n 'serrated',\n 'serve',\n 'service',\n 'serving',\n 'sesame',\n 'sessions',\n 'setback',\n 'setting',\n 'settle',\n 'settling',\n 'setup',\n 'sevenfold',\n 'seventeen',\n 'seventh',\n 'seventy',\n 'severity',\n 'shabby',\n 'shack',\n 'shaded',\n 'shadily',\n 'shadiness',\n 'shading',\n 'shadow',\n 'shady',\n 'shaft',\n 'shakable',\n 'shakily',\n 'shakiness',\n 'shaking',\n 'shaky',\n 'shale',\n 'shallot',\n 'shallow',\n 'shame',\n 'shampoo',\n 'shamrock',\n 'shank',\n 'shanty',\n 'shape',\n 'shaping',\n 'share',\n 'sharpener',\n 'sharper',\n 'sharpie',\n 'sharply',\n 'sharpness',\n 'shawl',\n 'sheath',\n 'shed',\n 'sheep',\n 'sheet',\n 'shelf',\n 'shell',\n 'shelter',\n 'shelve',\n 'shelving',\n 'sherry',\n 'shield',\n 'shifter',\n 'shifting',\n 'shiftless',\n 'shifty',\n 'shimmer',\n 'shimmy',\n 'shindig',\n 'shine',\n 'shingle',\n 'shininess',\n 'shining',\n 'shiny',\n 'ship',\n 'shirt',\n 'shivering',\n 'shock',\n 'shone',\n 'shoplift',\n 'shopper',\n 'shopping',\n 'shoptalk',\n 'shore',\n 'shortage',\n 'shortcake',\n 'shortcut',\n 'shorten',\n 'shorter',\n 'shorthand',\n 'shortlist',\n 'shortly',\n 'shortness',\n 'shorts',\n 'shortwave',\n 'shorty',\n 'shout',\n 'shove',\n 'showbiz',\n 'showcase',\n 'showdown',\n 'shower',\n 'showgirl',\n 'showing',\n 'showman',\n 'shown',\n 'showoff',\n 'showpiece',\n 'showplace',\n 'showroom',\n 'showy',\n 'shrank',\n 'shrapnel',\n 'shredder',\n 'shredding',\n 'shrewdly',\n 'shriek',\n 'shrill',\n 'shrimp',\n 'shrine',\n 'shrink',\n 'shrivel',\n 'shrouded',\n 'shrubbery',\n 'shrubs',\n 'shrug',\n 'shrunk',\n 'shucking',\n 'shudder',\n 'shuffle',\n 'shuffling',\n 'shun',\n 'shush',\n 'shut',\n 'shy',\n 'siamese',\n 'siberian',\n 'sibling',\n 'siding',\n 'sierra',\n 'siesta',\n 'sift',\n 'sighing',\n 'silenced',\n 'silencer',\n 'silent',\n 'silica',\n 'silicon',\n 'silk',\n 'silliness',\n 'silly',\n 'silo',\n 'silt',\n 'silver',\n 'similarly',\n 'simile',\n 'simmering',\n 'simple',\n 'simplify',\n 'simply',\n 'sincere',\n 'sincerity',\n 'singer',\n 'singing',\n 'single',\n 'singular',\n 'sinister',\n 'sinless',\n 'sinner',\n 'sinuous',\n 'sip',\n 'siren',\n 'sister',\n 'sitcom',\n 'sitter',\n 'sitting',\n 'situated',\n 'situation',\n 'sixfold',\n 'sixteen',\n 'sixth',\n 'sixties',\n 'sixtieth',\n 'sixtyfold',\n 'sizable',\n 'sizably',\n 'size',\n 'sizing',\n 'sizzle',\n 'sizzling',\n 'skater',\n 'skating',\n 'skedaddle',\n 'skeletal',\n 'skeleton',\n 'skeptic',\n 'sketch',\n 'skewed',\n 'skewer',\n 'skid',\n 'skied',\n 'skier',\n 'skies',\n 'skiing',\n 'skilled',\n 'skillet',\n 'skillful',\n 'skimmed',\n 'skimmer',\n 'skimming',\n 'skimpily',\n 'skincare',\n 'skinhead',\n 'skinless',\n 'skinning',\n 'skinny',\n 'skintight',\n 'skipper',\n 'skipping',\n 'skirmish',\n 'skirt',\n 'skittle',\n 'skydiver',\n 'skylight',\n 'skyline',\n 'skype',\n 'skyrocket',\n 'skyward',\n 'slab',\n 'slacked',\n 'slacker',\n 'slacking',\n 'slackness',\n 'slacks',\n 'slain',\n 'slam',\n 'slander',\n 'slang',\n 'slapping',\n 'slapstick',\n 'slashed',\n 'slashing',\n 'slate',\n 'slather',\n 'slaw',\n 'sled',\n 'sleek',\n 'sleep',\n 'sleet',\n 'sleeve',\n 'slept',\n 'sliceable',\n 'sliced',\n 'slicer',\n 'slicing',\n 'slick',\n 'slider',\n 'slideshow',\n 'sliding',\n 'slighted',\n 'slighting',\n 'slightly',\n 'slimness',\n 'slimy',\n 'slinging',\n 'slingshot',\n 'slinky',\n 'slip',\n 'slit',\n 'sliver',\n 'slobbery',\n 'slogan',\n 'sloped',\n 'sloping',\n 'sloppily',\n 'sloppy',\n 'slot',\n 'slouching',\n 'slouchy',\n 'sludge',\n 'slug',\n 'slum',\n 'slurp',\n 'slush',\n 'sly',\n 'small',\n 'smartly',\n 'smartness',\n 'smasher',\n 'smashing',\n 'smashup',\n 'smell',\n 'smelting',\n 'smile',\n 'smilingly',\n 'smirk',\n 'smite',\n 'smith',\n 'smitten',\n 'smock',\n 'smog',\n 'smoked',\n 'smokeless',\n 'smokiness',\n 'smoking',\n 'smoky',\n 'smolder',\n 'smooth',\n 'smother',\n 'smudge',\n 'smudgy',\n 'smuggler',\n 'smuggling',\n 'smugly',\n 'smugness',\n 'snack',\n 'snagged',\n 'snaking',\n 'snap',\n 'snare',\n 'snarl',\n 'snazzy',\n 'sneak',\n 'sneer',\n 'sneeze',\n 'sneezing',\n 'snide',\n 'sniff',\n 'snippet',\n 'snipping',\n 'snitch',\n 'snooper',\n 'snooze',\n 'snore',\n 'snoring',\n 'snorkel',\n 'snort',\n 'snout',\n 'snowbird',\n 'snowboard',\n 'snowbound',\n 'snowcap',\n 'snowdrift',\n 'snowdrop',\n 'snowfall',\n 'snowfield',\n 'snowflake',\n 'snowiness',\n 'snowless',\n 'snowman',\n 'snowplow',\n 'snowshoe',\n 'snowstorm',\n 'snowsuit',\n 'snowy',\n 'snub',\n 'snuff',\n 'snuggle',\n 'snugly',\n 'snugness',\n 'speak',\n 'spearfish',\n 'spearhead',\n 'spearman',\n 'spearmint',\n 'species',\n 'specimen',\n 'specked',\n 'speckled',\n 'specks',\n 'spectacle',\n 'spectator',\n 'spectrum',\n 'speculate',\n 'speech',\n 'speed',\n 'spellbind',\n 'speller',\n 'spelling',\n 'spendable',\n 'spender',\n 'spending',\n 'spent',\n 'spew',\n 'sphere',\n 'spherical',\n 'sphinx',\n 'spider',\n 'spied',\n 'spiffy',\n 'spill',\n 'spilt',\n 'spinach',\n 'spinal',\n 'spindle',\n 'spinner',\n 'spinning',\n 'spinout',\n 'spinster',\n 'spiny',\n 'spiral',\n 'spirited',\n 'spiritism',\n 'spirits',\n 'spiritual',\n 'splashed',\n 'splashing',\n 'splashy',\n 'splatter',\n 'spleen',\n 'splendid',\n 'splendor',\n 'splice',\n 'splicing',\n 'splinter',\n 'splotchy',\n 'splurge',\n 'spoilage',\n 'spoiled',\n 'spoiler',\n 'spoiling',\n 'spoils',\n 'spoken',\n 'spokesman',\n 'sponge',\n 'spongy',\n 'sponsor',\n 'spoof',\n 'spookily',\n 'spooky',\n 'spool',\n 'spoon',\n 'spore',\n 'sporting',\n 'sports',\n 'sporty',\n 'spotless',\n 'spotlight',\n 'spotted',\n 'spotter',\n 'spotting',\n 'spotty',\n 'spousal',\n 'spouse',\n 'spout',\n 'sprain',\n 'sprang',\n 'sprawl',\n 'spray',\n 'spree',\n 'sprig',\n 'spring',\n 'sprinkled',\n 'sprinkler',\n 'sprint',\n 'sprite',\n 'sprout',\n 'spruce',\n 'sprung',\n 'spry',\n 'spud',\n 'spur',\n 'sputter',\n 'spyglass',\n 'squabble',\n 'squad',\n 'squall',\n 'squander',\n 'squash',\n 'squatted',\n 'squatter',\n 'squatting',\n 'squeak',\n 'squealer',\n 'squealing',\n 'squeamish',\n 'squeegee',\n 'squeeze',\n 'squeezing',\n 'squid',\n 'squiggle',\n 'squiggly',\n 'squint',\n 'squire',\n 'squirt',\n 'squishier',\n 'squishy',\n 'stability',\n 'stabilize',\n 'stable',\n 'stack',\n 'stadium',\n 'staff',\n 'stage',\n 'staging',\n 'stagnant',\n 'stagnate',\n 'stainable',\n 'stained',\n 'staining',\n 'stainless',\n 'stalemate',\n 'staleness',\n 'stalling',\n 'stallion',\n 'stamina',\n 'stammer',\n 'stamp',\n 'stand',\n 'stank',\n 'staple',\n 'stapling',\n 'starboard',\n 'starch',\n 'stardom',\n 'stardust',\n 'starfish',\n 'stargazer',\n 'staring',\n 'stark',\n 'starless',\n 'starlet',\n 'starlight',\n 'starlit',\n 'starring',\n 'starry',\n 'starship',\n 'starter',\n 'starting',\n 'startle',\n 'startling',\n 'startup',\n 'starved',\n 'starving',\n 'stash',\n 'state',\n 'static',\n 'statistic',\n 'statue',\n 'stature',\n 'status',\n 'statute',\n 'statutory',\n 'staunch',\n 'stays',\n 'steadfast',\n 'steadier',\n 'steadily',\n 'steadying',\n 'steam',\n 'steed',\n 'steep',\n 'steerable',\n 'steering',\n 'steersman',\n 'stegosaur',\n 'stellar',\n 'stem',\n 'stench',\n 'stencil',\n 'step',\n 'stereo',\n 'sterile',\n 'sterility',\n 'sterilize',\n 'sterling',\n 'sternness',\n 'sternum',\n 'stew',\n 'stick',\n 'stiffen',\n 'stiffly',\n 'stiffness',\n 'stifle',\n 'stifling',\n 'stillness',\n 'stilt',\n 'stimulant',\n 'stimulate',\n 'stimuli',\n 'stimulus',\n 'stinger',\n 'stingily',\n 'stinging',\n 'stingray',\n 'stingy',\n 'stinking',\n 'stinky',\n 'stipend',\n 'stipulate',\n 'stir',\n 'stitch',\n 'stock',\n 'stoic',\n 'stoke',\n 'stole',\n 'stomp',\n 'stonewall',\n 'stoneware',\n 'stonework',\n 'stoning',\n 'stony',\n 'stood',\n 'stooge',\n 'stool',\n 'stoop',\n 'stoplight',\n 'stoppable',\n 'stoppage',\n 'stopped',\n 'stopper',\n 'stopping',\n 'stopwatch',\n 'storable',\n 'storage',\n 'storeroom',\n 'storewide',\n 'storm',\n 'stout',\n 'stove',\n 'stowaway',\n 'stowing',\n 'straddle',\n 'straggler',\n 'strained',\n 'strainer',\n 'straining',\n 'strangely',\n 'stranger',\n 'strangle',\n 'strategic',\n 'strategy',\n 'stratus',\n 'straw',\n 'stray',\n 'streak',\n 'stream',\n 'street',\n 'strength',\n 'strenuous',\n 'strep',\n 'stress',\n 'stretch',\n 'strewn',\n 'stricken',\n 'strict',\n 'stride',\n 'strife',\n 'strike',\n 'striking',\n 'strive',\n 'striving',\n 'strobe',\n 'strode',\n 'stroller',\n 'strongbox',\n 'strongly',\n 'strongman',\n 'struck',\n 'structure',\n 'strudel',\n 'struggle',\n 'strum',\n 'strung',\n 'strut',\n 'stubbed',\n 'stubble',\n 'stubbly',\n 'stubborn',\n 'stucco',\n 'stuck',\n 'student',\n 'studied',\n 'studio',\n 'study',\n 'stuffed',\n 'stuffing',\n 'stuffy',\n 'stumble',\n 'stumbling',\n 'stump',\n 'stung',\n 'stunned',\n 'stunner',\n 'stunning',\n 'stunt',\n 'stupor',\n 'sturdily',\n 'sturdy',\n 'styling',\n 'stylishly',\n 'stylist',\n 'stylized',\n 'stylus',\n 'suave',\n 'subarctic',\n 'subatomic',\n 'subdivide',\n 'subdued',\n 'subduing',\n 'subfloor',\n 'subgroup',\n 'subheader',\n 'subject',\n 'sublease',\n 'sublet',\n 'sublevel',\n 'sublime',\n 'submarine',\n 'submerge',\n 'submersed',\n 'submitter',\n 'subpanel',\n 'subpar',\n 'subplot',\n 'subprime',\n 'subscribe',\n 'subscript',\n 'subsector',\n 'subside',\n 'subsiding',\n 'subsidize',\n 'subsidy',\n 'subsoil',\n 'subsonic',\n 'substance',\n 'subsystem',\n 'subtext',\n 'subtitle',\n 'subtly',\n 'subtotal',\n 'subtract',\n 'subtype',\n 'suburb',\n 'subway',\n 'subwoofer',\n 'subzero',\n 'succulent',\n 'such',\n 'suction',\n 'sudden',\n 'sudoku',\n 'suds',\n 'sufferer',\n 'suffering',\n 'suffice',\n 'suffix',\n 'suffocate',\n 'suffrage',\n 'sugar',\n 'suggest',\n 'suing',\n 'suitable',\n 'suitably',\n 'suitcase',\n 'suitor',\n 'sulfate',\n 'sulfide',\n 'sulfite',\n 'sulfur',\n 'sulk',\n 'sullen',\n 'sulphate',\n 'sulphuric',\n 'sultry',\n 'superbowl',\n 'superglue',\n 'superhero',\n 'superior',\n 'superjet',\n 'superman',\n 'supermom',\n 'supernova',\n 'supervise',\n 'supper',\n 'supplier',\n 'supply',\n 'support',\n 'supremacy',\n 'supreme',\n 'surcharge',\n 'surely',\n 'sureness',\n 'surface',\n 'surfacing',\n 'surfboard',\n 'surfer',\n 'surgery',\n 'surgical',\n 'surging',\n 'surname',\n 'surpass',\n 'surplus',\n 'surprise',\n 'surreal',\n 'surrender',\n 'surrogate',\n 'surround',\n 'survey',\n 'survival',\n 'survive',\n 'surviving',\n 'survivor',\n 'sushi',\n 'suspect',\n 'suspend',\n 'suspense',\n 'sustained',\n 'sustainer',\n 'swab',\n 'swaddling',\n 'swagger',\n 'swampland',\n 'swan',\n 'swapping',\n 'swarm',\n 'sway',\n 'swear',\n 'sweat',\n 'sweep',\n 'swell',\n 'swept',\n 'swerve',\n 'swifter',\n 'swiftly',\n 'swiftness',\n 'swimmable',\n 'swimmer',\n 'swimming',\n 'swimsuit',\n 'swimwear',\n 'swinger',\n 'swinging',\n 'swipe',\n 'swirl',\n 'switch',\n 'swivel',\n 'swizzle',\n 'swooned',\n 'swoop',\n 'swoosh',\n 'swore',\n 'sworn',\n 'swung',\n 'sycamore',\n 'sympathy',\n 'symphonic',\n 'symphony',\n 'symptom',\n 'synapse',\n 'syndrome',\n 'synergy',\n 'synopses',\n 'synopsis',\n 'synthesis',\n 'synthetic',\n 'syrup',\n 'system',\n 't-shirt',\n 'tabasco',\n 'tabby',\n 'tableful',\n 'tables',\n 'tablet',\n 'tableware',\n 'tabloid',\n 'tackiness',\n 'tacking',\n 'tackle',\n 'tackling',\n 'tacky',\n 'taco',\n 'tactful',\n 'tactical',\n 'tactics',\n 'tactile',\n 'tactless',\n 'tadpole',\n 'taekwondo',\n 'tag',\n 'tainted',\n 'take',\n 'taking',\n 'talcum',\n 'talisman',\n 'tall',\n 'talon',\n 'tamale',\n 'tameness',\n 'tamer',\n 'tamper',\n 'tank',\n 'tanned',\n 'tannery',\n 'tanning',\n 'tantrum',\n 'tapeless',\n 'tapered',\n 'tapering',\n 'tapestry',\n 'tapioca',\n 'tapping',\n 'taps',\n 'tarantula',\n 'target',\n 'tarmac',\n 'tarnish',\n 'tarot',\n 'tartar',\n 'tartly',\n 'tartness',\n 'task',\n 'tassel',\n 'taste',\n 'tastiness',\n 'tasting',\n 'tasty',\n 'tattered',\n 'tattle',\n 'tattling',\n 'tattoo',\n 'taunt',\n 'tavern',\n 'thank',\n 'that',\n 'thaw',\n 'theater',\n 'theatrics',\n 'thee',\n 'theft',\n 'theme',\n 'theology',\n 'theorize',\n 'thermal',\n 'thermos',\n 'thesaurus',\n 'these',\n 'thesis',\n 'thespian',\n 'thicken',\n 'thicket',\n 'thickness',\n 'thieving',\n 'thievish',\n 'thigh',\n 'thimble',\n 'thing',\n 'think',\n 'thinly',\n 'thinner',\n 'thinness',\n 'thinning',\n 'thirstily',\n 'thirsting',\n 'thirsty',\n 'thirteen',\n 'thirty',\n 'thong',\n 'thorn',\n 'those',\n 'thousand',\n 'thrash',\n 'thread',\n 'threaten',\n 'threefold',\n 'thrift',\n 'thrill',\n 'thrive',\n 'thriving',\n 'throat',\n 'throbbing',\n 'throng',\n 'throttle',\n 'throwaway',\n 'throwback',\n 'thrower',\n 'throwing',\n 'thud',\n 'thumb',\n 'thumping',\n 'thursday',\n 'thus',\n 'thwarting',\n 'thyself',\n 'tiara',\n 'tibia',\n 'tidal',\n 'tidbit',\n 'tidiness',\n 'tidings',\n 'tidy',\n 'tiger',\n 'tighten',\n 'tightly',\n 'tightness',\n 'tightrope',\n 'tightwad',\n 'tigress',\n 'tile',\n 'tiling',\n 'till',\n 'tilt',\n 'timid',\n 'timing',\n 'timothy',\n 'tinderbox',\n 'tinfoil',\n 'tingle',\n 'tingling',\n 'tingly',\n 'tinker',\n 'tinkling',\n 'tinsel',\n 'tinsmith',\n 'tint',\n 'tinwork',\n 'tiny',\n 'tipoff',\n 'tipped',\n 'tipper',\n 'tipping',\n 'tiptoeing',\n 'tiptop',\n 'tiring',\n 'tissue',\n 'trace',\n 'tracing',\n 'track',\n 'traction',\n 'tractor',\n 'trade',\n 'trading',\n 'tradition',\n 'traffic',\n 'tragedy',\n 'trailing',\n 'trailside',\n 'train',\n 'traitor',\n 'trance',\n 'tranquil',\n 'transfer',\n 'transform',\n 'translate',\n 'transpire',\n 'transport',\n 'transpose',\n 'trapdoor',\n 'trapeze',\n 'trapezoid',\n 'trapped',\n 'trapper',\n 'trapping',\n 'traps',\n 'trash',\n 'travel',\n 'traverse',\n 'travesty',\n 'tray',\n 'treachery',\n 'treading',\n 'treadmill',\n 'treason',\n 'treat',\n 'treble',\n 'tree',\n 'trekker',\n 'tremble',\n 'trembling',\n 'tremor',\n 'trench',\n 'trend',\n 'trespass',\n 'triage',\n 'trial',\n 'triangle',\n 'tribesman',\n 'tribunal',\n 'tribune',\n 'tributary',\n 'tribute',\n 'triceps',\n 'trickery',\n 'trickily',\n 'tricking',\n 'trickle',\n 'trickster',\n 'tricky',\n 'tricolor',\n 'tricycle',\n 'trident',\n 'tried',\n 'trifle',\n 'trifocals',\n 'trillion',\n 'trilogy',\n 'trimester',\n 'trimmer',\n 'trimming',\n 'trimness',\n 'trinity',\n 'trio',\n 'tripod',\n 'tripping',\n 'triumph',\n 'trivial',\n 'trodden',\n 'trolling',\n 'trombone',\n 'trophy',\n 'tropical',\n 'tropics',\n 'trouble',\n 'troubling',\n 'trough',\n 'trousers',\n 'trout',\n 'trowel',\n 'truce',\n 'truck',\n 'truffle',\n 'trump',\n 'trunks',\n 'trustable',\n 'trustee',\n 'trustful',\n 'trusting',\n 'trustless',\n 'truth',\n 'try',\n 'tubby',\n 'tubeless',\n 'tubular',\n 'tucking',\n 'tuesday',\n 'tug',\n 'tuition',\n 'tulip',\n 'tumble',\n 'tumbling',\n 'tummy',\n 'turban',\n 'turbine',\n 'turbofan',\n 'turbojet',\n 'turbulent',\n 'turf',\n 'turkey',\n 'turmoil',\n 'turret',\n 'turtle',\n 'tusk',\n 'tutor',\n 'tutu',\n 'tux',\n 'tweak',\n 'tweed',\n 'tweet',\n 'tweezers',\n 'twelve',\n 'twentieth',\n 'twenty',\n 'twerp',\n 'twice',\n 'twiddle',\n 'twiddling',\n 'twig',\n 'twilight',\n 'twine',\n 'twins',\n 'twirl',\n 'twistable',\n 'twisted',\n 'twister',\n 'twisting',\n 'twisty',\n 'twitch',\n 'twitter',\n 'tycoon',\n 'tying',\n 'tyke',\n 'udder',\n 'ultimate',\n 'ultimatum',\n 'ultra',\n 'umbilical',\n 'umbrella',\n 'umpire',\n 'unabashed',\n 'unable',\n 'unadorned',\n 'unadvised',\n 'unafraid',\n 'unaired',\n 'unaligned',\n 'unaltered',\n 'unarmored',\n 'unashamed',\n 'unaudited',\n 'unawake',\n 'unaware',\n 'unbaked',\n 'unbalance',\n 'unbeaten',\n 'unbend',\n 'unbent',\n 'unbiased',\n 'unbitten',\n 'unblended',\n 'unblessed',\n 'unblock',\n 'unbolted',\n 'unbounded',\n 'unboxed',\n 'unbraided',\n 'unbridle',\n 'unbroken',\n 'unbuckled',\n 'unbundle',\n 'unburned',\n 'unbutton',\n 'uncanny',\n 'uncapped',\n 'uncaring',\n 'uncertain',\n 'unchain',\n 'unchanged',\n 'uncharted',\n 'uncheck',\n 'uncivil',\n 'unclad',\n 'unclaimed',\n 'unclamped',\n 'unclasp',\n 'uncle',\n 'unclip',\n 'uncloak',\n 'unclog',\n 'unclothed',\n 'uncoated',\n 'uncoiled',\n 'uncolored',\n 'uncombed',\n 'uncommon',\n 'uncooked',\n 'uncork',\n 'uncorrupt',\n 'uncounted',\n 'uncouple',\n 'uncouth',\n 'uncover',\n 'uncross',\n 'uncrown',\n 'uncrushed',\n 'uncured',\n 'uncurious',\n 'uncurled',\n 'uncut',\n 'undamaged',\n 'undated',\n 'undaunted',\n 'undead',\n 'undecided',\n 'undefined',\n 'underage',\n 'underarm',\n 'undercoat',\n 'undercook',\n 'undercut',\n 'underdog',\n 'underdone',\n 'underfed',\n 'underfeed',\n 'underfoot',\n 'undergo',\n 'undergrad',\n 'underhand',\n 'underline',\n 'underling',\n 'undermine',\n 'undermost',\n 'underpaid',\n 'underpass',\n 'underpay',\n 'underrate',\n 'undertake',\n 'undertone',\n 'undertook',\n 'undertow',\n 'underuse',\n 'underwear',\n 'underwent',\n 'underwire',\n 'undesired',\n 'undiluted',\n 'undivided',\n 'undocked',\n 'undoing',\n 'undone',\n 'undrafted',\n 'undress',\n 'undrilled',\n 'undusted',\n 'undying',\n 'unearned',\n 'unearth',\n 'unease',\n 'uneasily',\n 'uneasy',\n 'uneatable',\n 'uneaten',\n 'unedited',\n 'unelected',\n 'unending',\n 'unengaged',\n 'unenvied',\n 'unequal',\n 'unethical',\n 'uneven',\n 'unexpired',\n 'unexposed',\n 'unfailing',\n 'unfair',\n 'unfasten',\n 'unfazed',\n 'unfeeling',\n 'unfiled',\n 'unfilled',\n 'unfitted',\n 'unfitting',\n 'unfixable',\n 'unfixed',\n 'unflawed',\n 'unfocused',\n 'unfold',\n 'unfounded',\n 'unframed',\n 'unfreeze',\n 'unfrosted',\n 'unfrozen',\n 'unfunded',\n 'unglazed',\n 'ungloved',\n 'unglue',\n 'ungodly',\n 'ungraded',\n 'ungreased',\n 'unguarded',\n 'unguided',\n 'unhappily',\n 'unhappy',\n 'unharmed',\n 'unhealthy',\n 'unheard',\n 'unhearing',\n 'unheated',\n 'unhelpful',\n 'unhidden',\n 'unhinge',\n 'unhitched',\n 'unholy',\n 'unhook',\n 'unicorn',\n 'unicycle',\n 'unified',\n 'unifier',\n 'uniformed',\n 'uniformly',\n 'unify',\n 'unimpeded',\n 'uninjured',\n 'uninstall',\n 'uninsured',\n 'uninvited',\n 'union',\n 'uniquely',\n 'unisexual',\n 'unison',\n 'unissued',\n 'unit',\n 'universal',\n 'universe',\n 'unjustly',\n 'unkempt',\n 'unkind',\n 'unknotted',\n 'unknowing',\n 'unknown',\n 'unlaced',\n 'unlatch',\n 'unlawful',\n 'unleaded',\n 'unlearned',\n 'unleash',\n 'unless',\n 'unleveled',\n 'unlighted',\n 'unlikable',\n 'unlimited',\n 'unlined',\n 'unlinked',\n 'unlisted',\n 'unlit',\n 'unlivable',\n 'unloaded',\n 'unloader',\n 'unlocked',\n 'unlocking',\n 'unlovable',\n 'unloved',\n 'unlovely',\n 'unloving',\n 'unluckily',\n 'unlucky',\n 'unmade',\n 'unmanaged',\n 'unmanned',\n 'unmapped',\n 'unmarked',\n 'unmasked',\n 'unmasking',\n 'unmatched',\n 'unmindful',\n 'unmixable',\n 'unmixed',\n 'unmolded',\n 'unmoral',\n 'unmovable',\n 'unmoved',\n 'unmoving',\n 'unnamable',\n 'unnamed',\n 'unnatural',\n 'unneeded',\n 'unnerve',\n 'unnerving',\n 'unnoticed',\n 'unopened',\n 'unopposed',\n 'unpack',\n 'unpadded',\n 'unpaid',\n 'unpainted',\n 'unpaired',\n 'unpaved',\n 'unpeeled',\n 'unpicked',\n 'unpiloted',\n 'unpinned',\n 'unplanned',\n 'unplanted',\n 'unpleased',\n 'unpledged',\n 'unplowed',\n 'unplug',\n 'unpopular',\n 'unproven',\n 'unquote',\n 'unranked',\n 'unrated',\n 'unraveled',\n 'unreached',\n 'unread',\n 'unreal',\n 'unreeling',\n 'unrefined',\n 'unrelated',\n 'unrented',\n 'unrest',\n 'unretired',\n 'unrevised',\n 'unrigged',\n 'unripe',\n 'unrivaled',\n 'unroasted',\n 'unrobed',\n 'unroll',\n 'unruffled',\n 'unruly',\n 'unrushed',\n 'unsaddle',\n 'unsafe',\n 'unsaid',\n 'unsalted',\n 'unsaved',\n 'unsavory',\n 'unscathed',\n 'unscented',\n 'unscrew',\n 'unsealed',\n 'unseated',\n 'unsecured',\n 'unseeing',\n 'unseemly',\n 'unseen',\n 'unselect',\n 'unselfish',\n 'unsent',\n 'unsettled',\n 'unshackle',\n 'unshaken',\n 'unshaved',\n 'unshaven',\n 'unsheathe',\n 'unshipped',\n 'unsightly',\n 'unsigned',\n 'unskilled',\n 'unsliced',\n 'unsmooth',\n 'unsnap',\n 'unsocial',\n 'unsoiled',\n 'unsold',\n 'unsolved',\n 'unsorted',\n 'unspoiled',\n 'unspoken',\n 'unstable',\n 'unstaffed',\n 'unstamped',\n 'unsteady',\n 'unsterile',\n 'unstirred',\n 'unstitch',\n 'unstopped',\n 'unstuck',\n 'unstuffed',\n 'unstylish',\n 'unsubtle',\n 'unsubtly',\n 'unsuited',\n 'unsure',\n 'unsworn',\n 'untagged',\n 'untainted',\n 'untaken',\n 'untamed',\n 'untangled',\n 'untapped',\n 'untaxed',\n 'unthawed',\n 'unthread',\n 'untidy',\n 'untie',\n 'until',\n 'untimed',\n 'untimely',\n 'untitled',\n 'untoasted',\n 'untold',\n 'untouched',\n 'untracked',\n 'untrained',\n 'untreated',\n 'untried',\n 'untrimmed',\n 'untrue',\n 'untruth',\n 'unturned',\n 'untwist',\n 'untying',\n 'unusable',\n 'unused',\n 'unusual',\n 'unvalued',\n 'unvaried',\n 'unvarying',\n 'unveiled',\n 'unveiling',\n 'unvented',\n 'unviable',\n 'unvisited',\n 'unvocal',\n 'unwanted',\n 'unwarlike',\n 'unwary',\n 'unwashed',\n 'unwatched',\n 'unweave',\n 'unwed',\n 'unwelcome',\n 'unwell',\n 'unwieldy',\n 'unwilling',\n 'unwind',\n 'unwired',\n 'unwitting',\n 'unwomanly',\n 'unworldly',\n 'unworn',\n 'unworried',\n 'unworthy',\n 'unwound',\n 'unwoven',\n 'unwrapped',\n 'unwritten',\n 'unzip',\n 'upbeat',\n 'upchuck',\n 'upcoming',\n 'upcountry',\n 'update',\n 'upfront',\n 'upgrade',\n 'upheaval',\n 'upheld',\n 'uphill',\n 'uphold',\n 'uplifted',\n 'uplifting',\n 'upload',\n 'upon',\n 'upper',\n 'upright',\n 'uprising',\n 'upriver',\n 'uproar',\n 'uproot',\n 'upscale',\n 'upside',\n 'upstage',\n 'upstairs',\n 'upstart',\n 'upstate',\n 'upstream',\n 'upstroke',\n 'upswing',\n 'uptake',\n 'uptight',\n 'uptown',\n 'upturned',\n 'upward',\n 'upwind',\n 'uranium',\n 'urban',\n 'urchin',\n 'urethane',\n 'urgency',\n 'urgent',\n 'urging',\n 'urologist',\n 'urology',\n 'usable',\n 'usage',\n 'useable',\n 'used',\n 'uselessly',\n 'user',\n 'usher',\n 'usual',\n 'utensil',\n 'utility',\n 'utilize',\n 'utmost',\n 'utopia',\n 'utter',\n 'vacancy',\n 'vacant',\n 'vacate',\n 'vacation',\n 'vagabond',\n 'vagrancy',\n 'vagrantly',\n 'vaguely',\n 'vagueness',\n 'valiant',\n 'valid',\n 'valium',\n 'valley',\n 'valuables',\n 'value',\n 'vanilla',\n 'vanish',\n 'vanity',\n 'vanquish',\n 'vantage',\n 'vaporizer',\n 'variable',\n 'variably',\n 'varied',\n 'variety',\n 'various',\n 'varmint',\n 'varnish',\n 'varsity',\n 'varying',\n 'vascular',\n 'vaseline',\n 'vastly',\n 'vastness',\n 'veal',\n 'vegan',\n 'veggie',\n 'vehicular',\n 'velcro',\n 'velocity',\n 'velvet',\n 'vendetta',\n 'vending',\n 'vendor',\n 'veneering',\n 'vengeful',\n 'venomous',\n 'ventricle',\n 'venture',\n 'venue',\n 'venus',\n 'verbalize',\n 'verbally',\n 'verbose',\n 'verdict',\n 'verify',\n 'verse',\n 'version',\n 'versus',\n 'vertebrae',\n 'vertical',\n 'vertigo',\n 'very',\n 'vessel',\n 'vest',\n 'veteran',\n 'veto',\n 'vexingly',\n 'viability',\n 'viable',\n 'vibes',\n 'vice',\n 'vicinity',\n 'victory',\n 'video',\n 'viewable',\n 'viewer',\n 'viewing',\n 'viewless',\n 'viewpoint',\n 'vigorous',\n 'village',\n 'villain',\n 'vindicate',\n 'vineyard',\n 'vintage',\n 'violate',\n 'violation',\n 'violator',\n 'violet',\n 'violin',\n 'viper',\n 'viral',\n 'virtual',\n 'virtuous',\n 'virus',\n 'visa',\n 'viscosity',\n 'viscous',\n 'viselike',\n 'visible',\n 'visibly',\n 'vision',\n 'visiting',\n 'visitor',\n 'visor',\n 'vista',\n 'vitality',\n 'vitalize',\n 'vitally',\n 'vitamins',\n 'vivacious',\n 'vividly',\n 'vividness',\n 'vixen',\n 'vocalist',\n 'vocalize',\n 'vocally',\n 'vocation',\n 'voice',\n 'voicing',\n 'void',\n 'volatile',\n 'volley',\n 'voltage',\n 'volumes',\n 'voter',\n 'voting',\n 'voucher',\n 'vowed',\n 'vowel',\n 'voyage',\n 'wackiness',\n 'wad',\n 'wafer',\n 'waffle',\n 'waged',\n 'wager',\n 'wages',\n 'waggle',\n 'wagon',\n 'wake',\n 'waking',\n 'walk',\n 'walmart',\n 'walnut',\n 'walrus',\n 'waltz',\n 'wand',\n 'wannabe',\n 'wanted',\n 'wanting',\n 'wasabi',\n 'washable',\n 'washbasin',\n 'washboard',\n 'washbowl',\n 'washcloth',\n 'washday',\n 'washed',\n 'washer',\n 'washhouse',\n 'washing',\n 'washout',\n 'washroom',\n 'washstand',\n 'washtub',\n 'wasp',\n 'wasting',\n 'watch',\n 'water',\n 'waviness',\n 'waving',\n 'wavy',\n 'whacking',\n 'whacky',\n 'wham',\n 'wharf',\n 'wheat',\n 'whenever',\n 'whiff',\n 'whimsical',\n 'whinny',\n 'whiny',\n 'whisking',\n 'whoever',\n 'whole',\n 'whomever',\n 'whoopee',\n 'whooping',\n 'whoops',\n 'why',\n 'wick',\n 'widely',\n 'widen',\n 'widget',\n 'widow',\n 'width',\n 'wieldable',\n 'wielder',\n 'wife',\n 'wifi',\n 'wikipedia',\n 'wildcard',\n 'wildcat',\n 'wilder',\n 'wildfire',\n 'wildfowl',\n 'wildland',\n 'wildlife',\n 'wildly',\n 'wildness',\n 'willed',\n 'willfully',\n 'willing',\n 'willow',\n 'willpower',\n 'wilt',\n 'wimp',\n 'wince',\n 'wincing',\n 'wind',\n 'wing',\n 'winking',\n 'winner',\n 'winnings',\n 'winter',\n 'wipe',\n 'wired',\n 'wireless',\n 'wiring',\n 'wiry',\n 'wisdom',\n 'wise',\n 'wish',\n 'wisplike',\n 'wispy',\n 'wistful',\n 'wizard',\n 'wobble',\n 'wobbling',\n 'wobbly',\n 'wok',\n 'wolf',\n 'wolverine',\n 'womanhood',\n 'womankind',\n 'womanless',\n 'womanlike',\n 'womanly',\n 'womb',\n 'woof',\n 'wooing',\n 'wool',\n 'woozy',\n 'word',\n 'work',\n 'worried',\n 'worrier',\n 'worrisome',\n 'worry',\n 'worsening',\n 'worshiper',\n 'worst',\n 'wound',\n 'woven',\n 'wow',\n 'wrangle',\n 'wrath',\n 'wreath',\n 'wreckage',\n 'wrecker',\n 'wrecking',\n 'wrench',\n 'wriggle',\n 'wriggly',\n 'wrinkle',\n 'wrinkly',\n 'wrist',\n 'writing',\n 'written',\n 'wrongdoer',\n 'wronged',\n 'wrongful',\n 'wrongly',\n 'wrongness',\n 'wrought',\n 'xbox',\n 'xerox',\n 'yahoo',\n 'yam',\n 'yanking',\n 'yapping',\n 'yard',\n 'yarn',\n 'yeah',\n 'yearbook',\n 'yearling',\n 'yearly',\n 'yearning',\n 'yeast',\n 'yelling',\n 'yelp',\n 'yen',\n 'yesterday',\n 'yiddish',\n 'yield',\n 'yin',\n 'yippee',\n 'yo-yo',\n 'yodel',\n 'yoga',\n 'yogurt',\n 'yonder',\n 'yoyo',\n 'yummy',\n 'zap',\n 'zealous',\n 'zebra',\n 'zen',\n 'zeppelin',\n 'zero',\n 'zestfully',\n 'zesty',\n 'zigzagged',\n 'zipfile',\n 'zipping',\n 'zippy',\n 'zips',\n 'zit',\n 'zodiac',\n 'zombie',\n 'zone',\n 'zoning',\n 'zookeeper',\n 'zoologist',\n 'zoology',\n 'zoom',\n];\n","import * as bigInt from 'big-integer';\n\nimport { EncryptionType } from '../enums/encryptionType';\nimport { KdfType } from '../enums/kdfType';\n\nimport { CipherString } from '../models/domain/cipherString';\nimport { EncryptedObject } from '../models/domain/encryptedObject';\nimport { SymmetricCryptoKey } from '../models/domain/symmetricCryptoKey';\nimport { ProfileOrganizationResponse } from '../models/response/profileOrganizationResponse';\n\nimport { CryptoService as CryptoServiceAbstraction } from '../abstractions/crypto.service';\nimport { CryptoFunctionService } from '../abstractions/cryptoFunction.service';\nimport { StorageService } from '../abstractions/storage.service';\n\nimport { ConstantsService } from './constants.service';\n\nimport { sequentialize } from '../misc/sequentialize';\nimport { Utils } from '../misc/utils';\nimport { EEFLongWordList } from '../misc/wordlist';\n\nconst Keys = {\n key: 'key', // Master Key\n encOrgKeys: 'encOrgKeys',\n encPrivateKey: 'encPrivateKey',\n encKey: 'encKey', // Generated Symmetric Key\n keyHash: 'keyHash',\n};\n\nexport class CryptoService implements CryptoServiceAbstraction {\n private key: SymmetricCryptoKey;\n private encKey: SymmetricCryptoKey;\n private legacyEtmKey: SymmetricCryptoKey;\n private keyHash: string;\n private publicKey: ArrayBuffer;\n private privateKey: ArrayBuffer;\n private orgKeys: Map<string, SymmetricCryptoKey>;\n\n constructor(private storageService: StorageService, private secureStorageService: StorageService,\n private cryptoFunctionService: CryptoFunctionService) { }\n\n async setKey(key: SymmetricCryptoKey): Promise<any> {\n this.key = key;\n\n const option = await this.storageService.get<number>(ConstantsService.vaultTimeoutKey);\n if (option != null) {\n // if we have a lock option set, we do not store the key\n return;\n }\n\n return this.secureStorageService.save(Keys.key, key.keyB64);\n }\n\n setKeyHash(keyHash: string): Promise<{}> {\n this.keyHash = keyHash;\n return this.storageService.save(Keys.keyHash, keyHash);\n }\n\n async setEncKey(encKey: string): Promise<{}> {\n if (encKey == null) {\n return;\n }\n\n await this.storageService.save(Keys.encKey, encKey);\n this.encKey = null;\n }\n\n async setEncPrivateKey(encPrivateKey: string): Promise<{}> {\n if (encPrivateKey == null) {\n return;\n }\n\n await this.storageService.save(Keys.encPrivateKey, encPrivateKey);\n this.privateKey = null;\n }\n\n setOrgKeys(orgs: ProfileOrganizationResponse[]): Promise<{}> {\n const orgKeys: any = {};\n orgs.forEach((org) => {\n orgKeys[org.id] = org.key;\n });\n\n this.orgKeys = null;\n return this.storageService.save(Keys.encOrgKeys, orgKeys);\n }\n\n async getKey(): Promise<SymmetricCryptoKey> {\n if (this.key != null) {\n return this.key;\n }\n\n const key = await this.secureStorageService.get<string>(Keys.key);\n if (key != null) {\n this.key = new SymmetricCryptoKey(Utils.fromB64ToArray(key).buffer);\n }\n\n return key == null ? null : this.key;\n }\n\n async getKeyHash(): Promise<string> {\n if (this.keyHash != null) {\n return this.keyHash;\n }\n\n const keyHash = await this.storageService.get<string>(Keys.keyHash);\n if (keyHash != null) {\n this.keyHash = keyHash;\n }\n\n return keyHash == null ? null : this.keyHash;\n }\n\n @sequentialize(() => 'getEncKey')\n async getEncKey(key: SymmetricCryptoKey = null): Promise<SymmetricCryptoKey> {\n if (this.encKey != null) {\n return this.encKey;\n }\n\n const encKey = await this.storageService.get<string>(Keys.encKey);\n if (encKey == null) {\n return null;\n }\n\n if (key == null) {\n key = await this.getKey();\n }\n if (key == null) {\n return null;\n }\n\n let decEncKey: ArrayBuffer;\n const encKeyCipher = new CipherString(encKey);\n if (encKeyCipher.encryptionType === EncryptionType.AesCbc256_B64) {\n decEncKey = await this.decryptToBytes(encKeyCipher, key);\n } else if (encKeyCipher.encryptionType === EncryptionType.AesCbc256_HmacSha256_B64) {\n const newKey = await this.stretchKey(key);\n decEncKey = await this.decryptToBytes(encKeyCipher, newKey);\n } else {\n throw new Error('Unsupported encKey type.');\n }\n\n if (decEncKey == null) {\n return null;\n }\n this.encKey = new SymmetricCryptoKey(decEncKey);\n return this.encKey;\n }\n\n async getPublicKey(): Promise<ArrayBuffer> {\n if (this.publicKey != null) {\n return this.publicKey;\n }\n\n const privateKey = await this.getPrivateKey();\n if (privateKey == null) {\n return null;\n }\n\n this.publicKey = await this.cryptoFunctionService.rsaExtractPublicKey(privateKey);\n return this.publicKey;\n }\n\n async getPrivateKey(): Promise<ArrayBuffer> {\n if (this.privateKey != null) {\n return this.privateKey;\n }\n\n const encPrivateKey = await this.storageService.get<string>(Keys.encPrivateKey);\n if (encPrivateKey == null) {\n return null;\n }\n\n this.privateKey = await this.decryptToBytes(new CipherString(encPrivateKey), null);\n return this.privateKey;\n }\n\n async getFingerprint(userId: string, publicKey?: ArrayBuffer): Promise<string[]> {\n if (publicKey == null) {\n publicKey = await this.getPublicKey();\n }\n if (publicKey === null) {\n throw new Error('No public key available.');\n }\n const keyFingerprint = await this.cryptoFunctionService.hash(publicKey, 'sha256');\n const userFingerprint = await this.hkdfExpand(keyFingerprint, Utils.fromUtf8ToArray(userId), 32);\n return this.hashPhrase(userFingerprint.buffer);\n }\n\n @sequentialize(() => 'getOrgKeys')\n async getOrgKeys(): Promise<Map<string, SymmetricCryptoKey>> {\n if (this.orgKeys != null && this.orgKeys.size > 0) {\n return this.orgKeys;\n }\n\n const encOrgKeys = await this.storageService.get<any>(Keys.encOrgKeys);\n if (encOrgKeys == null) {\n return null;\n }\n\n const orgKeys: Map<string, SymmetricCryptoKey> = new Map<string, SymmetricCryptoKey>();\n let setKey = false;\n\n for (const orgId in encOrgKeys) {\n if (!encOrgKeys.hasOwnProperty(orgId)) {\n continue;\n }\n\n const decValue = await this.rsaDecrypt(encOrgKeys[orgId]);\n orgKeys.set(orgId, new SymmetricCryptoKey(decValue));\n setKey = true;\n }\n\n if (setKey) {\n this.orgKeys = orgKeys;\n }\n\n return this.orgKeys;\n }\n\n async getOrgKey(orgId: string): Promise<SymmetricCryptoKey> {\n if (orgId == null) {\n return null;\n }\n\n const orgKeys = await this.getOrgKeys();\n if (orgKeys == null || !orgKeys.has(orgId)) {\n return null;\n }\n\n return orgKeys.get(orgId);\n }\n\n async hasKey(): Promise<boolean> {\n return (await this.getKey()) != null;\n }\n\n async hasEncKey(): Promise<boolean> {\n const encKey = await this.storageService.get<string>(Keys.encKey);\n return encKey != null;\n }\n\n clearKey(): Promise<any> {\n this.key = this.legacyEtmKey = null;\n return this.secureStorageService.remove(Keys.key);\n }\n\n clearKeyHash(): Promise<any> {\n this.keyHash = null;\n return this.storageService.remove(Keys.keyHash);\n }\n\n clearEncKey(memoryOnly?: boolean): Promise<any> {\n this.encKey = null;\n if (memoryOnly) {\n return Promise.resolve();\n }\n return this.storageService.remove(Keys.encKey);\n }\n\n clearKeyPair(memoryOnly?: boolean): Promise<any> {\n this.privateKey = null;\n this.publicKey = null;\n if (memoryOnly) {\n return Promise.resolve();\n }\n return this.storageService.remove(Keys.encPrivateKey);\n }\n\n clearOrgKeys(memoryOnly?: boolean): Promise<any> {\n this.orgKeys = null;\n if (memoryOnly) {\n return Promise.resolve();\n }\n return this.storageService.remove(Keys.encOrgKeys);\n }\n\n clearPinProtectedKey(): Promise<any> {\n return this.storageService.remove(ConstantsService.pinProtectedKey);\n }\n\n clearKeys(): Promise<any> {\n return Promise.all([\n this.clearKey(),\n this.clearKeyHash(),\n this.clearOrgKeys(),\n this.clearEncKey(),\n this.clearKeyPair(),\n this.clearPinProtectedKey(),\n ]);\n }\n\n async toggleKey(): Promise<any> {\n const key = await this.getKey();\n const option = await this.storageService.get(ConstantsService.vaultTimeoutKey);\n if (option != null || option === 0) {\n // if we have a lock option set, clear the key\n await this.clearKey();\n this.key = key;\n return;\n }\n\n await this.setKey(key);\n }\n\n async makeKey(password: string, salt: string, kdf: KdfType, kdfIterations: number):\n Promise<SymmetricCryptoKey> {\n let key: ArrayBuffer = null;\n if (kdf == null || kdf === KdfType.PBKDF2_SHA256) {\n if (kdfIterations == null) {\n kdfIterations = 5000;\n } else if (kdfIterations < 5000) {\n throw new Error('PBKDF2 iteration minimum is 5000.');\n }\n key = await this.cryptoFunctionService.pbkdf2(password, salt, 'sha256', kdfIterations);\n } else {\n throw new Error('Unknown Kdf.');\n }\n return new SymmetricCryptoKey(key);\n }\n\n async makeKeyFromPin(pin: string, salt: string, kdf: KdfType, kdfIterations: number,\n protectedKeyCs: CipherString = null):\n Promise<SymmetricCryptoKey> {\n if (protectedKeyCs == null) {\n const pinProtectedKey = await this.storageService.get<string>(ConstantsService.pinProtectedKey);\n if (pinProtectedKey == null) {\n throw new Error('No PIN protected key found.');\n }\n protectedKeyCs = new CipherString(pinProtectedKey);\n }\n const pinKey = await this.makePinKey(pin, salt, kdf, kdfIterations);\n const decKey = await this.decryptToBytes(protectedKeyCs, pinKey);\n return new SymmetricCryptoKey(decKey);\n }\n\n async makeShareKey(): Promise<[CipherString, SymmetricCryptoKey]> {\n const shareKey = await this.cryptoFunctionService.randomBytes(64);\n const publicKey = await this.getPublicKey();\n const encShareKey = await this.rsaEncrypt(shareKey, publicKey);\n return [encShareKey, new SymmetricCryptoKey(shareKey)];\n }\n\n async makeKeyPair(key?: SymmetricCryptoKey): Promise<[string, CipherString]> {\n const keyPair = await this.cryptoFunctionService.rsaGenerateKeyPair(2048);\n const publicB64 = Utils.fromBufferToB64(keyPair[0]);\n const privateEnc = await this.encrypt(keyPair[1], key);\n return [publicB64, privateEnc];\n }\n\n async makePinKey(pin: string, salt: string, kdf: KdfType, kdfIterations: number): Promise<SymmetricCryptoKey> {\n const pinKey = await this.makeKey(pin, salt, kdf, kdfIterations);\n return await this.stretchKey(pinKey);\n }\n\n async hashPassword(password: string, key: SymmetricCryptoKey): Promise<string> {\n if (key == null) {\n key = await this.getKey();\n }\n if (password == null || key == null) {\n throw new Error('Invalid parameters.');\n }\n\n const hash = await this.cryptoFunctionService.pbkdf2(key.key, password, 'sha256', 1);\n return Utils.fromBufferToB64(hash);\n }\n\n async makeEncKey(key: SymmetricCryptoKey): Promise<[SymmetricCryptoKey, CipherString]> {\n const theKey = await this.getKeyForEncryption(key);\n const encKey = await this.cryptoFunctionService.randomBytes(64);\n return this.buildEncKey(theKey, encKey);\n }\n\n async remakeEncKey(key: SymmetricCryptoKey): Promise<[SymmetricCryptoKey, CipherString]> {\n const encKey = await this.getEncKey();\n return this.buildEncKey(key, encKey.key);\n }\n\n async encrypt(plainValue: string | ArrayBuffer, key?: SymmetricCryptoKey): Promise<CipherString> {\n if (plainValue == null) {\n return Promise.resolve(null);\n }\n\n let plainBuf: ArrayBuffer;\n if (typeof (plainValue) === 'string') {\n plainBuf = Utils.fromUtf8ToArray(plainValue).buffer;\n } else {\n plainBuf = plainValue;\n }\n\n const encObj = await this.aesEncrypt(plainBuf, key);\n const iv = Utils.fromBufferToB64(encObj.iv);\n const data = Utils.fromBufferToB64(encObj.data);\n const mac = encObj.mac != null ? Utils.fromBufferToB64(encObj.mac) : null;\n return new CipherString(encObj.key.encType, data, iv, mac);\n }\n\n async encryptToBytes(plainValue: ArrayBuffer, key?: SymmetricCryptoKey): Promise<ArrayBuffer> {\n const encValue = await this.aesEncrypt(plainValue, key);\n let macLen = 0;\n if (encValue.mac != null) {\n macLen = encValue.mac.byteLength;\n }\n\n const encBytes = new Uint8Array(1 + encValue.iv.byteLength + macLen + encValue.data.byteLength);\n encBytes.set([encValue.key.encType]);\n encBytes.set(new Uint8Array(encValue.iv), 1);\n if (encValue.mac != null) {\n encBytes.set(new Uint8Array(encValue.mac), 1 + encValue.iv.byteLength);\n }\n\n encBytes.set(new Uint8Array(encValue.data), 1 + encValue.iv.byteLength + macLen);\n return encBytes.buffer;\n }\n\n async rsaEncrypt(data: ArrayBuffer, publicKey?: ArrayBuffer): Promise<CipherString> {\n if (publicKey == null) {\n publicKey = await this.getPublicKey();\n }\n if (publicKey == null) {\n throw new Error('Public key unavailable.');\n }\n\n const encBytes = await this.cryptoFunctionService.rsaEncrypt(data, publicKey, 'sha1');\n return new CipherString(EncryptionType.Rsa2048_OaepSha1_B64, Utils.fromBufferToB64(encBytes));\n }\n\n async decryptToBytes(cipherString: CipherString, key?: SymmetricCryptoKey): Promise<ArrayBuffer> {\n const iv = Utils.fromB64ToArray(cipherString.iv).buffer;\n const data = Utils.fromB64ToArray(cipherString.data).buffer;\n const mac = cipherString.mac ? Utils.fromB64ToArray(cipherString.mac).buffer : null;\n const decipher = await this.aesDecryptToBytes(cipherString.encryptionType, data, iv, mac, key);\n if (decipher == null) {\n return null;\n }\n\n return decipher;\n }\n\n async decryptToUtf8(cipherString: CipherString, key?: SymmetricCryptoKey): Promise<string> {\n return await this.aesDecryptToUtf8(cipherString.encryptionType, cipherString.data,\n cipherString.iv, cipherString.mac, key);\n }\n\n async decryptFromBytes(encBuf: ArrayBuffer, key: SymmetricCryptoKey): Promise<ArrayBuffer> {\n if (encBuf == null) {\n throw new Error('no encBuf.');\n }\n\n const encBytes = new Uint8Array(encBuf);\n const encType = encBytes[0];\n let ctBytes: Uint8Array = null;\n let ivBytes: Uint8Array = null;\n let macBytes: Uint8Array = null;\n\n switch (encType) {\n case EncryptionType.AesCbc128_HmacSha256_B64:\n case EncryptionType.AesCbc256_HmacSha256_B64:\n if (encBytes.length <= 49) { // 1 + 16 + 32 + ctLength\n return null;\n }\n\n ivBytes = encBytes.slice(1, 17);\n macBytes = encBytes.slice(17, 49);\n ctBytes = encBytes.slice(49);\n break;\n case EncryptionType.AesCbc256_B64:\n if (encBytes.length <= 17) { // 1 + 16 + ctLength\n return null;\n }\n\n ivBytes = encBytes.slice(1, 17);\n ctBytes = encBytes.slice(17);\n break;\n default:\n return null;\n }\n\n return await this.aesDecryptToBytes(encType, ctBytes.buffer, ivBytes.buffer,\n macBytes != null ? macBytes.buffer : null, key);\n }\n\n // EFForg/OpenWireless\n // ref https://github.com/EFForg/OpenWireless/blob/master/app/js/diceware.js\n async randomNumber(min: number, max: number): Promise<number> {\n let rval = 0;\n const range = max - min + 1;\n const bitsNeeded = Math.ceil(Math.log2(range));\n if (bitsNeeded > 53) {\n throw new Error('We cannot generate numbers larger than 53 bits.');\n }\n\n const bytesNeeded = Math.ceil(bitsNeeded / 8);\n const mask = Math.pow(2, bitsNeeded) - 1;\n // 7776 -> (2^13 = 8192) -1 == 8191 or 0x00001111 11111111\n\n // Fill a byte array with N random numbers\n const byteArray = new Uint8Array(await this.cryptoFunctionService.randomBytes(bytesNeeded));\n\n let p = (bytesNeeded - 1) * 8;\n for (let i = 0; i < bytesNeeded; i++) {\n rval += byteArray[i] * Math.pow(2, p);\n p -= 8;\n }\n\n // Use & to apply the mask and reduce the number of recursive lookups\n // tslint:disable-next-line\n rval = rval & mask;\n\n if (rval >= range) {\n // Integer out of acceptable range\n return this.randomNumber(min, max);\n }\n\n // Return an integer that falls within the range\n return min + rval;\n }\n\n // Helpers\n\n private async aesEncrypt(data: ArrayBuffer, key: SymmetricCryptoKey): Promise<EncryptedObject> {\n const obj = new EncryptedObject();\n obj.key = await this.getKeyForEncryption(key);\n obj.iv = await this.cryptoFunctionService.randomBytes(16);\n obj.data = await this.cryptoFunctionService.aesEncrypt(data, obj.iv, obj.key.encKey);\n\n if (obj.key.macKey != null) {\n const macData = new Uint8Array(obj.iv.byteLength + obj.data.byteLength);\n macData.set(new Uint8Array(obj.iv), 0);\n macData.set(new Uint8Array(obj.data), obj.iv.byteLength);\n obj.mac = await this.cryptoFunctionService.hmac(macData.buffer, obj.key.macKey, 'sha256');\n }\n\n return obj;\n }\n\n private async aesDecryptToUtf8(encType: EncryptionType, data: string, iv: string, mac: string,\n key: SymmetricCryptoKey): Promise<string> {\n const keyForEnc = await this.getKeyForEncryption(key);\n const theKey = this.resolveLegacyKey(encType, keyForEnc);\n\n if (theKey.macKey != null && mac == null) {\n // tslint:disable-next-line\n console.error('mac required.');\n return null;\n }\n\n if (theKey.encType !== encType) {\n // tslint:disable-next-line\n console.error('encType unavailable.');\n return null;\n }\n\n const fastParams = this.cryptoFunctionService.aesDecryptFastParameters(data, iv, mac, theKey);\n if (fastParams.macKey != null && fastParams.mac != null) {\n const computedMac = await this.cryptoFunctionService.hmacFast(fastParams.macData,\n fastParams.macKey, 'sha256');\n const macsEqual = await this.cryptoFunctionService.compareFast(fastParams.mac, computedMac);\n if (!macsEqual) {\n // tslint:disable-next-line\n console.error('mac failed.');\n return null;\n }\n }\n\n return this.cryptoFunctionService.aesDecryptFast(fastParams);\n }\n\n private async aesDecryptToBytes(encType: EncryptionType, data: ArrayBuffer, iv: ArrayBuffer,\n mac: ArrayBuffer, key: SymmetricCryptoKey): Promise<ArrayBuffer> {\n const keyForEnc = await this.getKeyForEncryption(key);\n const theKey = this.resolveLegacyKey(encType, keyForEnc);\n\n if (theKey.macKey != null && mac == null) {\n return null;\n }\n\n if (theKey.encType !== encType) {\n return null;\n }\n\n if (theKey.macKey != null && mac != null) {\n const macData = new Uint8Array(iv.byteLength + data.byteLength);\n macData.set(new Uint8Array(iv), 0);\n macData.set(new Uint8Array(data), iv.byteLength);\n const computedMac = await this.cryptoFunctionService.hmac(macData.buffer, theKey.macKey, 'sha256');\n if (computedMac === null) {\n return null;\n }\n\n const macsMatch = await this.cryptoFunctionService.compare(mac, computedMac);\n if (!macsMatch) {\n // tslint:disable-next-line\n console.error('mac failed.');\n return null;\n }\n }\n\n return await this.cryptoFunctionService.aesDecrypt(data, iv, theKey.encKey);\n }\n\n private async rsaDecrypt(encValue: string): Promise<ArrayBuffer> {\n const headerPieces = encValue.split('.');\n let encType: EncryptionType = null;\n let encPieces: string[];\n\n if (headerPieces.length === 1) {\n encType = EncryptionType.Rsa2048_OaepSha256_B64;\n encPieces = [headerPieces[0]];\n } else if (headerPieces.length === 2) {\n try {\n encType = parseInt(headerPieces[0], null);\n encPieces = headerPieces[1].split('|');\n } catch (e) { }\n }\n\n switch (encType) {\n case EncryptionType.Rsa2048_OaepSha256_B64:\n case EncryptionType.Rsa2048_OaepSha1_B64:\n // HmacSha256 types are deprecated\n case EncryptionType.Rsa2048_OaepSha256_HmacSha256_B64:\n case EncryptionType.Rsa2048_OaepSha1_HmacSha256_B64:\n break;\n default:\n throw new Error('encType unavailable.');\n }\n\n if (encPieces == null || encPieces.length <= 0) {\n throw new Error('encPieces unavailable.');\n }\n\n const data = Utils.fromB64ToArray(encPieces[0]).buffer;\n const privateKey = await this.getPrivateKey();\n if (privateKey == null) {\n throw new Error('No private key.');\n }\n\n let alg: 'sha1' | 'sha256' = 'sha1';\n switch (encType) {\n case EncryptionType.Rsa2048_OaepSha256_B64:\n case EncryptionType.Rsa2048_OaepSha256_HmacSha256_B64:\n alg = 'sha256';\n break;\n case EncryptionType.Rsa2048_OaepSha1_B64:\n case EncryptionType.Rsa2048_OaepSha1_HmacSha256_B64:\n break;\n default:\n throw new Error('encType unavailable.');\n }\n\n return this.cryptoFunctionService.rsaDecrypt(data, privateKey, alg);\n }\n\n private async getKeyForEncryption(key?: SymmetricCryptoKey): Promise<SymmetricCryptoKey> {\n if (key != null) {\n return key;\n }\n\n const encKey = await this.getEncKey();\n if (encKey != null) {\n return encKey;\n }\n\n return await this.getKey();\n }\n\n private resolveLegacyKey(encType: EncryptionType, key: SymmetricCryptoKey): SymmetricCryptoKey {\n if (encType === EncryptionType.AesCbc128_HmacSha256_B64 &&\n key.encType === EncryptionType.AesCbc256_B64) {\n // Old encrypt-then-mac scheme, make a new key\n if (this.legacyEtmKey == null) {\n this.legacyEtmKey = new SymmetricCryptoKey(key.key, EncryptionType.AesCbc128_HmacSha256_B64);\n }\n return this.legacyEtmKey;\n }\n\n return key;\n }\n\n private async stretchKey(key: SymmetricCryptoKey): Promise<SymmetricCryptoKey> {\n const newKey = new Uint8Array(64);\n newKey.set(await this.hkdfExpand(key.key, Utils.fromUtf8ToArray('enc'), 32));\n newKey.set(await this.hkdfExpand(key.key, Utils.fromUtf8ToArray('mac'), 32), 32);\n return new SymmetricCryptoKey(newKey.buffer);\n }\n\n // ref: https://tools.ietf.org/html/rfc5869\n private async hkdfExpand(prk: ArrayBuffer, info: Uint8Array, size: number) {\n const hashLen = 32; // sha256\n const okm = new Uint8Array(size);\n let previousT = new Uint8Array(0);\n const n = Math.ceil(size / hashLen);\n for (let i = 0; i < n; i++) {\n const t = new Uint8Array(previousT.length + info.length + 1);\n t.set(previousT);\n t.set(info, previousT.length);\n t.set([i + 1], t.length - 1);\n previousT = new Uint8Array(await this.cryptoFunctionService.hmac(t.buffer, prk, 'sha256'));\n okm.set(previousT, i * hashLen);\n }\n return okm;\n }\n\n private async hashPhrase(hash: ArrayBuffer, minimumEntropy: number = 64) {\n const entropyPerWord = Math.log(EEFLongWordList.length) / Math.log(2);\n let numWords = Math.ceil(minimumEntropy / entropyPerWord);\n\n const hashArr = Array.from(new Uint8Array(hash));\n const entropyAvailable = hashArr.length * 4;\n if (numWords * entropyPerWord > entropyAvailable) {\n throw new Error('Output entropy of hash function is too small');\n }\n\n const phrase: string[] = [];\n let hashNumber = bigInt.fromArray(hashArr, 256);\n while (numWords--) {\n const remainder = hashNumber.mod(EEFLongWordList.length);\n hashNumber = hashNumber.divide(EEFLongWordList.length);\n phrase.push(EEFLongWordList[remainder as any]);\n }\n return phrase;\n }\n\n private async buildEncKey(key: SymmetricCryptoKey, encKey: ArrayBuffer)\n : Promise<[SymmetricCryptoKey, CipherString]> {\n let encKeyEnc: CipherString = null;\n if (key.key.byteLength === 32) {\n const newKey = await this.stretchKey(key);\n encKeyEnc = await this.encrypt(encKey, newKey);\n } else if (key.key.byteLength === 64) {\n encKeyEnc = await this.encrypt(encKey, key);\n } else {\n throw new Error('Invalid key size.');\n }\n return [new SymmetricCryptoKey(encKey), encKeyEnc];\n }\n}\n","import { EnvironmentUrls } from '../models/domain/environmentUrls';\n\nimport { ConstantsService } from './constants.service';\n\nimport { ApiService } from '../abstractions/api.service';\nimport { EnvironmentService as EnvironmentServiceAbstraction } from '../abstractions/environment.service';\nimport { NotificationsService } from '../abstractions/notifications.service';\nimport { StorageService } from '../abstractions/storage.service';\n\nexport class EnvironmentService implements EnvironmentServiceAbstraction {\n baseUrl: string;\n webVaultUrl: string;\n apiUrl: string;\n identityUrl: string;\n iconsUrl: string;\n notificationsUrl: string;\n eventsUrl: string;\n\n constructor(private apiService: ApiService, private storageService: StorageService,\n private notificationsService: NotificationsService) { }\n\n getWebVaultUrl(): string {\n if (this.webVaultUrl != null) {\n return this.webVaultUrl;\n } else if (this.baseUrl) {\n return this.baseUrl;\n }\n return null;\n }\n\n async setUrlsFromStorage(): Promise<void> {\n const urlsObj: any = await this.storageService.get(ConstantsService.environmentUrlsKey);\n const urls = urlsObj || {\n base: null,\n api: null,\n identity: null,\n icons: null,\n notifications: null,\n events: null,\n webVault: null,\n };\n\n const envUrls = new EnvironmentUrls();\n\n if (urls.base) {\n this.baseUrl = envUrls.base = urls.base;\n this.apiService.setUrls(envUrls);\n return;\n }\n\n this.webVaultUrl = urls.webVault;\n this.apiUrl = envUrls.api = urls.api;\n this.identityUrl = envUrls.identity = urls.identity;\n this.iconsUrl = urls.icons;\n this.notificationsUrl = urls.notifications;\n this.eventsUrl = envUrls.events = urls.events;\n this.apiService.setUrls(envUrls);\n }\n\n async setUrls(urls: any): Promise<any> {\n urls.base = this.formatUrl(urls.base);\n urls.webVault = this.formatUrl(urls.webVault);\n urls.api = this.formatUrl(urls.api);\n urls.identity = this.formatUrl(urls.identity);\n urls.icons = this.formatUrl(urls.icons);\n urls.notifications = this.formatUrl(urls.notifications);\n urls.events = this.formatUrl(urls.events);\n\n await this.storageService.save(ConstantsService.environmentUrlsKey, {\n base: urls.base,\n api: urls.api,\n identity: urls.identity,\n webVault: urls.webVault,\n icons: urls.icons,\n notifications: urls.notifications,\n events: urls.events,\n });\n\n this.baseUrl = urls.base;\n this.webVaultUrl = urls.webVault;\n this.apiUrl = urls.api;\n this.identityUrl = urls.identity;\n this.iconsUrl = urls.icons;\n this.notificationsUrl = urls.notifications;\n this.eventsUrl = urls.events;\n\n const envUrls = new EnvironmentUrls();\n if (this.baseUrl) {\n envUrls.base = this.baseUrl;\n } else {\n envUrls.api = this.apiUrl;\n envUrls.identity = this.identityUrl;\n envUrls.events = this.eventsUrl;\n }\n\n this.apiService.setUrls(envUrls);\n if (this.notificationsService != null) {\n this.notificationsService.init(this);\n }\n return urls;\n }\n\n private formatUrl(url: string): string {\n if (url == null || url === '') {\n return null;\n }\n\n url = url.replace(/\\/+$/g, '');\n if (!url.startsWith('http://') && !url.startsWith('https://')) {\n url = 'https://' + url;\n }\n\n return url.trim();\n }\n}\n","import { CardView } from '../view/cardView';\n\nexport class Card {\n static template(): Card {\n const req = new Card();\n req.cardholderName = 'John Doe';\n req.brand = 'visa';\n req.number = '4242424242424242';\n req.expMonth = '04';\n req.expYear = '2023';\n req.code = '123';\n return req;\n }\n\n static toView(req: Card, view = new CardView()) {\n view.cardholderName = req.cardholderName;\n view.brand = req.brand;\n view.number = req.number;\n view.expMonth = req.expMonth;\n view.expYear = req.expYear;\n view.code = req.code;\n return view;\n }\n\n cardholderName: string;\n brand: string;\n number: string;\n expMonth: string;\n expYear: string;\n code: string;\n\n constructor(o?: CardView) {\n if (o == null) {\n return;\n }\n\n this.cardholderName = o.cardholderName;\n this.brand = o.brand;\n this.number = o.number;\n this.expMonth = o.expMonth;\n this.expYear = o.expYear;\n this.code = o.code;\n }\n}\n","import { FieldType } from '../../enums/fieldType';\n\nimport { FieldView } from '../view/fieldView';\n\nexport class Field {\n static template(): Field {\n const req = new Field();\n req.name = 'Field name';\n req.value = 'Some value';\n req.type = FieldType.Text;\n return req;\n }\n\n static toView(req: Field, view = new FieldView()) {\n view.type = req.type;\n view.value = req.value;\n view.name = req.name;\n return view;\n }\n\n name: string;\n value: string;\n type: FieldType;\n\n constructor(o?: FieldView) {\n if (o == null) {\n return;\n }\n\n this.name = o.name;\n this.value = o.value;\n this.type = o.type;\n }\n}\n","import { IdentityView } from '../view/identityView';\n\nexport class Identity {\n static template(): Identity {\n const req = new Identity();\n req.title = 'Mr';\n req.firstName = 'John';\n req.middleName = 'William';\n req.lastName = 'Doe';\n req.address1 = '123 Any St';\n req.address2 = 'Apt #123';\n req.address3 = null;\n req.city = 'New York';\n req.state = 'NY';\n req.postalCode = '10001';\n req.country = 'US';\n req.company = 'Acme Inc.';\n req.email = 'john@company.com';\n req.phone = '5555551234';\n req.ssn = '000-123-4567';\n req.username = 'jdoe';\n req.passportNumber = 'US-123456789';\n req.licenseNumber = 'D123-12-123-12333';\n return req;\n }\n\n static toView(req: Identity, view = new IdentityView()) {\n view.title = req.title;\n view.firstName = req.firstName;\n view.middleName = req.middleName;\n view.lastName = req.lastName;\n view.address1 = req.address1;\n view.address2 = req.address2;\n view.address3 = req.address3;\n view.city = req.city;\n view.state = req.state;\n view.postalCode = req.postalCode;\n view.country = req.country;\n view.company = req.company;\n view.email = req.email;\n view.phone = req.phone;\n view.ssn = req.ssn;\n view.username = req.username;\n view.passportNumber = req.passportNumber;\n view.licenseNumber = req.licenseNumber;\n return view;\n }\n\n title: string;\n firstName: string;\n middleName: string;\n lastName: string;\n address1: string;\n address2: string;\n address3: string;\n city: string;\n state: string;\n postalCode: string;\n country: string;\n company: string;\n email: string;\n phone: string;\n ssn: string;\n username: string;\n passportNumber: string;\n licenseNumber: string;\n\n constructor(o?: IdentityView) {\n if (o == null) {\n return;\n }\n\n this.title = o.title;\n this.firstName = o.firstName;\n this.middleName = o.middleName;\n this.lastName = o.lastName;\n this.address1 = o.address1;\n this.address2 = o.address2;\n this.address3 = o.address3;\n this.city = o.city;\n this.state = o.state;\n this.postalCode = o.postalCode;\n this.country = o.country;\n this.company = o.company;\n this.email = o.email;\n this.phone = o.phone;\n this.ssn = o.ssn;\n this.username = o.username;\n this.passportNumber = o.passportNumber;\n this.licenseNumber = o.licenseNumber;\n }\n}\n","import { UriMatchType } from '../../enums/uriMatchType';\n\nimport { LoginUriView } from '../view/loginUriView';\n\nexport class LoginUri {\n static template(): LoginUri {\n const req = new LoginUri();\n req.uri = 'https://google.com';\n req.match = null;\n return req;\n }\n\n static toView(req: LoginUri, view = new LoginUriView()) {\n view.uri = req.uri;\n view.match = req.match;\n return view;\n }\n\n uri: string;\n match: UriMatchType = null;\n\n constructor(o?: LoginUriView) {\n if (o == null) {\n return;\n }\n\n this.uri = o.uri;\n this.match = o.match;\n }\n}\n","import { LoginUri } from './loginUri';\n\nimport { LoginView } from '../view/loginView';\n\nexport class Login {\n static template(): Login {\n const req = new Login();\n req.uris = [];\n req.username = 'jdoe';\n req.password = 'myp@ssword123';\n req.totp = 'JBSWY3DPEHPK3PXP';\n return req;\n }\n\n static toView(req: Login, view = new LoginView()) {\n if (req.uris != null) {\n view.uris = req.uris.map((u) => LoginUri.toView(u));\n }\n view.username = req.username;\n view.password = req.password;\n view.totp = req.totp;\n return view;\n }\n\n uris: LoginUri[];\n username: string;\n password: string;\n totp: string;\n\n constructor(o?: LoginView) {\n if (o == null) {\n return;\n }\n\n if (o.uris != null) {\n this.uris = o.uris.map((u) => new LoginUri(u));\n }\n\n this.username = o.username;\n this.password = o.password;\n this.totp = o.totp;\n }\n}\n","export enum SecureNoteType {\n Generic = 0,\n}\n","import { SecureNoteType } from '../../enums/secureNoteType';\n\nimport { SecureNoteView } from '../view/secureNoteView';\n\nexport class SecureNote {\n static template(): SecureNote {\n const req = new SecureNote();\n req.type = SecureNoteType.Generic;\n return req;\n }\n\n static toView(req: SecureNote, view = new SecureNoteView()) {\n view.type = req.type;\n return view;\n }\n\n type: SecureNoteType;\n\n constructor(o?: SecureNoteView) {\n if (o == null) {\n return;\n }\n\n this.type = o.type;\n }\n}\n","import { CipherType } from '../../enums/cipherType';\n\nimport { CipherView } from '../view/cipherView';\n\nimport { Card } from './card';\nimport { Field } from './field';\nimport { Identity } from './identity';\nimport { Login } from './login';\nimport { SecureNote } from './secureNote';\n\nexport class Cipher {\n static template(): Cipher {\n const req = new Cipher();\n req.organizationId = null;\n req.folderId = null;\n req.type = CipherType.Login;\n req.name = 'Item name';\n req.notes = 'Some notes about this item.';\n req.favorite = false;\n req.fields = [];\n req.login = null;\n req.secureNote = null;\n req.card = null;\n req.identity = null;\n return req;\n }\n\n static toView(req: Cipher, view = new CipherView()) {\n view.type = req.type;\n view.folderId = req.folderId;\n if (view.organizationId == null) {\n view.organizationId = req.organizationId;\n }\n view.name = req.name;\n view.notes = req.notes;\n view.favorite = req.favorite;\n\n if (req.fields != null) {\n view.fields = req.fields.map((f) => Field.toView(f));\n }\n\n switch (req.type) {\n case CipherType.Login:\n view.login = Login.toView(req.login);\n break;\n case CipherType.SecureNote:\n view.secureNote = SecureNote.toView(req.secureNote);\n break;\n case CipherType.Card:\n view.card = Card.toView(req.card);\n break;\n case CipherType.Identity:\n view.identity = Identity.toView(req.identity);\n break;\n }\n\n return view;\n }\n\n type: CipherType;\n folderId: string;\n organizationId: string;\n name: string;\n notes: string;\n favorite: boolean;\n fields: Field[];\n login: Login;\n secureNote: SecureNote;\n card: Card;\n identity: Identity;\n\n // Use build method instead of ctor so that we can control order of JSON stringify for pretty print\n build(o: CipherView) {\n this.organizationId = o.organizationId;\n this.folderId = o.folderId;\n this.type = o.type;\n this.name = o.name;\n this.notes = o.notes;\n this.favorite = o.favorite;\n\n if (o.fields != null) {\n this.fields = o.fields.map((f) => new Field(f));\n }\n\n switch (o.type) {\n case CipherType.Login:\n this.login = new Login(o.login);\n break;\n case CipherType.SecureNote:\n this.secureNote = new SecureNote(o.secureNote);\n break;\n case CipherType.Card:\n this.card = new Card(o.card);\n break;\n case CipherType.Identity:\n this.identity = new Identity(o.identity);\n break;\n }\n }\n}\n","import { Cipher } from './cipher';\n\nimport { CipherView } from '../view/cipherView';\n\nexport class CipherWithIds extends Cipher {\n id: string;\n collectionIds: string[];\n\n // Use build method instead of ctor so that we can control order of JSON stringify for pretty print\n build(o: CipherView) {\n this.id = o.id;\n super.build(o);\n this.collectionIds = o.collectionIds;\n }\n}\n","import { CollectionView } from '../view/collectionView';\n\nexport class Collection {\n static template(): Collection {\n const req = new Collection();\n req.organizationId = '00000000-0000-0000-0000-000000000000';\n req.name = 'Collection name';\n req.externalId = null;\n return req;\n }\n\n static toView(req: Collection, view = new CollectionView()) {\n view.name = req.name;\n view.externalId = req.externalId;\n if (view.organizationId == null) {\n view.organizationId = req.organizationId;\n }\n return view;\n }\n\n organizationId: string;\n name: string;\n externalId: string;\n\n // Use build method instead of ctor so that we can control order of JSON stringify for pretty print\n build(o: CollectionView) {\n this.organizationId = o.organizationId;\n this.name = o.name;\n this.externalId = o.externalId;\n }\n}\n","import { Collection } from './collection';\n\nimport { CollectionView } from '../view/collectionView';\n\nexport class CollectionWithId extends Collection {\n id: string;\n\n // Use build method instead of ctor so that we can control order of JSON stringify for pretty print\n build(o: CollectionView) {\n this.id = o.id;\n super.build(o);\n }\n}\n","import { FolderView } from '../view/folderView';\n\nexport class Folder {\n static template(): Folder {\n const req = new Folder();\n req.name = 'Folder name';\n return req;\n }\n\n static toView(req: Folder, view = new FolderView()) {\n view.name = req.name;\n return view;\n }\n\n name: string;\n\n // Use build method instead of ctor so that we can control order of JSON stringify for pretty print\n build(o: FolderView) {\n this.name = o.name;\n }\n}\n","import { Folder } from './folder';\n\nimport { FolderView } from '../view/folderView';\n\nexport class FolderWithId extends Folder {\n id: string;\n\n // Use build method instead of ctor so that we can control order of JSON stringify for pretty print\n build(o: FolderView) {\n this.id = o.id;\n super.build(o);\n }\n}\n","import * as papa from 'papaparse';\n\nimport { CipherType } from '../enums/cipherType';\n\nimport { ApiService } from '../abstractions/api.service';\nimport { CipherService } from '../abstractions/cipher.service';\nimport { ExportService as ExportServiceAbstraction } from '../abstractions/export.service';\nimport { FolderService } from '../abstractions/folder.service';\n\nimport { CipherView } from '../models/view/cipherView';\nimport { CollectionView } from '../models/view/collectionView';\nimport { FolderView } from '../models/view/folderView';\n\nimport { Cipher } from '../models/domain/cipher';\nimport { Collection } from '../models/domain/collection';\n\nimport { CipherData } from '../models/data/cipherData';\nimport { CollectionData } from '../models/data/collectionData';\nimport { CollectionDetailsResponse } from '../models/response/collectionResponse';\n\nimport { CipherWithIds as CipherExport } from '../models/export/cipherWithIds';\nimport { CollectionWithId as CollectionExport } from '../models/export/collectionWithId';\nimport { FolderWithId as FolderExport } from '../models/export/folderWithId';\n\nexport class ExportService implements ExportServiceAbstraction {\n constructor(private folderService: FolderService, private cipherService: CipherService,\n private apiService: ApiService) { }\n\n async getExport(format: 'csv' | 'json' = 'csv'): Promise<string> {\n let decFolders: FolderView[] = [];\n let decCiphers: CipherView[] = [];\n const promises = [];\n\n promises.push(this.folderService.getAllDecrypted().then((folders) => {\n decFolders = folders;\n }));\n\n promises.push(this.cipherService.getAllDecrypted().then((ciphers) => {\n decCiphers = ciphers;\n }));\n\n await Promise.all(promises);\n\n if (format === 'csv') {\n const foldersMap = new Map<string, FolderView>();\n decFolders.forEach((f) => {\n if (f.id != null) {\n foldersMap.set(f.id, f);\n }\n });\n\n const exportCiphers: any[] = [];\n decCiphers.forEach((c) => {\n // only export logins and secure notes\n if (c.type !== CipherType.Login && c.type !== CipherType.SecureNote) {\n return;\n }\n if (c.organizationId != null) {\n return;\n }\n\n const cipher: any = {};\n cipher.folder = c.folderId != null && foldersMap.has(c.folderId) ?\n foldersMap.get(c.folderId).name : null;\n cipher.favorite = c.favorite ? 1 : null;\n this.buildCommonCipher(cipher, c);\n exportCiphers.push(cipher);\n });\n\n return papa.unparse(exportCiphers);\n } else {\n const jsonDoc: any = {\n folders: [],\n items: [],\n };\n\n decFolders.forEach((f) => {\n if (f.id == null) {\n return;\n }\n const folder = new FolderExport();\n folder.build(f);\n jsonDoc.folders.push(folder);\n });\n\n decCiphers.forEach((c) => {\n if (c.organizationId != null) {\n return;\n }\n const cipher = new CipherExport();\n cipher.build(c);\n cipher.collectionIds = null;\n jsonDoc.items.push(cipher);\n });\n\n return JSON.stringify(jsonDoc, null, ' ');\n }\n }\n\n async getOrganizationExport(organizationId: string, format: 'csv' | 'json' = 'csv'): Promise<string> {\n const decCollections: CollectionView[] = [];\n const decCiphers: CipherView[] = [];\n const promises = [];\n\n promises.push(this.apiService.getCollections(organizationId).then((collections) => {\n const collectionPromises: any = [];\n if (collections != null && collections.data != null && collections.data.length > 0) {\n collections.data.forEach((c) => {\n const collection = new Collection(new CollectionData(c as CollectionDetailsResponse));\n collectionPromises.push(collection.decrypt().then((decCol) => {\n decCollections.push(decCol);\n }));\n });\n }\n return Promise.all(collectionPromises);\n }));\n\n promises.push(this.apiService.getCiphersOrganization(organizationId).then((ciphers) => {\n const cipherPromises: any = [];\n if (ciphers != null && ciphers.data != null && ciphers.data.length > 0) {\n ciphers.data.forEach((c) => {\n const cipher = new Cipher(new CipherData(c));\n cipherPromises.push(cipher.decrypt().then((decCipher) => {\n decCiphers.push(decCipher);\n }));\n });\n }\n return Promise.all(cipherPromises);\n }));\n\n await Promise.all(promises);\n\n if (format === 'csv') {\n const collectionsMap = new Map<string, CollectionView>();\n decCollections.forEach((c) => {\n collectionsMap.set(c.id, c);\n });\n\n const exportCiphers: any[] = [];\n decCiphers.forEach((c) => {\n // only export logins and secure notes\n if (c.type !== CipherType.Login && c.type !== CipherType.SecureNote) {\n return;\n }\n\n const cipher: any = {};\n cipher.collections = [];\n if (c.collectionIds != null) {\n cipher.collections = c.collectionIds.filter((id) => collectionsMap.has(id))\n .map((id) => collectionsMap.get(id).name);\n }\n this.buildCommonCipher(cipher, c);\n exportCiphers.push(cipher);\n });\n\n return papa.unparse(exportCiphers);\n } else {\n const jsonDoc: any = {\n collections: [],\n items: [],\n };\n\n decCollections.forEach((c) => {\n const collection = new CollectionExport();\n collection.build(c);\n jsonDoc.collections.push(collection);\n });\n\n decCiphers.forEach((c) => {\n const cipher = new CipherExport();\n cipher.build(c);\n jsonDoc.items.push(cipher);\n });\n return JSON.stringify(jsonDoc, null, ' ');\n }\n }\n\n getFileName(prefix: string = null, extension: string = 'csv'): string {\n const now = new Date();\n const dateString =\n now.getFullYear() + '' + this.padNumber(now.getMonth() + 1, 2) + '' + this.padNumber(now.getDate(), 2) +\n this.padNumber(now.getHours(), 2) + '' + this.padNumber(now.getMinutes(), 2) +\n this.padNumber(now.getSeconds(), 2);\n\n return 'bitwarden' + (prefix ? ('_' + prefix) : '') + '_export_' + dateString + '.' + extension;\n }\n\n private padNumber(num: number, width: number, padCharacter: string = '0'): string {\n const numString = num.toString();\n return numString.length >= width ? numString :\n new Array(width - numString.length + 1).join(padCharacter) + numString;\n }\n\n private buildCommonCipher(cipher: any, c: CipherView) {\n cipher.type = null;\n cipher.name = c.name;\n cipher.notes = c.notes;\n cipher.fields = null;\n // Login props\n cipher.login_uri = null;\n cipher.login_username = null;\n cipher.login_password = null;\n cipher.login_totp = null;\n\n if (c.fields) {\n c.fields.forEach((f: any) => {\n if (!cipher.fields) {\n cipher.fields = '';\n } else {\n cipher.fields += '\\n';\n }\n\n cipher.fields += ((f.name || '') + ': ' + f.value);\n });\n }\n\n switch (c.type) {\n case CipherType.Login:\n cipher.type = 'login';\n cipher.login_username = c.login.username;\n cipher.login_password = c.login.password;\n cipher.login_totp = c.login.totp;\n\n if (c.login.uris) {\n cipher.login_uri = [];\n c.login.uris.forEach((u) => {\n cipher.login_uri.push(u.uri);\n });\n }\n break;\n case CipherType.SecureNote:\n cipher.type = 'note';\n break;\n default:\n return;\n }\n\n return cipher;\n }\n}\n","import { FolderResponse } from '../response/folderResponse';\n\nexport class FolderData {\n id: string;\n userId: string;\n name: string;\n revisionDate: string;\n\n constructor(response: FolderResponse, userId: string) {\n this.userId = userId;\n this.name = response.name;\n this.id = response.id;\n this.revisionDate = response.revisionDate;\n }\n}\n","import { Folder } from '../domain/folder';\n\nexport class FolderRequest {\n name: string;\n\n constructor(folder: Folder) {\n this.name = folder.name ? folder.name.encryptedString : null;\n }\n}\n","import { FolderData } from '../models/data/folderData';\n\nimport { Folder } from '../models/domain/folder';\nimport { SymmetricCryptoKey } from '../models/domain/symmetricCryptoKey';\nimport { TreeNode } from '../models/domain/treeNode';\n\nimport { FolderRequest } from '../models/request/folderRequest';\n\nimport { FolderResponse } from '../models/response/folderResponse';\n\nimport { FolderView } from '../models/view/folderView';\n\nimport { ApiService } from '../abstractions/api.service';\nimport { CipherService } from '../abstractions/cipher.service';\nimport { CryptoService } from '../abstractions/crypto.service';\nimport { FolderService as FolderServiceAbstraction } from '../abstractions/folder.service';\nimport { I18nService } from '../abstractions/i18n.service';\nimport { StorageService } from '../abstractions/storage.service';\nimport { UserService } from '../abstractions/user.service';\nimport { CipherData } from '../models/data/cipherData';\n\nimport { ServiceUtils } from '../misc/serviceUtils';\nimport { Utils } from '../misc/utils';\n\nconst Keys = {\n foldersPrefix: 'folders_',\n ciphersPrefix: 'ciphers_',\n};\nconst NestingDelimiter = '/';\n\nexport class FolderService implements FolderServiceAbstraction {\n decryptedFolderCache: FolderView[];\n\n constructor(private cryptoService: CryptoService, private userService: UserService,\n private apiService: ApiService, private storageService: StorageService,\n private i18nService: I18nService, private cipherService: CipherService) { }\n\n clearCache(): void {\n this.decryptedFolderCache = null;\n }\n\n async encrypt(model: FolderView, key?: SymmetricCryptoKey): Promise<Folder> {\n const folder = new Folder();\n folder.id = model.id;\n folder.name = await this.cryptoService.encrypt(model.name, key);\n return folder;\n }\n\n async get(id: string): Promise<Folder> {\n const userId = await this.userService.getUserId();\n const folders = await this.storageService.get<{ [id: string]: FolderData; }>(\n Keys.foldersPrefix + userId);\n if (folders == null || !folders.hasOwnProperty(id)) {\n return null;\n }\n\n return new Folder(folders[id]);\n }\n\n async getAll(): Promise<Folder[]> {\n const userId = await this.userService.getUserId();\n const folders = await this.storageService.get<{ [id: string]: FolderData; }>(\n Keys.foldersPrefix + userId);\n const response: Folder[] = [];\n for (const id in folders) {\n if (folders.hasOwnProperty(id)) {\n response.push(new Folder(folders[id]));\n }\n }\n return response;\n }\n\n async getAllDecrypted(): Promise<FolderView[]> {\n if (this.decryptedFolderCache != null) {\n return this.decryptedFolderCache;\n }\n\n const hasKey = await this.cryptoService.hasKey();\n if (!hasKey) {\n throw new Error('No key.');\n }\n\n const decFolders: FolderView[] = [];\n const promises: Array<Promise<any>> = [];\n const folders = await this.getAll();\n folders.forEach((folder) => {\n promises.push(folder.decrypt().then((f) => decFolders.push(f)));\n });\n\n await Promise.all(promises);\n decFolders.sort(Utils.getSortFunction(this.i18nService, 'name'));\n\n const noneFolder = new FolderView();\n noneFolder.name = this.i18nService.t('noneFolder');\n decFolders.push(noneFolder);\n\n this.decryptedFolderCache = decFolders;\n return this.decryptedFolderCache;\n }\n\n async getAllNested(): Promise<Array<TreeNode<FolderView>>> {\n const folders = await this.getAllDecrypted();\n const nodes: Array<TreeNode<FolderView>> = [];\n folders.forEach((f) => {\n const folderCopy = new FolderView();\n folderCopy.id = f.id;\n folderCopy.revisionDate = f.revisionDate;\n const parts = f.name != null ? f.name.replace(/^\\/+|\\/+$/g, '').split(NestingDelimiter) : [];\n ServiceUtils.nestedTraverse(nodes, 0, parts, folderCopy, null, NestingDelimiter);\n });\n return nodes;\n }\n\n async getNested(id: string): Promise<TreeNode<FolderView>> {\n const folders = await this.getAllNested();\n return ServiceUtils.getTreeNodeObject(folders, id) as TreeNode<FolderView>;\n }\n\n async saveWithServer(folder: Folder): Promise<any> {\n const request = new FolderRequest(folder);\n\n let response: FolderResponse;\n if (folder.id == null) {\n response = await this.apiService.postFolder(request);\n folder.id = response.id;\n } else {\n response = await this.apiService.putFolder(folder.id, request);\n }\n\n const userId = await this.userService.getUserId();\n const data = new FolderData(response, userId);\n await this.upsert(data);\n }\n\n async upsert(folder: FolderData | FolderData[]): Promise<any> {\n const userId = await this.userService.getUserId();\n let folders = await this.storageService.get<{ [id: string]: FolderData; }>(\n Keys.foldersPrefix + userId);\n if (folders == null) {\n folders = {};\n }\n\n if (folder instanceof FolderData) {\n const f = folder as FolderData;\n folders[f.id] = f;\n } else {\n (folder as FolderData[]).forEach((f) => {\n folders[f.id] = f;\n });\n }\n\n await this.storageService.save(Keys.foldersPrefix + userId, folders);\n this.decryptedFolderCache = null;\n }\n\n async replace(folders: { [id: string]: FolderData; }): Promise<any> {\n const userId = await this.userService.getUserId();\n await this.storageService.save(Keys.foldersPrefix + userId, folders);\n this.decryptedFolderCache = null;\n }\n\n async clear(userId: string): Promise<any> {\n await this.storageService.remove(Keys.foldersPrefix + userId);\n this.decryptedFolderCache = null;\n }\n\n async delete(id: string | string[]): Promise<any> {\n const userId = await this.userService.getUserId();\n const folders = await this.storageService.get<{ [id: string]: FolderData; }>(\n Keys.foldersPrefix + userId);\n if (folders == null) {\n return;\n }\n\n if (typeof id === 'string') {\n if (folders[id] == null) {\n return;\n }\n delete folders[id];\n } else {\n (id as string[]).forEach((i) => {\n delete folders[i];\n });\n }\n\n await this.storageService.save(Keys.foldersPrefix + userId, folders);\n this.decryptedFolderCache = null;\n\n // Items in a deleted folder are re-assigned to \"No Folder\"\n const ciphers = await this.storageService.get<{ [id: string]: CipherData; }>(Keys.ciphersPrefix + userId);\n if (ciphers != null) {\n const updates: CipherData[] = [];\n for (const cId in ciphers) {\n if (ciphers[cId].folderId === id) {\n ciphers[cId].folderId = null;\n updates.push(ciphers[cId]);\n }\n }\n if (updates.length > 0) {\n this.cipherService.upsert(updates);\n }\n }\n }\n\n async deleteWithServer(id: string): Promise<any> {\n await this.apiService.deleteFolder(id);\n await this.delete(id);\n }\n}\n","import { Collection } from '../domain/collection';\n\nimport { SelectionReadOnlyRequest } from './selectionReadOnlyRequest';\n\nexport class CollectionRequest {\n name: string;\n externalId: string;\n groups: SelectionReadOnlyRequest[] = [];\n\n constructor(collection?: Collection) {\n if (collection == null) {\n return;\n }\n this.name = collection.name ? collection.name.encryptedString : null;\n this.externalId = collection.externalId;\n }\n}\n","import { CipherRequest } from './cipherRequest';\nimport { FolderRequest } from './folderRequest';\nimport { KvpRequest } from './kvpRequest';\n\nexport class ImportCiphersRequest {\n ciphers: CipherRequest[] = [];\n folders: FolderRequest[] = [];\n folderRelationships: Array<KvpRequest<number, number>> = [];\n}\n","import { CipherRequest } from './cipherRequest';\nimport { CollectionRequest } from './collectionRequest';\nimport { KvpRequest } from './kvpRequest';\n\nexport class ImportOrganizationCiphersRequest {\n ciphers: CipherRequest[] = [];\n collections: CollectionRequest[] = [];\n collectionRelationships: Array<KvpRequest<number, number>> = [];\n}\n","export class KvpRequest<TK, TV> {\n key: TK;\n value: TV;\n\n constructor(key: TK, value: TV) {\n this.key = key;\n this.value = value;\n }\n}\n","import * as papa from 'papaparse';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nimport { CipherView } from '../models/view/cipherView';\nimport { CollectionView } from '../models/view/collectionView';\nimport { LoginUriView } from '../models/view/loginUriView';\n\nimport { Utils } from '../misc/utils';\n\nimport { FieldView } from '../models/view/fieldView';\nimport { FolderView } from '../models/view/folderView';\nimport { LoginView } from '../models/view/loginView';\nimport { SecureNoteView } from '../models/view/secureNoteView';\n\nimport { CipherType } from '../enums/cipherType';\nimport { FieldType } from '../enums/fieldType';\nimport { SecureNoteType } from '../enums/secureNoteType';\n\nexport abstract class BaseImporter {\n organization = false;\n\n protected newLineRegex = /(?:\\r\\n|\\r|\\n)/;\n\n protected passwordFieldNames = [\n 'password', 'pass word', 'passphrase', 'pass phrase',\n 'pass', 'code', 'code word', 'codeword',\n 'secret', 'secret word', 'personpwd',\n 'key', 'keyword', 'key word', 'keyphrase', 'key phrase',\n 'form_pw', 'wppassword', 'pin', 'pwd', 'pw', 'pword', 'passwd',\n 'p', 'serial', 'serial#', 'license key', 'reg #',\n\n // Non-English names\n 'passwort',\n ];\n\n protected usernameFieldNames = [\n 'user', 'name', 'user name', 'username', 'login name',\n 'email', 'e-mail', 'id', 'userid', 'user id',\n 'login', 'form_loginname', 'wpname', 'mail',\n 'loginid', 'login id', 'log', 'personlogin',\n 'first name', 'last name', 'card#', 'account #',\n 'member', 'member #',\n\n // Non-English names\n 'nom', 'benutzername',\n ];\n\n protected notesFieldNames = [\n 'note', 'notes', 'comment', 'comments', 'memo',\n 'description', 'free form', 'freeform',\n 'free text', 'freetext', 'free',\n\n // Non-English names\n 'kommentar',\n ];\n\n protected uriFieldNames: string[] = [\n 'url', 'hyper link', 'hyperlink', 'link',\n 'host', 'hostname', 'host name', 'server', 'address',\n 'hyper ref', 'href', 'web', 'website', 'web site', 'site',\n 'web-site', 'uri',\n\n // Non-English names\n 'ort', 'adresse',\n ];\n\n protected parseXml(data: string): Document {\n const parser = new DOMParser();\n const doc = parser.parseFromString(data, 'application/xml');\n return doc != null && doc.querySelector('parsererror') == null ? doc : null;\n }\n\n protected parseCsv(data: string, header: boolean): any[] {\n data = this.splitNewLine(data).join('\\n').trim();\n const result = papa.parse(data, {\n header: header,\n encoding: 'UTF-8',\n skipEmptyLines: false,\n });\n if (result.errors != null && result.errors.length > 0) {\n result.errors.forEach((e) => {\n if (e.row != null) {\n // tslint:disable-next-line\n console.warn('Error parsing row ' + e.row + ': ' + e.message);\n }\n });\n }\n return result.data && result.data.length > 0 ? result.data : null;\n }\n\n protected parseSingleRowCsv(rowData: string) {\n if (this.isNullOrWhitespace(rowData)) {\n return null;\n }\n const parsedRow = this.parseCsv(rowData, false);\n if (parsedRow != null && parsedRow.length > 0 && parsedRow[0].length > 0) {\n return parsedRow[0];\n }\n return null;\n }\n\n protected makeUriArray(uri: string | string[]): LoginUriView[] {\n if (uri == null) {\n return null;\n }\n\n if (typeof uri === 'string') {\n const loginUri = new LoginUriView();\n loginUri.uri = this.fixUri(uri);\n if (this.isNullOrWhitespace(loginUri.uri)) {\n return null;\n }\n loginUri.match = null;\n return [loginUri];\n }\n\n if (uri.length > 0) {\n const returnArr: LoginUriView[] = [];\n uri.forEach((u) => {\n const loginUri = new LoginUriView();\n loginUri.uri = this.fixUri(u);\n if (this.isNullOrWhitespace(loginUri.uri)) {\n return;\n }\n loginUri.match = null;\n returnArr.push(loginUri);\n });\n return returnArr.length === 0 ? null : returnArr;\n }\n\n return null;\n }\n\n protected fixUri(uri: string) {\n if (uri == null) {\n return null;\n }\n uri = uri.trim();\n if (uri.indexOf('://') === -1 && uri.indexOf('.') >= 0) {\n uri = 'http://' + uri;\n }\n if (uri.length > 1000) {\n return uri.substring(0, 1000);\n }\n return uri;\n }\n\n protected nameFromUrl(url: string) {\n const hostname = Utils.getHostname(url);\n if (this.isNullOrWhitespace(hostname)) {\n return null;\n }\n return hostname.startsWith('www.') ? hostname.replace('www.', '') : hostname;\n }\n\n protected isNullOrWhitespace(str: string): boolean {\n return Utils.isNullOrWhitespace(str);\n }\n\n protected getValueOrDefault(str: string, defaultValue: string = null): string {\n if (this.isNullOrWhitespace(str)) {\n return defaultValue;\n }\n return str;\n }\n\n protected splitNewLine(str: string): string[] {\n return str.split(this.newLineRegex);\n }\n\n // ref https://stackoverflow.com/a/5911300\n protected getCardBrand(cardNum: string) {\n if (this.isNullOrWhitespace(cardNum)) {\n return null;\n }\n\n // Visa\n let re = new RegExp('^4');\n if (cardNum.match(re) != null) {\n return 'Visa';\n }\n\n // Mastercard\n // Updated for Mastercard 2017 BINs expansion\n if (/^(5[1-5][0-9]{14}|2(22[1-9][0-9]{12}|2[3-9][0-9]{13}|[3-6][0-9]{14}|7[0-1][0-9]{13}|720[0-9]{12}))$/\n .test(cardNum)) {\n return 'Mastercard';\n }\n\n // AMEX\n re = new RegExp('^3[47]');\n if (cardNum.match(re) != null) {\n return 'Amex';\n }\n\n // Discover\n re = new RegExp('^(6011|622(12[6-9]|1[3-9][0-9]|[2-8][0-9]{2}|9[0-1][0-9]|92[0-5]|64[4-9])|65)');\n if (cardNum.match(re) != null) {\n return 'Discover';\n }\n\n // Diners\n re = new RegExp('^36');\n if (cardNum.match(re) != null) {\n return 'Diners Club';\n }\n\n // Diners - Carte Blanche\n re = new RegExp('^30[0-5]');\n if (cardNum.match(re) != null) {\n return 'Diners Club';\n }\n\n // JCB\n re = new RegExp('^35(2[89]|[3-8][0-9])');\n if (cardNum.match(re) != null) {\n return 'JCB';\n }\n\n // Visa Electron\n re = new RegExp('^(4026|417500|4508|4844|491(3|7))');\n if (cardNum.match(re) != null) {\n return 'Visa';\n }\n\n return null;\n }\n\n protected setCardExpiration(cipher: CipherView, expiration: string): boolean {\n if (!this.isNullOrWhitespace(expiration)) {\n const parts = expiration.split('/');\n if (parts.length === 2) {\n let month: string = null;\n let year: string = null;\n if (parts[0].length === 1 || parts[0].length === 2) {\n month = parts[0];\n if (month.length === 2 && month[0] === '0') {\n month = month.substr(1, 1);\n }\n }\n if (parts[1].length === 2 || parts[1].length === 4) {\n year = month.length === 2 ? '20' + parts[1] : parts[1];\n }\n if (month != null && year != null) {\n cipher.card.expMonth = month;\n cipher.card.expYear = year;\n return true;\n }\n }\n }\n return false;\n }\n\n protected moveFoldersToCollections(result: ImportResult) {\n result.folderRelationships.forEach((r) => result.collectionRelationships.push(r));\n result.collections = result.folders.map((f) => {\n const collection = new CollectionView();\n collection.name = f.name;\n return collection;\n });\n result.folderRelationships = [];\n result.folders = [];\n }\n\n protected querySelectorDirectChild(parentEl: Element, query: string) {\n const els = this.querySelectorAllDirectChild(parentEl, query);\n return els.length === 0 ? null : els[0];\n }\n\n protected querySelectorAllDirectChild(parentEl: Element, query: string) {\n return Array.from(parentEl.querySelectorAll(query)).filter((el) => el.parentNode === parentEl);\n }\n\n protected initLoginCipher() {\n const cipher = new CipherView();\n cipher.favorite = false;\n cipher.notes = '';\n cipher.fields = [];\n cipher.login = new LoginView();\n cipher.type = CipherType.Login;\n return cipher;\n }\n\n protected cleanupCipher(cipher: CipherView) {\n if (cipher == null) {\n return;\n }\n if (cipher.type !== CipherType.Login) {\n cipher.login = null;\n }\n if (this.isNullOrWhitespace(cipher.name)) {\n cipher.name = '--';\n }\n if (this.isNullOrWhitespace(cipher.notes)) {\n cipher.notes = null;\n } else {\n cipher.notes = cipher.notes.trim();\n }\n if (cipher.fields != null && cipher.fields.length === 0) {\n cipher.fields = null;\n }\n }\n\n protected processKvp(cipher: CipherView, key: string, value: string, type: FieldType = FieldType.Text) {\n if (this.isNullOrWhitespace(value)) {\n return;\n }\n if (this.isNullOrWhitespace(key)) {\n key = '';\n }\n if (value.length > 200 || value.trim().search(this.newLineRegex) > -1) {\n if (cipher.notes == null) {\n cipher.notes = '';\n }\n cipher.notes += (key + ': ' + this.splitNewLine(value).join('\\n') + '\\n');\n } else {\n if (cipher.fields == null) {\n cipher.fields = [];\n }\n const field = new FieldView();\n field.type = type;\n field.name = key;\n field.value = value;\n cipher.fields.push(field);\n }\n }\n\n protected processFolder(result: ImportResult, folderName: string) {\n let folderIndex = result.folders.length;\n const hasFolder = !this.isNullOrWhitespace(folderName);\n let addFolder = hasFolder;\n\n if (hasFolder) {\n for (let i = 0; i < result.folders.length; i++) {\n if (result.folders[i].name === folderName) {\n addFolder = false;\n folderIndex = i;\n break;\n }\n }\n }\n\n if (addFolder) {\n const f = new FolderView();\n f.name = folderName;\n result.folders.push(f);\n }\n if (hasFolder) {\n result.folderRelationships.push([result.ciphers.length, folderIndex]);\n }\n }\n\n protected convertToNoteIfNeeded(cipher: CipherView) {\n if (cipher.type === CipherType.Login && this.isNullOrWhitespace(cipher.login.username) &&\n this.isNullOrWhitespace(cipher.login.password) &&\n (cipher.login.uris == null || cipher.login.uris.length === 0)) {\n cipher.type = CipherType.SecureNote;\n cipher.secureNote = new SecureNoteView();\n cipher.secureNote.type = SecureNoteType.Generic;\n }\n }\n}\n","import { CipherView } from '../view/cipherView';\nimport { CollectionView } from '../view/collectionView';\nimport { FolderView } from '../view/folderView';\n\nexport class ImportResult {\n success = false;\n errorMessage: string;\n ciphers: CipherView[] = [];\n folders: FolderView[] = [];\n folderRelationships: Array<[number, number]> = [];\n collections: CollectionView[] = [];\n collectionRelationships: Array<[number, number]> = [];\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nexport class AscendoCsvImporter extends BaseImporter implements Importer {\n parse(data: string): ImportResult {\n const result = new ImportResult();\n const results = this.parseCsv(data, false);\n if (results == null) {\n result.success = false;\n return result;\n }\n\n results.forEach((value) => {\n if (value.length < 2) {\n return;\n }\n\n const cipher = this.initLoginCipher();\n cipher.notes = this.getValueOrDefault(value[value.length - 1]);\n cipher.name = this.getValueOrDefault(value[0], '--');\n\n if (value.length > 2 && (value.length % 2) === 0) {\n for (let i = 0; i < value.length - 2; i += 2) {\n const val: string = value[i + 2];\n const field: string = value[i + 1];\n if (this.isNullOrWhitespace(val) || this.isNullOrWhitespace(field)) {\n continue;\n }\n\n const fieldLower = field.toLowerCase();\n if (cipher.login.password == null && this.passwordFieldNames.indexOf(fieldLower) > -1) {\n cipher.login.password = this.getValueOrDefault(val);\n } else if (cipher.login.username == null &&\n this.usernameFieldNames.indexOf(fieldLower) > -1) {\n cipher.login.username = this.getValueOrDefault(val);\n } else if ((cipher.login.uris == null || cipher.login.uris.length === 0) &&\n this.uriFieldNames.indexOf(fieldLower) > -1) {\n cipher.login.uris = this.makeUriArray(val);\n } else {\n this.processKvp(cipher, field, val);\n }\n }\n }\n\n this.convertToNoteIfNeeded(cipher);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return result;\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nexport class AvastCsvImporter extends BaseImporter implements Importer {\n parse(data: string): ImportResult {\n const result = new ImportResult();\n const results = this.parseCsv(data, true);\n if (results == null) {\n result.success = false;\n return result;\n }\n\n results.forEach((value) => {\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(value.name);\n cipher.login.uris = this.makeUriArray(value.web);\n cipher.login.password = this.getValueOrDefault(value.password);\n cipher.login.username = this.getValueOrDefault(value.login);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return result;\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nimport { CipherType } from '../enums/cipherType';\nimport { SecureNoteType } from '../enums/secureNoteType';\n\nexport class AvastJsonImporter extends BaseImporter implements Importer {\n parse(data: string): ImportResult {\n const result = new ImportResult();\n const results = JSON.parse(data);\n if (results == null) {\n result.success = false;\n return result;\n }\n\n if (results.logins != null) {\n results.logins.forEach((value: any) => {\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(value.custName);\n cipher.notes = this.getValueOrDefault(value.note);\n cipher.login.uris = this.makeUriArray(value.url);\n cipher.login.password = this.getValueOrDefault(value.pwd);\n cipher.login.username = this.getValueOrDefault(value.loginName);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n }\n\n if (results.notes != null) {\n results.notes.forEach((value: any) => {\n const cipher = this.initLoginCipher();\n cipher.type = CipherType.SecureNote;\n cipher.secureNote.type = SecureNoteType.Generic;\n cipher.name = this.getValueOrDefault(value.label);\n cipher.notes = this.getValueOrDefault(value.text);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n }\n\n if (results.cards != null) {\n results.cards.forEach((value: any) => {\n const cipher = this.initLoginCipher();\n cipher.type = CipherType.Card;\n cipher.name = this.getValueOrDefault(value.custName);\n cipher.notes = this.getValueOrDefault(value.note);\n cipher.card.cardholderName = this.getValueOrDefault(value.holderName);\n cipher.card.number = this.getValueOrDefault(value.cardNumber);\n cipher.card.code = this.getValueOrDefault(value.cvv);\n cipher.card.brand = this.getCardBrand(cipher.card.number);\n if (value.expirationDate != null) {\n if (value.expirationDate.month != null) {\n cipher.card.expMonth = value.expirationDate.month + '';\n }\n if (value.expirationDate.year != null) {\n cipher.card.expYear = value.expirationDate.year + '';\n }\n }\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n }\n\n result.success = true;\n return result;\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nexport class AviraCsvImporter extends BaseImporter implements Importer {\n parse(data: string): ImportResult {\n const result = new ImportResult();\n const results = this.parseCsv(data, true);\n if (results == null) {\n result.success = false;\n return result;\n }\n\n results.forEach((value) => {\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(value.name,\n this.getValueOrDefault(this.nameFromUrl(value.website), '--'));\n cipher.login.uris = this.makeUriArray(value.website);\n cipher.login.password = this.getValueOrDefault(value.password);\n\n if (this.isNullOrWhitespace(value.username) && !this.isNullOrWhitespace(value.secondary_username)) {\n cipher.login.username = value.secondary_username;\n } else {\n cipher.login.username = this.getValueOrDefault(value.username);\n cipher.notes = this.getValueOrDefault(value.secondary_username);\n }\n\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return result;\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nimport { CipherView } from '../models/view/cipherView';\nimport { CollectionView } from '../models/view/collectionView';\nimport { FieldView } from '../models/view/fieldView';\nimport { FolderView } from '../models/view/folderView';\nimport { LoginView } from '../models/view/loginView';\nimport { SecureNoteView } from '../models/view/secureNoteView';\n\nimport { CipherType } from '../enums/cipherType';\nimport { FieldType } from '../enums/fieldType';\nimport { SecureNoteType } from '../enums/secureNoteType';\n\nexport class BitwardenCsvImporter extends BaseImporter implements Importer {\n parse(data: string): ImportResult {\n const result = new ImportResult();\n const results = this.parseCsv(data, true);\n if (results == null) {\n result.success = false;\n return result;\n }\n\n results.forEach((value) => {\n if (this.organization && !this.isNullOrWhitespace(value.collections)) {\n const collections = (value.collections as string).split(',');\n collections.forEach((col) => {\n let addCollection = true;\n let collectionIndex = result.collections.length;\n\n for (let i = 0; i < result.collections.length; i++) {\n if (result.collections[i].name === col) {\n addCollection = false;\n collectionIndex = i;\n break;\n }\n }\n\n if (addCollection) {\n const collection = new CollectionView();\n collection.name = col;\n result.collections.push(collection);\n }\n\n result.collectionRelationships.push([result.ciphers.length, collectionIndex]);\n });\n } else if (!this.organization) {\n this.processFolder(result, value.folder);\n }\n\n const cipher = new CipherView();\n cipher.favorite = !this.organization && this.getValueOrDefault(value.favorite, '0') !== '0' ? true : false;\n cipher.type = CipherType.Login;\n cipher.notes = this.getValueOrDefault(value.notes);\n cipher.name = this.getValueOrDefault(value.name, '--');\n\n if (!this.isNullOrWhitespace(value.fields)) {\n const fields = this.splitNewLine(value.fields);\n for (let i = 0; i < fields.length; i++) {\n if (this.isNullOrWhitespace(fields[i])) {\n continue;\n }\n\n const delimPosition = fields[i].lastIndexOf(': ');\n if (delimPosition === -1) {\n continue;\n }\n\n if (cipher.fields == null) {\n cipher.fields = [];\n }\n\n const field = new FieldView();\n field.name = fields[i].substr(0, delimPosition);\n field.value = null;\n field.type = FieldType.Text;\n if (fields[i].length > (delimPosition + 2)) {\n field.value = fields[i].substr(delimPosition + 2);\n }\n cipher.fields.push(field);\n }\n }\n\n const valueType = value.type != null ? value.type.toLowerCase() : null;\n switch (valueType) {\n case 'note':\n cipher.type = CipherType.SecureNote;\n cipher.secureNote = new SecureNoteView();\n cipher.secureNote.type = SecureNoteType.Generic;\n break;\n default:\n cipher.type = CipherType.Login;\n cipher.login = new LoginView();\n cipher.login.totp = this.getValueOrDefault(value.login_totp || value.totp);\n cipher.login.username = this.getValueOrDefault(value.login_username || value.username);\n cipher.login.password = this.getValueOrDefault(value.login_password || value.password);\n const uris = this.parseSingleRowCsv(value.login_uri || value.uri);\n cipher.login.uris = this.makeUriArray(uris);\n break;\n }\n\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return result;\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nimport { CipherWithIds } from '../models/export/cipherWithIds';\nimport { CollectionWithId } from '../models/export/collectionWithId';\nimport { FolderWithId } from '../models/export/folderWithId';\n\nexport class BitwardenJsonImporter extends BaseImporter implements Importer {\n parse(data: string): ImportResult {\n const result = new ImportResult();\n const results = JSON.parse(data);\n if (results == null || results.items == null || results.items.length === 0) {\n result.success = false;\n return result;\n }\n\n const groupingsMap = new Map<string, number>();\n if (this.organization && results.collections != null) {\n results.collections.forEach((c: CollectionWithId) => {\n const collection = CollectionWithId.toView(c);\n if (collection != null) {\n collection.id = null;\n collection.organizationId = null;\n groupingsMap.set(c.id, result.collections.length);\n result.collections.push(collection);\n }\n });\n } else if (!this.organization && results.folders != null) {\n results.folders.forEach((f: FolderWithId) => {\n const folder = FolderWithId.toView(f);\n if (folder != null) {\n folder.id = null;\n groupingsMap.set(f.id, result.folders.length);\n result.folders.push(folder);\n }\n });\n }\n\n results.items.forEach((c: CipherWithIds) => {\n const cipher = CipherWithIds.toView(c);\n // reset ids incase they were set for some reason\n cipher.id = null;\n cipher.folderId = null;\n cipher.organizationId = null;\n cipher.collectionIds = null;\n\n // make sure password history is limited\n if (cipher.passwordHistory != null && cipher.passwordHistory.length > 5) {\n cipher.passwordHistory = cipher.passwordHistory.slice(0, 5);\n }\n\n if (!this.organization && c.folderId != null && groupingsMap.has(c.folderId)) {\n result.folderRelationships.push([result.ciphers.length, groupingsMap.get(c.folderId)]);\n } else if (this.organization && c.collectionIds != null) {\n c.collectionIds.forEach((cId) => {\n if (groupingsMap.has(cId)) {\n result.collectionRelationships.push([result.ciphers.length, groupingsMap.get(cId)]);\n }\n });\n }\n\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return result;\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nexport class BlackBerryCsvImporter extends BaseImporter implements Importer {\n parse(data: string): ImportResult {\n const result = new ImportResult();\n const results = this.parseCsv(data, true);\n if (results == null) {\n result.success = false;\n return result;\n }\n\n results.forEach((value) => {\n if (value.grouping === 'list') {\n return;\n }\n const cipher = this.initLoginCipher();\n cipher.favorite = value.fav === '1';\n cipher.name = this.getValueOrDefault(value.name);\n cipher.notes = this.getValueOrDefault(value.extra);\n if (value.grouping !== 'note') {\n cipher.login.uris = this.makeUriArray(value.url);\n cipher.login.password = this.getValueOrDefault(value.password);\n cipher.login.username = this.getValueOrDefault(value.username);\n }\n this.convertToNoteIfNeeded(cipher);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return result;\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nexport class BlurCsvImporter extends BaseImporter implements Importer {\n parse(data: string): ImportResult {\n const result = new ImportResult();\n const results = this.parseCsv(data, true);\n if (results == null) {\n result.success = false;\n return result;\n }\n\n results.forEach((value) => {\n if (value.label === 'null') {\n value.label = null;\n }\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(value.label,\n this.getValueOrDefault(this.nameFromUrl(value.domain), '--'));\n cipher.login.uris = this.makeUriArray(value.domain);\n cipher.login.password = this.getValueOrDefault(value.password);\n\n if (this.isNullOrWhitespace(value.email) && !this.isNullOrWhitespace(value.username)) {\n cipher.login.username = value.username;\n } else {\n cipher.login.username = this.getValueOrDefault(value.email);\n cipher.notes = this.getValueOrDefault(value.username);\n }\n\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return result;\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nconst OfficialProps = [\n '!group_id', '!group_name', 'title', 'username', 'password', 'URL', 'id',\n];\n\nexport class ButtercupCsvImporter extends BaseImporter implements Importer {\n parse(data: string): ImportResult {\n const result = new ImportResult();\n const results = this.parseCsv(data, true);\n if (results == null) {\n result.success = false;\n return result;\n }\n\n results.forEach((value) => {\n this.processFolder(result, this.getValueOrDefault(value['!group_name']));\n\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(value.title, '--');\n cipher.login.username = this.getValueOrDefault(value.username);\n cipher.login.password = this.getValueOrDefault(value.password);\n cipher.login.uris = this.makeUriArray(value.URL);\n\n let processingCustomFields = false;\n for (const prop in value) {\n if (value.hasOwnProperty(prop)) {\n if (!processingCustomFields && OfficialProps.indexOf(prop) === -1) {\n processingCustomFields = true;\n }\n if (processingCustomFields) {\n this.processKvp(cipher, prop, value[prop]);\n }\n }\n }\n\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n if (this.organization) {\n this.moveFoldersToCollections(result);\n }\n\n result.success = true;\n return result;\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nexport class ChromeCsvImporter extends BaseImporter implements Importer {\n parse(data: string): ImportResult {\n const result = new ImportResult();\n const results = this.parseCsv(data, true);\n if (results == null) {\n result.success = false;\n return result;\n }\n\n results.forEach((value) => {\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(value.name, '--');\n cipher.login.username = this.getValueOrDefault(value.username);\n cipher.login.password = this.getValueOrDefault(value.password);\n cipher.login.uris = this.makeUriArray(value.url);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return result;\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nexport class ClipperzHtmlImporter extends BaseImporter implements Importer {\n parse(data: string): ImportResult {\n const result = new ImportResult();\n const doc = this.parseXml(data);\n if (doc == null) {\n result.success = false;\n return result;\n }\n\n const textarea = doc.querySelector('textarea');\n if (textarea == null || this.isNullOrWhitespace(textarea.textContent)) {\n result.errorMessage = 'Missing textarea.';\n result.success = false;\n return result;\n }\n\n const entries = JSON.parse(textarea.textContent);\n entries.forEach((entry: any) => {\n const cipher = this.initLoginCipher();\n if (!this.isNullOrWhitespace(entry.label)) {\n cipher.name = entry.label.split(' ')[0];\n }\n if (entry.data != null && !this.isNullOrWhitespace(entry.data.notes)) {\n cipher.notes = entry.data.notes.split('\\\\n').join('\\n');\n }\n\n if (entry.currentVersion != null && entry.currentVersion.fields != null) {\n for (const property in entry.currentVersion.fields) {\n if (!entry.currentVersion.fields.hasOwnProperty(property)) {\n continue;\n }\n\n const field = entry.currentVersion.fields[property];\n const actionType = field.actionType != null ? field.actionType.toLowerCase() : null;\n switch (actionType) {\n case 'password':\n cipher.login.password = this.getValueOrDefault(field.value);\n break;\n case 'email':\n case 'username':\n case 'user':\n case 'name':\n cipher.login.username = this.getValueOrDefault(field.value);\n break;\n case 'url':\n cipher.login.uris = this.makeUriArray(field.value);\n break;\n default:\n const labelLower = field.label != null ? field.label.toLowerCase() : null;\n if (cipher.login.password == null && this.passwordFieldNames.indexOf(labelLower) > -1) {\n cipher.login.password = this.getValueOrDefault(field.value);\n } else if (cipher.login.username == null &&\n this.usernameFieldNames.indexOf(labelLower) > -1) {\n cipher.login.username = this.getValueOrDefault(field.value);\n } else if ((cipher.login.uris == null || cipher.login.uris.length === 0) &&\n this.uriFieldNames.indexOf(labelLower) > -1) {\n cipher.login.uris = this.makeUriArray(field.value);\n } else {\n this.processKvp(cipher, field.label, field.value);\n }\n break;\n }\n }\n }\n\n this.convertToNoteIfNeeded(cipher);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return result;\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nexport class CodebookCsvImporter extends BaseImporter implements Importer {\n parse(data: string): ImportResult {\n const result = new ImportResult();\n const results = this.parseCsv(data, true);\n if (results == null) {\n result.success = false;\n return result;\n }\n\n results.forEach((value) => {\n this.processFolder(result, this.getValueOrDefault(value.Category));\n\n const cipher = this.initLoginCipher();\n cipher.favorite = this.getValueOrDefault(value.Favorite) === 'True';\n cipher.name = this.getValueOrDefault(value.Entry, '--');\n cipher.notes = this.getValueOrDefault(value.Note);\n cipher.login.username = this.getValueOrDefault(value.Username, value.Email);\n cipher.login.password = this.getValueOrDefault(value.Password);\n cipher.login.totp = this.getValueOrDefault(value.TOTP);\n cipher.login.uris = this.makeUriArray(value.Website);\n\n if (!this.isNullOrWhitespace(value.Username)) {\n this.processKvp(cipher, 'Email', value.Email);\n }\n this.processKvp(cipher, 'Phone', value.Phone);\n this.processKvp(cipher, 'PIN', value.PIN);\n this.processKvp(cipher, 'Account', value.Account);\n this.processKvp(cipher, 'Date', value.Date);\n\n this.convertToNoteIfNeeded(cipher);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n if (this.organization) {\n this.moveFoldersToCollections(result);\n }\n\n result.success = true;\n return result;\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nimport { CardView } from '../models/view/cardView';\nimport { CipherView } from '../models/view/cipherView';\nimport { IdentityView } from '../models/view/identityView';\nimport { SecureNoteView } from '../models/view/secureNoteView';\n\nimport { CipherType } from '../enums/cipherType';\nimport { SecureNoteType } from '../enums/secureNoteType';\n\nconst HandledResults = new Set(['ADDRESS', 'AUTHENTIFIANT', 'BANKSTATEMENT', 'IDCARD', 'IDENTITY',\n 'PAYMENTMEANS_CREDITCARD', 'PAYMENTMEAN_PAYPAL', 'EMAIL']);\n\nexport class DashlaneJsonImporter extends BaseImporter implements Importer {\n private result: ImportResult;\n\n parse(data: string): ImportResult {\n this.result = new ImportResult();\n const results = JSON.parse(data);\n if (results == null || results.length === 0) {\n this.result.success = false;\n return this.result;\n }\n\n if (results.ADDRESS != null) {\n this.processAddress(results.ADDRESS);\n }\n if (results.AUTHENTIFIANT != null) {\n this.processAuth(results.AUTHENTIFIANT);\n }\n if (results.BANKSTATEMENT != null) {\n this.processNote(results.BANKSTATEMENT, 'BankAccountName');\n }\n if (results.IDCARD != null) {\n this.processNote(results.IDCARD, 'Fullname');\n }\n if (results.PAYMENTMEANS_CREDITCARD != null) {\n this.processCard(results.PAYMENTMEANS_CREDITCARD);\n }\n if (results.IDENTITY != null) {\n this.processIdentity(results.IDENTITY);\n }\n\n for (const key in results) {\n if (results.hasOwnProperty(key) && !HandledResults.has(key)) {\n this.processNote(results[key], null, 'Generic Note');\n }\n }\n\n this.result.success = true;\n return this.result;\n }\n\n private processAuth(results: any[]) {\n results.forEach((credential: any) => {\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(credential.title);\n\n cipher.login.username = this.getValueOrDefault(credential.login,\n this.getValueOrDefault(credential.secondaryLogin));\n if (this.isNullOrWhitespace(cipher.login.username)) {\n cipher.login.username = this.getValueOrDefault(credential.email);\n } else if (!this.isNullOrWhitespace(credential.email)) {\n cipher.notes = ('Email: ' + credential.email + '\\n');\n }\n\n cipher.login.password = this.getValueOrDefault(credential.password);\n cipher.login.uris = this.makeUriArray(credential.domain);\n cipher.notes += this.getValueOrDefault(credential.note, '');\n\n this.convertToNoteIfNeeded(cipher);\n this.cleanupCipher(cipher);\n this.result.ciphers.push(cipher);\n });\n }\n\n private processIdentity(results: any[]) {\n results.forEach((obj: any) => {\n const cipher = new CipherView();\n cipher.identity = new IdentityView();\n cipher.type = CipherType.Identity;\n cipher.name = this.getValueOrDefault(obj.fullName, '');\n const nameParts = cipher.name.split(' ');\n if (nameParts.length > 0) {\n cipher.identity.firstName = this.getValueOrDefault(nameParts[0]);\n }\n if (nameParts.length === 2) {\n cipher.identity.lastName = this.getValueOrDefault(nameParts[1]);\n } else if (nameParts.length === 3) {\n cipher.identity.middleName = this.getValueOrDefault(nameParts[1]);\n cipher.identity.lastName = this.getValueOrDefault(nameParts[2]);\n }\n cipher.identity.username = this.getValueOrDefault(obj.pseudo);\n this.cleanupCipher(cipher);\n this.result.ciphers.push(cipher);\n });\n }\n\n private processAddress(results: any[]) {\n results.forEach((obj: any) => {\n const cipher = new CipherView();\n cipher.identity = new IdentityView();\n cipher.type = CipherType.Identity;\n cipher.name = this.getValueOrDefault(obj.addressName);\n cipher.identity.address1 = this.getValueOrDefault(obj.addressFull);\n cipher.identity.city = this.getValueOrDefault(obj.city);\n cipher.identity.state = this.getValueOrDefault(obj.state);\n cipher.identity.postalCode = this.getValueOrDefault(obj.zipcode);\n cipher.identity.country = this.getValueOrDefault(obj.country);\n if (cipher.identity.country != null) {\n cipher.identity.country = cipher.identity.country.toUpperCase();\n }\n this.cleanupCipher(cipher);\n this.result.ciphers.push(cipher);\n });\n }\n\n private processCard(results: any[]) {\n results.forEach((obj: any) => {\n const cipher = new CipherView();\n cipher.card = new CardView();\n cipher.type = CipherType.Card;\n cipher.name = this.getValueOrDefault(obj.bank);\n cipher.card.number = this.getValueOrDefault(obj.cardNumber);\n cipher.card.brand = this.getCardBrand(cipher.card.number);\n cipher.card.cardholderName = this.getValueOrDefault(obj.owner);\n if (!this.isNullOrWhitespace(cipher.card.brand)) {\n if (this.isNullOrWhitespace(cipher.name)) {\n cipher.name = cipher.card.brand;\n } else {\n cipher.name += (' - ' + cipher.card.brand);\n }\n }\n this.cleanupCipher(cipher);\n this.result.ciphers.push(cipher);\n });\n }\n\n private processNote(results: any[], nameProperty: string, name: string = null) {\n results.forEach((obj: any) => {\n const cipher = new CipherView();\n cipher.secureNote = new SecureNoteView();\n cipher.type = CipherType.SecureNote;\n cipher.secureNote.type = SecureNoteType.Generic;\n if (name != null) {\n cipher.name = name;\n } else {\n cipher.name = this.getValueOrDefault(obj[nameProperty]);\n }\n for (const key in obj) {\n if (obj.hasOwnProperty(key) && key !== nameProperty) {\n this.processKvp(cipher, key, obj[key].toString());\n }\n }\n this.cleanupCipher(cipher);\n this.result.ciphers.push(cipher);\n });\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nimport { CardView } from '../models/view/cardView';\n\nimport { CipherType } from '../enums/cipherType';\n\nexport class EncryptrCsvImporter extends BaseImporter implements Importer {\n parse(data: string): ImportResult {\n const result = new ImportResult();\n const results = this.parseCsv(data, true);\n if (results == null) {\n result.success = false;\n return result;\n }\n\n results.forEach((value) => {\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(value.Label, '--');\n cipher.notes = this.getValueOrDefault(value.Notes);\n const text = this.getValueOrDefault(value.Text);\n if (!this.isNullOrWhitespace(text)) {\n if (this.isNullOrWhitespace(cipher.notes)) {\n cipher.notes = text;\n } else {\n cipher.notes += ('\\n\\n' + text);\n }\n }\n\n const type = value['Entry Type'];\n if (type === 'Password') {\n cipher.login.username = this.getValueOrDefault(value.Username);\n cipher.login.password = this.getValueOrDefault(value.Password);\n cipher.login.uris = this.makeUriArray(value['Site URL']);\n } else if (type === 'Credit Card') {\n cipher.type = CipherType.Card;\n cipher.card = new CardView();\n cipher.card.cardholderName = this.getValueOrDefault(value['Name on card']);\n cipher.card.number = this.getValueOrDefault(value['Card Number']);\n cipher.card.brand = this.getCardBrand(cipher.card.number);\n cipher.card.code = this.getValueOrDefault(value.CVV);\n const expiry = this.getValueOrDefault(value.Expiry);\n if (!this.isNullOrWhitespace(expiry)) {\n const expParts = expiry.split('/');\n if (expParts.length > 1) {\n cipher.card.expMonth = parseInt(expParts[0], null).toString();\n cipher.card.expYear = (2000 + parseInt(expParts[1], null)).toString();\n }\n }\n }\n\n this.convertToNoteIfNeeded(cipher);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return result;\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nimport { CipherType } from '../enums/cipherType';\nimport { SecureNoteType } from '../enums/secureNoteType';\n\nimport { CardView } from '../models/view/cardView';\nimport { SecureNoteView } from '../models/view/secureNoteView';\n\nexport class EnpassCsvImporter extends BaseImporter implements Importer {\n parse(data: string): ImportResult {\n const result = new ImportResult();\n const results = this.parseCsv(data, false);\n if (results == null) {\n result.success = false;\n return result;\n }\n\n let firstRow = true;\n results.forEach((value) => {\n if (value.length < 2 || (firstRow && (value[0] === 'Title' || value[0] === 'title'))) {\n firstRow = false;\n return;\n }\n\n const cipher = this.initLoginCipher();\n cipher.notes = this.getValueOrDefault(value[value.length - 1]);\n cipher.name = this.getValueOrDefault(value[0], '--');\n\n if (value.length === 2 || (!this.containsField(value, 'username') &&\n !this.containsField(value, 'password') && !this.containsField(value, 'email') &&\n !this.containsField(value, 'url'))) {\n cipher.type = CipherType.SecureNote;\n cipher.secureNote = new SecureNoteView();\n cipher.secureNote.type = SecureNoteType.Generic;\n }\n\n if (this.containsField(value, 'cardholder') && this.containsField(value, 'number') &&\n this.containsField(value, 'expiry date')) {\n cipher.type = CipherType.Card;\n cipher.card = new CardView();\n }\n\n if (value.length > 2 && (value.length % 2) === 0) {\n for (let i = 0; i < value.length - 2; i += 2) {\n const fieldValue: string = value[i + 2];\n if (this.isNullOrWhitespace(fieldValue)) {\n continue;\n }\n\n const fieldName: string = value[i + 1];\n const fieldNameLower = fieldName.toLowerCase();\n\n if (cipher.type === CipherType.Login) {\n if (fieldNameLower === 'url' && (cipher.login.uris == null || cipher.login.uris.length === 0)) {\n cipher.login.uris = this.makeUriArray(fieldValue);\n continue;\n } else if ((fieldNameLower === 'username' || fieldNameLower === 'email') &&\n this.isNullOrWhitespace(cipher.login.username)) {\n cipher.login.username = fieldValue;\n continue;\n } else if (fieldNameLower === 'password' && this.isNullOrWhitespace(cipher.login.password)) {\n cipher.login.password = fieldValue;\n continue;\n } else if (fieldNameLower === 'totp' && this.isNullOrWhitespace(cipher.login.totp)) {\n cipher.login.totp = fieldValue;\n continue;\n }\n } else if (cipher.type === CipherType.Card) {\n if (fieldNameLower === 'cardholder' && this.isNullOrWhitespace(cipher.card.cardholderName)) {\n cipher.card.cardholderName = fieldValue;\n continue;\n } else if (fieldNameLower === 'number' && this.isNullOrWhitespace(cipher.card.number)) {\n cipher.card.number = fieldValue;\n cipher.card.brand = this.getCardBrand(fieldValue);\n continue;\n } else if (fieldNameLower === 'cvc' && this.isNullOrWhitespace(cipher.card.code)) {\n cipher.card.code = fieldValue;\n continue;\n } else if (fieldNameLower === 'expiry date' && this.isNullOrWhitespace(cipher.card.expMonth) &&\n this.isNullOrWhitespace(cipher.card.expYear)) {\n if (this.setCardExpiration(cipher, fieldValue)) {\n continue;\n }\n } else if (fieldNameLower === 'type') {\n // Skip since brand was determined from number above\n continue;\n }\n }\n\n this.processKvp(cipher, fieldName, fieldValue);\n }\n }\n\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return result;\n }\n\n private containsField(fields: any[], name: string) {\n if (fields == null || name == null) {\n return false;\n }\n return fields.filter((f) => !this.isNullOrWhitespace(f) &&\n f.toLowerCase() === name.toLowerCase()).length > 0;\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nimport { CardView } from '../models/view/cardView';\nimport { CipherView } from '../models/view/cipherView';\nimport { FolderView } from '../models/view/folderView';\n\nimport { CipherType } from '../enums/cipherType';\nimport { FieldType } from '../enums/fieldType';\n\nexport class EnpassJsonImporter extends BaseImporter implements Importer {\n parse(data: string): ImportResult {\n const result = new ImportResult();\n const results = JSON.parse(data);\n if (results == null || results.items == null || results.items.length === 0) {\n result.success = false;\n return result;\n }\n\n const foldersMap = new Map<string, string>();\n const foldersIndexMap = new Map<string, number>();\n const folderTree = this.buildFolderTree(results.folders);\n this.flattenFolderTree(null, folderTree, foldersMap);\n foldersMap.forEach((val, key) => {\n foldersIndexMap.set(key, result.folders.length);\n const f = new FolderView();\n f.name = val;\n result.folders.push(f);\n });\n\n results.items.forEach((item: any) => {\n if (item.folders != null && item.folders.length > 0 && foldersIndexMap.has(item.folders[0])) {\n result.folderRelationships.push([result.ciphers.length, foldersIndexMap.get(item.folders[0])]);\n }\n\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(item.title);\n cipher.favorite = item.favorite > 0;\n\n if (item.template_type != null && item.fields != null && item.fields.length > 0) {\n if (item.template_type.indexOf('login.') === 0 || item.template_type.indexOf('password.') === 0) {\n this.processLogin(cipher, item.fields);\n } else if (item.template_type.indexOf('creditcard.') === 0) {\n this.processCard(cipher, item.fields);\n } else if (item.template_type.indexOf('identity.') < 0 &&\n item.fields.some((f: any) => f.type === 'password' && !this.isNullOrWhitespace(f.value))) {\n this.processLogin(cipher, item.fields);\n } else {\n this.processNote(cipher, item.fields);\n }\n }\n\n cipher.notes += ('\\n' + this.getValueOrDefault(item.note, ''));\n this.convertToNoteIfNeeded(cipher);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return result;\n }\n\n private processLogin(cipher: CipherView, fields: any[]) {\n const urls: string[] = [];\n fields.forEach((field: any) => {\n if (this.isNullOrWhitespace(field.value) || field.type === 'section') {\n return;\n }\n\n if ((field.type === 'username' || field.type === 'email') &&\n this.isNullOrWhitespace(cipher.login.username)) {\n cipher.login.username = field.value;\n } else if (field.type === 'password' && this.isNullOrWhitespace(cipher.login.password)) {\n cipher.login.password = field.value;\n } else if (field.type === 'totp' && this.isNullOrWhitespace(cipher.login.totp)) {\n cipher.login.totp = field.value;\n } else if (field.type === 'url') {\n urls.push(field.value);\n } else {\n this.processKvp(cipher, field.label, field.value,\n field.sensitive === 1 ? FieldType.Hidden : FieldType.Text);\n }\n });\n cipher.login.uris = this.makeUriArray(urls);\n }\n\n private processCard(cipher: CipherView, fields: any[]) {\n cipher.card = new CardView();\n cipher.type = CipherType.Card;\n fields.forEach((field: any) => {\n if (this.isNullOrWhitespace(field.value) || field.type === 'section' || field.type === 'ccType') {\n return;\n }\n\n if (field.type === 'ccName' && this.isNullOrWhitespace(cipher.card.cardholderName)) {\n cipher.card.cardholderName = field.value;\n } else if (field.type === 'ccNumber' && this.isNullOrWhitespace(cipher.card.number)) {\n cipher.card.number = field.value;\n cipher.card.brand = this.getCardBrand(cipher.card.number);\n } else if (field.type === 'ccCvc' && this.isNullOrWhitespace(cipher.card.code)) {\n cipher.card.code = field.value;\n } else if (field.type === 'ccExpiry' && this.isNullOrWhitespace(cipher.card.expYear)) {\n if (!this.setCardExpiration(cipher, field.value)) {\n this.processKvp(cipher, field.label, field.value,\n field.sensitive === 1 ? FieldType.Hidden : FieldType.Text);\n }\n } else {\n this.processKvp(cipher, field.label, field.value,\n field.sensitive === 1 ? FieldType.Hidden : FieldType.Text);\n }\n });\n }\n\n private processNote(cipher: CipherView, fields: any[]) {\n fields.forEach((field: any) => {\n if (this.isNullOrWhitespace(field.value) || field.type === 'section') {\n return;\n }\n this.processKvp(cipher, field.label, field.value,\n field.sensitive === 1 ? FieldType.Hidden : FieldType.Text);\n });\n }\n\n private buildFolderTree(folders: any[]): any[] {\n if (folders == null) {\n return [];\n }\n const folderTree: any[] = [];\n const map = new Map<string, any>([]);\n folders.forEach((obj: any) => {\n map.set(obj.uuid, obj);\n obj.children = [];\n });\n folders.forEach((obj: any) => {\n if (obj.parent_uuid != null && obj.parent_uuid !== '' && map.has(obj.parent_uuid)) {\n map.get(obj.parent_uuid).children.push(obj);\n } else {\n folderTree.push(obj);\n }\n });\n return folderTree;\n }\n\n private flattenFolderTree(titlePrefix: string, tree: any[], map: Map<string, string>) {\n if (tree == null) {\n return;\n }\n tree.forEach((f: any) => {\n if (f.title != null && f.title.trim() !== '') {\n let title = f.title.trim();\n if (titlePrefix != null && titlePrefix.trim() !== '') {\n title = titlePrefix + '/' + title;\n }\n map.set(f.uuid, title);\n if (f.children != null && f.children.length !== 0) {\n this.flattenFolderTree(title, f.children, map);\n }\n }\n });\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nexport class FirefoxCsvImporter extends BaseImporter implements Importer {\n parse(data: string): ImportResult {\n const result = new ImportResult();\n const results = this.parseCsv(data, true);\n if (results == null) {\n result.success = false;\n return result;\n }\n\n results.forEach((value) => {\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(this.nameFromUrl(value.hostname), '--');\n cipher.login.username = this.getValueOrDefault(value.username);\n cipher.login.password = this.getValueOrDefault(value.password);\n cipher.login.uris = this.makeUriArray(value.hostname);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return result;\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nimport { CardView } from '../models/view/cardView';\n\nimport { CipherType } from '../enums/cipherType';\n\nexport class FSecureFskImporter extends BaseImporter implements Importer {\n parse(data: string): ImportResult {\n const result = new ImportResult();\n const results = JSON.parse(data);\n if (results == null || results.data == null) {\n result.success = false;\n return result;\n }\n\n for (const key in results.data) {\n if (!results.data.hasOwnProperty(key)) {\n continue;\n }\n\n const value = results.data[key];\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(value.service);\n cipher.notes = this.getValueOrDefault(value.notes);\n\n if (value.style === 'website') {\n cipher.login.username = this.getValueOrDefault(value.username);\n cipher.login.password = this.getValueOrDefault(value.password);\n cipher.login.uris = this.makeUriArray(value.url);\n } else if (value.style === 'creditcard') {\n cipher.type = CipherType.Card;\n cipher.card = new CardView();\n cipher.card.cardholderName = this.getValueOrDefault(value.username);\n cipher.card.number = this.getValueOrDefault(value.creditNumber);\n cipher.card.brand = this.getCardBrand(cipher.card.number);\n cipher.card.code = this.getValueOrDefault(value.creditCvv);\n if (!this.isNullOrWhitespace(value.creditExpiry)) {\n if (!this.setCardExpiration(cipher, value.creditExpiry)) {\n this.processKvp(cipher, 'Expiration', value.creditExpiry);\n }\n }\n if (!this.isNullOrWhitespace(value.password)) {\n this.processKvp(cipher, 'PIN', value.password);\n }\n } else {\n continue;\n }\n\n this.convertToNoteIfNeeded(cipher);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n }\n\n result.success = true;\n return result;\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nexport class GnomeJsonImporter extends BaseImporter implements Importer {\n parse(data: string): ImportResult {\n const result = new ImportResult();\n const results = JSON.parse(data);\n if (results == null || Object.keys(results).length === 0) {\n result.success = false;\n return result;\n }\n\n for (const keyRing in results) {\n if (!results.hasOwnProperty(keyRing) || this.isNullOrWhitespace(keyRing) ||\n results[keyRing].length === 0) {\n continue;\n }\n\n results[keyRing].forEach((value: any) => {\n if (this.isNullOrWhitespace(value.display_name) || value.display_name.indexOf('http') !== 0) {\n return;\n }\n\n this.processFolder(result, keyRing);\n const cipher = this.initLoginCipher();\n cipher.name = value.display_name.replace('http://', '').replace('https://', '');\n if (cipher.name.length > 30) {\n cipher.name = cipher.name.substring(0, 30);\n }\n cipher.login.password = this.getValueOrDefault(value.secret);\n cipher.login.uris = this.makeUriArray(value.display_name);\n\n if (value.attributes != null) {\n cipher.login.username = value.attributes != null ?\n this.getValueOrDefault(value.attributes.username_value) : null;\n for (const attr in value.attributes) {\n if (!value.attributes.hasOwnProperty(attr) || attr === 'username_value' ||\n attr === 'xdg:schema') {\n continue;\n }\n this.processKvp(cipher, attr, value.attributes[attr]);\n }\n }\n\n this.convertToNoteIfNeeded(cipher);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n }\n\n if (this.organization) {\n this.moveFoldersToCollections(result);\n }\n\n result.success = true;\n return result;\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nconst NotesHeader = 'Notes\\n\\n';\nconst ApplicationsHeader = 'Applications\\n\\n';\nconst WebsitesHeader = 'Websites\\n\\n';\nconst Delimiter = '\\n---\\n';\n\nexport class KasperskyTxtImporter extends BaseImporter implements Importer {\n parse(data: string): ImportResult {\n const result = new ImportResult();\n\n let notesData: string;\n let applicationsData: string;\n let websitesData: string;\n let workingData = this.splitNewLine(data).join('\\n');\n\n if (workingData.indexOf(NotesHeader) !== -1) {\n const parts = workingData.split(NotesHeader);\n if (parts.length > 1) {\n workingData = parts[0];\n notesData = parts[1];\n }\n }\n if (workingData.indexOf(ApplicationsHeader) !== -1) {\n const parts = workingData.split(ApplicationsHeader);\n if (parts.length > 1) {\n workingData = parts[0];\n applicationsData = parts[1];\n }\n }\n if (workingData.indexOf(WebsitesHeader) === 0) {\n const parts = workingData.split(WebsitesHeader);\n if (parts.length > 1) {\n workingData = parts[0];\n websitesData = parts[1];\n }\n }\n\n const notes = this.parseDataCategory(notesData);\n const applications = this.parseDataCategory(applicationsData);\n const websites = this.parseDataCategory(websitesData);\n\n notes.forEach((n) => {\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(n.get('Name'));\n cipher.notes = this.getValueOrDefault(n.get('Text'));\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n websites.concat(applications).forEach((w) => {\n const cipher = this.initLoginCipher();\n const nameKey = w.has('Website name') ? 'Website name' : 'Application';\n cipher.name = this.getValueOrDefault(w.get(nameKey), '');\n if (!this.isNullOrWhitespace(w.get('Login name'))) {\n if (!this.isNullOrWhitespace(cipher.name)) {\n cipher.name += ': ';\n }\n cipher.name += w.get('Login name');\n }\n cipher.notes = this.getValueOrDefault(w.get('Comment'));\n if (w.has('Website URL')) {\n cipher.login.uris = this.makeUriArray(w.get('Website URL'));\n }\n cipher.login.username = this.getValueOrDefault(w.get('Login'));\n cipher.login.password = this.getValueOrDefault(w.get('Password'));\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return result;\n }\n\n private parseDataCategory(data: string): Array<Map<string, string>> {\n if (this.isNullOrWhitespace(data) || data.indexOf(Delimiter) === -1) {\n return [];\n }\n const items: Array<Map<string, string>> = [];\n data.split(Delimiter).forEach((p) => {\n if (p.indexOf('\\n') === -1) {\n return;\n }\n const item = new Map<string, string>();\n let itemComment: string;\n let itemCommentKey: string;\n p.split('\\n').forEach((l) => {\n if (itemComment != null) {\n itemComment += ('\\n' + l);\n return;\n }\n const colonIndex = l.indexOf(':');\n let key: string;\n let val: string;\n if (colonIndex === -1) {\n return;\n } else {\n key = l.substring(0, colonIndex);\n if (l.length > colonIndex + 1) {\n val = l.substring(colonIndex + 2);\n }\n }\n if (key != null) {\n item.set(key, val);\n }\n if (key === 'Comment' || key === 'Text') {\n itemComment = val;\n itemCommentKey = key;\n }\n });\n if (itemComment != null && itemCommentKey != null) {\n item.set(itemCommentKey, itemComment);\n }\n if (item.size === 0) {\n return;\n }\n items.push(item);\n });\n return items;\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { FieldType } from '../enums/fieldType';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nimport { FolderView } from '../models/view/folderView';\n\nexport class KeePass2XmlImporter extends BaseImporter implements Importer {\n result = new ImportResult();\n\n parse(data: string): ImportResult {\n const doc = this.parseXml(data);\n if (doc == null) {\n this.result.success = false;\n return this.result;\n }\n\n const rootGroup = doc.querySelector('KeePassFile > Root > Group');\n if (rootGroup == null) {\n this.result.errorMessage = 'Missing `KeePassFile > Root > Group` node.';\n this.result.success = false;\n return this.result;\n }\n\n this.traverse(rootGroup, true, '');\n\n if (this.organization) {\n this.moveFoldersToCollections(this.result);\n }\n\n this.result.success = true;\n return this.result;\n }\n\n traverse(node: Element, isRootNode: boolean, groupPrefixName: string) {\n const folderIndex = this.result.folders.length;\n let groupName = groupPrefixName;\n\n if (!isRootNode) {\n if (groupName !== '') {\n groupName += '/';\n }\n const nameEl = this.querySelectorDirectChild(node, 'Name');\n groupName += nameEl == null ? '-' : nameEl.textContent;\n const folder = new FolderView();\n folder.name = groupName;\n this.result.folders.push(folder);\n }\n\n this.querySelectorAllDirectChild(node, 'Entry').forEach((entry) => {\n const cipherIndex = this.result.ciphers.length;\n\n const cipher = this.initLoginCipher();\n this.querySelectorAllDirectChild(entry, 'String').forEach((entryString) => {\n const valueEl = this.querySelectorDirectChild(entryString, 'Value');\n const value = valueEl != null ? valueEl.textContent : null;\n if (this.isNullOrWhitespace(value)) {\n return;\n }\n const keyEl = this.querySelectorDirectChild(entryString, 'Key');\n const key = keyEl != null ? keyEl.textContent : null;\n\n if (key === 'URL') {\n cipher.login.uris = this.makeUriArray(value);\n } else if (key === 'UserName') {\n cipher.login.username = value;\n } else if (key === 'Password') {\n cipher.login.password = value;\n } else if (key === 'Title') {\n cipher.name = value;\n } else if (key === 'Notes') {\n cipher.notes += (value + '\\n');\n } else {\n let type = FieldType.Text;\n const attrs = (valueEl.attributes as any);\n if (attrs.length > 0 && attrs.ProtectInMemory != null &&\n attrs.ProtectInMemory.value === 'True') {\n type = FieldType.Hidden;\n }\n this.processKvp(cipher, key, value, type);\n }\n });\n\n this.cleanupCipher(cipher);\n this.result.ciphers.push(cipher);\n\n if (!isRootNode) {\n this.result.folderRelationships.push([cipherIndex, folderIndex]);\n }\n });\n\n this.querySelectorAllDirectChild(node, 'Group').forEach((group) => {\n this.traverse(group, false, groupName);\n });\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nexport class KeePassXCsvImporter extends BaseImporter implements Importer {\n parse(data: string): ImportResult {\n const result = new ImportResult();\n const results = this.parseCsv(data, true);\n if (results == null) {\n result.success = false;\n return result;\n }\n\n results.forEach((value) => {\n if (this.isNullOrWhitespace(value.Title)) {\n return;\n }\n\n value.Group = !this.isNullOrWhitespace(value.Group) && value.Group.startsWith('Root/') ?\n value.Group.replace('Root/', '') : value.Group;\n const groupName = !this.isNullOrWhitespace(value.Group) ? value.Group : null;\n this.processFolder(result, groupName);\n\n const cipher = this.initLoginCipher();\n cipher.notes = this.getValueOrDefault(value.Notes);\n cipher.name = this.getValueOrDefault(value.Title, '--');\n cipher.login.username = this.getValueOrDefault(value.Username);\n cipher.login.password = this.getValueOrDefault(value.Password);\n cipher.login.uris = this.makeUriArray(value.URL);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n if (this.organization) {\n this.moveFoldersToCollections(result);\n }\n\n result.success = true;\n return result;\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nimport { FolderView } from '../models/view/folderView';\n\nexport class KeeperCsvImporter extends BaseImporter implements Importer {\n parse(data: string): ImportResult {\n const result = new ImportResult();\n const results = this.parseCsv(data, false);\n if (results == null) {\n result.success = false;\n return result;\n }\n\n results.forEach((value) => {\n if (value.length < 6) {\n return;\n }\n\n this.processFolder(result, value[0]);\n const cipher = this.initLoginCipher();\n cipher.notes = this.getValueOrDefault(value[5]) + '\\n';\n cipher.name = this.getValueOrDefault(value[1], '--');\n cipher.login.username = this.getValueOrDefault(value[2]);\n cipher.login.password = this.getValueOrDefault(value[3]);\n cipher.login.uris = this.makeUriArray(value[4]);\n\n if (value.length > 7) {\n // we have some custom fields.\n for (let i = 7; i < value.length; i = i + 2) {\n this.processKvp(cipher, value[i], value[i + 1]);\n }\n }\n\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n if (this.organization) {\n this.moveFoldersToCollections(result);\n }\n\n result.success = true;\n return result;\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nimport { CardView } from '../models/view/cardView';\nimport { CipherView } from '../models/view/cipherView';\nimport { FolderView } from '../models/view/folderView';\nimport { IdentityView } from '../models/view/identityView';\nimport { LoginView } from '../models/view/loginView';\nimport { SecureNoteView } from '../models/view/secureNoteView';\n\nimport { CipherType } from '../enums/cipherType';\nimport { SecureNoteType } from '../enums/secureNoteType';\n\nexport class LastPassCsvImporter extends BaseImporter implements Importer {\n parse(data: string): ImportResult {\n const result = new ImportResult();\n const results = this.parseCsv(data, true);\n if (results == null) {\n result.success = false;\n return result;\n }\n\n results.forEach((value, index) => {\n const cipherIndex = result.ciphers.length;\n let folderIndex = result.folders.length;\n let grouping = value.grouping;\n if (grouping != null) {\n grouping = grouping.replace(/\\\\/g, '/').replace(/[\\x00-\\x1F\\x7F-\\x9F]/g, '');\n }\n const hasFolder = this.getValueOrDefault(grouping, '(none)') !== '(none)';\n let addFolder = hasFolder;\n\n if (hasFolder) {\n for (let i = 0; i < result.folders.length; i++) {\n if (result.folders[i].name === grouping) {\n addFolder = false;\n folderIndex = i;\n break;\n }\n }\n }\n\n const cipher = this.buildBaseCipher(value);\n if (cipher.type === CipherType.Login) {\n cipher.notes = this.getValueOrDefault(value.extra);\n cipher.login = new LoginView();\n cipher.login.uris = this.makeUriArray(value.url);\n cipher.login.username = this.getValueOrDefault(value.username);\n cipher.login.password = this.getValueOrDefault(value.password);\n } else if (cipher.type === CipherType.SecureNote) {\n this.parseSecureNote(value, cipher);\n } else if (cipher.type === CipherType.Card) {\n cipher.card = this.parseCard(value);\n cipher.notes = this.getValueOrDefault(value.notes);\n } else if (cipher.type === CipherType.Identity) {\n cipher.identity = this.parseIdentity(value);\n cipher.notes = this.getValueOrDefault(value.notes);\n if (!this.isNullOrWhitespace(value.ccnum)) {\n // there is a card on this identity too\n const cardCipher = this.buildBaseCipher(value);\n cardCipher.identity = null;\n cardCipher.type = CipherType.Card;\n cardCipher.card = this.parseCard(value);\n result.ciphers.push(cardCipher);\n }\n }\n\n result.ciphers.push(cipher);\n\n if (addFolder) {\n const f = new FolderView();\n f.name = grouping;\n result.folders.push(f);\n }\n if (hasFolder) {\n result.folderRelationships.push([cipherIndex, folderIndex]);\n }\n });\n\n if (this.organization) {\n this.moveFoldersToCollections(result);\n }\n\n result.success = true;\n return result;\n }\n\n private buildBaseCipher(value: any) {\n const cipher = new CipherView();\n if (value.hasOwnProperty('profilename') && value.hasOwnProperty('profilelanguage')) {\n // form fill\n cipher.favorite = false;\n cipher.name = this.getValueOrDefault(value.profilename, '--');\n cipher.type = CipherType.Card;\n\n if (!this.isNullOrWhitespace(value.title) || !this.isNullOrWhitespace(value.firstname) ||\n !this.isNullOrWhitespace(value.lastname) || !this.isNullOrWhitespace(value.address1) ||\n !this.isNullOrWhitespace(value.phone) || !this.isNullOrWhitespace(value.username) ||\n !this.isNullOrWhitespace(value.email)) {\n cipher.type = CipherType.Identity;\n }\n } else {\n // site or secure note\n cipher.favorite = !this.organization && this.getValueOrDefault(value.fav, '0') === '1';\n cipher.name = this.getValueOrDefault(value.name, '--');\n cipher.type = value.url === 'http://sn' ? CipherType.SecureNote : CipherType.Login;\n }\n return cipher;\n }\n\n private parseCard(value: any): CardView {\n const card = new CardView();\n card.cardholderName = this.getValueOrDefault(value.ccname);\n card.number = this.getValueOrDefault(value.ccnum);\n card.code = this.getValueOrDefault(value.cccsc);\n card.brand = this.getCardBrand(value.ccnum);\n\n if (!this.isNullOrWhitespace(value.ccexp) && value.ccexp.indexOf('-') > -1) {\n const ccexpParts = (value.ccexp as string).split('-');\n if (ccexpParts.length > 1) {\n card.expYear = ccexpParts[0];\n card.expMonth = ccexpParts[1];\n if (card.expMonth.length === 2 && card.expMonth[0] === '0') {\n card.expMonth = card.expMonth[1];\n }\n }\n }\n\n return card;\n }\n\n private parseIdentity(value: any): IdentityView {\n const identity = new IdentityView();\n identity.title = this.getValueOrDefault(value.title);\n identity.firstName = this.getValueOrDefault(value.firstname);\n identity.middleName = this.getValueOrDefault(value.middlename);\n identity.lastName = this.getValueOrDefault(value.lastname);\n identity.username = this.getValueOrDefault(value.username);\n identity.company = this.getValueOrDefault(value.company);\n identity.ssn = this.getValueOrDefault(value.ssn);\n identity.address1 = this.getValueOrDefault(value.address1);\n identity.address2 = this.getValueOrDefault(value.address2);\n identity.address3 = this.getValueOrDefault(value.address3);\n identity.city = this.getValueOrDefault(value.city);\n identity.state = this.getValueOrDefault(value.state);\n identity.postalCode = this.getValueOrDefault(value.zip);\n identity.country = this.getValueOrDefault(value.country);\n identity.email = this.getValueOrDefault(value.email);\n identity.phone = this.getValueOrDefault(value.phone);\n\n if (!this.isNullOrWhitespace(identity.title)) {\n identity.title = identity.title.charAt(0).toUpperCase() + identity.title.slice(1);\n }\n\n return identity;\n }\n\n private parseSecureNote(value: any, cipher: CipherView) {\n const extraParts = this.splitNewLine(value.extra);\n let processedNote = false;\n\n if (extraParts.length) {\n const typeParts = extraParts[0].split(':');\n if (typeParts.length > 1 && typeParts[0] === 'NoteType' &&\n (typeParts[1] === 'Credit Card' || typeParts[1] === 'Address')) {\n if (typeParts[1] === 'Credit Card') {\n const mappedData = this.parseSecureNoteMapping<CardView>(cipher, extraParts, {\n 'Number': 'number',\n 'Name on Card': 'cardholderName',\n 'Security Code': 'code',\n // LP provides date in a format like 'June,2020'\n // Store in expMonth, then parse and modify\n 'Expiration Date': 'expMonth',\n });\n\n if (this.isNullOrWhitespace(mappedData.expMonth) || mappedData.expMonth === ',') {\n // No expiration data\n mappedData.expMonth = undefined;\n } else {\n const [monthString, year] = mappedData.expMonth.split(',');\n // Parse month name into number\n if (!this.isNullOrWhitespace(monthString)) {\n const month = new Date(Date.parse(monthString.trim() + ' 1, 2012')).getMonth() + 1;\n if (isNaN(month)) {\n mappedData.expMonth = undefined;\n } else {\n mappedData.expMonth = month.toString();\n }\n } else {\n mappedData.expMonth = undefined;\n }\n if (!this.isNullOrWhitespace(year)) {\n mappedData.expYear = year;\n }\n }\n\n cipher.type = CipherType.Card;\n cipher.card = mappedData;\n } else if (typeParts[1] === 'Address') {\n const mappedData = this.parseSecureNoteMapping<IdentityView>(cipher, extraParts, {\n 'Title': 'title',\n 'First Name': 'firstName',\n 'Last Name': 'lastName',\n 'Middle Name': 'middleName',\n 'Company': 'company',\n 'Address 1': 'address1',\n 'Address 2': 'address2',\n 'Address 3': 'address3',\n 'City / Town': 'city',\n 'State': 'state',\n 'Zip / Postal Code': 'postalCode',\n 'Country': 'country',\n 'Email Address': 'email',\n 'Username': 'username',\n });\n cipher.type = CipherType.Identity;\n cipher.identity = mappedData;\n }\n processedNote = true;\n }\n }\n\n if (!processedNote) {\n cipher.secureNote = new SecureNoteView();\n cipher.secureNote.type = SecureNoteType.Generic;\n cipher.notes = this.getValueOrDefault(value.extra);\n }\n }\n\n private parseSecureNoteMapping<T>(cipher: CipherView, extraParts: string[], map: any): T {\n const dataObj: any = {};\n\n let processingNotes = false;\n extraParts.forEach((extraPart) => {\n let key: string = null;\n let val: string = null;\n if (!processingNotes) {\n if (this.isNullOrWhitespace(extraPart)) {\n return;\n }\n const colonIndex = extraPart.indexOf(':');\n if (colonIndex === -1) {\n key = extraPart;\n } else {\n key = extraPart.substring(0, colonIndex);\n if (extraPart.length > colonIndex) {\n val = extraPart.substring(colonIndex + 1);\n }\n }\n if (this.isNullOrWhitespace(key) || this.isNullOrWhitespace(val) || key === 'NoteType') {\n return;\n }\n }\n\n if (processingNotes) {\n cipher.notes += ('\\n' + extraPart);\n } else if (key === 'Notes') {\n if (!this.isNullOrWhitespace(cipher.notes)) {\n cipher.notes += ('\\n' + val);\n } else {\n cipher.notes = val;\n }\n processingNotes = true;\n } else if (map.hasOwnProperty(key)) {\n dataObj[map[key]] = val;\n } else {\n this.processKvp(cipher, key, val);\n }\n });\n\n return dataObj;\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nexport class LogMeOnceCsvImporter extends BaseImporter implements Importer {\n parse(data: string): ImportResult {\n const result = new ImportResult();\n const results = this.parseCsv(data, false);\n if (results == null) {\n result.success = false;\n return result;\n }\n\n results.forEach((value) => {\n if (value.length < 4) {\n return;\n }\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(value[0], '--');\n cipher.login.username = this.getValueOrDefault(value[2]);\n cipher.login.password = this.getValueOrDefault(value[3]);\n cipher.login.uris = this.makeUriArray(value[1]);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return result;\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nexport class MeldiumCsvImporter extends BaseImporter implements Importer {\n parse(data: string): ImportResult {\n const result = new ImportResult();\n const results = this.parseCsv(data, true);\n if (results == null) {\n result.success = false;\n return result;\n }\n\n results.forEach((value) => {\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(value.DisplayName, '--');\n cipher.notes = this.getValueOrDefault(value.Notes);\n cipher.login.username = this.getValueOrDefault(value.UserName);\n cipher.login.password = this.getValueOrDefault(value.Password);\n cipher.login.uris = this.makeUriArray(value.Url);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return result;\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nimport { CipherType } from '../enums/cipherType';\nimport { SecureNoteType } from '../enums/secureNoteType';\n\nimport { SecureNoteView } from '../models/view/secureNoteView';\n\nexport class MSecureCsvImporter extends BaseImporter implements Importer {\n parse(data: string): ImportResult {\n const result = new ImportResult();\n const results = this.parseCsv(data, false);\n if (results == null) {\n result.success = false;\n return result;\n }\n\n results.forEach((value) => {\n if (value.length < 3) {\n return;\n }\n\n const folderName = this.getValueOrDefault(value[0], 'Unassigned') !== 'Unassigned' ? value[0] : null;\n this.processFolder(result, folderName);\n\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(value[2], '--');\n\n if (value[1] === 'Web Logins' || value[1] === 'Login') {\n cipher.login.uris = this.makeUriArray(value[4]);\n cipher.login.username = this.getValueOrDefault(value[5]);\n cipher.login.password = this.getValueOrDefault(value[6]);\n cipher.notes = !this.isNullOrWhitespace(value[3]) ? value[3].split('\\\\n').join('\\n') : null;\n } else if (value.length > 3) {\n cipher.type = CipherType.SecureNote;\n cipher.secureNote = new SecureNoteView();\n cipher.secureNote.type = SecureNoteType.Generic;\n for (let i = 3; i < value.length; i++) {\n if (!this.isNullOrWhitespace(value[i])) {\n cipher.notes += (value[i] + '\\n');\n }\n }\n }\n\n if (!this.isNullOrWhitespace(value[1]) && cipher.type !== CipherType.Login) {\n cipher.name = value[1] + ': ' + cipher.name;\n }\n\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n if (this.organization) {\n this.moveFoldersToCollections(result);\n }\n\n result.success = true;\n return result;\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { CipherType } from '../enums/cipherType';\nimport { SecureNoteType } from '../enums/secureNoteType';\n\nimport { CardView } from '../models/view/cardView';\nimport { IdentityView } from '../models/view/identityView';\nimport { SecureNoteView } from '../models/view/secureNoteView';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nexport class MykiCsvImporter extends BaseImporter implements Importer {\n parse(data: string): ImportResult {\n const result = new ImportResult();\n const results = this.parseCsv(data, true);\n if (results == null) {\n result.success = false;\n return result;\n }\n\n results.forEach((value) => {\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(value.nickname, '--');\n cipher.notes = this.getValueOrDefault(value.additionalInfo);\n\n if (value.url !== undefined) {\n // Accounts\n cipher.login.uris = this.makeUriArray(value.url);\n cipher.login.username = this.getValueOrDefault(value.username);\n cipher.login.password = this.getValueOrDefault(value.password);\n cipher.login.totp = this.getValueOrDefault(value.twoFactAuthToken);\n } else if (value.cardNumber !== undefined) {\n // Cards\n cipher.card = new CardView();\n cipher.type = CipherType.Card;\n cipher.card.cardholderName = this.getValueOrDefault(value.cardName);\n cipher.card.number = this.getValueOrDefault(value.cardNumber);\n cipher.card.brand = this.getCardBrand(cipher.card.number);\n cipher.card.expMonth = this.getValueOrDefault(value.exp_month);\n cipher.card.expYear = this.getValueOrDefault(value.exp_year);\n cipher.card.code = this.getValueOrDefault(value.cvv);\n } else if (value.firstName !== undefined) {\n // Identities\n cipher.identity = new IdentityView();\n cipher.type = CipherType.Identity;\n cipher.identity.title = this.getValueOrDefault(value.title);\n cipher.identity.firstName = this.getValueOrDefault(value.firstName);\n cipher.identity.middleName = this.getValueOrDefault(value.middleName);\n cipher.identity.lastName = this.getValueOrDefault(value.lastName);\n cipher.identity.phone = this.getValueOrDefault(value.number);\n cipher.identity.email = this.getValueOrDefault(value.email);\n cipher.identity.address1 = this.getValueOrDefault(value.firstAddressLine);\n cipher.identity.address2 = this.getValueOrDefault(value.secondAddressLine);\n cipher.identity.city = this.getValueOrDefault(value.city);\n cipher.identity.country = this.getValueOrDefault(value.country);\n cipher.identity.postalCode = this.getValueOrDefault(value.zipCode);\n } else if (value.content !== undefined) {\n // Notes\n cipher.secureNote = new SecureNoteView();\n cipher.type = CipherType.SecureNote;\n cipher.secureNote.type = SecureNoteType.Generic;\n cipher.name = this.getValueOrDefault(value.title, '--');\n cipher.notes = this.getValueOrDefault(value.content);\n } else {\n return;\n }\n\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return result;\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nimport { CardView } from '../models/view/cardView';\nimport { CipherView } from '../models/view/cipherView';\nimport { IdentityView } from '../models/view/identityView';\nimport { PasswordHistoryView } from '../models/view/passwordHistoryView';\nimport { SecureNoteView } from '../models/view/secureNoteView';\n\nimport { CipherType } from '../enums/cipherType';\nimport { FieldType } from '../enums/fieldType';\nimport { SecureNoteType } from '../enums/secureNoteType';\n\nexport class OnePassword1PifImporter extends BaseImporter implements Importer {\n result = new ImportResult();\n\n parse(data: string): ImportResult {\n data.split(this.newLineRegex).forEach((line) => {\n if (this.isNullOrWhitespace(line) || line[0] !== '{') {\n return;\n }\n const item = JSON.parse(line);\n if (item.trashed === true) {\n return;\n }\n const cipher = this.initLoginCipher();\n\n if (this.isNullOrWhitespace(item.hmac)) {\n this.processStandardItem(item, cipher);\n } else {\n this.processWinOpVaultItem(item, cipher);\n }\n\n this.convertToNoteIfNeeded(cipher);\n this.cleanupCipher(cipher);\n this.result.ciphers.push(cipher);\n });\n\n this.result.success = true;\n return this.result;\n }\n\n private processWinOpVaultItem(item: any, cipher: CipherView) {\n if (item.overview != null) {\n cipher.name = this.getValueOrDefault(item.overview.title);\n if (item.overview.URLs != null) {\n const urls: string[] = [];\n item.overview.URLs.forEach((url: any) => {\n if (!this.isNullOrWhitespace(url.u)) {\n urls.push(url.u);\n }\n });\n cipher.login.uris = this.makeUriArray(urls);\n }\n }\n\n if (item.details != null) {\n if (item.details.passwordHistory != null) {\n this.parsePasswordHistory(item.details.passwordHistory, cipher);\n }\n if (!this.isNullOrWhitespace(item.details.ccnum) || !this.isNullOrWhitespace(item.details.cvv)) {\n cipher.type = CipherType.Card;\n cipher.card = new CardView();\n } else if (!this.isNullOrWhitespace(item.details.firstname) ||\n !this.isNullOrWhitespace(item.details.address1)) {\n cipher.type = CipherType.Identity;\n cipher.identity = new IdentityView();\n }\n if (cipher.type === CipherType.Login && !this.isNullOrWhitespace(item.details.password)) {\n cipher.login.password = item.details.password;\n }\n if (!this.isNullOrWhitespace(item.details.notesPlain)) {\n cipher.notes = item.details.notesPlain.split(this.newLineRegex).join('\\n') + '\\n';\n }\n if (item.details.fields != null) {\n this.parseFields(item.details.fields, cipher, 'designation', 'value', 'name');\n }\n if (item.details.sections != null) {\n item.details.sections.forEach((section: any) => {\n if (section.fields != null) {\n this.parseFields(section.fields, cipher, 'n', 'v', 't');\n }\n });\n }\n }\n }\n\n private processStandardItem(item: any, cipher: CipherView) {\n cipher.favorite = item.openContents && item.openContents.faveIndex ? true : false;\n cipher.name = this.getValueOrDefault(item.title);\n\n if (item.typeName === 'securenotes.SecureNote') {\n cipher.type = CipherType.SecureNote;\n cipher.secureNote = new SecureNoteView();\n cipher.secureNote.type = SecureNoteType.Generic;\n } else if (item.typeName === 'wallet.financial.CreditCard') {\n cipher.type = CipherType.Card;\n cipher.card = new CardView();\n } else if (item.typeName === 'identities.Identity') {\n cipher.type = CipherType.Identity;\n cipher.identity = new IdentityView();\n } else {\n cipher.login.uris = this.makeUriArray(item.location);\n }\n\n if (item.secureContents != null) {\n if (item.secureContents.passwordHistory != null) {\n this.parsePasswordHistory(item.secureContents.passwordHistory, cipher);\n }\n if (!this.isNullOrWhitespace(item.secureContents.notesPlain)) {\n cipher.notes = item.secureContents.notesPlain.split(this.newLineRegex).join('\\n') + '\\n';\n }\n if (cipher.type === CipherType.Login) {\n if (!this.isNullOrWhitespace(item.secureContents.password)) {\n cipher.login.password = item.secureContents.password;\n }\n if (item.secureContents.URLs != null) {\n const urls: string[] = [];\n item.secureContents.URLs.forEach((u: any) => {\n if (!this.isNullOrWhitespace(u.url)) {\n urls.push(u.url);\n }\n });\n if (urls.length > 0) {\n cipher.login.uris = this.makeUriArray(urls);\n }\n }\n }\n if (item.secureContents.fields != null) {\n this.parseFields(item.secureContents.fields, cipher, 'designation', 'value', 'name');\n }\n if (item.secureContents.sections != null) {\n item.secureContents.sections.forEach((section: any) => {\n if (section.fields != null) {\n this.parseFields(section.fields, cipher, 'n', 'v', 't');\n }\n });\n }\n }\n }\n\n private parsePasswordHistory(items: any[], cipher: CipherView) {\n const maxSize = items.length > 5 ? 5 : items.length;\n cipher.passwordHistory = items\n .filter((h: any) => !this.isNullOrWhitespace(h.value) && h.time != null)\n .sort((a, b) => b.time - a.time)\n .slice(0, maxSize)\n .map((h: any) => {\n const ph = new PasswordHistoryView();\n ph.password = h.value;\n ph.lastUsedDate = new Date(('' + h.time).length >= 13 ? h.time : h.time * 1000);\n return ph;\n });\n }\n\n private parseFields(fields: any[], cipher: CipherView, designationKey: string, valueKey: string, nameKey: string) {\n fields.forEach((field: any) => {\n if (field[valueKey] == null || field[valueKey].toString().trim() === '') {\n return;\n }\n\n const fieldValue = field[valueKey].toString();\n const fieldDesignation = field[designationKey] != null ? field[designationKey].toString() : null;\n\n if (cipher.type === CipherType.Login) {\n if (this.isNullOrWhitespace(cipher.login.username) && fieldDesignation === 'username') {\n cipher.login.username = fieldValue;\n return;\n } else if (this.isNullOrWhitespace(cipher.login.password) && fieldDesignation === 'password') {\n cipher.login.password = fieldValue;\n return;\n } else if (this.isNullOrWhitespace(cipher.login.totp) && fieldDesignation != null &&\n fieldDesignation.startsWith('TOTP_')) {\n cipher.login.totp = fieldValue;\n return;\n }\n } else if (cipher.type === CipherType.Card) {\n if (this.isNullOrWhitespace(cipher.card.number) && fieldDesignation === 'ccnum') {\n cipher.card.number = fieldValue;\n cipher.card.brand = this.getCardBrand(fieldValue);\n return;\n } else if (this.isNullOrWhitespace(cipher.card.code) && fieldDesignation === 'cvv') {\n cipher.card.code = fieldValue;\n return;\n } else if (this.isNullOrWhitespace(cipher.card.cardholderName) && fieldDesignation === 'cardholder') {\n cipher.card.cardholderName = fieldValue;\n return;\n } else if (this.isNullOrWhitespace(cipher.card.expiration) && fieldDesignation === 'expiry' &&\n fieldValue.length === 6) {\n cipher.card.expMonth = (fieldValue as string).substr(4, 2);\n if (cipher.card.expMonth[0] === '0') {\n cipher.card.expMonth = cipher.card.expMonth.substr(1, 1);\n }\n cipher.card.expYear = (fieldValue as string).substr(0, 4);\n return;\n } else if (fieldDesignation === 'type') {\n // Skip since brand was determined from number above\n return;\n }\n } else if (cipher.type === CipherType.Identity) {\n const identity = cipher.identity;\n if (this.isNullOrWhitespace(identity.firstName) && fieldDesignation === 'firstname') {\n identity.firstName = fieldValue;\n return;\n } else if (this.isNullOrWhitespace(identity.lastName) && fieldDesignation === 'lastname') {\n identity.lastName = fieldValue;\n return;\n } else if (this.isNullOrWhitespace(identity.middleName) && fieldDesignation === 'initial') {\n identity.middleName = fieldValue;\n return;\n } else if (this.isNullOrWhitespace(identity.phone) && fieldDesignation === 'defphone') {\n identity.phone = fieldValue;\n return;\n } else if (this.isNullOrWhitespace(identity.company) && fieldDesignation === 'company') {\n identity.company = fieldValue;\n return;\n } else if (this.isNullOrWhitespace(identity.email) && fieldDesignation === 'email') {\n identity.email = fieldValue;\n return;\n } else if (this.isNullOrWhitespace(identity.username) && fieldDesignation === 'username') {\n identity.username = fieldValue;\n return;\n } else if (fieldDesignation === 'address') {\n // fieldValue is an object casted into a string, so access the plain value instead\n const { street, city, country, zip } = field[valueKey];\n identity.address1 = this.getValueOrDefault(street);\n identity.city = this.getValueOrDefault(city);\n if (!this.isNullOrWhitespace(country)) {\n identity.country = country.toUpperCase();\n }\n identity.postalCode = this.getValueOrDefault(zip);\n return;\n }\n }\n\n const fieldName = this.isNullOrWhitespace(field[nameKey]) ? 'no_name' : field[nameKey];\n if (fieldName === 'password' && cipher.passwordHistory != null &&\n cipher.passwordHistory.some((h) => h.password === fieldValue)) {\n return;\n }\n\n const fieldType = field.k === 'concealed' ? FieldType.Hidden : FieldType.Text;\n this.processKvp(cipher, fieldName, fieldValue, fieldType);\n });\n }\n}\n","export class View {\n}\n","export { AttachmentView } from './attachmentView';\nexport { CardView } from './cardView';\nexport { CipherView } from './cipherView';\nexport { FieldView } from './fieldView';\nexport { IdentityView } from './identityView';\nexport { LoginUriView } from './loginUriView';\nexport { LoginView } from './loginView';\nexport { SecureNoteView } from './secureNoteView';\nexport { View } from './view';\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nimport { CipherType } from '../enums/cipherType';\nimport { CardView } from '../models/view';\n\nconst IgnoredProperties = ['ainfo', 'autosubmit', 'notesplain', 'ps', 'scope', 'tags', 'title', 'uuid'];\n\nexport class OnePasswordWinCsvImporter extends BaseImporter implements Importer {\n parse(data: string): ImportResult {\n const result = new ImportResult();\n const results = this.parseCsv(data, true);\n if (results == null) {\n result.success = false;\n return result;\n }\n\n results.forEach((value) => {\n if (this.isNullOrWhitespace(this.getProp(value, 'title'))) {\n return;\n }\n\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(this.getProp(value, 'title'), '--');\n cipher.notes = this.getValueOrDefault(this.getProp(value, 'notesPlain'), '') + '\\n';\n\n if (!this.isNullOrWhitespace(this.getProp(value, 'number')) &&\n !this.isNullOrWhitespace(this.getProp(value, 'expiry date'))) {\n cipher.type = CipherType.Card;\n cipher.card = new CardView();\n }\n\n let altUsername: string = null;\n for (const property in value) {\n if (!value.hasOwnProperty(property) || this.isNullOrWhitespace(value[property])) {\n continue;\n }\n\n const lowerProp = property.toLowerCase();\n if (cipher.type === CipherType.Login) {\n if (this.isNullOrWhitespace(cipher.login.password) && lowerProp === 'password') {\n cipher.login.password = value[property];\n continue;\n } else if (this.isNullOrWhitespace(cipher.login.username) && lowerProp === 'username') {\n cipher.login.username = value[property];\n continue;\n } else if ((cipher.login.uris == null || cipher.login.uri.length === 0) && lowerProp === 'urls') {\n const urls = value[property].split(this.newLineRegex);\n cipher.login.uris = this.makeUriArray(urls);\n continue;\n }\n } else if (cipher.type === CipherType.Card) {\n if (this.isNullOrWhitespace(cipher.card.number) && lowerProp === 'number') {\n cipher.card.number = value[property];\n cipher.card.brand = this.getCardBrand(this.getProp(value, 'number'));\n continue;\n } else if (this.isNullOrWhitespace(cipher.card.code) && lowerProp === 'verification number') {\n cipher.card.code = value[property];\n continue;\n } else if (this.isNullOrWhitespace(cipher.card.cardholderName) && lowerProp === 'cardholder name') {\n cipher.card.cardholderName = value[property];\n continue;\n } else if (this.isNullOrWhitespace(cipher.card.expiration) && lowerProp === 'expiry date' &&\n value[property].length === 6) {\n cipher.card.expMonth = (value[property] as string).substr(4, 2);\n if (cipher.card.expMonth[0] === '0') {\n cipher.card.expMonth = cipher.card.expMonth.substr(1, 1);\n }\n cipher.card.expYear = (value[property] as string).substr(0, 4);\n continue;\n } else if (lowerProp === 'type') {\n // Skip since brand was determined from number above\n continue;\n }\n }\n\n if (IgnoredProperties.indexOf(lowerProp) === -1 && !lowerProp.startsWith('section:') &&\n !lowerProp.startsWith('section ')) {\n if (altUsername == null && lowerProp === 'email') {\n altUsername = value[property];\n }\n this.processKvp(cipher, property, value[property]);\n }\n }\n\n if (cipher.type === CipherType.Login && !this.isNullOrWhitespace(altUsername) &&\n this.isNullOrWhitespace(cipher.login.username) && altUsername.indexOf('://') === -1) {\n cipher.login.username = altUsername;\n }\n\n this.convertToNoteIfNeeded(cipher);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return result;\n }\n\n private getProp(obj: any, name: string): any {\n return obj[name] || obj[name.toUpperCase()];\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nimport { CollectionView } from '../models/view/collectionView';\nimport { FolderView } from '../models/view/folderView';\n\nexport class PadlockCsvImporter extends BaseImporter implements Importer {\n parse(data: string): ImportResult {\n const result = new ImportResult();\n const results = this.parseCsv(data, false);\n if (results == null) {\n result.success = false;\n return result;\n }\n\n let headers: string[] = null;\n results.forEach((value) => {\n if (headers == null) {\n headers = value.map((v: string) => v);\n return;\n }\n\n if (value.length < 2 || value.length !== headers.length) {\n return;\n }\n\n if (!this.isNullOrWhitespace(value[1])) {\n if (this.organization) {\n const tags = (value[1] as string).split(',');\n tags.forEach((tag) => {\n tag = tag.trim();\n let addCollection = true;\n let collectionIndex = result.collections.length;\n\n for (let i = 0; i < result.collections.length; i++) {\n if (result.collections[i].name === tag) {\n addCollection = false;\n collectionIndex = i;\n break;\n }\n }\n\n if (addCollection) {\n const collection = new CollectionView();\n collection.name = tag;\n result.collections.push(collection);\n }\n\n result.collectionRelationships.push([result.ciphers.length, collectionIndex]);\n });\n } else {\n const tags = (value[1] as string).split(',');\n const tag = tags.length > 0 ? tags[0].trim() : null;\n this.processFolder(result, tag);\n }\n }\n\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(value[0], '--');\n\n for (let i = 2; i < value.length; i++) {\n const header = headers[i].trim().toLowerCase();\n if (this.isNullOrWhitespace(value[i]) || this.isNullOrWhitespace(header)) {\n continue;\n }\n\n if (this.usernameFieldNames.indexOf(header) > -1) {\n cipher.login.username = value[i];\n } else if (this.passwordFieldNames.indexOf(header) > -1) {\n cipher.login.password = value[i];\n } else if (this.uriFieldNames.indexOf(header) > -1) {\n cipher.login.uris = this.makeUriArray(value[i]);\n } else {\n this.processKvp(cipher, headers[i], value[i]);\n }\n }\n\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return result;\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nexport class PassKeepCsvImporter extends BaseImporter implements Importer {\n parse(data: string): ImportResult {\n const result = new ImportResult();\n const results = this.parseCsv(data, true);\n if (results == null) {\n result.success = false;\n return result;\n }\n\n results.forEach((value) => {\n this.processFolder(result, this.getValue('category', value));\n const cipher = this.initLoginCipher();\n cipher.notes = this.getValue('description', value);\n cipher.name = this.getValueOrDefault(this.getValue('title', value), '--');\n cipher.login.username = this.getValue('username', value);\n cipher.login.password = this.getValue('password', value);\n cipher.login.uris = this.makeUriArray(this.getValue('site', value));\n this.processKvp(cipher, 'Password 2', this.getValue('password2', value));\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n if (this.organization) {\n this.moveFoldersToCollections(result);\n }\n\n result.success = true;\n return result;\n }\n\n private getValue(key: string, value: any) {\n return this.getValueOrDefault(value[key], this.getValueOrDefault(value[(' ' + key)]));\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nexport class PassmanJsonImporter extends BaseImporter implements Importer {\n parse(data: string): ImportResult {\n const result = new ImportResult();\n const results = JSON.parse(data);\n if (results == null || results.length === 0) {\n result.success = false;\n return result;\n }\n\n results.forEach((credential: any) => {\n if (credential.tags != null && credential.tags.length > 0) {\n const folderName = credential.tags[0].text;\n this.processFolder(result, folderName);\n }\n\n const cipher = this.initLoginCipher();\n cipher.name = credential.label;\n\n cipher.login.username = this.getValueOrDefault(credential.username);\n if (this.isNullOrWhitespace(cipher.login.username)) {\n cipher.login.username = this.getValueOrDefault(credential.email);\n } else if (!this.isNullOrWhitespace(credential.email)) {\n cipher.notes = ('Email: ' + credential.email + '\\n');\n }\n\n cipher.login.password = this.getValueOrDefault(credential.password);\n cipher.login.uris = this.makeUriArray(credential.url);\n cipher.notes += this.getValueOrDefault(credential.description, '');\n if (credential.otp != null) {\n cipher.login.totp = this.getValueOrDefault(credential.otp.secret);\n }\n\n if (credential.custom_fields != null) {\n credential.custom_fields.forEach((customField: any) => {\n switch (customField.field_type) {\n case 'text':\n case 'password':\n this.processKvp(cipher, customField.label, customField.value);\n break;\n }\n });\n }\n\n this.convertToNoteIfNeeded(cipher);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n if (this.organization) {\n this.moveFoldersToCollections(result);\n }\n\n result.success = true;\n return result;\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nimport { CollectionView } from '../models/view/collectionView';\n\nexport class PasspackCsvImporter extends BaseImporter implements Importer {\n parse(data: string): ImportResult {\n const result = new ImportResult();\n const results = this.parseCsv(data, true);\n if (results == null) {\n result.success = false;\n return result;\n }\n\n results.forEach((value) => {\n const tagsJson = !this.isNullOrWhitespace(value.Tags) ? JSON.parse(value.Tags) : null;\n const tags: string[] = tagsJson != null && tagsJson.tags != null && tagsJson.tags.length > 0 ?\n tagsJson.tags.map((tagJson: string) => {\n try {\n const t = JSON.parse(tagJson);\n return this.getValueOrDefault(t.tag);\n } catch { }\n return null;\n }).filter((t: string) => !this.isNullOrWhitespace(t)) : null;\n\n if (this.organization && tags != null && tags.length > 0) {\n tags.forEach((tag) => {\n let addCollection = true;\n let collectionIndex = result.collections.length;\n\n for (let i = 0; i < result.collections.length; i++) {\n if (result.collections[i].name === tag) {\n addCollection = false;\n collectionIndex = i;\n break;\n }\n }\n\n if (addCollection) {\n const collection = new CollectionView();\n collection.name = tag;\n result.collections.push(collection);\n }\n\n result.collectionRelationships.push([result.ciphers.length, collectionIndex]);\n });\n } else if (!this.organization && tags != null && tags.length > 0) {\n this.processFolder(result, tags[0]);\n }\n\n const cipher = this.initLoginCipher();\n cipher.notes = this.getValueOrDefault(value.Notes, '');\n cipher.notes += ('\\n\\n' + this.getValueOrDefault(value['Shared Notes'], '') + '\\n');\n cipher.name = this.getValueOrDefault(value['Entry Name'], '--');\n cipher.login.username = this.getValueOrDefault(value['User ID']);\n cipher.login.password = this.getValueOrDefault(value.Password);\n cipher.login.uris = this.makeUriArray(value.URL);\n\n if (value.__parsed_extra != null && value.__parsed_extra.length > 0) {\n value.__parsed_extra.forEach((extra: string) => {\n if (!this.isNullOrWhitespace(extra)) {\n cipher.notes += ('\\n' + extra);\n }\n });\n }\n\n const fieldsJson = !this.isNullOrWhitespace(value['Extra Fields']) ?\n JSON.parse(value['Extra Fields']) : null;\n const fields = fieldsJson != null && fieldsJson.extraFields != null &&\n fieldsJson.extraFields.length > 0 ? fieldsJson.extraFields.map((fieldJson: string) => {\n try {\n return JSON.parse(fieldJson);\n } catch { }\n return null;\n }) : null;\n if (fields != null) {\n fields.forEach((f: any) => {\n if (f != null) {\n this.processKvp(cipher, f.name, f.data);\n }\n });\n }\n\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return result;\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nexport class PasswordAgentCsvImporter extends BaseImporter implements Importer {\n parse(data: string): ImportResult {\n const result = new ImportResult();\n const results = this.parseCsv(data, false);\n if (results == null) {\n result.success = false;\n return result;\n }\n\n let newVersion = true;\n results.forEach((value) => {\n if (value.length !== 5 && value.length < 9) {\n return;\n }\n const altFormat = value.length === 10 && value[0] === '0';\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(value[altFormat ? 1 : 0], '--');\n cipher.login.username = this.getValueOrDefault(value[altFormat ? 2 : 1]);\n cipher.login.password = this.getValueOrDefault(value[altFormat ? 3 : 2]);\n if (value.length === 5) {\n newVersion = false;\n cipher.notes = this.getValueOrDefault(value[4]);\n cipher.login.uris = this.makeUriArray(value[3]);\n } else {\n const folder = this.getValueOrDefault(value[altFormat ? 9 : 8], '(None)');\n let folderName = folder !== '(None)' ? folder.split('\\\\').join('/') : null;\n if (folderName != null) {\n folderName = folder.split(' > ').join('/');\n folderName = folder.split('>').join('/');\n }\n this.processFolder(result, folderName);\n cipher.notes = this.getValueOrDefault(value[altFormat ? 5 : 3]);\n cipher.login.uris = this.makeUriArray(value[4]);\n }\n this.convertToNoteIfNeeded(cipher);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n if (newVersion && this.organization) {\n this.moveFoldersToCollections(result);\n }\n\n result.success = true;\n return result;\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nimport { CardView } from '../models/view/cardView';\nimport { FolderView } from '../models/view/folderView';\n\nimport { CipherType } from '../enums/cipherType';\n\nexport class PasswordBossJsonImporter extends BaseImporter implements Importer {\n parse(data: string): ImportResult {\n const result = new ImportResult();\n const results = JSON.parse(data);\n if (results == null || results.items == null) {\n result.success = false;\n return result;\n }\n\n const foldersMap = new Map<string, string>();\n results.folders.forEach((value: any) => {\n foldersMap.set(value.id, value.name);\n });\n const foldersIndexMap = new Map<string, number>();\n foldersMap.forEach((val, key) => {\n foldersIndexMap.set(key, result.folders.length);\n const f = new FolderView();\n f.name = val;\n result.folders.push(f);\n });\n\n results.items.forEach((value: any) => {\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(value.name, '--');\n cipher.login.uris = this.makeUriArray(value.login_url);\n\n if (value.folder != null && foldersIndexMap.has(value.folder)) {\n result.folderRelationships.push([result.ciphers.length, foldersIndexMap.get(value.folder)]);\n }\n\n if (value.identifiers == null) {\n return;\n }\n\n if (!this.isNullOrWhitespace(value.identifiers.notes)) {\n cipher.notes = value.identifiers.notes.split('\\\\r\\\\n').join('\\n').split('\\\\n').join('\\n');\n }\n\n if (value.type === 'CreditCard') {\n cipher.card = new CardView();\n cipher.type = CipherType.Card;\n }\n\n for (const property in value.identifiers) {\n if (!value.identifiers.hasOwnProperty(property)) {\n continue;\n }\n const valObj = value.identifiers[property];\n const val = valObj != null ? valObj.toString() : null;\n if (this.isNullOrWhitespace(val) || property === 'notes' || property === 'ignoreItemInSecurityScore') {\n continue;\n }\n\n if (property === 'custom_fields') {\n valObj.forEach((cf: any) => {\n this.processKvp(cipher, cf.name, cf.value);\n });\n continue;\n }\n\n if (cipher.type === CipherType.Card) {\n if (property === 'cardNumber') {\n cipher.card.number = val;\n cipher.card.brand = this.getCardBrand(val);\n continue;\n } else if (property === 'nameOnCard') {\n cipher.card.cardholderName = val;\n continue;\n } else if (property === 'security_code') {\n cipher.card.code = val;\n continue;\n } else if (property === 'expires') {\n try {\n const expDate = new Date(val);\n cipher.card.expYear = expDate.getFullYear().toString();\n cipher.card.expMonth = (expDate.getMonth() + 1).toString();\n } catch { }\n continue;\n } else if (property === 'cardType') {\n continue;\n }\n } else {\n if ((property === 'username' || property === 'email') &&\n this.isNullOrWhitespace(cipher.login.username)) {\n cipher.login.username = val;\n continue;\n } else if (property === 'password') {\n cipher.login.password = val;\n continue;\n } else if (property === 'totp') {\n cipher.login.totp = val;\n continue;\n } else if ((cipher.login.uris == null || cipher.login.uris.length === 0) &&\n this.uriFieldNames.indexOf(property) > -1) {\n cipher.login.uris = this.makeUriArray(val);\n continue;\n }\n }\n\n this.processKvp(cipher, property, val);\n }\n\n this.convertToNoteIfNeeded(cipher);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return result;\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nexport class PasswordDragonXmlImporter extends BaseImporter implements Importer {\n parse(data: string): ImportResult {\n const result = new ImportResult();\n const doc = this.parseXml(data);\n if (doc == null) {\n result.success = false;\n return result;\n }\n\n const records = doc.querySelectorAll('PasswordManager > record');\n Array.from(records).forEach((record) => {\n const category = this.querySelectorDirectChild(record, 'Category');\n const categoryText = category != null && !this.isNullOrWhitespace(category.textContent) &&\n category.textContent !== 'Unfiled' ? category.textContent : null;\n this.processFolder(result, categoryText);\n\n const accountName = this.querySelectorDirectChild(record, 'Account-Name');\n const userId = this.querySelectorDirectChild(record, 'User-Id');\n const password = this.querySelectorDirectChild(record, 'Password');\n const url = this.querySelectorDirectChild(record, 'URL');\n const notes = this.querySelectorDirectChild(record, 'Notes');\n const cipher = this.initLoginCipher();\n cipher.name = accountName != null ? this.getValueOrDefault(accountName.textContent, '--') : '--';\n cipher.notes = notes != null ? this.getValueOrDefault(notes.textContent) : '';\n cipher.login.username = userId != null ? this.getValueOrDefault(userId.textContent) : null;\n cipher.login.password = password != null ? this.getValueOrDefault(password.textContent) : null;\n cipher.login.uris = url != null ? this.makeUriArray(url.textContent) : null;\n\n const attributes: string[] = [];\n for (let i = 1; i <= 10; i++) {\n attributes.push('Attribute-' + i);\n }\n\n this.querySelectorAllDirectChild(record, attributes.join(',')).forEach((attr) => {\n if (this.isNullOrWhitespace(attr.textContent) || attr.textContent === 'null') {\n return;\n }\n this.processKvp(cipher, attr.tagName, attr.textContent);\n });\n\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n if (this.organization) {\n this.moveFoldersToCollections(result);\n }\n\n result.success = true;\n return result;\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nexport class PasswordSafeXmlImporter extends BaseImporter implements Importer {\n parse(data: string): ImportResult {\n const result = new ImportResult();\n const doc = this.parseXml(data);\n if (doc == null) {\n result.success = false;\n return result;\n }\n\n const passwordSafe = doc.querySelector('passwordsafe');\n if (passwordSafe == null) {\n result.errorMessage = 'Missing `passwordsafe` node.';\n result.success = false;\n return result;\n }\n\n const notesDelimiter = passwordSafe.getAttribute('delimiter');\n const entries = doc.querySelectorAll('passwordsafe > entry');\n Array.from(entries).forEach((entry) => {\n const group = this.querySelectorDirectChild(entry, 'group');\n const groupText = group != null && !this.isNullOrWhitespace(group.textContent) ?\n group.textContent.split('.').join('/') : null;\n this.processFolder(result, groupText);\n\n const title = this.querySelectorDirectChild(entry, 'title');\n const username = this.querySelectorDirectChild(entry, 'username');\n const email = this.querySelectorDirectChild(entry, 'email');\n const password = this.querySelectorDirectChild(entry, 'password');\n const url = this.querySelectorDirectChild(entry, 'url');\n const notes = this.querySelectorDirectChild(entry, 'notes');\n const cipher = this.initLoginCipher();\n cipher.name = title != null ? this.getValueOrDefault(title.textContent, '--') : '--';\n cipher.notes = notes != null ?\n this.getValueOrDefault(notes.textContent, '').split(notesDelimiter).join('\\n') : null;\n cipher.login.username = username != null ? this.getValueOrDefault(username.textContent) : null;\n cipher.login.password = password != null ? this.getValueOrDefault(password.textContent) : null;\n cipher.login.uris = url != null ? this.makeUriArray(url.textContent) : null;\n\n if (this.isNullOrWhitespace(cipher.login.username) && email != null) {\n cipher.login.username = this.getValueOrDefault(email.textContent);\n } else if (email != null && !this.isNullOrWhitespace(email.textContent)) {\n cipher.notes = this.isNullOrWhitespace(cipher.notes) ? 'Email: ' + email.textContent\n : (cipher.notes + '\\n' + 'Email: ' + email.textContent);\n }\n\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n if (this.organization) {\n this.moveFoldersToCollections(result);\n }\n\n result.success = true;\n return result;\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nexport class PasswordWalletTxtImporter extends BaseImporter implements Importer {\n parse(data: string): ImportResult {\n const result = new ImportResult();\n const results = this.parseCsv(data, false);\n if (results == null) {\n result.success = false;\n return result;\n }\n\n results.forEach((value) => {\n if (value.length < 1) {\n return;\n }\n if (value.length > 5) {\n this.processFolder(result, value[5]);\n }\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(value[0], '--');\n if (value.length > 4) {\n cipher.notes = this.getValueOrDefault(value[4], '').split('¬').join('\\n');\n }\n if (value.length > 2) {\n cipher.login.username = this.getValueOrDefault(value[2]);\n }\n if (value.length > 3) {\n cipher.login.password = this.getValueOrDefault(value[3]);\n }\n if (value.length > 1) {\n cipher.login.uris = this.makeUriArray(value[1]);\n }\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n if (this.organization) {\n this.moveFoldersToCollections(result);\n }\n\n result.success = true;\n return result;\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { CipherType } from '../enums/cipherType';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nimport { CardView } from '../models/view/cardView';\n\nexport class RememBearCsvImporter extends BaseImporter implements Importer {\n parse(data: string): ImportResult {\n const result = new ImportResult();\n const results = this.parseCsv(data, true);\n if (results == null) {\n result.success = false;\n return result;\n }\n\n results.forEach((value) => {\n if (value.trash === 'true') {\n return;\n }\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(value.name);\n cipher.notes = this.getValueOrDefault(value.notes);\n if (value.type === 'LoginItem') {\n cipher.login.uris = this.makeUriArray(value.website);\n cipher.login.password = this.getValueOrDefault(value.password);\n cipher.login.username = this.getValueOrDefault(value.username);\n } else if (value.type === 'CreditCardItem') {\n cipher.type = CipherType.Card;\n cipher.card = new CardView();\n cipher.card.cardholderName = this.getValueOrDefault(value.cardholder);\n cipher.card.number = this.getValueOrDefault(value.number);\n cipher.card.brand = this.getCardBrand(cipher.card.number);\n cipher.card.code = this.getValueOrDefault(value.verification);\n\n try {\n const expMonth = this.getValueOrDefault(value.expiryMonth);\n if (expMonth != null) {\n const expMonthNumber = parseInt(expMonth, null);\n if (expMonthNumber != null && expMonthNumber >= 1 && expMonthNumber <= 12) {\n cipher.card.expMonth = expMonthNumber.toString();\n }\n }\n } catch { }\n try {\n const expYear = this.getValueOrDefault(value.expiryYear);\n if (expYear != null) {\n const expYearNumber = parseInt(expYear, null);\n if (expYearNumber != null) {\n cipher.card.expYear = expYearNumber.toString();\n }\n }\n } catch { }\n\n const pin = this.getValueOrDefault(value.pin);\n if (pin != null) {\n this.processKvp(cipher, 'PIN', pin);\n }\n const zip = this.getValueOrDefault(value.zipCode);\n if (zip != null) {\n this.processKvp(cipher, 'Zip Code', zip);\n }\n }\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return result;\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nexport class RoboFormCsvImporter extends BaseImporter implements Importer {\n parse(data: string): ImportResult {\n const result = new ImportResult();\n const results = this.parseCsv(data, true);\n if (results == null) {\n result.success = false;\n return result;\n }\n\n let i = 1;\n results.forEach((value) => {\n const folder = !this.isNullOrWhitespace(value.Folder) && value.Folder.startsWith('/') ?\n value.Folder.replace('/', '') : value.Folder;\n const folderName = !this.isNullOrWhitespace(folder) ? folder : null;\n this.processFolder(result, folderName);\n\n const cipher = this.initLoginCipher();\n cipher.notes = this.getValueOrDefault(value.Note);\n cipher.name = this.getValueOrDefault(value.Name, '--');\n cipher.login.username = this.getValueOrDefault(value.Login);\n cipher.login.password = this.getValueOrDefault(value.Pwd);\n cipher.login.uris = this.makeUriArray(value.Url);\n\n if (!this.isNullOrWhitespace(value.Rf_fields)) {\n let fields: string[] = [value.Rf_fields];\n if (value.__parsed_extra != null && value.__parsed_extra.length > 0) {\n fields = fields.concat(value.__parsed_extra);\n }\n fields.forEach((field: string) => {\n const parts = field.split(':');\n if (parts.length < 3) {\n return;\n }\n const key = parts[0] === '-no-name-' ? null : parts[0];\n const val = parts.length === 4 && parts[2] === 'rck' ? parts[1] : parts[2];\n this.processKvp(cipher, key, val);\n });\n }\n\n this.convertToNoteIfNeeded(cipher);\n this.cleanupCipher(cipher);\n\n if (i === results.length && cipher.name === '--' && this.isNullOrWhitespace(cipher.login.password)) {\n return;\n }\n\n result.ciphers.push(cipher);\n i++;\n });\n\n if (this.organization) {\n this.moveFoldersToCollections(result);\n }\n\n result.success = true;\n return result;\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nimport { FolderView } from '../models/view/folderView';\nimport { SecureNoteView } from '../models/view/secureNoteView';\n\nimport { CipherType } from '../enums/cipherType';\nimport { SecureNoteType } from '../enums/secureNoteType';\n\nexport class SafeInCloudXmlImporter extends BaseImporter implements Importer {\n parse(data: string): ImportResult {\n const result = new ImportResult();\n const doc = this.parseXml(data);\n if (doc == null) {\n result.success = false;\n return result;\n }\n\n const db = doc.querySelector('database');\n if (db == null) {\n result.errorMessage = 'Missing `database` node.';\n result.success = false;\n return result;\n }\n\n const foldersMap = new Map<string, number>();\n\n Array.from(doc.querySelectorAll('database > label')).forEach((labelEl) => {\n const name = labelEl.getAttribute('name');\n const id = labelEl.getAttribute('id');\n if (!this.isNullOrWhitespace(name) && !this.isNullOrWhitespace(id)) {\n foldersMap.set(id, result.folders.length);\n const folder = new FolderView();\n folder.name = name;\n result.folders.push(folder);\n }\n });\n\n Array.from(doc.querySelectorAll('database > card')).forEach((cardEl) => {\n if (cardEl.getAttribute('template') === 'true') {\n return;\n }\n\n const labelIdEl = this.querySelectorDirectChild(cardEl, 'label_id');\n if (labelIdEl != null) {\n const labelId = labelIdEl.textContent;\n if (!this.isNullOrWhitespace(labelId) && foldersMap.has(labelId)) {\n result.folderRelationships.push([result.ciphers.length, foldersMap.get(labelId)]);\n }\n }\n\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(cardEl.getAttribute('title'), '--');\n\n const cardType = cardEl.getAttribute('type');\n if (cardType === 'note') {\n cipher.type = CipherType.SecureNote;\n cipher.secureNote = new SecureNoteView();\n cipher.secureNote.type = SecureNoteType.Generic;\n } else {\n Array.from(this.querySelectorAllDirectChild(cardEl, 'field')).forEach((fieldEl) => {\n const text = fieldEl.textContent;\n if (this.isNullOrWhitespace(text)) {\n return;\n }\n const name = fieldEl.getAttribute('name');\n const fieldType = this.getValueOrDefault(fieldEl.getAttribute('type'), '').toLowerCase();\n if (fieldType === 'login') {\n cipher.login.username = text;\n } else if (fieldType === 'password') {\n cipher.login.password = text;\n } else if (fieldType === 'one_time_password') {\n cipher.login.totp = text;\n } else if (fieldType === 'notes') {\n cipher.notes += (text + '\\n');\n } else if (fieldType === 'weblogin' || fieldType === 'website') {\n cipher.login.uris = this.makeUriArray(text);\n } else {\n this.processKvp(cipher, name, text);\n }\n });\n }\n\n Array.from(this.querySelectorAllDirectChild(cardEl, 'notes')).forEach((notesEl) => {\n cipher.notes += (notesEl.textContent + '\\n');\n });\n\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n if (this.organization) {\n this.moveFoldersToCollections(result);\n }\n\n result.success = true;\n return result;\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nexport class SaferPassCsvImporter extends BaseImporter implements Importer {\n parse(data: string): ImportResult {\n const result = new ImportResult();\n const results = this.parseCsv(data, true);\n if (results == null) {\n result.success = false;\n return result;\n }\n\n results.forEach((value) => {\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(this.nameFromUrl(value.url), '--');\n cipher.notes = this.getValueOrDefault(value.notes);\n cipher.login.username = this.getValueOrDefault(value.username);\n cipher.login.password = this.getValueOrDefault(value.password);\n cipher.login.uris = this.makeUriArray(value.url);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return result;\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nexport class SecureSafeCsvImporter extends BaseImporter implements Importer {\n parse(data: string): ImportResult {\n const result = new ImportResult();\n const results = this.parseCsv(data, true);\n if (results == null) {\n result.success = false;\n return result;\n }\n\n results.forEach((value) => {\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(value.Title);\n cipher.notes = this.getValueOrDefault(value.Comment);\n cipher.login.uris = this.makeUriArray(value.Url);\n cipher.login.password = this.getValueOrDefault(value.Password);\n cipher.login.username = this.getValueOrDefault(value.Username);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return result;\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\nimport { CipherView } from '../models/view/cipherView';\n\nexport class SplashIdCsvImporter extends BaseImporter implements Importer {\n parse(data: string): ImportResult {\n const result = new ImportResult();\n const results = this.parseCsv(data, false);\n if (results == null) {\n result.success = false;\n return result;\n }\n\n results.forEach((value) => {\n if (value.length < 3) {\n return;\n }\n\n this.processFolder(result, this.getValueOrDefault(value[value.length - 1]));\n const cipher = this.initLoginCipher();\n cipher.notes = this.getValueOrDefault(value[value.length - 2], '');\n cipher.name = this.getValueOrDefault(value[1], '--');\n\n if (value[0] === 'Web Logins' || value[0] === 'Servers' || value[0] === 'Email Accounts') {\n cipher.login.username = this.getValueOrDefault(value[2]);\n cipher.login.password = this.getValueOrDefault(value[3]);\n cipher.login.uris = this.makeUriArray(value[4]);\n this.parseFieldsToNotes(cipher, 5, value);\n } else {\n this.parseFieldsToNotes(cipher, 2, value);\n }\n\n this.convertToNoteIfNeeded(cipher);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n if (this.organization) {\n this.moveFoldersToCollections(result);\n }\n\n result.success = true;\n return result;\n }\n\n private parseFieldsToNotes(cipher: CipherView, startIndex: number, value: any) {\n // last 3 rows do not get parsed\n for (let i = startIndex; i < value.length - 3; i++) {\n if (this.isNullOrWhitespace(value[i])) {\n continue;\n }\n cipher.notes += (value[i] + '\\n');\n }\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nexport class StickyPasswordXmlImporter extends BaseImporter implements Importer {\n parse(data: string): ImportResult {\n const result = new ImportResult();\n const doc = this.parseXml(data);\n if (doc == null) {\n result.success = false;\n return result;\n }\n\n const loginNodes = doc.querySelectorAll('root > Database > Logins > Login');\n Array.from(loginNodes).forEach((loginNode) => {\n const accountId = loginNode.getAttribute('ID');\n if (this.isNullOrWhitespace(accountId)) {\n return;\n }\n\n const usernameText = loginNode.getAttribute('Name');\n const passwordText = loginNode.getAttribute('Password');\n let titleText: string = null;\n let linkText: string = null;\n let notesText: string = null;\n let groupId: string = null;\n let groupText: string = null;\n\n const accountLogin = doc.querySelector('root > Database > Accounts > Account > ' +\n 'LoginLinks > Login[SourceLoginID=\"' + accountId + '\"]');\n if (accountLogin != null) {\n const account = accountLogin.parentElement.parentElement;\n if (account != null) {\n titleText = account.getAttribute('Name');\n linkText = account.getAttribute('Link');\n groupId = account.getAttribute('ParentID');\n notesText = account.getAttribute('Comments');\n if (!this.isNullOrWhitespace(notesText)) {\n notesText = notesText.split('/n').join('\\n');\n }\n }\n }\n\n if (!this.isNullOrWhitespace(groupId)) {\n groupText = this.buildGroupText(doc, groupId, '');\n this.processFolder(result, groupText);\n }\n\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(titleText, '--');\n cipher.notes = this.getValueOrDefault(notesText);\n cipher.login.username = this.getValueOrDefault(usernameText);\n cipher.login.password = this.getValueOrDefault(passwordText);\n cipher.login.uris = this.makeUriArray(linkText);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n if (this.organization) {\n this.moveFoldersToCollections(result);\n }\n\n result.success = true;\n return result;\n }\n\n buildGroupText(doc: Document, groupId: string, groupText: string): string {\n const group = doc.querySelector('root > Database > Groups > Group[ID=\"' + groupId + '\"]');\n if (group == null) {\n return groupText;\n }\n if (!this.isNullOrWhitespace(groupText)) {\n groupText = '/' + groupText;\n }\n groupText = group.getAttribute('Name') + groupText;\n return this.buildGroupText(doc, group.getAttribute('ParentID'), groupText);\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nimport { CardView } from '../models/view/cardView';\nimport { SecureNoteView } from '../models/view/secureNoteView';\n\nimport { CipherType } from '../enums/cipherType';\nimport { SecureNoteType } from '../enums/secureNoteType';\n\nconst PropertiesToIgnore = ['kind', 'autologin', 'favorite', 'hexcolor', 'protectedwithpassword', 'subdomainonly',\n 'type', 'tk_export_version', 'note', 'title', 'document_content',\n];\n\nexport class TrueKeyCsvImporter extends BaseImporter implements Importer {\n parse(data: string): ImportResult {\n const result = new ImportResult();\n const results = this.parseCsv(data, true);\n if (results == null) {\n result.success = false;\n return result;\n }\n\n results.forEach((value) => {\n const cipher = this.initLoginCipher();\n cipher.favorite = this.getValueOrDefault(value.favorite, '').toLowerCase() === 'true';\n cipher.name = this.getValueOrDefault(value.name, '--');\n cipher.notes = this.getValueOrDefault(value.memo, '');\n cipher.login.username = this.getValueOrDefault(value.login);\n cipher.login.password = this.getValueOrDefault(value.password);\n cipher.login.uris = this.makeUriArray(value.url);\n\n if (value.kind !== 'login') {\n cipher.name = this.getValueOrDefault(value.title, '--');\n cipher.notes = this.getValueOrDefault(value.note, '');\n }\n\n if (value.kind === 'cc') {\n cipher.type = CipherType.Card;\n cipher.card = new CardView();\n cipher.card.cardholderName = this.getValueOrDefault(value.cardholder);\n cipher.card.number = this.getValueOrDefault(value.number);\n cipher.card.brand = this.getCardBrand(cipher.card.number);\n if (!this.isNullOrWhitespace(value.expiryDate)) {\n try {\n const expDate = new Date(value.expiryDate);\n cipher.card.expYear = expDate.getFullYear().toString();\n cipher.card.expMonth = (expDate.getMonth() + 1).toString();\n } catch { }\n }\n } else if (value.kind !== 'login') {\n cipher.type = CipherType.SecureNote;\n cipher.secureNote = new SecureNoteView();\n cipher.secureNote.type = SecureNoteType.Generic;\n if (!this.isNullOrWhitespace(cipher.notes)) {\n cipher.notes = this.getValueOrDefault(value.document_content, '');\n }\n for (const property in value) {\n if (value.hasOwnProperty(property) && PropertiesToIgnore.indexOf(property.toLowerCase()) < 0 &&\n !this.isNullOrWhitespace(value[property])) {\n this.processKvp(cipher, property, value[property]);\n }\n }\n }\n\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return result;\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nexport class UpmCsvImporter extends BaseImporter implements Importer {\n parse(data: string): ImportResult {\n const result = new ImportResult();\n const results = this.parseCsv(data, false);\n if (results == null) {\n result.success = false;\n return result;\n }\n\n results.forEach((value) => {\n if (value.length !== 5) {\n return;\n }\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(value[0], '--');\n cipher.notes = this.getValueOrDefault(value[4]);\n cipher.login.username = this.getValueOrDefault(value[1]);\n cipher.login.password = this.getValueOrDefault(value[2]);\n cipher.login.uris = this.makeUriArray(value[3]);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return result;\n }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\nimport { CipherView } from '../models/view';\n\nexport class ZohoVaultCsvImporter extends BaseImporter implements Importer {\n parse(data: string): ImportResult {\n const result = new ImportResult();\n const results = this.parseCsv(data, true);\n if (results == null) {\n result.success = false;\n return result;\n }\n\n results.forEach((value) => {\n if (this.isNullOrWhitespace(value['Password Name']) && this.isNullOrWhitespace(value['Secret Name'])) {\n return;\n }\n this.processFolder(result, this.getValueOrDefault(value.ChamberName));\n const cipher = this.initLoginCipher();\n cipher.favorite = this.getValueOrDefault(value.Favorite, '0') === '1';\n cipher.notes = this.getValueOrDefault(value.Notes);\n cipher.name = this.getValueOrDefault(\n value['Password Name'], this.getValueOrDefault(value['Secret Name'], '--'));\n cipher.login.uris = this.makeUriArray(\n this.getValueOrDefault(value['Password URL'], this.getValueOrDefault(value['Secret URL'])));\n this.parseData(cipher, value.SecretData);\n this.parseData(cipher, value.CustomData);\n this.convertToNoteIfNeeded(cipher);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n if (this.organization) {\n this.moveFoldersToCollections(result);\n }\n\n result.success = true;\n return result;\n }\n\n private parseData(cipher: CipherView, data: string) {\n if (this.isNullOrWhitespace(data)) {\n return;\n }\n const dataLines = this.splitNewLine(data);\n dataLines.forEach((line) => {\n const delimPosition = line.indexOf(':');\n if (delimPosition < 0) {\n return;\n }\n const field = line.substring(0, delimPosition);\n const value = line.length > delimPosition ? line.substring(delimPosition + 1) : null;\n if (this.isNullOrWhitespace(field) || this.isNullOrWhitespace(value) || field === 'SecretType') {\n return;\n }\n const fieldLower = field.toLowerCase();\n if (cipher.login.username == null && this.usernameFieldNames.indexOf(fieldLower) > -1) {\n cipher.login.username = value;\n } else if (cipher.login.password == null && this.passwordFieldNames.indexOf(fieldLower) > -1) {\n cipher.login.password = value;\n } else {\n this.processKvp(cipher, field, value);\n }\n });\n }\n}\n","import { ApiService } from '../abstractions/api.service';\nimport { CipherService } from '../abstractions/cipher.service';\nimport { CollectionService } from '../abstractions/collection.service';\nimport { FolderService } from '../abstractions/folder.service';\nimport { I18nService } from '../abstractions/i18n.service';\nimport {\n ImportOption,\n ImportService as ImportServiceAbstraction,\n} from '../abstractions/import.service';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nimport { CipherType } from '../enums/cipherType';\n\nimport { Utils } from '../misc/utils';\n\nimport { CipherRequest } from '../models/request/cipherRequest';\nimport { CollectionRequest } from '../models/request/collectionRequest';\nimport { FolderRequest } from '../models/request/folderRequest';\nimport { ImportCiphersRequest } from '../models/request/importCiphersRequest';\nimport { ImportOrganizationCiphersRequest } from '../models/request/importOrganizationCiphersRequest';\nimport { KvpRequest } from '../models/request/kvpRequest';\n\nimport { CipherView } from '../models/view/cipherView';\n\nimport { AscendoCsvImporter } from '../importers/ascendoCsvImporter';\nimport { AvastCsvImporter } from '../importers/avastCsvImporter';\nimport { AvastJsonImporter } from '../importers/avastJsonImporter';\nimport { AviraCsvImporter } from '../importers/aviraCsvImporter';\nimport { BitwardenCsvImporter } from '../importers/bitwardenCsvImporter';\nimport { BitwardenJsonImporter } from '../importers/bitwardenJsonImporter';\nimport { BlackBerryCsvImporter } from '../importers/blackBerryCsvImporter';\nimport { BlurCsvImporter } from '../importers/blurCsvImporter';\nimport { ButtercupCsvImporter } from '../importers/buttercupCsvImporter';\nimport { ChromeCsvImporter } from '../importers/chromeCsvImporter';\nimport { ClipperzHtmlImporter } from '../importers/clipperzHtmlImporter';\nimport { CodebookCsvImporter } from '../importers/codebookCsvImporter';\nimport { DashlaneJsonImporter } from '../importers/dashlaneJsonImporter';\nimport { EncryptrCsvImporter } from '../importers/encryptrCsvImporter';\nimport { EnpassCsvImporter } from '../importers/enpassCsvImporter';\nimport { EnpassJsonImporter } from '../importers/enpassJsonImporter';\nimport { FirefoxCsvImporter } from '../importers/firefoxCsvImporter';\nimport { FSecureFskImporter } from '../importers/fsecureFskImporter';\nimport { GnomeJsonImporter } from '../importers/gnomeJsonImporter';\nimport { Importer } from '../importers/importer';\nimport { KasperskyTxtImporter } from '../importers/kasperskyTxtImporter';\nimport { KeePass2XmlImporter } from '../importers/keepass2XmlImporter';\nimport { KeePassXCsvImporter } from '../importers/keepassxCsvImporter';\nimport { KeeperCsvImporter } from '../importers/keeperCsvImporter';\nimport { LastPassCsvImporter } from '../importers/lastpassCsvImporter';\nimport { LogMeOnceCsvImporter } from '../importers/logMeOnceCsvImporter';\nimport { MeldiumCsvImporter } from '../importers/meldiumCsvImporter';\nimport { MSecureCsvImporter } from '../importers/msecureCsvImporter';\nimport { MykiCsvImporter } from '../importers/mykiCsvImporter';\nimport { OnePassword1PifImporter } from '../importers/onepassword1PifImporter';\nimport { OnePasswordWinCsvImporter } from '../importers/onepasswordWinCsvImporter';\nimport { PadlockCsvImporter } from '../importers/padlockCsvImporter';\nimport { PassKeepCsvImporter } from '../importers/passkeepCsvImporter';\nimport { PassmanJsonImporter } from '../importers/passmanJsonImporter';\nimport { PasspackCsvImporter } from '../importers/passpackCsvImporter';\nimport { PasswordAgentCsvImporter } from '../importers/passwordAgentCsvImporter';\nimport { PasswordBossJsonImporter } from '../importers/passwordBossJsonImporter';\nimport { PasswordDragonXmlImporter } from '../importers/passwordDragonXmlImporter';\nimport { PasswordSafeXmlImporter } from '../importers/passwordSafeXmlImporter';\nimport { PasswordWalletTxtImporter } from '../importers/passwordWalletTxtImporter';\nimport { RememBearCsvImporter } from '../importers/rememBearCsvImporter';\nimport { RoboFormCsvImporter } from '../importers/roboformCsvImporter';\nimport { SafeInCloudXmlImporter } from '../importers/safeInCloudXmlImporter';\nimport { SaferPassCsvImporter } from '../importers/saferpassCsvImport';\nimport { SecureSafeCsvImporter } from '../importers/secureSafeCsvImporter';\nimport { SplashIdCsvImporter } from '../importers/splashIdCsvImporter';\nimport { StickyPasswordXmlImporter } from '../importers/stickyPasswordXmlImporter';\nimport { TrueKeyCsvImporter } from '../importers/truekeyCsvImporter';\nimport { UpmCsvImporter } from '../importers/upmCsvImporter';\nimport { ZohoVaultCsvImporter } from '../importers/zohoVaultCsvImporter';\n\nexport class ImportService implements ImportServiceAbstraction {\n featuredImportOptions = [\n { id: 'bitwardenjson', name: 'Bitwarden (json)' },\n { id: 'bitwardencsv', name: 'Bitwarden (csv)' },\n { id: 'lastpasscsv', name: 'LastPass (csv)' },\n { id: 'chromecsv', name: 'Chrome (csv)' },\n { id: 'firefoxcsv', name: 'Firefox (csv)' },\n { id: 'keepass2xml', name: 'KeePass 2 (xml)' },\n { id: '1password1pif', name: '1Password (1pif)' },\n { id: 'dashlanejson', name: 'Dashlane (json)' },\n ];\n\n regularImportOptions: ImportOption[] = [\n { id: 'keepassxcsv', name: 'KeePassX (csv)' },\n { id: '1passwordwincsv', name: '1Password 6 and 7 Windows (csv)' },\n { id: 'roboformcsv', name: 'RoboForm (csv)' },\n { id: 'keepercsv', name: 'Keeper (csv)' },\n { id: 'enpasscsv', name: 'Enpass (csv)' },\n { id: 'enpassjson', name: 'Enpass (json)' },\n { id: 'safeincloudxml', name: 'SafeInCloud (xml)' },\n { id: 'pwsafexml', name: 'Password Safe (xml)' },\n { id: 'stickypasswordxml', name: 'Sticky Password (xml)' },\n { id: 'msecurecsv', name: 'mSecure (csv)' },\n { id: 'truekeycsv', name: 'True Key (csv)' },\n { id: 'passwordbossjson', name: 'Password Boss (json)' },\n { id: 'zohovaultcsv', name: 'Zoho Vault (csv)' },\n { id: 'splashidcsv', name: 'SplashID (csv)' },\n { id: 'passworddragonxml', name: 'Password Dragon (xml)' },\n { id: 'padlockcsv', name: 'Padlock (csv)' },\n { id: 'passboltcsv', name: 'Passbolt (csv)' },\n { id: 'clipperzhtml', name: 'Clipperz (html)' },\n { id: 'aviracsv', name: 'Avira (csv)' },\n { id: 'saferpasscsv', name: 'SaferPass (csv)' },\n { id: 'upmcsv', name: 'Universal Password Manager (csv)' },\n { id: 'ascendocsv', name: 'Ascendo DataVault (csv)' },\n { id: 'meldiumcsv', name: 'Meldium (csv)' },\n { id: 'passkeepcsv', name: 'PassKeep (csv)' },\n { id: 'operacsv', name: 'Opera (csv)' },\n { id: 'vivaldicsv', name: 'Vivaldi (csv)' },\n { id: 'gnomejson', name: 'GNOME Passwords and Keys/Seahorse (json)' },\n { id: 'blurcsv', name: 'Blur (csv)' },\n { id: 'passwordagentcsv', name: 'Password Agent (csv)' },\n { id: 'passpackcsv', name: 'Passpack (csv)' },\n { id: 'passmanjson', name: 'Passman (json)' },\n { id: 'avastcsv', name: 'Avast Passwords (csv)' },\n { id: 'avastjson', name: 'Avast Passwords (json)' },\n { id: 'fsecurefsk', name: 'F-Secure KEY (fsk)' },\n { id: 'kasperskytxt', name: 'Kaspersky Password Manager (txt)' },\n { id: 'remembearcsv', name: 'RememBear (csv)' },\n { id: 'passwordwallettxt', name: 'PasswordWallet (txt)' },\n { id: 'mykicsv', name: 'Myki (csv)' },\n { id: 'securesafecsv', name: 'SecureSafe (csv)' },\n { id: 'logmeoncecsv', name: 'LogMeOnce (csv)' },\n { id: 'blackberrycsv', name: 'BlackBerry Password Keeper (csv)' },\n { id: 'buttercupcsv', name: 'Buttercup (csv)' },\n { id: 'codebookcsv', name: 'Codebook (csv)' },\n { id: 'encryptrcsv', name: 'Encryptr (csv)' },\n ];\n\n constructor(private cipherService: CipherService, private folderService: FolderService,\n private apiService: ApiService, private i18nService: I18nService,\n private collectionService: CollectionService) { }\n\n getImportOptions(): ImportOption[] {\n return this.featuredImportOptions.concat(this.regularImportOptions);\n }\n\n async import(importer: Importer, fileContents: string, organizationId: string = null): Promise<Error> {\n const importResult = await importer.parse(fileContents);\n if (importResult.success) {\n if (importResult.folders.length === 0 && importResult.ciphers.length === 0) {\n return new Error(this.i18nService.t('importNothingError'));\n } else if (importResult.ciphers.length > 0) {\n const halfway = Math.floor(importResult.ciphers.length / 2);\n const last = importResult.ciphers.length - 1;\n\n if (this.badData(importResult.ciphers[0]) &&\n this.badData(importResult.ciphers[halfway]) &&\n this.badData(importResult.ciphers[last])) {\n return new Error(this.i18nService.t('importFormatError'));\n }\n }\n await this.postImport(importResult, organizationId);\n return null;\n } else {\n return new Error(this.i18nService.t('importFormatError'));\n }\n }\n\n getImporter(format: string, organization = false): Importer {\n const importer = this.getImporterInstance(format);\n if (importer == null) {\n return null;\n }\n importer.organization = organization;\n return importer;\n }\n\n private getImporterInstance(format: string) {\n if (format == null || format === '') {\n return null;\n }\n\n switch (format) {\n case 'bitwardencsv':\n return new BitwardenCsvImporter();\n case 'bitwardenjson':\n return new BitwardenJsonImporter();\n case 'lastpasscsv':\n case 'passboltcsv':\n return new LastPassCsvImporter();\n case 'keepassxcsv':\n return new KeePassXCsvImporter();\n case 'aviracsv':\n return new AviraCsvImporter();\n case 'blurcsv':\n return new BlurCsvImporter();\n case 'safeincloudxml':\n return new SafeInCloudXmlImporter();\n case 'padlockcsv':\n return new PadlockCsvImporter();\n case 'keepass2xml':\n return new KeePass2XmlImporter();\n case 'chromecsv':\n case 'operacsv':\n case 'vivaldicsv':\n return new ChromeCsvImporter();\n case 'firefoxcsv':\n return new FirefoxCsvImporter();\n case 'upmcsv':\n return new UpmCsvImporter();\n case 'saferpasscsv':\n return new SaferPassCsvImporter();\n case 'meldiumcsv':\n return new MeldiumCsvImporter();\n case '1password1pif':\n return new OnePassword1PifImporter();\n case '1passwordwincsv':\n return new OnePasswordWinCsvImporter();\n case 'keepercsv':\n return new KeeperCsvImporter();\n case 'passworddragonxml':\n return new PasswordDragonXmlImporter();\n case 'enpasscsv':\n return new EnpassCsvImporter();\n case 'enpassjson':\n return new EnpassJsonImporter();\n case 'pwsafexml':\n return new PasswordSafeXmlImporter();\n case 'dashlanejson':\n return new DashlaneJsonImporter();\n case 'msecurecsv':\n return new MSecureCsvImporter();\n case 'stickypasswordxml':\n return new StickyPasswordXmlImporter();\n case 'truekeycsv':\n return new TrueKeyCsvImporter();\n case 'clipperzhtml':\n return new ClipperzHtmlImporter();\n case 'roboformcsv':\n return new RoboFormCsvImporter();\n case 'ascendocsv':\n return new AscendoCsvImporter();\n case 'passwordbossjson':\n return new PasswordBossJsonImporter();\n case 'zohovaultcsv':\n return new ZohoVaultCsvImporter();\n case 'splashidcsv':\n return new SplashIdCsvImporter();\n case 'passkeepcsv':\n return new PassKeepCsvImporter();\n case 'gnomejson':\n return new GnomeJsonImporter();\n case 'passwordagentcsv':\n return new PasswordAgentCsvImporter();\n case 'passpackcsv':\n return new PasspackCsvImporter();\n case 'passmanjson':\n return new PassmanJsonImporter();\n case 'avastcsv':\n return new AvastCsvImporter();\n case 'avastjson':\n return new AvastJsonImporter();\n case 'fsecurefsk':\n return new FSecureFskImporter();\n case 'kasperskytxt':\n return new KasperskyTxtImporter();\n case 'remembearcsv':\n return new RememBearCsvImporter();\n case 'passwordwallettxt':\n return new PasswordWalletTxtImporter();\n case 'mykicsv':\n return new MykiCsvImporter();\n case 'securesafecsv':\n return new SecureSafeCsvImporter();\n case 'logmeoncecsv':\n return new LogMeOnceCsvImporter();\n case 'blackberrycsv':\n return new BlackBerryCsvImporter();\n case 'buttercupcsv':\n return new ButtercupCsvImporter();\n case 'codebookcsv':\n return new CodebookCsvImporter();\n case 'encryptrcsv':\n return new EncryptrCsvImporter();\n default:\n return null;\n }\n }\n\n private async postImport(importResult: ImportResult, organizationId: string = null) {\n if (organizationId == null) {\n const request = new ImportCiphersRequest();\n for (let i = 0; i < importResult.ciphers.length; i++) {\n const c = await this.cipherService.encrypt(importResult.ciphers[i]);\n request.ciphers.push(new CipherRequest(c));\n }\n if (importResult.folders != null) {\n for (let i = 0; i < importResult.folders.length; i++) {\n const f = await this.folderService.encrypt(importResult.folders[i]);\n request.folders.push(new FolderRequest(f));\n }\n }\n if (importResult.folderRelationships != null) {\n importResult.folderRelationships.forEach((r) =>\n request.folderRelationships.push(new KvpRequest(r[0], r[1])));\n }\n return await this.apiService.postImportCiphers(request);\n } else {\n const request = new ImportOrganizationCiphersRequest();\n for (let i = 0; i < importResult.ciphers.length; i++) {\n importResult.ciphers[i].organizationId = organizationId;\n const c = await this.cipherService.encrypt(importResult.ciphers[i]);\n request.ciphers.push(new CipherRequest(c));\n }\n if (importResult.collections != null) {\n for (let i = 0; i < importResult.collections.length; i++) {\n importResult.collections[i].organizationId = organizationId;\n const c = await this.collectionService.encrypt(importResult.collections[i]);\n request.collections.push(new CollectionRequest(c));\n }\n }\n if (importResult.collectionRelationships != null) {\n importResult.collectionRelationships.forEach((r) =>\n request.collectionRelationships.push(new KvpRequest(r[0], r[1])));\n }\n return await this.apiService.postImportOrganizationCiphers(organizationId, request);\n }\n }\n\n private badData(c: CipherView) {\n return (c.name == null || c.name === '--') &&\n (c.type === CipherType.Login && c.login != null && Utils.isNullOrWhitespace(c.login.password));\n }\n}\n","import * as fs from 'fs';\nimport * as path from 'path';\nimport * as readline from 'readline';\n\nexport class NodeUtils {\n static mkdirpSync(targetDir: string, mode = '700', relative = false, relativeDir: string = null) {\n const initialDir = path.isAbsolute(targetDir) ? path.sep : '';\n const baseDir = relative ? (relativeDir != null ? relativeDir : __dirname) : '.';\n targetDir.split(path.sep).reduce((parentDir, childDir) => {\n const dir = path.resolve(baseDir, parentDir, childDir);\n if (!fs.existsSync(dir)) {\n fs.mkdirSync(dir, mode);\n }\n return dir;\n }, initialDir);\n }\n static readFirstLine(fileName: string) {\n return new Promise<string>((resolve, reject) => {\n const readStream = fs.createReadStream(fileName, {encoding: 'utf8'});\n const readInterface = readline.createInterface(readStream);\n readInterface\n .on('line', (line) => {\n readStream.close();\n resolve(line);\n })\n .on('error', (err) => reject(err));\n });\n }\n}\n","import * as fs from 'fs';\nimport * as lowdb from 'lowdb';\nimport * as FileSync from 'lowdb/adapters/FileSync';\nimport * as path from 'path';\n\nimport { StorageService } from '../abstractions/storage.service';\n\nimport { NodeUtils } from '../misc/nodeUtils';\nimport { Utils } from '../misc/utils';\n\nexport class LowdbStorageService implements StorageService {\n private db: lowdb.LowdbSync<any>;\n private defaults: any;\n private dataFilePath: string;\n\n constructor(defaults?: any, dir?: string, private allowCache = false) {\n this.defaults = defaults;\n\n let adapter: lowdb.AdapterSync<any>;\n if (Utils.isNode && dir != null) {\n if (!fs.existsSync(dir)) {\n NodeUtils.mkdirpSync(dir, '700');\n }\n this.dataFilePath = path.join(dir, 'data.json');\n adapter = new FileSync(this.dataFilePath);\n }\n try {\n this.db = lowdb(adapter);\n } catch (e) {\n if (e instanceof SyntaxError) {\n adapter.write({});\n this.db = lowdb(adapter);\n } else {\n throw e;\n }\n }\n }\n\n init() {\n if (this.defaults != null) {\n this.readForNoCache();\n this.db.defaults(this.defaults).write();\n }\n }\n\n get<T>(key: string): Promise<T> {\n this.readForNoCache();\n const val = this.db.get(key).value();\n if (val == null) {\n return Promise.resolve(null);\n }\n return Promise.resolve(val as T);\n }\n\n save(key: string, obj: any): Promise<any> {\n this.readForNoCache();\n this.db.set(key, obj).write();\n return Promise.resolve();\n }\n\n remove(key: string): Promise<any> {\n this.readForNoCache();\n this.db.unset(key).write();\n return Promise.resolve();\n }\n\n private readForNoCache() {\n if (!this.allowCache) {\n this.db.read();\n }\n }\n}\n","import { BaseResponse } from './baseResponse';\n\nexport class ApiKeyResponse extends BaseResponse {\n apiKey: string;\n\n constructor(response: any) {\n super(response);\n this.apiKey = this.getResponseProperty('ApiKey');\n }\n}\n","import { BaseResponse } from './baseResponse';\n\nimport { PaymentMethodType } from '../../enums/paymentMethodType';\nimport { TransactionType } from '../../enums/transactionType';\n\nexport class BillingResponse extends BaseResponse {\n balance: number;\n paymentSource: BillingSourceResponse;\n invoices: BillingInvoiceResponse[] = [];\n transactions: BillingTransactionResponse[] = [];\n\n constructor(response: any) {\n super(response);\n this.balance = this.getResponseProperty('Balance');\n const paymentSource = this.getResponseProperty('PaymentSource');\n const transactions = this.getResponseProperty('Transactions');\n const invoices = this.getResponseProperty('Invoices');\n this.paymentSource = paymentSource == null ? null : new BillingSourceResponse(paymentSource);\n if (transactions != null) {\n this.transactions = transactions.map((t: any) => new BillingTransactionResponse(t));\n }\n if (invoices != null) {\n this.invoices = invoices.map((i: any) => new BillingInvoiceResponse(i));\n }\n }\n}\n\nexport class BillingSourceResponse extends BaseResponse {\n type: PaymentMethodType;\n cardBrand: string;\n description: string;\n needsVerification: boolean;\n\n constructor(response: any) {\n super(response);\n this.type = this.getResponseProperty('Type');\n this.cardBrand = this.getResponseProperty('CardBrand');\n this.description = this.getResponseProperty('Description');\n this.needsVerification = this.getResponseProperty('NeedsVerification');\n }\n}\n\nexport class BillingInvoiceResponse extends BaseResponse {\n url: string;\n pdfUrl: string;\n number: string;\n paid: boolean;\n date: string;\n amount: number;\n\n constructor(response: any) {\n super(response);\n this.url = this.getResponseProperty('Url');\n this.pdfUrl = this.getResponseProperty('PdfUrl');\n this.number = this.getResponseProperty('Number');\n this.paid = this.getResponseProperty('Paid');\n this.date = this.getResponseProperty('Date');\n this.amount = this.getResponseProperty('Amount');\n }\n}\n\nexport class BillingTransactionResponse extends BaseResponse {\n createdDate: string;\n amount: number;\n refunded: boolean;\n partiallyRefunded: boolean;\n refundedAmount: number;\n type: TransactionType;\n paymentMethodType: PaymentMethodType;\n details: string;\n\n constructor(response: any) {\n super(response);\n this.createdDate = this.getResponseProperty('CreatedDate');\n this.amount = this.getResponseProperty('Amount');\n this.refunded = this.getResponseProperty('Refunded');\n this.partiallyRefunded = this.getResponseProperty('PartiallyRefunded');\n this.refundedAmount = this.getResponseProperty('RefundedAmount');\n this.type = this.getResponseProperty('Type');\n this.paymentMethodType = this.getResponseProperty('PaymentMethodType');\n this.details = this.getResponseProperty('Details');\n }\n}\n","import { BaseResponse } from './baseResponse';\n\nexport class BreachAccountResponse extends BaseResponse {\n addedDate: string;\n breachDate: string;\n dataClasses: string[];\n description: string;\n domain: string;\n isActive: boolean;\n isVerified: boolean;\n logoPath: string;\n modifiedDate: string;\n name: string;\n pwnCount: number;\n title: string;\n\n constructor(response: any) {\n super(response);\n this.addedDate = this.getResponseProperty('AddedDate');\n this.breachDate = this.getResponseProperty('BreachDate');\n this.dataClasses = this.getResponseProperty('DataClasses');\n this.description = this.getResponseProperty('Description');\n this.domain = this.getResponseProperty('Domain');\n this.isActive = this.getResponseProperty('IsActive');\n this.isVerified = this.getResponseProperty('IsVerified');\n this.logoPath = this.getResponseProperty('LogoPath');\n this.modifiedDate = this.getResponseProperty('ModifiedDate');\n this.name = this.getResponseProperty('Name');\n this.pwnCount = this.getResponseProperty('PwnCount');\n this.title = this.getResponseProperty('Title');\n }\n}\n","import { BaseResponse } from './baseResponse';\n\nexport class AttachmentResponse extends BaseResponse {\n id: string;\n url: string;\n fileName: string;\n key: string;\n size: string;\n sizeName: string;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty('Id');\n this.url = this.getResponseProperty('Url');\n this.fileName = this.getResponseProperty('FileName');\n this.key = this.getResponseProperty('Key');\n this.size = this.getResponseProperty('Size');\n this.sizeName = this.getResponseProperty('SizeName');\n }\n}\n","import { BaseResponse } from './baseResponse';\n\nexport class PasswordHistoryResponse extends BaseResponse {\n password: string;\n lastUsedDate: string;\n\n constructor(response: any) {\n super(response);\n this.password = this.getResponseProperty('Password');\n this.lastUsedDate = this.getResponseProperty('LastUsedDate');\n }\n}\n","import { AttachmentResponse } from './attachmentResponse';\nimport { BaseResponse } from './baseResponse';\nimport { PasswordHistoryResponse } from './passwordHistoryResponse';\n\nimport { CardApi } from '../api/cardApi';\nimport { FieldApi } from '../api/fieldApi';\nimport { IdentityApi } from '../api/identityApi';\nimport { LoginApi } from '../api/loginApi';\nimport { SecureNoteApi } from '../api/secureNoteApi';\n\nexport class CipherResponse extends BaseResponse {\n id: string;\n organizationId: string;\n folderId: string;\n type: number;\n name: string;\n notes: string;\n fields: FieldApi[];\n login: LoginApi;\n card: CardApi;\n identity: IdentityApi;\n secureNote: SecureNoteApi;\n favorite: boolean;\n edit: boolean;\n organizationUseTotp: boolean;\n revisionDate: string;\n attachments: AttachmentResponse[];\n passwordHistory: PasswordHistoryResponse[];\n collectionIds: string[];\n deletedDate: string;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty('Id');\n this.organizationId = this.getResponseProperty('OrganizationId');\n this.folderId = this.getResponseProperty('FolderId') || null;\n this.type = this.getResponseProperty('Type');\n this.name = this.getResponseProperty('Name');\n this.notes = this.getResponseProperty('Notes');\n this.favorite = this.getResponseProperty('Favorite') || false;\n this.edit = this.getResponseProperty('Edit') || true;\n this.organizationUseTotp = this.getResponseProperty('OrganizationUseTotp');\n this.revisionDate = this.getResponseProperty('RevisionDate');\n this.collectionIds = this.getResponseProperty('CollectionIds');\n this.deletedDate = this.getResponseProperty('DeletedDate');\n\n const login = this.getResponseProperty('Login');\n if (login != null) {\n this.login = new LoginApi(login);\n }\n\n const card = this.getResponseProperty('Card');\n if (card != null) {\n this.card = new CardApi(card);\n }\n\n const identity = this.getResponseProperty('Identity');\n if (identity != null) {\n this.identity = new IdentityApi(identity);\n }\n\n const secureNote = this.getResponseProperty('SecureNote');\n if (secureNote != null) {\n this.secureNote = new SecureNoteApi(secureNote);\n }\n\n const fields = this.getResponseProperty('Fields');\n if (fields != null) {\n this.fields = fields.map((f: any) => new FieldApi(f));\n }\n\n const attachments = this.getResponseProperty('Attachments');\n if (attachments != null) {\n this.attachments = attachments.map((a: any) => new AttachmentResponse(a));\n }\n\n const passwordHistory = this.getResponseProperty('PasswordHistory');\n if (passwordHistory != null) {\n this.passwordHistory = passwordHistory.map((h: any) => new PasswordHistoryResponse(h));\n }\n }\n}\n","import { BaseResponse } from './baseResponse';\n\nexport class SelectionReadOnlyResponse extends BaseResponse {\n id: string;\n readOnly: boolean;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty('Id');\n this.readOnly = this.getResponseProperty('ReadOnly');\n }\n}\n","import { BaseResponse } from './baseResponse';\nimport { SelectionReadOnlyResponse } from './selectionReadOnlyResponse';\n\nexport class CollectionResponse extends BaseResponse {\n id: string;\n organizationId: string;\n name: string;\n externalId: string;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty('Id');\n this.organizationId = this.getResponseProperty('OrganizationId');\n this.name = this.getResponseProperty('Name');\n this.externalId = this.getResponseProperty('ExternalId');\n }\n}\n\nexport class CollectionDetailsResponse extends CollectionResponse {\n readOnly: boolean;\n\n constructor(response: any) {\n super(response);\n this.readOnly = this.getResponseProperty('ReadOnly') || false;\n }\n}\n\nexport class CollectionGroupDetailsResponse extends CollectionResponse {\n groups: SelectionReadOnlyResponse[] = [];\n\n constructor(response: any) {\n super(response);\n const groups = this.getResponseProperty('Groups');\n if (groups != null) {\n this.groups = groups.map((g: any) => new SelectionReadOnlyResponse(g));\n }\n }\n}\n","import { BaseResponse } from './baseResponse';\n\nexport class GlobalDomainResponse extends BaseResponse {\n type: number;\n domains: string[];\n excluded: boolean;\n\n constructor(response: any) {\n super(response);\n this.type = this.getResponseProperty('Type');\n this.domains = this.getResponseProperty('Domains');\n this.excluded = this.getResponseProperty('Excluded');\n }\n}\n","import { BaseResponse } from './baseResponse';\nimport { GlobalDomainResponse } from './globalDomainResponse';\n\nexport class DomainsResponse extends BaseResponse {\n equivalentDomains: string[][];\n globalEquivalentDomains: GlobalDomainResponse[] = [];\n\n constructor(response: any) {\n super(response);\n this.equivalentDomains = this.getResponseProperty('EquivalentDomains');\n const globalEquivalentDomains = this.getResponseProperty('GlobalEquivalentDomains');\n if (globalEquivalentDomains != null) {\n this.globalEquivalentDomains = globalEquivalentDomains.map((d: any) => new GlobalDomainResponse(d));\n } else {\n this.globalEquivalentDomains = [];\n }\n }\n}\n","import { BaseResponse } from './baseResponse';\n\nexport class ErrorResponse extends BaseResponse {\n message: string;\n validationErrors: { [key: string]: string[]; };\n statusCode: number;\n\n constructor(response: any, status: number, identityResponse?: boolean) {\n super(response);\n let errorModel = null;\n if (response != null) {\n const responseErrorModel = this.getResponseProperty('ErrorModel');\n if (responseErrorModel && identityResponse) {\n errorModel = responseErrorModel;\n } else {\n errorModel = response;\n }\n }\n\n if (errorModel) {\n this.message = this.getResponseProperty('Message', errorModel);\n this.validationErrors = this.getResponseProperty('ValidationErrors', errorModel);\n } else {\n if (status === 429) {\n this.message = 'Rate limit exceeded. Try again later.';\n }\n }\n this.statusCode = status;\n }\n\n getSingleMessage(): string {\n if (this.validationErrors == null) {\n return this.message;\n }\n for (const key in this.validationErrors) {\n if (!this.validationErrors.hasOwnProperty(key)) {\n continue;\n }\n if (this.validationErrors[key].length) {\n return this.validationErrors[key][0];\n }\n }\n return this.message;\n }\n\n getAllMessages(): string[] {\n const messages: string[] = [];\n if (this.validationErrors == null) {\n return messages;\n }\n for (const key in this.validationErrors) {\n if (!this.validationErrors.hasOwnProperty(key)) {\n continue;\n }\n this.validationErrors[key].forEach((item: string) => {\n let prefix = '';\n if (key.indexOf('[') > -1 && key.indexOf(']') > -1) {\n const lastSep = key.lastIndexOf('.');\n prefix = key.substr(0, lastSep > -1 ? lastSep : key.length) + ': ';\n }\n messages.push(prefix + item);\n });\n }\n return messages;\n }\n}\n","import { BaseResponse } from './baseResponse';\n\nimport { DeviceType } from '../../enums/deviceType';\nimport { EventType } from '../../enums/eventType';\n\nexport class EventResponse extends BaseResponse {\n type: EventType;\n userId: string;\n organizationId: string;\n cipherId: string;\n collectionId: string;\n groupId: string;\n organizationUserId: string;\n actingUserId: string;\n date: string;\n deviceType: DeviceType;\n ipAddress: string;\n\n constructor(response: any) {\n super(response);\n this.type = this.getResponseProperty('Type');\n this.userId = this.getResponseProperty('UserId');\n this.organizationId = this.getResponseProperty('OrganizationId');\n this.cipherId = this.getResponseProperty('CipherId');\n this.collectionId = this.getResponseProperty('CollectionId');\n this.groupId = this.getResponseProperty('GroupId');\n this.organizationUserId = this.getResponseProperty('OrganizationUserId');\n this.actingUserId = this.getResponseProperty('ActingUserId');\n this.date = this.getResponseProperty('Date');\n this.deviceType = this.getResponseProperty('DeviceType');\n this.ipAddress = this.getResponseProperty('IpAddress');\n }\n}\n","import { BaseResponse } from './baseResponse';\n\nexport class FolderResponse extends BaseResponse {\n id: string;\n name: string;\n revisionDate: string;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty('Id');\n this.name = this.getResponseProperty('Name');\n this.revisionDate = this.getResponseProperty('RevisionDate');\n }\n}\n","import { BaseResponse } from './baseResponse';\nimport { SelectionReadOnlyResponse } from './selectionReadOnlyResponse';\n\nexport class GroupResponse extends BaseResponse {\n id: string;\n organizationId: string;\n name: string;\n accessAll: boolean;\n externalId: string;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty('Id');\n this.organizationId = this.getResponseProperty('OrganizationId');\n this.name = this.getResponseProperty('Name');\n this.accessAll = this.getResponseProperty('AccessAll');\n this.externalId = this.getResponseProperty('ExternalId');\n }\n}\n\nexport class GroupDetailsResponse extends GroupResponse {\n collections: SelectionReadOnlyResponse[] = [];\n\n constructor(response: any) {\n super(response);\n const collections = this.getResponseProperty('Collections');\n if (collections != null) {\n this.collections = collections.map((c: any) => new SelectionReadOnlyResponse(c));\n }\n }\n}\n","import { BaseResponse } from './baseResponse';\n\nexport class IdentityTokenResponse extends BaseResponse {\n accessToken: string;\n expiresIn: number;\n refreshToken: string;\n tokenType: string;\n\n privateKey: string;\n key: string;\n twoFactorToken: string;\n\n constructor(response: any) {\n super(response);\n this.accessToken = response.access_token;\n this.expiresIn = response.expires_in;\n this.refreshToken = response.refresh_token;\n this.tokenType = response.token_type;\n\n this.privateKey = this.getResponseProperty('PrivateKey');\n this.key = this.getResponseProperty('Key');\n this.twoFactorToken = this.getResponseProperty('TwoFactorToken');\n }\n}\n","import { BaseResponse } from './baseResponse';\n\nimport { TwoFactorProviderType } from '../../enums/twoFactorProviderType';\n\nexport class IdentityTwoFactorResponse extends BaseResponse {\n twoFactorProviders: TwoFactorProviderType[];\n twoFactorProviders2 = new Map<TwoFactorProviderType, { [key: string]: string; }>();\n\n constructor(response: any) {\n super(response);\n this.twoFactorProviders = this.getResponseProperty('TwoFactorProviders');\n const twoFactorProviders2 = this.getResponseProperty('TwoFactorProviders2');\n if (twoFactorProviders2 != null) {\n for (const prop in twoFactorProviders2) {\n if (twoFactorProviders2.hasOwnProperty(prop)) {\n this.twoFactorProviders2.set(parseInt(prop, null), twoFactorProviders2[prop]);\n }\n }\n }\n }\n}\n","import { BaseResponse } from './baseResponse';\n\nexport class ListResponse<T> extends BaseResponse {\n data: T[];\n continuationToken: string;\n\n constructor(response: any, t: new (dataResponse: any) => T) {\n super(response);\n const data = this.getResponseProperty('Data');\n this.data = data == null ? [] : data.map((dr: any) => new t(dr));\n this.continuationToken = this.getResponseProperty('ContinuationToken');\n }\n}\n","import { BaseResponse } from './baseResponse';\n\nimport { PlanType } from '../../enums/planType';\n\nexport class OrganizationResponse extends BaseResponse {\n id: string;\n name: string;\n businessName: string;\n businessAddress1: string;\n businessAddress2: string;\n businessAddress3: string;\n businessCountry: string;\n businessTaxNumber: string;\n billingEmail: string;\n plan: string;\n planType: PlanType;\n seats: number;\n maxCollections: number;\n maxStorageGb: number;\n useGroups: boolean;\n useDirectory: boolean;\n useEvents: boolean;\n useTotp: boolean;\n use2fa: boolean;\n useApi: boolean;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty('Id');\n this.name = this.getResponseProperty('Name');\n this.businessName = this.getResponseProperty('BusinessName');\n this.businessAddress1 = this.getResponseProperty('BusinessAddress1');\n this.businessAddress2 = this.getResponseProperty('BusinessAddress2');\n this.businessAddress3 = this.getResponseProperty('BusinessAddress3');\n this.businessCountry = this.getResponseProperty('BusinessCountry');\n this.businessTaxNumber = this.getResponseProperty('BusinessTaxNumber');\n this.billingEmail = this.getResponseProperty('BillingEmail');\n this.plan = this.getResponseProperty('Plan');\n this.planType = this.getResponseProperty('PlanType');\n this.seats = this.getResponseProperty('Seats');\n this.maxCollections = this.getResponseProperty('MaxCollections');\n this.maxStorageGb = this.getResponseProperty('MaxStorageGb');\n this.useGroups = this.getResponseProperty('UseGroups');\n this.useDirectory = this.getResponseProperty('UseDirectory');\n this.useEvents = this.getResponseProperty('UseEvents');\n this.useTotp = this.getResponseProperty('UseTotp');\n this.use2fa = this.getResponseProperty('Use2fa');\n this.useApi = this.getResponseProperty('UseApi');\n }\n}\n","import { BaseResponse } from './baseResponse';\n\nexport class SubscriptionResponse extends BaseResponse {\n storageName: string;\n storageGb: number;\n maxStorageGb: number;\n subscription: BillingSubscriptionResponse;\n upcomingInvoice: BillingSubscriptionUpcomingInvoiceResponse;\n license: any;\n expiration: string;\n usingInAppPurchase: boolean;\n\n constructor(response: any) {\n super(response);\n this.storageName = this.getResponseProperty('StorageName');\n this.storageGb = this.getResponseProperty('StorageGb');\n this.maxStorageGb = this.getResponseProperty('MaxStorageGb');\n this.license = this.getResponseProperty('License');\n this.expiration = this.getResponseProperty('Expiration');\n this.usingInAppPurchase = this.getResponseProperty('UsingInAppPurchase');\n const subscription = this.getResponseProperty('Subscription');\n const upcomingInvoice = this.getResponseProperty('UpcomingInvoice');\n this.subscription = subscription == null ? null : new BillingSubscriptionResponse(subscription);\n this.upcomingInvoice = upcomingInvoice == null ? null :\n new BillingSubscriptionUpcomingInvoiceResponse(upcomingInvoice);\n }\n}\n\nexport class BillingSubscriptionResponse extends BaseResponse {\n trialStartDate: string;\n trialEndDate: string;\n periodStartDate: string;\n periodEndDate: string;\n cancelledDate: string;\n cancelAtEndDate: boolean;\n status: string;\n cancelled: boolean;\n items: BillingSubscriptionItemResponse[] = [];\n\n constructor(response: any) {\n super(response);\n this.trialEndDate = this.getResponseProperty('TrialStartDate');\n this.trialEndDate = this.getResponseProperty('TrialEndDate');\n this.periodStartDate = this.getResponseProperty('PeriodStartDate');\n this.periodEndDate = this.getResponseProperty('PeriodEndDate');\n this.cancelledDate = this.getResponseProperty('CancelledDate');\n this.cancelAtEndDate = this.getResponseProperty('CancelAtEndDate');\n this.status = this.getResponseProperty('Status');\n this.cancelled = this.getResponseProperty('Cancelled');\n const items = this.getResponseProperty('Items');\n if (items != null) {\n this.items = items.map((i: any) => new BillingSubscriptionItemResponse(i));\n }\n }\n}\n\nexport class BillingSubscriptionItemResponse extends BaseResponse {\n name: string;\n amount: number;\n quantity: number;\n interval: string;\n\n constructor(response: any) {\n super(response);\n this.name = this.getResponseProperty('Name');\n this.amount = this.getResponseProperty('Amount');\n this.quantity = this.getResponseProperty('Quantity');\n this.interval = this.getResponseProperty('Interval');\n }\n}\n\nexport class BillingSubscriptionUpcomingInvoiceResponse extends BaseResponse {\n date: string;\n amount: number;\n\n constructor(response: any) {\n super(response);\n this.date = this.getResponseProperty('Date');\n this.amount = this.getResponseProperty('Amount');\n }\n}\n","import { OrganizationResponse } from './organizationResponse';\nimport {\n BillingSubscriptionResponse,\n BillingSubscriptionUpcomingInvoiceResponse,\n} from './subscriptionResponse';\n\nexport class OrganizationSubscriptionResponse extends OrganizationResponse {\n storageName: string;\n storageGb: number;\n subscription: BillingSubscriptionResponse;\n upcomingInvoice: BillingSubscriptionUpcomingInvoiceResponse;\n expiration: string;\n\n constructor(response: any) {\n super(response);\n this.storageName = this.getResponseProperty('StorageName');\n this.storageGb = this.getResponseProperty('StorageGb');\n const subscription = this.getResponseProperty('Subscription');\n this.subscription = subscription == null ? null : new BillingSubscriptionResponse(subscription);\n const upcomingInvoice = this.getResponseProperty('UpcomingInvoice');\n this.upcomingInvoice = upcomingInvoice == null ? null :\n new BillingSubscriptionUpcomingInvoiceResponse(upcomingInvoice);\n this.expiration = this.getResponseProperty('Expiration');\n }\n}\n","import { OrganizationUserStatusType } from '../../enums/organizationUserStatusType';\nimport { OrganizationUserType } from '../../enums/organizationUserType';\n\nimport { BaseResponse } from './baseResponse';\nimport { SelectionReadOnlyResponse } from './selectionReadOnlyResponse';\n\nexport class OrganizationUserResponse extends BaseResponse {\n id: string;\n userId: string;\n type: OrganizationUserType;\n status: OrganizationUserStatusType;\n accessAll: boolean;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty('Id');\n this.userId = this.getResponseProperty('UserId');\n this.type = this.getResponseProperty('Type');\n this.status = this.getResponseProperty('Status');\n this.accessAll = this.getResponseProperty('AccessAll');\n }\n}\n\nexport class OrganizationUserUserDetailsResponse extends OrganizationUserResponse {\n name: string;\n email: string;\n twoFactorEnabled: boolean;\n\n constructor(response: any) {\n super(response);\n this.name = this.getResponseProperty('Name');\n this.email = this.getResponseProperty('Email');\n this.twoFactorEnabled = this.getResponseProperty('TwoFactorEnabled');\n }\n}\n\nexport class OrganizationUserDetailsResponse extends OrganizationUserResponse {\n collections: SelectionReadOnlyResponse[] = [];\n\n constructor(response: any) {\n super(response);\n const collections = this.getResponseProperty('Collections');\n if (collections != null) {\n this.collections = collections.map((c: any) => new SelectionReadOnlyResponse(c));\n }\n }\n}\n","import { BaseResponse } from './baseResponse';\n\nimport { OrganizationUserStatusType } from '../../enums/organizationUserStatusType';\nimport { OrganizationUserType } from '../../enums/organizationUserType';\n\nexport class ProfileOrganizationResponse extends BaseResponse {\n id: string;\n name: string;\n usePolicies: boolean;\n useGroups: boolean;\n useDirectory: boolean;\n useEvents: boolean;\n useTotp: boolean;\n use2fa: boolean;\n useApi: boolean;\n selfHost: boolean;\n usersGetPremium: boolean;\n seats: number;\n maxCollections: number;\n maxStorageGb?: number;\n key: string;\n status: OrganizationUserStatusType;\n type: OrganizationUserType;\n enabled: boolean;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty('Id');\n this.name = this.getResponseProperty('Name');\n this.usePolicies = this.getResponseProperty('UsePolicies');\n this.useGroups = this.getResponseProperty('UseGroups');\n this.useDirectory = this.getResponseProperty('UseDirectory');\n this.useEvents = this.getResponseProperty('UseEvents');\n this.useTotp = this.getResponseProperty('UseTotp');\n this.use2fa = this.getResponseProperty('Use2fa');\n this.useApi = this.getResponseProperty('UseApi');\n this.selfHost = this.getResponseProperty('SelfHost');\n this.usersGetPremium = this.getResponseProperty('UsersGetPremium');\n this.seats = this.getResponseProperty('Seats');\n this.maxCollections = this.getResponseProperty('MaxCollections');\n this.maxStorageGb = this.getResponseProperty('MaxStorageGb');\n this.key = this.getResponseProperty('Key');\n this.status = this.getResponseProperty('Status');\n this.type = this.getResponseProperty('Type');\n this.enabled = this.getResponseProperty('Enabled');\n }\n}\n","import { BaseResponse } from './baseResponse';\nimport { ProfileOrganizationResponse } from './profileOrganizationResponse';\n\nexport class ProfileResponse extends BaseResponse {\n id: string;\n name: string;\n email: string;\n emailVerified: boolean;\n masterPasswordHint: string;\n premium: boolean;\n culture: string;\n twoFactorEnabled: boolean;\n key: string;\n privateKey: string;\n securityStamp: string;\n organizations: ProfileOrganizationResponse[] = [];\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty('Id');\n this.name = this.getResponseProperty('Name');\n this.email = this.getResponseProperty('Email');\n this.emailVerified = this.getResponseProperty('EmailVerified');\n this.masterPasswordHint = this.getResponseProperty('MasterPasswordHint');\n this.premium = this.getResponseProperty('Premium');\n this.culture = this.getResponseProperty('Culture');\n this.twoFactorEnabled = this.getResponseProperty('TwoFactorEnabled');\n this.key = this.getResponseProperty('Key');\n this.privateKey = this.getResponseProperty('PrivateKey');\n this.securityStamp = this.getResponseProperty('SecurityStamp');\n\n const organizations = this.getResponseProperty('Organizations');\n if (organizations != null) {\n this.organizations = organizations.map((o: any) => new ProfileOrganizationResponse(o));\n }\n }\n}\n","import { BaseResponse } from './baseResponse';\nimport { ProfileResponse } from './profileResponse';\n\nexport class PaymentResponse extends BaseResponse {\n userProfile: ProfileResponse;\n paymentIntentClientSecret: string;\n success: boolean;\n\n constructor(response: any) {\n super(response);\n const userProfile = this.getResponseProperty('UserProfile');\n if (userProfile != null) {\n this.userProfile = new ProfileResponse(userProfile);\n }\n this.paymentIntentClientSecret = this.getResponseProperty('PaymentIntentClientSecret');\n this.success = this.getResponseProperty('Success');\n }\n}\n","import { BaseResponse } from './baseResponse';\n\nimport { PolicyType } from '../../enums/policyType';\n\nexport class PolicyResponse extends BaseResponse {\n id: string;\n organizationId: string;\n type: PolicyType;\n data: any;\n enabled: boolean;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty('Id');\n this.organizationId = this.getResponseProperty('OrganizationId');\n this.type = this.getResponseProperty('Type');\n this.data = this.getResponseProperty('Data');\n this.enabled = this.getResponseProperty('Enabled');\n }\n}\n","import { BaseResponse } from './baseResponse';\n\nimport { KdfType } from '../../enums/kdfType';\n\nexport class PreloginResponse extends BaseResponse {\n kdf: KdfType;\n kdfIterations: number;\n\n constructor(response: any) {\n super(response);\n this.kdf = this.getResponseProperty('Kdf');\n this.kdfIterations = this.getResponseProperty('KdfIterations');\n }\n}\n","import { BaseResponse } from './baseResponse';\nimport { CipherResponse } from './cipherResponse';\nimport { CollectionDetailsResponse } from './collectionResponse';\nimport { DomainsResponse } from './domainsResponse';\nimport { FolderResponse } from './folderResponse';\nimport { PolicyResponse } from './policyResponse';\nimport { ProfileResponse } from './profileResponse';\n\nexport class SyncResponse extends BaseResponse {\n profile?: ProfileResponse;\n folders: FolderResponse[] = [];\n collections: CollectionDetailsResponse[] = [];\n ciphers: CipherResponse[] = [];\n domains?: DomainsResponse;\n policies?: PolicyResponse[] = [];\n\n constructor(response: any) {\n super(response);\n\n const profile = this.getResponseProperty('Profile');\n if (profile != null) {\n this.profile = new ProfileResponse(profile);\n }\n\n const folders = this.getResponseProperty('Folders');\n if (folders != null) {\n this.folders = folders.map((f: any) => new FolderResponse(f));\n }\n\n const collections = this.getResponseProperty('Collections');\n if (collections != null) {\n this.collections = collections.map((c: any) => new CollectionDetailsResponse(c));\n }\n\n const ciphers = this.getResponseProperty('Ciphers');\n if (ciphers != null) {\n this.ciphers = ciphers.map((c: any) => new CipherResponse(c));\n }\n\n const domains = this.getResponseProperty('Domains');\n if (domains != null) {\n this.domains = new DomainsResponse(domains);\n }\n\n const policies = this.getResponseProperty('Policies');\n if (policies != null) {\n this.policies = policies.map((p: any) => new PolicyResponse(p));\n }\n }\n}\n","import { BaseResponse } from './baseResponse';\n\nexport class TwoFactorAuthenticatorResponse extends BaseResponse {\n enabled: boolean;\n key: string;\n\n constructor(response: any) {\n super(response);\n this.enabled = this.getResponseProperty('Enabled');\n this.key = this.getResponseProperty('Key');\n }\n}\n","import { BaseResponse } from './baseResponse';\n\nexport class TwoFactorDuoResponse extends BaseResponse {\n enabled: boolean;\n host: string;\n secretKey: string;\n integrationKey: string;\n\n constructor(response: any) {\n super(response);\n this.enabled = this.getResponseProperty('Enabled');\n this.host = this.getResponseProperty('Host');\n this.secretKey = this.getResponseProperty('SecretKey');\n this.integrationKey = this.getResponseProperty('IntegrationKey');\n }\n}\n","import { BaseResponse } from './baseResponse';\n\nexport class TwoFactorEmailResponse extends BaseResponse {\n enabled: boolean;\n email: string;\n\n constructor(response: any) {\n super(response);\n this.enabled = this.getResponseProperty('Enabled');\n this.email = this.getResponseProperty('Email');\n }\n}\n","import { BaseResponse } from './baseResponse';\n\nimport { TwoFactorProviderType } from '../../enums/twoFactorProviderType';\n\nexport class TwoFactorProviderResponse extends BaseResponse {\n enabled: boolean;\n type: TwoFactorProviderType;\n\n constructor(response: any) {\n super(response);\n this.enabled = this.getResponseProperty('Enabled');\n this.type = this.getResponseProperty('Type');\n }\n}\n","import { BaseResponse } from './baseResponse';\n\nexport class TwoFactorRecoverResponse extends BaseResponse {\n code: string;\n\n constructor(response: any) {\n super(response);\n this.code = this.getResponseProperty('Code');\n }\n}\n","import { BaseResponse } from './baseResponse';\n\nexport class TwoFactorU2fResponse extends BaseResponse {\n enabled: boolean;\n keys: KeyResponse[];\n\n constructor(response: any) {\n super(response);\n this.enabled = this.getResponseProperty('Enabled');\n const keys = this.getResponseProperty('Keys');\n this.keys = keys == null ? null : keys.map((k: any) => new KeyResponse(k));\n }\n}\n\nexport class KeyResponse extends BaseResponse {\n name: string;\n id: number;\n compromised: boolean;\n\n constructor(response: any) {\n super(response);\n this.name = this.getResponseProperty('Name');\n this.id = this.getResponseProperty('Id');\n this.compromised = this.getResponseProperty('Compromised');\n }\n}\n\nexport class ChallengeResponse extends BaseResponse {\n userId: string;\n appId: string;\n challenge: string;\n version: string;\n\n constructor(response: any) {\n super(response);\n this.userId = this.getResponseProperty('UserId');\n this.appId = this.getResponseProperty('AppId');\n this.challenge = this.getResponseProperty('Challenge');\n this.version = this.getResponseProperty('Version');\n }\n}\n","import { BaseResponse } from './baseResponse';\n\nexport class TwoFactorYubiKeyResponse extends BaseResponse {\n enabled: boolean;\n key1: string;\n key2: string;\n key3: string;\n key4: string;\n key5: string;\n nfc: boolean;\n\n constructor(response: any) {\n super(response);\n this.enabled = this.getResponseProperty('Enabled');\n this.key1 = this.getResponseProperty('Key1');\n this.key2 = this.getResponseProperty('Key2');\n this.key3 = this.getResponseProperty('Key3');\n this.key4 = this.getResponseProperty('Key4');\n this.key5 = this.getResponseProperty('Key5');\n this.nfc = this.getResponseProperty('Nfc');\n }\n}\n","import { BaseResponse } from './baseResponse';\n\nexport class UserKeyResponse extends BaseResponse {\n userId: string;\n publicKey: string;\n\n constructor(response: any) {\n super(response);\n this.userId = this.getResponseProperty('UserId');\n this.publicKey = this.getResponseProperty('PublicKey');\n }\n}\n","import { DeviceType } from '../enums/deviceType';\nimport { PolicyType } from '../enums/policyType';\n\nimport { ApiService as ApiServiceAbstraction } from '../abstractions/api.service';\nimport { PlatformUtilsService } from '../abstractions/platformUtils.service';\nimport { TokenService } from '../abstractions/token.service';\n\nimport { EnvironmentUrls } from '../models/domain/environmentUrls';\n\nimport { BitPayInvoiceRequest } from '../models/request/bitPayInvoiceRequest';\nimport { CipherBulkDeleteRequest } from '../models/request/cipherBulkDeleteRequest';\nimport { CipherBulkMoveRequest } from '../models/request/cipherBulkMoveRequest';\nimport { CipherBulkShareRequest } from '../models/request/cipherBulkShareRequest';\nimport { CipherCollectionsRequest } from '../models/request/cipherCollectionsRequest';\nimport { CipherCreateRequest } from '../models/request/cipherCreateRequest';\nimport { CipherRequest } from '../models/request/cipherRequest';\nimport { CipherShareRequest } from '../models/request/cipherShareRequest';\nimport { CollectionRequest } from '../models/request/collectionRequest';\nimport { DeleteRecoverRequest } from '../models/request/deleteRecoverRequest';\nimport { EmailRequest } from '../models/request/emailRequest';\nimport { EmailTokenRequest } from '../models/request/emailTokenRequest';\nimport { EventRequest } from '../models/request/eventRequest';\nimport { FolderRequest } from '../models/request/folderRequest';\nimport { GroupRequest } from '../models/request/groupRequest';\nimport { IapCheckRequest } from '../models/request/iapCheckRequest';\nimport { ImportCiphersRequest } from '../models/request/importCiphersRequest';\nimport { ImportDirectoryRequest } from '../models/request/importDirectoryRequest';\nimport { ImportOrganizationCiphersRequest } from '../models/request/importOrganizationCiphersRequest';\nimport { KdfRequest } from '../models/request/kdfRequest';\nimport { KeysRequest } from '../models/request/keysRequest';\nimport { OrganizationCreateRequest } from '../models/request/organizationCreateRequest';\nimport { OrganizationUpdateRequest } from '../models/request/organizationUpdateRequest';\nimport { OrganizationUpgradeRequest } from '../models/request/organizationUpgradeRequest';\nimport { OrganizationUserAcceptRequest } from '../models/request/organizationUserAcceptRequest';\nimport { OrganizationUserConfirmRequest } from '../models/request/organizationUserConfirmRequest';\nimport { OrganizationUserInviteRequest } from '../models/request/organizationUserInviteRequest';\nimport { OrganizationUserUpdateGroupsRequest } from '../models/request/organizationUserUpdateGroupsRequest';\nimport { OrganizationUserUpdateRequest } from '../models/request/organizationUserUpdateRequest';\nimport { PasswordHintRequest } from '../models/request/passwordHintRequest';\nimport { PasswordRequest } from '../models/request/passwordRequest';\nimport { PasswordVerificationRequest } from '../models/request/passwordVerificationRequest';\nimport { PaymentRequest } from '../models/request/paymentRequest';\nimport { PolicyRequest } from '../models/request/policyRequest';\nimport { PreloginRequest } from '../models/request/preloginRequest';\nimport { RegisterRequest } from '../models/request/registerRequest';\nimport { SeatRequest } from '../models/request/seatRequest';\nimport { SelectionReadOnlyRequest } from '../models/request/selectionReadOnlyRequest';\nimport { StorageRequest } from '../models/request/storageRequest';\nimport { TokenRequest } from '../models/request/tokenRequest';\nimport { TwoFactorEmailRequest } from '../models/request/twoFactorEmailRequest';\nimport { TwoFactorProviderRequest } from '../models/request/twoFactorProviderRequest';\nimport { TwoFactorRecoveryRequest } from '../models/request/twoFactorRecoveryRequest';\nimport { UpdateDomainsRequest } from '../models/request/updateDomainsRequest';\nimport { UpdateKeyRequest } from '../models/request/updateKeyRequest';\nimport { UpdateProfileRequest } from '../models/request/updateProfileRequest';\nimport { UpdateTwoFactorAuthenticatorRequest } from '../models/request/updateTwoFactorAuthenticatorRequest';\nimport { UpdateTwoFactorDuoRequest } from '../models/request/updateTwoFactorDuoRequest';\nimport { UpdateTwoFactorEmailRequest } from '../models/request/updateTwoFactorEmailRequest';\nimport { UpdateTwoFactorU2fDeleteRequest } from '../models/request/updateTwoFactorU2fDeleteRequest';\nimport { UpdateTwoFactorU2fRequest } from '../models/request/updateTwoFactorU2fRequest';\nimport { UpdateTwoFactorYubioOtpRequest } from '../models/request/updateTwoFactorYubioOtpRequest';\nimport { VerifyBankRequest } from '../models/request/verifyBankRequest';\nimport { VerifyDeleteRecoverRequest } from '../models/request/verifyDeleteRecoverRequest';\nimport { VerifyEmailRequest } from '../models/request/verifyEmailRequest';\n\nimport { ApiKeyResponse } from '../models/response/apiKeyResponse';\nimport { BillingResponse } from '../models/response/billingResponse';\nimport { BreachAccountResponse } from '../models/response/breachAccountResponse';\nimport { CipherResponse } from '../models/response/cipherResponse';\nimport {\n CollectionGroupDetailsResponse,\n CollectionResponse,\n} from '../models/response/collectionResponse';\nimport { DomainsResponse } from '../models/response/domainsResponse';\nimport { ErrorResponse } from '../models/response/errorResponse';\nimport { EventResponse } from '../models/response/eventResponse';\nimport { FolderResponse } from '../models/response/folderResponse';\nimport {\n GroupDetailsResponse,\n GroupResponse,\n} from '../models/response/groupResponse';\nimport { IdentityTokenResponse } from '../models/response/identityTokenResponse';\nimport { IdentityTwoFactorResponse } from '../models/response/identityTwoFactorResponse';\nimport { ListResponse } from '../models/response/listResponse';\nimport { OrganizationResponse } from '../models/response/organizationResponse';\nimport { OrganizationSubscriptionResponse } from '../models/response/organizationSubscriptionResponse';\nimport {\n OrganizationUserDetailsResponse,\n OrganizationUserUserDetailsResponse,\n} from '../models/response/organizationUserResponse';\nimport { PaymentResponse } from '../models/response/paymentResponse';\nimport { PolicyResponse } from '../models/response/policyResponse';\nimport { PreloginResponse } from '../models/response/preloginResponse';\nimport { ProfileResponse } from '../models/response/profileResponse';\nimport { SelectionReadOnlyResponse } from '../models/response/selectionReadOnlyResponse';\nimport { SubscriptionResponse } from '../models/response/subscriptionResponse';\nimport { SyncResponse } from '../models/response/syncResponse';\nimport { TwoFactorAuthenticatorResponse } from '../models/response/twoFactorAuthenticatorResponse';\nimport { TwoFactorDuoResponse } from '../models/response/twoFactorDuoResponse';\nimport { TwoFactorEmailResponse } from '../models/response/twoFactorEmailResponse';\nimport { TwoFactorProviderResponse } from '../models/response/twoFactorProviderResponse';\nimport { TwoFactorRecoverResponse } from '../models/response/twoFactorRescoverResponse';\nimport {\n ChallengeResponse,\n TwoFactorU2fResponse,\n} from '../models/response/twoFactorU2fResponse';\nimport { TwoFactorYubiKeyResponse } from '../models/response/twoFactorYubiKeyResponse';\nimport { UserKeyResponse } from '../models/response/userKeyResponse';\n\nexport class ApiService implements ApiServiceAbstraction {\n urlsSet: boolean = false;\n apiBaseUrl: string;\n identityBaseUrl: string;\n eventsBaseUrl: string;\n\n private device: DeviceType;\n private deviceType: string;\n private isWebClient = false;\n private isDesktopClient = false;\n private usingBaseUrl = false;\n\n constructor(private tokenService: TokenService, private platformUtilsService: PlatformUtilsService,\n private logoutCallback: (expired: boolean) => Promise<void>, private customUserAgent: string = null) {\n this.device = platformUtilsService.getDevice();\n this.deviceType = this.device.toString();\n this.isWebClient = this.device === DeviceType.IEBrowser || this.device === DeviceType.ChromeBrowser ||\n this.device === DeviceType.EdgeBrowser || this.device === DeviceType.FirefoxBrowser ||\n this.device === DeviceType.OperaBrowser || this.device === DeviceType.SafariBrowser ||\n this.device === DeviceType.UnknownBrowser || this.device === DeviceType.VivaldiBrowser;\n this.isDesktopClient = this.device === DeviceType.WindowsDesktop || this.device === DeviceType.MacOsDesktop ||\n this.device === DeviceType.LinuxDesktop;\n }\n\n setUrls(urls: EnvironmentUrls): void {\n this.urlsSet = true;\n\n if (urls.base != null) {\n this.usingBaseUrl = true;\n this.apiBaseUrl = urls.base + '/api';\n this.identityBaseUrl = urls.base + '/identity';\n this.eventsBaseUrl = urls.base + '/events';\n return;\n }\n\n this.apiBaseUrl = urls.api;\n this.identityBaseUrl = urls.identity;\n this.eventsBaseUrl = urls.events;\n\n // Production\n if (this.apiBaseUrl == null) {\n this.apiBaseUrl = 'https://api.bitwarden.com';\n }\n if (this.identityBaseUrl == null) {\n this.identityBaseUrl = 'https://identity.bitwarden.com';\n }\n if (this.eventsBaseUrl == null) {\n this.eventsBaseUrl = 'https://events.bitwarden.com';\n }\n }\n\n // Auth APIs\n\n async postIdentityToken(request: TokenRequest): Promise<IdentityTokenResponse | IdentityTwoFactorResponse> {\n const headers = new Headers({\n 'Content-Type': 'application/x-www-form-urlencoded; charset=utf-8',\n 'Accept': 'application/json',\n 'Device-Type': this.deviceType,\n });\n if (this.customUserAgent != null) {\n headers.set('User-Agent', this.customUserAgent);\n }\n const response = await this.fetch(new Request(this.identityBaseUrl + '/connect/token', {\n body: this.qsStringify(request.toIdentityToken(this.platformUtilsService.identityClientId)),\n credentials: this.getCredentials(),\n cache: 'no-store',\n headers: headers,\n method: 'POST',\n }));\n\n let responseJson: any = null;\n if (this.isJsonResponse(response)) {\n responseJson = await response.json();\n }\n\n if (responseJson != null) {\n if (response.status === 200) {\n return new IdentityTokenResponse(responseJson);\n } else if (response.status === 400 && responseJson.TwoFactorProviders2 &&\n Object.keys(responseJson.TwoFactorProviders2).length) {\n await this.tokenService.clearTwoFactorToken(request.email);\n return new IdentityTwoFactorResponse(responseJson);\n }\n }\n\n return Promise.reject(new ErrorResponse(responseJson, response.status, true));\n }\n\n async refreshIdentityToken(): Promise<any> {\n try {\n await this.doRefreshToken();\n } catch (e) {\n return Promise.reject(null);\n }\n }\n\n // Account APIs\n\n async getProfile(): Promise<ProfileResponse> {\n const r = await this.send('GET', '/accounts/profile', null, true, true);\n return new ProfileResponse(r);\n }\n\n async getUserBilling(): Promise<BillingResponse> {\n const r = await this.send('GET', '/accounts/billing', null, true, true);\n return new BillingResponse(r);\n }\n\n async getUserSubscription(): Promise<SubscriptionResponse> {\n const r = await this.send('GET', '/accounts/subscription', null, true, true);\n return new SubscriptionResponse(r);\n }\n\n async putProfile(request: UpdateProfileRequest): Promise<ProfileResponse> {\n const r = await this.send('PUT', '/accounts/profile', request, true, true);\n return new ProfileResponse(r);\n }\n\n async postPrelogin(request: PreloginRequest): Promise<PreloginResponse> {\n const r = await this.send('POST', '/accounts/prelogin', request, false, true);\n return new PreloginResponse(r);\n }\n\n postEmailToken(request: EmailTokenRequest): Promise<any> {\n return this.send('POST', '/accounts/email-token', request, true, false);\n }\n\n postEmail(request: EmailRequest): Promise<any> {\n return this.send('POST', '/accounts/email', request, true, false);\n }\n\n postPassword(request: PasswordRequest): Promise<any> {\n return this.send('POST', '/accounts/password', request, true, false);\n }\n\n postSecurityStamp(request: PasswordVerificationRequest): Promise<any> {\n return this.send('POST', '/accounts/security-stamp', request, true, false);\n }\n\n deleteAccount(request: PasswordVerificationRequest): Promise<any> {\n return this.send('DELETE', '/accounts', request, true, false);\n }\n\n async getAccountRevisionDate(): Promise<number> {\n const r = await this.send('GET', '/accounts/revision-date', null, true, true);\n return r as number;\n }\n\n postPasswordHint(request: PasswordHintRequest): Promise<any> {\n return this.send('POST', '/accounts/password-hint', request, false, false);\n }\n\n postRegister(request: RegisterRequest): Promise<any> {\n return this.send('POST', '/accounts/register', request, false, false);\n }\n\n async postPremium(data: FormData): Promise<PaymentResponse> {\n const r = await this.send('POST', '/accounts/premium', data, true, true);\n return new PaymentResponse(r);\n }\n\n async postIapCheck(request: IapCheckRequest): Promise<any> {\n return this.send('POST', '/accounts/iap-check', request, true, false);\n }\n\n postReinstatePremium(): Promise<any> {\n return this.send('POST', '/accounts/reinstate-premium', null, true, false);\n }\n\n postCancelPremium(): Promise<any> {\n return this.send('POST', '/accounts/cancel-premium', null, true, false);\n }\n\n async postAccountStorage(request: StorageRequest): Promise<PaymentResponse> {\n const r = await this.send('POST', '/accounts/storage', request, true, true);\n return new PaymentResponse(r);\n }\n\n postAccountPayment(request: PaymentRequest): Promise<any> {\n return this.send('POST', '/accounts/payment', request, true, false);\n }\n\n postAccountLicense(data: FormData): Promise<any> {\n return this.send('POST', '/accounts/license', data, true, false);\n }\n\n postAccountKeys(request: KeysRequest): Promise<any> {\n return this.send('POST', '/accounts/keys', request, true, false);\n }\n\n postAccountKey(request: UpdateKeyRequest): Promise<any> {\n return this.send('POST', '/accounts/key', request, true, false);\n }\n\n postAccountVerifyEmail(): Promise<any> {\n return this.send('POST', '/accounts/verify-email', null, true, false);\n }\n\n postAccountVerifyEmailToken(request: VerifyEmailRequest): Promise<any> {\n return this.send('POST', '/accounts/verify-email-token', request, false, false);\n }\n\n postAccountRecoverDelete(request: DeleteRecoverRequest): Promise<any> {\n return this.send('POST', '/accounts/delete-recover', request, false, false);\n }\n\n postAccountRecoverDeleteToken(request: VerifyDeleteRecoverRequest): Promise<any> {\n return this.send('POST', '/accounts/delete-recover-token', request, false, false);\n }\n\n postAccountKdf(request: KdfRequest): Promise<any> {\n return this.send('POST', '/accounts/kdf', request, true, false);\n }\n\n async getEnterprisePortalSignInToken(): Promise<string> {\n const r = await this.send('GET', '/accounts/enterprise-portal-signin-token', null, true, true);\n return r as string;\n }\n\n // Folder APIs\n\n async getFolder(id: string): Promise<FolderResponse> {\n const r = await this.send('GET', '/folders/' + id, null, true, true);\n return new FolderResponse(r);\n }\n\n async postFolder(request: FolderRequest): Promise<FolderResponse> {\n const r = await this.send('POST', '/folders', request, true, true);\n return new FolderResponse(r);\n }\n\n async putFolder(id: string, request: FolderRequest): Promise<FolderResponse> {\n const r = await this.send('PUT', '/folders/' + id, request, true, true);\n return new FolderResponse(r);\n }\n\n deleteFolder(id: string): Promise<any> {\n return this.send('DELETE', '/folders/' + id, null, true, false);\n }\n\n // Cipher APIs\n\n async getCipher(id: string): Promise<CipherResponse> {\n const r = await this.send('GET', '/ciphers/' + id, null, true, true);\n return new CipherResponse(r);\n }\n\n async getCipherAdmin(id: string): Promise<CipherResponse> {\n const r = await this.send('GET', '/ciphers/' + id + '/admin', null, true, true);\n return new CipherResponse(r);\n }\n\n async getCiphersOrganization(organizationId: string): Promise<ListResponse<CipherResponse>> {\n const r = await this.send('GET', '/ciphers/organization-details?organizationId=' + organizationId,\n null, true, true);\n return new ListResponse(r, CipherResponse);\n }\n\n async postCipher(request: CipherRequest): Promise<CipherResponse> {\n const r = await this.send('POST', '/ciphers', request, true, true);\n return new CipherResponse(r);\n }\n\n async postCipherCreate(request: CipherCreateRequest): Promise<CipherResponse> {\n const r = await this.send('POST', '/ciphers/create', request, true, true);\n return new CipherResponse(r);\n }\n\n async postCipherAdmin(request: CipherCreateRequest): Promise<CipherResponse> {\n const r = await this.send('POST', '/ciphers/admin', request, true, true);\n return new CipherResponse(r);\n }\n\n async putCipher(id: string, request: CipherRequest): Promise<CipherResponse> {\n const r = await this.send('PUT', '/ciphers/' + id, request, true, true);\n return new CipherResponse(r);\n }\n\n async putCipherAdmin(id: string, request: CipherRequest): Promise<CipherResponse> {\n const r = await this.send('PUT', '/ciphers/' + id + '/admin', request, true, true);\n return new CipherResponse(r);\n }\n\n deleteCipher(id: string): Promise<any> {\n return this.send('DELETE', '/ciphers/' + id, null, true, false);\n }\n\n deleteCipherAdmin(id: string): Promise<any> {\n return this.send('DELETE', '/ciphers/' + id + '/admin', null, true, false);\n }\n\n deleteManyCiphers(request: CipherBulkDeleteRequest): Promise<any> {\n return this.send('DELETE', '/ciphers', request, true, false);\n }\n\n putMoveCiphers(request: CipherBulkMoveRequest): Promise<any> {\n return this.send('PUT', '/ciphers/move', request, true, false);\n }\n\n async putShareCipher(id: string, request: CipherShareRequest): Promise<CipherResponse> {\n const r = await this.send('PUT', '/ciphers/' + id + '/share', request, true, true);\n return new CipherResponse(r);\n }\n\n putShareCiphers(request: CipherBulkShareRequest): Promise<any> {\n return this.send('PUT', '/ciphers/share', request, true, false);\n }\n\n putCipherCollections(id: string, request: CipherCollectionsRequest): Promise<any> {\n return this.send('PUT', '/ciphers/' + id + '/collections', request, true, false);\n }\n\n putCipherCollectionsAdmin(id: string, request: CipherCollectionsRequest): Promise<any> {\n return this.send('PUT', '/ciphers/' + id + '/collections-admin', request, true, false);\n }\n\n postPurgeCiphers(request: PasswordVerificationRequest, organizationId: string = null): Promise<any> {\n let path = '/ciphers/purge';\n if (organizationId != null) {\n path += '?organizationId=' + organizationId;\n }\n return this.send('POST', path, request, true, false);\n }\n\n postImportCiphers(request: ImportCiphersRequest): Promise<any> {\n return this.send('POST', '/ciphers/import', request, true, false);\n }\n\n postImportOrganizationCiphers(organizationId: string, request: ImportOrganizationCiphersRequest): Promise<any> {\n return this.send('POST', '/ciphers/import-organization?organizationId=' + organizationId, request, true, false);\n }\n\n putDeleteCipher(id: string): Promise<any> {\n return this.send('PUT', '/ciphers/' + id + '/delete', null, true, false);\n }\n\n putDeleteCipherAdmin(id: string): Promise<any> {\n return this.send('PUT', '/ciphers/' + id + '/delete-admin', null, true, false);\n }\n\n putDeleteManyCiphers(request: CipherBulkDeleteRequest): Promise<any> {\n return this.send('PUT', '/ciphers/delete', request, true, false);\n }\n\n putRestoreCipher(id: string): Promise<any> {\n return this.send('PUT', '/ciphers/' + id + '/restore', null, true, false);\n }\n\n putRestoreCipherAdmin(id: string): Promise<any> {\n return this.send('PUT', '/ciphers/' + id + '/restore-admin', null, true, false);\n }\n\n putRestoreManyCiphers(request: CipherBulkDeleteRequest): Promise<any> {\n return this.send('PUT', '/ciphers/restore', request, true, false);\n }\n\n // Attachments APIs\n\n async postCipherAttachment(id: string, data: FormData): Promise<CipherResponse> {\n const r = await this.send('POST', '/ciphers/' + id + '/attachment', data, true, true);\n return new CipherResponse(r);\n }\n\n async postCipherAttachmentAdmin(id: string, data: FormData): Promise<CipherResponse> {\n const r = await this.send('POST', '/ciphers/' + id + '/attachment-admin', data, true, true);\n return new CipherResponse(r);\n }\n\n deleteCipherAttachment(id: string, attachmentId: string): Promise<any> {\n return this.send('DELETE', '/ciphers/' + id + '/attachment/' + attachmentId, null, true, false);\n }\n\n deleteCipherAttachmentAdmin(id: string, attachmentId: string): Promise<any> {\n return this.send('DELETE', '/ciphers/' + id + '/attachment/' + attachmentId + '/admin', null, true, false);\n }\n\n postShareCipherAttachment(id: string, attachmentId: string, data: FormData,\n organizationId: string): Promise<any> {\n return this.send('POST', '/ciphers/' + id + '/attachment/' +\n attachmentId + '/share?organizationId=' + organizationId, data, true, false);\n }\n\n // Collections APIs\n\n async getCollectionDetails(organizationId: string, id: string): Promise<CollectionGroupDetailsResponse> {\n const r = await this.send('GET', '/organizations/' + organizationId + '/collections/' + id + '/details',\n null, true, true);\n return new CollectionGroupDetailsResponse(r);\n }\n\n async getUserCollections(): Promise<ListResponse<CollectionResponse>> {\n const r = await this.send('GET', '/collections', null, true, true);\n return new ListResponse(r, CollectionResponse);\n }\n\n async getCollections(organizationId: string): Promise<ListResponse<CollectionResponse>> {\n const r = await this.send('GET', '/organizations/' + organizationId + '/collections', null, true, true);\n return new ListResponse(r, CollectionResponse);\n }\n\n async getCollectionUsers(organizationId: string, id: string): Promise<SelectionReadOnlyResponse[]> {\n const r = await this.send('GET', '/organizations/' + organizationId + '/collections/' + id + '/users',\n null, true, true);\n return r.map((dr: any) => new SelectionReadOnlyResponse(dr));\n }\n\n async postCollection(organizationId: string, request: CollectionRequest): Promise<CollectionResponse> {\n const r = await this.send('POST', '/organizations/' + organizationId + '/collections', request, true, true);\n return new CollectionResponse(r);\n }\n\n async putCollection(organizationId: string, id: string, request: CollectionRequest): Promise<CollectionResponse> {\n const r = await this.send('PUT', '/organizations/' + organizationId + '/collections/' + id,\n request, true, true);\n return new CollectionResponse(r);\n }\n\n async putCollectionUsers(organizationId: string, id: string, request: SelectionReadOnlyRequest[]): Promise<any> {\n await this.send('PUT', '/organizations/' + organizationId + '/collections/' + id + '/users',\n request, true, false);\n }\n\n deleteCollection(organizationId: string, id: string): Promise<any> {\n return this.send('DELETE', '/organizations/' + organizationId + '/collections/' + id, null, true, false);\n }\n\n deleteCollectionUser(organizationId: string, id: string, organizationUserId: string): Promise<any> {\n return this.send('DELETE',\n '/organizations/' + organizationId + '/collections/' + id + '/user/' + organizationUserId,\n null, true, false);\n }\n\n // Groups APIs\n\n async getGroupDetails(organizationId: string, id: string): Promise<GroupDetailsResponse> {\n const r = await this.send('GET', '/organizations/' + organizationId + '/groups/' + id + '/details',\n null, true, true);\n return new GroupDetailsResponse(r);\n }\n\n async getGroups(organizationId: string): Promise<ListResponse<GroupResponse>> {\n const r = await this.send('GET', '/organizations/' + organizationId + '/groups', null, true, true);\n return new ListResponse(r, GroupResponse);\n }\n\n async getGroupUsers(organizationId: string, id: string): Promise<string[]> {\n const r = await this.send('GET', '/organizations/' + organizationId + '/groups/' + id + '/users',\n null, true, true);\n return r;\n }\n\n async postGroup(organizationId: string, request: GroupRequest): Promise<GroupResponse> {\n const r = await this.send('POST', '/organizations/' + organizationId + '/groups', request, true, true);\n return new GroupResponse(r);\n }\n\n async putGroup(organizationId: string, id: string, request: GroupRequest): Promise<GroupResponse> {\n const r = await this.send('PUT', '/organizations/' + organizationId + '/groups/' + id, request, true, true);\n return new GroupResponse(r);\n }\n\n async putGroupUsers(organizationId: string, id: string, request: string[]): Promise<any> {\n await this.send('PUT', '/organizations/' + organizationId + '/groups/' + id + '/users', request, true, false);\n }\n\n deleteGroup(organizationId: string, id: string): Promise<any> {\n return this.send('DELETE', '/organizations/' + organizationId + '/groups/' + id, null, true, false);\n }\n\n deleteGroupUser(organizationId: string, id: string, organizationUserId: string): Promise<any> {\n return this.send('DELETE',\n '/organizations/' + organizationId + '/groups/' + id + '/user/' + organizationUserId, null, true, false);\n }\n\n // Policy APIs\n\n async getPolicy(organizationId: string, type: PolicyType): Promise<PolicyResponse> {\n const r = await this.send('GET', '/organizations/' + organizationId + '/policies/' + type, null, true, true);\n return new PolicyResponse(r);\n }\n\n async getPolicies(organizationId: string): Promise<ListResponse<PolicyResponse>> {\n const r = await this.send('GET', '/organizations/' + organizationId + '/policies', null, true, true);\n return new ListResponse(r, PolicyResponse);\n }\n\n async getPoliciesByToken(organizationId: string, token: string, email: string, organizationUserId: string):\n Promise<ListResponse<PolicyResponse>> {\n const r = await this.send('GET', '/organizations/' + organizationId + '/policies/token?' +\n 'token=' + encodeURIComponent(token) + '&email=' + encodeURIComponent(email) +\n '&organizationUserId=' + organizationUserId, null, false, true);\n return new ListResponse(r, PolicyResponse);\n }\n\n async putPolicy(organizationId: string, type: PolicyType, request: PolicyRequest): Promise<PolicyResponse> {\n const r = await this.send('PUT', '/organizations/' + organizationId + '/policies/' + type, request, true, true);\n return new PolicyResponse(r);\n }\n\n // Organization User APIs\n\n async getOrganizationUser(organizationId: string, id: string): Promise<OrganizationUserDetailsResponse> {\n const r = await this.send('GET', '/organizations/' + organizationId + '/users/' + id, null, true, true);\n return new OrganizationUserDetailsResponse(r);\n }\n\n async getOrganizationUserGroups(organizationId: string, id: string): Promise<string[]> {\n const r = await this.send('GET', '/organizations/' + organizationId + '/users/' + id + '/groups',\n null, true, true);\n return r;\n }\n\n async getOrganizationUsers(organizationId: string): Promise<ListResponse<OrganizationUserUserDetailsResponse>> {\n const r = await this.send('GET', '/organizations/' + organizationId + '/users', null, true, true);\n return new ListResponse(r, OrganizationUserUserDetailsResponse);\n }\n\n postOrganizationUserInvite(organizationId: string, request: OrganizationUserInviteRequest): Promise<any> {\n return this.send('POST', '/organizations/' + organizationId + '/users/invite', request, true, false);\n }\n\n postOrganizationUserReinvite(organizationId: string, id: string): Promise<any> {\n return this.send('POST', '/organizations/' + organizationId + '/users/' + id + '/reinvite', null, true, false);\n }\n\n postOrganizationUserAccept(organizationId: string, id: string,\n request: OrganizationUserAcceptRequest): Promise<any> {\n return this.send('POST', '/organizations/' + organizationId + '/users/' + id + '/accept', request, true, false);\n }\n\n postOrganizationUserConfirm(organizationId: string, id: string,\n request: OrganizationUserConfirmRequest): Promise<any> {\n return this.send('POST', '/organizations/' + organizationId + '/users/' + id + '/confirm',\n request, true, false);\n }\n\n putOrganizationUser(organizationId: string, id: string, request: OrganizationUserUpdateRequest): Promise<any> {\n return this.send('PUT', '/organizations/' + organizationId + '/users/' + id, request, true, false);\n }\n\n putOrganizationUserGroups(organizationId: string, id: string,\n request: OrganizationUserUpdateGroupsRequest): Promise<any> {\n return this.send('PUT', '/organizations/' + organizationId + '/users/' + id + '/groups', request, true, false);\n }\n\n deleteOrganizationUser(organizationId: string, id: string): Promise<any> {\n return this.send('DELETE', '/organizations/' + organizationId + '/users/' + id, null, true, false);\n }\n\n // Sync APIs\n\n async getSync(): Promise<SyncResponse> {\n const path = this.isDesktopClient || this.isWebClient ? '/sync?excludeDomains=true' : '/sync';\n const r = await this.send('GET', path, null, true, true);\n return new SyncResponse(r);\n }\n\n async postImportDirectory(organizationId: string, request: ImportDirectoryRequest): Promise<any> {\n return this.send('POST', '/organizations/' + organizationId + '/import', request, true, false);\n }\n\n // Settings APIs\n\n async getSettingsDomains(): Promise<DomainsResponse> {\n const r = await this.send('GET', '/settings/domains', null, true, true);\n return new DomainsResponse(r);\n }\n\n async putSettingsDomains(request: UpdateDomainsRequest): Promise<DomainsResponse> {\n const r = await this.send('PUT', '/settings/domains', request, true, true);\n return new DomainsResponse(r);\n }\n\n // Two-factor APIs\n\n async getTwoFactorProviders(): Promise<ListResponse<TwoFactorProviderResponse>> {\n const r = await this.send('GET', '/two-factor', null, true, true);\n return new ListResponse(r, TwoFactorProviderResponse);\n }\n\n async getTwoFactorOrganizationProviders(organizationId: string): Promise<ListResponse<TwoFactorProviderResponse>> {\n const r = await this.send('GET', '/organizations/' + organizationId + '/two-factor', null, true, true);\n return new ListResponse(r, TwoFactorProviderResponse);\n }\n\n async getTwoFactorAuthenticator(request: PasswordVerificationRequest): Promise<TwoFactorAuthenticatorResponse> {\n const r = await this.send('POST', '/two-factor/get-authenticator', request, true, true);\n return new TwoFactorAuthenticatorResponse(r);\n }\n\n async getTwoFactorEmail(request: PasswordVerificationRequest): Promise<TwoFactorEmailResponse> {\n const r = await this.send('POST', '/two-factor/get-email', request, true, true);\n return new TwoFactorEmailResponse(r);\n }\n\n async getTwoFactorDuo(request: PasswordVerificationRequest): Promise<TwoFactorDuoResponse> {\n const r = await this.send('POST', '/two-factor/get-duo', request, true, true);\n return new TwoFactorDuoResponse(r);\n }\n\n async getTwoFactorOrganizationDuo(organizationId: string,\n request: PasswordVerificationRequest): Promise<TwoFactorDuoResponse> {\n const r = await this.send('POST', '/organizations/' + organizationId + '/two-factor/get-duo',\n request, true, true);\n return new TwoFactorDuoResponse(r);\n }\n\n async getTwoFactorYubiKey(request: PasswordVerificationRequest): Promise<TwoFactorYubiKeyResponse> {\n const r = await this.send('POST', '/two-factor/get-yubikey', request, true, true);\n return new TwoFactorYubiKeyResponse(r);\n }\n\n async getTwoFactorU2f(request: PasswordVerificationRequest): Promise<TwoFactorU2fResponse> {\n const r = await this.send('POST', '/two-factor/get-u2f', request, true, true);\n return new TwoFactorU2fResponse(r);\n }\n\n async getTwoFactorU2fChallenge(request: PasswordVerificationRequest): Promise<ChallengeResponse> {\n const r = await this.send('POST', '/two-factor/get-u2f-challenge', request, true, true);\n return new ChallengeResponse(r);\n }\n\n async getTwoFactorRecover(request: PasswordVerificationRequest): Promise<TwoFactorRecoverResponse> {\n const r = await this.send('POST', '/two-factor/get-recover', request, true, true);\n return new TwoFactorRecoverResponse(r);\n }\n\n async putTwoFactorAuthenticator(\n request: UpdateTwoFactorAuthenticatorRequest): Promise<TwoFactorAuthenticatorResponse> {\n const r = await this.send('PUT', '/two-factor/authenticator', request, true, true);\n return new TwoFactorAuthenticatorResponse(r);\n }\n\n async putTwoFactorEmail(request: UpdateTwoFactorEmailRequest): Promise<TwoFactorEmailResponse> {\n const r = await this.send('PUT', '/two-factor/email', request, true, true);\n return new TwoFactorEmailResponse(r);\n }\n\n async putTwoFactorDuo(request: UpdateTwoFactorDuoRequest): Promise<TwoFactorDuoResponse> {\n const r = await this.send('PUT', '/two-factor/duo', request, true, true);\n return new TwoFactorDuoResponse(r);\n }\n\n async putTwoFactorOrganizationDuo(organizationId: string,\n request: UpdateTwoFactorDuoRequest): Promise<TwoFactorDuoResponse> {\n const r = await this.send('PUT', '/organizations/' + organizationId + '/two-factor/duo', request, true, true);\n return new TwoFactorDuoResponse(r);\n }\n\n async putTwoFactorYubiKey(request: UpdateTwoFactorYubioOtpRequest): Promise<TwoFactorYubiKeyResponse> {\n const r = await this.send('PUT', '/two-factor/yubikey', request, true, true);\n return new TwoFactorYubiKeyResponse(r);\n }\n\n async putTwoFactorU2f(request: UpdateTwoFactorU2fRequest): Promise<TwoFactorU2fResponse> {\n const r = await this.send('PUT', '/two-factor/u2f', request, true, true);\n return new TwoFactorU2fResponse(r);\n }\n\n async deleteTwoFactorU2f(request: UpdateTwoFactorU2fDeleteRequest): Promise<TwoFactorU2fResponse> {\n const r = await this.send('DELETE', '/two-factor/u2f', request, true, true);\n return new TwoFactorU2fResponse(r);\n }\n\n async putTwoFactorDisable(request: TwoFactorProviderRequest): Promise<TwoFactorProviderResponse> {\n const r = await this.send('PUT', '/two-factor/disable', request, true, true);\n return new TwoFactorProviderResponse(r);\n }\n\n async putTwoFactorOrganizationDisable(organizationId: string,\n request: TwoFactorProviderRequest): Promise<TwoFactorProviderResponse> {\n const r = await this.send('PUT', '/organizations/' + organizationId + '/two-factor/disable',\n request, true, true);\n return new TwoFactorProviderResponse(r);\n }\n\n postTwoFactorRecover(request: TwoFactorRecoveryRequest): Promise<any> {\n return this.send('POST', '/two-factor/recover', request, false, false);\n }\n\n postTwoFactorEmailSetup(request: TwoFactorEmailRequest): Promise<any> {\n return this.send('POST', '/two-factor/send-email', request, true, false);\n }\n\n postTwoFactorEmail(request: TwoFactorEmailRequest): Promise<any> {\n return this.send('POST', '/two-factor/send-email-login', request, false, false);\n }\n\n // Organization APIs\n\n async getOrganization(id: string): Promise<OrganizationResponse> {\n const r = await this.send('GET', '/organizations/' + id, null, true, true);\n return new OrganizationResponse(r);\n }\n\n async getOrganizationBilling(id: string): Promise<BillingResponse> {\n const r = await this.send('GET', '/organizations/' + id + '/billing', null, true, true);\n return new BillingResponse(r);\n }\n\n async getOrganizationSubscription(id: string): Promise<OrganizationSubscriptionResponse> {\n const r = await this.send('GET', '/organizations/' + id + '/subscription', null, true, true);\n return new OrganizationSubscriptionResponse(r);\n }\n\n async getOrganizationLicense(id: string, installationId: string): Promise<any> {\n return this.send('GET', '/organizations/' + id + '/license?installationId=' + installationId,\n null, true, true);\n }\n\n async postOrganization(request: OrganizationCreateRequest): Promise<OrganizationResponse> {\n const r = await this.send('POST', '/organizations', request, true, true);\n return new OrganizationResponse(r);\n }\n\n async putOrganization(id: string, request: OrganizationUpdateRequest): Promise<OrganizationResponse> {\n const r = await this.send('PUT', '/organizations/' + id, request, true, true);\n return new OrganizationResponse(r);\n }\n\n postLeaveOrganization(id: string): Promise<any> {\n return this.send('POST', '/organizations/' + id + '/leave', null, true, false);\n }\n\n async postOrganizationLicense(data: FormData): Promise<OrganizationResponse> {\n const r = await this.send('POST', '/organizations/license', data, true, true);\n return new OrganizationResponse(r);\n }\n\n async postOrganizationLicenseUpdate(id: string, data: FormData): Promise<any> {\n return this.send('POST', '/organizations/' + id + '/license', data, true, false);\n }\n\n async postOrganizationApiKey(id: string, request: PasswordVerificationRequest): Promise<ApiKeyResponse> {\n const r = await this.send('POST', '/organizations/' + id + '/api-key', request, true, true);\n return new ApiKeyResponse(r);\n }\n\n async postOrganizationRotateApiKey(id: string, request: PasswordVerificationRequest): Promise<ApiKeyResponse> {\n const r = await this.send('POST', '/organizations/' + id + '/rotate-api-key', request, true, true);\n return new ApiKeyResponse(r);\n }\n\n async postOrganizationUpgrade(id: string, request: OrganizationUpgradeRequest): Promise<PaymentResponse> {\n const r = await this.send('POST', '/organizations/' + id + '/upgrade', request, true, true);\n return new PaymentResponse(r);\n }\n\n async postOrganizationSeat(id: string, request: SeatRequest): Promise<PaymentResponse> {\n const r = await this.send('POST', '/organizations/' + id + '/seat', request, true, true);\n return new PaymentResponse(r);\n }\n\n async postOrganizationStorage(id: string, request: StorageRequest): Promise<PaymentResponse> {\n const r = await this.send('POST', '/organizations/' + id + '/storage', request, true, true);\n return new PaymentResponse(r);\n }\n\n postOrganizationPayment(id: string, request: PaymentRequest): Promise<any> {\n return this.send('POST', '/organizations/' + id + '/payment', request, true, false);\n }\n\n postOrganizationVerifyBank(id: string, request: VerifyBankRequest): Promise<any> {\n return this.send('POST', '/organizations/' + id + '/verify-bank', request, true, false);\n }\n\n postOrganizationCancel(id: string): Promise<any> {\n return this.send('POST', '/organizations/' + id + '/cancel', null, true, false);\n }\n\n postOrganizationReinstate(id: string): Promise<any> {\n return this.send('POST', '/organizations/' + id + '/reinstate', null, true, false);\n }\n\n deleteOrganization(id: string, request: PasswordVerificationRequest): Promise<any> {\n return this.send('DELETE', '/organizations/' + id, request, true, false);\n }\n\n // Event APIs\n\n async getEvents(start: string, end: string, token: string): Promise<ListResponse<EventResponse>> {\n const r = await this.send('GET', this.addEventParameters('/events', start, end, token), null, true, true);\n return new ListResponse(r, EventResponse);\n }\n\n async getEventsCipher(id: string, start: string, end: string,\n token: string): Promise<ListResponse<EventResponse>> {\n const r = await this.send('GET', this.addEventParameters('/ciphers/' + id + '/events', start, end, token),\n null, true, true);\n return new ListResponse(r, EventResponse);\n }\n\n async getEventsOrganization(id: string, start: string, end: string,\n token: string): Promise<ListResponse<EventResponse>> {\n const r = await this.send('GET', this.addEventParameters('/organizations/' + id + '/events', start, end, token),\n null, true, true);\n return new ListResponse(r, EventResponse);\n }\n\n async getEventsOrganizationUser(organizationId: string, id: string,\n start: string, end: string, token: string): Promise<ListResponse<EventResponse>> {\n const r = await this.send('GET',\n this.addEventParameters('/organizations/' + organizationId + '/users/' + id + '/events', start, end, token),\n null, true, true);\n return new ListResponse(r, EventResponse);\n }\n\n async postEventsCollect(request: EventRequest[]): Promise<any> {\n const authHeader = await this.getActiveBearerToken();\n const headers = new Headers({\n 'Device-Type': this.deviceType,\n 'Authorization': 'Bearer ' + authHeader,\n 'Content-Type': 'application/json; charset=utf-8',\n });\n if (this.customUserAgent != null) {\n headers.set('User-Agent', this.customUserAgent);\n }\n const response = await this.fetch(new Request(this.eventsBaseUrl + '/collect', {\n cache: 'no-store',\n credentials: this.getCredentials(),\n method: 'POST',\n body: JSON.stringify(request),\n headers: headers,\n }));\n if (response.status !== 200) {\n return Promise.reject('Event post failed.');\n }\n }\n\n // User APIs\n\n async getUserPublicKey(id: string): Promise<UserKeyResponse> {\n const r = await this.send('GET', '/users/' + id + '/public-key', null, true, true);\n return new UserKeyResponse(r);\n }\n\n // HIBP APIs\n\n async getHibpBreach(username: string): Promise<BreachAccountResponse[]> {\n const r = await this.send('GET', '/hibp/breach?username=' + username, null, true, true);\n return r.map((a: any) => new BreachAccountResponse(a));\n }\n\n // Misc\n\n async postBitPayInvoice(request: BitPayInvoiceRequest): Promise<string> {\n const r = await this.send('POST', '/bitpay-invoice', request, true, true);\n return r as string;\n }\n\n async postSetupPayment(): Promise<string> {\n const r = await this.send('POST', '/setup-payment', null, true, true);\n return r as string;\n }\n\n // Helpers\n\n async getActiveBearerToken(): Promise<string> {\n let accessToken = await this.tokenService.getToken();\n if (this.tokenService.tokenNeedsRefresh()) {\n const tokenResponse = await this.doRefreshToken();\n accessToken = tokenResponse.accessToken;\n }\n return accessToken;\n }\n\n fetch(request: Request): Promise<Response> {\n if (request.method === 'GET') {\n request.headers.set('Cache-Control', 'no-store');\n request.headers.set('Pragma', 'no-cache');\n }\n return this.nativeFetch(request);\n }\n\n nativeFetch(request: Request): Promise<Response> {\n return fetch(request);\n }\n\n private async send(method: 'GET' | 'POST' | 'PUT' | 'DELETE', path: string, body: any,\n authed: boolean, hasResponse: boolean): Promise<any> {\n const headers = new Headers({\n 'Device-Type': this.deviceType,\n });\n if (this.customUserAgent != null) {\n headers.set('User-Agent', this.customUserAgent);\n }\n\n const requestInit: RequestInit = {\n cache: 'no-store',\n credentials: this.getCredentials(),\n method: method,\n };\n\n if (authed) {\n const authHeader = await this.getActiveBearerToken();\n headers.set('Authorization', 'Bearer ' + authHeader);\n }\n if (body != null) {\n if (typeof body === 'string') {\n requestInit.body = body;\n headers.set('Content-Type', 'application/x-www-form-urlencoded; charset=utf-8');\n } else if (typeof body === 'object') {\n if (body instanceof FormData) {\n requestInit.body = body;\n } else {\n headers.set('Content-Type', 'application/json; charset=utf-8');\n requestInit.body = JSON.stringify(body);\n }\n }\n }\n if (hasResponse) {\n headers.set('Accept', 'application/json');\n }\n\n requestInit.headers = headers;\n const response = await this.fetch(new Request(this.apiBaseUrl + path, requestInit));\n\n if (hasResponse && response.status === 200) {\n const responseJson = await response.json();\n return responseJson;\n } else if (response.status !== 200) {\n const error = await this.handleError(response, false);\n return Promise.reject(error);\n }\n }\n\n private async handleError(response: Response, tokenError: boolean): Promise<ErrorResponse> {\n if ((tokenError && response.status === 400) || response.status === 401 || response.status === 403) {\n await this.logoutCallback(true);\n return null;\n }\n\n let responseJson: any = null;\n if (this.isJsonResponse(response)) {\n responseJson = await response.json();\n }\n\n return new ErrorResponse(responseJson, response.status, tokenError);\n }\n\n private async doRefreshToken(): Promise<IdentityTokenResponse> {\n const refreshToken = await this.tokenService.getRefreshToken();\n if (refreshToken == null || refreshToken === '') {\n throw new Error();\n }\n const headers = new Headers({\n 'Content-Type': 'application/x-www-form-urlencoded; charset=utf-8',\n 'Accept': 'application/json',\n 'Device-Type': this.deviceType,\n });\n if (this.customUserAgent != null) {\n headers.set('User-Agent', this.customUserAgent);\n }\n\n const decodedToken = this.tokenService.decodeToken();\n const response = await this.fetch(new Request(this.identityBaseUrl + '/connect/token', {\n body: this.qsStringify({\n grant_type: 'refresh_token',\n client_id: decodedToken.client_id,\n refresh_token: refreshToken,\n }),\n cache: 'no-store',\n credentials: this.getCredentials(),\n headers: headers,\n method: 'POST',\n }));\n\n if (response.status === 200) {\n const responseJson = await response.json();\n const tokenResponse = new IdentityTokenResponse(responseJson);\n await this.tokenService.setTokens(tokenResponse.accessToken, tokenResponse.refreshToken);\n return tokenResponse;\n } else {\n const error = await this.handleError(response, true);\n return Promise.reject(error);\n }\n }\n\n private qsStringify(params: any): string {\n return Object.keys(params).map((key) => {\n return encodeURIComponent(key) + '=' + encodeURIComponent(params[key]);\n }).join('&');\n }\n\n private getCredentials(): RequestCredentials {\n if (this.device !== DeviceType.SafariExtension && (!this.isWebClient || this.usingBaseUrl)) {\n return 'include';\n }\n return undefined;\n }\n\n private addEventParameters(base: string, start: string, end: string, token: string) {\n if (start != null) {\n base += ('?start=' + start);\n }\n if (end != null) {\n base += (base.indexOf('?') > -1 ? '&' : '?');\n base += ('end=' + end);\n }\n if (token != null) {\n base += (base.indexOf('?') > -1 ? '&' : '?');\n base += ('continuationToken=' + token);\n }\n return base;\n }\n\n private isJsonResponse(response: Response): boolean {\n const typeHeader = response.headers.get('content-type');\n return typeHeader != null && typeHeader.indexOf('application/json') > -1;\n }\n}\n","import * as FormData from 'form-data';\nimport * as HttpsProxyAgent from 'https-proxy-agent';\nimport * as fe from 'node-fetch';\n\nimport { ApiService } from './api.service';\n\nimport { PlatformUtilsService } from '../abstractions/platformUtils.service';\nimport { TokenService } from '../abstractions/token.service';\n\n(global as any).fetch = fe.default;\n(global as any).Request = fe.Request;\n(global as any).Response = fe.Response;\n(global as any).Headers = fe.Headers;\n(global as any).FormData = FormData;\n\nexport class NodeApiService extends ApiService {\n constructor(tokenService: TokenService, platformUtilsService: PlatformUtilsService,\n logoutCallback: (expired: boolean) => Promise<void>, customUserAgent: string = null) {\n super(tokenService, platformUtilsService, logoutCallback, customUserAgent);\n }\n\n nativeFetch(request: Request): Promise<Response> {\n const proxy = process.env.http_proxy || process.env.https_proxy;\n if (proxy) {\n (request as any).agent = new HttpsProxyAgent(proxy);\n }\n return fetch(request);\n }\n}\n","export class DecryptParameters<T> {\n encKey: T;\n data: T;\n iv: T;\n macKey: T;\n mac: T;\n macData: T;\n}\n","import * as constants from 'constants';\nimport * as crypto from 'crypto';\nimport * as forge from 'node-forge';\n\nimport { CryptoFunctionService } from '../abstractions/cryptoFunction.service';\n\nimport { Utils } from '../misc/utils';\n\nimport { DecryptParameters } from '../models/domain/decryptParameters';\nimport { SymmetricCryptoKey } from '../models/domain/symmetricCryptoKey';\n\nexport class NodeCryptoFunctionService implements CryptoFunctionService {\n pbkdf2(password: string | ArrayBuffer, salt: string | ArrayBuffer, algorithm: 'sha256' | 'sha512',\n iterations: number): Promise<ArrayBuffer> {\n const len = algorithm === 'sha256' ? 32 : 64;\n const nodePassword = this.toNodeValue(password);\n const nodeSalt = this.toNodeValue(salt);\n return new Promise<ArrayBuffer>((resolve, reject) => {\n crypto.pbkdf2(nodePassword, nodeSalt, iterations, len, algorithm, (error, key) => {\n if (error != null) {\n reject(error);\n } else {\n resolve(this.toArrayBuffer(key));\n }\n });\n });\n }\n\n hash(value: string | ArrayBuffer, algorithm: 'sha1' | 'sha256' | 'sha512' | 'md5'): Promise<ArrayBuffer> {\n const nodeValue = this.toNodeValue(value);\n const hash = crypto.createHash(algorithm);\n hash.update(nodeValue);\n return Promise.resolve(this.toArrayBuffer(hash.digest()));\n }\n\n hmac(value: ArrayBuffer, key: ArrayBuffer, algorithm: 'sha1' | 'sha256' | 'sha512'): Promise<ArrayBuffer> {\n const nodeValue = this.toNodeBuffer(value);\n const nodeKey = this.toNodeBuffer(key);\n const hmac = crypto.createHmac(algorithm, nodeKey);\n hmac.update(nodeValue);\n return Promise.resolve(this.toArrayBuffer(hmac.digest()));\n }\n\n async compare(a: ArrayBuffer, b: ArrayBuffer): Promise<boolean> {\n const key = await this.randomBytes(32);\n const mac1 = await this.hmac(a, key, 'sha256');\n const mac2 = await this.hmac(b, key, 'sha256');\n if (mac1.byteLength !== mac2.byteLength) {\n return false;\n }\n\n const arr1 = new Uint8Array(mac1);\n const arr2 = new Uint8Array(mac2);\n for (let i = 0; i < arr2.length; i++) {\n if (arr1[i] !== arr2[i]) {\n return false;\n }\n }\n\n return true;\n }\n\n hmacFast(value: ArrayBuffer, key: ArrayBuffer, algorithm: 'sha1' | 'sha256' | 'sha512'): Promise<ArrayBuffer> {\n return this.hmac(value, key, algorithm);\n }\n\n compareFast(a: ArrayBuffer, b: ArrayBuffer): Promise<boolean> {\n return this.compare(a, b);\n }\n\n aesEncrypt(data: ArrayBuffer, iv: ArrayBuffer, key: ArrayBuffer): Promise<ArrayBuffer> {\n const nodeData = this.toNodeBuffer(data);\n const nodeIv = this.toNodeBuffer(iv);\n const nodeKey = this.toNodeBuffer(key);\n const cipher = crypto.createCipheriv('aes-256-cbc', nodeKey, nodeIv);\n const encBuf = Buffer.concat([cipher.update(nodeData), cipher.final()]);\n return Promise.resolve(this.toArrayBuffer(encBuf));\n }\n\n aesDecryptFastParameters(data: string, iv: string, mac: string, key: SymmetricCryptoKey):\n DecryptParameters<ArrayBuffer> {\n const p = new DecryptParameters<ArrayBuffer>();\n p.encKey = key.encKey;\n p.data = Utils.fromB64ToArray(data).buffer;\n p.iv = Utils.fromB64ToArray(iv).buffer;\n\n const macData = new Uint8Array(p.iv.byteLength + p.data.byteLength);\n macData.set(new Uint8Array(p.iv), 0);\n macData.set(new Uint8Array(p.data), p.iv.byteLength);\n p.macData = macData.buffer;\n\n if (key.macKey != null) {\n p.macKey = key.macKey;\n }\n if (mac != null) {\n p.mac = Utils.fromB64ToArray(mac).buffer;\n }\n\n return p;\n }\n\n async aesDecryptFast(parameters: DecryptParameters<ArrayBuffer>): Promise<string> {\n const decBuf = await this.aesDecrypt(parameters.data, parameters.iv, parameters.encKey);\n return Utils.fromBufferToUtf8(decBuf);\n }\n\n aesDecrypt(data: ArrayBuffer, iv: ArrayBuffer, key: ArrayBuffer): Promise<ArrayBuffer> {\n const nodeData = this.toNodeBuffer(data);\n const nodeIv = this.toNodeBuffer(iv);\n const nodeKey = this.toNodeBuffer(key);\n const decipher = crypto.createDecipheriv('aes-256-cbc', nodeKey, nodeIv);\n const decBuf = Buffer.concat([decipher.update(nodeData), decipher.final()]);\n return Promise.resolve(this.toArrayBuffer(decBuf));\n }\n\n rsaEncrypt(data: ArrayBuffer, publicKey: ArrayBuffer, algorithm: 'sha1' | 'sha256'): Promise<ArrayBuffer> {\n if (algorithm === 'sha256') {\n throw new Error('Node crypto does not support RSA-OAEP SHA-256');\n }\n\n const pem = this.toPemPublicKey(publicKey);\n const decipher = crypto.publicEncrypt(pem, this.toNodeBuffer(data));\n return Promise.resolve(this.toArrayBuffer(decipher));\n }\n\n rsaDecrypt(data: ArrayBuffer, privateKey: ArrayBuffer, algorithm: 'sha1' | 'sha256'): Promise<ArrayBuffer> {\n if (algorithm === 'sha256') {\n throw new Error('Node crypto does not support RSA-OAEP SHA-256');\n }\n\n const pem = this.toPemPrivateKey(privateKey);\n const decipher = crypto.privateDecrypt(pem, this.toNodeBuffer(data));\n return Promise.resolve(this.toArrayBuffer(decipher));\n }\n\n rsaExtractPublicKey(privateKey: ArrayBuffer): Promise<ArrayBuffer> {\n const privateKeyByteString = Utils.fromBufferToByteString(privateKey);\n const privateKeyAsn1 = forge.asn1.fromDer(privateKeyByteString);\n const forgePrivateKey = (forge as any).pki.privateKeyFromAsn1(privateKeyAsn1);\n const forgePublicKey = (forge.pki as any).setRsaPublicKey(forgePrivateKey.n, forgePrivateKey.e);\n const publicKeyAsn1 = (forge.pki as any).publicKeyToAsn1(forgePublicKey);\n const publicKeyByteString = forge.asn1.toDer(publicKeyAsn1).data;\n const publicKeyArray = Utils.fromByteStringToArray(publicKeyByteString);\n return Promise.resolve(publicKeyArray.buffer);\n }\n\n async rsaGenerateKeyPair(length: 1024 | 2048 | 4096): Promise<[ArrayBuffer, ArrayBuffer]> {\n return new Promise<[ArrayBuffer, ArrayBuffer]>((resolve, reject) => {\n forge.pki.rsa.generateKeyPair({\n bits: length,\n workers: -1,\n e: 0x10001, // 65537\n }, (error, keyPair) => {\n if (error != null) {\n reject(error);\n return;\n }\n\n const publicKeyAsn1 = (forge.pki as any).publicKeyToAsn1(keyPair.publicKey);\n const publicKeyByteString = forge.asn1.toDer(publicKeyAsn1).getBytes();\n const publicKey = Utils.fromByteStringToArray(publicKeyByteString);\n\n const privateKeyAsn1 = (forge.pki as any).privateKeyToAsn1(keyPair.privateKey);\n const privateKeyPkcs8 = (forge.pki as any).wrapRsaPrivateKey(privateKeyAsn1);\n const privateKeyByteString = forge.asn1.toDer(privateKeyPkcs8).getBytes();\n const privateKey = Utils.fromByteStringToArray(privateKeyByteString);\n\n resolve([publicKey.buffer, privateKey.buffer]);\n });\n });\n }\n\n randomBytes(length: number): Promise<ArrayBuffer> {\n return new Promise<ArrayBuffer>((resolve, reject) => {\n crypto.randomBytes(length, (error, bytes) => {\n if (error != null) {\n reject(error);\n } else {\n resolve(this.toArrayBuffer(bytes));\n }\n });\n });\n }\n\n private toNodeValue(value: string | ArrayBuffer): string | Buffer {\n let nodeValue: string | Buffer;\n if (typeof (value) === 'string') {\n nodeValue = value;\n } else {\n nodeValue = this.toNodeBuffer(value);\n }\n return nodeValue;\n }\n\n private toNodeBuffer(value: ArrayBuffer): Buffer {\n return Buffer.from(new Uint8Array(value) as any);\n }\n\n private toArrayBuffer(buf: Buffer): ArrayBuffer {\n return new Uint8Array(buf).buffer;\n }\n\n private toPemPrivateKey(key: ArrayBuffer): string {\n const byteString = Utils.fromBufferToByteString(key);\n const asn1 = forge.asn1.fromDer(byteString);\n const privateKey = (forge as any).pki.privateKeyFromAsn1(asn1);\n const rsaPrivateKey = (forge.pki as any).privateKeyToAsn1(privateKey);\n const privateKeyInfo = (forge.pki as any).wrapRsaPrivateKey(rsaPrivateKey);\n return (forge.pki as any).privateKeyInfoToPem(privateKeyInfo);\n }\n\n private toPemPublicKey(key: ArrayBuffer): string {\n const byteString = Utils.fromBufferToByteString(key);\n const asn1 = forge.asn1.fromDer(byteString);\n const publicKey = (forge as any).pki.publicKeyFromAsn1(asn1);\n return (forge.pki as any).publicKeyToPem(publicKey);\n }\n}\n","import { MessagingService } from '../abstractions/messaging.service';\n\nexport class NoopMessagingService implements MessagingService {\n send(subscriber: string, arg: any = {}) {\n // Do nothing...\n }\n}\n","import Domain from './domainBase';\n\nexport class PasswordGeneratorPolicyOptions extends Domain {\n defaultType: string = '';\n minLength: number = 0;\n useUppercase: boolean = false;\n useLowercase: boolean = false;\n useNumbers: boolean = false;\n numberCount: number = 0;\n useSpecial: boolean = false;\n specialCount: number = 0;\n minNumberWords: number = 0;\n capitalize: boolean = false;\n includeNumber: boolean = false;\n\n inEffect() {\n return this.defaultType !== '' ||\n this.minLength > 0 ||\n this.numberCount > 0 ||\n this.specialCount > 0 ||\n this.useUppercase ||\n this.useLowercase ||\n this.useNumbers ||\n this.useSpecial ||\n this.minNumberWords > 0 ||\n this.capitalize ||\n this.includeNumber;\n }\n}\n","export enum PolicyType {\n TwoFactorAuthentication = 0,\n MasterPassword = 1,\n PasswordGenerator = 2,\n}\n","import * as zxcvbn from 'zxcvbn';\n\nimport { CipherString } from '../models/domain/cipherString';\nimport { GeneratedPasswordHistory } from '../models/domain/generatedPasswordHistory';\nimport { PasswordGeneratorPolicyOptions } from '../models/domain/passwordGeneratorPolicyOptions';\nimport { Policy } from '../models/domain/policy';\n\nimport { CryptoService } from '../abstractions/crypto.service';\nimport {\n PasswordGenerationService as PasswordGenerationServiceAbstraction,\n} from '../abstractions/passwordGeneration.service';\nimport { PolicyService } from '../abstractions/policy.service';\nimport { StorageService } from '../abstractions/storage.service';\n\nimport { EEFLongWordList } from '../misc/wordlist';\n\nimport { PolicyType } from '../enums/policyType';\n\nconst DefaultOptions = {\n length: 14,\n ambiguous: false,\n number: true,\n minNumber: 1,\n uppercase: true,\n minUppercase: 0,\n lowercase: true,\n minLowercase: 0,\n special: false,\n minSpecial: 1,\n type: 'password',\n numWords: 3,\n wordSeparator: '-',\n capitalize: false,\n includeNumber: false,\n};\n\nconst Keys = {\n options: 'passwordGenerationOptions',\n history: 'generatedPasswordHistory',\n};\n\nconst MaxPasswordsInHistory = 100;\n\nexport class PasswordGenerationService implements PasswordGenerationServiceAbstraction {\n private optionsCache: any;\n private history: GeneratedPasswordHistory[];\n\n constructor(private cryptoService: CryptoService, private storageService: StorageService,\n private policyService: PolicyService) { }\n\n async generatePassword(options: any): Promise<string> {\n // overload defaults with given options\n const o = Object.assign({}, DefaultOptions, options);\n\n if (o.type === 'passphrase') {\n return this.generatePassphrase(options);\n }\n\n // sanitize\n this.sanitizePasswordLength(o, true);\n\n const minLength: number = o.minUppercase + o.minLowercase + o.minNumber + o.minSpecial;\n if (o.length < minLength) {\n o.length = minLength;\n }\n\n const positions: string[] = [];\n if (o.lowercase && o.minLowercase > 0) {\n for (let i = 0; i < o.minLowercase; i++) {\n positions.push('l');\n }\n }\n if (o.uppercase && o.minUppercase > 0) {\n for (let i = 0; i < o.minUppercase; i++) {\n positions.push('u');\n }\n }\n if (o.number && o.minNumber > 0) {\n for (let i = 0; i < o.minNumber; i++) {\n positions.push('n');\n }\n }\n if (o.special && o.minSpecial > 0) {\n for (let i = 0; i < o.minSpecial; i++) {\n positions.push('s');\n }\n }\n while (positions.length < o.length) {\n positions.push('a');\n }\n\n // shuffle\n await this.shuffleArray(positions);\n\n // build out the char sets\n let allCharSet = '';\n\n let lowercaseCharSet = 'abcdefghijkmnopqrstuvwxyz';\n if (o.ambiguous) {\n lowercaseCharSet += 'l';\n }\n if (o.lowercase) {\n allCharSet += lowercaseCharSet;\n }\n\n let uppercaseCharSet = 'ABCDEFGHJKLMNPQRSTUVWXYZ';\n if (o.ambiguous) {\n uppercaseCharSet += 'IO';\n }\n if (o.uppercase) {\n allCharSet += uppercaseCharSet;\n }\n\n let numberCharSet = '23456789';\n if (o.ambiguous) {\n numberCharSet += '01';\n }\n if (o.number) {\n allCharSet += numberCharSet;\n }\n\n const specialCharSet = '!@#$%^&*';\n if (o.special) {\n allCharSet += specialCharSet;\n }\n\n let password = '';\n for (let i = 0; i < o.length; i++) {\n let positionChars: string;\n switch (positions[i]) {\n case 'l':\n positionChars = lowercaseCharSet;\n break;\n case 'u':\n positionChars = uppercaseCharSet;\n break;\n case 'n':\n positionChars = numberCharSet;\n break;\n case 's':\n positionChars = specialCharSet;\n break;\n case 'a':\n positionChars = allCharSet;\n break;\n default:\n break;\n }\n\n const randomCharIndex = await this.cryptoService.randomNumber(0, positionChars.length - 1);\n password += positionChars.charAt(randomCharIndex);\n }\n\n return password;\n }\n\n async generatePassphrase(options: any): Promise<string> {\n const o = Object.assign({}, DefaultOptions, options);\n\n if (o.numWords == null || o.numWords <= 2) {\n o.numWords = DefaultOptions.numWords;\n }\n if (o.wordSeparator == null || o.wordSeparator.length === 0 || o.wordSeparator.length > 1) {\n o.wordSeparator = ' ';\n }\n if (o.capitalize == null) {\n o.capitalize = false;\n }\n if (o.includeNumber == null) {\n o.includeNumber = false;\n }\n\n const listLength = EEFLongWordList.length - 1;\n const wordList = new Array(o.numWords);\n for (let i = 0; i < o.numWords; i++) {\n const wordIndex = await this.cryptoService.randomNumber(0, listLength);\n if (o.capitalize) {\n wordList[i] = this.capitalize(EEFLongWordList[wordIndex]);\n } else {\n wordList[i] = EEFLongWordList[wordIndex];\n }\n }\n\n if (o.includeNumber) {\n await this.appendRandomNumberToRandomWord(wordList);\n }\n return wordList.join(o.wordSeparator);\n }\n\n async getOptions(): Promise<[any, PasswordGeneratorPolicyOptions]> {\n if (this.optionsCache == null) {\n const options = await this.storageService.get(Keys.options);\n if (options == null) {\n this.optionsCache = DefaultOptions;\n } else {\n this.optionsCache = Object.assign({}, DefaultOptions, options);\n }\n }\n const enforcedOptions = await this.enforcePasswordGeneratorPoliciesOnOptions(this.optionsCache);\n this.optionsCache = enforcedOptions[0];\n return [this.optionsCache, enforcedOptions[1]];\n }\n\n async enforcePasswordGeneratorPoliciesOnOptions(options: any): Promise<[any, PasswordGeneratorPolicyOptions]> {\n let enforcedPolicyOptions = await this.getPasswordGeneratorPolicyOptions();\n if (enforcedPolicyOptions != null) {\n if (options.length < enforcedPolicyOptions.minLength) {\n options.length = enforcedPolicyOptions.minLength;\n }\n\n if (enforcedPolicyOptions.useUppercase) {\n options.uppercase = true;\n }\n\n if (enforcedPolicyOptions.useLowercase) {\n options.lowercase = true;\n }\n\n if (enforcedPolicyOptions.useNumbers) {\n options.number = true;\n }\n\n if (options.minNumber < enforcedPolicyOptions.numberCount) {\n options.minNumber = enforcedPolicyOptions.numberCount;\n }\n\n if (enforcedPolicyOptions.useSpecial) {\n options.special = true;\n }\n\n if (options.minSpecial < enforcedPolicyOptions.specialCount) {\n options.minSpecial = enforcedPolicyOptions.specialCount;\n }\n\n // Must normalize these fields because the receiving call expects all options to pass the current rules\n if (options.minSpecial + options.minNumber > options.length) {\n options.minSpecial = options.length - options.minNumber;\n }\n\n if (options.numWords < enforcedPolicyOptions.minNumberWords) {\n options.numWords = enforcedPolicyOptions.minNumberWords;\n }\n\n if (enforcedPolicyOptions.capitalize) {\n options.capitalize = true;\n }\n\n if (enforcedPolicyOptions.includeNumber) {\n options.includeNumber = true;\n }\n\n // Force default type if password/passphrase selected via policy\n if (enforcedPolicyOptions.defaultType === 'password' ||\n enforcedPolicyOptions.defaultType === 'passphrase') {\n options.type = enforcedPolicyOptions.defaultType;\n }\n } else { // UI layer expects an instantiated object to prevent more explicit null checks\n enforcedPolicyOptions = new PasswordGeneratorPolicyOptions();\n }\n return [options, enforcedPolicyOptions];\n }\n\n async getPasswordGeneratorPolicyOptions(): Promise<PasswordGeneratorPolicyOptions> {\n const policies: Policy[] = await this.policyService.getAll(PolicyType.PasswordGenerator);\n let enforcedOptions: PasswordGeneratorPolicyOptions = null;\n\n if (policies == null || policies.length === 0) {\n return enforcedOptions;\n }\n\n policies.forEach((currentPolicy) => {\n if (!currentPolicy.enabled || currentPolicy.data == null) {\n return;\n }\n\n if (enforcedOptions == null) {\n enforcedOptions = new PasswordGeneratorPolicyOptions();\n }\n\n // Password wins in multi-org collisions\n if (currentPolicy.data.defaultType != null && enforcedOptions.defaultType !== 'password') {\n enforcedOptions.defaultType = currentPolicy.data.defaultType;\n }\n\n if (currentPolicy.data.minLength != null\n && currentPolicy.data.minLength > enforcedOptions.minLength) {\n enforcedOptions.minLength = currentPolicy.data.minLength;\n }\n\n if (currentPolicy.data.useUpper) {\n enforcedOptions.useUppercase = true;\n }\n\n if (currentPolicy.data.useLower) {\n enforcedOptions.useLowercase = true;\n }\n\n if (currentPolicy.data.useNumbers) {\n enforcedOptions.useNumbers = true;\n }\n\n if (currentPolicy.data.minNumbers != null\n && currentPolicy.data.minNumbers > enforcedOptions.numberCount) {\n enforcedOptions.numberCount = currentPolicy.data.minNumbers;\n }\n\n if (currentPolicy.data.useSpecial) {\n enforcedOptions.useSpecial = true;\n }\n\n if (currentPolicy.data.minSpecial != null\n && currentPolicy.data.minSpecial > enforcedOptions.specialCount) {\n enforcedOptions.specialCount = currentPolicy.data.minSpecial;\n }\n\n if (currentPolicy.data.minNumberWords != null\n && currentPolicy.data.minNumberWords > enforcedOptions.minNumberWords) {\n enforcedOptions.minNumberWords = currentPolicy.data.minNumberWords;\n }\n\n if (currentPolicy.data.capitalize) {\n enforcedOptions.capitalize = true;\n }\n\n if (currentPolicy.data.includeNumber) {\n enforcedOptions.includeNumber = true;\n }\n });\n\n return enforcedOptions;\n }\n\n async saveOptions(options: any) {\n await this.storageService.save(Keys.options, options);\n this.optionsCache = options;\n }\n\n async getHistory(): Promise<GeneratedPasswordHistory[]> {\n const hasKey = await this.cryptoService.hasKey();\n if (!hasKey) {\n return new Array<GeneratedPasswordHistory>();\n }\n\n if (!this.history) {\n const encrypted = await this.storageService.get<GeneratedPasswordHistory[]>(Keys.history);\n this.history = await this.decryptHistory(encrypted);\n }\n\n return this.history || new Array<GeneratedPasswordHistory>();\n }\n\n async addHistory(password: string): Promise<any> {\n // Cannot add new history if no key is available\n const hasKey = await this.cryptoService.hasKey();\n if (!hasKey) {\n return;\n }\n\n const currentHistory = await this.getHistory();\n\n // Prevent duplicates\n if (this.matchesPrevious(password, currentHistory)) {\n return;\n }\n\n currentHistory.unshift(new GeneratedPasswordHistory(password, Date.now()));\n\n // Remove old items.\n if (currentHistory.length > MaxPasswordsInHistory) {\n currentHistory.pop();\n }\n\n const newHistory = await this.encryptHistory(currentHistory);\n return await this.storageService.save(Keys.history, newHistory);\n }\n\n async clear(): Promise<any> {\n this.history = [];\n return await this.storageService.remove(Keys.history);\n }\n\n passwordStrength(password: string, userInputs: string[] = null): zxcvbn.ZXCVBNResult {\n if (password == null || password.length === 0) {\n return null;\n }\n let globalUserInputs = ['bitwarden', 'bit', 'warden'];\n if (userInputs != null && userInputs.length > 0) {\n globalUserInputs = globalUserInputs.concat(userInputs);\n }\n // Use a hash set to get rid of any duplicate user inputs\n const finalUserInputs = Array.from(new Set(globalUserInputs));\n const result = zxcvbn(password, finalUserInputs);\n return result;\n }\n\n normalizeOptions(options: any, enforcedPolicyOptions: PasswordGeneratorPolicyOptions) {\n options.minLowercase = 0;\n options.minUppercase = 0;\n\n if (!options.length || options.length < 5) {\n options.length = 5;\n } else if (options.length > 128) {\n options.length = 128;\n }\n\n if (options.length < enforcedPolicyOptions.minLength) {\n options.length = enforcedPolicyOptions.minLength;\n }\n\n if (!options.minNumber) {\n options.minNumber = 0;\n } else if (options.minNumber > options.length) {\n options.minNumber = options.length;\n } else if (options.minNumber > 9) {\n options.minNumber = 9;\n }\n\n if (options.minNumber < enforcedPolicyOptions.numberCount) {\n options.minNumber = enforcedPolicyOptions.numberCount;\n }\n\n if (!options.minSpecial) {\n options.minSpecial = 0;\n } else if (options.minSpecial > options.length) {\n options.minSpecial = options.length;\n } else if (options.minSpecial > 9) {\n options.minSpecial = 9;\n }\n\n if (options.minSpecial < enforcedPolicyOptions.specialCount) {\n options.minSpecial = enforcedPolicyOptions.specialCount;\n }\n\n if (options.minSpecial + options.minNumber > options.length) {\n options.minSpecial = options.length - options.minNumber;\n }\n\n if (options.numWords == null || options.length < 3) {\n options.numWords = 3;\n } else if (options.numWords > 20) {\n options.numWords = 20;\n }\n\n if (options.numWords < enforcedPolicyOptions.minNumberWords) {\n options.numWords = enforcedPolicyOptions.minNumberWords;\n }\n\n if (options.wordSeparator != null && options.wordSeparator.length > 1) {\n options.wordSeparator = options.wordSeparator[0];\n }\n\n this.sanitizePasswordLength(options, false);\n }\n\n private capitalize(str: string) {\n return str.charAt(0).toUpperCase() + str.slice(1);\n }\n\n private async appendRandomNumberToRandomWord(wordList: string[]) {\n if (wordList == null || wordList.length <= 0) {\n return;\n }\n const index = await this.cryptoService.randomNumber(0, wordList.length - 1);\n const num = await this.cryptoService.randomNumber(0, 9);\n wordList[index] = wordList[index] + num;\n }\n\n private async encryptHistory(history: GeneratedPasswordHistory[]): Promise<GeneratedPasswordHistory[]> {\n if (history == null || history.length === 0) {\n return Promise.resolve([]);\n }\n\n const promises = history.map(async (item) => {\n const encrypted = await this.cryptoService.encrypt(item.password);\n return new GeneratedPasswordHistory(encrypted.encryptedString, item.date);\n });\n\n return await Promise.all(promises);\n }\n\n private async decryptHistory(history: GeneratedPasswordHistory[]): Promise<GeneratedPasswordHistory[]> {\n if (history == null || history.length === 0) {\n return Promise.resolve([]);\n }\n\n const promises = history.map(async (item) => {\n const decrypted = await this.cryptoService.decryptToUtf8(new CipherString(item.password));\n return new GeneratedPasswordHistory(decrypted, item.date);\n });\n\n return await Promise.all(promises);\n }\n\n private matchesPrevious(password: string, history: GeneratedPasswordHistory[]): boolean {\n if (history == null || history.length === 0) {\n return false;\n }\n\n return history[history.length - 1].password === password;\n }\n\n // ref: https://stackoverflow.com/a/12646864/1090359\n private async shuffleArray(array: string[]) {\n for (let i = array.length - 1; i > 0; i--) {\n const j = await this.cryptoService.randomNumber(0, i);\n [array[i], array[j]] = [array[j], array[i]];\n }\n }\n\n private sanitizePasswordLength(options: any, forGeneration: boolean) {\n let minUppercaseCalc = 0;\n let minLowercaseCalc = 0;\n let minNumberCalc: number = options.minNumber;\n let minSpecialCalc: number = options.minSpecial;\n\n if (options.uppercase && options.minUppercase <= 0) {\n minUppercaseCalc = 1;\n } else if (!options.uppercase) {\n minUppercaseCalc = 0;\n }\n\n if (options.lowercase && options.minLowercase <= 0) {\n minLowercaseCalc = 1;\n } else if (!options.lowercase) {\n minLowercaseCalc = 0;\n }\n\n if (options.number && options.minNumber <= 0) {\n minNumberCalc = 1;\n } else if (!options.number) {\n minNumberCalc = 0;\n }\n\n if (options.special && options.minSpecial <= 0) {\n minSpecialCalc = 1;\n } else if (!options.special) {\n minSpecialCalc = 0;\n }\n\n // This should never happen but is a final safety net\n if (!options.length || options.length < 1) {\n options.length = 10;\n }\n\n const minLength: number = minUppercaseCalc + minLowercaseCalc + minNumberCalc + minSpecialCalc;\n // Normalize and Generation both require this modification\n if (options.length < minLength) {\n options.length = minLength;\n }\n\n // Apply other changes if the options object passed in is for generation\n if (forGeneration) {\n options.minUppercase = minUppercaseCalc;\n options.minLowercase = minLowercaseCalc;\n options.minNumber = minNumberCalc;\n options.minSpecial = minSpecialCalc;\n }\n }\n}\n","import Domain from './domainBase';\n\nexport class MasterPasswordPolicyOptions extends Domain {\n minComplexity: number = 0;\n minLength: number = 0;\n requireUpper: boolean = false;\n requireLower: boolean = false;\n requireNumbers: boolean = false;\n requireSpecial: boolean = false;\n}\n","import { PolicyData } from '../data/policyData';\n\nimport Domain from './domainBase';\n\nimport { PolicyType } from '../../enums/policyType';\n\nexport class Policy extends Domain {\n id: string;\n organizationId: string;\n type: PolicyType;\n data: any;\n enabled: boolean;\n\n constructor(obj?: PolicyData) {\n super();\n if (obj == null) {\n return;\n }\n\n this.id = obj.id;\n this.organizationId = obj.organizationId;\n this.type = obj.type;\n this.data = obj.data;\n this.enabled = obj.enabled;\n }\n}\n","import { PolicyService as PolicyServiceAbstraction } from '../abstractions/policy.service';\nimport { StorageService } from '../abstractions/storage.service';\nimport { UserService } from '../abstractions/user.service';\n\nimport { PolicyData } from '../models/data/policyData';\n\nimport { MasterPasswordPolicyOptions } from '../models/domain/masterPasswordPolicyOptions';\nimport { Policy } from '../models/domain/policy';\n\nimport { PolicyType } from '../enums/policyType';\n\nconst Keys = {\n policiesPrefix: 'policies_',\n};\n\nexport class PolicyService implements PolicyServiceAbstraction {\n policyCache: Policy[];\n\n constructor(private userService: UserService, private storageService: StorageService) {\n }\n\n clearCache(): void {\n this.policyCache = null;\n }\n\n async getAll(type?: PolicyType): Promise<Policy[]> {\n if (this.policyCache == null) {\n const userId = await this.userService.getUserId();\n const policies = await this.storageService.get<{ [id: string]: PolicyData; }>(\n Keys.policiesPrefix + userId);\n const response: Policy[] = [];\n for (const id in policies) {\n if (policies.hasOwnProperty(id)) {\n response.push(new Policy(policies[id]));\n }\n }\n this.policyCache = response;\n }\n if (type != null) {\n return this.policyCache.filter((p) => p.type === type);\n } else {\n return this.policyCache;\n }\n }\n\n async replace(policies: { [id: string]: PolicyData; }): Promise<any> {\n const userId = await this.userService.getUserId();\n await this.storageService.save(Keys.policiesPrefix + userId, policies);\n this.policyCache = null;\n }\n\n async clear(userId: string): Promise<any> {\n await this.storageService.remove(Keys.policiesPrefix + userId);\n this.policyCache = null;\n }\n\n async getMasterPasswordPolicyOptions(policies?: Policy[]): Promise<MasterPasswordPolicyOptions> {\n let enforcedOptions: MasterPasswordPolicyOptions = null;\n\n if (policies == null) {\n policies = await this.getAll(PolicyType.MasterPassword);\n } else {\n policies = policies.filter((p) => p.type === PolicyType.MasterPassword);\n }\n\n if (policies == null || policies.length === 0) {\n return enforcedOptions;\n }\n\n policies.forEach((currentPolicy) => {\n if (!currentPolicy.enabled || currentPolicy.data == null) {\n return;\n }\n\n if (enforcedOptions == null) {\n enforcedOptions = new MasterPasswordPolicyOptions();\n }\n\n if (currentPolicy.data.minComplexity != null\n && currentPolicy.data.minComplexity > enforcedOptions.minComplexity) {\n enforcedOptions.minComplexity = currentPolicy.data.minComplexity;\n }\n\n if (currentPolicy.data.minLength != null\n && currentPolicy.data.minLength > enforcedOptions.minLength) {\n enforcedOptions.minLength = currentPolicy.data.minLength;\n }\n\n if (currentPolicy.data.requireUpper) {\n enforcedOptions.requireUpper = true;\n }\n\n if (currentPolicy.data.requireLower) {\n enforcedOptions.requireLower = true;\n }\n\n if (currentPolicy.data.requireNumbers) {\n enforcedOptions.requireNumbers = true;\n }\n\n if (currentPolicy.data.requireSpecial) {\n enforcedOptions.requireSpecial = true;\n }\n });\n\n return enforcedOptions;\n }\n\n evaluateMasterPassword(passwordStrength: number, newPassword: string,\n enforcedPolicyOptions: MasterPasswordPolicyOptions): boolean {\n if (enforcedPolicyOptions == null) {\n return true;\n }\n\n if (enforcedPolicyOptions.minComplexity > 0 && enforcedPolicyOptions.minComplexity > passwordStrength) {\n return false;\n }\n\n if (enforcedPolicyOptions.minLength > 0 && enforcedPolicyOptions.minLength > newPassword.length) {\n return false;\n }\n\n if (enforcedPolicyOptions.requireUpper && newPassword.toLocaleLowerCase() === newPassword) {\n return false;\n }\n\n if (enforcedPolicyOptions.requireLower && newPassword.toLocaleUpperCase() === newPassword) {\n return false;\n }\n\n if (enforcedPolicyOptions.requireNumbers && !(/[0-9]/.test(newPassword))) {\n return false;\n }\n\n if (enforcedPolicyOptions.requireSpecial && !(/[!@#$%\\^&*]/g.test(newPassword))) {\n return false;\n }\n\n return true;\n }\n}\n","import * as lunr from 'lunr';\n\nimport { CipherView } from '../models/view/cipherView';\n\nimport { CipherService } from '../abstractions/cipher.service';\nimport { PlatformUtilsService } from '../abstractions/platformUtils.service';\nimport { SearchService as SearchServiceAbstraction } from '../abstractions/search.service';\n\nimport { CipherType } from '../enums/cipherType';\nimport { DeviceType } from '../enums/deviceType';\nimport { FieldType } from '../enums/fieldType';\nimport { UriMatchType } from '../enums/uriMatchType';\n\nexport class SearchService implements SearchServiceAbstraction {\n private indexing = false;\n private index: lunr.Index = null;\n private onlySearchName = false;\n\n constructor(private cipherService: CipherService, platformUtilsService: PlatformUtilsService) {\n this.onlySearchName = platformUtilsService == null ||\n platformUtilsService.getDevice() === DeviceType.EdgeExtension;\n }\n\n clearIndex(): void {\n this.index = null;\n }\n\n isSearchable(query: string): boolean {\n const notSearchable = query == null || (this.index == null && query.length < 2) ||\n (this.index != null && query.length < 2 && query.indexOf('>') !== 0);\n return !notSearchable;\n }\n\n async indexCiphers(): Promise<void> {\n if (this.indexing) {\n return;\n }\n // tslint:disable-next-line\n console.time('search indexing');\n this.indexing = true;\n this.index = null;\n const builder = new lunr.Builder();\n builder.ref('id');\n builder.field('shortid', { boost: 100, extractor: (c: CipherView) => c.id.substr(0, 8) });\n builder.field('name', { boost: 10 });\n builder.field('subtitle', {\n boost: 5,\n extractor: (c: CipherView) => {\n if (c.subTitle != null && c.type === CipherType.Card) {\n return c.subTitle.replace(/\\*/g, '');\n }\n return c.subTitle;\n },\n });\n builder.field('notes');\n builder.field('login.username', {\n extractor: (c: CipherView) => c.type === CipherType.Login && c.login != null ? c.login.username : null,\n });\n builder.field('login.uris', { boost: 2, extractor: (c: CipherView) => this.uriExtractor(c) });\n builder.field('fields', { extractor: (c: CipherView) => this.fieldExtractor(c, false) });\n builder.field('fields_joined', { extractor: (c: CipherView) => this.fieldExtractor(c, true) });\n builder.field('attachments', { extractor: (c: CipherView) => this.attachmentExtractor(c, false) });\n builder.field('attachments_joined',\n { extractor: (c: CipherView) => this.attachmentExtractor(c, true) });\n builder.field('organizationid', { extractor: (c: CipherView) => c.organizationId });\n const ciphers = await this.cipherService.getAllDecrypted();\n ciphers.forEach((c) => builder.add(c));\n this.index = builder.build();\n this.indexing = false;\n // tslint:disable-next-line\n console.timeEnd('search indexing');\n }\n\n async searchCiphers(query: string,\n filter: (((cipher: CipherView) => boolean) | (Array<(cipher: CipherView) => boolean>)) = null,\n ciphers: CipherView[] = null):\n Promise<CipherView[]> {\n const results: CipherView[] = [];\n if (query != null) {\n query = query.trim().toLowerCase();\n }\n if (query === '') {\n query = null;\n }\n\n if (ciphers == null) {\n ciphers = await this.cipherService.getAllDecrypted();\n }\n\n if (filter != null && Array.isArray(filter) && filter.length > 0) {\n ciphers = ciphers.filter((c) => filter.every((f) => f == null || f(c)));\n } else if (filter != null) {\n ciphers = ciphers.filter(filter as (cipher: CipherView) => boolean);\n }\n\n if (!this.isSearchable(query)) {\n return ciphers;\n }\n\n if (this.indexing) {\n await new Promise((r) => setTimeout(r, 250));\n if (this.indexing) {\n await new Promise((r) => setTimeout(r, 500));\n }\n }\n\n const index = this.getIndexForSearch();\n if (index == null) {\n // Fall back to basic search if index is not available\n return this.searchCiphersBasic(ciphers, query);\n }\n\n const ciphersMap = new Map<string, CipherView>();\n ciphers.forEach((c) => ciphersMap.set(c.id, c));\n\n let searchResults: lunr.Index.Result[] = null;\n const isQueryString = query != null && query.length > 1 && query.indexOf('>') === 0;\n if (isQueryString) {\n try {\n searchResults = index.search(query.substr(1).trim());\n } catch { }\n } else {\n // tslint:disable-next-line\n const soWild = lunr.Query.wildcard.LEADING | lunr.Query.wildcard.TRAILING;\n searchResults = index.query((q) => {\n lunr.tokenizer(query).forEach((token) => {\n const t = token.toString();\n q.term(t, { fields: ['name'], wildcard: soWild });\n q.term(t, { fields: ['subtitle'], wildcard: soWild });\n q.term(t, { fields: ['login.uris'], wildcard: soWild });\n q.term(t, {});\n });\n });\n }\n\n if (searchResults != null) {\n searchResults.forEach((r) => {\n if (ciphersMap.has(r.ref)) {\n results.push(ciphersMap.get(r.ref));\n }\n });\n }\n return results;\n }\n\n searchCiphersBasic(ciphers: CipherView[], query: string, deleted: boolean = false) {\n query = query.trim().toLowerCase();\n return ciphers.filter((c) => {\n if (deleted !== c.isDeleted) {\n return false;\n }\n if (c.name != null && c.name.toLowerCase().indexOf(query) > -1) {\n return true;\n }\n if (this.onlySearchName) {\n return false;\n }\n if (query.length >= 8 && c.id.startsWith(query)) {\n return true;\n }\n if (c.subTitle != null && c.subTitle.toLowerCase().indexOf(query) > -1) {\n return true;\n }\n if (c.login && c.login.uri != null && c.login.uri.toLowerCase().indexOf(query) > -1) {\n return true;\n }\n return false;\n });\n }\n\n getIndexForSearch(): lunr.Index {\n return this.index;\n }\n\n private fieldExtractor(c: CipherView, joined: boolean) {\n if (!c.hasFields) {\n return null;\n }\n let fields: string[] = [];\n c.fields.forEach((f) => {\n if (f.name != null) {\n fields.push(f.name);\n }\n if (f.type === FieldType.Text && f.value != null) {\n fields.push(f.value);\n }\n });\n fields = fields.filter((f) => f.trim() !== '');\n if (fields.length === 0) {\n return null;\n }\n return joined ? fields.join(' ') : fields;\n }\n\n private attachmentExtractor(c: CipherView, joined: boolean) {\n if (!c.hasAttachments) {\n return null;\n }\n let attachments: string[] = [];\n c.attachments.forEach((a) => {\n if (a != null && a.fileName != null) {\n if (joined && a.fileName.indexOf('.') > -1) {\n attachments.push(a.fileName.substr(0, a.fileName.lastIndexOf('.')));\n } else {\n attachments.push(a.fileName);\n }\n }\n });\n attachments = attachments.filter((f) => f.trim() !== '');\n if (attachments.length === 0) {\n return null;\n }\n return joined ? attachments.join(' ') : attachments;\n }\n\n private uriExtractor(c: CipherView) {\n if (c.type !== CipherType.Login || c.login == null || !c.login.hasUris) {\n return null;\n }\n const uris: string[] = [];\n c.login.uris.forEach((u) => {\n if (u.uri == null || u.uri === '') {\n return;\n }\n if (u.hostname != null) {\n uris.push(u.hostname);\n return;\n }\n let uri = u.uri;\n if (u.match !== UriMatchType.RegularExpression) {\n const protocolIndex = uri.indexOf('://');\n if (protocolIndex > -1) {\n uri = uri.substr(protocolIndex + 3);\n }\n const queryIndex = uri.search(/\\?|&|#/);\n if (queryIndex > -1) {\n uri = uri.substring(0, queryIndex);\n }\n }\n uris.push(uri);\n });\n return uris.length > 0 ? uris : null;\n }\n}\n","import { SettingsService as SettingsServiceAbstraction } from '../abstractions/settings.service';\nimport { StorageService } from '../abstractions/storage.service';\nimport { UserService } from '../abstractions/user.service';\n\nconst Keys = {\n settingsPrefix: 'settings_',\n equivalentDomains: 'equivalentDomains',\n};\n\nexport class SettingsService implements SettingsServiceAbstraction {\n private settingsCache: any;\n\n constructor(private userService: UserService, private storageService: StorageService) {\n }\n\n clearCache(): void {\n this.settingsCache = null;\n }\n\n getEquivalentDomains(): Promise<any> {\n return this.getSettingsKey(Keys.equivalentDomains);\n }\n\n async setEquivalentDomains(equivalentDomains: string[][]): Promise<void> {\n await this.setSettingsKey(Keys.equivalentDomains, equivalentDomains);\n }\n\n async clear(userId: string): Promise<void> {\n await this.storageService.remove(Keys.settingsPrefix + userId);\n this.clearCache();\n }\n\n // Helpers\n\n private async getSettings(): Promise<any> {\n if (this.settingsCache == null) {\n const userId = await this.userService.getUserId();\n this.settingsCache = this.storageService.get(Keys.settingsPrefix + userId);\n }\n return this.settingsCache;\n }\n\n private async getSettingsKey(key: string): Promise<any> {\n const settings = await this.getSettings();\n if (settings != null && settings[key]) {\n return settings[key];\n }\n return null;\n }\n\n private async setSettingsKey(key: string, value: any): Promise<void> {\n const userId = await this.userService.getUserId();\n let settings = await this.getSettings();\n if (!settings) {\n settings = {};\n }\n\n settings[key] = value;\n await this.storageService.save(Keys.settingsPrefix + userId, settings);\n this.settingsCache = settings;\n }\n}\n","import { ProfileOrganizationResponse } from '../response/profileOrganizationResponse';\n\nimport { OrganizationUserStatusType } from '../../enums/organizationUserStatusType';\nimport { OrganizationUserType } from '../../enums/organizationUserType';\n\nexport class OrganizationData {\n id: string;\n name: string;\n status: OrganizationUserStatusType;\n type: OrganizationUserType;\n enabled: boolean;\n usePolicies: boolean;\n useGroups: boolean;\n useDirectory: boolean;\n useEvents: boolean;\n useTotp: boolean;\n use2fa: boolean;\n useApi: boolean;\n selfHost: boolean;\n usersGetPremium: boolean;\n seats: number;\n maxCollections: number;\n maxStorageGb?: number;\n\n constructor(response: ProfileOrganizationResponse) {\n this.id = response.id;\n this.name = response.name;\n this.status = response.status;\n this.type = response.type;\n this.enabled = response.enabled;\n this.usePolicies = response.usePolicies;\n this.useGroups = response.useGroups;\n this.useDirectory = response.useDirectory;\n this.useEvents = response.useEvents;\n this.useTotp = response.useTotp;\n this.use2fa = response.use2fa;\n this.useApi = response.useApi;\n this.selfHost = response.selfHost;\n this.usersGetPremium = response.usersGetPremium;\n this.seats = response.seats;\n this.maxCollections = response.maxCollections;\n this.maxStorageGb = response.maxStorageGb;\n }\n}\n","import { PolicyResponse } from '../response/policyResponse';\n\nimport { PolicyType } from '../../enums/policyType';\n\nexport class PolicyData {\n id: string;\n organizationId: string;\n type: PolicyType;\n data: any;\n enabled: boolean;\n\n constructor(response: PolicyResponse) {\n this.id = response.id;\n this.organizationId = response.organizationId;\n this.type = response.type;\n this.data = response.data;\n this.enabled = response.enabled;\n }\n}\n","import { ApiService } from '../abstractions/api.service';\nimport { CipherService } from '../abstractions/cipher.service';\nimport { CollectionService } from '../abstractions/collection.service';\nimport { CryptoService } from '../abstractions/crypto.service';\nimport { FolderService } from '../abstractions/folder.service';\nimport { MessagingService } from '../abstractions/messaging.service';\nimport { PolicyService } from '../abstractions/policy.service';\nimport { SettingsService } from '../abstractions/settings.service';\nimport { StorageService } from '../abstractions/storage.service';\nimport { SyncService as SyncServiceAbstraction } from '../abstractions/sync.service';\nimport { UserService } from '../abstractions/user.service';\n\nimport { CipherData } from '../models/data/cipherData';\nimport { CollectionData } from '../models/data/collectionData';\nimport { FolderData } from '../models/data/folderData';\nimport { OrganizationData } from '../models/data/organizationData';\nimport { PolicyData } from '../models/data/policyData';\n\nimport { CipherResponse } from '../models/response/cipherResponse';\nimport { CollectionDetailsResponse } from '../models/response/collectionResponse';\nimport { DomainsResponse } from '../models/response/domainsResponse';\nimport { FolderResponse } from '../models/response/folderResponse';\nimport {\n SyncCipherNotification,\n SyncFolderNotification,\n} from '../models/response/notificationResponse';\nimport { PolicyResponse } from '../models/response/policyResponse';\nimport { ProfileResponse } from '../models/response/profileResponse';\n\nconst Keys = {\n lastSyncPrefix: 'lastSync_',\n};\n\nexport class SyncService implements SyncServiceAbstraction {\n syncInProgress: boolean = false;\n\n constructor(private userService: UserService, private apiService: ApiService,\n private settingsService: SettingsService, private folderService: FolderService,\n private cipherService: CipherService, private cryptoService: CryptoService,\n private collectionService: CollectionService, private storageService: StorageService,\n private messagingService: MessagingService, private policyService: PolicyService,\n private logoutCallback: (expired: boolean) => Promise<void>) {\n }\n\n async getLastSync(): Promise<Date> {\n const userId = await this.userService.getUserId();\n if (userId == null) {\n return null;\n }\n\n const lastSync = await this.storageService.get<any>(Keys.lastSyncPrefix + userId);\n if (lastSync) {\n return new Date(lastSync);\n }\n\n return null;\n }\n\n async setLastSync(date: Date): Promise<any> {\n const userId = await this.userService.getUserId();\n if (userId == null) {\n return;\n }\n\n await this.storageService.save(Keys.lastSyncPrefix + userId, date.toJSON());\n }\n\n async fullSync(forceSync: boolean, allowThrowOnError = false): Promise<boolean> {\n this.syncStarted();\n const isAuthenticated = await this.userService.isAuthenticated();\n if (!isAuthenticated) {\n return this.syncCompleted(false);\n }\n\n const now = new Date();\n const needsSyncResult = await this.needsSyncing(forceSync);\n const needsSync = needsSyncResult[0];\n const skipped = needsSyncResult[1];\n\n if (skipped) {\n return this.syncCompleted(false);\n }\n\n if (!needsSync) {\n await this.setLastSync(now);\n return this.syncCompleted(false);\n }\n\n const userId = await this.userService.getUserId();\n try {\n const response = await this.apiService.getSync();\n\n await this.syncProfile(response.profile);\n await this.syncFolders(userId, response.folders);\n await this.syncCollections(response.collections);\n await this.syncCiphers(userId, response.ciphers);\n await this.syncSettings(userId, response.domains);\n await this.syncPolicies(response.policies);\n\n await this.setLastSync(now);\n return this.syncCompleted(true);\n } catch (e) {\n if (allowThrowOnError) {\n throw e;\n } else {\n return this.syncCompleted(false);\n }\n }\n }\n\n async syncUpsertFolder(notification: SyncFolderNotification, isEdit: boolean): Promise<boolean> {\n this.syncStarted();\n if (await this.userService.isAuthenticated()) {\n try {\n const localFolder = await this.folderService.get(notification.id);\n if ((!isEdit && localFolder == null) ||\n (isEdit && localFolder != null && localFolder.revisionDate < notification.revisionDate)) {\n const remoteFolder = await this.apiService.getFolder(notification.id);\n if (remoteFolder != null) {\n const userId = await this.userService.getUserId();\n await this.folderService.upsert(new FolderData(remoteFolder, userId));\n this.messagingService.send('syncedUpsertedFolder', { folderId: notification.id });\n return this.syncCompleted(true);\n }\n }\n } catch { }\n }\n return this.syncCompleted(false);\n }\n\n async syncDeleteFolder(notification: SyncFolderNotification): Promise<boolean> {\n this.syncStarted();\n if (await this.userService.isAuthenticated()) {\n await this.folderService.delete(notification.id);\n this.messagingService.send('syncedDeletedFolder', { folderId: notification.id });\n this.syncCompleted(true);\n return true;\n }\n return this.syncCompleted(false);\n }\n\n async syncUpsertCipher(notification: SyncCipherNotification, isEdit: boolean): Promise<boolean> {\n this.syncStarted();\n if (await this.userService.isAuthenticated()) {\n try {\n let shouldUpdate = true;\n const localCipher = await this.cipherService.get(notification.id);\n if (localCipher != null && localCipher.revisionDate >= notification.revisionDate) {\n shouldUpdate = false;\n }\n\n let checkCollections = false;\n if (shouldUpdate) {\n if (isEdit) {\n shouldUpdate = localCipher != null;\n checkCollections = true;\n } else {\n if (notification.collectionIds == null || notification.organizationId == null) {\n shouldUpdate = localCipher == null;\n } else {\n shouldUpdate = false;\n checkCollections = true;\n }\n }\n }\n\n if (!shouldUpdate && checkCollections && notification.organizationId != null &&\n notification.collectionIds != null && notification.collectionIds.length > 0) {\n const collections = await this.collectionService.getAll();\n if (collections != null) {\n for (let i = 0; i < collections.length; i++) {\n if (notification.collectionIds.indexOf(collections[i].id) > -1) {\n shouldUpdate = true;\n break;\n }\n }\n }\n }\n\n if (shouldUpdate) {\n const remoteCipher = await this.apiService.getCipher(notification.id);\n if (remoteCipher != null) {\n const userId = await this.userService.getUserId();\n await this.cipherService.upsert(new CipherData(remoteCipher, userId));\n this.messagingService.send('syncedUpsertedCipher', { cipherId: notification.id });\n return this.syncCompleted(true);\n }\n }\n } catch (e) {\n if (e != null && e.statusCode === 404 && isEdit) {\n await this.cipherService.delete(notification.id);\n this.messagingService.send('syncedDeletedCipher', { cipherId: notification.id });\n return this.syncCompleted(true);\n }\n }\n }\n return this.syncCompleted(false);\n }\n\n async syncDeleteCipher(notification: SyncCipherNotification): Promise<boolean> {\n this.syncStarted();\n if (await this.userService.isAuthenticated()) {\n await this.cipherService.delete(notification.id);\n this.messagingService.send('syncedDeletedCipher', { cipherId: notification.id });\n return this.syncCompleted(true);\n }\n return this.syncCompleted(false);\n }\n\n // Helpers\n\n private syncStarted() {\n this.syncInProgress = true;\n this.messagingService.send('syncStarted');\n }\n\n private syncCompleted(successfully: boolean): boolean {\n this.syncInProgress = false;\n this.messagingService.send('syncCompleted', { successfully: successfully });\n return successfully;\n }\n\n private async needsSyncing(forceSync: boolean) {\n if (forceSync) {\n return [true, false];\n }\n\n const lastSync = await this.getLastSync();\n if (lastSync == null || lastSync.getTime() === 0) {\n return [true, false];\n }\n\n try {\n const response = await this.apiService.getAccountRevisionDate();\n if (new Date(response) <= lastSync) {\n return [false, false];\n }\n return [true, false];\n } catch (e) {\n return [false, true];\n }\n }\n\n private async syncProfile(response: ProfileResponse) {\n const stamp = await this.userService.getSecurityStamp();\n if (stamp != null && stamp !== response.securityStamp) {\n if (this.logoutCallback != null) {\n await this.logoutCallback(true);\n }\n\n throw new Error('Stamp has changed');\n }\n\n await this.cryptoService.setEncKey(response.key);\n await this.cryptoService.setEncPrivateKey(response.privateKey);\n await this.cryptoService.setOrgKeys(response.organizations);\n await this.userService.setSecurityStamp(response.securityStamp);\n\n const organizations: { [id: string]: OrganizationData; } = {};\n response.organizations.forEach((o) => {\n organizations[o.id] = new OrganizationData(o);\n });\n return await this.userService.replaceOrganizations(organizations);\n }\n\n private async syncFolders(userId: string, response: FolderResponse[]) {\n const folders: { [id: string]: FolderData; } = {};\n response.forEach((f) => {\n folders[f.id] = new FolderData(f, userId);\n });\n return await this.folderService.replace(folders);\n }\n\n private async syncCollections(response: CollectionDetailsResponse[]) {\n const collections: { [id: string]: CollectionData; } = {};\n response.forEach((c) => {\n collections[c.id] = new CollectionData(c);\n });\n return await this.collectionService.replace(collections);\n }\n\n private async syncCiphers(userId: string, response: CipherResponse[]) {\n const ciphers: { [id: string]: CipherData; } = {};\n response.forEach((c) => {\n ciphers[c.id] = new CipherData(c, userId);\n });\n return await this.cipherService.replace(ciphers);\n }\n\n private async syncSettings(userId: string, response: DomainsResponse) {\n let eqDomains: string[][] = [];\n if (response != null && response.equivalentDomains != null) {\n eqDomains = eqDomains.concat(response.equivalentDomains);\n }\n\n if (response != null && response.globalEquivalentDomains != null) {\n response.globalEquivalentDomains.forEach((global) => {\n if (global.domains.length > 0) {\n eqDomains.push(global.domains);\n }\n });\n }\n\n return this.settingsService.setEquivalentDomains(eqDomains);\n }\n\n private async syncPolicies(response: PolicyResponse[]) {\n const policies: { [id: string]: PolicyData; } = {};\n if (response != null) {\n response.forEach((p) => {\n policies[p.id] = new PolicyData(p);\n });\n }\n return await this.policyService.replace(policies);\n }\n}\n","import { ConstantsService } from './constants.service';\n\nimport { StorageService } from '../abstractions/storage.service';\nimport { TokenService as TokenServiceAbstraction } from '../abstractions/token.service';\n\nimport { Utils } from '../misc/utils';\n\nconst Keys = {\n accessToken: 'accessToken',\n refreshToken: 'refreshToken',\n twoFactorTokenPrefix: 'twoFactorToken_',\n};\n\nexport class TokenService implements TokenServiceAbstraction {\n token: string;\n decodedToken: any;\n refreshToken: string;\n\n constructor(private storageService: StorageService) {\n }\n\n setTokens(accessToken: string, refreshToken: string): Promise<any> {\n return Promise.all([\n this.setToken(accessToken),\n this.setRefreshToken(refreshToken),\n ]);\n }\n\n async setToken(token: string): Promise<any> {\n this.token = token;\n this.decodedToken = null;\n\n if (await this.skipTokenStorage()) {\n // if we have a vault timeout and the action is log out, don't store token\n return;\n }\n\n return this.storageService.save(Keys.accessToken, token);\n }\n\n async getToken(): Promise<string> {\n if (this.token != null) {\n return this.token;\n }\n\n this.token = await this.storageService.get<string>(Keys.accessToken);\n return this.token;\n }\n\n async setRefreshToken(refreshToken: string): Promise<any> {\n this.refreshToken = refreshToken;\n\n if (await this.skipTokenStorage()) {\n // if we have a vault timeout and the action is log out, don't store token\n return;\n }\n\n return this.storageService.save(Keys.refreshToken, refreshToken);\n }\n\n async getRefreshToken(): Promise<string> {\n if (this.refreshToken != null) {\n return this.refreshToken;\n }\n\n this.refreshToken = await this.storageService.get<string>(Keys.refreshToken);\n return this.refreshToken;\n }\n\n async toggleTokens(): Promise<any> {\n const token = await this.getToken();\n const refreshToken = await this.getRefreshToken();\n const timeout = await this.storageService.get(ConstantsService.vaultTimeoutKey);\n const action = await this.storageService.get(ConstantsService.vaultTimeoutActionKey);\n if ((timeout != null || timeout === 0) && action === 'logOut') {\n // if we have a vault timeout and the action is log out, reset tokens\n await this.clearToken();\n this.token = token;\n this.refreshToken = refreshToken;\n return;\n }\n\n await this.setToken(token);\n await this.setRefreshToken(refreshToken);\n }\n\n setTwoFactorToken(token: string, email: string): Promise<any> {\n return this.storageService.save(Keys.twoFactorTokenPrefix + email, token);\n }\n\n getTwoFactorToken(email: string): Promise<string> {\n return this.storageService.get<string>(Keys.twoFactorTokenPrefix + email);\n }\n\n clearTwoFactorToken(email: string): Promise<any> {\n return this.storageService.remove(Keys.twoFactorTokenPrefix + email);\n }\n\n clearToken(): Promise<any> {\n this.token = null;\n this.decodedToken = null;\n this.refreshToken = null;\n\n return Promise.all([\n this.storageService.remove(Keys.accessToken),\n this.storageService.remove(Keys.refreshToken),\n ]);\n }\n\n // jwthelper methods\n // ref https://github.com/auth0/angular-jwt/blob/master/src/angularJwt/services/jwt.js\n\n decodeToken(): any {\n if (this.decodedToken) {\n return this.decodedToken;\n }\n\n if (this.token == null) {\n throw new Error('Token not found.');\n }\n\n const parts = this.token.split('.');\n if (parts.length !== 3) {\n throw new Error('JWT must have 3 parts');\n }\n\n const decoded = Utils.fromUrlB64ToUtf8(parts[1]);\n if (decoded == null) {\n throw new Error('Cannot decode the token');\n }\n\n this.decodedToken = JSON.parse(decoded);\n return this.decodedToken;\n }\n\n getTokenExpirationDate(): Date {\n const decoded = this.decodeToken();\n if (typeof decoded.exp === 'undefined') {\n return null;\n }\n\n const d = new Date(0); // The 0 here is the key, which sets the date to the epoch\n d.setUTCSeconds(decoded.exp);\n return d;\n }\n\n tokenSecondsRemaining(offsetSeconds: number = 0): number {\n const d = this.getTokenExpirationDate();\n if (d == null) {\n return 0;\n }\n\n const msRemaining = d.valueOf() - (new Date().valueOf() + (offsetSeconds * 1000));\n return Math.round(msRemaining / 1000);\n }\n\n tokenNeedsRefresh(minutes: number = 5): boolean {\n const sRemaining = this.tokenSecondsRemaining();\n return sRemaining < (60 * minutes);\n }\n\n getUserId(): string {\n const decoded = this.decodeToken();\n if (typeof decoded.sub === 'undefined') {\n throw new Error('No user id found');\n }\n\n return decoded.sub as string;\n }\n\n getEmail(): string {\n const decoded = this.decodeToken();\n if (typeof decoded.email === 'undefined') {\n throw new Error('No email found');\n }\n\n return decoded.email as string;\n }\n\n getEmailVerified(): boolean {\n const decoded = this.decodeToken();\n if (typeof decoded.email_verified === 'undefined') {\n throw new Error('No email verification found');\n }\n\n return decoded.email_verified as boolean;\n }\n\n getName(): string {\n const decoded = this.decodeToken();\n if (typeof decoded.name === 'undefined') {\n return null;\n }\n\n return decoded.name as string;\n }\n\n getPremium(): boolean {\n const decoded = this.decodeToken();\n if (typeof decoded.premium === 'undefined') {\n return false;\n }\n\n return decoded.premium as boolean;\n }\n\n getIssuer(): string {\n const decoded = this.decodeToken();\n if (typeof decoded.iss === 'undefined') {\n throw new Error('No issuer found');\n }\n\n return decoded.iss as string;\n }\n\n private async skipTokenStorage(): Promise<boolean> {\n const timeout = await this.storageService.get<number>(ConstantsService.vaultTimeoutKey);\n const action = await this.storageService.get<string>(ConstantsService.vaultTimeoutActionKey);\n return timeout != null && action === 'logOut';\n }\n}\n","import { ConstantsService } from './constants.service';\n\nimport { CryptoFunctionService } from '../abstractions/cryptoFunction.service';\nimport { StorageService } from '../abstractions/storage.service';\nimport { TotpService as TotpServiceAbstraction } from '../abstractions/totp.service';\n\nimport { Utils } from '../misc/utils';\n\nconst B32Chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567';\nconst SteamChars = '23456789BCDFGHJKMNPQRTVWXY';\n\nexport class TotpService implements TotpServiceAbstraction {\n constructor(private storageService: StorageService, private cryptoFunctionService: CryptoFunctionService) { }\n\n async getCode(key: string): Promise<string> {\n if (key == null) {\n return null;\n }\n let period = 30;\n let alg: 'sha1' | 'sha256' | 'sha512' = 'sha1';\n let digits = 6;\n let keyB32 = key;\n const isOtpAuth = key.toLowerCase().indexOf('otpauth://') === 0;\n const isSteamAuth = !isOtpAuth && key.toLowerCase().indexOf('steam://') === 0;\n if (isOtpAuth) {\n const params = Utils.getQueryParams(key);\n if (params.has('digits') && params.get('digits') != null) {\n try {\n const digitParams = parseInt(params.get('digits').trim(), null);\n if (digitParams > 10) {\n digits = 10;\n } else if (digitParams > 0) {\n digits = digitParams;\n }\n } catch { }\n }\n if (params.has('period') && params.get('period') != null) {\n try {\n const periodParam = parseInt(params.get('period').trim(), null);\n if (periodParam > 0) {\n period = periodParam;\n }\n } catch { }\n }\n if (params.has('secret') && params.get('secret') != null) {\n keyB32 = params.get('secret');\n }\n if (params.has('algorithm') && params.get('algorithm') != null) {\n const algParam = params.get('algorithm').toLowerCase();\n if (algParam === 'sha1' || algParam === 'sha256' || algParam === 'sha512') {\n alg = algParam;\n }\n }\n } else if (isSteamAuth) {\n keyB32 = key.substr('steam://'.length);\n digits = 5;\n }\n\n const epoch = Math.round(new Date().getTime() / 1000.0);\n const timeHex = this.leftPad(this.decToHex(Math.floor(epoch / period)), 16, '0');\n const timeBytes = Utils.fromHexToArray(timeHex);\n const keyBytes = this.b32ToBytes(keyB32);\n\n if (!keyBytes.length || !timeBytes.length) {\n return null;\n }\n\n const hash = await this.sign(keyBytes, timeBytes, alg);\n if (hash.length === 0) {\n return null;\n }\n\n /* tslint:disable */\n const offset = (hash[hash.length - 1] & 0xf);\n const binary = ((hash[offset] & 0x7f) << 24) | ((hash[offset + 1] & 0xff) << 16) |\n ((hash[offset + 2] & 0xff) << 8) | (hash[offset + 3] & 0xff);\n /* tslint:enable */\n\n let otp = '';\n if (isSteamAuth) {\n // tslint:disable-next-line\n let fullCode = binary & 0x7fffffff;\n for (let i = 0; i < digits; i++) {\n otp += SteamChars[fullCode % SteamChars.length];\n fullCode = Math.trunc(fullCode / SteamChars.length);\n }\n } else {\n otp = (binary % Math.pow(10, digits)).toString();\n otp = this.leftPad(otp, digits, '0');\n }\n\n return otp;\n }\n\n getTimeInterval(key: string): number {\n let period = 30;\n if (key != null && key.toLowerCase().indexOf('otpauth://') === 0) {\n const params = Utils.getQueryParams(key);\n if (params.has('period') && params.get('period') != null) {\n try {\n period = parseInt(params.get('period').trim(), null);\n } catch { }\n }\n }\n return period;\n }\n\n async isAutoCopyEnabled(): Promise<boolean> {\n return !(await this.storageService.get<boolean>(ConstantsService.disableAutoTotpCopyKey));\n }\n\n // Helpers\n\n private leftPad(s: string, l: number, p: string): string {\n if (l + 1 >= s.length) {\n s = Array(l + 1 - s.length).join(p) + s;\n }\n return s;\n }\n\n private decToHex(d: number): string {\n return (d < 15.5 ? '0' : '') + Math.round(d).toString(16);\n }\n\n private b32ToHex(s: string): string {\n s = s.toUpperCase();\n let cleanedInput = '';\n\n for (let i = 0; i < s.length; i++) {\n if (B32Chars.indexOf(s[i]) < 0) {\n continue;\n }\n\n cleanedInput += s[i];\n }\n s = cleanedInput;\n\n let bits = '';\n let hex = '';\n for (let i = 0; i < s.length; i++) {\n const byteIndex = B32Chars.indexOf(s.charAt(i));\n if (byteIndex < 0) {\n continue;\n }\n bits += this.leftPad(byteIndex.toString(2), 5, '0');\n }\n for (let i = 0; i + 4 <= bits.length; i += 4) {\n const chunk = bits.substr(i, 4);\n hex = hex + parseInt(chunk, 2).toString(16);\n }\n return hex;\n }\n\n private b32ToBytes(s: string): Uint8Array {\n return Utils.fromHexToArray(this.b32ToHex(s));\n }\n\n private async sign(keyBytes: Uint8Array, timeBytes: Uint8Array, alg: 'sha1' | 'sha256' | 'sha512') {\n const signature = await this.cryptoFunctionService.hmac(timeBytes.buffer, keyBytes.buffer, alg);\n return new Uint8Array(signature);\n }\n}\n","export enum OrganizationUserStatusType {\n Invited = 0,\n Accepted = 1,\n Confirmed = 2,\n}\n","export enum OrganizationUserType {\n Owner = 0,\n Admin = 1,\n User = 2,\n Manager = 3,\n}\n","import { OrganizationData } from '../data/organizationData';\n\nimport { OrganizationUserStatusType } from '../../enums/organizationUserStatusType';\nimport { OrganizationUserType } from '../../enums/organizationUserType';\n\nexport class Organization {\n id: string;\n name: string;\n status: OrganizationUserStatusType;\n type: OrganizationUserType;\n enabled: boolean;\n usePolicies: boolean;\n useGroups: boolean;\n useDirectory: boolean;\n useEvents: boolean;\n useTotp: boolean;\n use2fa: boolean;\n useApi: boolean;\n selfHost: boolean;\n usersGetPremium: boolean;\n seats: number;\n maxCollections: number;\n maxStorageGb?: number;\n\n constructor(obj?: OrganizationData) {\n if (obj == null) {\n return;\n }\n\n this.id = obj.id;\n this.name = obj.name;\n this.status = obj.status;\n this.type = obj.type;\n this.enabled = obj.enabled;\n this.usePolicies = obj.usePolicies;\n this.useGroups = obj.useGroups;\n this.useDirectory = obj.useDirectory;\n this.useEvents = obj.useEvents;\n this.useTotp = obj.useTotp;\n this.use2fa = obj.use2fa;\n this.useApi = obj.useApi;\n this.selfHost = obj.selfHost;\n this.usersGetPremium = obj.usersGetPremium;\n this.seats = obj.seats;\n this.maxCollections = obj.maxCollections;\n this.maxStorageGb = obj.maxStorageGb;\n }\n\n get canAccess() {\n if (this.type === OrganizationUserType.Owner) {\n return true;\n }\n return this.enabled && this.status === OrganizationUserStatusType.Confirmed;\n }\n\n get isManager() {\n return this.type === OrganizationUserType.Manager || this.type === OrganizationUserType.Owner ||\n this.type === OrganizationUserType.Admin;\n }\n\n get isAdmin() {\n return this.type === OrganizationUserType.Owner || this.type === OrganizationUserType.Admin;\n }\n\n get isOwner() {\n return this.type === OrganizationUserType.Owner;\n }\n}\n","import { StorageService } from '../abstractions/storage.service';\nimport { TokenService } from '../abstractions/token.service';\nimport { UserService as UserServiceAbstraction } from '../abstractions/user.service';\n\nimport { OrganizationData } from '../models/data/organizationData';\nimport { Organization } from '../models/domain/organization';\n\nimport { KdfType } from '../enums/kdfType';\n\nconst Keys = {\n userId: 'userId',\n userEmail: 'userEmail',\n stamp: 'securityStamp',\n kdf: 'kdf',\n kdfIterations: 'kdfIterations',\n organizationsPrefix: 'organizations_',\n};\n\nexport class UserService implements UserServiceAbstraction {\n private userId: string;\n private email: string;\n private stamp: string;\n private kdf: KdfType;\n private kdfIterations: number;\n\n constructor(private tokenService: TokenService, private storageService: StorageService) { }\n\n setInformation(userId: string, email: string, kdf: KdfType, kdfIterations: number): Promise<any> {\n this.email = email;\n this.userId = userId;\n this.kdf = kdf;\n this.kdfIterations = kdfIterations;\n\n return Promise.all([\n this.storageService.save(Keys.userEmail, email),\n this.storageService.save(Keys.userId, userId),\n this.storageService.save(Keys.kdf, kdf),\n this.storageService.save(Keys.kdfIterations, kdfIterations),\n ]);\n }\n\n setSecurityStamp(stamp: string): Promise<any> {\n this.stamp = stamp;\n return this.storageService.save(Keys.stamp, stamp);\n }\n\n async getUserId(): Promise<string> {\n if (this.userId == null) {\n this.userId = await this.storageService.get<string>(Keys.userId);\n }\n return this.userId;\n }\n\n async getEmail(): Promise<string> {\n if (this.email == null) {\n this.email = await this.storageService.get<string>(Keys.userEmail);\n }\n return this.email;\n }\n\n async getSecurityStamp(): Promise<string> {\n if (this.stamp == null) {\n this.stamp = await this.storageService.get<string>(Keys.stamp);\n }\n return this.stamp;\n }\n\n async getKdf(): Promise<KdfType> {\n if (this.kdf == null) {\n this.kdf = await this.storageService.get<KdfType>(Keys.kdf);\n }\n return this.kdf;\n }\n\n async getKdfIterations(): Promise<number> {\n if (this.kdfIterations == null) {\n this.kdfIterations = await this.storageService.get<number>(Keys.kdfIterations);\n }\n return this.kdfIterations;\n }\n\n async clear(): Promise<any> {\n const userId = await this.getUserId();\n\n await Promise.all([\n this.storageService.remove(Keys.userId),\n this.storageService.remove(Keys.userEmail),\n this.storageService.remove(Keys.stamp),\n this.storageService.remove(Keys.kdf),\n this.storageService.remove(Keys.kdfIterations),\n this.clearOrganizations(userId),\n ]);\n\n this.userId = this.email = this.stamp = null;\n this.kdf = null;\n this.kdfIterations = null;\n }\n\n async isAuthenticated(): Promise<boolean> {\n const token = await this.tokenService.getToken();\n if (token == null) {\n return false;\n }\n\n const userId = await this.getUserId();\n return userId != null;\n }\n\n async canAccessPremium(): Promise<boolean> {\n const tokenPremium = this.tokenService.getPremium();\n if (tokenPremium) {\n return true;\n }\n\n const orgs = await this.getAllOrganizations();\n for (let i = 0; i < orgs.length; i++) {\n if (orgs[i].usersGetPremium && orgs[i].enabled) {\n return true;\n }\n }\n return false;\n }\n\n async getOrganization(id: string): Promise<Organization> {\n const userId = await this.getUserId();\n const organizations = await this.storageService.get<{ [id: string]: OrganizationData; }>(\n Keys.organizationsPrefix + userId);\n if (organizations == null || !organizations.hasOwnProperty(id)) {\n return null;\n }\n\n return new Organization(organizations[id]);\n }\n\n async getAllOrganizations(): Promise<Organization[]> {\n const userId = await this.getUserId();\n const organizations = await this.storageService.get<{ [id: string]: OrganizationData; }>(\n Keys.organizationsPrefix + userId);\n const response: Organization[] = [];\n for (const id in organizations) {\n if (organizations.hasOwnProperty(id)) {\n response.push(new Organization(organizations[id]));\n }\n }\n return response;\n }\n\n async replaceOrganizations(organizations: { [id: string]: OrganizationData; }): Promise<any> {\n const userId = await this.getUserId();\n await this.storageService.save(Keys.organizationsPrefix + userId, organizations);\n }\n\n async clearOrganizations(userId: string): Promise<any> {\n await this.storageService.remove(Keys.organizationsPrefix + userId);\n }\n}\n","import { ConstantsService } from './constants.service';\n\nimport { CipherService } from '../abstractions/cipher.service';\nimport { CollectionService } from '../abstractions/collection.service';\nimport { CryptoService } from '../abstractions/crypto.service';\nimport { FolderService } from '../abstractions/folder.service';\nimport { MessagingService } from '../abstractions/messaging.service';\nimport { PlatformUtilsService } from '../abstractions/platformUtils.service';\nimport { SearchService } from '../abstractions/search.service';\nimport { StorageService } from '../abstractions/storage.service';\nimport { TokenService } from '../abstractions/token.service';\nimport { UserService } from '../abstractions/user.service';\nimport { VaultTimeoutService as VaultTimeoutServiceAbstraction } from '../abstractions/vaultTimeout.service';\n\nimport { CipherString } from '../models/domain/cipherString';\n\nexport class VaultTimeoutService implements VaultTimeoutServiceAbstraction {\n pinProtectedKey: CipherString = null;\n\n private inited = false;\n\n constructor(private cipherService: CipherService, private folderService: FolderService,\n private collectionService: CollectionService, private cryptoService: CryptoService,\n private platformUtilsService: PlatformUtilsService, private storageService: StorageService,\n private messagingService: MessagingService, private searchService: SearchService,\n private userService: UserService, private tokenService: TokenService,\n private lockedCallback: () => Promise<void> = null, private loggedOutCallback: () => Promise<void> = null) {\n }\n\n init(checkOnInterval: boolean) {\n if (this.inited) {\n return;\n }\n\n this.inited = true;\n if (checkOnInterval) {\n this.checkVaultTimeout();\n setInterval(() => this.checkVaultTimeout(), 10 * 1000); // check every 10 seconds\n }\n }\n\n // Keys aren't stored for a device that is locked or logged out.\n async isLocked(): Promise<boolean> {\n const hasKey = await this.cryptoService.hasKey();\n return !hasKey;\n }\n\n async checkVaultTimeout(): Promise<void> {\n if (await this.platformUtilsService.isViewOpen()) {\n // Do not lock\n return;\n }\n\n // \"is logged out check\" - similar to isLocked, below\n const authed = await this.userService.isAuthenticated();\n if (!authed) {\n return;\n }\n\n if (await this.isLocked()) {\n return;\n }\n\n // This has the potential to be removed. Evaluate after all platforms complete with auto-logout\n let vaultTimeout = this.platformUtilsService.lockTimeout();\n if (vaultTimeout == null) {\n vaultTimeout = await this.storageService.get<number>(ConstantsService.vaultTimeoutKey);\n }\n\n if (vaultTimeout == null || vaultTimeout < 0) {\n return;\n }\n\n const lastActive = await this.storageService.get<number>(ConstantsService.lastActiveKey);\n if (lastActive == null) {\n return;\n }\n\n const vaultTimeoutSeconds = vaultTimeout * 60;\n const diffSeconds = ((new Date()).getTime() - lastActive) / 1000;\n if (diffSeconds >= vaultTimeoutSeconds) {\n // Pivot based on the saved vault timeout action\n const timeoutAction = await this.storageService.get<string>(ConstantsService.vaultTimeoutActionKey);\n timeoutAction === 'logOut' ? await this.logOut() : await this.lock(true);\n }\n }\n\n async lock(allowSoftLock = false): Promise<void> {\n const authed = await this.userService.isAuthenticated();\n if (!authed) {\n return;\n }\n\n await Promise.all([\n this.cryptoService.clearKey(),\n this.cryptoService.clearOrgKeys(true),\n this.cryptoService.clearKeyPair(true),\n this.cryptoService.clearEncKey(true),\n ]);\n\n this.folderService.clearCache();\n this.cipherService.clearCache();\n this.collectionService.clearCache();\n this.searchService.clearIndex();\n this.messagingService.send('locked');\n if (this.lockedCallback != null) {\n await this.lockedCallback();\n }\n }\n\n async logOut(): Promise<void> {\n if (this.loggedOutCallback != null) {\n await this.loggedOutCallback();\n }\n }\n\n async setVaultTimeoutOptions(timeout: number, action: string): Promise<void> {\n await this.storageService.save(ConstantsService.vaultTimeoutKey, timeout);\n await this.storageService.save(ConstantsService.vaultTimeoutActionKey, action);\n await this.cryptoService.toggleKey();\n await this.tokenService.toggleTokens();\n }\n\n async isPinLockSet(): Promise<[boolean, boolean]> {\n const protectedPin = await this.storageService.get<string>(ConstantsService.protectedPin);\n const pinProtectedKey = await this.storageService.get<string>(ConstantsService.pinProtectedKey);\n return [protectedPin != null, pinProtectedKey != null];\n }\n\n clear(): Promise<any> {\n this.pinProtectedKey = null;\n return this.storageService.remove(ConstantsService.protectedPin);\n }\n}\n","import { BaseResponse } from './response/baseResponse';\n\nexport class Response {\n static error(error: any, data?: any): Response {\n const res = new Response();\n res.success = false;\n if (typeof (error) === 'string') {\n res.message = error;\n } else {\n res.message = error.message != null ? error.message : error.toString();\n }\n res.data = data;\n return res;\n }\n\n static notFound(): Response {\n return Response.error('Not found.');\n }\n\n static badRequest(message: string): Response {\n return Response.error(message);\n }\n\n static multipleResults(ids: string[]): Response {\n let msg = 'More than one result was found. Try getting a specific object by `id` instead. ' +\n 'The following objects were found:';\n ids.forEach((id) => {\n msg += '\\n' + id;\n });\n return Response.error(msg, ids);\n }\n\n static success(data?: BaseResponse): Response {\n const res = new Response();\n res.success = true;\n res.data = data;\n return res;\n }\n\n success: boolean;\n message: string;\n errorCode: number;\n data: BaseResponse;\n}\n","import { BaseResponse } from './baseResponse';\n\nexport class MessageResponse implements BaseResponse {\n object: string;\n title: string;\n message: string;\n raw: string;\n noColor = false;\n\n constructor(title: string, message: string) {\n this.object = 'message';\n this.title = title;\n this.message = message;\n }\n}\n","import { BaseResponse } from './baseResponse';\n\nexport class StringResponse implements BaseResponse {\n object: string;\n data: string;\n\n constructor(data: string) {\n this.object = 'string';\n this.data = data;\n }\n}\n","import * as program from 'commander';\n\nimport { EnvironmentService } from 'jslib/abstractions/environment.service';\n\nimport { Response } from 'jslib/cli/models/response';\nimport { MessageResponse } from 'jslib/cli/models/response/messageResponse';\nimport { StringResponse } from 'jslib/cli/models/response/stringResponse';\n\nexport class ConfigCommand {\n constructor(private environmentService: EnvironmentService) { }\n\n async run(setting: string, value: string, cmd: program.Command): Promise<Response> {\n setting = setting.toLowerCase();\n switch (setting) {\n case 'server':\n return await this.getOrSetServer(value, cmd);\n default:\n return Response.badRequest('Unknown setting.');\n }\n\n }\n\n private async getOrSetServer(url: string, cmd: program.Command): Promise<Response> {\n if ((url == null || url.trim() === '') &&\n !cmd.webVault && !cmd.api && !cmd.identity && !cmd.icons && !cmd.notifications && !cmd.events) {\n const baseUrl = this.environmentService.baseUrl;\n const stringRes = new StringResponse(baseUrl == null ? 'https://bitwarden.com' : baseUrl);\n return Response.success(stringRes);\n }\n\n url = (url === 'null' || url === 'bitwarden.com' || url === 'https://bitwarden.com' ? null : url);\n await this.environmentService.setUrls({\n base: url,\n webVault: cmd.webVault || null,\n api: cmd.api || null,\n identity: cmd.identity || null,\n icons: cmd.icons || null,\n notifications: cmd.notifications || null,\n events: cmd.events || null,\n });\n const res = new MessageResponse('Saved setting `config`.', null);\n return Response.success(res);\n }\n}\n","export class OrganizationUserConfirmRequest {\n key: string;\n}\n","import * as program from 'commander';\n\nimport { ApiService } from 'jslib/abstractions/api.service';\nimport { CryptoService } from 'jslib/abstractions/crypto.service';\n\nimport { OrganizationUserConfirmRequest } from 'jslib/models/request/organizationUserConfirmRequest';\n\nimport { Response } from 'jslib/cli/models/response';\n\nimport { Utils } from 'jslib/misc/utils';\n\nexport class ConfirmCommand {\n constructor(private apiService: ApiService, private cryptoService: CryptoService) { }\n\n async run(object: string, id: string, cmd: program.Command): Promise<Response> {\n if (id != null) {\n id = id.toLowerCase();\n }\n\n switch (object.toLowerCase()) {\n case 'org-member':\n return await this.confirmOrganizationMember(id, cmd);\n default:\n return Response.badRequest('Unknown object.');\n }\n }\n\n private async confirmOrganizationMember(id: string, cmd: program.Command) {\n if (cmd.organizationid == null || cmd.organizationid === '') {\n return Response.badRequest('--organizationid <organizationid> required.');\n }\n if (!Utils.isGuid(id)) {\n return Response.error('`' + id + '` is not a GUID.');\n }\n if (!Utils.isGuid(cmd.organizationid)) {\n return Response.error('`' + cmd.organizationid + '` is not a GUID.');\n }\n try {\n const orgKey = await this.cryptoService.getOrgKey(cmd.organizationid);\n if (orgKey == null) {\n throw new Error('No encryption key for this organization.');\n }\n const orgUser = await this.apiService.getOrganizationUser(cmd.organizationid, id);\n if (orgUser == null) {\n throw new Error('Member id does not exist for this organization.');\n }\n const publicKeyResponse = await this.apiService.getUserPublicKey(orgUser.userId);\n const publicKey = Utils.fromB64ToArray(publicKeyResponse.publicKey);\n const key = await this.cryptoService.rsaEncrypt(orgKey.key, publicKey.buffer);\n const req = new OrganizationUserConfirmRequest();\n req.key = key.encryptedString;\n await this.apiService.postOrganizationUserConfirm(cmd.organizationid, id, req);\n return Response.success();\n } catch (e) {\n return Response.error(e);\n }\n }\n}\n","export class SelectionReadOnlyRequest {\n id: string;\n readOnly: boolean;\n\n constructor(id: string, readOnly: boolean) {\n this.id = id;\n this.readOnly = readOnly;\n }\n}\n","import { AttachmentView } from 'jslib/models/view/attachmentView';\n\nexport class AttachmentResponse {\n id: string;\n fileName: string;\n size: string;\n sizeName: string;\n url: string;\n\n constructor(o: AttachmentView) {\n this.id = o.id;\n this.fileName = o.fileName;\n this.size = o.size;\n this.sizeName = o.sizeName;\n this.url = o.url;\n }\n}\n","import { Login } from 'jslib/models/export/login';\nimport { LoginView } from 'jslib/models/view/loginView';\n\nexport class LoginResponse extends Login {\n passwordRevisionDate: Date;\n\n constructor(o: LoginView) {\n super(o);\n this.passwordRevisionDate = o.passwordRevisionDate != null ? o.passwordRevisionDate : null;\n }\n}\n","import { PasswordHistoryView } from 'jslib/models/view/passwordHistoryView';\n\nexport class PasswordHistoryResponse {\n lastUsedDate: Date;\n password: string;\n\n constructor(o: PasswordHistoryView) {\n this.lastUsedDate = o.lastUsedDate;\n this.password = o.password;\n }\n}\n","export enum LogLevelType {\n Debug,\n Info,\n Warning,\n Error,\n}\n","export { CipherType } from './cipherType';\nexport { DeviceType } from './deviceType';\nexport { EncryptionType } from './encryptionType';\nexport { FieldType } from './fieldType';\nexport { LogLevelType } from './logLevelType';\nexport { SecureNoteType } from './secureNoteType';\nexport { TwoFactorProviderType } from './twoFactorProviderType';\nexport { UriMatchType } from './uriMatchType';\n","import { CipherWithIds } from 'jslib/models/export/cipherWithIds';\nimport { CipherView } from 'jslib/models/view/cipherView';\n\nimport { BaseResponse } from 'jslib/cli/models/response/baseResponse';\n\nimport { AttachmentResponse } from './attachmentResponse';\nimport { LoginResponse } from './loginResponse';\nimport { PasswordHistoryResponse } from './passwordHistoryResponse';\n\nimport { CipherType } from 'jslib/enums';\n\nexport class CipherResponse extends CipherWithIds implements BaseResponse {\n object: string;\n attachments: AttachmentResponse[];\n revisionDate: Date;\n passwordHistory: PasswordHistoryResponse[];\n\n constructor(o: CipherView) {\n super();\n this.object = 'item';\n this.build(o);\n if (o.attachments != null) {\n this.attachments = o.attachments.map((a) => new AttachmentResponse(a));\n }\n this.revisionDate = o.revisionDate;\n if (o.passwordHistory != null) {\n this.passwordHistory = o.passwordHistory.map((h) => new PasswordHistoryResponse(h));\n }\n if (o.type === CipherType.Login && o.login != null) {\n this.login = new LoginResponse(o.login);\n }\n }\n}\n","import { FolderWithId } from 'jslib/models/export/folderWithId';\nimport { FolderView } from 'jslib/models/view/folderView';\n\nimport { BaseResponse } from 'jslib/cli/models/response/baseResponse';\n\nexport class FolderResponse extends FolderWithId implements BaseResponse {\n object: string;\n\n constructor(o: FolderView) {\n super();\n this.object = 'folder';\n this.build(o);\n }\n}\n","import { CollectionWithId } from 'jslib/models/export/collectionWithId';\nimport { CollectionView } from 'jslib/models/view/collectionView';\n\nimport { BaseResponse } from 'jslib/cli/models/response/baseResponse';\n\nexport class CollectionResponse extends CollectionWithId implements BaseResponse {\n object: string;\n\n constructor(o: CollectionView) {\n super();\n this.object = 'collection';\n this.build(o);\n }\n}\n","import { CollectionView } from 'jslib/models/view/collectionView';\n\nimport { SelectionReadOnly } from '../selectionReadOnly';\n\nimport { CollectionResponse } from './collectionResponse';\n\nexport class OrganizationCollectionResponse extends CollectionResponse {\n groups: SelectionReadOnly[];\n\n constructor(o: CollectionView, groups: SelectionReadOnly[]) {\n super(o);\n this.object = 'org-collection';\n this.groups = groups;\n }\n}\n","import * as fs from 'fs';\nimport * as path from 'path';\n\nimport { Organization } from 'jslib/models/domain/organization';\nimport { CollectionView } from 'jslib/models/view/collectionView';\nimport { FolderView } from 'jslib/models/view/folderView';\n\nimport { NodeUtils } from 'jslib/misc/nodeUtils';\n\nexport class CliUtils {\n static writeLn(s: string, finalLine: boolean = false, error: boolean = false) {\n const stream = error ? process.stderr : process.stdout;\n if (finalLine && (process.platform === 'win32' || !stream.isTTY)) {\n stream.write(s);\n } else {\n stream.write(s + '\\n');\n }\n }\n\n static readFile(input: string): Promise<string> {\n return new Promise<string>((resolve, reject) => {\n let p: string = null;\n if (input != null && input !== '') {\n const osInput = path.join(input);\n if (osInput.indexOf(path.sep) === -1) {\n p = path.join(process.cwd(), osInput);\n } else {\n p = osInput;\n }\n } else {\n reject('You must specify a file path.');\n }\n fs.readFile(p, 'utf8', (err, data) => {\n if (err != null) {\n reject(err.message);\n }\n resolve(data);\n });\n });\n }\n\n static saveFile(data: string | Buffer, output: string, defaultFileName: string) {\n let p: string = null;\n let mkdir = false;\n if (output != null && output !== '') {\n const osOutput = path.join(output);\n if (osOutput.indexOf(path.sep) === -1) {\n p = path.join(process.cwd(), osOutput);\n } else {\n mkdir = true;\n if (osOutput.endsWith(path.sep)) {\n p = path.join(osOutput, defaultFileName);\n } else {\n p = osOutput;\n }\n }\n } else {\n p = path.join(process.cwd(), defaultFileName);\n }\n\n p = path.resolve(p);\n if (mkdir) {\n const dir = p.substring(0, p.lastIndexOf(path.sep));\n if (!fs.existsSync(dir)) {\n NodeUtils.mkdirpSync(dir, '700');\n }\n }\n\n return new Promise<string>((resolve, reject) => {\n fs.writeFile(p, data, 'utf8', (err) => {\n if (err != null) {\n reject('Cannot save file to ' + p);\n }\n resolve(p);\n });\n });\n }\n\n static readStdin(): Promise<string> {\n return new Promise((resolve, reject) => {\n let input: string = '';\n\n if (process.stdin.isTTY) {\n resolve(input);\n return;\n }\n\n process.stdin.setEncoding('utf8');\n process.stdin.on('readable', () => {\n while (true) {\n const chunk = process.stdin.read();\n if (chunk == null) {\n break;\n }\n input += chunk;\n }\n });\n\n process.stdin.on('end', () => {\n resolve(input);\n });\n });\n }\n\n static searchFolders(folders: FolderView[], search: string) {\n search = search.toLowerCase();\n return folders.filter((f) => {\n if (f.name != null && f.name.toLowerCase().indexOf(search) > -1) {\n return true;\n }\n return false;\n });\n }\n\n static searchCollections(collections: CollectionView[], search: string) {\n search = search.toLowerCase();\n return collections.filter((c) => {\n if (c.name != null && c.name.toLowerCase().indexOf(search) > -1) {\n return true;\n }\n return false;\n });\n }\n\n static searchOrganizations(organizations: Organization[], search: string) {\n search = search.toLowerCase();\n return organizations.filter((o) => {\n if (o.name != null && o.name.toLowerCase().indexOf(search) > -1) {\n return true;\n }\n return false;\n });\n }\n}\n","import * as program from 'commander';\nimport * as fs from 'fs';\nimport * as path from 'path';\n\nimport { ApiService } from 'jslib/abstractions/api.service';\nimport { CipherService } from 'jslib/abstractions/cipher.service';\nimport { CryptoService } from 'jslib/abstractions/crypto.service';\nimport { FolderService } from 'jslib/abstractions/folder.service';\nimport { UserService } from 'jslib/abstractions/user.service';\n\nimport { Cipher } from 'jslib/models/export/cipher';\nimport { Collection } from 'jslib/models/export/collection';\nimport { Folder } from 'jslib/models/export/folder';\n\nimport { CollectionRequest } from 'jslib/models/request/collectionRequest';\nimport { SelectionReadOnlyRequest } from 'jslib/models/request/selectionReadOnlyRequest';\n\nimport { Response } from 'jslib/cli/models/response';\n\nimport { CipherResponse } from '../models/response/cipherResponse';\nimport { FolderResponse } from '../models/response/folderResponse';\nimport { OrganizationCollectionResponse } from '../models/response/organizationCollectionResponse';\n\nimport { OrganizationCollectionRequest } from '../models/request/organizationCollectionRequest';\n\nimport { CliUtils } from '../utils';\n\nimport { Utils } from 'jslib/misc/utils';\n\nexport class CreateCommand {\n constructor(private cipherService: CipherService, private folderService: FolderService,\n private userService: UserService, private cryptoService: CryptoService,\n private apiService: ApiService) { }\n\n async run(object: string, requestJson: string, cmd: program.Command): Promise<Response> {\n let req: any = null;\n if (object !== 'attachment') {\n if (requestJson == null || requestJson === '') {\n requestJson = await CliUtils.readStdin();\n }\n\n if (requestJson == null || requestJson === '') {\n return Response.badRequest('`requestJson` was not provided.');\n }\n\n try {\n const reqJson = Buffer.from(requestJson, 'base64').toString();\n req = JSON.parse(reqJson);\n } catch (e) {\n return Response.badRequest('Error parsing the encoded request data.');\n }\n }\n\n switch (object.toLowerCase()) {\n case 'item':\n return await this.createCipher(req);\n case 'attachment':\n return await this.createAttachment(cmd);\n case 'folder':\n return await this.createFolder(req);\n case 'org-collection':\n return await this.createOrganizationCollection(req, cmd);\n default:\n return Response.badRequest('Unknown object.');\n }\n }\n\n private async createCipher(req: Cipher) {\n const cipher = await this.cipherService.encrypt(Cipher.toView(req));\n try {\n await this.cipherService.saveWithServer(cipher);\n const newCipher = await this.cipherService.get(cipher.id);\n const decCipher = await newCipher.decrypt();\n const res = new CipherResponse(decCipher);\n return Response.success(res);\n } catch (e) {\n return Response.error(e);\n }\n }\n\n private async createAttachment(cmd: program.Command) {\n if (cmd.itemid == null || cmd.itemid === '') {\n return Response.badRequest('--itemid <itemid> required.');\n }\n if (cmd.file == null || cmd.file === '') {\n return Response.badRequest('--file <file> required.');\n }\n const filePath = path.resolve(cmd.file);\n if (!fs.existsSync(cmd.file)) {\n return Response.badRequest('Cannot find file at ' + filePath);\n }\n\n const itemId = cmd.itemid.toLowerCase();\n const cipher = await this.cipherService.get(itemId);\n if (cipher == null) {\n return Response.notFound();\n }\n\n if (cipher.organizationId == null && !(await this.userService.canAccessPremium())) {\n return Response.error('Premium status is required to use this feature.');\n }\n\n const encKey = await this.cryptoService.getEncKey();\n if (encKey == null) {\n return Response.error('You must update your encryption key before you can use this feature. ' +\n 'See https://help.bitwarden.com/article/update-encryption-key/');\n }\n\n try {\n const fileBuf = fs.readFileSync(filePath);\n await this.cipherService.saveAttachmentRawWithServer(cipher, path.basename(filePath),\n new Uint8Array(fileBuf).buffer);\n const updatedCipher = await this.cipherService.get(cipher.id);\n const decCipher = await updatedCipher.decrypt();\n const res = new CipherResponse(decCipher);\n return Response.success(res);\n } catch (e) {\n return Response.error(e);\n }\n }\n\n private async createFolder(req: Folder) {\n const folder = await this.folderService.encrypt(Folder.toView(req));\n try {\n await this.folderService.saveWithServer(folder);\n const newFolder = await this.folderService.get(folder.id);\n const decFolder = await newFolder.decrypt();\n const res = new FolderResponse(decFolder);\n return Response.success(res);\n } catch (e) {\n return Response.error(e);\n }\n }\n\n private async createOrganizationCollection(req: OrganizationCollectionRequest, cmd: program.Command) {\n if (cmd.organizationid == null || cmd.organizationid === '') {\n return Response.badRequest('--organizationid <organizationid> required.');\n }\n if (!Utils.isGuid(cmd.organizationid)) {\n return Response.error('`' + cmd.organizationid + '` is not a GUID.');\n }\n if (cmd.organizationid !== req.organizationId) {\n return Response.error('--organizationid <organizationid> does not match request object.');\n }\n try {\n const orgKey = await this.cryptoService.getOrgKey(req.organizationId);\n if (orgKey == null) {\n throw new Error('No encryption key for this organization.');\n }\n\n const groups = req.groups == null ? null :\n req.groups.map((g) => new SelectionReadOnlyRequest(g.id, g.readOnly));\n const request = new CollectionRequest();\n request.name = (await this.cryptoService.encrypt(req.name, orgKey)).encryptedString;\n request.externalId = req.externalId;\n request.groups = groups;\n await this.apiService.postCollection(req.organizationId, request);\n const res = new OrganizationCollectionResponse(Collection.toView(req), groups);\n return Response.success(res);\n } catch (e) {\n return Response.error(e);\n }\n }\n}\n","import * as program from 'commander';\n\nimport { ApiService } from 'jslib/abstractions/api.service';\nimport { CipherService } from 'jslib/abstractions/cipher.service';\nimport { FolderService } from 'jslib/abstractions/folder.service';\nimport { UserService } from 'jslib/abstractions/user.service';\n\nimport { Response } from 'jslib/cli/models/response';\n\nimport { Utils } from 'jslib/misc/utils';\n\nexport class DeleteCommand {\n constructor(private cipherService: CipherService, private folderService: FolderService,\n private userService: UserService, private apiService: ApiService) { }\n\n async run(object: string, id: string, cmd: program.Command): Promise<Response> {\n if (id != null) {\n id = id.toLowerCase();\n }\n\n switch (object.toLowerCase()) {\n case 'item':\n return await this.deleteCipher(id, cmd);\n case 'attachment':\n return await this.deleteAttachment(id, cmd);\n case 'folder':\n return await this.deleteFolder(id);\n case 'org-collection':\n return await this.deleteOrganizationCollection(id, cmd);\n default:\n return Response.badRequest('Unknown object.');\n }\n }\n\n private async deleteCipher(id: string, cmd: program.Command) {\n const cipher = await this.cipherService.get(id);\n if (cipher == null) {\n return Response.notFound();\n }\n\n try {\n if (cmd.permanent) {\n await this.cipherService.deleteWithServer(id);\n } else {\n await this.cipherService.softDeleteWithServer(id);\n }\n return Response.success();\n } catch (e) {\n return Response.error(e);\n }\n }\n\n private async deleteAttachment(id: string, cmd: program.Command) {\n if (cmd.itemid == null || cmd.itemid === '') {\n return Response.badRequest('--itemid <itemid> required.');\n }\n\n const itemId = cmd.itemid.toLowerCase();\n const cipher = await this.cipherService.get(itemId);\n if (cipher == null) {\n return Response.notFound();\n }\n\n if (cipher.attachments == null || cipher.attachments.length === 0) {\n return Response.error('No attachments available for this item.');\n }\n\n const attachments = cipher.attachments.filter((a) => a.id.toLowerCase() === id);\n if (attachments.length === 0) {\n return Response.error('Attachment `' + id + '` was not found.');\n }\n\n if (cipher.organizationId == null && !(await this.userService.canAccessPremium())) {\n return Response.error('Premium status is required to use this feature.');\n }\n\n try {\n await this.cipherService.deleteAttachmentWithServer(cipher.id, attachments[0].id);\n return Response.success();\n } catch (e) {\n return Response.error(e);\n }\n }\n\n private async deleteFolder(id: string) {\n const folder = await this.folderService.get(id);\n if (folder == null) {\n return Response.notFound();\n }\n\n try {\n await this.folderService.deleteWithServer(id);\n return Response.success();\n } catch (e) {\n return Response.error(e);\n }\n }\n\n private async deleteOrganizationCollection(id: string, cmd: program.Command) {\n if (cmd.organizationid == null || cmd.organizationid === '') {\n return Response.badRequest('--organizationid <organizationid> required.');\n }\n if (!Utils.isGuid(id)) {\n return Response.error('`' + id + '` is not a GUID.');\n }\n if (!Utils.isGuid(cmd.organizationid)) {\n return Response.error('`' + cmd.organizationid + '` is not a GUID.');\n }\n try {\n await this.apiService.deleteCollection(cmd.organizationid, id);\n return Response.success();\n } catch (e) {\n return Response.error(e);\n }\n }\n}\n","import * as program from 'commander';\n\nimport { ApiService } from 'jslib/abstractions/api.service';\nimport { CipherService } from 'jslib/abstractions/cipher.service';\nimport { CryptoService } from 'jslib/abstractions/crypto.service';\nimport { FolderService } from 'jslib/abstractions/folder.service';\n\nimport { Cipher } from 'jslib/models/export/cipher';\nimport { Collection } from 'jslib/models/export/collection';\nimport { Folder } from 'jslib/models/export/folder';\n\nimport { CollectionRequest } from 'jslib/models/request/collectionRequest';\nimport { SelectionReadOnlyRequest } from 'jslib/models/request/selectionReadOnlyRequest';\n\nimport { Response } from 'jslib/cli/models/response';\n\nimport { CipherResponse } from '../models/response/cipherResponse';\nimport { FolderResponse } from '../models/response/folderResponse';\nimport { OrganizationCollectionResponse } from '../models/response/organizationCollectionResponse';\n\nimport { OrganizationCollectionRequest } from '../models/request/organizationCollectionRequest';\n\nimport { CliUtils } from '../utils';\n\nimport { Utils } from 'jslib/misc/utils';\n\nexport class EditCommand {\n constructor(private cipherService: CipherService, private folderService: FolderService,\n private cryptoService: CryptoService, private apiService: ApiService) { }\n\n async run(object: string, id: string, requestJson: string, cmd: program.Command): Promise<Response> {\n if (requestJson == null || requestJson === '') {\n requestJson = await CliUtils.readStdin();\n }\n\n if (requestJson == null || requestJson === '') {\n return Response.badRequest('`requestJson` was not provided.');\n }\n\n let req: any = null;\n try {\n const reqJson = Buffer.from(requestJson, 'base64').toString();\n req = JSON.parse(reqJson);\n } catch (e) {\n return Response.badRequest('Error parsing the encoded request data.');\n }\n\n if (id != null) {\n id = id.toLowerCase();\n }\n\n switch (object.toLowerCase()) {\n case 'item':\n return await this.editCipher(id, req);\n case 'item-collections':\n return await this.editCipherCollections(id, req);\n case 'folder':\n return await this.editFolder(id, req);\n case 'org-collection':\n return await this.editOrganizationCollection(id, req, cmd);\n default:\n return Response.badRequest('Unknown object.');\n }\n }\n\n private async editCipher(id: string, req: Cipher) {\n const cipher = await this.cipherService.get(id);\n if (cipher == null) {\n return Response.notFound();\n }\n\n let cipherView = await cipher.decrypt();\n if (cipherView.isDeleted) {\n return Response.badRequest('You may not edit a deleted cipher. Use restore item <id> command first.');\n }\n cipherView = Cipher.toView(req, cipherView);\n const encCipher = await this.cipherService.encrypt(cipherView);\n try {\n await this.cipherService.saveWithServer(encCipher);\n const updatedCipher = await this.cipherService.get(cipher.id);\n const decCipher = await updatedCipher.decrypt();\n const res = new CipherResponse(decCipher);\n return Response.success(res);\n } catch (e) {\n return Response.error(e);\n }\n }\n\n private async editCipherCollections(id: string, req: string[]) {\n const cipher = await this.cipherService.get(id);\n if (cipher == null) {\n return Response.notFound();\n }\n if (cipher.organizationId == null) {\n return Response.badRequest('Item does not belong to an organization. Consider sharing it first.');\n }\n\n cipher.collectionIds = req;\n try {\n await this.cipherService.saveCollectionsWithServer(cipher);\n const updatedCipher = await this.cipherService.get(cipher.id);\n const decCipher = await updatedCipher.decrypt();\n const res = new CipherResponse(decCipher);\n return Response.success(res);\n } catch (e) {\n return Response.error(e);\n }\n }\n\n private async editFolder(id: string, req: Folder) {\n const folder = await this.folderService.get(id);\n if (folder == null) {\n return Response.notFound();\n }\n\n let folderView = await folder.decrypt();\n folderView = Folder.toView(req, folderView);\n const encFolder = await this.folderService.encrypt(folderView);\n try {\n await this.folderService.saveWithServer(encFolder);\n const updatedFolder = await this.folderService.get(folder.id);\n const decFolder = await updatedFolder.decrypt();\n const res = new FolderResponse(decFolder);\n return Response.success(res);\n } catch (e) {\n return Response.error(e);\n }\n }\n\n private async editOrganizationCollection(id: string, req: OrganizationCollectionRequest, cmd: program.Command) {\n if (cmd.organizationid == null || cmd.organizationid === '') {\n return Response.badRequest('--organizationid <organizationid> required.');\n }\n if (!Utils.isGuid(id)) {\n return Response.error('`' + id + '` is not a GUID.');\n }\n if (!Utils.isGuid(cmd.organizationid)) {\n return Response.error('`' + cmd.organizationid + '` is not a GUID.');\n }\n if (cmd.organizationid !== req.organizationId) {\n return Response.error('--organizationid <organizationid> does not match request object.');\n }\n try {\n const orgKey = await this.cryptoService.getOrgKey(req.organizationId);\n if (orgKey == null) {\n throw new Error('No encryption key for this organization.');\n }\n\n const groups = req.groups == null ? null :\n req.groups.map((g) => new SelectionReadOnlyRequest(g.id, g.readOnly));\n const request = new CollectionRequest();\n request.name = (await this.cryptoService.encrypt(req.name, orgKey)).encryptedString;\n request.externalId = req.externalId;\n request.groups = groups;\n await this.apiService.putCollection(req.organizationId, id, request);\n const res = new OrganizationCollectionResponse(Collection.toView(req), groups);\n return Response.success(res);\n } catch (e) {\n return Response.error(e);\n }\n }\n}\n","import * as program from 'commander';\n\nimport { Response } from 'jslib/cli/models/response';\nimport { StringResponse } from 'jslib/cli/models/response/stringResponse';\n\nimport { CliUtils } from '../utils';\n\nexport class EncodeCommand {\n async run(cmd: program.Command): Promise<Response> {\n if (process.stdin.isTTY) {\n return Response.badRequest('No stdin was piped in.');\n }\n const input = await CliUtils.readStdin();\n const b64 = Buffer.from(input, 'utf8').toString('base64');\n const res = new StringResponse(b64);\n return Response.success(res);\n }\n}\n","import * as program from 'commander';\nimport * as inquirer from 'inquirer';\n\nimport { CryptoService } from 'jslib/abstractions/crypto.service';\nimport { ExportService } from 'jslib/abstractions/export.service';\n\nimport { Response } from 'jslib/cli/models/response';\nimport { MessageResponse } from 'jslib/cli/models/response/messageResponse';\n\nimport { CliUtils } from '../utils';\n\nimport { Utils } from 'jslib/misc/utils';\n\nexport class ExportCommand {\n constructor(private cryptoService: CryptoService, private exportService: ExportService) { }\n\n async run(password: string, cmd: program.Command): Promise<Response> {\n const canInteract = process.env.BW_NOINTERACTION !== 'true';\n if ((password == null || password === '') && canInteract) {\n const answer: inquirer.Answers = await inquirer.createPromptModule({ output: process.stderr })({\n type: 'password',\n name: 'password',\n message: 'Master password:',\n });\n password = answer.password;\n }\n if (password == null || password === '') {\n return Response.badRequest('Master password is required.');\n }\n\n const keyHash = await this.cryptoService.hashPassword(password, null);\n const storedKeyHash = await this.cryptoService.getKeyHash();\n if (storedKeyHash != null && keyHash != null && storedKeyHash === keyHash) {\n const format = cmd.format !== 'json' ? 'csv' : 'json';\n if (cmd.organizationid != null && !Utils.isGuid(cmd.organizationid)) {\n return Response.error('`' + cmd.organizationid + '` is not a GUID.');\n }\n let csv: string = null;\n try {\n csv = cmd.organizationid != null ?\n await this.exportService.getOrganizationExport(cmd.organizationid, format) :\n await this.exportService.getExport(format);\n } catch (e) {\n return Response.error(e);\n }\n return await this.saveFile(csv, cmd, format);\n } else {\n return Response.error('Invalid master password.');\n }\n }\n\n async saveFile(csv: string, cmd: program.Command, format: string): Promise<Response> {\n try {\n const filePath = await CliUtils.saveFile(csv, cmd.output,\n this.exportService.getFileName(cmd.organizationid != null ? 'org' : null, format));\n const res = new MessageResponse('Saved ' + filePath, null);\n res.raw = filePath;\n return Response.success(res);\n } catch (e) {\n return Response.error(e.toString());\n }\n }\n}\n","import * as program from 'commander';\n\nimport { PasswordGenerationService } from 'jslib/abstractions/passwordGeneration.service';\n\nimport { Response } from 'jslib/cli/models/response';\nimport { StringResponse } from 'jslib/cli/models/response/stringResponse';\n\nexport class GenerateCommand {\n constructor(private passwordGenerationService: PasswordGenerationService) { }\n\n async run(cmd: program.Command): Promise<Response> {\n const options = {\n uppercase: cmd.uppercase || false,\n lowercase: cmd.lowercase || false,\n number: cmd.number || false,\n special: cmd.special || false,\n length: cmd.length || 14,\n type: cmd.passphrase ? 'passphrase' : 'password',\n wordSeparator: cmd.separator == null ? '-' : cmd.separator,\n numWords: cmd.words || 3,\n };\n if (!options.uppercase && !options.lowercase && !options.special && !options.number) {\n options.lowercase = true;\n options.uppercase = true;\n options.number = true;\n }\n if (options.length < 5) {\n options.length = 5;\n }\n if (options.numWords < 3) {\n options.numWords = 3;\n }\n if (options.wordSeparator === 'space') {\n options.wordSeparator = ' ';\n } else if (options.wordSeparator != null && options.wordSeparator.length > 1) {\n options.wordSeparator = options.wordSeparator[0];\n }\n const enforcedOptions = await this.passwordGenerationService.enforcePasswordGeneratorPoliciesOnOptions(options);\n const password = await this.passwordGenerationService.generatePassword(enforcedOptions[0]);\n const res = new StringResponse(password);\n return Response.success(res);\n }\n}\n","import { BaseResponse } from 'jslib/cli/models/response/baseResponse';\n\nimport { Organization } from 'jslib/models/domain/organization';\n\nimport { OrganizationUserStatusType } from 'jslib/enums/organizationUserStatusType';\nimport { OrganizationUserType } from 'jslib/enums/organizationUserType';\n\nexport class OrganizationResponse implements BaseResponse {\n object: string;\n id: string;\n name: string;\n status: OrganizationUserStatusType;\n type: OrganizationUserType;\n enabled: boolean;\n\n constructor(o: Organization) {\n this.object = 'organization';\n this.id = o.id;\n this.name = o.name;\n this.status = o.status;\n this.type = o.type;\n this.enabled = o.enabled;\n }\n}\n","import { BaseResponse } from 'jslib/cli/models/response/baseResponse';\n\nexport class TemplateResponse implements BaseResponse {\n object: string;\n template: any;\n\n constructor(template: any) {\n this.object = 'template';\n this.template = template;\n }\n}\n","export class SelectionReadOnly {\n static template(): SelectionReadOnly {\n return new SelectionReadOnly('00000000-0000-0000-0000-000000000000', false);\n }\n\n id: string;\n readOnly: boolean;\n\n constructor(id: string, readOnly: boolean) {\n this.id = id;\n this.readOnly = readOnly;\n }\n}\n","import { Collection } from 'jslib/models/export/collection';\n\nimport { SelectionReadOnly } from '../selectionReadOnly';\n\nexport class OrganizationCollectionRequest extends Collection {\n static template(): OrganizationCollectionRequest {\n const req = new OrganizationCollectionRequest();\n req.organizationId = '00000000-0000-0000-0000-000000000000';\n req.name = 'Collection name';\n req.externalId = null;\n req.groups = [SelectionReadOnly.template(), SelectionReadOnly.template()];\n return req;\n }\n\n groups: SelectionReadOnly[];\n}\n","import * as program from 'commander';\nimport * as fet from 'node-fetch';\n\nimport { CipherType } from 'jslib/enums/cipherType';\n\nimport { ApiService } from 'jslib/abstractions/api.service';\nimport { AuditService } from 'jslib/abstractions/audit.service';\nimport { CipherService } from 'jslib/abstractions/cipher.service';\nimport { CollectionService } from 'jslib/abstractions/collection.service';\nimport { CryptoService } from 'jslib/abstractions/crypto.service';\nimport { FolderService } from 'jslib/abstractions/folder.service';\nimport { SearchService } from 'jslib/abstractions/search.service';\nimport { TotpService } from 'jslib/abstractions/totp.service';\nimport { UserService } from 'jslib/abstractions/user.service';\n\nimport { Organization } from 'jslib/models/domain/organization';\n\nimport { Card } from 'jslib/models/export/card';\nimport { Cipher } from 'jslib/models/export/cipher';\nimport { Collection } from 'jslib/models/export/collection';\nimport { Field } from 'jslib/models/export/field';\nimport { Folder } from 'jslib/models/export/folder';\nimport { Identity } from 'jslib/models/export/identity';\nimport { Login } from 'jslib/models/export/login';\nimport { LoginUri } from 'jslib/models/export/loginUri';\nimport { SecureNote } from 'jslib/models/export/secureNote';\n\nimport { CipherView } from 'jslib/models/view/cipherView';\nimport { CollectionView } from 'jslib/models/view/collectionView';\nimport { FolderView } from 'jslib/models/view/folderView';\n\nimport { CipherString } from 'jslib/models/domain/cipherString';\n\nimport { Response } from 'jslib/cli/models/response';\nimport { MessageResponse } from 'jslib/cli/models/response/messageResponse';\nimport { StringResponse } from 'jslib/cli/models/response/stringResponse';\n\nimport { CipherResponse } from '../models/response/cipherResponse';\nimport { CollectionResponse } from '../models/response/collectionResponse';\nimport { FolderResponse } from '../models/response/folderResponse';\nimport { OrganizationCollectionResponse } from '../models/response/organizationCollectionResponse';\nimport { OrganizationResponse } from '../models/response/organizationResponse';\nimport { TemplateResponse } from '../models/response/templateResponse';\n\nimport { OrganizationCollectionRequest } from '../models/request/organizationCollectionRequest';\n\nimport { SelectionReadOnly } from '../models/selectionReadOnly';\n\nimport { CliUtils } from '../utils';\n\nimport { Utils } from 'jslib/misc/utils';\n\nexport class GetCommand {\n constructor(private cipherService: CipherService, private folderService: FolderService,\n private collectionService: CollectionService, private totpService: TotpService,\n private auditService: AuditService, private cryptoService: CryptoService,\n private userService: UserService, private searchService: SearchService,\n private apiService: ApiService) { }\n\n async run(object: string, id: string, cmd: program.Command): Promise<Response> {\n if (id != null) {\n id = id.toLowerCase();\n }\n\n switch (object.toLowerCase()) {\n case 'item':\n return await this.getCipher(id);\n case 'username':\n return await this.getUsername(id);\n case 'password':\n return await this.getPassword(id);\n case 'uri':\n return await this.getUri(id);\n case 'totp':\n return await this.getTotp(id);\n case 'exposed':\n return await this.getExposed(id);\n case 'attachment':\n return await this.getAttachment(id, cmd);\n case 'folder':\n return await this.getFolder(id);\n case 'collection':\n return await this.getCollection(id);\n case 'org-collection':\n return await this.getOrganizationCollection(id, cmd);\n case 'organization':\n return await this.getOrganization(id);\n case 'template':\n return await this.getTemplate(id);\n case 'fingerprint':\n return await this.getFingerprint(id);\n default:\n return Response.badRequest('Unknown object.');\n }\n }\n\n private async getCipherView(id: string): Promise<CipherView | CipherView[]> {\n let decCipher: CipherView = null;\n if (Utils.isGuid(id)) {\n const cipher = await this.cipherService.get(id);\n if (cipher != null) {\n decCipher = await cipher.decrypt();\n }\n } else if (id.trim() !== '') {\n let ciphers = await this.cipherService.getAllDecrypted();\n ciphers = this.searchService.searchCiphersBasic(ciphers, id);\n if (ciphers.length > 1) {\n return ciphers;\n }\n if (ciphers.length > 0) {\n decCipher = ciphers[0];\n }\n }\n\n return decCipher;\n }\n\n private async getCipher(id: string, filter?: (c: CipherView) => boolean) {\n let decCipher = await this.getCipherView(id);\n if (decCipher == null) {\n return Response.notFound();\n }\n if (Array.isArray(decCipher)) {\n if (filter != null) {\n const filteredCiphers = decCipher.filter(filter);\n if (filteredCiphers.length === 1) {\n decCipher = filteredCiphers[0];\n }\n }\n if (Array.isArray(decCipher)) {\n return Response.multipleResults(decCipher.map((c) => c.id));\n }\n }\n const res = new CipherResponse(decCipher);\n return Response.success(res);\n }\n\n private async getUsername(id: string) {\n const cipherResponse = await this.getCipher(id,\n (c) => c.type === CipherType.Login && !Utils.isNullOrWhitespace(c.login.username));\n if (!cipherResponse.success) {\n return cipherResponse;\n }\n\n const cipher = cipherResponse.data as CipherResponse;\n if (cipher.type !== CipherType.Login) {\n return Response.badRequest('Not a login.');\n }\n\n if (Utils.isNullOrWhitespace(cipher.login.username)) {\n return Response.error('No username available for this login.');\n }\n\n const res = new StringResponse(cipher.login.username);\n return Response.success(res);\n }\n\n private async getPassword(id: string) {\n const cipherResponse = await this.getCipher(id,\n (c) => c.type === CipherType.Login && !Utils.isNullOrWhitespace(c.login.password));\n if (!cipherResponse.success) {\n return cipherResponse;\n }\n\n const cipher = cipherResponse.data as CipherResponse;\n if (cipher.type !== CipherType.Login) {\n return Response.badRequest('Not a login.');\n }\n\n if (Utils.isNullOrWhitespace(cipher.login.password)) {\n return Response.error('No password available for this login.');\n }\n\n const res = new StringResponse(cipher.login.password);\n return Response.success(res);\n }\n\n private async getUri(id: string) {\n const cipherResponse = await this.getCipher(id,\n (c) => c.type === CipherType.Login && c.login.uris != null && c.login.uris.length > 0 &&\n c.login.uris[0].uri !== '');\n if (!cipherResponse.success) {\n return cipherResponse;\n }\n\n const cipher = cipherResponse.data as CipherResponse;\n if (cipher.type !== CipherType.Login) {\n return Response.badRequest('Not a login.');\n }\n\n if (cipher.login.uris == null || cipher.login.uris.length === 0 || cipher.login.uris[0].uri === '') {\n return Response.error('No uri available for this login.');\n }\n\n const res = new StringResponse(cipher.login.uris[0].uri);\n return Response.success(res);\n }\n\n private async getTotp(id: string) {\n const cipherResponse = await this.getCipher(id,\n (c) => c.type === CipherType.Login && !Utils.isNullOrWhitespace(c.login.totp));\n if (!cipherResponse.success) {\n return cipherResponse;\n }\n\n const cipher = cipherResponse.data as CipherResponse;\n if (cipher.type !== CipherType.Login) {\n return Response.badRequest('Not a login.');\n }\n\n if (Utils.isNullOrWhitespace(cipher.login.totp)) {\n return Response.error('No TOTP available for this login.');\n }\n\n const totp = await this.totpService.getCode(cipher.login.totp);\n if (totp == null) {\n return Response.error('Couldn\\'t generate TOTP code.');\n }\n\n const canAccessPremium = await this.userService.canAccessPremium();\n if (!canAccessPremium) {\n const originalCipher = await this.cipherService.get(cipher.id);\n if (originalCipher == null || originalCipher.organizationId == null ||\n !originalCipher.organizationUseTotp) {\n return Response.error('Premium status is required to use this feature.');\n }\n }\n\n const res = new StringResponse(totp);\n return Response.success(res);\n }\n\n private async getExposed(id: string) {\n const passwordResponse = await this.getPassword(id);\n if (!passwordResponse.success) {\n return passwordResponse;\n }\n\n const exposedNumber = await this.auditService.passwordLeaked((passwordResponse.data as StringResponse).data);\n const res = new StringResponse(exposedNumber.toString());\n return Response.success(res);\n }\n\n private async getAttachment(id: string, cmd: program.Command) {\n if (cmd.itemid == null || cmd.itemid === '') {\n return Response.badRequest('--itemid <itemid> required.');\n }\n\n const itemId = cmd.itemid.toLowerCase();\n const cipherResponse = await this.getCipher(itemId);\n if (!cipherResponse.success) {\n return cipherResponse;\n }\n\n const cipher = await this.getCipherView(itemId);\n if (cipher == null || Array.isArray(cipher) || cipher.attachments.length === 0) {\n return Response.error('No attachments available for this item.');\n }\n\n const attachments = cipher.attachments.filter((a) => a.id.toLowerCase() === id ||\n (a.fileName != null && a.fileName.toLowerCase().indexOf(id) > -1));\n if (attachments.length === 0) {\n return Response.error('Attachment `' + id + '` was not found.');\n }\n if (attachments.length > 1) {\n return Response.multipleResults(attachments.map((a) => a.id));\n }\n\n if (!(await this.userService.canAccessPremium())) {\n const originalCipher = await this.cipherService.get(cipher.id);\n if (originalCipher == null || originalCipher.organizationId == null) {\n return Response.error('Premium status is required to use this feature.');\n }\n }\n\n const response = await fet.default(new fet.Request(attachments[0].url, { headers: { cache: 'no-cache' } }));\n if (response.status !== 200) {\n return Response.error('A ' + response.status + ' error occurred while downloading the attachment.');\n }\n\n try {\n const buf = await response.arrayBuffer();\n const key = attachments[0].key != null ? attachments[0].key :\n await this.cryptoService.getOrgKey(cipher.organizationId);\n const decBuf = await this.cryptoService.decryptFromBytes(buf, key);\n const filePath = await CliUtils.saveFile(Buffer.from(decBuf), cmd.output, attachments[0].fileName);\n const res = new MessageResponse('Saved ' + filePath, null);\n res.raw = filePath;\n return Response.success(res);\n } catch (e) {\n if (typeof (e) === 'string') {\n return Response.error(e);\n } else {\n return Response.error('An error occurred while saving the attachment.');\n }\n }\n }\n\n private async getFolder(id: string) {\n let decFolder: FolderView = null;\n if (Utils.isGuid(id)) {\n const folder = await this.folderService.get(id);\n if (folder != null) {\n decFolder = await folder.decrypt();\n }\n } else if (id.trim() !== '') {\n let folders = await this.folderService.getAllDecrypted();\n folders = CliUtils.searchFolders(folders, id);\n if (folders.length > 1) {\n return Response.multipleResults(folders.map((f) => f.id));\n }\n if (folders.length > 0) {\n decFolder = folders[0];\n }\n }\n\n if (decFolder == null) {\n return Response.notFound();\n }\n const res = new FolderResponse(decFolder);\n return Response.success(res);\n }\n\n private async getCollection(id: string) {\n let decCollection: CollectionView = null;\n if (Utils.isGuid(id)) {\n const collection = await this.collectionService.get(id);\n if (collection != null) {\n decCollection = await collection.decrypt();\n }\n } else if (id.trim() !== '') {\n let collections = await this.collectionService.getAllDecrypted();\n collections = CliUtils.searchCollections(collections, id);\n if (collections.length > 1) {\n return Response.multipleResults(collections.map((c) => c.id));\n }\n if (collections.length > 0) {\n decCollection = collections[0];\n }\n }\n\n if (decCollection == null) {\n return Response.notFound();\n }\n const res = new CollectionResponse(decCollection);\n return Response.success(res);\n }\n\n private async getOrganizationCollection(id: string, cmd: program.Command) {\n if (cmd.organizationid == null || cmd.organizationid === '') {\n return Response.badRequest('--organizationid <organizationid> required.');\n }\n if (!Utils.isGuid(id)) {\n return Response.error('`' + id + '` is not a GUID.');\n }\n if (!Utils.isGuid(cmd.organizationid)) {\n return Response.error('`' + cmd.organizationid + '` is not a GUID.');\n }\n try {\n const orgKey = await this.cryptoService.getOrgKey(cmd.organizationid);\n if (orgKey == null) {\n throw new Error('No encryption key for this organization.');\n }\n\n const response = await this.apiService.getCollectionDetails(cmd.organizationid, id);\n const decCollection = new CollectionView(response);\n decCollection.name = await this.cryptoService.decryptToUtf8(\n new CipherString(response.name), orgKey);\n const groups = response.groups == null ? null :\n response.groups.map((g) => new SelectionReadOnly(g.id, g.readOnly));\n const res = new OrganizationCollectionResponse(decCollection, groups);\n return Response.success(res);\n } catch (e) {\n return Response.error(e);\n }\n }\n\n private async getOrganization(id: string) {\n let org: Organization = null;\n if (Utils.isGuid(id)) {\n org = await this.userService.getOrganization(id);\n } else if (id.trim() !== '') {\n let orgs = await this.userService.getAllOrganizations();\n orgs = CliUtils.searchOrganizations(orgs, id);\n if (orgs.length > 1) {\n return Response.multipleResults(orgs.map((c) => c.id));\n }\n if (orgs.length > 0) {\n org = orgs[0];\n }\n }\n\n if (org == null) {\n return Response.notFound();\n }\n const res = new OrganizationResponse(org);\n return Response.success(res);\n }\n\n private async getTemplate(id: string) {\n let template: any = null;\n switch (id.toLowerCase()) {\n case 'item':\n template = Cipher.template();\n break;\n case 'item.field':\n template = Field.template();\n break;\n case 'item.login':\n template = Login.template();\n break;\n case 'item.login.uri':\n template = LoginUri.template();\n break;\n case 'item.card':\n template = Card.template();\n break;\n case 'item.identity':\n template = Identity.template();\n break;\n case 'item.securenote':\n template = SecureNote.template();\n break;\n case 'folder':\n template = Folder.template();\n break;\n case 'collection':\n template = Collection.template();\n break;\n case 'item-collections':\n template = ['collection-id1', 'collection-id2'];\n break;\n case 'org-collection':\n template = OrganizationCollectionRequest.template();\n break;\n default:\n return Response.badRequest('Unknown template object.');\n }\n\n const res = new TemplateResponse(template);\n return Response.success(res);\n }\n\n private async getFingerprint(id: string) {\n let fingerprint: string[] = null;\n if (id === 'me') {\n fingerprint = await this.cryptoService.getFingerprint(await this.userService.getUserId());\n } else if (Utils.isGuid(id)) {\n try {\n const response = await this.apiService.getUserPublicKey(id);\n const pubKey = Utils.fromB64ToArray(response.publicKey);\n fingerprint = await this.cryptoService.getFingerprint(id, pubKey.buffer);\n } catch { }\n }\n\n if (fingerprint == null) {\n return Response.notFound();\n }\n const res = new StringResponse(fingerprint.join('-'));\n return Response.success(res);\n }\n}\n","import * as program from 'commander';\nimport { ImportService } from 'jslib/abstractions/import.service';\n\nimport { Response } from 'jslib/cli/models/response';\nimport { MessageResponse } from 'jslib/cli/models/response/messageResponse';\n\nimport { CliUtils } from '../utils';\n\nexport class ImportCommand {\n constructor(private importService: ImportService) { }\n\n async run(format: string, filepath: string, cmd: program.Command): Promise<Response> {\n if (cmd.formats || false) {\n return this.list();\n } else {\n return this.import(format, filepath);\n }\n }\n\n private async import(format: string, filepath: string) {\n if (format == null || format === '') {\n return Response.badRequest('`format` was not provided.');\n }\n if (filepath == null || filepath === '') {\n return Response.badRequest('`filepath` was not provided.');\n }\n\n const importer = await this.importService.getImporter(format, false);\n if (importer === null) {\n return Response.badRequest('Proper importer type required.');\n }\n\n try {\n const contents = await CliUtils.readFile(filepath);\n if (contents === null || contents === '') {\n return Response.badRequest('Import file was empty.');\n }\n\n const err = await this.importService.import(importer, contents, null);\n if (err != null) {\n return Response.badRequest(err.message);\n }\n const res = new MessageResponse('Imported ' + filepath, null);\n return Response.success(res);\n } catch (err) {\n return Response.badRequest(err);\n }\n }\n\n private async list() {\n const options = this.importService.getImportOptions().sort((a, b) => {\n return a.id < b.id ? -1 : a.id > b.id ? 1 : 0;\n }).map((option) => option.id).join('\\n');\n const res = new MessageResponse('Supported input formats:', options);\n res.raw = options;\n return Response.success(res);\n }\n}\n","import { BaseResponse } from './baseResponse';\n\nexport class ListResponse implements BaseResponse {\n object: string;\n data: BaseResponse[];\n\n constructor(data: BaseResponse[]) {\n this.object = 'list';\n this.data = data;\n }\n}\n","import { BaseResponse } from 'jslib/cli/models/response/baseResponse';\n\nimport { OrganizationUserStatusType } from 'jslib/enums/organizationUserStatusType';\nimport { OrganizationUserType } from 'jslib/enums/organizationUserType';\n\nexport class OrganizationUserResponse implements BaseResponse {\n object: string;\n id: string;\n email: string;\n name: string;\n status: OrganizationUserStatusType;\n type: OrganizationUserType;\n twoFactorEnabled: boolean;\n\n constructor() {\n this.object = 'org-member';\n }\n}\n","import * as program from 'commander';\n\nimport { CipherView } from 'jslib/models/view/cipherView';\n\nimport { ApiService } from 'jslib/abstractions/api.service';\nimport { CipherService } from 'jslib/abstractions/cipher.service';\nimport { CollectionService } from 'jslib/abstractions/collection.service';\nimport { FolderService } from 'jslib/abstractions/folder.service';\nimport { SearchService } from 'jslib/abstractions/search.service';\nimport { UserService } from 'jslib/abstractions/user.service';\n\nimport {\n CollectionDetailsResponse as ApiCollectionDetailsResponse,\n CollectionResponse as ApiCollectionResponse,\n} from 'jslib/models/response/collectionResponse';\nimport { ListResponse as ApiListResponse } from 'jslib/models/response/listResponse';\n\nimport { CollectionData } from 'jslib/models/data/collectionData';\n\nimport { Collection } from 'jslib/models/domain/collection';\n\nimport { Response } from 'jslib/cli/models/response';\nimport { ListResponse } from 'jslib/cli/models/response/listResponse';\n\nimport { CipherResponse } from '../models/response/cipherResponse';\nimport { CollectionResponse } from '../models/response/collectionResponse';\nimport { FolderResponse } from '../models/response/folderResponse';\nimport { OrganizationResponse } from '../models/response/organizationResponse';\nimport { OrganizationUserResponse } from '../models/response/organizationUserResponse';\n\nimport { CliUtils } from '../utils';\n\nimport { Utils } from 'jslib/misc/utils';\n\nexport class ListCommand {\n constructor(private cipherService: CipherService, private folderService: FolderService,\n private collectionService: CollectionService, private userService: UserService,\n private searchService: SearchService, private apiService: ApiService) { }\n\n async run(object: string, cmd: program.Command): Promise<Response> {\n switch (object.toLowerCase()) {\n case 'items':\n return await this.listCiphers(cmd);\n case 'folders':\n return await this.listFolders(cmd);\n case 'collections':\n return await this.listCollections(cmd);\n case 'org-collections':\n return await this.listOrganizationCollections(cmd);\n case 'org-members':\n return await this.listOrganizationMembers(cmd);\n case 'organizations':\n return await this.listOrganizations(cmd);\n default:\n return Response.badRequest('Unknown object.');\n }\n }\n\n private async listCiphers(cmd: program.Command) {\n let ciphers: CipherView[];\n cmd.trash = cmd.trash || false;\n if (cmd.url != null && cmd.url.trim() !== '') {\n ciphers = await this.cipherService.getAllDecryptedForUrl(cmd.url);\n } else {\n ciphers = await this.cipherService.getAllDecrypted();\n }\n\n if (cmd.folderid != null || cmd.collectionid != null || cmd.organizationid != null) {\n ciphers = ciphers.filter((c) => {\n if (cmd.trash !== c.isDeleted) {\n return false;\n }\n if (cmd.folderid != null) {\n if (cmd.folderid === 'notnull' && c.folderId != null) {\n return true;\n }\n const folderId = cmd.folderid === 'null' ? null : cmd.folderid;\n if (folderId === c.folderId) {\n return true;\n }\n }\n\n if (cmd.organizationid != null) {\n if (cmd.organizationid === 'notnull' && c.organizationId != null) {\n return true;\n }\n const organizationId = cmd.organizationid === 'null' ? null : cmd.organizationid;\n if (organizationId === c.organizationId) {\n return true;\n }\n }\n\n if (cmd.collectionid != null) {\n if (cmd.collectionid === 'notnull' && c.collectionIds != null && c.collectionIds.length > 0) {\n return true;\n }\n const collectionId = cmd.collectionid === 'null' ? null : cmd.collectionid;\n if (collectionId == null && (c.collectionIds == null || c.collectionIds.length === 0)) {\n return true;\n }\n if (collectionId != null && c.collectionIds != null && c.collectionIds.indexOf(collectionId) > -1) {\n return true;\n }\n }\n return false;\n });\n } else if (cmd.search == null || cmd.search.trim() === '') {\n ciphers = ciphers.filter((c) => cmd.trash === c.isDeleted);\n }\n\n if (cmd.search != null && cmd.search.trim() !== '') {\n ciphers = this.searchService.searchCiphersBasic(ciphers, cmd.search, cmd.trash);\n }\n\n const res = new ListResponse(ciphers.map((o) => new CipherResponse(o)));\n return Response.success(res);\n }\n\n private async listFolders(cmd: program.Command) {\n let folders = await this.folderService.getAllDecrypted();\n\n if (cmd.search != null && cmd.search.trim() !== '') {\n folders = CliUtils.searchFolders(folders, cmd.search);\n }\n\n const res = new ListResponse(folders.map((o) => new FolderResponse(o)));\n return Response.success(res);\n }\n\n private async listCollections(cmd: program.Command) {\n let collections = await this.collectionService.getAllDecrypted();\n\n if (cmd.organizationid != null) {\n collections = collections.filter((c) => {\n if (cmd.organizationid === c.organizationId) {\n return true;\n }\n return false;\n });\n }\n\n if (cmd.search != null && cmd.search.trim() !== '') {\n collections = CliUtils.searchCollections(collections, cmd.search);\n }\n\n const res = new ListResponse(collections.map((o) => new CollectionResponse(o)));\n return Response.success(res);\n }\n\n private async listOrganizationCollections(cmd: program.Command) {\n if (cmd.organizationid == null || cmd.organizationid === '') {\n return Response.badRequest('--organizationid <organizationid> required.');\n }\n if (!Utils.isGuid(cmd.organizationid)) {\n return Response.error('`' + cmd.organizationid + '` is not a GUID.');\n }\n const organization = await this.userService.getOrganization(cmd.organizationid);\n if (organization == null) {\n return Response.error('Organization not found.');\n }\n\n try {\n let response: ApiListResponse<ApiCollectionResponse>;\n if (organization.isAdmin) {\n response = await this.apiService.getCollections(cmd.organizationid);\n } else {\n response = await this.apiService.getUserCollections();\n }\n const collections = response.data.filter((c) => c.organizationId === cmd.organizationid).map((r) =>\n new Collection(new CollectionData(r as ApiCollectionDetailsResponse)));\n let decCollections = await this.collectionService.decryptMany(collections);\n if (cmd.search != null && cmd.search.trim() !== '') {\n decCollections = CliUtils.searchCollections(decCollections, cmd.search);\n }\n const res = new ListResponse(decCollections.map((o) => new CollectionResponse(o)));\n return Response.success(res);\n } catch (e) {\n return Response.error(e);\n }\n }\n\n private async listOrganizationMembers(cmd: program.Command) {\n if (cmd.organizationid == null || cmd.organizationid === '') {\n return Response.badRequest('--organizationid <organizationid> required.');\n }\n if (!Utils.isGuid(cmd.organizationid)) {\n return Response.error('`' + cmd.organizationid + '` is not a GUID.');\n }\n const organization = await this.userService.getOrganization(cmd.organizationid);\n if (organization == null) {\n return Response.error('Organization not found.');\n }\n\n try {\n const response = await this.apiService.getOrganizationUsers(cmd.organizationid);\n const res = new ListResponse(response.data.map((r) => {\n const u = new OrganizationUserResponse();\n u.email = r.email;\n u.name = r.name;\n u.id = r.id;\n u.status = r.status;\n u.type = r.type;\n u.twoFactorEnabled = r.twoFactorEnabled;\n return u;\n }));\n return Response.success(res);\n } catch (e) {\n return Response.error(e);\n }\n }\n\n private async listOrganizations(cmd: program.Command) {\n let organizations = await this.userService.getAllOrganizations();\n\n if (cmd.search != null && cmd.search.trim() !== '') {\n organizations = CliUtils.searchOrganizations(organizations, cmd.search);\n }\n\n const res = new ListResponse(organizations.map((o) => new OrganizationResponse(o)));\n return Response.success(res);\n }\n}\n","import * as program from 'commander';\n\nimport { VaultTimeoutService } from 'jslib/abstractions/vaultTimeout.service';\n\nimport { Response } from 'jslib/cli/models/response';\nimport { MessageResponse } from 'jslib/cli/models/response/messageResponse';\n\nexport class LockCommand {\n constructor(private vaultTimeoutService: VaultTimeoutService) { }\n\n async run(cmd: program.Command) {\n await this.vaultTimeoutService.lock();\n process.env.BW_SESSION = null;\n const res = new MessageResponse('Your vault is locked.', null);\n return Response.success(res);\n }\n}\n","export class PasswordVerificationRequest {\n masterPasswordHash: string;\n}\n","import { PasswordVerificationRequest } from './passwordVerificationRequest';\n\nexport class TwoFactorEmailRequest extends PasswordVerificationRequest {\n email: string;\n\n constructor(email: string, masterPasswordHash: string) {\n super();\n this.masterPasswordHash = masterPasswordHash;\n this.email = email;\n }\n}\n","import * as program from 'commander';\nimport * as inquirer from 'inquirer';\n\nimport { TwoFactorProviderType } from '../../enums/twoFactorProviderType';\n\nimport { AuthResult } from '../../models/domain/authResult';\nimport { TwoFactorEmailRequest } from '../../models/request/twoFactorEmailRequest';\n\nimport { ApiService } from '../../abstractions/api.service';\nimport { AuthService } from '../../abstractions/auth.service';\nimport { I18nService } from '../../abstractions/i18n.service';\n\nimport { Response } from '../models/response';\n\nimport { MessageResponse } from '../models/response/messageResponse';\n\nimport { NodeUtils } from '../../misc/nodeUtils';\n\nexport class LoginCommand {\n protected validatedParams: () => Promise<any>;\n protected success: () => Promise<MessageResponse>;\n\n constructor(protected authService: AuthService, protected apiService: ApiService,\n protected i18nService: I18nService) { }\n\n async run(email: string, password: string, cmd: program.Command) {\n const canInteract = process.env.BW_NOINTERACTION !== 'true';\n if ((email == null || email === '') && canInteract) {\n const answer: inquirer.Answers = await inquirer.createPromptModule({ output: process.stderr })({\n type: 'input',\n name: 'email',\n message: 'Email address:',\n });\n email = answer.email;\n }\n if (email == null || email.trim() === '') {\n return Response.badRequest('Email address is required.');\n }\n if (email.indexOf('@') === -1) {\n return Response.badRequest('Email address is invalid.');\n }\n\n if (password == null || password === '') {\n if (cmd.passwordfile) {\n password = await NodeUtils.readFirstLine(cmd.passwordfile);\n } else if (cmd.passwordenv && process.env[cmd.passwordenv]) {\n password = process.env[cmd.passwordenv];\n } else if (canInteract) {\n const answer: inquirer.Answers = await inquirer.createPromptModule({ output: process.stderr })({\n type: 'password',\n name: 'password',\n message: 'Master password:',\n });\n password = answer.password;\n }\n }\n\n if (password == null || password === '') {\n return Response.badRequest('Master password is required.');\n }\n\n let twoFactorToken: string = cmd.code;\n let twoFactorMethod: TwoFactorProviderType = null;\n try {\n if (cmd.method != null) {\n twoFactorMethod = parseInt(cmd.method, null);\n }\n } catch (e) {\n return Response.error('Invalid two-step login method.');\n }\n\n try {\n if (this.validatedParams != null) {\n await this.validatedParams();\n }\n\n let response: AuthResult = null;\n if (twoFactorToken != null && twoFactorMethod != null) {\n response = await this.authService.logInComplete(email, password, twoFactorMethod,\n twoFactorToken, false);\n } else {\n response = await this.authService.logIn(email, password);\n if (response.twoFactor) {\n let selectedProvider: any = null;\n const twoFactorProviders = this.authService.getSupportedTwoFactorProviders(null);\n if (twoFactorProviders.length === 0) {\n return Response.badRequest('No providers available for this client.');\n }\n\n if (twoFactorMethod != null) {\n try {\n selectedProvider = twoFactorProviders.filter((p) => p.type === twoFactorMethod)[0];\n } catch (e) {\n return Response.error('Invalid two-step login method.');\n }\n }\n\n if (selectedProvider == null) {\n if (twoFactorProviders.length === 1) {\n selectedProvider = twoFactorProviders[0];\n } else if (canInteract) {\n const options = twoFactorProviders.map((p) => p.name);\n options.push(new inquirer.Separator());\n options.push('Cancel');\n const answer: inquirer.Answers =\n await inquirer.createPromptModule({ output: process.stderr })({\n type: 'list',\n name: 'method',\n message: 'Two-step login method:',\n choices: options,\n });\n const i = options.indexOf(answer.method);\n if (i === (options.length - 1)) {\n return Response.error('Login failed.');\n }\n selectedProvider = twoFactorProviders[i];\n }\n if (selectedProvider == null) {\n return Response.error('Login failed. No provider selected.');\n }\n }\n\n if (twoFactorToken == null && response.twoFactorProviders.size > 1 &&\n selectedProvider.type === TwoFactorProviderType.Email) {\n const emailReq = new TwoFactorEmailRequest(this.authService.email,\n this.authService.masterPasswordHash);\n await this.apiService.postTwoFactorEmail(emailReq);\n }\n\n if (twoFactorToken == null) {\n if (canInteract) {\n const answer: inquirer.Answers =\n await inquirer.createPromptModule({ output: process.stderr })({\n type: 'input',\n name: 'token',\n message: 'Two-step login code:',\n });\n twoFactorToken = answer.token;\n }\n if (twoFactorToken == null || twoFactorToken === '') {\n return Response.badRequest('Code is required.');\n }\n }\n\n response = await this.authService.logInTwoFactor(selectedProvider.type,\n twoFactorToken, false);\n }\n }\n\n if (response.twoFactor) {\n return Response.error('Login failed.');\n }\n\n if (this.success != null) {\n const res = await this.success();\n return Response.success(res);\n } else {\n const res = new MessageResponse('You are logged in!', null);\n return Response.success(res);\n }\n } catch (e) {\n return Response.error(e);\n }\n }\n}\n","import { ApiService } from 'jslib/abstractions/api.service';\nimport { AuthService } from 'jslib/abstractions/auth.service';\nimport { CryptoFunctionService } from 'jslib/abstractions/cryptoFunction.service';\nimport { I18nService } from 'jslib/abstractions/i18n.service';\nimport { SyncService } from 'jslib/abstractions/sync.service';\n\nimport { MessageResponse } from 'jslib/cli/models/response/messageResponse';\n\nimport { Utils } from 'jslib/misc/utils';\n\nimport { LoginCommand as BaseLoginCommand } from 'jslib/cli/commands/login.command';\n\nexport class LoginCommand extends BaseLoginCommand {\n constructor(authService: AuthService, apiService: ApiService,\n cryptoFunctionService: CryptoFunctionService, syncService: SyncService,\n i18nService: I18nService) {\n super(authService, apiService, i18nService);\n this.validatedParams = async () => {\n const key = await cryptoFunctionService.randomBytes(64);\n process.env.BW_SESSION = Utils.fromBufferToB64(key);\n };\n this.success = async () => {\n await syncService.fullSync(true);\n const res = new MessageResponse('You are logged in!', '\\n' +\n 'To unlock your vault, set your session key to the `BW_SESSION` environment variable. ex:\\n' +\n '$ export BW_SESSION=\"' + process.env.BW_SESSION + '\"\\n' +\n '> $env:BW_SESSION=\"' + process.env.BW_SESSION + '\"\\n\\n' +\n 'You can also pass the session key to any command with the `--session` option. ex:\\n' +\n '$ bw list items --session ' + process.env.BW_SESSION);\n res.raw = process.env.BW_SESSION;\n return res;\n };\n }\n}\n","import * as program from 'commander';\n\nimport { CipherService } from 'jslib/abstractions/cipher.service';\n\nimport { Response } from 'jslib/cli/models/response';\n\nexport class RestoreCommand {\n constructor(private cipherService: CipherService) { }\n\n async run(object: string, id: string, cmd: program.Command): Promise<Response> {\n if (id != null) {\n id = id.toLowerCase();\n }\n\n switch (object.toLowerCase()) {\n case 'item':\n return await this.restoreCipher(id, cmd);\n default:\n return Response.badRequest('Unknown object.');\n }\n }\n\n private async restoreCipher(id: string, cmd: program.Command) {\n const cipher = await this.cipherService.get(id);\n if (cipher == null) {\n return Response.notFound();\n }\n if (cipher.deletedDate == null) {\n return Response.badRequest('Cipher is not in trash.');\n }\n\n try {\n await this.cipherService.restoreWithServer(id);\n return Response.success();\n } catch (e) {\n return Response.error(e);\n }\n }\n}\n","import * as program from 'commander';\n\nimport { CipherService } from 'jslib/abstractions/cipher.service';\n\nimport { Response } from 'jslib/cli/models/response';\n\nimport { CipherResponse } from '../models/response/cipherResponse';\n\nimport { CliUtils } from '../utils';\n\nexport class ShareCommand {\n constructor(private cipherService: CipherService) { }\n\n async run(id: string, organizationId: string, requestJson: string, cmd: program.Command): Promise<Response> {\n if (requestJson == null || requestJson === '') {\n requestJson = await CliUtils.readStdin();\n }\n\n if (requestJson == null || requestJson === '') {\n return Response.badRequest('`requestJson` was not provided.');\n }\n\n let req: string[] = [];\n try {\n const reqJson = Buffer.from(requestJson, 'base64').toString();\n req = JSON.parse(reqJson);\n if (req == null || req.length === 0) {\n return Response.badRequest('You must provide at least one collection id for this item.');\n }\n } catch (e) {\n return Response.badRequest('Error parsing the encoded request data.');\n }\n\n if (id != null) {\n id = id.toLowerCase();\n }\n if (organizationId != null) {\n organizationId = organizationId.toLowerCase();\n }\n\n const cipher = await this.cipherService.get(id);\n if (cipher == null) {\n return Response.notFound();\n }\n if (cipher.organizationId != null) {\n return Response.badRequest('This item already belongs to an organization.');\n }\n const cipherView = await cipher.decrypt();\n try {\n await this.cipherService.shareWithServer(cipherView, organizationId, req);\n const updatedCipher = await this.cipherService.get(cipher.id);\n const decCipher = await updatedCipher.decrypt();\n const res = new CipherResponse(decCipher);\n return Response.success(res);\n } catch (e) {\n return Response.error(e);\n }\n }\n}\n","import * as program from 'commander';\n\nimport { SyncService } from 'jslib/abstractions/sync.service';\n\nimport { Response } from 'jslib/cli/models/response';\nimport { MessageResponse } from 'jslib/cli/models/response/messageResponse';\nimport { StringResponse } from 'jslib/cli/models/response/stringResponse';\n\nexport class SyncCommand {\n constructor(private syncService: SyncService) { }\n\n async run(cmd: program.Command): Promise<Response> {\n if (cmd.last || false) {\n return await this.getLastSync();\n }\n\n try {\n const result = await this.syncService.fullSync(cmd.force || false);\n const res = new MessageResponse('Syncing complete.', null);\n return Response.success(res);\n } catch (e) {\n return Response.error(e);\n }\n }\n\n private async getLastSync() {\n const lastSyncDate = await this.syncService.getLastSync();\n const res = new StringResponse(lastSyncDate == null ? null : lastSyncDate.toISOString());\n return Response.success(res);\n }\n}\n","import * as program from 'commander';\nimport * as inquirer from 'inquirer';\n\nimport { CryptoService } from 'jslib/abstractions/crypto.service';\nimport { CryptoFunctionService } from 'jslib/abstractions/cryptoFunction.service';\nimport { UserService } from 'jslib/abstractions/user.service';\n\nimport { Response } from 'jslib/cli/models/response';\nimport { MessageResponse } from 'jslib/cli/models/response/messageResponse';\n\nimport { Utils } from 'jslib/misc/utils';\n\nexport class UnlockCommand {\n constructor(private cryptoService: CryptoService, private userService: UserService,\n private cryptoFunctionService: CryptoFunctionService) { }\n\n async run(password: string, cmd: program.Command) {\n const canInteract = process.env.BW_NOINTERACTION !== 'true';\n if ((password == null || password === '') && canInteract) {\n const answer: inquirer.Answers = await inquirer.createPromptModule({ output: process.stderr })({\n type: 'password',\n name: 'password',\n message: 'Master password:',\n });\n password = answer.password;\n }\n if (password == null || password === '') {\n return Response.badRequest('Master password is required.');\n }\n\n this.setNewSessionKey();\n const email = await this.userService.getEmail();\n const kdf = await this.userService.getKdf();\n const kdfIterations = await this.userService.getKdfIterations();\n const key = await this.cryptoService.makeKey(password, email, kdf, kdfIterations);\n const keyHash = await this.cryptoService.hashPassword(password, key);\n const storedKeyHash = await this.cryptoService.getKeyHash();\n if (storedKeyHash != null && keyHash != null && storedKeyHash === keyHash) {\n await this.cryptoService.setKey(key);\n const res = new MessageResponse('Your vault is now unlocked!', '\\n' +\n 'To unlock your vault, set your session key to the `BW_SESSION` environment variable. ex:\\n' +\n '$ export BW_SESSION=\"' + process.env.BW_SESSION + '\"\\n' +\n '> $env:BW_SESSION=\"' + process.env.BW_SESSION + '\"\\n\\n' +\n 'You can also pass the session key to any command with the `--session` option. ex:\\n' +\n '$ bw list items --session ' + process.env.BW_SESSION);\n res.raw = process.env.BW_SESSION;\n return Response.success(res);\n } else {\n return Response.error('Invalid master password.');\n }\n }\n\n private async setNewSessionKey() {\n const key = await this.cryptoFunctionService.randomBytes(64);\n process.env.BW_SESSION = Utils.fromBufferToB64(key);\n }\n}\n","import * as program from 'commander';\n\nimport { Response } from 'jslib/cli/models/response';\nimport { MessageResponse } from 'jslib/cli/models/response/messageResponse';\n\ninterface IOption {\n long: string;\n short: string;\n description: string;\n}\n\ninterface ICommand {\n commands?: ICommand[];\n options?: IOption[];\n _name: string;\n _description: string;\n}\n\nconst validShells = ['zsh'];\n\nexport class CompletionCommand {\n async run(cmd: program.Command) {\n const shell: typeof validShells[number] = cmd.shell;\n\n if (!shell) {\n return Response.badRequest('`shell` was not provided.');\n }\n\n if (!validShells.includes(shell)) {\n return Response.badRequest('Unsupported shell.');\n }\n\n let content = '';\n\n if (shell === 'zsh') {\n content = this.zshCompletion('bw', cmd.parent).render();\n }\n\n const res = new MessageResponse(content, null);\n return Response.success(res);\n }\n\n private zshCompletion(rootName: string, rootCommand: ICommand) {\n return {\n render: () => {\n return [\n `#compdef _${rootName} ${rootName}`,\n '',\n this.renderCommandBlock(rootName, rootCommand),\n ].join('\\n');\n },\n };\n }\n\n private renderCommandBlock(name: string, command: ICommand): string {\n const { commands = [], options = [] } = command;\n const hasOptions = options.length > 0;\n const hasCommands = commands.length > 0;\n\n const args = options\n .map(({ long, short, description }) => {\n const aliases = [short, long].filter(Boolean);\n const opts = aliases.join(',');\n const desc = `[${description.replace(`'`, `'\"'\"'`)}]`;\n return aliases.length > 1 ? `'(${aliases.join(' ')})'{${opts}}'${desc}'` : `'${opts}${desc}'`;\n }).concat(`'(-h --help)'{-h,--help}'[output usage information]'`,\n hasCommands ? '\"1: :->cmnds\"' : null,\n '\"*::arg:->args\"',\n ).filter(Boolean);\n\n const commandBlockFunctionParts = [];\n\n if (hasCommands) {\n commandBlockFunctionParts.push('local -a commands');\n }\n\n if (hasOptions) {\n commandBlockFunctionParts.push(`_arguments -C \\\\\\n ${args.join(` \\\\\\n `)}`);\n }\n\n if (hasCommands) {\n commandBlockFunctionParts.push(\n `case $state in\n cmnds)\n commands=(\n ${commands.map(({ _name, _description }) => `\"${_name}:${_description}\"`).join('\\n ')}\n )\n _describe \"command\" commands\n ;;\n esac\n\n case \"$words[1]\" in\n ${commands.map(({ _name }) => [`${_name})`, `_${name}_${_name}`, ';;'].join('\\n ')).join('\\n ')}\n esac`,\n );\n }\n\n const commandBlocParts = [\n `function _${name} {\\n ${commandBlockFunctionParts.join('\\n\\n ')}\\n}`,\n ];\n\n if (hasCommands) {\n commandBlocParts.push(\n commands.map((c) => this.renderCommandBlock(`${name}_${c._name}`, c)).join('\\n\\n'),\n );\n }\n\n return commandBlocParts.join('\\n\\n');\n }\n}\n","import * as program from 'commander';\n\nimport { AuthService } from '../../abstractions/auth.service';\nimport { I18nService } from '../../abstractions/i18n.service';\n\nimport { Response } from '../models/response';\nimport { MessageResponse } from '../models/response/messageResponse';\n\nexport class LogoutCommand {\n constructor(private authService: AuthService, private i18nService: I18nService,\n private logoutCallback: () => Promise<void>) { }\n\n async run(cmd: program.Command) {\n await this.logoutCallback();\n this.authService.logOut(() => { /* Do nothing */ });\n const res = new MessageResponse('You have logged out.', null);\n return Response.success(res);\n }\n}\n","import * as program from 'commander';\nimport * as fetch from 'node-fetch';\n\nimport { I18nService } from '../../abstractions/i18n.service';\nimport { PlatformUtilsService } from '../../abstractions/platformUtils.service';\n\nimport { Response } from '../models/response';\nimport { MessageResponse } from '../models/response/messageResponse';\n\nexport class UpdateCommand {\n inPkg: boolean = false;\n\n constructor(private platformUtilsService: PlatformUtilsService, private i18nService: I18nService,\n private repoName: string, private executableName: string, private showExtendedMessage: boolean) {\n this.inPkg = !!(process as any).pkg;\n }\n\n async run(cmd: program.Command): Promise<Response> {\n const currentVersion = this.platformUtilsService.getApplicationVersion();\n\n const response = await fetch.default('https://api.github.com/repos/bitwarden/' +\n this.repoName + '/releases/latest');\n if (response.status === 200) {\n const responseJson = await response.json();\n const res = new MessageResponse(null, null);\n\n const tagName: string = responseJson.tag_name;\n if (tagName === ('v' + currentVersion)) {\n res.title = 'No update available.';\n res.noColor = true;\n return Response.success(res);\n }\n\n let downloadUrl: string = null;\n if (responseJson.assets != null) {\n for (const a of responseJson.assets) {\n const download: string = a.browser_download_url;\n if (download == null) {\n continue;\n }\n\n if (download.indexOf('.zip') === -1) {\n continue;\n }\n\n if (process.platform === 'win32' && download.indexOf(this.executableName + '-windows') > -1) {\n downloadUrl = download;\n break;\n } else if (process.platform === 'darwin' && download.indexOf(this.executableName + '-macos') > -1) {\n downloadUrl = download;\n break;\n } else if (process.platform === 'linux' && download.indexOf(this.executableName + '-linux') > -1) {\n downloadUrl = download;\n break;\n }\n }\n }\n\n res.title = 'A new version is available: ' + tagName;\n if (downloadUrl == null) {\n downloadUrl = 'https://github.com/bitwarden/' + this.repoName + '/releases';\n } else {\n res.raw = downloadUrl;\n }\n res.message = '';\n if (responseJson.body != null && responseJson.body !== '') {\n res.message = responseJson.body + '\\n\\n';\n }\n\n res.message += 'You can download this update at ' + downloadUrl;\n\n if (this.showExtendedMessage) {\n if (this.inPkg) {\n res.message += '\\n\\nIf you installed this CLI through a package manager ' +\n 'you should probably update using its update command instead.';\n } else {\n res.message += '\\n\\nIf you installed this CLI through NPM ' +\n 'you should update using `npm install -g @bitwarden/' + this.repoName + '`';\n }\n }\n return Response.success(res);\n } else {\n return Response.error('Error contacting update API: ' + response.status);\n }\n }\n}\n","import * as chk from 'chalk';\n\nimport { Response } from './models/response';\nimport { ListResponse } from './models/response/listResponse';\nimport { MessageResponse } from './models/response/messageResponse';\nimport { StringResponse } from './models/response/stringResponse';\n\nimport { UserService } from '../abstractions/user.service';\n\nconst chalk = chk.default;\n\nexport abstract class BaseProgram {\n constructor(\n private userService: UserService,\n private writeLn: (s: string, finalLine: boolean, error: boolean) => void) { }\n\n protected processResponse(response: Response, exitImmediately = false, dataProcessor: () => string = null) {\n if (!response.success) {\n if (process.env.BW_QUIET !== 'true') {\n if (process.env.BW_RESPONSE === 'true') {\n this.writeLn(this.getJson(response), true, true);\n } else {\n this.writeLn(chalk.redBright(response.message), true, true);\n }\n }\n if (exitImmediately) {\n process.exit(1);\n } else {\n process.exitCode = 1;\n }\n return;\n }\n\n if (process.env.BW_RESPONSE === 'true') {\n this.writeLn(this.getJson(response), true, false);\n } else if (response.data != null) {\n let out: string = dataProcessor != null ? dataProcessor() : null;\n if (out == null) {\n if (response.data.object === 'string') {\n const data = (response.data as StringResponse).data;\n if (data != null) {\n out = data;\n }\n } else if (response.data.object === 'list') {\n out = this.getJson((response.data as ListResponse).data);\n } else if (response.data.object === 'message') {\n out = this.getMessage(response);\n } else {\n out = this.getJson(response.data);\n }\n }\n\n if (out != null && process.env.BW_QUIET !== 'true') {\n this.writeLn(out, true, false);\n }\n }\n if (exitImmediately) {\n process.exit(0);\n } else {\n process.exitCode = 0;\n }\n }\n\n protected getJson(obj: any): string {\n if (process.env.BW_PRETTY === 'true') {\n return JSON.stringify(obj, null, ' ');\n } else {\n return JSON.stringify(obj);\n }\n }\n\n protected getMessage(response: Response): string {\n const message = (response.data as MessageResponse);\n if (process.env.BW_RAW === 'true') {\n return message.raw;\n }\n\n let out: string = '';\n if (message.title != null) {\n if (message.noColor) {\n out = message.title;\n } else {\n out = chalk.greenBright(message.title);\n }\n }\n if (message.message != null) {\n if (message.title != null) {\n out += '\\n';\n }\n out += message.message;\n }\n return out.trim() === '' ? null : out;\n }\n\n protected async exitIfAuthed() {\n const authed = await this.userService.isAuthenticated();\n if (authed) {\n const email = await this.userService.getEmail();\n this.processResponse(Response.error('You are already logged in as ' + email + '.'), true);\n }\n }\n\n protected async exitIfNotAuthed() {\n const authed = await this.userService.isAuthenticated();\n if (!authed) {\n this.processResponse(Response.error('You are not logged in.'), true);\n }\n }\n}\n","import * as chk from 'chalk';\nimport * as program from 'commander';\n\nimport { Main } from './bw';\n\nimport { ConfigCommand } from './commands/config.command';\nimport { ConfirmCommand } from './commands/confirm.command';\nimport { CreateCommand } from './commands/create.command';\nimport { DeleteCommand } from './commands/delete.command';\nimport { EditCommand } from './commands/edit.command';\nimport { EncodeCommand } from './commands/encode.command';\nimport { ExportCommand } from './commands/export.command';\nimport { GenerateCommand } from './commands/generate.command';\nimport { GetCommand } from './commands/get.command';\nimport { ImportCommand } from './commands/import.command';\nimport { ListCommand } from './commands/list.command';\nimport { LockCommand } from './commands/lock.command';\nimport { LoginCommand } from './commands/login.command';\nimport { RestoreCommand } from './commands/restore.command';\nimport { ShareCommand } from './commands/share.command';\nimport { SyncCommand } from './commands/sync.command';\nimport { UnlockCommand } from './commands/unlock.command';\n\nimport { CompletionCommand } from './commands/completion.command';\n\nimport { LogoutCommand } from 'jslib/cli/commands/logout.command';\nimport { UpdateCommand } from 'jslib/cli/commands/update.command';\n\nimport { Response } from 'jslib/cli/models/response';\nimport { MessageResponse } from 'jslib/cli/models/response/messageResponse';\n\nimport { TemplateResponse } from './models/response/templateResponse';\nimport { CliUtils } from './utils';\n\nimport { BaseProgram } from 'jslib/cli/baseProgram';\n\nconst chalk = chk.default;\nconst writeLn = CliUtils.writeLn;\n\nexport class Program extends BaseProgram {\n constructor(private main: Main) {\n super(main.userService, writeLn);\n }\n\n run() {\n program\n .option('--pretty', 'Format output. JSON is tabbed with two spaces.')\n .option('--raw', 'Return raw output instead of a descriptive message.')\n .option('--response', 'Return a JSON formatted version of response output.')\n .option('--quiet', 'Don\\'t return anything to stdout.')\n .option('--nointeraction', 'Do not prompt for interactive user input.')\n .option('--session <session>', 'Pass session key instead of reading from env.')\n .version(this.main.platformUtilsService.getApplicationVersion(), '-v, --version');\n\n program.on('option:pretty', () => {\n process.env.BW_PRETTY = 'true';\n });\n\n program.on('option:raw', () => {\n process.env.BW_RAW = 'true';\n });\n\n program.on('option:quiet', () => {\n process.env.BW_QUIET = 'true';\n });\n\n program.on('option:response', () => {\n process.env.BW_RESPONSE = 'true';\n });\n\n program.on('option:nointeraction', () => {\n process.env.BW_NOINTERACTION = 'true';\n });\n\n program.on('option:session', (key) => {\n process.env.BW_SESSION = key;\n });\n\n program.on('command:*', () => {\n writeLn(chalk.redBright('Invalid command: ' + program.args.join(' ')), false, true);\n writeLn('See --help for a list of available commands.', true, true);\n process.exitCode = 1;\n });\n\n program.on('--help', () => {\n writeLn('\\n Examples:');\n writeLn('');\n writeLn(' bw login');\n writeLn(' bw lock');\n writeLn(' bw unlock myPassword321');\n writeLn(' bw list --help');\n writeLn(' bw list items --search google');\n writeLn(' bw get item 99ee88d2-6046-4ea7-92c2-acac464b1412');\n writeLn(' bw get password google.com');\n writeLn(' echo \\'{\"name\":\"My Folder\"}\\' | bw encode');\n writeLn(' bw create folder eyJuYW1lIjoiTXkgRm9sZGVyIn0K');\n writeLn(' bw edit folder c7c7b60b-9c61-40f2-8ccd-36c49595ed72 eyJuYW1lIjoiTXkgRm9sZGVyMiJ9Cg==');\n writeLn(' bw delete item 99ee88d2-6046-4ea7-92c2-acac464b1412');\n writeLn(' bw generate -lusn --length 18');\n writeLn(' bw config server https://bitwarden.example.com');\n writeLn('', true);\n });\n\n program\n .command('login [email] [password]')\n .description('Log into a user account.')\n .option('--method <method>', 'Two-step login method.')\n .option('--code <code>', 'Two-step login code.')\n .option('--check', 'Check login status.', async () => {\n const authed = await this.main.userService.isAuthenticated();\n if (authed) {\n const res = new MessageResponse('You are logged in!', null);\n this.processResponse(Response.success(res), true);\n }\n this.processResponse(Response.error('You are not logged in.'), true);\n })\n .on('--help', () => {\n writeLn('\\n Notes:');\n writeLn('');\n writeLn(' See docs for valid `method` enum values.');\n writeLn('');\n writeLn(' Pass `--raw` option to only return the session key.');\n writeLn('');\n writeLn(' Examples:');\n writeLn('');\n writeLn(' bw login');\n writeLn(' bw login john@example.com myPassword321 --raw');\n writeLn(' bw login john@example.com myPassword321 --method 1 --code 249213');\n writeLn('', true);\n })\n .action(async (email: string, password: string, cmd: program.Command) => {\n if (!cmd.check) {\n await this.exitIfAuthed();\n const command = new LoginCommand(this.main.authService, this.main.apiService,\n this.main.cryptoFunctionService, this.main.syncService, this.main.i18nService);\n const response = await command.run(email, password, cmd);\n this.processResponse(response);\n }\n });\n\n program\n .command('logout')\n .description('Log out of the current user account.')\n .on('--help', () => {\n writeLn('\\n Examples:');\n writeLn('');\n writeLn(' bw logout');\n writeLn('', true);\n })\n .action(async (cmd) => {\n await this.exitIfNotAuthed();\n const command = new LogoutCommand(this.main.authService, this.main.i18nService,\n async () => await this.main.logout());\n const response = await command.run(cmd);\n this.processResponse(response);\n });\n\n program\n .command('lock')\n .description('Lock the vault and destroy active session keys.')\n .on('--help', () => {\n writeLn('\\n Examples:');\n writeLn('');\n writeLn(' bw lock');\n writeLn('', true);\n })\n .action(async (cmd) => {\n await this.exitIfNotAuthed();\n const command = new LockCommand(this.main.vaultTimeoutService);\n const response = await command.run(cmd);\n this.processResponse(response);\n });\n\n program\n .command('unlock [password]')\n .description('Unlock the vault and return a new session key.')\n .on('--help', () => {\n writeLn('\\n Notes:');\n writeLn('');\n writeLn(' After unlocking, any previous session keys will no longer be valid.');\n writeLn('');\n writeLn(' Pass `--raw` option to only return the session key.');\n writeLn('');\n writeLn(' Examples:');\n writeLn('');\n writeLn(' bw unlock');\n writeLn(' bw unlock myPassword321');\n writeLn(' bw unlock myPassword321 --raw');\n writeLn('', true);\n })\n .option('--check', 'Check lock status.', async () => {\n const locked = await this.main.vaultTimeoutService.isLocked();\n if (!locked) {\n const res = new MessageResponse('Vault is unlocked!', null);\n this.processResponse(Response.success(res), true);\n }\n this.processResponse(Response.error('Vault is locked.'), true);\n })\n .action(async (password, cmd) => {\n if (!cmd.check) {\n await this.exitIfNotAuthed();\n const command = new UnlockCommand(this.main.cryptoService, this.main.userService,\n this.main.cryptoFunctionService);\n const response = await command.run(password, cmd);\n this.processResponse(response);\n }\n });\n\n program\n .command('sync')\n .description('Pull the latest vault data from server.')\n .option('-f, --force', 'Force a full sync.')\n .option('--last', 'Get the last sync date.')\n .on('--help', () => {\n writeLn('\\n Examples:');\n writeLn('');\n writeLn(' bw sync');\n writeLn(' bw sync -f');\n writeLn(' bw sync --last');\n writeLn('', true);\n })\n .action(async (cmd) => {\n await this.exitIfLocked();\n const command = new SyncCommand(this.main.syncService);\n const response = await command.run(cmd);\n this.processResponse(response);\n });\n\n program\n .command('list <object>')\n .description('List an array of objects from the vault.')\n .option('--search <search>', 'Perform a search on the listed objects.')\n .option('--url <url>', 'Filter items of type login with a url-match search.')\n .option('--folderid <folderid>', 'Filter items by folder id.')\n .option('--collectionid <collectionid>', 'Filter items by collection id.')\n .option('--organizationid <organizationid>', 'Filter items or collections by organization id.')\n .option('--trash', 'Filter items that are deleted and in the trash.')\n .on('--help', () => {\n writeLn('\\n Objects:');\n writeLn('');\n writeLn(' items');\n writeLn(' folders');\n writeLn(' collections');\n writeLn(' organizations');\n writeLn(' org-collections');\n writeLn(' org-members');\n writeLn('');\n writeLn(' Notes:');\n writeLn('');\n writeLn(' Combining search with a filter performs a logical AND operation.');\n writeLn('');\n writeLn(' Combining multiple filters performs a logical OR operation.');\n writeLn('');\n writeLn(' Examples:');\n writeLn('');\n writeLn(' bw list items');\n writeLn(' bw list items --folderid 60556c31-e649-4b5d-8daf-fc1c391a1bf2');\n writeLn(' bw list items --search google --folderid 60556c31-e649-4b5d-8daf-fc1c391a1bf2');\n writeLn(' bw list items --url https://google.com');\n writeLn(' bw list items --folderid null');\n writeLn(' bw list items --organizationid notnull');\n writeLn(' bw list items --folderid 60556c31-e649-4b5d-8daf-fc1c391a1bf2 --organizationid notnull');\n writeLn(' bw list items --trash');\n writeLn(' bw list folders --search email');\n writeLn(' bw list org-members --organizationid 60556c31-e649-4b5d-8daf-fc1c391a1bf2');\n writeLn('', true);\n })\n .action(async (object, cmd) => {\n await this.exitIfLocked();\n const command = new ListCommand(this.main.cipherService, this.main.folderService,\n this.main.collectionService, this.main.userService, this.main.searchService, this.main.apiService);\n const response = await command.run(object, cmd);\n this.processResponse(response);\n });\n\n program\n .command('get <object> <id>')\n .description('Get an object from the vault.')\n .option('--itemid <itemid>', 'Attachment\\'s item id.')\n .option('--output <output>', 'Output directory or filename for attachment.')\n .option('--organizationid <organizationid>', 'Organization id for an organization object.')\n .on('--help', () => {\n writeLn('\\n Objects:');\n writeLn('');\n writeLn(' item');\n writeLn(' username');\n writeLn(' password');\n writeLn(' uri');\n writeLn(' totp');\n writeLn(' exposed');\n writeLn(' attachment');\n writeLn(' folder');\n writeLn(' collection');\n writeLn(' org-collection');\n writeLn(' organization');\n writeLn(' template');\n writeLn(' fingerprint');\n writeLn('');\n writeLn(' Id:');\n writeLn('');\n writeLn(' Search term or object\\'s globally unique `id`.');\n writeLn('');\n writeLn(' Examples:');\n writeLn('');\n writeLn(' bw get item 99ee88d2-6046-4ea7-92c2-acac464b1412');\n writeLn(' bw get password https://google.com');\n writeLn(' bw get totp google.com');\n writeLn(' bw get exposed yahoo.com');\n writeLn(' bw get attachment b857igwl1dzrs2 --itemid 99ee88d2-6046-4ea7-92c2-acac464b1412 ' +\n '--output ./photo.jpg');\n writeLn(' bw get attachment photo.jpg --itemid 99ee88d2-6046-4ea7-92c2-acac464b1412 --raw');\n writeLn(' bw get folder email');\n writeLn(' bw get template folder');\n writeLn('', true);\n })\n .action(async (object, id, cmd) => {\n await this.exitIfLocked();\n const command = new GetCommand(this.main.cipherService, this.main.folderService,\n this.main.collectionService, this.main.totpService, this.main.auditService,\n this.main.cryptoService, this.main.userService, this.main.searchService,\n this.main.apiService);\n const response = await command.run(object, id, cmd);\n this.processResponse(response);\n });\n\n program\n .command('create <object> [encodedJson]')\n .option('--file <file>', 'Path to file for attachment.')\n .option('--itemid <itemid>', 'Attachment\\'s item id.')\n .option('--organizationid <organizationid>', 'Organization id for an organization object.')\n .description('Create an object in the vault.')\n .on('--help', () => {\n writeLn('\\n Objects:');\n writeLn('');\n writeLn(' item');\n writeLn(' attachment');\n writeLn(' folder');\n writeLn(' org-collection');\n writeLn('');\n writeLn(' Notes:');\n writeLn('');\n writeLn(' `encodedJson` can also be piped into stdin.');\n writeLn('');\n writeLn(' Examples:');\n writeLn('');\n writeLn(' bw create folder eyJuYW1lIjoiTXkgRm9sZGVyIn0K');\n writeLn(' echo \\'eyJuYW1lIjoiTXkgRm9sZGVyIn0K\\' | bw create folder');\n writeLn(' bw create attachment --file ./myfile.csv ' +\n '--itemid 16b15b89-65b3-4639-ad2a-95052a6d8f66');\n writeLn('', true);\n })\n .action(async (object, encodedJson, cmd) => {\n await this.exitIfLocked();\n const command = new CreateCommand(this.main.cipherService, this.main.folderService,\n this.main.userService, this.main.cryptoService, this.main.apiService);\n const response = await command.run(object, encodedJson, cmd);\n this.processResponse(response);\n });\n\n program\n .command('edit <object> <id> [encodedJson]')\n .option('--organizationid <organizationid>', 'Organization id for an organization object.')\n .description('Edit an object from the vault.')\n .on('--help', () => {\n writeLn('\\n Objects:');\n writeLn('');\n writeLn(' item');\n writeLn(' item-collections');\n writeLn(' folder');\n writeLn(' org-collection');\n writeLn('');\n writeLn(' Id:');\n writeLn('');\n writeLn(' Object\\'s globally unique `id`.');\n writeLn('');\n writeLn(' Notes:');\n writeLn('');\n writeLn(' `encodedJson` can also be piped into stdin.');\n writeLn('');\n writeLn(' Examples:');\n writeLn('');\n writeLn(' bw edit folder 5cdfbd80-d99f-409b-915b-f4c5d0241b02 eyJuYW1lIjoiTXkgRm9sZGVyMiJ9Cg==');\n writeLn(' echo \\'eyJuYW1lIjoiTXkgRm9sZGVyMiJ9Cg==\\' | ' +\n 'bw edit folder 5cdfbd80-d99f-409b-915b-f4c5d0241b02');\n writeLn(' bw edit item-collections 78307355-fd25-416b-88b8-b33fd0e88c82 ' +\n 'WyI5NzQwNTNkMC0zYjMzLTRiOTgtODg2ZS1mZWNmNWM4ZGJhOTYiXQ==');\n writeLn('', true);\n })\n .action(async (object, id, encodedJson, cmd) => {\n await this.exitIfLocked();\n const command = new EditCommand(this.main.cipherService, this.main.folderService,\n this.main.cryptoService, this.main.apiService);\n const response = await command.run(object, id, encodedJson, cmd);\n this.processResponse(response);\n });\n\n program\n .command('delete <object> <id>')\n .option('--itemid <itemid>', 'Attachment\\'s item id.')\n .option('--organizationid <organizationid>', 'Organization id for an organization object.')\n .option('-p, --permanent', 'Permanently deletes the item instead of soft-deleting it (item only).')\n .description('Delete an object from the vault.')\n .on('--help', () => {\n writeLn('\\n Objects:');\n writeLn('');\n writeLn(' item');\n writeLn(' attachment');\n writeLn(' folder');\n writeLn(' org-collection');\n writeLn('');\n writeLn(' Id:');\n writeLn('');\n writeLn(' Object\\'s globally unique `id`.');\n writeLn('');\n writeLn(' Examples:');\n writeLn('');\n writeLn(' bw delete item 7063feab-4b10-472e-b64c-785e2b870b92');\n writeLn(' bw delete item 89c21cd2-fab0-4f69-8c6e-ab8a0168f69a --permanent');\n writeLn(' bw delete folder 5cdfbd80-d99f-409b-915b-f4c5d0241b02');\n writeLn(' bw delete attachment b857igwl1dzrs2 --itemid 310d5ffd-e9a2-4451-af87-ea054dce0f78');\n writeLn('', true);\n })\n .action(async (object, id, cmd) => {\n await this.exitIfLocked();\n const command = new DeleteCommand(this.main.cipherService, this.main.folderService,\n this.main.userService, this.main.apiService);\n const response = await command.run(object, id, cmd);\n this.processResponse(response);\n });\n\n program\n .command('restore <object> <id>')\n .description('Restores an object from the trash.')\n .on('--help', () => {\n writeLn('\\n Objects:');\n writeLn('');\n writeLn(' item');\n writeLn('');\n writeLn(' Id:');\n writeLn('');\n writeLn(' Object\\'s globally unique `id`.');\n writeLn('');\n writeLn(' Examples:');\n writeLn('');\n writeLn(' bw restore item 7063feab-4b10-472e-b64c-785e2b870b92');\n writeLn('', true);\n })\n .action(async (object, id, cmd) => {\n await this.exitIfLocked();\n const command = new RestoreCommand(this.main.cipherService);\n const response = await command.run(object, id, cmd);\n this.processResponse(response);\n });\n\n program\n .command('share <id> <organizationId> [encodedJson]')\n .description('Share an item to an organization.')\n .on('--help', () => {\n writeLn('\\n Id:');\n writeLn('');\n writeLn(' Item\\'s globally unique `id`.');\n writeLn('');\n writeLn(' Organization Id:');\n writeLn('');\n writeLn(' Organization\\'s globally unique `id`.');\n writeLn('');\n writeLn(' Notes:');\n writeLn('');\n writeLn(' `encodedJson` can also be piped into stdin. `encodedJson` contains ' +\n 'an array of collection ids.');\n writeLn('');\n writeLn(' Examples:');\n writeLn('');\n writeLn(' bw share 4af958ce-96a7-45d9-beed-1e70fabaa27a 6d82949b-b44d-468a-adae-3f3bacb0ea32 ' +\n 'WyI5NzQwNTNkMC0zYjMzLTRiOTgtODg2ZS1mZWNmNWM4ZGJhOTYiXQ==');\n writeLn(' echo \\'[\"974053d0-3b33-4b98-886e-fecf5c8dba96\"]\\' | bw encode | ' +\n 'bw share 4af958ce-96a7-45d9-beed-1e70fabaa27a 6d82949b-b44d-468a-adae-3f3bacb0ea32');\n writeLn('', true);\n })\n .action(async (id, organizationId, encodedJson, cmd) => {\n await this.exitIfLocked();\n const command = new ShareCommand(this.main.cipherService);\n const response = await command.run(id, organizationId, encodedJson, cmd);\n this.processResponse(response);\n });\n\n program\n .command('confirm <object> <id>')\n .option('--organizationid <organizationid>', 'Organization id for an organization object.')\n .description('Confirm an object to the organization.')\n .on('--help', () => {\n writeLn('\\n Objects:');\n writeLn('');\n writeLn(' org-member');\n writeLn('');\n writeLn(' Id:');\n writeLn('');\n writeLn(' Object\\'s globally unique `id`.');\n writeLn('');\n writeLn(' Examples:');\n writeLn('');\n writeLn(' bw confirm org-member 7063feab-4b10-472e-b64c-785e2b870b92 ' +\n '--organizationid 310d5ffd-e9a2-4451-af87-ea054dce0f78');\n writeLn('', true);\n })\n .action(async (object, id, cmd) => {\n await this.exitIfLocked();\n const command = new ConfirmCommand(this.main.apiService, this.main.cryptoService);\n const response = await command.run(object, id, cmd);\n this.processResponse(response);\n });\n\n program\n .command('import [format] [input]')\n .description('Import vault data from a file.')\n .option('--formats', 'List formats')\n .on('--help', () => {\n writeLn('\\n Examples:');\n writeLn('');\n writeLn(' bw import --formats');\n writeLn(' bw import bitwardencsv ./from/source.csv');\n writeLn(' bw import keepass2xml keepass_backup.xml');\n })\n .action(async (format, filepath, cmd) => {\n await this.exitIfLocked();\n const command = new ImportCommand(this.main.importService);\n const response = await command.run(format, filepath, cmd);\n this.processResponse(response);\n });\n\n program\n .command('export [password]')\n .description('Export vault data to a CSV or JSON file.')\n .option('--output <output>', 'Output directory or filename.')\n .option('--format <format>', 'Export file format.')\n .option('--organizationid <organizationid>', 'Organization id for an organization.')\n .on('--help', () => {\n writeLn('\\n Notes:');\n writeLn('');\n writeLn(' Valid formats are `csv` and `json`. Default format is `csv`.');\n writeLn('');\n writeLn(' Examples:');\n writeLn('');\n writeLn(' bw export');\n writeLn(' bw export myPassword321');\n writeLn(' bw export myPassword321 --format json');\n writeLn(' bw export --output ./exp/bw.csv');\n writeLn(' bw export myPassword321 --output bw.json --format json');\n writeLn(' bw export myPassword321 --organizationid 7063feab-4b10-472e-b64c-785e2b870b92');\n writeLn('', true);\n })\n .action(async (password, cmd) => {\n await this.exitIfLocked();\n const command = new ExportCommand(this.main.cryptoService, this.main.exportService);\n const response = await command.run(password, cmd);\n this.processResponse(response);\n });\n\n program\n .command('generate')\n .description('Generate a password/passphrase.')\n .option('-u, --uppercase', 'Include uppercase characters.')\n .option('-l, --lowercase', 'Include lowercase characters.')\n .option('-n, --number', 'Include numeric characters.')\n .option('-s, --special', 'Include special characters.')\n .option('-p, --passphrase', 'Generate a passphrase.')\n .option('--length <length>', 'Length of the password.')\n .option('--words <words>', 'Number of words.')\n .option('--separator <separator>', 'Word separator.')\n .on('--help', () => {\n writeLn('\\n Notes:');\n writeLn('');\n writeLn(' Default options are `-uln --length 14`.');\n writeLn('');\n writeLn(' Minimum `length` is 5.');\n writeLn('');\n writeLn(' Minimum `words` is 3.');\n writeLn('');\n writeLn(' Examples:');\n writeLn('');\n writeLn(' bw generate');\n writeLn(' bw generate -u -l --length 18');\n writeLn(' bw generate -ulns --length 25');\n writeLn(' bw generate -ul');\n writeLn(' bw generate -p --separator _');\n writeLn(' bw generate -p --words 5 --separator space');\n writeLn('', true);\n })\n .action(async (cmd) => {\n const command = new GenerateCommand(this.main.passwordGenerationService);\n const response = await command.run(cmd);\n this.processResponse(response);\n });\n\n program\n .command('encode')\n .description('Base 64 encode stdin.')\n .on('--help', () => {\n writeLn('\\n Notes:');\n writeLn('');\n writeLn(' Use to create `encodedJson` for `create` and `edit` commands.');\n writeLn('');\n writeLn(' Examples:');\n writeLn('');\n writeLn(' echo \\'{\"name\":\"My Folder\"}\\' | bw encode');\n writeLn('', true);\n })\n .action(async (object, id, cmd) => {\n const command = new EncodeCommand();\n const response = await command.run(cmd);\n this.processResponse(response);\n });\n\n program\n .command('config <setting> [value]')\n .description('Configure CLI settings.')\n .option('--web-vault <url>', 'Provides a custom web vault URL that differs from the base URL.')\n .option('--api <url>', 'Provides a custom API URL that differs from the base URL.')\n .option('--identity <url>', 'Provides a custom identity URL that differs from the base URL.')\n .option('--icons <url>', 'Provides a custom icons service URL that differs from the base URL.')\n .option('--notifications <url>', 'Provides a custom notifications URL that differs from the base URL.')\n .option('--events <url>', 'Provides a custom events URL that differs from the base URL.')\n .on('--help', () => {\n writeLn('\\n Settings:');\n writeLn('');\n writeLn(' server - On-premises hosted installation URL.');\n writeLn('');\n writeLn(' Examples:');\n writeLn('');\n writeLn(' bw config server');\n writeLn(' bw config server https://bw.company.com');\n writeLn(' bw config server bitwarden.com');\n writeLn(' bw config server --api http://localhost:4000 --identity http://localhost:33656');\n writeLn('', true);\n })\n .action(async (setting, value, cmd) => {\n const command = new ConfigCommand(this.main.environmentService);\n const response = await command.run(setting, value, cmd);\n this.processResponse(response);\n });\n\n program\n .command('update')\n .description('Check for updates.')\n .on('--help', () => {\n writeLn('\\n Notes:');\n writeLn('');\n writeLn(' Returns the URL to download the newest version of this CLI tool.');\n writeLn('');\n writeLn(' Use the `--raw` option to return only the download URL for the update.');\n writeLn('');\n writeLn(' Examples:');\n writeLn('');\n writeLn(' bw update');\n writeLn(' bw update --raw');\n writeLn('', true);\n })\n .action(async (cmd) => {\n const command = new UpdateCommand(this.main.platformUtilsService, this.main.i18nService,\n 'cli', 'bw', true);\n const response = await command.run(cmd);\n this.processResponse(response);\n });\n\n program\n .command('completion')\n .description('Generate shell completions.')\n .option('--shell <shell>', 'Shell to generate completions for.')\n .on('--help', () => {\n writeLn('\\n Notes:');\n writeLn('');\n writeLn(' Valid shells are `zsh`.');\n writeLn('');\n writeLn(' Examples:');\n writeLn('');\n writeLn(' bw completion --shell zsh');\n writeLn('', true);\n })\n .action(async (cmd: program.Command) => {\n const command = new CompletionCommand();\n const response = await command.run(cmd);\n this.processResponse(response);\n });\n\n program\n .parse(process.argv);\n\n if (process.argv.slice(2).length === 0) {\n program.outputHelp();\n }\n }\n\n protected processResponse(response: Response, exitImmediately = false) {\n super.processResponse(response, exitImmediately, () => {\n if (response.data.object === 'template') {\n return this.getJson((response.data as TemplateResponse).template);\n }\n return null;\n });\n }\n\n private async exitIfLocked() {\n await this.exitIfNotAuthed();\n const hasKey = await this.main.cryptoService.hasKey();\n if (!hasKey) {\n const canInteract = process.env.BW_NOINTERACTION !== 'true';\n if (canInteract) {\n const command = new UnlockCommand(this.main.cryptoService, this.main.userService,\n this.main.cryptoFunctionService);\n const response = await command.run(null, null);\n if (!response.success) {\n this.processResponse(response, true);\n }\n } else {\n this.processResponse(Response.error('Vault is locked.'), true);\n }\n }\n }\n}\n","import * as fs from 'fs';\nimport * as jsdom from 'jsdom';\nimport * as path from 'path';\n\nimport { AuthService } from 'jslib/services/auth.service';\n\nimport { I18nService } from './services/i18n.service';\nimport { NodeEnvSecureStorageService } from './services/nodeEnvSecureStorage.service';\n\nimport { CliPlatformUtilsService } from 'jslib/cli/services/cliPlatformUtils.service';\n\nimport { AppIdService } from 'jslib/services/appId.service';\nimport { AuditService } from 'jslib/services/audit.service';\nimport { CipherService } from 'jslib/services/cipher.service';\nimport { CollectionService } from 'jslib/services/collection.service';\nimport { ConstantsService } from 'jslib/services/constants.service';\nimport { ContainerService } from 'jslib/services/container.service';\nimport { CryptoService } from 'jslib/services/crypto.service';\nimport { EnvironmentService } from 'jslib/services/environment.service';\nimport { ExportService } from 'jslib/services/export.service';\nimport { FolderService } from 'jslib/services/folder.service';\nimport { ImportService } from 'jslib/services/import.service';\nimport { LowdbStorageService } from 'jslib/services/lowdbStorage.service';\nimport { NodeApiService } from 'jslib/services/nodeApi.service';\nimport { NodeCryptoFunctionService } from 'jslib/services/nodeCryptoFunction.service';\nimport { NoopMessagingService } from 'jslib/services/noopMessaging.service';\nimport { PasswordGenerationService } from 'jslib/services/passwordGeneration.service';\nimport { PolicyService } from 'jslib/services/policy.service';\nimport { SearchService } from 'jslib/services/search.service';\nimport { SettingsService } from 'jslib/services/settings.service';\nimport { SyncService } from 'jslib/services/sync.service';\nimport { TokenService } from 'jslib/services/token.service';\nimport { TotpService } from 'jslib/services/totp.service';\nimport { UserService } from 'jslib/services/user.service';\nimport { VaultTimeoutService } from 'jslib/services/vaultTimeout.service';\n\nimport { Program } from './program';\n\n// Polyfills\n(global as any).DOMParser = new jsdom.JSDOM().window.DOMParser;\n\n// tslint:disable-next-line\nconst packageJson = require('../package.json');\n\nexport class Main {\n messagingService: NoopMessagingService;\n storageService: LowdbStorageService;\n secureStorageService: NodeEnvSecureStorageService;\n i18nService: I18nService;\n platformUtilsService: CliPlatformUtilsService;\n constantsService: ConstantsService;\n cryptoService: CryptoService;\n tokenService: TokenService;\n appIdService: AppIdService;\n apiService: NodeApiService;\n environmentService: EnvironmentService;\n userService: UserService;\n settingsService: SettingsService;\n cipherService: CipherService;\n folderService: FolderService;\n collectionService: CollectionService;\n vaultTimeoutService: VaultTimeoutService;\n syncService: SyncService;\n passwordGenerationService: PasswordGenerationService;\n totpService: TotpService;\n containerService: ContainerService;\n auditService: AuditService;\n importService: ImportService;\n exportService: ExportService;\n searchService: SearchService;\n cryptoFunctionService: NodeCryptoFunctionService;\n authService: AuthService;\n policyService: PolicyService;\n program: Program;\n\n constructor() {\n let p = null;\n const relativeDataDir = path.join(path.dirname(process.execPath), 'bw-data');\n if (fs.existsSync(relativeDataDir)) {\n p = relativeDataDir;\n } else if (process.env.BITWARDENCLI_APPDATA_DIR) {\n p = path.resolve(process.env.BITWARDENCLI_APPDATA_DIR);\n } else if (process.platform === 'darwin') {\n p = path.join(process.env.HOME, 'Library/Application Support/Bitwarden CLI');\n } else if (process.platform === 'win32') {\n p = path.join(process.env.APPDATA, 'Bitwarden CLI');\n } else if (process.env.XDG_CONFIG_HOME) {\n p = path.join(process.env.XDG_CONFIG_HOME, 'Bitwarden CLI');\n } else {\n p = path.join(process.env.HOME, '.config/Bitwarden CLI');\n }\n\n this.i18nService = new I18nService('en', './locales');\n this.platformUtilsService = new CliPlatformUtilsService('cli', packageJson);\n this.cryptoFunctionService = new NodeCryptoFunctionService();\n this.storageService = new LowdbStorageService(null, p, true);\n this.secureStorageService = new NodeEnvSecureStorageService(this.storageService, () => this.cryptoService);\n this.cryptoService = new CryptoService(this.storageService, this.secureStorageService,\n this.cryptoFunctionService);\n this.appIdService = new AppIdService(this.storageService);\n this.tokenService = new TokenService(this.storageService);\n this.messagingService = new NoopMessagingService();\n this.apiService = new NodeApiService(this.tokenService, this.platformUtilsService,\n async (expired: boolean) => await this.logout(),\n 'Bitwarden_CLI/' + this.platformUtilsService.getApplicationVersion() +\n ' (' + this.platformUtilsService.getDeviceString().toUpperCase() + ')');\n this.environmentService = new EnvironmentService(this.apiService, this.storageService, null);\n this.userService = new UserService(this.tokenService, this.storageService);\n this.containerService = new ContainerService(this.cryptoService);\n this.settingsService = new SettingsService(this.userService, this.storageService);\n this.cipherService = new CipherService(this.cryptoService, this.userService, this.settingsService,\n this.apiService, this.storageService, this.i18nService, null);\n this.folderService = new FolderService(this.cryptoService, this.userService, this.apiService,\n this.storageService, this.i18nService, this.cipherService);\n this.collectionService = new CollectionService(this.cryptoService, this.userService, this.storageService,\n this.i18nService);\n this.searchService = new SearchService(this.cipherService, this.platformUtilsService);\n this.policyService = new PolicyService(this.userService, this.storageService);\n this.vaultTimeoutService = new VaultTimeoutService(this.cipherService, this.folderService,\n this.collectionService, this.cryptoService, this.platformUtilsService, this.storageService,\n this.messagingService, this.searchService, this.userService, this.tokenService, null, null);\n this.syncService = new SyncService(this.userService, this.apiService, this.settingsService,\n this.folderService, this.cipherService, this.cryptoService, this.collectionService,\n this.storageService, this.messagingService, this.policyService,\n async (expired: boolean) => await this.logout());\n this.passwordGenerationService = new PasswordGenerationService(this.cryptoService, this.storageService,\n this.policyService);\n this.totpService = new TotpService(this.storageService, this.cryptoFunctionService);\n this.importService = new ImportService(this.cipherService, this.folderService, this.apiService,\n this.i18nService, this.collectionService);\n this.exportService = new ExportService(this.folderService, this.cipherService, this.apiService);\n this.authService = new AuthService(this.cryptoService, this.apiService, this.userService, this.tokenService,\n this.appIdService, this.i18nService, this.platformUtilsService, this.messagingService, true);\n this.auditService = new AuditService(this.cryptoFunctionService, this.apiService);\n this.program = new Program(this);\n }\n\n async run() {\n await this.init();\n this.program.run();\n }\n\n async logout() {\n const userId = await this.userService.getUserId();\n await Promise.all([\n this.syncService.setLastSync(new Date(0)),\n this.tokenService.clearToken(),\n this.cryptoService.clearKeys(),\n this.userService.clear(),\n this.settingsService.clear(userId),\n this.cipherService.clear(userId),\n this.folderService.clear(userId),\n this.collectionService.clear(userId),\n this.policyService.clear(userId),\n this.passwordGenerationService.clear(),\n ]);\n process.env.BW_SESSION = null;\n }\n\n private async init() {\n this.storageService.init();\n this.containerService.attachToWindow(global);\n await this.environmentService.setUrlsFromStorage();\n // Dev Server URLs. Comment out the line above.\n // this.apiService.setUrls({\n // base: null,\n // api: 'http://localhost:4000',\n // identity: 'http://localhost:33656',\n // });\n const locale = await this.storageService.get<string>(ConstantsService.localeKey);\n await this.i18nService.init(locale);\n this.authService.init();\n\n const installedVersion = await this.storageService.get<string>(ConstantsService.installedVersionKey);\n const currentVersion = this.platformUtilsService.getApplicationVersion();\n if (installedVersion == null || installedVersion !== currentVersion) {\n await this.storageService.save(ConstantsService.installedVersionKey, currentVersion);\n }\n }\n}\n\nconst main = new Main();\nmain.run();\n"],"sourceRoot":""}
\No newline at end of file