@metamask/profile-sync-controller 0.2.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +46 -1
- package/auth/mocks/package.json +9 -0
- package/auth/package.json +9 -0
- package/dist/{chunk-BDO3VJEU.mjs → chunk-2CWF7ZTL.mjs} +2 -2
- package/dist/{chunk-7KMONAQI.mjs → chunk-4WXZXVLI.mjs} +7 -9
- package/dist/{chunk-7KMONAQI.mjs.map → chunk-4WXZXVLI.mjs.map} +1 -1
- package/dist/{chunk-VD2IGTS3.js → chunk-4ZGRRVMI.js} +5 -5
- package/dist/{chunk-Y7P3UH26.mjs → chunk-D4SNJOID.mjs} +31 -3
- package/dist/chunk-D4SNJOID.mjs.map +1 -0
- package/dist/{chunk-SMKTWM6I.js → chunk-DF24ZX4H.js} +2 -3
- package/dist/chunk-DF24ZX4H.js.map +1 -0
- package/dist/{chunk-NPH5AHLH.mjs → chunk-E7Z5TCQT.mjs} +54 -6
- package/dist/chunk-E7Z5TCQT.mjs.map +1 -0
- package/dist/chunk-EHZFPUJH.mjs +53 -0
- package/dist/chunk-EHZFPUJH.mjs.map +1 -0
- package/dist/{chunk-SLHAVOTE.js → chunk-EYZFHZR2.js} +11 -4
- package/dist/chunk-EYZFHZR2.js.map +1 -0
- package/dist/{chunk-DHKZ2NEF.js → chunk-F6BAOSH2.js} +35 -7
- package/dist/chunk-F6BAOSH2.js.map +1 -0
- package/dist/chunk-GQXYWBFK.js +28 -0
- package/dist/chunk-GQXYWBFK.js.map +1 -0
- package/dist/{chunk-3TE6M5TV.js → chunk-HMRRB4EX.js} +40 -7
- package/dist/chunk-HMRRB4EX.js.map +1 -0
- package/dist/{chunk-DRD22DR5.mjs → chunk-J7NSK6BO.mjs} +2 -2
- package/dist/chunk-JAQ5TPSZ.js +53 -0
- package/dist/chunk-JAQ5TPSZ.js.map +1 -0
- package/dist/{chunk-PSR2V3R4.js → chunk-JJ5BDCKD.js} +17 -19
- package/dist/chunk-JJ5BDCKD.js.map +1 -0
- package/dist/{chunk-G4NU4KP7.js → chunk-KIVBL6OM.js} +6 -6
- package/dist/{chunk-FQ5SDMRE.mjs → chunk-KTCSRECK.mjs} +2 -3
- package/dist/{chunk-FQ5SDMRE.mjs.map → chunk-KTCSRECK.mjs.map} +1 -1
- package/dist/chunk-LDYHGAP4.js +11 -0
- package/dist/chunk-LDYHGAP4.js.map +1 -0
- package/dist/{chunk-7SW3CC66.mjs → chunk-LGXQBALM.mjs} +2 -2
- package/dist/{chunk-5C53GKTU.js.map → chunk-LGXQBALM.mjs.map} +1 -1
- package/dist/{chunk-BOET676P.js → chunk-LLG4D2SC.js} +8 -8
- package/dist/{chunk-R2S3HIDN.js → chunk-LNECIW4K.js} +236 -6
- package/dist/chunk-LNECIW4K.js.map +1 -0
- package/dist/{chunk-FU7PSGFP.mjs → chunk-LYDHYB6I.mjs} +36 -3
- package/dist/chunk-LYDHYB6I.mjs.map +1 -0
- package/dist/{chunk-LNSB4L7K.mjs → chunk-M23ZCTKE.mjs} +235 -5
- package/dist/chunk-M23ZCTKE.mjs.map +1 -0
- package/dist/{chunk-ILIZJQ6X.mjs → chunk-NSSHFDIS.mjs} +10 -3
- package/dist/chunk-NSSHFDIS.mjs.map +1 -0
- package/dist/{chunk-BXPL7ZFX.js → chunk-PRYLTXW4.js} +15 -9
- package/dist/chunk-PRYLTXW4.js.map +1 -0
- package/dist/{chunk-XSSIP3PJ.js → chunk-Q5KTSMRE.js} +8 -8
- package/dist/chunk-QU4EXKJO.mjs +11 -0
- package/dist/chunk-QU4EXKJO.mjs.map +1 -0
- package/dist/{chunk-LDEIUP6J.mjs → chunk-UHP2Y32K.mjs} +9 -3
- package/dist/chunk-UHP2Y32K.mjs.map +1 -0
- package/dist/chunk-WAFY3R2F.js +103 -0
- package/dist/chunk-WAFY3R2F.js.map +1 -0
- package/dist/{chunk-VYZPOR47.mjs → chunk-YKOMKXG4.mjs} +4 -4
- package/dist/{chunk-WB6MUIML.mjs → chunk-YLURF2PF.mjs} +2 -2
- package/dist/{chunk-FUPEFLXB.js → chunk-ZMQRPWJN.js} +60 -12
- package/dist/chunk-ZMQRPWJN.js.map +1 -0
- package/dist/chunk-ZUPTMFEA.mjs +28 -0
- package/dist/chunk-ZUPTMFEA.mjs.map +1 -0
- package/dist/{chunk-5C53GKTU.js → chunk-ZX2KHPXG.js} +5 -5
- package/dist/chunk-ZX2KHPXG.js.map +1 -0
- package/dist/chunk-ZYYAQJ56.mjs +103 -0
- package/dist/chunk-ZYYAQJ56.mjs.map +1 -0
- package/dist/controllers/authentication/AuthenticationController.js +4 -21
- package/dist/controllers/authentication/AuthenticationController.mjs +3 -20
- package/dist/controllers/authentication/index.js +7 -22
- package/dist/controllers/authentication/index.mjs +6 -21
- package/dist/controllers/authentication/services.js +3 -20
- package/dist/controllers/authentication/services.mjs +2 -19
- package/dist/controllers/index.js +11 -21
- package/dist/controllers/index.mjs +10 -20
- package/dist/controllers/user-storage/UserStorageController.js +7 -17
- package/dist/controllers/user-storage/UserStorageController.mjs +6 -16
- package/dist/controllers/user-storage/accounts/constants.js +12 -0
- package/dist/controllers/user-storage/accounts/constants.js.map +1 -0
- package/dist/controllers/user-storage/accounts/constants.mjs +12 -0
- package/dist/controllers/user-storage/accounts/constants.mjs.map +1 -0
- package/dist/controllers/user-storage/accounts/user-storage.js +11 -0
- package/dist/controllers/user-storage/accounts/user-storage.js.map +1 -0
- package/dist/controllers/user-storage/accounts/user-storage.mjs +11 -0
- package/dist/controllers/user-storage/accounts/user-storage.mjs.map +1 -0
- package/dist/controllers/user-storage/index.js +10 -18
- package/dist/controllers/user-storage/index.mjs +10 -18
- package/dist/controllers/user-storage/schema.js +4 -2
- package/dist/controllers/user-storage/schema.mjs +5 -3
- package/dist/controllers/user-storage/services.js +6 -16
- package/dist/controllers/user-storage/services.mjs +5 -15
- package/dist/index.js +18 -16
- package/dist/index.mjs +17 -15
- package/dist/sdk/authentication-jwt-bearer/flow-siwe.js +4 -4
- package/dist/sdk/authentication-jwt-bearer/flow-siwe.mjs +3 -3
- package/dist/sdk/authentication-jwt-bearer/flow-srp.js +4 -4
- package/dist/sdk/authentication-jwt-bearer/flow-srp.mjs +3 -3
- package/dist/sdk/authentication-jwt-bearer/services.js +3 -3
- package/dist/sdk/authentication-jwt-bearer/services.mjs +2 -2
- package/dist/sdk/authentication.js +6 -6
- package/dist/sdk/authentication.mjs +5 -5
- package/dist/sdk/encryption.js +5 -3
- package/dist/sdk/encryption.mjs +6 -4
- package/dist/sdk/env.js +2 -2
- package/dist/sdk/env.mjs +1 -1
- package/dist/sdk/index.js +13 -15
- package/dist/sdk/index.mjs +12 -14
- package/dist/sdk/user-storage.js +5 -5
- package/dist/sdk/user-storage.mjs +4 -4
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/dist/types/controllers/authentication/AuthenticationController.d.ts +9 -4
- package/dist/types/controllers/authentication/AuthenticationController.d.ts.map +1 -1
- package/dist/types/controllers/authentication/__fixtures__/mockResponses.d.ts +1 -1
- package/dist/types/controllers/authentication/__fixtures__/mockResponses.d.ts.map +1 -1
- package/dist/types/controllers/authentication/index.d.ts +2 -0
- package/dist/types/controllers/authentication/index.d.ts.map +1 -1
- package/dist/types/controllers/user-storage/UserStorageController.d.ts +48 -8
- package/dist/types/controllers/user-storage/UserStorageController.d.ts.map +1 -1
- package/dist/types/controllers/user-storage/__fixtures__/mockAccounts.d.ts +63 -0
- package/dist/types/controllers/user-storage/__fixtures__/mockAccounts.d.ts.map +1 -0
- package/dist/types/controllers/user-storage/__fixtures__/mockResponses.d.ts +10 -4
- package/dist/types/controllers/user-storage/__fixtures__/mockResponses.d.ts.map +1 -1
- package/dist/types/controllers/user-storage/__fixtures__/mockServices.d.ts +4 -2
- package/dist/types/controllers/user-storage/__fixtures__/mockServices.d.ts.map +1 -1
- package/dist/types/controllers/user-storage/__fixtures__/mockStorage.d.ts +1 -1
- package/dist/types/controllers/user-storage/__fixtures__/mockStorage.d.ts.map +1 -1
- package/dist/types/controllers/user-storage/accounts/constants.d.ts +4 -0
- package/dist/types/controllers/user-storage/accounts/constants.d.ts.map +1 -0
- package/dist/types/controllers/user-storage/accounts/user-storage.d.ts +32 -0
- package/dist/types/controllers/user-storage/accounts/user-storage.d.ts.map +1 -0
- package/dist/types/controllers/user-storage/index.d.ts +2 -0
- package/dist/types/controllers/user-storage/index.d.ts.map +1 -1
- package/dist/types/controllers/user-storage/schema.d.ts +13 -6
- package/dist/types/controllers/user-storage/schema.d.ts.map +1 -1
- package/dist/types/controllers/user-storage/services.d.ts +20 -4
- package/dist/types/controllers/user-storage/services.d.ts.map +1 -1
- package/dist/types/sdk/__fixtures__/mock-userstorage.d.ts +1 -0
- package/dist/types/sdk/__fixtures__/mock-userstorage.d.ts.map +1 -1
- package/dist/types/sdk/encryption.d.ts +3 -19
- package/dist/types/sdk/encryption.d.ts.map +1 -1
- package/dist/types/sdk/user-storage.d.ts +4 -3
- package/dist/types/sdk/user-storage.d.ts.map +1 -1
- package/package.json +37 -4
- package/user-storage/mocks/package.json +9 -0
- package/user-storage/package.json +9 -0
- package/dist/chunk-3TE6M5TV.js.map +0 -1
- package/dist/chunk-77LSWSGB.js +0 -81
- package/dist/chunk-77LSWSGB.js.map +0 -1
- package/dist/chunk-7SW3CC66.mjs.map +0 -1
- package/dist/chunk-B5DBQDB3.mjs +0 -140
- package/dist/chunk-B5DBQDB3.mjs.map +0 -1
- package/dist/chunk-BXPL7ZFX.js.map +0 -1
- package/dist/chunk-DHKZ2NEF.js.map +0 -1
- package/dist/chunk-FU7PSGFP.mjs.map +0 -1
- package/dist/chunk-FUPEFLXB.js.map +0 -1
- package/dist/chunk-ILIZJQ6X.mjs.map +0 -1
- package/dist/chunk-IQECLCH4.mjs +0 -81
- package/dist/chunk-IQECLCH4.mjs.map +0 -1
- package/dist/chunk-LDEIUP6J.mjs.map +0 -1
- package/dist/chunk-LNSB4L7K.mjs.map +0 -1
- package/dist/chunk-NPH5AHLH.mjs.map +0 -1
- package/dist/chunk-P4DUDLMY.js +0 -140
- package/dist/chunk-P4DUDLMY.js.map +0 -1
- package/dist/chunk-PSR2V3R4.js.map +0 -1
- package/dist/chunk-R2S3HIDN.js.map +0 -1
- package/dist/chunk-SLHAVOTE.js.map +0 -1
- package/dist/chunk-SMKTWM6I.js.map +0 -1
- package/dist/chunk-Y7P3UH26.mjs.map +0 -1
- /package/dist/{chunk-BDO3VJEU.mjs.map → chunk-2CWF7ZTL.mjs.map} +0 -0
- /package/dist/{chunk-VD2IGTS3.js.map → chunk-4ZGRRVMI.js.map} +0 -0
- /package/dist/{chunk-DRD22DR5.mjs.map → chunk-J7NSK6BO.mjs.map} +0 -0
- /package/dist/{chunk-G4NU4KP7.js.map → chunk-KIVBL6OM.js.map} +0 -0
- /package/dist/{chunk-BOET676P.js.map → chunk-LLG4D2SC.js.map} +0 -0
- /package/dist/{chunk-XSSIP3PJ.js.map → chunk-Q5KTSMRE.js.map} +0 -0
- /package/dist/{chunk-VYZPOR47.mjs.map → chunk-YKOMKXG4.mjs.map} +0 -0
- /package/dist/{chunk-WB6MUIML.mjs.map → chunk-YLURF2PF.mjs.map} +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,49 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.3.0]
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
|
|
14
|
+
- add granular account syncing ([#4629](https://github.com/MetaMask/core/pull/4629))
|
|
15
|
+
- add accounts user storage schema
|
|
16
|
+
- add method `saveInternalAccountToUserStorage` to `UserStorageController`
|
|
17
|
+
- add method `syncInternalAccountsWithUserStorage` to `UserStorageController`
|
|
18
|
+
- add `@metamask/accounts-controller` dev dependency
|
|
19
|
+
- add `@metamask/keyring-api` dev dependency
|
|
20
|
+
- add infura OIDC identifier ([#4654](https://github.com/MetaMask/core/pull/4654))
|
|
21
|
+
- define and export new types: `AuthenticationControllerGetStateAction`, `AuthenticationControllerStateChangeEvent`, `Events` ([#4633](https://github.com/MetaMask/core/pull/4633))
|
|
22
|
+
- SDK and controller support for `GET /api/v1/userstorage/:feature` endpoint ([#4626](https://github.com/MetaMask/core/pull/4626))
|
|
23
|
+
- add method `performGetStorageAllFeatureEntries` to `UserStorageController`
|
|
24
|
+
- add `ALLOW_ARBITRARY_KEYS` to `USER_STORAGE_SCHEMA` to allow wildcard/getAll for entries for a feature
|
|
25
|
+
- add subpath exports to `@metamask/profile-sync-controller` ([#4604](https://github.com/MetaMask/core/pull/4604))
|
|
26
|
+
- add `@metamask/profile-sync-controller/sdk` export
|
|
27
|
+
- add `@metamask/profile-sync-controller/user-storage` export
|
|
28
|
+
- add `@metamask/profile-sync-controller/auth` export
|
|
29
|
+
|
|
30
|
+
### Changed
|
|
31
|
+
|
|
32
|
+
- Bump `typescript` from `~5.1.6` to `~5.2.2` ([#4584](https://github.com/MetaMask/core/pull/4584))
|
|
33
|
+
- Fix controllers with missing or incorrect messenger action/event types ([#4633](https://github.com/MetaMask/core/pull/4633))
|
|
34
|
+
- **BREAKING:** `AuthenticationControllerMessenger` must allow internal events defined in the `Events` type ([#4633](https://github.com/MetaMask/core/pull/4633))
|
|
35
|
+
- `AuthenticationControllerActions` is widened to include the `AuthenticationController:getState` action ([#4633](https://github.com/MetaMask/core/pull/4633))
|
|
36
|
+
- Replaced `@metamask/profile-sync-controller/sdk` to use the same encryption file as `UserStorageController` ([#4649](https://github.com/MetaMask/core/pull/4649))
|
|
37
|
+
|
|
38
|
+
### Fixed
|
|
39
|
+
|
|
40
|
+
- update subpath exports internal `package.json` files to resolve `jest-haste-map` errors ([#4650](https://github.com/MetaMask/core/pull/4650))
|
|
41
|
+
|
|
42
|
+
## [0.2.1]
|
|
43
|
+
|
|
44
|
+
### Added
|
|
45
|
+
|
|
46
|
+
- unlock checks for when controller methods are called ([#4569](https://github.com/MetaMask/core/pull/4569))
|
|
47
|
+
|
|
48
|
+
### Changed
|
|
49
|
+
|
|
50
|
+
- **BREAKING** made `MOCK_ENCRYPTED_STORAGE_DATA` fixture a function to be lazily evaluated ([#4592](https://github.com/MetaMask/core/pull/4592))
|
|
51
|
+
- Bump `typescript` from `~5.0.4` to `~5.1.6` ([#4576](https://github.com/MetaMask/core/pull/4576))
|
|
52
|
+
|
|
10
53
|
## [0.2.0]
|
|
11
54
|
|
|
12
55
|
### Added
|
|
@@ -84,7 +127,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
84
127
|
|
|
85
128
|
- Initial release
|
|
86
129
|
|
|
87
|
-
[Unreleased]: https://github.com/MetaMask/core/compare/@metamask/profile-sync-controller@0.
|
|
130
|
+
[Unreleased]: https://github.com/MetaMask/core/compare/@metamask/profile-sync-controller@0.3.0...HEAD
|
|
131
|
+
[0.3.0]: https://github.com/MetaMask/core/compare/@metamask/profile-sync-controller@0.2.1...@metamask/profile-sync-controller@0.3.0
|
|
132
|
+
[0.2.1]: https://github.com/MetaMask/core/compare/@metamask/profile-sync-controller@0.2.0...@metamask/profile-sync-controller@0.2.1
|
|
88
133
|
[0.2.0]: https://github.com/MetaMask/core/compare/@metamask/profile-sync-controller@0.1.4...@metamask/profile-sync-controller@0.2.0
|
|
89
134
|
[0.1.4]: https://github.com/MetaMask/core/compare/@metamask/profile-sync-controller@0.1.3...@metamask/profile-sync-controller@0.1.4
|
|
90
135
|
[0.1.3]: https://github.com/MetaMask/core/compare/@metamask/profile-sync-controller@0.1.2...@metamask/profile-sync-controller@0.1.3
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": "1.0.0",
|
|
3
|
+
"private": true,
|
|
4
|
+
"description": "",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"sideEffects": false,
|
|
7
|
+
"main": "../../dist/controllers/authentication/__fixtures__/index.js",
|
|
8
|
+
"types": "../../dist/types/controllers/authentication/__fixtures__/index.d.ts"
|
|
9
|
+
}
|
|
@@ -3,7 +3,7 @@ import {
|
|
|
3
3
|
authenticate,
|
|
4
4
|
authorizeOIDC,
|
|
5
5
|
getNonce
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-YLURF2PF.mjs";
|
|
7
7
|
import {
|
|
8
8
|
validateLoginResponse
|
|
9
9
|
} from "./chunk-QDGLIUUS.mjs";
|
|
@@ -126,4 +126,4 @@ assertSigner_fn = function(signer) {
|
|
|
126
126
|
export {
|
|
127
127
|
SIWEJwtBearerAuth
|
|
128
128
|
};
|
|
129
|
-
//# sourceMappingURL=chunk-
|
|
129
|
+
//# sourceMappingURL=chunk-2CWF7ZTL.mjs.map
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import {
|
|
2
2
|
JwtBearerAuth
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-YKOMKXG4.mjs";
|
|
4
4
|
import {
|
|
5
5
|
SIWEJwtBearerAuth
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-2CWF7ZTL.mjs";
|
|
7
7
|
import {
|
|
8
8
|
SRPJwtBearerAuth
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-J7NSK6BO.mjs";
|
|
10
10
|
import {
|
|
11
11
|
AuthType
|
|
12
12
|
} from "./chunk-CAIIVJAO.mjs";
|
|
@@ -20,17 +20,16 @@ import {
|
|
|
20
20
|
import {
|
|
21
21
|
STORAGE_URL,
|
|
22
22
|
UserStorage
|
|
23
|
-
} from "./chunk-
|
|
23
|
+
} from "./chunk-E7Z5TCQT.mjs";
|
|
24
24
|
import {
|
|
25
|
-
Encryption,
|
|
26
25
|
createSHA256Hash
|
|
27
|
-
} from "./chunk-
|
|
26
|
+
} from "./chunk-K5UKU454.mjs";
|
|
28
27
|
import {
|
|
29
28
|
Env,
|
|
30
29
|
Platform,
|
|
31
30
|
getEnvUrls,
|
|
32
31
|
getOidcClientId
|
|
33
|
-
} from "./chunk-
|
|
32
|
+
} from "./chunk-KTCSRECK.mjs";
|
|
34
33
|
import {
|
|
35
34
|
NonceRetrievalError,
|
|
36
35
|
NotFoundError,
|
|
@@ -48,7 +47,6 @@ import {
|
|
|
48
47
|
var sdk_exports = {};
|
|
49
48
|
__export(sdk_exports, {
|
|
50
49
|
AuthType: () => AuthType,
|
|
51
|
-
Encryption: () => Encryption,
|
|
52
50
|
Env: () => Env,
|
|
53
51
|
JwtBearerAuth: () => JwtBearerAuth,
|
|
54
52
|
MESSAGE_SIGNING_SNAP: () => MESSAGE_SIGNING_SNAP,
|
|
@@ -76,4 +74,4 @@ __export(sdk_exports, {
|
|
|
76
74
|
export {
|
|
77
75
|
sdk_exports
|
|
78
76
|
};
|
|
79
|
-
//# sourceMappingURL=chunk-
|
|
77
|
+
//# sourceMappingURL=chunk-4WXZXVLI.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/sdk/index.ts"],"sourcesContent":["export * from './authentication';\nexport * from './user-storage';\nexport * from './env';\nexport * from './errors';\nexport * from './encryption';\nexport * from './utils/messaging-signing-snap-requests';\n"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../src/sdk/index.ts"],"sourcesContent":["export * from './authentication';\nexport * from './user-storage';\nexport * from './env';\nexport * from './errors';\nexport * from './encryption';\nexport * from './utils/messaging-signing-snap-requests';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;","names":[]}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
|
|
4
4
|
|
|
5
|
-
var
|
|
5
|
+
var _chunkLLG4D2SCjs = require('./chunk-LLG4D2SC.js');
|
|
6
6
|
|
|
7
7
|
|
|
8
8
|
var _chunkRG4II6WHjs = require('./chunk-RG4II6WH.js');
|
|
@@ -100,17 +100,17 @@ getAuthSession_fn = async function() {
|
|
|
100
100
|
_login = new WeakSet();
|
|
101
101
|
login_fn = async function() {
|
|
102
102
|
const address = await this.getIdentifier();
|
|
103
|
-
const nonceRes = await
|
|
103
|
+
const nonceRes = await _chunkLLG4D2SCjs.getNonce.call(void 0, address, _chunkIGY2S5BCjs.__privateGet.call(void 0, this, _config).env);
|
|
104
104
|
const publicKey = await _chunkIGY2S5BCjs.__privateGet.call(void 0, this, _options).signing.getIdentifier();
|
|
105
105
|
const rawMessage = _chunkIGY2S5BCjs.__privateMethod.call(void 0, this, _createSrpLoginRawMessage, createSrpLoginRawMessage_fn).call(this, nonceRes.nonce, publicKey);
|
|
106
106
|
const signature = await this.signMessage(rawMessage);
|
|
107
|
-
const authResponse = await
|
|
107
|
+
const authResponse = await _chunkLLG4D2SCjs.authenticate.call(void 0,
|
|
108
108
|
rawMessage,
|
|
109
109
|
signature,
|
|
110
110
|
_chunkIGY2S5BCjs.__privateGet.call(void 0, this, _config).type,
|
|
111
111
|
_chunkIGY2S5BCjs.__privateGet.call(void 0, this, _config).env
|
|
112
112
|
);
|
|
113
|
-
const tokenResponse = await
|
|
113
|
+
const tokenResponse = await _chunkLLG4D2SCjs.authorizeOIDC.call(void 0,
|
|
114
114
|
authResponse.token,
|
|
115
115
|
_chunkIGY2S5BCjs.__privateGet.call(void 0, this, _config).env,
|
|
116
116
|
_chunkIGY2S5BCjs.__privateGet.call(void 0, this, _config).platform
|
|
@@ -130,4 +130,4 @@ createSrpLoginRawMessage_fn = function(nonce, publicKey) {
|
|
|
130
130
|
|
|
131
131
|
|
|
132
132
|
exports.SRPJwtBearerAuth = SRPJwtBearerAuth;
|
|
133
|
-
//# sourceMappingURL=chunk-
|
|
133
|
+
//# sourceMappingURL=chunk-4ZGRRVMI.js.map
|
|
@@ -3,7 +3,7 @@ import {
|
|
|
3
3
|
getAccessToken,
|
|
4
4
|
getNonce,
|
|
5
5
|
login
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-LGXQBALM.mjs";
|
|
7
7
|
import {
|
|
8
8
|
createSnapPublicKeyRequest,
|
|
9
9
|
createSnapSignMessageRequest
|
|
@@ -32,7 +32,7 @@ var metadata = {
|
|
|
32
32
|
anonymous: false
|
|
33
33
|
}
|
|
34
34
|
};
|
|
35
|
-
var _metametrics, _registerMessageHandlers, registerMessageHandlers_fn, _assertLoggedIn, assertLoggedIn_fn, _performAuthenticationFlow, performAuthenticationFlow_fn, _hasValidSession, hasValidSession_fn, __snapPublicKeyCache, _snapGetPublicKey, snapGetPublicKey_fn, __snapSignMessageCache, _snapSignMessage, snapSignMessage_fn;
|
|
35
|
+
var _metametrics, _isUnlocked, _keyringController, _registerMessageHandlers, registerMessageHandlers_fn, _assertLoggedIn, assertLoggedIn_fn, _performAuthenticationFlow, performAuthenticationFlow_fn, _hasValidSession, hasValidSession_fn, __snapPublicKeyCache, _snapGetPublicKey, snapGetPublicKey_fn, __snapSignMessageCache, _snapSignMessage, snapSignMessage_fn;
|
|
36
36
|
var AuthenticationController = class extends BaseController {
|
|
37
37
|
constructor({
|
|
38
38
|
messenger,
|
|
@@ -67,12 +67,28 @@ var AuthenticationController = class extends BaseController {
|
|
|
67
67
|
*/
|
|
68
68
|
__privateAdd(this, _snapSignMessage);
|
|
69
69
|
__privateAdd(this, _metametrics, void 0);
|
|
70
|
+
__privateAdd(this, _isUnlocked, false);
|
|
71
|
+
__privateAdd(this, _keyringController, {
|
|
72
|
+
setupLockedStateSubscriptions: () => {
|
|
73
|
+
const { isUnlocked } = this.messagingSystem.call(
|
|
74
|
+
"KeyringController:getState"
|
|
75
|
+
);
|
|
76
|
+
__privateSet(this, _isUnlocked, isUnlocked);
|
|
77
|
+
this.messagingSystem.subscribe("KeyringController:unlock", () => {
|
|
78
|
+
__privateSet(this, _isUnlocked, true);
|
|
79
|
+
});
|
|
80
|
+
this.messagingSystem.subscribe("KeyringController:lock", () => {
|
|
81
|
+
__privateSet(this, _isUnlocked, false);
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
});
|
|
70
85
|
__privateAdd(this, __snapPublicKeyCache, void 0);
|
|
71
86
|
__privateAdd(this, __snapSignMessageCache, {});
|
|
72
87
|
if (!metametrics) {
|
|
73
88
|
throw new Error("`metametrics` field is required");
|
|
74
89
|
}
|
|
75
90
|
__privateSet(this, _metametrics, metametrics);
|
|
91
|
+
__privateGet(this, _keyringController).setupLockedStateSubscriptions();
|
|
76
92
|
__privateMethod(this, _registerMessageHandlers, registerMessageHandlers_fn).call(this);
|
|
77
93
|
}
|
|
78
94
|
async performSignIn() {
|
|
@@ -113,6 +129,8 @@ var AuthenticationController = class extends BaseController {
|
|
|
113
129
|
}
|
|
114
130
|
};
|
|
115
131
|
_metametrics = new WeakMap();
|
|
132
|
+
_isUnlocked = new WeakMap();
|
|
133
|
+
_keyringController = new WeakMap();
|
|
116
134
|
_registerMessageHandlers = new WeakSet();
|
|
117
135
|
registerMessageHandlers_fn = function() {
|
|
118
136
|
this.messagingSystem.registerActionHandler(
|
|
@@ -213,6 +231,11 @@ snapGetPublicKey_fn = async function() {
|
|
|
213
231
|
if (__privateGet(this, __snapPublicKeyCache)) {
|
|
214
232
|
return __privateGet(this, __snapPublicKeyCache);
|
|
215
233
|
}
|
|
234
|
+
if (!__privateGet(this, _isUnlocked)) {
|
|
235
|
+
throw new Error(
|
|
236
|
+
"#snapGetPublicKey - unable to call snap, wallet is locked"
|
|
237
|
+
);
|
|
238
|
+
}
|
|
216
239
|
const result = await this.messagingSystem.call(
|
|
217
240
|
"SnapController:handleRequest",
|
|
218
241
|
createSnapPublicKeyRequest()
|
|
@@ -226,6 +249,11 @@ snapSignMessage_fn = async function(message) {
|
|
|
226
249
|
if (__privateGet(this, __snapSignMessageCache)[message]) {
|
|
227
250
|
return __privateGet(this, __snapSignMessageCache)[message];
|
|
228
251
|
}
|
|
252
|
+
if (!__privateGet(this, _isUnlocked)) {
|
|
253
|
+
throw new Error(
|
|
254
|
+
"#snapSignMessage - unable to call snap, wallet is locked"
|
|
255
|
+
);
|
|
256
|
+
}
|
|
229
257
|
const result = await this.messagingSystem.call(
|
|
230
258
|
"SnapController:handleRequest",
|
|
231
259
|
createSnapSignMessageRequest(message)
|
|
@@ -238,4 +266,4 @@ export {
|
|
|
238
266
|
defaultState,
|
|
239
267
|
AuthenticationController
|
|
240
268
|
};
|
|
241
|
-
//# sourceMappingURL=chunk-
|
|
269
|
+
//# sourceMappingURL=chunk-D4SNJOID.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/controllers/authentication/AuthenticationController.ts"],"sourcesContent":["import type {\n ControllerGetStateAction,\n ControllerStateChangeEvent,\n RestrictedControllerMessenger,\n StateMetadata,\n} from '@metamask/base-controller';\nimport { BaseController } from '@metamask/base-controller';\nimport type {\n KeyringControllerGetStateAction,\n KeyringControllerLockEvent,\n KeyringControllerUnlockEvent,\n} from '@metamask/keyring-controller';\nimport type { HandleSnapRequest } from '@metamask/snaps-controllers';\n\nimport {\n createSnapPublicKeyRequest,\n createSnapSignMessageRequest,\n} from './auth-snap-requests';\nimport {\n createLoginRawMessage,\n getAccessToken,\n getNonce,\n login,\n} from './services';\n\nconst THIRTY_MIN_MS = 1000 * 60 * 30;\n\nconst controllerName = 'AuthenticationController';\n\n// State\ntype SessionProfile = {\n identifierId: string;\n profileId: string;\n};\n\ntype SessionData = {\n /** profile - anonymous profile data for the given logged in user */\n profile: SessionProfile;\n /** accessToken - used to make requests authorized endpoints */\n accessToken: string;\n /** expiresIn - string date to determine if new access token is required */\n expiresIn: string;\n};\n\ntype MetaMetricsAuth = {\n getMetaMetricsId: () => string | Promise<string>;\n agent: 'extension' | 'mobile';\n};\n\nexport type AuthenticationControllerState = {\n /**\n * Global isSignedIn state.\n * Can be used to determine if \"Profile Syncing\" is enabled.\n */\n isSignedIn: boolean;\n sessionData?: SessionData;\n};\nexport const defaultState: AuthenticationControllerState = {\n isSignedIn: false,\n};\nconst metadata: StateMetadata<AuthenticationControllerState> = {\n isSignedIn: {\n persist: true,\n anonymous: true,\n },\n sessionData: {\n persist: true,\n anonymous: false,\n },\n};\n\n// Messenger Actions\ntype CreateActionsObj<Controller extends keyof AuthenticationController> = {\n [K in Controller]: {\n type: `${typeof controllerName}:${K}`;\n handler: AuthenticationController[K];\n };\n};\ntype ActionsObj = CreateActionsObj<\n | 'performSignIn'\n | 'performSignOut'\n | 'getBearerToken'\n | 'getSessionProfile'\n | 'isSignedIn'\n>;\nexport type Actions =\n | ActionsObj[keyof ActionsObj]\n | AuthenticationControllerGetStateAction;\nexport type AuthenticationControllerGetStateAction = ControllerGetStateAction<\n typeof controllerName,\n AuthenticationControllerState\n>;\nexport type AuthenticationControllerPerformSignIn = ActionsObj['performSignIn'];\nexport type AuthenticationControllerPerformSignOut =\n ActionsObj['performSignOut'];\nexport type AuthenticationControllerGetBearerToken =\n ActionsObj['getBearerToken'];\nexport type AuthenticationControllerGetSessionProfile =\n ActionsObj['getSessionProfile'];\nexport type AuthenticationControllerIsSignedIn = ActionsObj['isSignedIn'];\n\nexport type AuthenticationControllerStateChangeEvent =\n ControllerStateChangeEvent<\n typeof controllerName,\n AuthenticationControllerState\n >;\n\nexport type Events = AuthenticationControllerStateChangeEvent;\n\n// Allowed Actions\nexport type AllowedActions =\n | HandleSnapRequest\n | KeyringControllerGetStateAction;\n\nexport type AllowedEvents =\n | KeyringControllerLockEvent\n | KeyringControllerUnlockEvent;\n\n// Messenger\nexport type AuthenticationControllerMessenger = RestrictedControllerMessenger<\n typeof controllerName,\n Actions | AllowedActions,\n Events | AllowedEvents,\n AllowedActions['type'],\n AllowedEvents['type']\n>;\n\n/**\n * Controller that enables authentication for restricted endpoints.\n * Used for Global Profile Syncing and Notifications\n */\nexport default class AuthenticationController extends BaseController<\n typeof controllerName,\n AuthenticationControllerState,\n AuthenticationControllerMessenger\n> {\n #metametrics: MetaMetricsAuth;\n\n #isUnlocked = false;\n\n #keyringController = {\n setupLockedStateSubscriptions: () => {\n const { isUnlocked } = this.messagingSystem.call(\n 'KeyringController:getState',\n );\n this.#isUnlocked = isUnlocked;\n\n this.messagingSystem.subscribe('KeyringController:unlock', () => {\n this.#isUnlocked = true;\n });\n\n this.messagingSystem.subscribe('KeyringController:lock', () => {\n this.#isUnlocked = false;\n });\n },\n };\n\n constructor({\n messenger,\n state,\n metametrics,\n }: {\n messenger: AuthenticationControllerMessenger;\n state?: AuthenticationControllerState;\n /**\n * Not using the Messaging System as we\n * do not want to tie this strictly to extension\n */\n metametrics: MetaMetricsAuth;\n }) {\n super({\n messenger,\n metadata,\n name: controllerName,\n state: { ...defaultState, ...state },\n });\n\n if (!metametrics) {\n throw new Error('`metametrics` field is required');\n }\n\n this.#metametrics = metametrics;\n\n this.#keyringController.setupLockedStateSubscriptions();\n this.#registerMessageHandlers();\n }\n\n /**\n * Constructor helper for registering this controller's messaging system\n * actions.\n */\n #registerMessageHandlers(): void {\n this.messagingSystem.registerActionHandler(\n 'AuthenticationController:getBearerToken',\n this.getBearerToken.bind(this),\n );\n\n this.messagingSystem.registerActionHandler(\n 'AuthenticationController:getSessionProfile',\n this.getSessionProfile.bind(this),\n );\n\n this.messagingSystem.registerActionHandler(\n 'AuthenticationController:isSignedIn',\n this.isSignedIn.bind(this),\n );\n\n this.messagingSystem.registerActionHandler(\n 'AuthenticationController:performSignIn',\n this.performSignIn.bind(this),\n );\n\n this.messagingSystem.registerActionHandler(\n 'AuthenticationController:performSignOut',\n this.performSignOut.bind(this),\n );\n }\n\n public async performSignIn(): Promise<string> {\n const { accessToken } = await this.#performAuthenticationFlow();\n return accessToken;\n }\n\n public performSignOut(): void {\n this.#assertLoggedIn();\n\n this.update((state) => {\n state.isSignedIn = false;\n state.sessionData = undefined;\n });\n }\n\n public async getBearerToken(): Promise<string> {\n this.#assertLoggedIn();\n\n if (this.#hasValidSession(this.state.sessionData)) {\n return this.state.sessionData.accessToken;\n }\n\n const { accessToken } = await this.#performAuthenticationFlow();\n return accessToken;\n }\n\n /**\n * Will return a session profile.\n * Throws if a user is not logged in.\n *\n * @returns profile for the session.\n */\n public async getSessionProfile(): Promise<SessionProfile> {\n this.#assertLoggedIn();\n\n if (this.#hasValidSession(this.state.sessionData)) {\n return this.state.sessionData.profile;\n }\n\n const { profile } = await this.#performAuthenticationFlow();\n return profile;\n }\n\n public isSignedIn(): boolean {\n return this.state.isSignedIn;\n }\n\n #assertLoggedIn(): void {\n if (!this.state.isSignedIn) {\n throw new Error(\n `${controllerName}: Unable to call method, user is not authenticated`,\n );\n }\n }\n\n async #performAuthenticationFlow(): Promise<{\n profile: SessionProfile;\n accessToken: string;\n }> {\n try {\n // 1. Nonce\n const publicKey = await this.#snapGetPublicKey();\n const nonce = await getNonce(publicKey);\n if (!nonce) {\n throw new Error(`Unable to get nonce`);\n }\n\n // 2. Login\n const rawMessage = createLoginRawMessage(nonce, publicKey);\n const signature = await this.#snapSignMessage(rawMessage);\n const loginResponse = await login(rawMessage, signature, {\n metametricsId: await this.#metametrics.getMetaMetricsId(),\n agent: this.#metametrics.agent,\n });\n if (!loginResponse?.token) {\n throw new Error(`Unable to login`);\n }\n\n const profile: SessionProfile = {\n identifierId: loginResponse.profile.identifier_id,\n profileId: loginResponse.profile.profile_id,\n };\n\n // 3. Trade for Access Token\n const accessToken = await getAccessToken(\n loginResponse.token,\n this.#metametrics.agent,\n );\n if (!accessToken) {\n throw new Error(`Unable to get Access Token`);\n }\n\n // Update Internal State\n this.update((state) => {\n state.isSignedIn = true;\n const expiresIn = new Date();\n expiresIn.setTime(expiresIn.getTime() + THIRTY_MIN_MS);\n state.sessionData = {\n profile,\n accessToken,\n expiresIn: expiresIn.toString(),\n };\n });\n\n return {\n profile,\n accessToken,\n };\n } catch (e) {\n console.error('Failed to authenticate', e);\n const errorMessage =\n e instanceof Error ? e.message : JSON.stringify(e ?? '');\n throw new Error(\n `${controllerName}: Failed to authenticate - ${errorMessage}`,\n );\n }\n }\n\n #hasValidSession(\n sessionData: SessionData | undefined,\n ): sessionData is SessionData {\n if (!sessionData) {\n return false;\n }\n\n const prevDate = Date.parse(sessionData.expiresIn);\n if (isNaN(prevDate)) {\n return false;\n }\n\n const currentDate = new Date();\n const diffMs = Math.abs(currentDate.getTime() - prevDate);\n\n return THIRTY_MIN_MS > diffMs;\n }\n\n #_snapPublicKeyCache: string | undefined;\n\n /**\n * Returns the auth snap public key.\n *\n * @returns The snap public key.\n */\n async #snapGetPublicKey(): Promise<string> {\n if (this.#_snapPublicKeyCache) {\n return this.#_snapPublicKeyCache;\n }\n\n if (!this.#isUnlocked) {\n throw new Error(\n '#snapGetPublicKey - unable to call snap, wallet is locked',\n );\n }\n\n const result = (await this.messagingSystem.call(\n 'SnapController:handleRequest',\n createSnapPublicKeyRequest(),\n )) as string;\n\n this.#_snapPublicKeyCache = result;\n\n return result;\n }\n\n #_snapSignMessageCache: Record<`metamask:${string}`, string> = {};\n\n /**\n * Signs a specific message using an underlying auth snap.\n *\n * @param message - A specific tagged message to sign.\n * @returns A Signature created by the snap.\n */\n async #snapSignMessage(message: `metamask:${string}`): Promise<string> {\n if (this.#_snapSignMessageCache[message]) {\n return this.#_snapSignMessageCache[message];\n }\n\n if (!this.#isUnlocked) {\n throw new Error(\n '#snapSignMessage - unable to call snap, wallet is locked',\n );\n }\n\n const result = (await this.messagingSystem.call(\n 'SnapController:handleRequest',\n createSnapSignMessageRequest(message),\n )) as string;\n\n this.#_snapSignMessageCache[message] = result;\n\n return result;\n }\n}\n"],"mappings":"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","names":[]}
|
|
@@ -53,8 +53,7 @@ function getOidcClientId(env, platform) {
|
|
|
53
53
|
["portfolio" /* PORTFOLIO */]: "35e1cd62-49c5-4be8-8b6e-a5212f2d2cfb",
|
|
54
54
|
["mobile" /* MOBILE */]: "75fa62a3-9ca0-4b91-9fe5-76bec86b0257",
|
|
55
55
|
["extension" /* EXTENSION */]: "1132f10a-b4e5-4390-a5f2-d9c6022db564",
|
|
56
|
-
["infura" /* INFURA */]: ""
|
|
57
|
-
// unset
|
|
56
|
+
["infura" /* INFURA */]: "fdde9417-e193-4d23-9943-a8346b18d097"
|
|
58
57
|
}
|
|
59
58
|
};
|
|
60
59
|
if (!clientIds[env]) {
|
|
@@ -74,4 +73,4 @@ function getOidcClientId(env, platform) {
|
|
|
74
73
|
|
|
75
74
|
|
|
76
75
|
exports.Env = Env; exports.Platform = Platform; exports.getEnvUrls = getEnvUrls; exports.getOidcClientId = getOidcClientId;
|
|
77
|
-
//# sourceMappingURL=chunk-
|
|
76
|
+
//# sourceMappingURL=chunk-DF24ZX4H.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/sdk/env.ts"],"names":["Env","Platform"],"mappings":";AAAO,IAAK,MAAL,kBAAKA,SAAL;AACL,EAAAA,KAAA,SAAM;AACN,EAAAA,KAAA,SAAM;AACN,EAAAA,KAAA,SAAM;AAHI,SAAAA;AAAA,GAAA;AAML,IAAK,WAAL,kBAAKC,cAAL;AACL,EAAAA,UAAA,YAAS;AACT,EAAAA,UAAA,eAAY;AACZ,EAAAA,UAAA,eAAY;AACZ,EAAAA,UAAA,YAAS;AAJC,SAAAA;AAAA,GAAA;AAaZ,IAAM,WAAsC;AAAA,EAC1C,KAAK;AAAA,IACH,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ,mBAAmB;AAAA,EACrB;AAAA,EACA,KAAK;AAAA,IACH,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ,mBAAmB;AAAA,EACrB;AAAA,EACA,KAAK;AAAA,IACH,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ,mBAAmB;AAAA,EACrB;AACF;AASO,SAAS,WAAW,KAAwB;AACjD,MAAI,CAAC,SAAS,GAAG,GAAG;AAClB,UAAM,IAAI,MAAM,mCAAmC;AAAA,EACrD;AACA,SAAO,SAAS,GAAG;AACrB;AASO,SAAS,gBAAgB,KAAU,UAA4B;AACpE,QAAM,YAAY;AAAA,IAChB,CAAC,eAAO,GAAG;AAAA,MACT,CAAC,2BAAkB,GAAG;AAAA,MACtB,CAAC,qBAAe,GAAG;AAAA,MACnB,CAAC,2BAAkB,GAAG;AAAA,MACtB,CAAC,qBAAe,GAAG;AAAA,IACrB;AAAA,IACA,CAAC,eAAO,GAAG;AAAA,MACT,CAAC,2BAAkB,GAAG;AAAA,MACtB,CAAC,qBAAe,GAAG;AAAA,MACnB,CAAC,2BAAkB,GAAG;AAAA,MACtB,CAAC,qBAAe,GAAG;AAAA,IACrB;AAAA,IACA,CAAC,eAAO,GAAG;AAAA,MACT,CAAC,2BAAkB,GAAG;AAAA,MACtB,CAAC,qBAAe,GAAG;AAAA,MACnB,CAAC,2BAAkB,GAAG;AAAA,MACtB,CAAC,qBAAe,GAAG;AAAA,IACrB;AAAA,EACF;AAEA,MAAI,CAAC,UAAU,GAAG,GAAG;AACnB,UAAM,IAAI,MAAM,eAAe,GAAG,mCAAmC;AAAA,EACvE;AAEA,MAAI,CAAC,UAAU,GAAG,EAAE,QAAQ,GAAG;AAC7B,UAAM,IAAI;AAAA,MACR,eAAe,GAAG,iBAAiB,QAAQ;AAAA,IAC7C;AAAA,EACF;AAEA,SAAO,UAAU,GAAG,EAAE,QAAQ;AAChC","sourcesContent":["export enum Env {\n DEV = 'dev',\n UAT = 'uat',\n PRD = 'prd',\n}\n\nexport enum Platform {\n MOBILE = 'mobile',\n EXTENSION = 'extension',\n PORTFOLIO = 'portfolio',\n INFURA = 'infura',\n}\n\ntype EnvUrlsEntry = {\n authApiUrl: string;\n oidcApiUrl: string;\n userStorageApiUrl: string;\n};\n\nconst ENV_URLS: Record<Env, EnvUrlsEntry> = {\n dev: {\n authApiUrl: 'https://authentication.dev-api.cx.metamask.io',\n oidcApiUrl: 'https://oidc.dev-api.cx.metamask.io',\n userStorageApiUrl: 'https://user-storage.dev-api.cx.metamask.io',\n },\n uat: {\n authApiUrl: 'https://authentication.uat-api.cx.metamask.io',\n oidcApiUrl: 'https://oidc.uat-api.cx.metamask.io',\n userStorageApiUrl: 'https://user-storage.uat-api.cx.metamask.io',\n },\n prd: {\n authApiUrl: 'https://authentication.api.cx.metamask.io',\n oidcApiUrl: 'https://oidc.api.cx.metamask.io',\n userStorageApiUrl: 'https://user-storage.api.cx.metamask.io',\n },\n};\n\n/**\n * Validates and returns correct environment endpoints\n *\n * @param env - environment field\n * @returns the correct environment url\n * @throws on invalid environment passed\n */\nexport function getEnvUrls(env: Env): EnvUrlsEntry {\n if (!ENV_URLS[env]) {\n throw new Error('invalid environment configuration');\n }\n return ENV_URLS[env];\n}\n\n/**\n * Returns the valid OIDC Client ID (used during authorization)\n *\n * @param env - environment field\n * @param platform - platform field\n * @returns the OIDC client id for the environment\n */\nexport function getOidcClientId(env: Env, platform: Platform): string {\n const clientIds = {\n [Env.DEV]: {\n [Platform.PORTFOLIO]: 'c7ca94a0-5d52-4635-9502-1a50a9c410cc',\n [Platform.MOBILE]: 'e83c7cc9-267d-4fb4-8fec-f0e3bbe5ae8e',\n [Platform.EXTENSION]: 'f1a963d7-50dc-4cb5-8d81-f1f3654f0df3',\n [Platform.INFURA]: 'bd887006-0d55-481a-a395-5ff9a0dc52c9',\n },\n [Env.UAT]: {\n [Platform.PORTFOLIO]: '8f2dd4ac-db07-4819-9ba5-1ee0ec1b56d1',\n [Platform.MOBILE]: 'c3cfdcd2-51d6-4fae-ad2c-ff238c8fef53',\n [Platform.EXTENSION]: 'a9de167c-c9a6-43d8-af39-d301fd44c485',\n [Platform.INFURA]: '01929890-7002-4c97-9913-8f6c09a6d674',\n },\n [Env.PRD]: {\n [Platform.PORTFOLIO]: '35e1cd62-49c5-4be8-8b6e-a5212f2d2cfb',\n [Platform.MOBILE]: '75fa62a3-9ca0-4b91-9fe5-76bec86b0257',\n [Platform.EXTENSION]: '1132f10a-b4e5-4390-a5f2-d9c6022db564',\n [Platform.INFURA]: 'fdde9417-e193-4d23-9943-a8346b18d097',\n },\n };\n\n if (!clientIds[env]) {\n throw new Error(`invalid env ${env}: cannot determine oidc client id`);\n }\n\n if (!clientIds[env][platform]) {\n throw new Error(\n `invalid env ${env} and platform ${platform} combination: cannot determine oidc client id`,\n );\n }\n\n return clientIds[env][platform];\n}\n"]}
|
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
import {
|
|
2
2
|
createEntryPath
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-NSSHFDIS.mjs";
|
|
4
4
|
import {
|
|
5
|
-
createSHA256Hash,
|
|
6
5
|
encryption_default
|
|
7
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-QU4EXKJO.mjs";
|
|
7
|
+
import {
|
|
8
|
+
createSHA256Hash
|
|
9
|
+
} from "./chunk-K5UKU454.mjs";
|
|
8
10
|
import {
|
|
9
11
|
getEnvUrls
|
|
10
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-KTCSRECK.mjs";
|
|
11
13
|
import {
|
|
12
14
|
NotFoundError,
|
|
13
15
|
UserStorageError
|
|
@@ -19,11 +21,12 @@ import {
|
|
|
19
21
|
|
|
20
22
|
// src/sdk/user-storage.ts
|
|
21
23
|
var STORAGE_URL = (env, encryptedPath) => `${getEnvUrls(env).userStorageApiUrl}/api/v1/userstorage/${encryptedPath}`;
|
|
22
|
-
var _upsertUserStorage, upsertUserStorage_fn, _getUserStorage, getUserStorage_fn, _createEntryKey, createEntryKey_fn, _getAuthorizationHeader, getAuthorizationHeader_fn;
|
|
24
|
+
var _upsertUserStorage, upsertUserStorage_fn, _getUserStorage, getUserStorage_fn, _getUserStorageAllFeatureEntries, getUserStorageAllFeatureEntries_fn, _createEntryKey, createEntryKey_fn, _getAuthorizationHeader, getAuthorizationHeader_fn;
|
|
23
25
|
var UserStorage = class {
|
|
24
26
|
constructor(config, options) {
|
|
25
27
|
__privateAdd(this, _upsertUserStorage);
|
|
26
28
|
__privateAdd(this, _getUserStorage);
|
|
29
|
+
__privateAdd(this, _getUserStorageAllFeatureEntries);
|
|
27
30
|
__privateAdd(this, _createEntryKey);
|
|
28
31
|
// TODO: Either fix this lint violation or explain why it's necessary to ignore.
|
|
29
32
|
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
@@ -38,6 +41,9 @@ var UserStorage = class {
|
|
|
38
41
|
async getItem(path) {
|
|
39
42
|
return __privateMethod(this, _getUserStorage, getUserStorage_fn).call(this, path);
|
|
40
43
|
}
|
|
44
|
+
async getAllFeatureItems(path) {
|
|
45
|
+
return __privateMethod(this, _getUserStorageAllFeatureEntries, getUserStorageAllFeatureEntries_fn).call(this, path);
|
|
46
|
+
}
|
|
41
47
|
async getStorageKey() {
|
|
42
48
|
const storageKey = await this.options.storage?.getStorageKey();
|
|
43
49
|
if (storageKey) {
|
|
@@ -120,6 +126,48 @@ getUserStorage_fn = async function(path) {
|
|
|
120
126
|
);
|
|
121
127
|
}
|
|
122
128
|
};
|
|
129
|
+
_getUserStorageAllFeatureEntries = new WeakSet();
|
|
130
|
+
getUserStorageAllFeatureEntries_fn = async function(path) {
|
|
131
|
+
try {
|
|
132
|
+
const headers = await __privateMethod(this, _getAuthorizationHeader, getAuthorizationHeader_fn).call(this);
|
|
133
|
+
const storageKey = await this.getStorageKey();
|
|
134
|
+
const url = new URL(STORAGE_URL(this.env, path));
|
|
135
|
+
const response = await fetch(url.toString(), {
|
|
136
|
+
headers: {
|
|
137
|
+
"Content-Type": "application/json",
|
|
138
|
+
...headers
|
|
139
|
+
}
|
|
140
|
+
});
|
|
141
|
+
if (response.status === 404) {
|
|
142
|
+
throw new NotFoundError(`feature not found for path '${path}'.`);
|
|
143
|
+
}
|
|
144
|
+
if (!response.ok) {
|
|
145
|
+
const responseBody = await response.json();
|
|
146
|
+
throw new Error(
|
|
147
|
+
`HTTP error message: ${responseBody.message}, error: ${responseBody.error}`
|
|
148
|
+
);
|
|
149
|
+
}
|
|
150
|
+
const userStorage = await response.json();
|
|
151
|
+
if (!Array.isArray(userStorage)) {
|
|
152
|
+
return null;
|
|
153
|
+
}
|
|
154
|
+
const decryptedData = userStorage.flatMap((entry) => {
|
|
155
|
+
if (!entry.Data) {
|
|
156
|
+
return [];
|
|
157
|
+
}
|
|
158
|
+
return encryption_default.decryptString(entry.Data, storageKey);
|
|
159
|
+
});
|
|
160
|
+
return decryptedData;
|
|
161
|
+
} catch (e) {
|
|
162
|
+
if (e instanceof NotFoundError) {
|
|
163
|
+
throw e;
|
|
164
|
+
}
|
|
165
|
+
const errorMessage = e instanceof Error ? e.message : JSON.stringify(e ?? "");
|
|
166
|
+
throw new UserStorageError(
|
|
167
|
+
`failed to get user storage for path '${path}'. ${errorMessage}`
|
|
168
|
+
);
|
|
169
|
+
}
|
|
170
|
+
};
|
|
123
171
|
_createEntryKey = new WeakSet();
|
|
124
172
|
createEntryKey_fn = function(key, storageKey) {
|
|
125
173
|
const hashedKey = createSHA256Hash(key + storageKey);
|
|
@@ -135,4 +183,4 @@ export {
|
|
|
135
183
|
STORAGE_URL,
|
|
136
184
|
UserStorage
|
|
137
185
|
};
|
|
138
|
-
//# sourceMappingURL=chunk-
|
|
186
|
+
//# sourceMappingURL=chunk-E7Z5TCQT.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/sdk/user-storage.ts"],"sourcesContent":["import type {\n UserStoragePathWithFeatureAndKey,\n UserStoragePathWithFeatureOnly,\n} from '../controllers/user-storage/schema';\nimport { createEntryPath } from '../controllers/user-storage/schema';\nimport type { GetUserStorageAllFeatureEntriesResponse } from '../controllers/user-storage/services';\nimport type { IBaseAuth } from './authentication-jwt-bearer/types';\nimport encryption, { createSHA256Hash } from './encryption';\nimport type { Env } from './env';\nimport { getEnvUrls } from './env';\nimport { NotFoundError, UserStorageError } from './errors';\n\nexport const STORAGE_URL = (env: Env, encryptedPath: string) =>\n `${getEnvUrls(env).userStorageApiUrl}/api/v1/userstorage/${encryptedPath}`;\n\nexport type UserStorageConfig = {\n env: Env;\n auth: Pick<IBaseAuth, 'getAccessToken' | 'getUserProfile' | 'signMessage'>;\n};\n\nexport type StorageOptions = {\n getStorageKey: () => Promise<string | null>;\n setStorageKey: (val: string) => Promise<void>;\n};\n\nexport type UserStorageOptions = {\n storage?: StorageOptions;\n};\n\ntype ErrorMessage = {\n message: string;\n error: string;\n};\n\nexport class UserStorage {\n protected config: UserStorageConfig;\n\n protected options: UserStorageOptions;\n\n protected env: Env;\n\n constructor(config: UserStorageConfig, options: UserStorageOptions) {\n this.env = config.env;\n this.config = config;\n this.options = options;\n }\n\n async setItem(\n path: UserStoragePathWithFeatureAndKey,\n value: string,\n ): Promise<void> {\n await this.#upsertUserStorage(path, value);\n }\n\n async getItem(path: UserStoragePathWithFeatureAndKey): Promise<string> {\n return this.#getUserStorage(path);\n }\n\n async getAllFeatureItems(\n path: UserStoragePathWithFeatureOnly,\n ): Promise<string[] | null> {\n return this.#getUserStorageAllFeatureEntries(path);\n }\n\n async getStorageKey(): Promise<string> {\n const storageKey = await this.options.storage?.getStorageKey();\n if (storageKey) {\n return storageKey;\n }\n\n const userProfile = await this.config.auth.getUserProfile();\n const storageKeySignature = await this.config.auth.signMessage(\n `metamask:${userProfile.profileId}`,\n );\n const hashedStorageKeySignature = createSHA256Hash(storageKeySignature);\n await this.options.storage?.setStorageKey(hashedStorageKeySignature);\n return hashedStorageKeySignature;\n }\n\n async #upsertUserStorage(\n path: UserStoragePathWithFeatureAndKey,\n data: string,\n ): Promise<void> {\n try {\n const headers = await this.#getAuthorizationHeader();\n const storageKey = await this.getStorageKey();\n const encryptedData = encryption.encryptString(data, storageKey);\n const encryptedPath = createEntryPath(path, storageKey);\n\n const url = new URL(STORAGE_URL(this.env, encryptedPath));\n\n const response = await fetch(url.toString(), {\n method: 'PUT',\n headers: {\n 'Content-Type': 'application/json',\n ...headers,\n },\n body: JSON.stringify({ data: encryptedData }),\n });\n\n if (!response.ok) {\n const responseBody: ErrorMessage = await response.json().catch(() => ({\n message: 'unknown',\n error: 'unknown',\n }));\n throw new Error(\n `HTTP error message: ${responseBody.message}, error: ${responseBody.error}`,\n );\n }\n } catch (e) {\n /* istanbul ignore next */\n const errorMessage =\n e instanceof Error ? e.message : JSON.stringify(e ?? '');\n throw new UserStorageError(\n `failed to upsert user storage for path '${path}'. ${errorMessage}`,\n );\n }\n }\n\n async #getUserStorage(\n path: UserStoragePathWithFeatureAndKey,\n ): Promise<string> {\n try {\n const headers = await this.#getAuthorizationHeader();\n const storageKey = await this.getStorageKey();\n const encryptedPath = createEntryPath(path, storageKey);\n\n const url = new URL(STORAGE_URL(this.env, encryptedPath));\n\n const response = await fetch(url.toString(), {\n headers: {\n 'Content-Type': 'application/json',\n ...headers,\n },\n });\n\n if (response.status === 404) {\n throw new NotFoundError(\n `feature/key set not found for path '${path}'.`,\n );\n }\n\n if (!response.ok) {\n const responseBody = (await response.json()) as ErrorMessage;\n throw new Error(\n `HTTP error message: ${responseBody.message}, error: ${responseBody.error}`,\n );\n }\n\n const { Data: encryptedData } = await response.json();\n return encryption.decryptString(encryptedData, storageKey);\n } catch (e) {\n if (e instanceof NotFoundError) {\n throw e;\n }\n\n /* istanbul ignore next */\n const errorMessage =\n e instanceof Error ? e.message : JSON.stringify(e ?? '');\n\n throw new UserStorageError(\n `failed to get user storage for path '${path}'. ${errorMessage}`,\n );\n }\n }\n\n async #getUserStorageAllFeatureEntries(\n path: UserStoragePathWithFeatureOnly,\n ): Promise<string[] | null> {\n try {\n const headers = await this.#getAuthorizationHeader();\n const storageKey = await this.getStorageKey();\n\n const url = new URL(STORAGE_URL(this.env, path));\n\n const response = await fetch(url.toString(), {\n headers: {\n 'Content-Type': 'application/json',\n ...headers,\n },\n });\n\n if (response.status === 404) {\n throw new NotFoundError(`feature not found for path '${path}'.`);\n }\n\n if (!response.ok) {\n const responseBody = (await response.json()) as ErrorMessage;\n throw new Error(\n `HTTP error message: ${responseBody.message}, error: ${responseBody.error}`,\n );\n }\n\n const userStorage: GetUserStorageAllFeatureEntriesResponse | null =\n await response.json();\n\n if (!Array.isArray(userStorage)) {\n return null;\n }\n\n const decryptedData = userStorage.flatMap((entry) => {\n if (!entry.Data) {\n return [];\n }\n\n return encryption.decryptString(entry.Data, storageKey);\n });\n\n return decryptedData;\n } catch (e) {\n if (e instanceof NotFoundError) {\n throw e;\n }\n\n /* istanbul ignore next */\n const errorMessage =\n e instanceof Error ? e.message : JSON.stringify(e ?? '');\n\n throw new UserStorageError(\n `failed to get user storage for path '${path}'. ${errorMessage}`,\n );\n }\n }\n\n #createEntryKey(key: string, storageKey: string): string {\n const hashedKey = createSHA256Hash(key + storageKey);\n return hashedKey;\n }\n\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\n async #getAuthorizationHeader(): Promise<{ Authorization: string }> {\n const accessToken = await this.config.auth.getAccessToken();\n return { Authorization: `Bearer ${accessToken}` };\n }\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
// src/controllers/user-storage/accounts/constants.ts
|
|
2
|
+
var USER_STORAGE_VERSION = "1";
|
|
3
|
+
var USER_STORAGE_VERSION_KEY = "v";
|
|
4
|
+
var LOCALIZED_DEFAULT_ACCOUNT_NAMES = [
|
|
5
|
+
"Account",
|
|
6
|
+
"\u1218\u1208\u12EB",
|
|
7
|
+
"\u0627\u0644\u062D\u0633\u0627\u0628",
|
|
8
|
+
"\u041F\u0440\u043E\u0444\u0438\u043B",
|
|
9
|
+
"\u0985\u09CD\u09AF\u09BE\u0995\u09BE\u0989\u09A8\u09CD\u099F",
|
|
10
|
+
"Compte",
|
|
11
|
+
"\xDA\u010Det",
|
|
12
|
+
"Konto",
|
|
13
|
+
"\u039B\u03BF\u03B3\u03B1\u03C1\u03B9\u03B1\u03C3\u03BC\u03CC\u03C2",
|
|
14
|
+
"Cuenta",
|
|
15
|
+
"\u062D\u0633\u0627\u0628",
|
|
16
|
+
"Tili",
|
|
17
|
+
"\u0A8F\u0A95\u0ABE\u0A89\u0AA8\u0ACD\u0A9F",
|
|
18
|
+
"\u05D7\u05E9\u05D1\u05D5\u05DF",
|
|
19
|
+
"\u0905\u0915\u093E\u0909\u0902\u091F",
|
|
20
|
+
"\u0916\u093E\u0924\u093E",
|
|
21
|
+
"Ra\u010Dun",
|
|
22
|
+
"Kont",
|
|
23
|
+
"Fi\xF3k",
|
|
24
|
+
"Akun",
|
|
25
|
+
"\u30A2\u30AB\u30A6\u30F3\u30C8",
|
|
26
|
+
"\u0C96\u0CBE\u0CA4\u0CC6",
|
|
27
|
+
"\uACC4\uC815",
|
|
28
|
+
"Paskyra",
|
|
29
|
+
"Konts",
|
|
30
|
+
"\u0D05\u0D15\u0D4D\u0D15\u0D57\u0D23\u0D4D\u0D1F\u0D4D",
|
|
31
|
+
"\u0916\u093E\u0924\u0947",
|
|
32
|
+
"Akaun",
|
|
33
|
+
"Conta",
|
|
34
|
+
"Cont",
|
|
35
|
+
"\u0421\u0447\u0435\u0442",
|
|
36
|
+
"\u043D\u0430\u043B\u043E\u0433",
|
|
37
|
+
"Akaunti",
|
|
38
|
+
"\u0B95\u0BA3\u0B95\u0BCD\u0B95\u0BC1",
|
|
39
|
+
"\u0C16\u0C3E\u0C24\u0C3E",
|
|
40
|
+
"\u0E1A\u0E31\u0E0D\u0E0A\u0E35",
|
|
41
|
+
"Hesap",
|
|
42
|
+
"\u041E\u0431\u043B\u0456\u043A\u043E\u0432\u0438\u0439 \u0437\u0430\u043F\u0438\u0441",
|
|
43
|
+
"T\xE0i kho\u1EA3n",
|
|
44
|
+
"\u8D26\u6237",
|
|
45
|
+
"\u5E33\u6236"
|
|
46
|
+
];
|
|
47
|
+
|
|
48
|
+
export {
|
|
49
|
+
USER_STORAGE_VERSION,
|
|
50
|
+
USER_STORAGE_VERSION_KEY,
|
|
51
|
+
LOCALIZED_DEFAULT_ACCOUNT_NAMES
|
|
52
|
+
};
|
|
53
|
+
//# sourceMappingURL=chunk-EHZFPUJH.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/controllers/user-storage/accounts/constants.ts"],"sourcesContent":["export const USER_STORAGE_VERSION = '1';\n\n// Force cast. We don't really care about the type here since we treat it as a unique symbol\nexport const USER_STORAGE_VERSION_KEY: unique symbol = 'v' as never;\n\n// We need this in order to know if an account is a default account or not when we do account syncing\nexport const LOCALIZED_DEFAULT_ACCOUNT_NAMES = [\n 'Account',\n 'መለያ',\n 'الحساب',\n 'Профил',\n 'অ্যাকাউন্ট',\n 'Compte',\n 'Účet',\n 'Konto',\n 'Λογαριασμός',\n 'Cuenta',\n 'حساب',\n 'Tili',\n 'એકાઉન્ટ',\n 'חשבון',\n 'अकाउंट',\n 'खाता',\n 'Račun',\n 'Kont',\n 'Fiók',\n 'Akun',\n 'アカウント',\n 'ಖಾತೆ',\n '계정',\n 'Paskyra',\n 'Konts',\n 'അക്കൗണ്ട്',\n 'खाते',\n 'Akaun',\n 'Conta',\n 'Cont',\n 'Счет',\n 'налог',\n 'Akaunti',\n 'கணக்கு',\n 'ఖాతా',\n 'บัญชี',\n 'Hesap',\n 'Обліковий запис',\n 'Tài khoản',\n '账户',\n '帳戶',\n] as const;\n"],"mappings":";AAAO,IAAM,uBAAuB;AAG7B,IAAM,2BAA0C;AAGhD,IAAM,kCAAkC;AAAA,EAC7C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;","names":[]}
|
|
@@ -3,8 +3,10 @@
|
|
|
3
3
|
var _chunkT3FNDVE3js = require('./chunk-T3FNDVE3.js');
|
|
4
4
|
|
|
5
5
|
// src/controllers/user-storage/schema.ts
|
|
6
|
+
var ALLOW_ARBITRARY_KEYS = "ALLOW_ARBITRARY_KEYS";
|
|
6
7
|
var USER_STORAGE_SCHEMA = {
|
|
7
|
-
notifications: ["notificationSettings"]
|
|
8
|
+
notifications: ["notificationSettings"],
|
|
9
|
+
accounts: [ALLOW_ARBITRARY_KEYS]
|
|
8
10
|
};
|
|
9
11
|
var getFeatureAndKeyFromPath = (path) => {
|
|
10
12
|
const pathRegex = /^\w+\.\w+$/u;
|
|
@@ -18,7 +20,7 @@ var getFeatureAndKeyFromPath = (path) => {
|
|
|
18
20
|
throw new Error(`user-storage - invalid feature provided: ${feature}`);
|
|
19
21
|
}
|
|
20
22
|
const validFeature = USER_STORAGE_SCHEMA[feature];
|
|
21
|
-
if (!validFeature.includes(key)) {
|
|
23
|
+
if (!validFeature.includes(key) && !validFeature.includes(ALLOW_ARBITRARY_KEYS)) {
|
|
22
24
|
const validKeys = USER_STORAGE_SCHEMA[feature].join(", ");
|
|
23
25
|
throw new Error(
|
|
24
26
|
`user-storage - invalid key provided for this feature: ${key}. Valid keys: ${validKeys}`
|
|
@@ -26,6 +28,10 @@ var getFeatureAndKeyFromPath = (path) => {
|
|
|
26
28
|
}
|
|
27
29
|
return { feature, key };
|
|
28
30
|
};
|
|
31
|
+
var isPathWithFeatureAndKey = (path) => {
|
|
32
|
+
const pathRegex = /^\w+\.\w+$/u;
|
|
33
|
+
return pathRegex.test(path);
|
|
34
|
+
};
|
|
29
35
|
function createEntryPath(path, storageKey) {
|
|
30
36
|
const { feature, key } = getFeatureAndKeyFromPath(path);
|
|
31
37
|
const hashedKey = _chunkT3FNDVE3js.createSHA256Hash.call(void 0, key + storageKey);
|
|
@@ -36,5 +42,6 @@ function createEntryPath(path, storageKey) {
|
|
|
36
42
|
|
|
37
43
|
|
|
38
44
|
|
|
39
|
-
|
|
40
|
-
|
|
45
|
+
|
|
46
|
+
exports.USER_STORAGE_SCHEMA = USER_STORAGE_SCHEMA; exports.getFeatureAndKeyFromPath = getFeatureAndKeyFromPath; exports.isPathWithFeatureAndKey = isPathWithFeatureAndKey; exports.createEntryPath = createEntryPath;
|
|
47
|
+
//# sourceMappingURL=chunk-EYZFHZR2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/controllers/user-storage/schema.ts"],"names":[],"mappings":";;;;;AASA,IAAM,uBAAuB;AAEtB,IAAM,sBAAsB;AAAA,EACjC,eAAe,CAAC,sBAAsB;AAAA,EACtC,UAAU,CAAC,oBAAoB;AACjC;AAoBO,IAAM,2BAA2B,CACtC,SAC6B;AAC7B,QAAM,YAAY;AAElB,MAAI,CAAC,UAAU,KAAK,IAAI,GAAG;AACzB,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EACF;AAEA,QAAM,CAAC,SAAS,GAAG,IAAI,KAAK,MAAM,GAAG;AAKrC,MAAI,EAAE,WAAW,sBAAsB;AACrC,UAAM,IAAI,MAAM,4CAA4C,OAAO,EAAE;AAAA,EACvE;AAEA,QAAM,eAAe,oBAAoB,OAAO;AAEhD,MACE,CAAC,aAAa,SAAS,GAAG,KAC1B,CAAC,aAAa,SAAS,oBAAoB,GAC3C;AACA,UAAM,YAAY,oBAAoB,OAAO,EAAE,KAAK,IAAI;AAExD,UAAM,IAAI;AAAA,MACR,yDAAyD,GAAG,iBAAiB,SAAS;AAAA,IACxF;AAAA,EACF;AAEA,SAAO,EAAE,SAAS,IAAI;AACxB;AAEO,IAAM,0BAA0B,CACrC,SAC6C;AAC7C,QAAM,YAAY;AAElB,SAAO,UAAU,KAAK,IAAI;AAC5B;AAWO,SAAS,gBACd,MACA,YACQ;AACR,QAAM,EAAE,SAAS,IAAI,IAAI,yBAAyB,IAAI;AACtD,QAAM,YAAY,iBAAiB,MAAM,UAAU;AAEnD,SAAO,IAAI,OAAO,IAAI,SAAS;AACjC","sourcesContent":["import { createSHA256Hash } from './encryption';\n\n/**\n * The User Storage Endpoint requires a feature name and a namespace key.\n * Developers can provide additional features and keys by extending these types below.\n *\n * Adding ALLOW_ARBITRARY_KEYS as the first key in the array allows for any key to be used for this feature.\n * This can be useful for features where keys are not deterministic (eg. accounts addresses).\n */\nconst ALLOW_ARBITRARY_KEYS = 'ALLOW_ARBITRARY_KEYS' as const;\n\nexport const USER_STORAGE_SCHEMA = {\n notifications: ['notificationSettings'],\n accounts: [ALLOW_ARBITRARY_KEYS],\n} as const;\n\ntype UserStorageSchema = typeof USER_STORAGE_SCHEMA;\n\ntype UserStorageFeatures = keyof UserStorageSchema;\ntype UserStorageFeatureKeys<Feature extends UserStorageFeatures> =\n UserStorageSchema[Feature][0] extends typeof ALLOW_ARBITRARY_KEYS\n ? string\n : UserStorageSchema[Feature][number];\n\ntype UserStorageFeatureAndKey = {\n feature: UserStorageFeatures;\n key: UserStorageFeatureKeys<UserStorageFeatures>;\n};\n\nexport type UserStoragePathWithFeatureOnly = keyof UserStorageSchema;\nexport type UserStoragePathWithFeatureAndKey = {\n [K in UserStorageFeatures]: `${K}.${UserStorageFeatureKeys<K>}`;\n}[UserStoragePathWithFeatureOnly];\n\nexport const getFeatureAndKeyFromPath = (\n path: UserStoragePathWithFeatureAndKey,\n): UserStorageFeatureAndKey => {\n const pathRegex = /^\\w+\\.\\w+$/u;\n\n if (!pathRegex.test(path)) {\n throw new Error(\n `user-storage - path is not in the correct format. Correct format: 'feature.key'`,\n );\n }\n\n const [feature, key] = path.split('.') as [\n UserStorageFeatures,\n UserStorageFeatureKeys<UserStorageFeatures>,\n ];\n\n if (!(feature in USER_STORAGE_SCHEMA)) {\n throw new Error(`user-storage - invalid feature provided: ${feature}`);\n }\n\n const validFeature = USER_STORAGE_SCHEMA[feature] as readonly string[];\n\n if (\n !validFeature.includes(key) &&\n !validFeature.includes(ALLOW_ARBITRARY_KEYS)\n ) {\n const validKeys = USER_STORAGE_SCHEMA[feature].join(', ');\n\n throw new Error(\n `user-storage - invalid key provided for this feature: ${key}. Valid keys: ${validKeys}`,\n );\n }\n\n return { feature, key };\n};\n\nexport const isPathWithFeatureAndKey = (\n path: string,\n): path is UserStoragePathWithFeatureAndKey => {\n const pathRegex = /^\\w+\\.\\w+$/u;\n\n return pathRegex.test(path);\n};\n\n/**\n * Constructs a unique entry path for a user.\n * This can be done due to the uniqueness of the storage key (no users will share the same storage key).\n * The users entry is a unique hash that cannot be reversed.\n *\n * @param path - string in the form of `${feature}.${key}` that matches schema\n * @param storageKey - users storage key\n * @returns path to store entry\n */\nexport function createEntryPath(\n path: UserStoragePathWithFeatureAndKey,\n storageKey: string,\n): string {\n const { feature, key } = getFeatureAndKeyFromPath(path);\n const hashedKey = createSHA256Hash(key + storageKey);\n\n return `/${feature}/${hashedKey}`;\n}\n"]}
|