@metamask/profile-sync-controller 0.0.0 → 0.1.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 +8 -1
- package/dist/chunk-26CCETCM.mjs +70 -0
- package/dist/chunk-2MVOZPBN.js +98 -0
- package/dist/chunk-2MVOZPBN.js.map +1 -0
- package/dist/chunk-3FJQHCCQ.mjs +106 -0
- package/dist/chunk-3FJQHCCQ.mjs.map +1 -0
- package/dist/chunk-4OMJ7A6A.js +77 -0
- package/dist/chunk-4OMJ7A6A.js.map +1 -0
- package/dist/chunk-6P6CUKKI.mjs +30 -0
- package/dist/chunk-6P6CUKKI.mjs.map +1 -0
- package/dist/{chunk-OF3TQWGX.js → chunk-6TK7544L.js} +34 -34
- package/dist/chunk-6TK7544L.js.map +1 -0
- package/dist/chunk-76VRE4BI.mjs +18 -0
- package/dist/chunk-76VRE4BI.mjs.map +1 -0
- package/dist/chunk-772MKTIO.mjs +25 -0
- package/dist/chunk-772MKTIO.mjs.map +1 -0
- package/dist/chunk-7FCK4BY3.js +25 -0
- package/dist/chunk-7FCK4BY3.js.map +1 -0
- package/dist/{chunk-CYGZ4WLJ.mjs → chunk-7VMXBDXN.mjs} +36 -5
- package/dist/chunk-7VMXBDXN.mjs.map +1 -0
- package/dist/chunk-ARWL2LBB.js +273 -0
- package/dist/chunk-ARWL2LBB.js.map +1 -0
- package/dist/chunk-BFE6TB7Y.mjs +11 -0
- package/dist/chunk-BFE6TB7Y.mjs.map +1 -0
- package/dist/chunk-BVM4HBM4.js +112 -0
- package/dist/chunk-BVM4HBM4.js.map +1 -0
- package/dist/chunk-DHHBHLVN.mjs +70 -0
- package/dist/chunk-DHHBHLVN.mjs.map +1 -0
- package/dist/chunk-DLXLU44Z.js +106 -0
- package/dist/chunk-DLXLU44Z.js.map +1 -0
- package/dist/chunk-GJJT2CAL.js +3342 -0
- package/dist/chunk-GJJT2CAL.js.map +1 -0
- package/dist/{chunk-VZXD5DCQ.js → chunk-GLDUXN2T.js} +36 -27
- package/dist/chunk-GLDUXN2T.js.map +1 -0
- package/dist/chunk-GLS4QZF6.mjs +77 -0
- package/dist/chunk-GLS4QZF6.mjs.map +1 -0
- package/dist/chunk-H25EBXG5.mjs +58 -0
- package/dist/chunk-H25EBXG5.mjs.map +1 -0
- package/dist/chunk-IPSBQ3MS.js +30 -0
- package/dist/chunk-IPSBQ3MS.js.map +1 -0
- package/dist/chunk-IZHWP5VW.mjs +79 -0
- package/dist/chunk-IZHWP5VW.mjs.map +1 -0
- package/dist/chunk-JAGWB4JI.mjs +102 -0
- package/dist/chunk-JAGWB4JI.mjs.map +1 -0
- package/dist/chunk-JMU3OVPK.mjs +3342 -0
- package/dist/chunk-JMU3OVPK.mjs.map +1 -0
- package/dist/chunk-JTDFOATG.js +11 -0
- package/dist/chunk-JTDFOATG.js.map +1 -0
- package/dist/chunk-JWTNHCVG.js +158 -0
- package/dist/chunk-JWTNHCVG.js.map +1 -0
- package/dist/chunk-K6G7X6PX.js +70 -0
- package/dist/chunk-K6G7X6PX.js.map +1 -0
- package/dist/chunk-LHDVZNW5.js +126 -0
- package/dist/chunk-LHDVZNW5.js.map +1 -0
- package/dist/{chunk-VXPVURGH.mjs → chunk-LN2BY2QF.mjs} +9 -9
- package/dist/chunk-LN2BY2QF.mjs.map +1 -0
- package/dist/{chunk-6X6I3HZU.js → chunk-LUKNP4HM.js} +28 -26
- package/dist/chunk-LUKNP4HM.js.map +1 -0
- package/dist/{chunk-GQLHSQGZ.js → chunk-MBTBE4P5.js} +9 -2
- package/dist/chunk-MBTBE4P5.js.map +1 -0
- package/dist/chunk-PCOIRDTO.js +18 -0
- package/dist/chunk-PCOIRDTO.js.map +1 -0
- package/dist/chunk-PNZGAAT4.mjs +273 -0
- package/dist/chunk-PNZGAAT4.mjs.map +1 -0
- package/dist/chunk-PRDECQM6.mjs +221 -0
- package/dist/chunk-PRDECQM6.mjs.map +1 -0
- package/dist/chunk-QE2F5AZL.mjs +158 -0
- package/dist/chunk-QE2F5AZL.mjs.map +1 -0
- package/dist/chunk-QHL6SQTC.mjs +112 -0
- package/dist/chunk-QHL6SQTC.mjs.map +1 -0
- package/dist/chunk-QILE6KIE.js +79 -0
- package/dist/chunk-QILE6KIE.js.map +1 -0
- package/dist/{chunk-CFST6GWE.js → chunk-T77FC4PB.js} +1 -1
- package/dist/chunk-T77FC4PB.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-UAXWZN5J.js +58 -0
- package/dist/chunk-UAXWZN5J.js.map +1 -0
- package/dist/{chunk-CZ7YK35S.mjs → chunk-UEZI2POO.mjs} +7 -5
- package/dist/{chunk-CZ7YK35S.mjs.map → chunk-UEZI2POO.mjs.map} +1 -1
- package/dist/{chunk-4NGEEDGV.mjs → chunk-UWRKMJBI.mjs} +9 -9
- package/dist/chunk-UWRKMJBI.mjs.map +1 -0
- package/dist/chunk-V46WVGWN.js +70 -0
- package/dist/{chunk-UMKBFFZ5.mjs → chunk-VTM5T7Y4.mjs} +13 -4
- package/dist/chunk-VTM5T7Y4.mjs.map +1 -0
- package/dist/chunk-VYE2DKST.js +102 -0
- package/dist/chunk-VYE2DKST.js.map +1 -0
- package/dist/chunk-W7JFFMEZ.mjs +98 -0
- package/dist/chunk-W7JFFMEZ.mjs.map +1 -0
- package/dist/chunk-WAS6V24H.js +221 -0
- package/dist/chunk-WAS6V24H.js.map +1 -0
- package/dist/{chunk-NRH6O4QZ.js → chunk-XUPRRLBI.js} +45 -14
- package/dist/chunk-XUPRRLBI.js.map +1 -0
- package/dist/{chunk-2FZSWVHT.mjs → chunk-YWA77VMP.mjs} +1 -1
- package/dist/chunk-YWA77VMP.mjs.map +1 -0
- package/dist/controllers/authentication/AuthenticationController.js +22 -0
- package/dist/controllers/authentication/AuthenticationController.mjs +22 -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 +27 -0
- package/dist/controllers/authentication/index.js.map +1 -0
- package/dist/controllers/authentication/index.mjs +27 -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 +35 -0
- package/dist/controllers/index.js.map +1 -0
- package/dist/controllers/index.mjs +35 -0
- package/dist/controllers/index.mjs.map +1 -0
- package/dist/controllers/user-storage/UserStorageController.js +27 -0
- package/dist/controllers/user-storage/UserStorageController.js.map +1 -0
- package/dist/controllers/user-storage/UserStorageController.mjs +27 -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 +37 -0
- package/dist/controllers/user-storage/index.js.map +1 -0
- package/dist/controllers/user-storage/index.mjs +37 -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 +32 -62
- package/dist/index.mjs +33 -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 +73 -0
- package/dist/types/controllers/authentication/AuthenticationController.d.ts.map +1 -0
- package/dist/types/controllers/authentication/__fixtures__/index.d.ts +3 -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 +84 -0
- package/dist/types/controllers/user-storage/UserStorageController.d.ts.map +1 -0
- package/dist/types/controllers/user-storage/__fixtures__/index.d.ts +4 -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 +8 -1
- 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 +8 -1
- 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/chunk-XUI43LEZ.mjs +0 -30
- package/dist/chunk-Z4BLTVTB.js +0 -30
- 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-MKJYSWME.mjs.map → chunk-26CCETCM.mjs.map} +0 -0
- /package/dist/{chunk-DEATIRII.js.map → chunk-V46WVGWN.js.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
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
import type { Env } from '../env';
|
|
1
|
+
import type { Env, Platform } from '../env';
|
|
2
2
|
export declare const enum AuthType {
|
|
3
3
|
SRP = "SRP",
|
|
4
4
|
SiWE = "SiWE"
|
|
5
5
|
}
|
|
6
6
|
export type AuthConfig = {
|
|
7
7
|
env: Env;
|
|
8
|
+
platform: Platform;
|
|
8
9
|
type: AuthType;
|
|
9
10
|
};
|
|
10
11
|
export type AccessToken = {
|
|
@@ -57,4 +58,10 @@ export type ErrorMessage = {
|
|
|
57
58
|
message: string;
|
|
58
59
|
error: string;
|
|
59
60
|
};
|
|
61
|
+
export type Pair = {
|
|
62
|
+
identifier: string;
|
|
63
|
+
encryptedStorageKey: string;
|
|
64
|
+
identifierType: 'SIWE' | 'SRP';
|
|
65
|
+
signMessage: (message: string) => Promise<string>;
|
|
66
|
+
};
|
|
60
67
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/sdk/authentication-jwt-bearer/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/sdk/authentication-jwt-bearer/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAE5C,0BAAkB,QAAQ;IAGxB,GAAG,QAAQ;IAGX,IAAI,SAAS;CACd;AAED,MAAM,MAAM,UAAU,GAAG;IACvB,GAAG,EAAE,GAAG,CAAC;IACT,QAAQ,EAAE,QAAQ,CAAC;IACnB,IAAI,EAAE,QAAQ,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC;IACpB;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAClB;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB;;OAEG;IACH,YAAY,EAAE,MAAM,CAAC;IACrB;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAClB;;OAEG;IACH,aAAa,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,KAAK,EAAE,WAAW,CAAC;IACnB,OAAO,EAAE,WAAW,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACtB,cAAc,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IACtC,cAAc,EAAE,MAAM,OAAO,CAAC,WAAW,CAAC,CAAC;IAC3C,aAAa,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IACrC,WAAW,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;CACnD,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,gBAAgB,EAAE,MAAM,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAAC;IACtD,gBAAgB,EAAE,CAAC,GAAG,EAAE,aAAa,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACzD,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,WAAW,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAClD,aAAa,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;CACtC,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,IAAI,GAAG;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,cAAc,EAAE,MAAM,GAAG,KAAK,CAAC;IAC/B,WAAW,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;CACnD,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { SIWEJwtBearerAuth } from './authentication-jwt-bearer/flow-siwe';
|
|
2
2
|
import { SRPJwtBearerAuth } from './authentication-jwt-bearer/flow-srp';
|
|
3
|
-
import type { UserProfile } from './authentication-jwt-bearer/types';
|
|
3
|
+
import type { UserProfile, Pair } from './authentication-jwt-bearer/types';
|
|
4
4
|
type Compute<T> = T extends infer U ? {
|
|
5
5
|
[K in keyof U]: U[K];
|
|
6
6
|
} : never;
|
|
@@ -16,6 +16,7 @@ export declare class JwtBearerAuth implements SIWEInterface, SRPInterface {
|
|
|
16
16
|
getUserProfile(): Promise<UserProfile>;
|
|
17
17
|
getIdentifier(): Promise<string>;
|
|
18
18
|
signMessage(message: string): Promise<string>;
|
|
19
|
+
pairIdentifiers(pairing: Pair[]): Promise<void>;
|
|
19
20
|
prepare(signer: {
|
|
20
21
|
address: string;
|
|
21
22
|
chainId: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authentication.d.ts","sourceRoot":"","sources":["../../../src/sdk/authentication.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAC1E,OAAO,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAC;
|
|
1
|
+
{"version":3,"file":"authentication.d.ts","sourceRoot":"","sources":["../../../src/sdk/authentication.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAC1E,OAAO,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAC;AAKxE,OAAO,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,mCAAmC,CAAC;AAQ3E,KAAK,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,MAAM,CAAC,GAAG;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAE,GAAG,KAAK,CAAC;AACvE,KAAK,aAAa,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAChD,KAAK,YAAY,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;AAE9C,KAAK,UAAU,GAAG,qBAAqB,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAClE,KAAK,SAAS,GAAG,qBAAqB,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAChE,KAAK,mBAAmB,GAAG,UAAU,GAAG,SAAS,CAAC;AAElD,qBAAa,aAAc,YAAW,aAAa,EAAE,YAAY;;gBAOnD,GAAG,IAAI,EAAE,mBAAmB;IAiBlC,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC;IAIjC,cAAc,IAAI,OAAO,CAAC,WAAW,CAAC;IAItC,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC;IAIhC,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAI7C,eAAe,CAAC,OAAO,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAoCrD,OAAO,CAAC,MAAM,EAAE;QACd,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC;QAChB,WAAW,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;QAClD,MAAM,EAAE,MAAM,CAAC;KAChB,GAAG,IAAI;CAiBT;AAED,OAAO,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAC1E,OAAO,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAC;AACxE,cAAc,mCAAmC,CAAC"}
|
|
@@ -8,8 +8,8 @@ declare class EncryptorDecryptor {
|
|
|
8
8
|
encryptString(plaintext: string, password: string): string;
|
|
9
9
|
decryptString(encryptedDataStr: string, password: string): string;
|
|
10
10
|
}
|
|
11
|
-
declare const
|
|
12
|
-
export default
|
|
11
|
+
export declare const Encryption: EncryptorDecryptor;
|
|
12
|
+
export default Encryption;
|
|
13
13
|
/**
|
|
14
14
|
* Create a SHA-256 hash from a given string.
|
|
15
15
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"encryption.d.ts","sourceRoot":"","sources":["../../../src/sdk/encryption.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,gBAAgB,GAAG;IAC7B,CAAC,EAAE,GAAG,CAAC;IACP,CAAC,EAAE,MAAM,CAAC;IACV,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAgCF,cAAM,kBAAkB;;
|
|
1
|
+
{"version":3,"file":"encryption.d.ts","sourceRoot":"","sources":["../../../src/sdk/encryption.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,gBAAgB,GAAG;IAC7B,CAAC,EAAE,GAAG,CAAC;IACP,CAAC,EAAE,MAAM,CAAC;IACV,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAgCF,cAAM,kBAAkB;;IAiBtB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM;IAc1D,aAAa,CAAC,gBAAgB,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM;CAyFlE;AAED,eAAO,MAAM,UAAU,oBAA2B,CAAC;AACnD,eAAe,UAAU,CAAC;AAE1B;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGrD"}
|
package/dist/types/sdk/env.d.ts
CHANGED
|
@@ -3,6 +3,12 @@ export declare const enum Env {
|
|
|
3
3
|
UAT = "uat",
|
|
4
4
|
PRD = "prd"
|
|
5
5
|
}
|
|
6
|
+
export declare const enum Platform {
|
|
7
|
+
MOBILE = "mobile",
|
|
8
|
+
EXTENSION = "extension",
|
|
9
|
+
PORTFOLIO = "portfolio",
|
|
10
|
+
INFURA = "infura"
|
|
11
|
+
}
|
|
6
12
|
type EnvUrlsEntry = {
|
|
7
13
|
authApiUrl: string;
|
|
8
14
|
oidcApiUrl: string;
|
|
@@ -20,8 +26,9 @@ export declare function getEnvUrls(env: Env): EnvUrlsEntry;
|
|
|
20
26
|
* Returns the valid OIDC Client ID (used during authorization)
|
|
21
27
|
*
|
|
22
28
|
* @param env - environment field
|
|
29
|
+
* @param platform - platform field
|
|
23
30
|
* @returns the OIDC client id for the environment
|
|
24
31
|
*/
|
|
25
|
-
export declare function getOidcClientId(env: Env): string;
|
|
32
|
+
export declare function getOidcClientId(env: Env, platform: Platform): string;
|
|
26
33
|
export {};
|
|
27
34
|
//# sourceMappingURL=env.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../../src/sdk/env.ts"],"names":[],"mappings":"AAAA,0BAAkB,GAAG;IACnB,GAAG,QAAQ;IACX,GAAG,QAAQ;IACX,GAAG,QAAQ;CACZ;AAED,KAAK,YAAY,GAAG;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;CAC3B,CAAC;AAoBF;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,GAAG,GAAG,YAAY,CAKjD;AAED
|
|
1
|
+
{"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../../src/sdk/env.ts"],"names":[],"mappings":"AAAA,0BAAkB,GAAG;IACnB,GAAG,QAAQ;IACX,GAAG,QAAQ;IACX,GAAG,QAAQ;CACZ;AAED,0BAAkB,QAAQ;IACxB,MAAM,WAAW;IACjB,SAAS,cAAc;IACvB,SAAS,cAAc;IACvB,MAAM,WAAW;CAClB;AAED,KAAK,YAAY,GAAG;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;CAC3B,CAAC;AAoBF;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,GAAG,GAAG,YAAY,CAKjD;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAiCpE"}
|
|
@@ -4,6 +4,9 @@ export declare class NonceRetrievalError extends Error {
|
|
|
4
4
|
export declare class SignInError extends Error {
|
|
5
5
|
constructor(message: string);
|
|
6
6
|
}
|
|
7
|
+
export declare class PairError extends Error {
|
|
8
|
+
constructor(message: string);
|
|
9
|
+
}
|
|
7
10
|
export declare class UserStorageError extends Error {
|
|
8
11
|
constructor(message: string);
|
|
9
12
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/sdk/errors.ts"],"names":[],"mappings":"AAAA,qBAAa,mBAAoB,SAAQ,KAAK;gBAChC,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,WAAY,SAAQ,KAAK;gBACxB,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,gBAAiB,SAAQ,KAAK;gBAC7B,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,eAAgB,SAAQ,KAAK;gBAC5B,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,wBAAyB,SAAQ,KAAK;gBACrC,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,aAAc,SAAQ,KAAK;gBAC1B,OAAO,EAAE,MAAM;CAI5B"}
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/sdk/errors.ts"],"names":[],"mappings":"AAAA,qBAAa,mBAAoB,SAAQ,KAAK;gBAChC,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,WAAY,SAAQ,KAAK;gBACxB,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,SAAU,SAAQ,KAAK;gBACtB,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,gBAAiB,SAAQ,KAAK;gBAC7B,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,eAAgB,SAAQ,KAAK;gBAC5B,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,wBAAyB,SAAQ,KAAK;gBACrC,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,aAAc,SAAQ,KAAK;gBAC1B,OAAO,EAAE,MAAM;CAI5B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user-storage.d.ts","sourceRoot":"","sources":["../../../src/sdk/user-storage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mCAAmC,CAAC;AAEnE,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAIjC,eAAO,MAAM,WAAW,QAAS,GAAG,WAAW,MAAM,SAAS,MAAM,WACW,CAAC;AAEhF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,GAAG,EAAE,GAAG,CAAC;IACT,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,gBAAgB,GAAG,gBAAgB,GAAG,aAAa,CAAC,CAAC;CAC5E,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,aAAa,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC5C,aAAa,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/C,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,OAAO,CAAC,EAAE,cAAc,CAAC;CAC1B,CAAC;AAOF,qBAAa,WAAW;;IACtB,SAAS,CAAC,MAAM,EAAE,iBAAiB,CAAC;IAEpC,SAAS,CAAC,OAAO,EAAE,kBAAkB,CAAC;IAEtC,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC;gBAEP,MAAM,EAAE,iBAAiB,EAAE,OAAO,EAAE,kBAAkB;IAM5D,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOnE,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAOtD,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"user-storage.d.ts","sourceRoot":"","sources":["../../../src/sdk/user-storage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mCAAmC,CAAC;AAEnE,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAIjC,eAAO,MAAM,WAAW,QAAS,GAAG,WAAW,MAAM,SAAS,MAAM,WACW,CAAC;AAEhF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,GAAG,EAAE,GAAG,CAAC;IACT,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,gBAAgB,GAAG,gBAAgB,GAAG,aAAa,CAAC,CAAC;CAC5E,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,aAAa,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC5C,aAAa,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/C,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,OAAO,CAAC,EAAE,cAAc,CAAC;CAC1B,CAAC;AAOF,qBAAa,WAAW;;IACtB,SAAS,CAAC,MAAM,EAAE,iBAAiB,CAAC;IAEpC,SAAS,CAAC,OAAO,EAAE,kBAAkB,CAAC;IAEtC,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC;gBAEP,MAAM,EAAE,iBAAiB,EAAE,OAAO,EAAE,kBAAkB;IAM5D,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOnE,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAOtD,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC;CAgHvC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@metamask/profile-sync-controller",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.1.0",
|
|
4
4
|
"description": "The profile sync helps developers synchronize data across multiple clients and devices in a privacy-preserving way. All data saved in the user storage database is encrypted client-side to preserve privacy. The user storage provides a modular design, giving developers the flexibility to construct and manage their storage spaces in a way that best suits their needs",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"MetaMask",
|
|
@@ -41,12 +41,19 @@
|
|
|
41
41
|
"test:watch": "jest --watch"
|
|
42
42
|
},
|
|
43
43
|
"dependencies": {
|
|
44
|
+
"@metamask/base-controller": "^6.0.0",
|
|
45
|
+
"@metamask/snaps-controllers": "^8.1.1",
|
|
46
|
+
"@metamask/snaps-sdk": "^4.2.0",
|
|
47
|
+
"@metamask/snaps-utils": "^7.4.0",
|
|
44
48
|
"@noble/ciphers": "^0.5.2",
|
|
45
49
|
"@noble/hashes": "^1.4.0",
|
|
46
50
|
"ethers": "^6.12.0",
|
|
51
|
+
"immer": "^9.0.6",
|
|
52
|
+
"loglevel": "^1.8.1",
|
|
47
53
|
"siwe": "^2.3.2"
|
|
48
54
|
},
|
|
49
55
|
"devDependencies": {
|
|
56
|
+
"@lavamoat/allow-scripts": "^3.0.4",
|
|
50
57
|
"@metamask/auto-changelog": "^3.4.4",
|
|
51
58
|
"@types/jest": "^27.4.1",
|
|
52
59
|
"deepmerge": "^4.2.2",
|
|
@@ -58,11 +65,17 @@
|
|
|
58
65
|
"typedoc-plugin-missing-exports": "^2.0.0",
|
|
59
66
|
"typescript": "~4.9.5"
|
|
60
67
|
},
|
|
68
|
+
"peerDependencies": {
|
|
69
|
+
"@metamask/snaps-controllers": "^8.1.1"
|
|
70
|
+
},
|
|
61
71
|
"engines": {
|
|
62
|
-
"node": ">=
|
|
72
|
+
"node": "^18.18 || >=20"
|
|
63
73
|
},
|
|
64
74
|
"publishConfig": {
|
|
65
75
|
"access": "public",
|
|
66
76
|
"registry": "https://registry.npmjs.org/"
|
|
77
|
+
},
|
|
78
|
+
"lavamoat": {
|
|
79
|
+
"allowScripts": {}
|
|
67
80
|
}
|
|
68
81
|
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/sdk/authentication-jwt-bearer/types.ts"],"sourcesContent":["import type { Env } from '../env';\n\nexport const 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 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"],"mappings":";AAEO,IAAW,WAAX,kBAAWA,cAAX;AAGL,EAAAA,UAAA,SAAM;AAGN,EAAAA,UAAA,UAAO;AANS,SAAAA;AAAA,GAAA;","names":["AuthType"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/sdk/authentication-jwt-bearer/flow-siwe.ts"],"sourcesContent":["import { SiweMessage } from 'siwe';\n\nimport { ValidationError } from '../errors';\nimport { SESSION_LIFETIME_MS } from './constants';\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\ntype JwtBearerAuth_SIWE_Options = {\n storage: AuthStorageOptions;\n};\n\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 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 if (sessionAge < SESSION_LIFETIME_MS) {\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 );\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"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA,SAAS,mBAAmB;AAA5B;AA8BO,IAAM,oBAAN,MAA6C;AAAA,EAOlD,YACE,QACA,SACA;AAuCF,uBAAM;AAcN,uBAAM;AAkCN;AAcA;AA9GA;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;AAuEF;AArHE;AAEA;AAEA;AA4CM;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,MAAI,aAAa,qBAAqB;AACpC,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,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;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/sdk/user-storage.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAMO,IAAM,cAAc,CAAC,KAAU,SAAiB,UACrD,GAAG,WAAW,GAAG,EAAE,iBAAiB,uBAAuB,OAAO,IAAI,KAAK;AAP7E;AA4BO,IAAM,cAAN,MAAkB;AAAA,EAOvB,YAAY,QAA2B,SAA6B;AAmCpE,uBAAM;AAyCN,uBAAM;AA6CN;AAKA,uBAAM;AA7HJ,SAAK,MAAM,OAAO;AAClB,SAAK,SAAS;AACd,SAAK,UAAU;AAAA,EACjB;AAAA,EAEA,MAAM,QAAQ,SAAiB,KAAa,OAA8B;AACxE,QAAI,CAAC,QAAQ,KAAK,KAAK,CAAC,IAAI,KAAK,GAAG;AAClC,YAAM,IAAI,gBAAgB,wCAAwC;AAAA,IACpE;AACA,UAAM,sBAAK,0CAAL,WAAwB,SAAS,KAAK;AAAA,EAC9C;AAAA,EAEA,MAAM,QAAQ,SAAiB,KAA8B;AAC3D,QAAI,CAAC,QAAQ,KAAK,KAAK,CAAC,IAAI,KAAK,GAAG;AAClC,YAAM,IAAI,gBAAgB,wCAAwC;AAAA,IACpE;AACA,WAAO,sBAAK,oCAAL,WAAqB,SAAS;AAAA,EACvC;AAAA,EAEA,MAAM,gBAAiC;AACrC,UAAM,aAAa,MAAM,KAAK,QAAQ,SAAS,cAAc;AAC7D,QAAI,YAAY;AACd,aAAO;AAAA,IACT;AAEA,UAAM,cAAc,MAAM,KAAK,OAAO,KAAK,eAAe;AAC1D,UAAM,sBAAsB,MAAM,KAAK,OAAO,KAAK;AAAA,MACjD,YAAY,YAAY,SAAS;AAAA,IACnC;AACA,UAAM,4BAA4B,iBAAiB,mBAAmB;AACtE,UAAM,KAAK,QAAQ,SAAS,cAAc,yBAAyB;AACnE,WAAO;AAAA,EACT;AAiGF;AA/FQ;AAAA,uBAAkB,eACtB,SACA,KACA,MACe;AACf,MAAI;AACF,UAAM,UAAU,MAAM,sBAAK,oDAAL;AACtB,UAAM,aAAa,MAAM,KAAK,cAAc;AAC5C,UAAM,gBAAgB,mBAAW,cAAc,MAAM,UAAU;AAC/D,UAAM,MAAM,IAAI;AAAA,MACd,YAAY,KAAK,KAAK,SAAS,sBAAK,oCAAL,WAAqB,KAAK,WAAW;AAAA,IACtE;AAEA,UAAM,WAAW,MAAM,MAAM,IAAI,SAAS,GAAG;AAAA,MAC3C,QAAQ;AAAA,MACR,SAAS;AAAA,QACP,gBAAgB;AAAA,QAChB,GAAG;AAAA,MACL;AAAA,MACA,MAAM,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC;AAAA,IAC9C,CAAC;AAED,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,eAA6B,MAAM,SAAS,KAAK,EAAE,MAAM,OAAO;AAAA,QACpE,SAAS;AAAA,QACT,OAAO;AAAA,MACT,EAAE;AACF,YAAM,IAAI;AAAA,QACR,uBAAuB,aAAa,OAAO,YAAY,aAAa,KAAK;AAAA,MAC3E;AAAA,IACF;AAAA,EACF,SAAS,GAAG;AAEV,UAAM,eACJ,aAAa,QAAQ,EAAE,UAAU,KAAK,UAAU,KAAK,EAAE;AACzD,UAAM,IAAI;AAAA,MACR,8CAA8C,OAAO,cAAc,GAAG,MAAM,YAAY;AAAA,IAC1F;AAAA,EACF;AACF;AAEM;AAAA,oBAAe,eAAC,SAAiB,KAA8B;AACnE,MAAI;AACF,UAAM,UAAU,MAAM,sBAAK,oDAAL;AACtB,UAAM,aAAa,MAAM,KAAK,cAAc;AAC5C,UAAM,MAAM,IAAI;AAAA,MACd,YAAY,KAAK,KAAK,SAAS,sBAAK,oCAAL,WAAqB,KAAK,WAAW;AAAA,IACtE;AAEA,UAAM,WAAW,MAAM,MAAM,IAAI,SAAS,GAAG;AAAA,MAC3C,SAAS;AAAA,QACP,gBAAgB;AAAA,QAChB,GAAG;AAAA,MACL;AAAA,IACF,CAAC;AAED,QAAI,SAAS,WAAW,KAAK;AAC3B,YAAM,IAAI;AAAA,QACR,0CAA0C,OAAO,cAAc,GAAG;AAAA,MACpE;AAAA,IACF;AAEA,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,eAAgB,MAAM,SAAS,KAAK;AAC1C,YAAM,IAAI;AAAA,QACR,uBAAuB,aAAa,OAAO,YAAY,aAAa,KAAK;AAAA,MAC3E;AAAA,IACF;AAEA,UAAM,EAAE,MAAM,cAAc,IAAI,MAAM,SAAS,KAAK;AACpD,WAAO,mBAAW,cAAc,eAAe,UAAU;AAAA,EAC3D,SAAS,GAAG;AACV,QAAI,aAAa,eAAe;AAC9B,YAAM;AAAA,IACR;AAGA,UAAM,eACJ,aAAa,QAAQ,EAAE,UAAU,KAAK,UAAU,KAAK,EAAE;AAEzD,UAAM,IAAI;AAAA,MACR,2CAA2C,OAAO,cAAc,GAAG,MAAM,YAAY;AAAA,IACvF;AAAA,EACF;AACF;AAEA;AAAA,oBAAe,SAAC,KAAa,YAA4B;AACvD,QAAM,YAAY,iBAAiB,MAAM,UAAU;AACnD,SAAO;AACT;AAEM;AAAA,4BAAuB,iBAAuC;AAClE,QAAM,cAAc,MAAM,KAAK,OAAO,KAAK,eAAe;AAC1D,SAAO,EAAE,eAAe,UAAU,WAAW,GAAG;AAClD","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 async #getAuthorizationHeader(): Promise<{ Authorization: string }> {\n const accessToken = await this.config.auth.getAccessToken();\n return { Authorization: `Bearer ${accessToken}` };\n }\n}\n"]}
|
package/dist/chunk-BARZBXO7.js
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports, "__esModule", {value: true});// src/sdk/authentication-jwt-bearer/constants.ts
|
|
2
|
-
var SESSION_LIFETIME_MS = 45 * 60 * 1e3;
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
exports.SESSION_LIFETIME_MS = SESSION_LIFETIME_MS;
|
|
7
|
-
//# sourceMappingURL=chunk-BARZBXO7.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/sdk/authentication-jwt-bearer/constants.ts"],"names":[],"mappings":";AAAO,IAAM,sBAAsB,KAAK,KAAK","sourcesContent":["export const SESSION_LIFETIME_MS = 45 * 60 * 1000; // 45 minutes in milliseconds\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/sdk/errors.ts"],"sourcesContent":["export class NonceRetrievalError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'NonceRetrievalError';\n }\n}\n\nexport class SignInError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'SignInError';\n }\n}\n\nexport class UserStorageError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'UserStorageError';\n }\n}\n\nexport class ValidationError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'ValidationError';\n }\n}\n\nexport class UnsupportedAuthTypeError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'UnsupportedAuthTypeError';\n }\n}\n\nexport class NotFoundError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'NotFoundError';\n }\n}\n"],"mappings":";AAAO,IAAM,sBAAN,cAAkC,MAAM;AAAA,EAC7C,YAAY,SAAiB;AAC3B,UAAM,OAAO;AACb,SAAK,OAAO;AAAA,EACd;AACF;AAEO,IAAM,cAAN,cAA0B,MAAM;AAAA,EACrC,YAAY,SAAiB;AAC3B,UAAM,OAAO;AACb,SAAK,OAAO;AAAA,EACd;AACF;AAEO,IAAM,mBAAN,cAA+B,MAAM;AAAA,EAC1C,YAAY,SAAiB;AAC3B,UAAM,OAAO;AACb,SAAK,OAAO;AAAA,EACd;AACF;AAEO,IAAM,kBAAN,cAA8B,MAAM;AAAA,EACzC,YAAY,SAAiB;AAC3B,UAAM,OAAO;AACb,SAAK,OAAO;AAAA,EACd;AACF;AAEO,IAAM,2BAAN,cAAuC,MAAM;AAAA,EAClD,YAAY,SAAiB;AAC3B,UAAM,OAAO;AACb,SAAK,OAAO;AAAA,EACd;AACF;AAEO,IAAM,gBAAN,cAA4B,MAAM;AAAA,EACvC,YAAY,SAAiB;AAC3B,UAAM,OAAO;AACb,SAAK,OAAO;AAAA,EACd;AACF;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/sdk/authentication-jwt-bearer/types.ts"],"names":["AuthType"],"mappings":";AAEO,IAAW,WAAX,kBAAWA,cAAX;AAGL,EAAAA,UAAA,SAAM;AAGN,EAAAA,UAAA,UAAO;AANS,SAAAA;AAAA,GAAA","sourcesContent":["import type { Env } from '../env';\n\nexport const 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 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"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/sdk/authentication-jwt-bearer/services.ts"],"sourcesContent":["import type { Env } from '../env';\nimport { getEnvUrls, getOidcClientId } from '../env';\nimport { NonceRetrievalError, SignInError, ValidationError } from '../errors';\nimport type { AccessToken, ErrorMessage, UserProfile } from './types';\nimport { AuthType } from './types';\n\nexport const NONCE_URL = (env: Env) =>\n `${getEnvUrls(env).authApiUrl}/api/v2/nonce`;\n\nexport const OIDC_TOKEN_URL = (env: Env) =>\n `${getEnvUrls(env).oidcApiUrl}/oauth2/token`;\n\nexport const SRP_LOGIN_URL = (env: Env) =>\n `${getEnvUrls(env).authApiUrl}/api/v2/srp/login`;\n\nexport const SIWE_LOGIN_URL = (env: Env) =>\n `${getEnvUrls(env).authApiUrl}/api/v2/siwe/login`;\n\nconst getAuthenticationUrl = (authType: AuthType, env: Env): string => {\n switch (authType) {\n case AuthType.SRP:\n return SRP_LOGIN_URL(env);\n case AuthType.SiWE:\n return SIWE_LOGIN_URL(env);\n /* istanbul ignore next */\n default:\n throw new ValidationError(\n `Invalid AuthType: ${authType as number} - unable to create Auth URL`,\n );\n }\n};\n\ntype NonceResponse = {\n nonce: string;\n identifier: string;\n expiresIn: number;\n};\n\n/**\n * Service to Get Nonce for JWT Bearer Flow\n *\n * @param id - identifier ID\n * @param env - server environment\n * @returns the nonce.\n */\nexport async function getNonce(id: string, env: Env): Promise<NonceResponse> {\n const nonceUrl = new URL(NONCE_URL(env));\n nonceUrl.searchParams.set('identifier', id);\n\n try {\n const nonceResponse = await fetch(nonceUrl.toString());\n if (!nonceResponse.ok) {\n const responseBody = (await nonceResponse.json()) as ErrorMessage;\n throw new Error(\n `HTTP error message: ${responseBody.message}, error: ${responseBody.error}`,\n );\n }\n\n const nonceJson = await nonceResponse.json();\n return {\n nonce: nonceJson.nonce,\n identifier: nonceJson.identifier,\n expiresIn: nonceJson.expires_in,\n };\n } catch (e) {\n /* istanbul ignore next */\n const errorMessage =\n e instanceof Error ? e.message : JSON.stringify(e ?? '');\n throw new NonceRetrievalError(`failed to generate nonce: ${errorMessage}`);\n }\n}\n\n/**\n * Service to Authorize And perform OIDC Flow to get the Access Token\n *\n * @param jwtToken - The original token received from Authentication. This is traded for the Access Token. (the authentication token is single-use)\n * @param env - server environment\n * @returns Access Token from Authorization server\n */\nexport async function authorizeOIDC(\n jwtToken: string,\n env: Env,\n): Promise<AccessToken> {\n const grantType = 'urn:ietf:params:oauth:grant-type:jwt-bearer';\n const headers = new Headers({\n 'Content-Type': 'application/x-www-form-urlencoded',\n });\n\n const urlEncodedBody = new URLSearchParams();\n urlEncodedBody.append('grant_type', grantType);\n urlEncodedBody.append('client_id', getOidcClientId(env));\n urlEncodedBody.append('assertion', jwtToken);\n\n try {\n const response = await fetch(OIDC_TOKEN_URL(env), {\n method: 'POST',\n headers,\n body: urlEncodedBody.toString(),\n });\n\n if (!response.ok) {\n const responseBody = (await response.json()) as {\n error_description: string;\n error: string;\n };\n throw new Error(\n `HTTP error: ${responseBody.error_description}, error code: ${responseBody.error}`,\n );\n }\n\n const accessTokenResponse = await response.json();\n return {\n accessToken: accessTokenResponse.access_token,\n expiresIn: accessTokenResponse.expires_in,\n obtainedAt: Date.now(),\n };\n } catch (e) {\n /* istanbul ignore next */\n const errorMessage =\n e instanceof Error ? e.message : JSON.stringify(e ?? '');\n throw new SignInError(`unable to get access token: ${errorMessage}`);\n }\n}\n\ntype Authentication = {\n token: string;\n expiresIn: number;\n profile: UserProfile;\n};\n/**\n * Service to Authenticate/Login a user via SIWE or SRP derived key.\n *\n * @param rawMessage - raw message for validation when authenticating\n * @param signature - signed raw message\n * @param authType - authentication type/flow used\n * @param env - server environment\n * @returns Authentication Token\n */\nexport async function authenticate(\n rawMessage: string,\n signature: string,\n authType: AuthType,\n env: Env,\n): Promise<Authentication> {\n const authenticationUrl = getAuthenticationUrl(authType, env);\n\n try {\n const response = await fetch(authenticationUrl, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n signature,\n raw_message: rawMessage,\n }),\n });\n\n if (!response.ok) {\n const responseBody = (await response.json()) as ErrorMessage;\n throw new Error(\n `${authType} login HTTP error: ${responseBody.message}, error code: ${responseBody.error}`,\n );\n }\n\n const loginResponse = await response.json();\n return {\n token: loginResponse.token,\n expiresIn: loginResponse.expires_in,\n profile: {\n identifierId: loginResponse.profile.identifier_id,\n metaMetricsId: loginResponse.profile.metametrics_id,\n profileId: loginResponse.profile.profile_id,\n },\n };\n } catch (e) {\n /* istanbul ignore next */\n const errorMessage =\n e instanceof Error ? e.message : JSON.stringify(e ?? '');\n throw new SignInError(`unable to perform SRP login: ${errorMessage}`);\n }\n}\n"],"mappings":"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","names":[]}
|
package/dist/chunk-DEATIRII.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";//# sourceMappingURL=chunk-DEATIRII.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/sdk/errors.ts"],"names":[],"mappings":";AAAO,IAAM,sBAAN,cAAkC,MAAM;AAAA,EAC7C,YAAY,SAAiB;AAC3B,UAAM,OAAO;AACb,SAAK,OAAO;AAAA,EACd;AACF;AAEO,IAAM,cAAN,cAA0B,MAAM;AAAA,EACrC,YAAY,SAAiB;AAC3B,UAAM,OAAO;AACb,SAAK,OAAO;AAAA,EACd;AACF;AAEO,IAAM,mBAAN,cAA+B,MAAM;AAAA,EAC1C,YAAY,SAAiB;AAC3B,UAAM,OAAO;AACb,SAAK,OAAO;AAAA,EACd;AACF;AAEO,IAAM,kBAAN,cAA8B,MAAM;AAAA,EACzC,YAAY,SAAiB;AAC3B,UAAM,OAAO;AACb,SAAK,OAAO;AAAA,EACd;AACF;AAEO,IAAM,2BAAN,cAAuC,MAAM;AAAA,EAClD,YAAY,SAAiB;AAC3B,UAAM,OAAO;AACb,SAAK,OAAO;AAAA,EACd;AACF;AAEO,IAAM,gBAAN,cAA4B,MAAM;AAAA,EACvC,YAAY,SAAiB;AAC3B,UAAM,OAAO;AACb,SAAK,OAAO;AAAA,EACd;AACF","sourcesContent":["export class NonceRetrievalError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'NonceRetrievalError';\n }\n}\n\nexport class SignInError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'SignInError';\n }\n}\n\nexport class UserStorageError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'UserStorageError';\n }\n}\n\nexport class ValidationError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'ValidationError';\n }\n}\n\nexport class UnsupportedAuthTypeError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'UnsupportedAuthTypeError';\n }\n}\n\nexport class NotFoundError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'NotFoundError';\n }\n}\n"]}
|
package/dist/chunk-GVMIXMYB.mjs
DELETED
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
SIWEJwtBearerAuth
|
|
3
|
-
} from "./chunk-4NGEEDGV.mjs";
|
|
4
|
-
import {
|
|
5
|
-
SRPJwtBearerAuth
|
|
6
|
-
} from "./chunk-VXPVURGH.mjs";
|
|
7
|
-
import {
|
|
8
|
-
UnsupportedAuthTypeError
|
|
9
|
-
} from "./chunk-BHVT2QEA.mjs";
|
|
10
|
-
import {
|
|
11
|
-
__privateAdd,
|
|
12
|
-
__privateGet,
|
|
13
|
-
__privateMethod,
|
|
14
|
-
__privateSet
|
|
15
|
-
} from "./chunk-XUI43LEZ.mjs";
|
|
16
|
-
|
|
17
|
-
// src/sdk/authentication.ts
|
|
18
|
-
var _type, _sdk, _assertSIWE, assertSIWE_fn;
|
|
19
|
-
var JwtBearerAuth = class {
|
|
20
|
-
constructor(...args) {
|
|
21
|
-
__privateAdd(this, _assertSIWE);
|
|
22
|
-
__privateAdd(this, _type, void 0);
|
|
23
|
-
__privateAdd(this, _sdk, void 0);
|
|
24
|
-
__privateSet(this, _type, args[0].type);
|
|
25
|
-
if (args[0].type === "SRP" /* SRP */) {
|
|
26
|
-
__privateSet(this, _sdk, new SRPJwtBearerAuth(args[0], args[1]));
|
|
27
|
-
return;
|
|
28
|
-
}
|
|
29
|
-
if (args[0].type === "SiWE" /* SiWE */) {
|
|
30
|
-
__privateSet(this, _sdk, new SIWEJwtBearerAuth(args[0], args[1]));
|
|
31
|
-
return;
|
|
32
|
-
}
|
|
33
|
-
throw new UnsupportedAuthTypeError("unsupported auth type");
|
|
34
|
-
}
|
|
35
|
-
async getAccessToken() {
|
|
36
|
-
return await __privateGet(this, _sdk).getAccessToken();
|
|
37
|
-
}
|
|
38
|
-
async getUserProfile() {
|
|
39
|
-
return await __privateGet(this, _sdk).getUserProfile();
|
|
40
|
-
}
|
|
41
|
-
async getIdentifier() {
|
|
42
|
-
return await __privateGet(this, _sdk).getIdentifier();
|
|
43
|
-
}
|
|
44
|
-
async signMessage(message) {
|
|
45
|
-
return await __privateGet(this, _sdk).signMessage(message);
|
|
46
|
-
}
|
|
47
|
-
prepare(signer) {
|
|
48
|
-
__privateMethod(this, _assertSIWE, assertSIWE_fn).call(this, __privateGet(this, _type), __privateGet(this, _sdk));
|
|
49
|
-
__privateGet(this, _sdk).prepare(signer);
|
|
50
|
-
}
|
|
51
|
-
};
|
|
52
|
-
_type = new WeakMap();
|
|
53
|
-
_sdk = new WeakMap();
|
|
54
|
-
_assertSIWE = new WeakSet();
|
|
55
|
-
assertSIWE_fn = function(type, sdk) {
|
|
56
|
-
if (type === "SiWE" /* SiWE */) {
|
|
57
|
-
return;
|
|
58
|
-
}
|
|
59
|
-
throw new UnsupportedAuthTypeError(
|
|
60
|
-
"This method is only available via SIWE auth type"
|
|
61
|
-
);
|
|
62
|
-
};
|
|
63
|
-
|
|
64
|
-
export {
|
|
65
|
-
JwtBearerAuth
|
|
66
|
-
};
|
|
67
|
-
//# sourceMappingURL=chunk-GVMIXMYB.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/sdk/authentication.ts"],"sourcesContent":["import { SIWEJwtBearerAuth } from './authentication-jwt-bearer/flow-siwe';\nimport { SRPJwtBearerAuth } from './authentication-jwt-bearer/flow-srp';\nimport type { UserProfile } from './authentication-jwt-bearer/types';\nimport { AuthType } from './authentication-jwt-bearer/types';\nimport { UnsupportedAuthTypeError } from './errors';\n\n// Computing the Classes, so we only get back the public methods for the interface.\ntype Compute<T> = T extends infer U ? { [K in keyof U]: U[K] } : never;\ntype SIWEInterface = Compute<SIWEJwtBearerAuth>;\ntype SRPInterface = Compute<SRPJwtBearerAuth>;\n\ntype SiweParams = ConstructorParameters<typeof SIWEJwtBearerAuth>;\ntype SRPParams = ConstructorParameters<typeof SRPJwtBearerAuth>;\ntype JwtBearerAuthParams = SiweParams | SRPParams;\n\nexport class JwtBearerAuth implements SIWEInterface, SRPInterface {\n #type: AuthType;\n\n #sdk: SIWEJwtBearerAuth | SRPJwtBearerAuth;\n\n constructor(...args: JwtBearerAuthParams) {\n this.#type = args[0].type;\n\n if (args[0].type === AuthType.SRP) {\n this.#sdk = new SRPJwtBearerAuth(args[0], args[1]);\n return;\n }\n\n if (args[0].type === AuthType.SiWE) {\n this.#sdk = new SIWEJwtBearerAuth(args[0], args[1]);\n return;\n }\n\n throw new UnsupportedAuthTypeError('unsupported auth type');\n }\n\n async getAccessToken(): Promise<string> {\n return await this.#sdk.getAccessToken();\n }\n\n async getUserProfile(): Promise<UserProfile> {\n return await this.#sdk.getUserProfile();\n }\n\n async getIdentifier(): Promise<string> {\n return await this.#sdk.getIdentifier();\n }\n\n async signMessage(message: string): Promise<string> {\n return await this.#sdk.signMessage(message);\n }\n\n prepare(signer: {\n address: string;\n chainId: number;\n signMessage: (message: string) => Promise<string>;\n domain: string;\n }): void {\n this.#assertSIWE(this.#type, this.#sdk);\n this.#sdk.prepare(signer);\n }\n\n #assertSIWE(\n type: AuthType,\n sdk: SIWEJwtBearerAuth | SRPJwtBearerAuth,\n ): asserts sdk is SIWEJwtBearerAuth {\n if (type === AuthType.SiWE) {\n return;\n }\n\n throw new UnsupportedAuthTypeError(\n 'This method is only available via SIWE auth type',\n );\n }\n}\n\nexport { SIWEJwtBearerAuth } from './authentication-jwt-bearer/flow-siwe';\nexport { SRPJwtBearerAuth } from './authentication-jwt-bearer/flow-srp';\nexport * from './authentication-jwt-bearer/types';\n"],"mappings":";;;;;;;;;;;;;;;;;AAAA;AAeO,IAAM,gBAAN,MAA2D;AAAA,EAKhE,eAAe,MAA2B;AA0C1C;AA9CA;AAEA;AAGE,uBAAK,OAAQ,KAAK,CAAC,EAAE;AAErB,QAAI,KAAK,CAAC,EAAE,0BAAuB;AACjC,yBAAK,MAAO,IAAI,iBAAiB,KAAK,CAAC,GAAG,KAAK,CAAC,CAAC;AACjD;AAAA,IACF;AAEA,QAAI,KAAK,CAAC,EAAE,4BAAwB;AAClC,yBAAK,MAAO,IAAI,kBAAkB,KAAK,CAAC,GAAG,KAAK,CAAC,CAAC;AAClD;AAAA,IACF;AAEA,UAAM,IAAI,yBAAyB,uBAAuB;AAAA,EAC5D;AAAA,EAEA,MAAM,iBAAkC;AACtC,WAAO,MAAM,mBAAK,MAAK,eAAe;AAAA,EACxC;AAAA,EAEA,MAAM,iBAAuC;AAC3C,WAAO,MAAM,mBAAK,MAAK,eAAe;AAAA,EACxC;AAAA,EAEA,MAAM,gBAAiC;AACrC,WAAO,MAAM,mBAAK,MAAK,cAAc;AAAA,EACvC;AAAA,EAEA,MAAM,YAAY,SAAkC;AAClD,WAAO,MAAM,mBAAK,MAAK,YAAY,OAAO;AAAA,EAC5C;AAAA,EAEA,QAAQ,QAKC;AACP,0BAAK,4BAAL,WAAiB,mBAAK,QAAO,mBAAK;AAClC,uBAAK,MAAK,QAAQ,MAAM;AAAA,EAC1B;AAcF;AA1DE;AAEA;AA4CA;AAAA,gBAAW,SACT,MACA,KACkC;AAClC,MAAI,4BAAwB;AAC1B;AAAA,EACF;AAEA,QAAM,IAAI;AAAA,IACR;AAAA,EACF;AACF;","names":[]}
|
package/dist/chunk-KHFPE566.js
DELETED
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports, "__esModule", {value: true});// src/sdk/env.ts
|
|
2
|
-
var Env = /* @__PURE__ */ ((Env2) => {
|
|
3
|
-
Env2["DEV"] = "dev";
|
|
4
|
-
Env2["UAT"] = "uat";
|
|
5
|
-
Env2["PRD"] = "prd";
|
|
6
|
-
return Env2;
|
|
7
|
-
})(Env || {});
|
|
8
|
-
var ENV_URLS = {
|
|
9
|
-
dev: {
|
|
10
|
-
authApiUrl: "https://authentication.dev-api.cx.metamask.io",
|
|
11
|
-
oidcApiUrl: "https://oidc.dev-api.cx.metamask.io",
|
|
12
|
-
userStorageApiUrl: "https://user-storage.dev-api.cx.metamask.io"
|
|
13
|
-
},
|
|
14
|
-
uat: {
|
|
15
|
-
authApiUrl: "https://authentication.uat-api.cx.metamask.io",
|
|
16
|
-
oidcApiUrl: "https://oidc.uat-api.cx.metamask.io",
|
|
17
|
-
userStorageApiUrl: "https://user-storage.uat-api.cx.metamask.io"
|
|
18
|
-
},
|
|
19
|
-
prd: {
|
|
20
|
-
authApiUrl: "https://authentication.api.cx.metamask.io",
|
|
21
|
-
oidcApiUrl: "https://oidc.api.cx.metamask.io",
|
|
22
|
-
userStorageApiUrl: "https://user-storage.api.cx.metamask.io"
|
|
23
|
-
}
|
|
24
|
-
};
|
|
25
|
-
function getEnvUrls(env) {
|
|
26
|
-
if (!ENV_URLS[env]) {
|
|
27
|
-
throw new Error("invalid environment configuration");
|
|
28
|
-
}
|
|
29
|
-
return ENV_URLS[env];
|
|
30
|
-
}
|
|
31
|
-
function getOidcClientId(env) {
|
|
32
|
-
switch (env) {
|
|
33
|
-
case "dev" /* DEV */:
|
|
34
|
-
return "f1a963d7-50dc-4cb5-8d81-f1f3654f0df3";
|
|
35
|
-
case "uat" /* UAT */:
|
|
36
|
-
return "a9de167c-c9a6-43d8-af39-d301fd44c485";
|
|
37
|
-
case "prd" /* PRD */:
|
|
38
|
-
return "1132f10a-b4e5-4390-a5f2-d9c6022db564";
|
|
39
|
-
default:
|
|
40
|
-
throw new Error("invalid env: cannot determine oidc client id");
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
exports.Env = Env; exports.getEnvUrls = getEnvUrls; exports.getOidcClientId = getOidcClientId;
|
|
49
|
-
//# sourceMappingURL=chunk-KHFPE566.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/sdk/env.ts"],"names":["Env"],"mappings":";AAAO,IAAW,MAAX,kBAAWA,SAAX;AACL,EAAAA,KAAA,SAAM;AACN,EAAAA,KAAA,SAAM;AACN,EAAAA,KAAA,SAAM;AAHU,SAAAA;AAAA,GAAA;AAYlB,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;AAQO,SAAS,gBAAgB,KAAkB;AAChD,UAAQ,KAAK;AAAA,IACX,KAAK;AACH,aAAO;AAAA,IAET,KAAK;AACH,aAAO;AAAA,IAET,KAAK;AACH,aAAO;AAAA,IAET;AACE,YAAM,IAAI,MAAM,8CAA8C;AAAA,EAClE;AACF","sourcesContent":["export const enum Env {\n DEV = 'dev',\n UAT = 'uat',\n PRD = 'prd',\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 * @returns the OIDC client id for the environment\n */\nexport function getOidcClientId(env: Env): string {\n switch (env) {\n case Env.DEV:\n return 'f1a963d7-50dc-4cb5-8d81-f1f3654f0df3';\n /* istanbul ignore next */\n case Env.UAT:\n return 'a9de167c-c9a6-43d8-af39-d301fd44c485';\n /* istanbul ignore next */\n case Env.PRD:\n return '1132f10a-b4e5-4390-a5f2-d9c6022db564';\n /* istanbul ignore next */\n default:\n throw new Error('invalid env: cannot determine oidc client id');\n }\n}\n"]}
|
package/dist/chunk-KKRIOEXD.mjs
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/sdk/authentication-jwt-bearer/constants.ts"],"sourcesContent":["export const SESSION_LIFETIME_MS = 45 * 60 * 1000; // 45 minutes in milliseconds\n"],"mappings":";AAAO,IAAM,sBAAsB,KAAK,KAAK;","names":[]}
|
package/dist/chunk-MKJYSWME.mjs
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
//# sourceMappingURL=chunk-MKJYSWME.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/sdk/authentication-jwt-bearer/services.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Env } from '../env';\nimport { getEnvUrls, getOidcClientId } from '../env';\nimport { NonceRetrievalError, SignInError, ValidationError } from '../errors';\nimport type { AccessToken, ErrorMessage, UserProfile } from './types';\nimport { AuthType } from './types';\n\nexport const NONCE_URL = (env: Env) =>\n `${getEnvUrls(env).authApiUrl}/api/v2/nonce`;\n\nexport const OIDC_TOKEN_URL = (env: Env) =>\n `${getEnvUrls(env).oidcApiUrl}/oauth2/token`;\n\nexport const SRP_LOGIN_URL = (env: Env) =>\n `${getEnvUrls(env).authApiUrl}/api/v2/srp/login`;\n\nexport const SIWE_LOGIN_URL = (env: Env) =>\n `${getEnvUrls(env).authApiUrl}/api/v2/siwe/login`;\n\nconst getAuthenticationUrl = (authType: AuthType, env: Env): string => {\n switch (authType) {\n case AuthType.SRP:\n return SRP_LOGIN_URL(env);\n case AuthType.SiWE:\n return SIWE_LOGIN_URL(env);\n /* istanbul ignore next */\n default:\n throw new ValidationError(\n `Invalid AuthType: ${authType as number} - unable to create Auth URL`,\n );\n }\n};\n\ntype NonceResponse = {\n nonce: string;\n identifier: string;\n expiresIn: number;\n};\n\n/**\n * Service to Get Nonce for JWT Bearer Flow\n *\n * @param id - identifier ID\n * @param env - server environment\n * @returns the nonce.\n */\nexport async function getNonce(id: string, env: Env): Promise<NonceResponse> {\n const nonceUrl = new URL(NONCE_URL(env));\n nonceUrl.searchParams.set('identifier', id);\n\n try {\n const nonceResponse = await fetch(nonceUrl.toString());\n if (!nonceResponse.ok) {\n const responseBody = (await nonceResponse.json()) as ErrorMessage;\n throw new Error(\n `HTTP error message: ${responseBody.message}, error: ${responseBody.error}`,\n );\n }\n\n const nonceJson = await nonceResponse.json();\n return {\n nonce: nonceJson.nonce,\n identifier: nonceJson.identifier,\n expiresIn: nonceJson.expires_in,\n };\n } catch (e) {\n /* istanbul ignore next */\n const errorMessage =\n e instanceof Error ? e.message : JSON.stringify(e ?? '');\n throw new NonceRetrievalError(`failed to generate nonce: ${errorMessage}`);\n }\n}\n\n/**\n * Service to Authorize And perform OIDC Flow to get the Access Token\n *\n * @param jwtToken - The original token received from Authentication. This is traded for the Access Token. (the authentication token is single-use)\n * @param env - server environment\n * @returns Access Token from Authorization server\n */\nexport async function authorizeOIDC(\n jwtToken: string,\n env: Env,\n): Promise<AccessToken> {\n const grantType = 'urn:ietf:params:oauth:grant-type:jwt-bearer';\n const headers = new Headers({\n 'Content-Type': 'application/x-www-form-urlencoded',\n });\n\n const urlEncodedBody = new URLSearchParams();\n urlEncodedBody.append('grant_type', grantType);\n urlEncodedBody.append('client_id', getOidcClientId(env));\n urlEncodedBody.append('assertion', jwtToken);\n\n try {\n const response = await fetch(OIDC_TOKEN_URL(env), {\n method: 'POST',\n headers,\n body: urlEncodedBody.toString(),\n });\n\n if (!response.ok) {\n const responseBody = (await response.json()) as {\n error_description: string;\n error: string;\n };\n throw new Error(\n `HTTP error: ${responseBody.error_description}, error code: ${responseBody.error}`,\n );\n }\n\n const accessTokenResponse = await response.json();\n return {\n accessToken: accessTokenResponse.access_token,\n expiresIn: accessTokenResponse.expires_in,\n obtainedAt: Date.now(),\n };\n } catch (e) {\n /* istanbul ignore next */\n const errorMessage =\n e instanceof Error ? e.message : JSON.stringify(e ?? '');\n throw new SignInError(`unable to get access token: ${errorMessage}`);\n }\n}\n\ntype Authentication = {\n token: string;\n expiresIn: number;\n profile: UserProfile;\n};\n/**\n * Service to Authenticate/Login a user via SIWE or SRP derived key.\n *\n * @param rawMessage - raw message for validation when authenticating\n * @param signature - signed raw message\n * @param authType - authentication type/flow used\n * @param env - server environment\n * @returns Authentication Token\n */\nexport async function authenticate(\n rawMessage: string,\n signature: string,\n authType: AuthType,\n env: Env,\n): Promise<Authentication> {\n const authenticationUrl = getAuthenticationUrl(authType, env);\n\n try {\n const response = await fetch(authenticationUrl, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n signature,\n raw_message: rawMessage,\n }),\n });\n\n if (!response.ok) {\n const responseBody = (await response.json()) as ErrorMessage;\n throw new Error(\n `${authType} login HTTP error: ${responseBody.message}, error code: ${responseBody.error}`,\n );\n }\n\n const loginResponse = await response.json();\n return {\n token: loginResponse.token,\n expiresIn: loginResponse.expires_in,\n profile: {\n identifierId: loginResponse.profile.identifier_id,\n metaMetricsId: loginResponse.profile.metametrics_id,\n profileId: loginResponse.profile.profile_id,\n },\n };\n } catch (e) {\n /* istanbul ignore next */\n const errorMessage =\n e instanceof Error ? e.message : JSON.stringify(e ?? '');\n throw new SignInError(`unable to perform SRP login: ${errorMessage}`);\n }\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/sdk/authentication-jwt-bearer/flow-srp.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAoBA,IAAM,+BAAmD;AAAA,EACvD,eAAe,YAA6B;AAC1C,UAAM,WAAW,MAAM,2BAA2B;AAClD,QAAI,CAAC,UAAU;AACb,YAAM,IAAI,gBAAgB,8BAA8B;AAAA,IAC1D;AACA,WAAO,MAAM,qBAAqB,aAAa,QAAQ;AAAA,EACzD;AAAA,EACA,aAAa,OAAO,YAAqC;AACvD,UAAM,WAAW,MAAM,2BAA2B;AAClD,QAAI,CAAC,UAAU;AACb,YAAM,IAAI,gBAAgB,8BAA8B;AAAA,IAC1D;AACA,QAAI,CAAC,QAAQ,WAAW,WAAW,GAAG;AACpC,YAAM,IAAI,gBAAgB,qCAAqC;AAAA,IACjE;AACA,UAAM,mBAAmB;AACzB,WAAO,MAAM,qBAAqB,YAAY,UAAU,gBAAgB;AAAA,EAC1E;AACF;AAvCA;AAyCO,IAAM,mBAAN,MAA4C;AAAA,EAKjD,YACE,QACA,SACA;AAoCF,uBAAM;AAcN,uBAAM;AAoCN;AA7FA;AAEA;AAME,uBAAK,SAAU;AACf,uBAAK,UAAW;AAAA,MACd,SAAS,QAAQ;AAAA,MACjB,SAAS,QAAQ,WAAW;AAAA,IAC9B;AAAA,EACF;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,WAAO,MAAM,mBAAK,UAAS,QAAQ,cAAc;AAAA,EACnD;AAAA,EAEA,MAAM,YAAY,SAAkC;AAClD,WAAO,MAAM,mBAAK,UAAS,QAAQ,YAAY,OAAO;AAAA,EACxD;AA0DF;AAnGE;AAEA;AAyCM;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,MAAI,aAAa,qBAAqB;AACpC,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAEM;AAAA,WAAM,iBAA2B;AAErC,QAAM,UAAU,MAAM,KAAK,cAAc;AACzC,QAAM,WAAW,MAAM,SAAS,SAAS,mBAAK,SAAQ,GAAG;AACzD,QAAM,YAAY,MAAM,mBAAK,UAAS,QAAQ,cAAc;AAC5D,QAAM,aAAa,sBAAK,wDAAL,WACjB,SAAS,OACT;AAEF,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,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,8BAAyB,SACvB,OACA,WACgC;AAChC,SAAO,YAAY,KAAK,IAAI,SAAS;AACvC","sourcesContent":["import { ValidationError } from '../errors';\nimport { getMetaMaskProviderEIP6963 } from '../utils/eip-6963-metamask-provider';\nimport { MESSAGE_SIGNING_SNAP } from '../utils/messaging-signing-snap-requests';\nimport { SESSION_LIFETIME_MS } from './constants';\nimport { authenticate, authorizeOIDC, getNonce } from './services';\nimport type {\n AuthConfig,\n AuthSigningOptions,\n AuthStorageOptions,\n AuthType,\n IBaseAuth,\n LoginResponse,\n UserProfile,\n} from './types';\n\ntype JwtBearerAuth_SRP_Options = {\n storage: AuthStorageOptions;\n signing?: AuthSigningOptions;\n};\n\nconst defaultEIP6963SigningOptions: AuthSigningOptions = {\n getIdentifier: async (): Promise<string> => {\n const provider = await getMetaMaskProviderEIP6963();\n if (!provider) {\n throw new ValidationError('No MetaMask wallet connected');\n }\n return await MESSAGE_SIGNING_SNAP.getPublicKey(provider);\n },\n signMessage: async (message: string): Promise<string> => {\n const provider = await getMetaMaskProviderEIP6963();\n if (!provider) {\n throw new ValidationError('No MetaMask wallet connected');\n }\n if (!message.startsWith('metamask:')) {\n throw new ValidationError('message must start with \"metamask:\"');\n }\n const formattedMessage = message as `metamask:${string}`;\n return await MESSAGE_SIGNING_SNAP.signMessage(provider, formattedMessage);\n },\n};\n\nexport class SRPJwtBearerAuth implements IBaseAuth {\n #config: AuthConfig;\n\n #options: Required<JwtBearerAuth_SRP_Options>;\n\n constructor(\n config: AuthConfig & { type: AuthType.SRP },\n options: JwtBearerAuth_SRP_Options,\n ) {\n this.#config = config;\n this.#options = {\n storage: options.storage,\n signing: options.signing ?? defaultEIP6963SigningOptions,\n };\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 return await this.#options.signing.getIdentifier();\n }\n\n async signMessage(message: string): Promise<string> {\n return await this.#options.signing.signMessage(message);\n }\n\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 if (sessionAge < SESSION_LIFETIME_MS) {\n return auth;\n }\n return null;\n }\n\n async #login(): Promise<LoginResponse> {\n // Nonce\n const address = await this.getIdentifier();\n const nonceRes = await getNonce(address, this.#config.env);\n const publicKey = await this.#options.signing.getIdentifier();\n const rawMessage = this.#createSrpLoginRawMessage(\n nonceRes.nonce,\n publicKey,\n );\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 );\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 #createSrpLoginRawMessage(\n nonce: string,\n publicKey: string,\n ): `metamask:${string}:${string}` {\n return `metamask:${nonce}:${publicKey}` as const;\n }\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/sdk/encryption.ts"],"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 #ALGORITHM_NONCE_SIZE = 12; // 12 bytes\n\n #ALGORITHM_KEY_SIZE = 16; // 16 bytes\n\n #PBKDF2_SALT_SIZE = 16; // 16 bytes\n\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\nconst 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"],"mappings":"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","names":[]}
|
package/dist/chunk-UVJVONBF.js
DELETED
|
@@ -1,126 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
var _chunkNRH6O4QZjs = require('./chunk-NRH6O4QZ.js');
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
var _chunkGQLHSQGZjs = require('./chunk-GQLHSQGZ.js');
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
var _chunkBARZBXO7js = require('./chunk-BARZBXO7.js');
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
var _chunkZ4BLTVTBjs = require('./chunk-Z4BLTVTB.js');
|
|
19
|
-
|
|
20
|
-
// src/sdk/authentication-jwt-bearer/flow-siwe.ts
|
|
21
|
-
var _siwe = require('siwe');
|
|
22
|
-
var _config, _options, _signer, _getAuthSession, getAuthSession_fn, _login, login_fn, _createSiWELoginRawMessage, createSiWELoginRawMessage_fn, _assertSigner, assertSigner_fn;
|
|
23
|
-
var SIWEJwtBearerAuth = class {
|
|
24
|
-
constructor(config, options) {
|
|
25
|
-
_chunkZ4BLTVTBjs.__privateAdd.call(void 0, this, _getAuthSession);
|
|
26
|
-
_chunkZ4BLTVTBjs.__privateAdd.call(void 0, this, _login);
|
|
27
|
-
_chunkZ4BLTVTBjs.__privateAdd.call(void 0, this, _createSiWELoginRawMessage);
|
|
28
|
-
_chunkZ4BLTVTBjs.__privateAdd.call(void 0, this, _assertSigner);
|
|
29
|
-
_chunkZ4BLTVTBjs.__privateAdd.call(void 0, this, _config, void 0);
|
|
30
|
-
_chunkZ4BLTVTBjs.__privateAdd.call(void 0, this, _options, void 0);
|
|
31
|
-
_chunkZ4BLTVTBjs.__privateAdd.call(void 0, this, _signer, void 0);
|
|
32
|
-
_chunkZ4BLTVTBjs.__privateSet.call(void 0, this, _config, config);
|
|
33
|
-
_chunkZ4BLTVTBjs.__privateSet.call(void 0, this, _options, options);
|
|
34
|
-
}
|
|
35
|
-
async getAccessToken() {
|
|
36
|
-
const session = await _chunkZ4BLTVTBjs.__privateMethod.call(void 0, this, _getAuthSession, getAuthSession_fn).call(this);
|
|
37
|
-
if (session) {
|
|
38
|
-
return session.token.accessToken;
|
|
39
|
-
}
|
|
40
|
-
const loginResponse = await _chunkZ4BLTVTBjs.__privateMethod.call(void 0, this, _login, login_fn).call(this);
|
|
41
|
-
return loginResponse.token.accessToken;
|
|
42
|
-
}
|
|
43
|
-
async getUserProfile() {
|
|
44
|
-
const session = await _chunkZ4BLTVTBjs.__privateMethod.call(void 0, this, _getAuthSession, getAuthSession_fn).call(this);
|
|
45
|
-
if (session) {
|
|
46
|
-
return session.profile;
|
|
47
|
-
}
|
|
48
|
-
const loginResponse = await _chunkZ4BLTVTBjs.__privateMethod.call(void 0, this, _login, login_fn).call(this);
|
|
49
|
-
return loginResponse.profile;
|
|
50
|
-
}
|
|
51
|
-
async getIdentifier() {
|
|
52
|
-
_chunkZ4BLTVTBjs.__privateMethod.call(void 0, this, _assertSigner, assertSigner_fn).call(this, _chunkZ4BLTVTBjs.__privateGet.call(void 0, this, _signer));
|
|
53
|
-
return _chunkZ4BLTVTBjs.__privateGet.call(void 0, this, _signer).address;
|
|
54
|
-
}
|
|
55
|
-
async signMessage(message) {
|
|
56
|
-
_chunkZ4BLTVTBjs.__privateMethod.call(void 0, this, _assertSigner, assertSigner_fn).call(this, _chunkZ4BLTVTBjs.__privateGet.call(void 0, this, _signer));
|
|
57
|
-
return await _chunkZ4BLTVTBjs.__privateGet.call(void 0, this, _signer).signMessage(message);
|
|
58
|
-
}
|
|
59
|
-
prepare(signer) {
|
|
60
|
-
_chunkZ4BLTVTBjs.__privateSet.call(void 0, this, _signer, signer);
|
|
61
|
-
}
|
|
62
|
-
};
|
|
63
|
-
_config = new WeakMap();
|
|
64
|
-
_options = new WeakMap();
|
|
65
|
-
_signer = new WeakMap();
|
|
66
|
-
_getAuthSession = new WeakSet();
|
|
67
|
-
getAuthSession_fn = async function() {
|
|
68
|
-
const auth = await _chunkZ4BLTVTBjs.__privateGet.call(void 0, this, _options).storage.getLoginResponse();
|
|
69
|
-
if (!auth) {
|
|
70
|
-
return null;
|
|
71
|
-
}
|
|
72
|
-
const currentTime = Date.now();
|
|
73
|
-
const sessionAge = currentTime - auth.token.obtainedAt;
|
|
74
|
-
if (sessionAge < _chunkBARZBXO7js.SESSION_LIFETIME_MS) {
|
|
75
|
-
return auth;
|
|
76
|
-
}
|
|
77
|
-
return null;
|
|
78
|
-
};
|
|
79
|
-
_login = new WeakSet();
|
|
80
|
-
login_fn = async function() {
|
|
81
|
-
_chunkZ4BLTVTBjs.__privateMethod.call(void 0, this, _assertSigner, assertSigner_fn).call(this, _chunkZ4BLTVTBjs.__privateGet.call(void 0, this, _signer));
|
|
82
|
-
const address = await this.getIdentifier();
|
|
83
|
-
const nonceRes = await _chunkNRH6O4QZjs.getNonce.call(void 0, address, _chunkZ4BLTVTBjs.__privateGet.call(void 0, this, _config).env);
|
|
84
|
-
const rawMessage = _chunkZ4BLTVTBjs.__privateMethod.call(void 0, this, _createSiWELoginRawMessage, createSiWELoginRawMessage_fn).call(this, nonceRes.nonce);
|
|
85
|
-
const signature = await this.signMessage(rawMessage);
|
|
86
|
-
const authResponse = await _chunkNRH6O4QZjs.authenticate.call(void 0,
|
|
87
|
-
rawMessage,
|
|
88
|
-
signature,
|
|
89
|
-
_chunkZ4BLTVTBjs.__privateGet.call(void 0, this, _config).type,
|
|
90
|
-
_chunkZ4BLTVTBjs.__privateGet.call(void 0, this, _config).env
|
|
91
|
-
);
|
|
92
|
-
const tokenResponse = await _chunkNRH6O4QZjs.authorizeOIDC.call(void 0,
|
|
93
|
-
authResponse.token,
|
|
94
|
-
_chunkZ4BLTVTBjs.__privateGet.call(void 0, this, _config).env
|
|
95
|
-
);
|
|
96
|
-
const result = {
|
|
97
|
-
profile: authResponse.profile,
|
|
98
|
-
token: tokenResponse
|
|
99
|
-
};
|
|
100
|
-
await _chunkZ4BLTVTBjs.__privateGet.call(void 0, this, _options).storage.setLoginResponse(result);
|
|
101
|
-
return result;
|
|
102
|
-
};
|
|
103
|
-
_createSiWELoginRawMessage = new WeakSet();
|
|
104
|
-
createSiWELoginRawMessage_fn = function(nonce) {
|
|
105
|
-
_chunkZ4BLTVTBjs.__privateMethod.call(void 0, this, _assertSigner, assertSigner_fn).call(this, _chunkZ4BLTVTBjs.__privateGet.call(void 0, this, _signer));
|
|
106
|
-
return new (0, _siwe.SiweMessage)({
|
|
107
|
-
domain: _chunkZ4BLTVTBjs.__privateGet.call(void 0, this, _signer)?.domain,
|
|
108
|
-
address: _chunkZ4BLTVTBjs.__privateGet.call(void 0, this, _signer)?.address,
|
|
109
|
-
uri: _chunkNRH6O4QZjs.SIWE_LOGIN_URL.call(void 0, _chunkZ4BLTVTBjs.__privateGet.call(void 0, this, _config).env),
|
|
110
|
-
version: "1",
|
|
111
|
-
chainId: _chunkZ4BLTVTBjs.__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, _chunkGQLHSQGZjs.ValidationError)(`you must call 'prepare()' before logging in`);
|
|
120
|
-
}
|
|
121
|
-
};
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
exports.SIWEJwtBearerAuth = SIWEJwtBearerAuth;
|
|
126
|
-
//# sourceMappingURL=chunk-UVJVONBF.js.map
|