@metamask/profile-sync-controller 0.0.0 → 0.1.1
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 +19 -1
- package/dist/chunk-2XGRQBXI.mjs +70 -0
- package/dist/chunk-2XGRQBXI.mjs.map +1 -0
- package/dist/chunk-32HAX3MW.mjs +224 -0
- package/dist/chunk-32HAX3MW.mjs.map +1 -0
- package/dist/chunk-5SXXO4MV.js +70 -0
- package/dist/chunk-5SXXO4MV.js.map +1 -0
- package/dist/chunk-5TOWF6UW.mjs +11 -0
- package/dist/chunk-5TOWF6UW.mjs.map +1 -0
- package/dist/chunk-6P6CUKKI.mjs +30 -0
- package/dist/chunk-6P6CUKKI.mjs.map +1 -0
- package/dist/chunk-76VRE4BI.mjs +18 -0
- package/dist/chunk-76VRE4BI.mjs.map +1 -0
- package/dist/chunk-AARMY5TW.mjs +86 -0
- package/dist/chunk-AARMY5TW.mjs.map +1 -0
- package/dist/chunk-AK7OTIWA.js +11 -0
- package/dist/chunk-AK7OTIWA.js.map +1 -0
- package/dist/chunk-AUFUOKJW.mjs +25 -0
- package/dist/chunk-AUFUOKJW.mjs.map +1 -0
- package/dist/{chunk-OF3TQWGX.js → chunk-AVOOINGJ.js} +34 -34
- package/dist/chunk-AVOOINGJ.js.map +1 -0
- package/dist/{chunk-CZ7YK35S.mjs → chunk-AXWK4Y23.mjs} +7 -5
- package/dist/{chunk-CZ7YK35S.mjs.map → chunk-AXWK4Y23.mjs.map} +1 -1
- package/dist/{chunk-UMKBFFZ5.mjs → chunk-B5DBQDB3.mjs} +13 -4
- package/dist/chunk-B5DBQDB3.mjs.map +1 -0
- package/dist/chunk-B6CSNLGE.js +25 -0
- package/dist/chunk-B6CSNLGE.js.map +1 -0
- package/dist/{chunk-NRH6O4QZ.js → chunk-BOET676P.js} +45 -14
- package/dist/chunk-BOET676P.js.map +1 -0
- package/dist/{chunk-2FZSWVHT.mjs → chunk-CAIIVJAO.mjs} +1 -1
- package/dist/chunk-CAIIVJAO.mjs.map +1 -0
- package/dist/chunk-ELHJSRS2.js +98 -0
- package/dist/chunk-ELHJSRS2.js.map +1 -0
- package/dist/chunk-FCT2LIGH.mjs +106 -0
- package/dist/chunk-FCT2LIGH.mjs.map +1 -0
- package/dist/chunk-FQ5SDMRE.mjs +77 -0
- package/dist/chunk-FQ5SDMRE.mjs.map +1 -0
- package/dist/chunk-H25EBXG5.mjs +58 -0
- package/dist/chunk-H25EBXG5.mjs.map +1 -0
- package/dist/chunk-H4TDS65R.js +81 -0
- package/dist/chunk-H4TDS65R.js.map +1 -0
- package/dist/{chunk-Z4BLTVTB.js → chunk-IGY2S5BC.js} +9 -3
- package/dist/chunk-IPSBQ3MS.js +30 -0
- package/dist/chunk-IPSBQ3MS.js.map +1 -0
- package/dist/{chunk-4NGEEDGV.mjs → chunk-JLDFMYAH.mjs} +9 -9
- package/dist/chunk-JLDFMYAH.mjs.map +1 -0
- package/dist/chunk-K5UKU454.mjs +158 -0
- package/dist/chunk-K5UKU454.mjs.map +1 -0
- package/dist/chunk-KBCXN3YW.mjs +98 -0
- package/dist/chunk-KBCXN3YW.mjs.map +1 -0
- package/dist/chunk-LSVRA3X2.mjs +81 -0
- package/dist/chunk-LSVRA3X2.mjs.map +1 -0
- package/dist/{chunk-GQLHSQGZ.js → chunk-MBTBE4P5.js} +9 -2
- package/dist/chunk-MBTBE4P5.js.map +1 -0
- package/dist/chunk-NLHLVVOO.js +106 -0
- package/dist/chunk-NLHLVVOO.js.map +1 -0
- package/dist/{chunk-VZXD5DCQ.js → chunk-P4DUDLMY.js} +36 -27
- package/dist/chunk-P4DUDLMY.js.map +1 -0
- package/dist/{chunk-6X6I3HZU.js → chunk-P52TG263.js} +28 -26
- package/dist/chunk-P52TG263.js.map +1 -0
- package/dist/{chunk-CFST6GWE.js → chunk-PBRUOBEQ.js} +1 -1
- package/dist/chunk-PBRUOBEQ.js.map +1 -0
- package/dist/chunk-PCOIRDTO.js +18 -0
- package/dist/chunk-PCOIRDTO.js.map +1 -0
- package/dist/chunk-PTR4DAX6.js +79 -0
- package/dist/chunk-PTR4DAX6.js.map +1 -0
- package/dist/chunk-Q5WIUNX5.js +126 -0
- package/dist/chunk-Q5WIUNX5.js.map +1 -0
- package/dist/chunk-RX5R6BUI.js +86 -0
- package/dist/chunk-RX5R6BUI.js.map +1 -0
- package/dist/chunk-SMKTWM6I.js +77 -0
- package/dist/chunk-SMKTWM6I.js.map +1 -0
- package/dist/chunk-T3FNDVE3.js +158 -0
- package/dist/chunk-T3FNDVE3.js.map +1 -0
- package/dist/{chunk-BHVT2QEA.mjs → chunk-TFFQFIJV.mjs} +8 -1
- package/dist/chunk-TFFQFIJV.mjs.map +1 -0
- package/dist/chunk-TGFMKARH.mjs +274 -0
- package/dist/chunk-TGFMKARH.mjs.map +1 -0
- package/dist/{chunk-XUI43LEZ.mjs → chunk-U5UIDVOO.mjs} +7 -1
- package/dist/chunk-UAXWZN5J.js +58 -0
- package/dist/chunk-UAXWZN5J.js.map +1 -0
- package/dist/{chunk-CYGZ4WLJ.mjs → chunk-WB6MUIML.mjs} +36 -5
- package/dist/chunk-WB6MUIML.mjs.map +1 -0
- package/dist/chunk-WJCKQLKK.mjs +79 -0
- package/dist/chunk-WJCKQLKK.mjs.map +1 -0
- package/dist/{chunk-VXPVURGH.mjs → chunk-Y46NMA3V.mjs} +9 -9
- package/dist/chunk-Y46NMA3V.mjs.map +1 -0
- package/dist/chunk-YASNOFBV.js +274 -0
- package/dist/chunk-YASNOFBV.js.map +1 -0
- package/dist/chunk-YUXN5GSW.js +224 -0
- package/dist/chunk-YUXN5GSW.js.map +1 -0
- package/dist/controllers/authentication/AuthenticationController.js +24 -0
- package/dist/controllers/authentication/AuthenticationController.mjs +24 -0
- package/dist/controllers/authentication/auth-snap-requests.js +10 -0
- package/dist/controllers/authentication/auth-snap-requests.mjs +10 -0
- package/dist/controllers/authentication/index.js +28 -0
- package/dist/controllers/authentication/index.js.map +1 -0
- package/dist/controllers/authentication/index.mjs +28 -0
- package/dist/controllers/authentication/index.mjs.map +1 -0
- package/dist/controllers/authentication/services.js +32 -0
- package/dist/controllers/authentication/services.js.map +1 -0
- package/dist/controllers/authentication/services.mjs +32 -0
- package/dist/controllers/authentication/services.mjs.map +1 -0
- package/dist/controllers/index.js +34 -0
- package/dist/controllers/index.js.map +1 -0
- package/dist/controllers/index.mjs +34 -0
- package/dist/controllers/index.mjs.map +1 -0
- package/dist/controllers/user-storage/UserStorageController.js +29 -0
- package/dist/controllers/user-storage/UserStorageController.js.map +1 -0
- package/dist/controllers/user-storage/UserStorageController.mjs +29 -0
- package/dist/controllers/user-storage/UserStorageController.mjs.map +1 -0
- package/dist/controllers/user-storage/encryption/cache.js +13 -0
- package/dist/controllers/user-storage/encryption/cache.js.map +1 -0
- package/dist/controllers/user-storage/encryption/cache.mjs +13 -0
- package/dist/controllers/user-storage/encryption/cache.mjs.map +1 -0
- package/dist/controllers/user-storage/encryption/encryption.js +12 -0
- package/dist/controllers/user-storage/encryption/encryption.js.map +1 -0
- package/dist/controllers/user-storage/encryption/encryption.mjs +12 -0
- package/dist/controllers/user-storage/encryption/encryption.mjs.map +1 -0
- package/dist/controllers/user-storage/encryption/index.js +16 -0
- package/dist/controllers/user-storage/encryption/index.js.map +1 -0
- package/dist/controllers/user-storage/encryption/index.mjs +16 -0
- package/dist/controllers/user-storage/encryption/index.mjs.map +1 -0
- package/dist/controllers/user-storage/encryption/utils.js +12 -0
- package/dist/controllers/user-storage/encryption/utils.js.map +1 -0
- package/dist/controllers/user-storage/encryption/utils.mjs +12 -0
- package/dist/controllers/user-storage/encryption/utils.mjs.map +1 -0
- package/dist/controllers/user-storage/index.js +38 -0
- package/dist/controllers/user-storage/index.js.map +1 -0
- package/dist/controllers/user-storage/index.mjs +38 -0
- package/dist/controllers/user-storage/index.mjs.map +1 -0
- package/dist/controllers/user-storage/schema.js +14 -0
- package/dist/controllers/user-storage/schema.js.map +1 -0
- package/dist/controllers/user-storage/schema.mjs +14 -0
- package/dist/controllers/user-storage/schema.mjs.map +1 -0
- package/dist/controllers/user-storage/services.js +31 -0
- package/dist/controllers/user-storage/services.js.map +1 -0
- package/dist/controllers/user-storage/services.mjs +31 -0
- package/dist/controllers/user-storage/services.mjs.map +1 -0
- package/dist/index.js +31 -62
- package/dist/index.mjs +32 -63
- package/dist/sdk/authentication-jwt-bearer/flow-siwe.js +7 -8
- package/dist/sdk/authentication-jwt-bearer/flow-siwe.mjs +6 -7
- package/dist/sdk/authentication-jwt-bearer/flow-srp.js +7 -8
- package/dist/sdk/authentication-jwt-bearer/flow-srp.mjs +6 -7
- package/dist/sdk/authentication-jwt-bearer/services.js +10 -6
- package/dist/sdk/authentication-jwt-bearer/services.mjs +11 -7
- package/dist/sdk/authentication-jwt-bearer/types.js +3 -3
- package/dist/sdk/authentication-jwt-bearer/types.mjs +2 -2
- package/dist/sdk/authentication.js +9 -10
- package/dist/sdk/authentication.mjs +8 -9
- package/dist/sdk/encryption.js +5 -3
- package/dist/sdk/encryption.mjs +4 -2
- package/dist/sdk/env.js +5 -3
- package/dist/sdk/env.mjs +4 -2
- package/dist/sdk/errors.js +5 -3
- package/dist/sdk/errors.mjs +4 -2
- package/dist/sdk/index.js +18 -13
- package/dist/sdk/index.mjs +17 -12
- package/dist/sdk/user-storage.js +6 -6
- package/dist/sdk/user-storage.mjs +5 -5
- package/dist/sdk/utils/eip-6963-metamask-provider.js +1 -1
- package/dist/sdk/utils/eip-6963-metamask-provider.mjs +1 -1
- package/dist/sdk/utils/messaging-signing-snap-requests.js +1 -1
- package/dist/sdk/utils/messaging-signing-snap-requests.mjs +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/dist/types/controllers/authentication/AuthenticationController.d.ts +74 -0
- package/dist/types/controllers/authentication/AuthenticationController.d.ts.map +1 -0
- package/dist/types/controllers/authentication/__fixtures__/index.d.ts +2 -0
- package/dist/types/controllers/authentication/__fixtures__/index.d.ts.map +1 -0
- package/dist/types/controllers/authentication/__fixtures__/mockResponses.d.ts +23 -0
- package/dist/types/controllers/authentication/__fixtures__/mockResponses.d.ts.map +1 -0
- package/dist/types/controllers/authentication/__fixtures__/mockServices.d.ts +10 -0
- package/dist/types/controllers/authentication/__fixtures__/mockServices.d.ts.map +1 -0
- package/dist/types/controllers/authentication/auth-snap-requests.d.ts +17 -0
- package/dist/types/controllers/authentication/auth-snap-requests.d.ts.map +1 -0
- package/dist/types/controllers/authentication/index.d.ts +5 -0
- package/dist/types/controllers/authentication/index.d.ts.map +1 -0
- package/dist/types/controllers/authentication/services.d.ts +69 -0
- package/dist/types/controllers/authentication/services.d.ts.map +1 -0
- package/dist/types/controllers/index.d.ts +3 -0
- package/dist/types/controllers/index.d.ts.map +1 -0
- package/dist/types/controllers/user-storage/UserStorageController.d.ts +85 -0
- package/dist/types/controllers/user-storage/UserStorageController.d.ts.map +1 -0
- package/dist/types/controllers/user-storage/__fixtures__/index.d.ts +3 -0
- package/dist/types/controllers/user-storage/__fixtures__/index.d.ts.map +1 -0
- package/dist/types/controllers/user-storage/__fixtures__/mockResponses.d.ts +13 -0
- package/dist/types/controllers/user-storage/__fixtures__/mockResponses.d.ts.map +1 -0
- package/dist/types/controllers/user-storage/__fixtures__/mockServices.d.ts +9 -0
- package/dist/types/controllers/user-storage/__fixtures__/mockServices.d.ts.map +1 -0
- package/dist/types/controllers/user-storage/__fixtures__/mockStorage.d.ts +5 -0
- package/dist/types/controllers/user-storage/__fixtures__/mockStorage.d.ts.map +1 -0
- package/dist/types/controllers/user-storage/encryption/cache.d.ts +31 -0
- package/dist/types/controllers/user-storage/encryption/cache.d.ts.map +1 -0
- package/dist/types/controllers/user-storage/encryption/encryption.d.ts +26 -0
- package/dist/types/controllers/user-storage/encryption/encryption.d.ts.map +1 -0
- package/dist/types/controllers/user-storage/encryption/index.d.ts +5 -0
- package/dist/types/controllers/user-storage/encryption/index.d.ts.map +1 -0
- package/dist/types/controllers/user-storage/encryption/utils.d.ts +4 -0
- package/dist/types/controllers/user-storage/encryption/utils.d.ts.map +1 -0
- package/dist/types/controllers/user-storage/index.d.ts +6 -0
- package/dist/types/controllers/user-storage/index.d.ts.map +1 -0
- package/dist/types/controllers/user-storage/schema.d.ts +22 -0
- package/dist/types/controllers/user-storage/schema.d.ts.map +1 -0
- package/dist/types/controllers/user-storage/services.d.ts +30 -0
- package/dist/types/controllers/user-storage/services.d.ts.map +1 -0
- package/dist/types/index.d.ts +3 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/sdk/__fixtures__/mock-auth.d.ts +3 -0
- package/dist/types/sdk/__fixtures__/mock-auth.d.ts.map +1 -1
- package/dist/types/sdk/__fixtures__/mock-userstorage.d.ts.map +1 -1
- package/dist/types/sdk/__fixtures__/test-utils.d.ts.map +1 -1
- package/dist/types/sdk/authentication-jwt-bearer/flow-siwe.d.ts.map +1 -1
- package/dist/types/sdk/authentication-jwt-bearer/flow-srp.d.ts.map +1 -1
- package/dist/types/sdk/authentication-jwt-bearer/services.d.ts +20 -2
- package/dist/types/sdk/authentication-jwt-bearer/services.d.ts.map +1 -1
- package/dist/types/sdk/authentication-jwt-bearer/types.d.ts +9 -2
- package/dist/types/sdk/authentication-jwt-bearer/types.d.ts.map +1 -1
- package/dist/types/sdk/authentication.d.ts +2 -1
- package/dist/types/sdk/authentication.d.ts.map +1 -1
- package/dist/types/sdk/encryption.d.ts +2 -2
- package/dist/types/sdk/encryption.d.ts.map +1 -1
- package/dist/types/sdk/env.d.ts +9 -2
- package/dist/types/sdk/env.d.ts.map +1 -1
- package/dist/types/sdk/errors.d.ts +3 -0
- package/dist/types/sdk/errors.d.ts.map +1 -1
- package/dist/types/sdk/user-storage.d.ts.map +1 -1
- package/package.json +15 -2
- package/dist/chunk-2FZSWVHT.mjs.map +0 -1
- package/dist/chunk-4NGEEDGV.mjs.map +0 -1
- package/dist/chunk-6X6I3HZU.js.map +0 -1
- package/dist/chunk-BARZBXO7.js +0 -7
- package/dist/chunk-BARZBXO7.js.map +0 -1
- package/dist/chunk-BHVT2QEA.mjs.map +0 -1
- package/dist/chunk-CFST6GWE.js.map +0 -1
- package/dist/chunk-CYGZ4WLJ.mjs.map +0 -1
- package/dist/chunk-DEATIRII.js +0 -1
- package/dist/chunk-GQLHSQGZ.js.map +0 -1
- package/dist/chunk-GVMIXMYB.mjs +0 -67
- package/dist/chunk-GVMIXMYB.mjs.map +0 -1
- package/dist/chunk-KHFPE566.js +0 -49
- package/dist/chunk-KHFPE566.js.map +0 -1
- package/dist/chunk-KKRIOEXD.mjs +0 -7
- package/dist/chunk-KKRIOEXD.mjs.map +0 -1
- package/dist/chunk-MKJYSWME.mjs +0 -1
- package/dist/chunk-NRH6O4QZ.js.map +0 -1
- package/dist/chunk-OF3TQWGX.js.map +0 -1
- package/dist/chunk-UMKBFFZ5.mjs.map +0 -1
- package/dist/chunk-UVJVONBF.js +0 -126
- package/dist/chunk-UVJVONBF.js.map +0 -1
- package/dist/chunk-VHUU4HEY.js +0 -67
- package/dist/chunk-VHUU4HEY.js.map +0 -1
- package/dist/chunk-VXPVURGH.mjs.map +0 -1
- package/dist/chunk-VZXD5DCQ.js.map +0 -1
- package/dist/chunk-WJRV2JCX.mjs +0 -49
- package/dist/chunk-WJRV2JCX.mjs.map +0 -1
- package/dist/sdk/authentication-jwt-bearer/constants.js +0 -8
- package/dist/sdk/authentication-jwt-bearer/constants.mjs +0 -8
- package/dist/types/sdk/authentication-jwt-bearer/constants.d.ts +0 -2
- package/dist/types/sdk/authentication-jwt-bearer/constants.d.ts.map +0 -1
- /package/dist/{chunk-DEATIRII.js.map → chunk-IGY2S5BC.js.map} +0 -0
- /package/dist/{chunk-MKJYSWME.mjs.map → chunk-U5UIDVOO.mjs.map} +0 -0
- /package/dist/{chunk-Z4BLTVTB.js.map → controllers/authentication/AuthenticationController.js.map} +0 -0
- /package/dist/{chunk-XUI43LEZ.mjs.map → controllers/authentication/AuthenticationController.mjs.map} +0 -0
- /package/dist/{sdk/authentication-jwt-bearer/constants.js.map → controllers/authentication/auth-snap-requests.js.map} +0 -0
- /package/dist/{sdk/authentication-jwt-bearer/constants.mjs.map → controllers/authentication/auth-snap-requests.mjs.map} +0 -0
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
|
|
4
4
|
|
|
5
|
-
var
|
|
5
|
+
var _chunkIGY2S5BCjs = require('./chunk-IGY2S5BC.js');
|
|
6
6
|
|
|
7
7
|
// src/sdk/encryption.ts
|
|
8
8
|
var _aes = require('@noble/ciphers/aes');
|
|
@@ -23,24 +23,32 @@ function bytesToUtf8(byteArray) {
|
|
|
23
23
|
var _ALGORITHM_NONCE_SIZE, _ALGORITHM_KEY_SIZE, _PBKDF2_SALT_SIZE, _PBKDF2_ITERATIONS, _encryptStringV1, encryptStringV1_fn, _decryptStringV1, decryptStringV1_fn, _encrypt, encrypt_fn, _decrypt, decrypt_fn;
|
|
24
24
|
var EncryptorDecryptor = class {
|
|
25
25
|
constructor() {
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
26
|
+
_chunkIGY2S5BCjs.__privateAdd.call(void 0, this, _encryptStringV1);
|
|
27
|
+
_chunkIGY2S5BCjs.__privateAdd.call(void 0, this, _decryptStringV1);
|
|
28
|
+
_chunkIGY2S5BCjs.__privateAdd.call(void 0, this, _encrypt);
|
|
29
|
+
_chunkIGY2S5BCjs.__privateAdd.call(void 0, this, _decrypt);
|
|
30
|
+
// TODO: Either fix this lint violation or explain why it's necessary to ignore.
|
|
31
|
+
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
32
|
+
_chunkIGY2S5BCjs.__privateAdd.call(void 0, this, _ALGORITHM_NONCE_SIZE, 12);
|
|
31
33
|
// 12 bytes
|
|
32
|
-
|
|
34
|
+
// TODO: Either fix this lint violation or explain why it's necessary to ignore.
|
|
35
|
+
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
36
|
+
_chunkIGY2S5BCjs.__privateAdd.call(void 0, this, _ALGORITHM_KEY_SIZE, 16);
|
|
33
37
|
// 16 bytes
|
|
34
|
-
|
|
38
|
+
// TODO: Either fix this lint violation or explain why it's necessary to ignore.
|
|
39
|
+
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
40
|
+
_chunkIGY2S5BCjs.__privateAdd.call(void 0, this, _PBKDF2_SALT_SIZE, 16);
|
|
35
41
|
// 16 bytes
|
|
36
|
-
|
|
42
|
+
// TODO: Either fix this lint violation or explain why it's necessary to ignore.
|
|
43
|
+
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
44
|
+
_chunkIGY2S5BCjs.__privateAdd.call(void 0, this, _PBKDF2_ITERATIONS, 9e5);
|
|
37
45
|
}
|
|
38
46
|
encryptString(plaintext, password) {
|
|
39
47
|
try {
|
|
40
48
|
if (plaintext.trim().length === 0) {
|
|
41
49
|
throw new Error("No plain text provided");
|
|
42
50
|
}
|
|
43
|
-
return
|
|
51
|
+
return _chunkIGY2S5BCjs.__privateMethod.call(void 0, this, _encryptStringV1, encryptStringV1_fn).call(this, plaintext, password);
|
|
44
52
|
} catch (e) {
|
|
45
53
|
const errorMessage = e instanceof Error ? e.message : String(e);
|
|
46
54
|
throw new Error(`Unable to encrypt string - ${errorMessage}`);
|
|
@@ -50,7 +58,7 @@ var EncryptorDecryptor = class {
|
|
|
50
58
|
try {
|
|
51
59
|
const encryptedData = JSON.parse(encryptedDataStr);
|
|
52
60
|
if (encryptedData.v === "1") {
|
|
53
|
-
return
|
|
61
|
+
return _chunkIGY2S5BCjs.__privateMethod.call(void 0, this, _decryptStringV1, decryptStringV1_fn).call(this, encryptedData, password);
|
|
54
62
|
}
|
|
55
63
|
throw new Error(
|
|
56
64
|
`Unsupported encrypted data payload - ${JSON.stringify(encryptedData)}`
|
|
@@ -67,21 +75,21 @@ _PBKDF2_SALT_SIZE = new WeakMap();
|
|
|
67
75
|
_PBKDF2_ITERATIONS = new WeakMap();
|
|
68
76
|
_encryptStringV1 = new WeakSet();
|
|
69
77
|
encryptStringV1_fn = function(plaintext, password) {
|
|
70
|
-
const salt = _webcrypto.randomBytes.call(void 0,
|
|
78
|
+
const salt = _webcrypto.randomBytes.call(void 0, _chunkIGY2S5BCjs.__privateGet.call(void 0, this, _PBKDF2_SALT_SIZE));
|
|
71
79
|
const key = _pbkdf2.pbkdf2.call(void 0, _sha256.sha256, password, salt, {
|
|
72
|
-
c:
|
|
73
|
-
dkLen:
|
|
80
|
+
c: _chunkIGY2S5BCjs.__privateGet.call(void 0, this, _PBKDF2_ITERATIONS),
|
|
81
|
+
dkLen: _chunkIGY2S5BCjs.__privateGet.call(void 0, this, _ALGORITHM_KEY_SIZE)
|
|
74
82
|
});
|
|
75
83
|
const plaintextRaw = _utils.utf8ToBytes.call(void 0, plaintext);
|
|
76
84
|
const ciphertextAndNonceAndSalt = _utils.concatBytes.call(void 0,
|
|
77
85
|
salt,
|
|
78
|
-
|
|
86
|
+
_chunkIGY2S5BCjs.__privateMethod.call(void 0, this, _encrypt, encrypt_fn).call(this, plaintextRaw, key)
|
|
79
87
|
);
|
|
80
88
|
const encryptedData = byteArrayToBase64(ciphertextAndNonceAndSalt);
|
|
81
89
|
const encryptedPayload = {
|
|
82
90
|
v: "1",
|
|
83
91
|
d: encryptedData,
|
|
84
|
-
iterations:
|
|
92
|
+
iterations: _chunkIGY2S5BCjs.__privateGet.call(void 0, this, _PBKDF2_ITERATIONS)
|
|
85
93
|
};
|
|
86
94
|
return JSON.stringify(encryptedPayload);
|
|
87
95
|
};
|
|
@@ -91,34 +99,34 @@ decryptStringV1_fn = function(data, password) {
|
|
|
91
99
|
const ciphertextAndNonceAndSalt = base64ToByteArray(
|
|
92
100
|
base64CiphertextAndNonceAndSalt
|
|
93
101
|
);
|
|
94
|
-
const salt = ciphertextAndNonceAndSalt.slice(0,
|
|
102
|
+
const salt = ciphertextAndNonceAndSalt.slice(0, _chunkIGY2S5BCjs.__privateGet.call(void 0, this, _PBKDF2_SALT_SIZE));
|
|
95
103
|
const ciphertextAndNonce = ciphertextAndNonceAndSalt.slice(
|
|
96
|
-
|
|
104
|
+
_chunkIGY2S5BCjs.__privateGet.call(void 0, this, _PBKDF2_SALT_SIZE),
|
|
97
105
|
ciphertextAndNonceAndSalt.length
|
|
98
106
|
);
|
|
99
107
|
const key = _pbkdf2.pbkdf2.call(void 0, _sha256.sha256, password, salt, {
|
|
100
108
|
c: iterations,
|
|
101
|
-
dkLen:
|
|
109
|
+
dkLen: _chunkIGY2S5BCjs.__privateGet.call(void 0, this, _ALGORITHM_KEY_SIZE)
|
|
102
110
|
});
|
|
103
|
-
return bytesToUtf8(
|
|
111
|
+
return bytesToUtf8(_chunkIGY2S5BCjs.__privateMethod.call(void 0, this, _decrypt, decrypt_fn).call(this, ciphertextAndNonce, key));
|
|
104
112
|
};
|
|
105
113
|
_encrypt = new WeakSet();
|
|
106
114
|
encrypt_fn = function(plaintext, key) {
|
|
107
|
-
const nonce = _webcrypto.randomBytes.call(void 0,
|
|
115
|
+
const nonce = _webcrypto.randomBytes.call(void 0, _chunkIGY2S5BCjs.__privateGet.call(void 0, this, _ALGORITHM_NONCE_SIZE));
|
|
108
116
|
const ciphertext = _aes.gcm.call(void 0, key, nonce).encrypt(plaintext);
|
|
109
117
|
return _utils.concatBytes.call(void 0, nonce, ciphertext);
|
|
110
118
|
};
|
|
111
119
|
_decrypt = new WeakSet();
|
|
112
120
|
decrypt_fn = function(ciphertextAndNonce, key) {
|
|
113
|
-
const nonce = ciphertextAndNonce.slice(0,
|
|
121
|
+
const nonce = ciphertextAndNonce.slice(0, _chunkIGY2S5BCjs.__privateGet.call(void 0, this, _ALGORITHM_NONCE_SIZE));
|
|
114
122
|
const ciphertext = ciphertextAndNonce.slice(
|
|
115
|
-
|
|
123
|
+
_chunkIGY2S5BCjs.__privateGet.call(void 0, this, _ALGORITHM_NONCE_SIZE),
|
|
116
124
|
ciphertextAndNonce.length
|
|
117
125
|
);
|
|
118
126
|
return _aes.gcm.call(void 0, key, nonce).decrypt(ciphertext);
|
|
119
127
|
};
|
|
120
|
-
var
|
|
121
|
-
var encryption_default =
|
|
128
|
+
var Encryption = new EncryptorDecryptor();
|
|
129
|
+
var encryption_default = Encryption;
|
|
122
130
|
function createSHA256Hash(data) {
|
|
123
131
|
const hashedData = _sha256.sha256.call(void 0, data);
|
|
124
132
|
return _utils.bytesToHex.call(void 0, hashedData);
|
|
@@ -127,5 +135,6 @@ function createSHA256Hash(data) {
|
|
|
127
135
|
|
|
128
136
|
|
|
129
137
|
|
|
130
|
-
|
|
131
|
-
|
|
138
|
+
|
|
139
|
+
exports.Encryption = Encryption; exports.encryption_default = encryption_default; exports.createSHA256Hash = createSHA256Hash;
|
|
140
|
+
//# sourceMappingURL=chunk-P4DUDLMY.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/sdk/encryption.ts"],"names":[],"mappings":"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","sourcesContent":["import { gcm } from '@noble/ciphers/aes';\nimport { randomBytes } from '@noble/ciphers/webcrypto';\nimport { pbkdf2 } from '@noble/hashes/pbkdf2';\nimport { sha256 } from '@noble/hashes/sha256';\nimport { utf8ToBytes, concatBytes, bytesToHex } from '@noble/hashes/utils';\n\nexport type EncryptedPayload = {\n v: '1'; // version\n d: string; // data\n iterations: number;\n};\n\n/**\n * Converts Byte Array to Base64 String\n *\n * @param byteArray - array of bytes\n * @returns base64 string\n */\nfunction byteArrayToBase64(byteArray: Uint8Array): string {\n return Buffer.from(byteArray).toString('base64');\n}\n\n/**\n * Converts Base64 String into Byte Array\n *\n * @param base64 - base64 encoded string\n * @returns byte array\n */\nfunction base64ToByteArray(base64: string): Uint8Array {\n return new Uint8Array(Buffer.from(base64, 'base64'));\n}\n\n/**\n * Converts Bytes into UTF-8 Encoded String\n * @param byteArray - array of bytes\n * @returns uft-8 encoded string\n */\nfunction bytesToUtf8(byteArray: Uint8Array): string {\n const decoder = new TextDecoder('utf-8');\n return decoder.decode(byteArray);\n}\n\nclass EncryptorDecryptor {\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 #ALGORITHM_NONCE_SIZE = 12; // 12 bytes\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 #ALGORITHM_KEY_SIZE = 16; // 16 bytes\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 #PBKDF2_SALT_SIZE = 16; // 16 bytes\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 #PBKDF2_ITERATIONS = 900_000;\n\n encryptString(plaintext: string, password: string): string {\n try {\n if (plaintext.trim().length === 0) {\n throw new Error('No plain text provided');\n }\n\n return this.#encryptStringV1(plaintext, password);\n } catch (e) {\n /* istanbul ignore next */\n const errorMessage = e instanceof Error ? e.message : String(e);\n throw new Error(`Unable to encrypt string - ${errorMessage}`);\n }\n }\n\n decryptString(encryptedDataStr: string, password: string): string {\n try {\n const encryptedData: EncryptedPayload = JSON.parse(encryptedDataStr);\n if (encryptedData.v === '1') {\n return this.#decryptStringV1(encryptedData, password);\n }\n throw new Error(\n `Unsupported encrypted data payload - ${JSON.stringify(encryptedData)}`,\n );\n } catch (e) {\n /* istanbul ignore next */\n const errorMessage = e instanceof Error ? e.message : String(e);\n throw new Error(`Unable to decrypt string - ${errorMessage}`);\n }\n }\n\n #encryptStringV1(plaintext: string, password: string): string {\n const salt = randomBytes(this.#PBKDF2_SALT_SIZE);\n\n // Derive a key using PBKDF2.\n const key = pbkdf2(sha256, password, salt, {\n c: this.#PBKDF2_ITERATIONS,\n dkLen: this.#ALGORITHM_KEY_SIZE,\n });\n\n // Encrypt and prepend salt.\n const plaintextRaw = utf8ToBytes(plaintext);\n const ciphertextAndNonceAndSalt = concatBytes(\n salt,\n this.#encrypt(plaintextRaw, key),\n );\n\n // Convert to Base64\n const encryptedData = byteArrayToBase64(ciphertextAndNonceAndSalt);\n\n const encryptedPayload: EncryptedPayload = {\n v: '1',\n d: encryptedData,\n iterations: this.#PBKDF2_ITERATIONS,\n };\n\n return JSON.stringify(encryptedPayload);\n }\n\n #decryptStringV1(data: EncryptedPayload, password: string): string {\n const { iterations, d: base64CiphertextAndNonceAndSalt } = data;\n\n // Decode the base64.\n const ciphertextAndNonceAndSalt = base64ToByteArray(\n base64CiphertextAndNonceAndSalt,\n );\n\n // Create buffers of salt and ciphertextAndNonce.\n const salt = ciphertextAndNonceAndSalt.slice(0, this.#PBKDF2_SALT_SIZE);\n const ciphertextAndNonce = ciphertextAndNonceAndSalt.slice(\n this.#PBKDF2_SALT_SIZE,\n ciphertextAndNonceAndSalt.length,\n );\n\n // Derive the key using PBKDF2.\n const key = pbkdf2(sha256, password, salt, {\n c: iterations,\n dkLen: this.#ALGORITHM_KEY_SIZE,\n });\n\n // Decrypt and return result.\n return bytesToUtf8(this.#decrypt(ciphertextAndNonce, key));\n }\n\n #encrypt(plaintext: Uint8Array, key: Uint8Array): Uint8Array {\n const nonce = randomBytes(this.#ALGORITHM_NONCE_SIZE);\n\n // Encrypt and prepend nonce.\n const ciphertext = gcm(key, nonce).encrypt(plaintext);\n\n return concatBytes(nonce, ciphertext);\n }\n\n #decrypt(ciphertextAndNonce: Uint8Array, key: Uint8Array): Uint8Array {\n // Create buffers of nonce and ciphertext.\n const nonce = ciphertextAndNonce.slice(0, this.#ALGORITHM_NONCE_SIZE);\n const ciphertext = ciphertextAndNonce.slice(\n this.#ALGORITHM_NONCE_SIZE,\n ciphertextAndNonce.length,\n );\n\n // Decrypt and return result.\n return gcm(key, nonce).decrypt(ciphertext);\n }\n}\n\nexport const Encryption = new EncryptorDecryptor();\nexport default Encryption;\n\n/**\n * Create a SHA-256 hash from a given string.\n *\n * @param data - input\n * @returns hash\n */\nexport function createSHA256Hash(data: string): string {\n const hashedData = sha256(data);\n return bytesToHex(hashedData);\n}\n"]}
|
|
@@ -1,44 +1,46 @@
|
|
|
1
1
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
2
2
|
|
|
3
3
|
|
|
4
|
-
var
|
|
4
|
+
var _chunkP4DUDLMYjs = require('./chunk-P4DUDLMY.js');
|
|
5
5
|
|
|
6
6
|
|
|
7
|
-
var
|
|
7
|
+
var _chunkSMKTWM6Ijs = require('./chunk-SMKTWM6I.js');
|
|
8
8
|
|
|
9
9
|
|
|
10
10
|
|
|
11
11
|
|
|
12
|
-
var
|
|
12
|
+
var _chunkMBTBE4P5js = require('./chunk-MBTBE4P5.js');
|
|
13
13
|
|
|
14
14
|
|
|
15
15
|
|
|
16
|
-
var
|
|
16
|
+
var _chunkIGY2S5BCjs = require('./chunk-IGY2S5BC.js');
|
|
17
17
|
|
|
18
18
|
// src/sdk/user-storage.ts
|
|
19
|
-
var STORAGE_URL = (env, feature, entry) => `${
|
|
19
|
+
var STORAGE_URL = (env, feature, entry) => `${_chunkSMKTWM6Ijs.getEnvUrls.call(void 0, env).userStorageApiUrl}/api/v1/userstorage/${feature}/${entry}`;
|
|
20
20
|
var _upsertUserStorage, upsertUserStorage_fn, _getUserStorage, getUserStorage_fn, _createEntryKey, createEntryKey_fn, _getAuthorizationHeader, getAuthorizationHeader_fn;
|
|
21
21
|
var UserStorage = class {
|
|
22
22
|
constructor(config, options) {
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
23
|
+
_chunkIGY2S5BCjs.__privateAdd.call(void 0, this, _upsertUserStorage);
|
|
24
|
+
_chunkIGY2S5BCjs.__privateAdd.call(void 0, this, _getUserStorage);
|
|
25
|
+
_chunkIGY2S5BCjs.__privateAdd.call(void 0, this, _createEntryKey);
|
|
26
|
+
// TODO: Either fix this lint violation or explain why it's necessary to ignore.
|
|
27
|
+
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
28
|
+
_chunkIGY2S5BCjs.__privateAdd.call(void 0, this, _getAuthorizationHeader);
|
|
27
29
|
this.env = config.env;
|
|
28
30
|
this.config = config;
|
|
29
31
|
this.options = options;
|
|
30
32
|
}
|
|
31
33
|
async setItem(feature, key, value) {
|
|
32
34
|
if (!feature.trim() || !key.trim()) {
|
|
33
|
-
throw new (0,
|
|
35
|
+
throw new (0, _chunkMBTBE4P5js.ValidationError)("feature or key cannot be empty strings");
|
|
34
36
|
}
|
|
35
|
-
await
|
|
37
|
+
await _chunkIGY2S5BCjs.__privateMethod.call(void 0, this, _upsertUserStorage, upsertUserStorage_fn).call(this, feature, key, value);
|
|
36
38
|
}
|
|
37
39
|
async getItem(feature, key) {
|
|
38
40
|
if (!feature.trim() || !key.trim()) {
|
|
39
|
-
throw new (0,
|
|
41
|
+
throw new (0, _chunkMBTBE4P5js.ValidationError)("feature or key cannot be empty strings");
|
|
40
42
|
}
|
|
41
|
-
return
|
|
43
|
+
return _chunkIGY2S5BCjs.__privateMethod.call(void 0, this, _getUserStorage, getUserStorage_fn).call(this, feature, key);
|
|
42
44
|
}
|
|
43
45
|
async getStorageKey() {
|
|
44
46
|
const storageKey = await this.options.storage?.getStorageKey();
|
|
@@ -49,7 +51,7 @@ var UserStorage = class {
|
|
|
49
51
|
const storageKeySignature = await this.config.auth.signMessage(
|
|
50
52
|
`metamask:${userProfile.profileId}`
|
|
51
53
|
);
|
|
52
|
-
const hashedStorageKeySignature =
|
|
54
|
+
const hashedStorageKeySignature = _chunkP4DUDLMYjs.createSHA256Hash.call(void 0, storageKeySignature);
|
|
53
55
|
await this.options.storage?.setStorageKey(hashedStorageKeySignature);
|
|
54
56
|
return hashedStorageKeySignature;
|
|
55
57
|
}
|
|
@@ -57,11 +59,11 @@ var UserStorage = class {
|
|
|
57
59
|
_upsertUserStorage = new WeakSet();
|
|
58
60
|
upsertUserStorage_fn = async function(feature, key, data) {
|
|
59
61
|
try {
|
|
60
|
-
const headers = await
|
|
62
|
+
const headers = await _chunkIGY2S5BCjs.__privateMethod.call(void 0, this, _getAuthorizationHeader, getAuthorizationHeader_fn).call(this);
|
|
61
63
|
const storageKey = await this.getStorageKey();
|
|
62
|
-
const encryptedData =
|
|
64
|
+
const encryptedData = _chunkP4DUDLMYjs.encryption_default.encryptString(data, storageKey);
|
|
63
65
|
const url = new URL(
|
|
64
|
-
STORAGE_URL(this.env, feature,
|
|
66
|
+
STORAGE_URL(this.env, feature, _chunkIGY2S5BCjs.__privateMethod.call(void 0, this, _createEntryKey, createEntryKey_fn).call(this, key, storageKey))
|
|
65
67
|
);
|
|
66
68
|
const response = await fetch(url.toString(), {
|
|
67
69
|
method: "PUT",
|
|
@@ -82,7 +84,7 @@ upsertUserStorage_fn = async function(feature, key, data) {
|
|
|
82
84
|
}
|
|
83
85
|
} catch (e) {
|
|
84
86
|
const errorMessage = e instanceof Error ? e.message : JSON.stringify(e ?? "");
|
|
85
|
-
throw new (0,
|
|
87
|
+
throw new (0, _chunkMBTBE4P5js.UserStorageError)(
|
|
86
88
|
`failed to upsert user storage for feature '${feature}' and key '${key}'. ${errorMessage}`
|
|
87
89
|
);
|
|
88
90
|
}
|
|
@@ -90,10 +92,10 @@ upsertUserStorage_fn = async function(feature, key, data) {
|
|
|
90
92
|
_getUserStorage = new WeakSet();
|
|
91
93
|
getUserStorage_fn = async function(feature, key) {
|
|
92
94
|
try {
|
|
93
|
-
const headers = await
|
|
95
|
+
const headers = await _chunkIGY2S5BCjs.__privateMethod.call(void 0, this, _getAuthorizationHeader, getAuthorizationHeader_fn).call(this);
|
|
94
96
|
const storageKey = await this.getStorageKey();
|
|
95
97
|
const url = new URL(
|
|
96
|
-
STORAGE_URL(this.env, feature,
|
|
98
|
+
STORAGE_URL(this.env, feature, _chunkIGY2S5BCjs.__privateMethod.call(void 0, this, _createEntryKey, createEntryKey_fn).call(this, key, storageKey))
|
|
97
99
|
);
|
|
98
100
|
const response = await fetch(url.toString(), {
|
|
99
101
|
headers: {
|
|
@@ -102,7 +104,7 @@ getUserStorage_fn = async function(feature, key) {
|
|
|
102
104
|
}
|
|
103
105
|
});
|
|
104
106
|
if (response.status === 404) {
|
|
105
|
-
throw new (0,
|
|
107
|
+
throw new (0, _chunkMBTBE4P5js.NotFoundError)(
|
|
106
108
|
`feature/key set not found for feature '${feature}' and key '${key}'.`
|
|
107
109
|
);
|
|
108
110
|
}
|
|
@@ -113,20 +115,20 @@ getUserStorage_fn = async function(feature, key) {
|
|
|
113
115
|
);
|
|
114
116
|
}
|
|
115
117
|
const { Data: encryptedData } = await response.json();
|
|
116
|
-
return
|
|
118
|
+
return _chunkP4DUDLMYjs.encryption_default.decryptString(encryptedData, storageKey);
|
|
117
119
|
} catch (e) {
|
|
118
|
-
if (e instanceof
|
|
120
|
+
if (e instanceof _chunkMBTBE4P5js.NotFoundError) {
|
|
119
121
|
throw e;
|
|
120
122
|
}
|
|
121
123
|
const errorMessage = e instanceof Error ? e.message : JSON.stringify(e ?? "");
|
|
122
|
-
throw new (0,
|
|
124
|
+
throw new (0, _chunkMBTBE4P5js.UserStorageError)(
|
|
123
125
|
`failed to get user storage for feature '${feature}' and key '${key}'. ${errorMessage}`
|
|
124
126
|
);
|
|
125
127
|
}
|
|
126
128
|
};
|
|
127
129
|
_createEntryKey = new WeakSet();
|
|
128
130
|
createEntryKey_fn = function(key, storageKey) {
|
|
129
|
-
const hashedKey =
|
|
131
|
+
const hashedKey = _chunkP4DUDLMYjs.createSHA256Hash.call(void 0, key + storageKey);
|
|
130
132
|
return hashedKey;
|
|
131
133
|
};
|
|
132
134
|
_getAuthorizationHeader = new WeakSet();
|
|
@@ -139,4 +141,4 @@ getAuthorizationHeader_fn = async function() {
|
|
|
139
141
|
|
|
140
142
|
|
|
141
143
|
exports.STORAGE_URL = STORAGE_URL; exports.UserStorage = UserStorage;
|
|
142
|
-
//# sourceMappingURL=chunk-
|
|
144
|
+
//# sourceMappingURL=chunk-P52TG263.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/sdk/user-storage.ts"],"names":[],"mappings":"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","sourcesContent":["import type { IBaseAuth } from './authentication-jwt-bearer/types';\nimport encryption, { createSHA256Hash } from './encryption';\nimport type { Env } from './env';\nimport { getEnvUrls } from './env';\nimport { NotFoundError, UserStorageError, ValidationError } from './errors';\n\nexport const STORAGE_URL = (env: Env, feature: string, entry: string) =>\n `${getEnvUrls(env).userStorageApiUrl}/api/v1/userstorage/${feature}/${entry}`;\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(feature: string, key: string, value: string): Promise<void> {\n if (!feature.trim() || !key.trim()) {\n throw new ValidationError('feature or key cannot be empty strings');\n }\n await this.#upsertUserStorage(feature, key, value);\n }\n\n async getItem(feature: string, key: string): Promise<string> {\n if (!feature.trim() || !key.trim()) {\n throw new ValidationError('feature or key cannot be empty strings');\n }\n return this.#getUserStorage(feature, key);\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 feature: string,\n key: string,\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 url = new URL(\n STORAGE_URL(this.env, feature, this.#createEntryKey(key, storageKey)),\n );\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 feature '${feature}' and key '${key}'. ${errorMessage}`,\n );\n }\n }\n\n async #getUserStorage(feature: string, key: string): Promise<string> {\n try {\n const headers = await this.#getAuthorizationHeader();\n const storageKey = await this.getStorageKey();\n const url = new URL(\n STORAGE_URL(this.env, feature, this.#createEntryKey(key, storageKey)),\n );\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 feature '${feature}' and key '${key}'.`,\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 feature '${feature}' and key '${key}'. ${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"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/sdk/authentication-jwt-bearer/types.ts"],"names":["AuthType"],"mappings":";AAEO,IAAK,WAAL,kBAAKA,cAAL;AAGL,EAAAA,UAAA,SAAM;AAGN,EAAAA,UAAA,UAAO;AANG,SAAAA;AAAA,GAAA","sourcesContent":["import type { Env, Platform } from '../env';\n\nexport enum AuthType {\n /* sign in using a private key derived from your secret recovery phrase (SRP). \n Uses message signing snap to perform this operation */\n SRP = 'SRP',\n\n /* sign in with Ethereum */\n SiWE = 'SiWE',\n}\n\nexport type AuthConfig = {\n env: Env;\n platform: Platform;\n type: AuthType;\n};\n\nexport type AccessToken = {\n /**\n * The JWT Access Token\n */\n accessToken: string;\n /**\n * Expiration in seconds\n */\n expiresIn: number;\n /**\n * Date in milliseconds\n */\n obtainedAt: number;\n};\n\nexport type UserProfile = {\n /**\n * The \"Identifier\" used to log in with.\n */\n identifierId: string;\n /**\n * The Unique profile for a logged in user. A Profile can be logged in via multiple Identifiers\n */\n profileId: string;\n /**\n * Server MetaMetrics ID. Allows grouping of user events cross platform.\n */\n metaMetricsId: string;\n};\n\nexport type LoginResponse = {\n token: AccessToken;\n profile: UserProfile;\n};\n\nexport type IBaseAuth = {\n getAccessToken: () => Promise<string>;\n getUserProfile: () => Promise<UserProfile>;\n getIdentifier: () => Promise<string>;\n signMessage: (message: string) => Promise<string>;\n};\n\nexport type AuthStorageOptions = {\n getLoginResponse: () => Promise<LoginResponse | null>;\n setLoginResponse: (val: LoginResponse) => Promise<void>;\n};\n\nexport type AuthSigningOptions = {\n signMessage: (message: string) => Promise<string>;\n getIdentifier: () => Promise<string>;\n};\n\nexport type ErrorMessage = {\n message: string;\n error: string;\n};\n\nexport type Pair = {\n identifier: string;\n encryptedStorageKey: string;\n identifierType: 'SIWE' | 'SRP';\n signMessage: (message: string) => Promise<string>;\n};\n"]}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true});// src/controllers/user-storage/encryption/utils.ts
|
|
2
|
+
var byteArrayToBase64 = (byteArray) => {
|
|
3
|
+
return Buffer.from(byteArray).toString("base64");
|
|
4
|
+
};
|
|
5
|
+
var base64ToByteArray = (base64) => {
|
|
6
|
+
return new Uint8Array(Buffer.from(base64, "base64"));
|
|
7
|
+
};
|
|
8
|
+
var bytesToUtf8 = (byteArray) => {
|
|
9
|
+
const decoder = new TextDecoder("utf-8");
|
|
10
|
+
return decoder.decode(byteArray);
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
exports.byteArrayToBase64 = byteArrayToBase64; exports.base64ToByteArray = base64ToByteArray; exports.bytesToUtf8 = bytesToUtf8;
|
|
18
|
+
//# sourceMappingURL=chunk-PCOIRDTO.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/controllers/user-storage/encryption/utils.ts"],"names":[],"mappings":";AAAO,IAAM,oBAAoB,CAAC,cAA0B;AAC1D,SAAO,OAAO,KAAK,SAAS,EAAE,SAAS,QAAQ;AACjD;AAEO,IAAM,oBAAoB,CAAC,WAAmB;AACnD,SAAO,IAAI,WAAW,OAAO,KAAK,QAAQ,QAAQ,CAAC;AACrD;AAEO,IAAM,cAAc,CAAC,cAA0B;AACpD,QAAM,UAAU,IAAI,YAAY,OAAO;AACvC,SAAO,QAAQ,OAAO,SAAS;AACjC","sourcesContent":["export const byteArrayToBase64 = (byteArray: Uint8Array) => {\n return Buffer.from(byteArray).toString('base64');\n};\n\nexport const base64ToByteArray = (base64: string) => {\n return new Uint8Array(Buffer.from(base64, 'base64'));\n};\n\nexport const bytesToUtf8 = (byteArray: Uint8Array) => {\n const decoder = new TextDecoder('utf-8');\n return decoder.decode(byteArray);\n};\n"]}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
2
|
+
|
|
3
|
+
var _chunkNLHLVVOOjs = require('./chunk-NLHLVVOO.js');
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
var _chunkQ5WIUNX5js = require('./chunk-Q5WIUNX5.js');
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
var _chunkAVOOINGJjs = require('./chunk-AVOOINGJ.js');
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
var _chunkPBRUOBEQjs = require('./chunk-PBRUOBEQ.js');
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
var _chunkPQ5T4GHYjs = require('./chunk-PQ5T4GHY.js');
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
var _chunkP52TG263js = require('./chunk-P52TG263.js');
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
var _chunkP4DUDLMYjs = require('./chunk-P4DUDLMY.js');
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
var _chunkSMKTWM6Ijs = require('./chunk-SMKTWM6I.js');
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
var _chunkMBTBE4P5js = require('./chunk-MBTBE4P5.js');
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
var _chunkIGY2S5BCjs = require('./chunk-IGY2S5BC.js');
|
|
46
|
+
|
|
47
|
+
// src/sdk/index.ts
|
|
48
|
+
var sdk_exports = {};
|
|
49
|
+
_chunkIGY2S5BCjs.__export.call(void 0, sdk_exports, {
|
|
50
|
+
AuthType: () => _chunkPBRUOBEQjs.AuthType,
|
|
51
|
+
Encryption: () => _chunkP4DUDLMYjs.Encryption,
|
|
52
|
+
Env: () => _chunkSMKTWM6Ijs.Env,
|
|
53
|
+
JwtBearerAuth: () => _chunkNLHLVVOOjs.JwtBearerAuth,
|
|
54
|
+
MESSAGE_SIGNING_SNAP: () => _chunkPQ5T4GHYjs.MESSAGE_SIGNING_SNAP,
|
|
55
|
+
NonceRetrievalError: () => _chunkMBTBE4P5js.NonceRetrievalError,
|
|
56
|
+
NotFoundError: () => _chunkMBTBE4P5js.NotFoundError,
|
|
57
|
+
PairError: () => _chunkMBTBE4P5js.PairError,
|
|
58
|
+
Platform: () => _chunkSMKTWM6Ijs.Platform,
|
|
59
|
+
SIWEJwtBearerAuth: () => _chunkQ5WIUNX5js.SIWEJwtBearerAuth,
|
|
60
|
+
SNAP_ORIGIN: () => _chunkPQ5T4GHYjs.SNAP_ORIGIN,
|
|
61
|
+
SRPJwtBearerAuth: () => _chunkAVOOINGJjs.SRPJwtBearerAuth,
|
|
62
|
+
STORAGE_URL: () => _chunkP52TG263js.STORAGE_URL,
|
|
63
|
+
SignInError: () => _chunkMBTBE4P5js.SignInError,
|
|
64
|
+
UnsupportedAuthTypeError: () => _chunkMBTBE4P5js.UnsupportedAuthTypeError,
|
|
65
|
+
UserStorage: () => _chunkP52TG263js.UserStorage,
|
|
66
|
+
UserStorageError: () => _chunkMBTBE4P5js.UserStorageError,
|
|
67
|
+
ValidationError: () => _chunkMBTBE4P5js.ValidationError,
|
|
68
|
+
connectSnap: () => _chunkPQ5T4GHYjs.connectSnap,
|
|
69
|
+
createSHA256Hash: () => _chunkP4DUDLMYjs.createSHA256Hash,
|
|
70
|
+
getEnvUrls: () => _chunkSMKTWM6Ijs.getEnvUrls,
|
|
71
|
+
getOidcClientId: () => _chunkSMKTWM6Ijs.getOidcClientId,
|
|
72
|
+
getSnap: () => _chunkPQ5T4GHYjs.getSnap,
|
|
73
|
+
getSnaps: () => _chunkPQ5T4GHYjs.getSnaps
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
exports.sdk_exports = sdk_exports;
|
|
79
|
+
//# sourceMappingURL=chunk-PTR4DAX6.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/sdk/index.ts"],"names":[],"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;AAAA","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"]}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
var _chunkBOET676Pjs = require('./chunk-BOET676P.js');
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
var _chunkMBTBE4P5js = require('./chunk-MBTBE4P5.js');
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
var _chunkIGY2S5BCjs = require('./chunk-IGY2S5BC.js');
|
|
16
|
+
|
|
17
|
+
// src/sdk/authentication-jwt-bearer/flow-siwe.ts
|
|
18
|
+
var _siwe = require('siwe');
|
|
19
|
+
var _config, _options, _signer, _getAuthSession, getAuthSession_fn, _login, login_fn, _createSiWELoginRawMessage, createSiWELoginRawMessage_fn, _assertSigner, assertSigner_fn;
|
|
20
|
+
var SIWEJwtBearerAuth = class {
|
|
21
|
+
constructor(config, options) {
|
|
22
|
+
// convert expiresIn from seconds to milliseconds and use 90% of expiresIn
|
|
23
|
+
_chunkIGY2S5BCjs.__privateAdd.call(void 0, this, _getAuthSession);
|
|
24
|
+
_chunkIGY2S5BCjs.__privateAdd.call(void 0, this, _login);
|
|
25
|
+
_chunkIGY2S5BCjs.__privateAdd.call(void 0, this, _createSiWELoginRawMessage);
|
|
26
|
+
_chunkIGY2S5BCjs.__privateAdd.call(void 0, this, _assertSigner);
|
|
27
|
+
_chunkIGY2S5BCjs.__privateAdd.call(void 0, this, _config, void 0);
|
|
28
|
+
_chunkIGY2S5BCjs.__privateAdd.call(void 0, this, _options, void 0);
|
|
29
|
+
_chunkIGY2S5BCjs.__privateAdd.call(void 0, this, _signer, void 0);
|
|
30
|
+
_chunkIGY2S5BCjs.__privateSet.call(void 0, this, _config, config);
|
|
31
|
+
_chunkIGY2S5BCjs.__privateSet.call(void 0, this, _options, options);
|
|
32
|
+
}
|
|
33
|
+
async getAccessToken() {
|
|
34
|
+
const session = await _chunkIGY2S5BCjs.__privateMethod.call(void 0, this, _getAuthSession, getAuthSession_fn).call(this);
|
|
35
|
+
if (session) {
|
|
36
|
+
return session.token.accessToken;
|
|
37
|
+
}
|
|
38
|
+
const loginResponse = await _chunkIGY2S5BCjs.__privateMethod.call(void 0, this, _login, login_fn).call(this);
|
|
39
|
+
return loginResponse.token.accessToken;
|
|
40
|
+
}
|
|
41
|
+
async getUserProfile() {
|
|
42
|
+
const session = await _chunkIGY2S5BCjs.__privateMethod.call(void 0, this, _getAuthSession, getAuthSession_fn).call(this);
|
|
43
|
+
if (session) {
|
|
44
|
+
return session.profile;
|
|
45
|
+
}
|
|
46
|
+
const loginResponse = await _chunkIGY2S5BCjs.__privateMethod.call(void 0, this, _login, login_fn).call(this);
|
|
47
|
+
return loginResponse.profile;
|
|
48
|
+
}
|
|
49
|
+
async getIdentifier() {
|
|
50
|
+
_chunkIGY2S5BCjs.__privateMethod.call(void 0, this, _assertSigner, assertSigner_fn).call(this, _chunkIGY2S5BCjs.__privateGet.call(void 0, this, _signer));
|
|
51
|
+
return _chunkIGY2S5BCjs.__privateGet.call(void 0, this, _signer).address;
|
|
52
|
+
}
|
|
53
|
+
async signMessage(message) {
|
|
54
|
+
_chunkIGY2S5BCjs.__privateMethod.call(void 0, this, _assertSigner, assertSigner_fn).call(this, _chunkIGY2S5BCjs.__privateGet.call(void 0, this, _signer));
|
|
55
|
+
return await _chunkIGY2S5BCjs.__privateGet.call(void 0, this, _signer).signMessage(message);
|
|
56
|
+
}
|
|
57
|
+
prepare(signer) {
|
|
58
|
+
_chunkIGY2S5BCjs.__privateSet.call(void 0, this, _signer, signer);
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
_config = new WeakMap();
|
|
62
|
+
_options = new WeakMap();
|
|
63
|
+
_signer = new WeakMap();
|
|
64
|
+
_getAuthSession = new WeakSet();
|
|
65
|
+
getAuthSession_fn = async function() {
|
|
66
|
+
const auth = await _chunkIGY2S5BCjs.__privateGet.call(void 0, this, _options).storage.getLoginResponse();
|
|
67
|
+
if (!auth) {
|
|
68
|
+
return null;
|
|
69
|
+
}
|
|
70
|
+
const currentTime = Date.now();
|
|
71
|
+
const sessionAge = currentTime - auth.token.obtainedAt;
|
|
72
|
+
const refreshThreshold = auth.token.expiresIn * 1e3 * 0.9;
|
|
73
|
+
if (sessionAge < refreshThreshold) {
|
|
74
|
+
return auth;
|
|
75
|
+
}
|
|
76
|
+
return null;
|
|
77
|
+
};
|
|
78
|
+
_login = new WeakSet();
|
|
79
|
+
login_fn = async function() {
|
|
80
|
+
_chunkIGY2S5BCjs.__privateMethod.call(void 0, this, _assertSigner, assertSigner_fn).call(this, _chunkIGY2S5BCjs.__privateGet.call(void 0, this, _signer));
|
|
81
|
+
const address = await this.getIdentifier();
|
|
82
|
+
const nonceRes = await _chunkBOET676Pjs.getNonce.call(void 0, address, _chunkIGY2S5BCjs.__privateGet.call(void 0, this, _config).env);
|
|
83
|
+
const rawMessage = _chunkIGY2S5BCjs.__privateMethod.call(void 0, this, _createSiWELoginRawMessage, createSiWELoginRawMessage_fn).call(this, nonceRes.nonce);
|
|
84
|
+
const signature = await this.signMessage(rawMessage);
|
|
85
|
+
const authResponse = await _chunkBOET676Pjs.authenticate.call(void 0,
|
|
86
|
+
rawMessage,
|
|
87
|
+
signature,
|
|
88
|
+
_chunkIGY2S5BCjs.__privateGet.call(void 0, this, _config).type,
|
|
89
|
+
_chunkIGY2S5BCjs.__privateGet.call(void 0, this, _config).env
|
|
90
|
+
);
|
|
91
|
+
const tokenResponse = await _chunkBOET676Pjs.authorizeOIDC.call(void 0,
|
|
92
|
+
authResponse.token,
|
|
93
|
+
_chunkIGY2S5BCjs.__privateGet.call(void 0, this, _config).env,
|
|
94
|
+
_chunkIGY2S5BCjs.__privateGet.call(void 0, this, _config).platform
|
|
95
|
+
);
|
|
96
|
+
const result = {
|
|
97
|
+
profile: authResponse.profile,
|
|
98
|
+
token: tokenResponse
|
|
99
|
+
};
|
|
100
|
+
await _chunkIGY2S5BCjs.__privateGet.call(void 0, this, _options).storage.setLoginResponse(result);
|
|
101
|
+
return result;
|
|
102
|
+
};
|
|
103
|
+
_createSiWELoginRawMessage = new WeakSet();
|
|
104
|
+
createSiWELoginRawMessage_fn = function(nonce) {
|
|
105
|
+
_chunkIGY2S5BCjs.__privateMethod.call(void 0, this, _assertSigner, assertSigner_fn).call(this, _chunkIGY2S5BCjs.__privateGet.call(void 0, this, _signer));
|
|
106
|
+
return new (0, _siwe.SiweMessage)({
|
|
107
|
+
domain: _chunkIGY2S5BCjs.__privateGet.call(void 0, this, _signer)?.domain,
|
|
108
|
+
address: _chunkIGY2S5BCjs.__privateGet.call(void 0, this, _signer)?.address,
|
|
109
|
+
uri: _chunkBOET676Pjs.SIWE_LOGIN_URL.call(void 0, _chunkIGY2S5BCjs.__privateGet.call(void 0, this, _config).env),
|
|
110
|
+
version: "1",
|
|
111
|
+
chainId: _chunkIGY2S5BCjs.__privateGet.call(void 0, this, _signer)?.chainId,
|
|
112
|
+
nonce,
|
|
113
|
+
issuedAt: (/* @__PURE__ */ new Date()).toISOString()
|
|
114
|
+
}).prepareMessage();
|
|
115
|
+
};
|
|
116
|
+
_assertSigner = new WeakSet();
|
|
117
|
+
assertSigner_fn = function(signer) {
|
|
118
|
+
if (!signer) {
|
|
119
|
+
throw new (0, _chunkMBTBE4P5js.ValidationError)(`you must call 'prepare()' before logging in`);
|
|
120
|
+
}
|
|
121
|
+
};
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
exports.SIWEJwtBearerAuth = SIWEJwtBearerAuth;
|
|
126
|
+
//# sourceMappingURL=chunk-Q5WIUNX5.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/sdk/authentication-jwt-bearer/flow-siwe.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,SAAS,mBAAmB;AAA5B;AAiCO,IAAM,oBAAN,MAA6C;AAAA,EAOlD,YACE,QACA,SACA;AAwCF;AAAA,uBAAM;AAgBN,uBAAM;AAmCN;AAcA;AAlHA;AAEA;AAEA;AAME,uBAAK,SAAU;AACf,uBAAK,UAAW;AAAA,EAClB;AAAA,EAEA,MAAM,iBAAkC;AACtC,UAAM,UAAU,MAAM,sBAAK,oCAAL;AACtB,QAAI,SAAS;AACX,aAAO,QAAQ,MAAM;AAAA,IACvB;AAEA,UAAM,gBAAgB,MAAM,sBAAK,kBAAL;AAC5B,WAAO,cAAc,MAAM;AAAA,EAC7B;AAAA,EAEA,MAAM,iBAAuC;AAC3C,UAAM,UAAU,MAAM,sBAAK,oCAAL;AACtB,QAAI,SAAS;AACX,aAAO,QAAQ;AAAA,IACjB;AAEA,UAAM,gBAAgB,MAAM,sBAAK,kBAAL;AAC5B,WAAO,cAAc;AAAA,EACvB;AAAA,EAEA,MAAM,gBAAiC;AACrC,0BAAK,gCAAL,WAAmB,mBAAK;AACxB,WAAO,mBAAK,SAAQ;AAAA,EACtB;AAAA,EAEA,MAAM,YAAY,SAAkC;AAClD,0BAAK,gCAAL,WAAmB,mBAAK;AACxB,WAAO,MAAM,mBAAK,SAAQ,YAAY,OAAO;AAAA,EAC/C;AAAA,EAEA,QAAQ,QAAmC;AACzC,uBAAK,SAAU;AAAA,EACjB;AA2EF;AAzHE;AAEA;AAEA;AA6CM;AAAA,oBAAe,iBAAkC;AACrD,QAAM,OAAO,MAAM,mBAAK,UAAS,QAAQ,iBAAiB;AAC1D,MAAI,CAAC,MAAM;AACT,WAAO;AAAA,EACT;AAEA,QAAM,cAAc,KAAK,IAAI;AAC7B,QAAM,aAAa,cAAc,KAAK,MAAM;AAC5C,QAAM,mBAAmB,KAAK,MAAM,YAAY,MAAO;AAEvD,MAAI,aAAa,kBAAkB;AACjC,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAEM;AAAA,WAAM,iBAA2B;AACrC,wBAAK,gCAAL,WAAmB,mBAAK;AAGxB,QAAM,UAAU,MAAM,KAAK,cAAc;AACzC,QAAM,WAAW,MAAM,SAAS,SAAS,mBAAK,SAAQ,GAAG;AACzD,QAAM,aAAa,sBAAK,0DAAL,WAAgC,SAAS;AAC5D,QAAM,YAAY,MAAM,KAAK,YAAY,UAAU;AAGnD,QAAM,eAAe,MAAM;AAAA,IACzB;AAAA,IACA;AAAA,IACA,mBAAK,SAAQ;AAAA,IACb,mBAAK,SAAQ;AAAA,EACf;AAGA,QAAM,gBAAgB,MAAM;AAAA,IAC1B,aAAa;AAAA,IACb,mBAAK,SAAQ;AAAA,IACb,mBAAK,SAAQ;AAAA,EACf;AAGA,QAAM,SAAwB;AAAA,IAC5B,SAAS,aAAa;AAAA,IACtB,OAAO;AAAA,EACT;AAEA,QAAM,mBAAK,UAAS,QAAQ,iBAAiB,MAAM;AAEnD,SAAO;AACT;AAEA;AAAA,+BAA0B,SAAC,OAAuB;AAChD,wBAAK,gCAAL,WAAmB,mBAAK;AAExB,SAAO,IAAI,YAAY;AAAA,IACrB,QAAQ,mBAAK,UAAS;AAAA,IACtB,SAAS,mBAAK,UAAS;AAAA,IACvB,KAAK,eAAe,mBAAK,SAAQ,GAAG;AAAA,IACpC,SAAS;AAAA,IACT,SAAS,mBAAK,UAAS;AAAA,IACvB;AAAA,IACA,WAAU,oBAAI,KAAK,GAAE,YAAY;AAAA,EACnC,CAAC,EAAE,eAAe;AACpB;AAEA;AAAA,kBAAa,SACX,QAC6C;AAC7C,MAAI,CAAC,QAAQ;AACX,UAAM,IAAI,gBAAgB,6CAA6C;AAAA,EACzE;AACF","sourcesContent":["import { SiweMessage } from 'siwe';\n\nimport { ValidationError } from '../errors';\nimport {\n SIWE_LOGIN_URL,\n authenticate,\n authorizeOIDC,\n getNonce,\n} from './services';\nimport type {\n AuthConfig,\n AuthStorageOptions,\n AuthType,\n IBaseAuth,\n LoginResponse,\n UserProfile,\n} from './types';\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\ntype JwtBearerAuth_SIWE_Options = {\n storage: AuthStorageOptions;\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\ntype JwtBearerAuth_SIWE_Signer = {\n address: string;\n chainId: number;\n signMessage: (message: string) => Promise<string>;\n domain: string;\n};\n\nexport class SIWEJwtBearerAuth implements IBaseAuth {\n #config: AuthConfig;\n\n #options: JwtBearerAuth_SIWE_Options;\n\n #signer: JwtBearerAuth_SIWE_Signer | undefined;\n\n constructor(\n config: AuthConfig & { type: AuthType.SiWE },\n options: JwtBearerAuth_SIWE_Options,\n ) {\n this.#config = config;\n this.#options = options;\n }\n\n async getAccessToken(): Promise<string> {\n const session = await this.#getAuthSession();\n if (session) {\n return session.token.accessToken;\n }\n\n const loginResponse = await this.#login();\n return loginResponse.token.accessToken;\n }\n\n async getUserProfile(): Promise<UserProfile> {\n const session = await this.#getAuthSession();\n if (session) {\n return session.profile;\n }\n\n const loginResponse = await this.#login();\n return loginResponse.profile;\n }\n\n async getIdentifier(): Promise<string> {\n this.#assertSigner(this.#signer);\n return this.#signer.address;\n }\n\n async signMessage(message: string): Promise<string> {\n this.#assertSigner(this.#signer);\n return await this.#signer.signMessage(message);\n }\n\n prepare(signer: JwtBearerAuth_SIWE_Signer) {\n this.#signer = signer;\n }\n\n // convert expiresIn from seconds to milliseconds and use 90% of expiresIn\n async #getAuthSession(): Promise<LoginResponse | null> {\n const auth = await this.#options.storage.getLoginResponse();\n if (!auth) {\n return null;\n }\n\n const currentTime = Date.now();\n const sessionAge = currentTime - auth.token.obtainedAt;\n const refreshThreshold = auth.token.expiresIn * 1000 * 0.9;\n\n if (sessionAge < refreshThreshold) {\n return auth;\n }\n return null;\n }\n\n async #login(): Promise<LoginResponse> {\n this.#assertSigner(this.#signer);\n\n // Nonce\n const address = await this.getIdentifier();\n const nonceRes = await getNonce(address, this.#config.env);\n const rawMessage = this.#createSiWELoginRawMessage(nonceRes.nonce);\n const signature = await this.signMessage(rawMessage);\n\n // Authenticate\n const authResponse = await authenticate(\n rawMessage,\n signature,\n this.#config.type,\n this.#config.env,\n );\n\n // Authorize\n const tokenResponse = await authorizeOIDC(\n authResponse.token,\n this.#config.env,\n this.#config.platform,\n );\n\n // Save\n const result: LoginResponse = {\n profile: authResponse.profile,\n token: tokenResponse,\n };\n\n await this.#options.storage.setLoginResponse(result);\n\n return result;\n }\n\n #createSiWELoginRawMessage(nonce: string): string {\n this.#assertSigner(this.#signer);\n\n return new SiweMessage({\n domain: this.#signer?.domain,\n address: this.#signer?.address,\n uri: SIWE_LOGIN_URL(this.#config.env),\n version: '1',\n chainId: this.#signer?.chainId,\n nonce,\n issuedAt: new Date().toISOString(),\n }).prepareMessage();\n }\n\n #assertSigner(\n signer?: JwtBearerAuth_SIWE_Signer,\n ): asserts signer is JwtBearerAuth_SIWE_Signer {\n if (!signer) {\n throw new ValidationError(`you must call 'prepare()' before logging in`);\n }\n }\n}\n"]}
|