@metamask/profile-sync-controller 0.0.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 +10 -0
- package/LICENSE +20 -0
- package/README.md +15 -0
- package/dist/chunk-2FZSWVHT.mjs +11 -0
- package/dist/chunk-2FZSWVHT.mjs.map +1 -0
- package/dist/chunk-4NGEEDGV.mjs +126 -0
- package/dist/chunk-4NGEEDGV.mjs.map +1 -0
- package/dist/chunk-5EBUFNAN.mjs +55 -0
- package/dist/chunk-5EBUFNAN.mjs.map +1 -0
- package/dist/chunk-5XSXZTED.mjs +57 -0
- package/dist/chunk-5XSXZTED.mjs.map +1 -0
- package/dist/chunk-6X6I3HZU.js +142 -0
- package/dist/chunk-6X6I3HZU.js.map +1 -0
- package/dist/chunk-BARZBXO7.js +7 -0
- package/dist/chunk-BARZBXO7.js.map +1 -0
- package/dist/chunk-BHVT2QEA.mjs +47 -0
- package/dist/chunk-BHVT2QEA.mjs.map +1 -0
- package/dist/chunk-CFST6GWE.js +11 -0
- package/dist/chunk-CFST6GWE.js.map +1 -0
- package/dist/chunk-CYGZ4WLJ.mjs +126 -0
- package/dist/chunk-CYGZ4WLJ.mjs.map +1 -0
- package/dist/chunk-CZ7YK35S.mjs +142 -0
- package/dist/chunk-CZ7YK35S.mjs.map +1 -0
- package/dist/chunk-DEATIRII.js +1 -0
- package/dist/chunk-DEATIRII.js.map +1 -0
- package/dist/chunk-GQLHSQGZ.js +47 -0
- package/dist/chunk-GQLHSQGZ.js.map +1 -0
- package/dist/chunk-GVMIXMYB.mjs +67 -0
- package/dist/chunk-GVMIXMYB.mjs.map +1 -0
- package/dist/chunk-KHFPE566.js +49 -0
- package/dist/chunk-KHFPE566.js.map +1 -0
- package/dist/chunk-KKRIOEXD.mjs +7 -0
- package/dist/chunk-KKRIOEXD.mjs.map +1 -0
- package/dist/chunk-MKJYSWME.mjs +1 -0
- package/dist/chunk-MKJYSWME.mjs.map +1 -0
- package/dist/chunk-NRH6O4QZ.js +126 -0
- package/dist/chunk-NRH6O4QZ.js.map +1 -0
- package/dist/chunk-OF3TQWGX.js +130 -0
- package/dist/chunk-OF3TQWGX.js.map +1 -0
- package/dist/chunk-PQ5T4GHY.js +55 -0
- package/dist/chunk-PQ5T4GHY.js.map +1 -0
- package/dist/chunk-RG4II6WH.js +57 -0
- package/dist/chunk-RG4II6WH.js.map +1 -0
- package/dist/chunk-UMKBFFZ5.mjs +131 -0
- package/dist/chunk-UMKBFFZ5.mjs.map +1 -0
- package/dist/chunk-UVJVONBF.js +126 -0
- package/dist/chunk-UVJVONBF.js.map +1 -0
- package/dist/chunk-VHUU4HEY.js +67 -0
- package/dist/chunk-VHUU4HEY.js.map +1 -0
- package/dist/chunk-VXPVURGH.mjs +130 -0
- package/dist/chunk-VXPVURGH.mjs.map +1 -0
- package/dist/chunk-VZXD5DCQ.js +131 -0
- package/dist/chunk-VZXD5DCQ.js.map +1 -0
- package/dist/chunk-WJRV2JCX.mjs +49 -0
- package/dist/chunk-WJRV2JCX.mjs.map +1 -0
- package/dist/chunk-XUI43LEZ.mjs +30 -0
- package/dist/chunk-XUI43LEZ.mjs.map +1 -0
- package/dist/chunk-Z4BLTVTB.js +30 -0
- package/dist/chunk-Z4BLTVTB.js.map +1 -0
- package/dist/index.js +68 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +68 -0
- package/dist/index.mjs.map +1 -0
- package/dist/sdk/authentication-jwt-bearer/constants.js +8 -0
- package/dist/sdk/authentication-jwt-bearer/constants.js.map +1 -0
- package/dist/sdk/authentication-jwt-bearer/constants.mjs +8 -0
- package/dist/sdk/authentication-jwt-bearer/constants.mjs.map +1 -0
- package/dist/sdk/authentication-jwt-bearer/flow-siwe.js +13 -0
- package/dist/sdk/authentication-jwt-bearer/flow-siwe.js.map +1 -0
- package/dist/sdk/authentication-jwt-bearer/flow-siwe.mjs +13 -0
- package/dist/sdk/authentication-jwt-bearer/flow-siwe.mjs.map +1 -0
- package/dist/sdk/authentication-jwt-bearer/flow-srp.js +15 -0
- package/dist/sdk/authentication-jwt-bearer/flow-srp.js.map +1 -0
- package/dist/sdk/authentication-jwt-bearer/flow-srp.mjs +15 -0
- package/dist/sdk/authentication-jwt-bearer/flow-srp.mjs.map +1 -0
- package/dist/sdk/authentication-jwt-bearer/services.js +23 -0
- package/dist/sdk/authentication-jwt-bearer/services.js.map +1 -0
- package/dist/sdk/authentication-jwt-bearer/services.mjs +23 -0
- package/dist/sdk/authentication-jwt-bearer/services.mjs.map +1 -0
- package/dist/sdk/authentication-jwt-bearer/types.js +8 -0
- package/dist/sdk/authentication-jwt-bearer/types.js.map +1 -0
- package/dist/sdk/authentication-jwt-bearer/types.mjs +8 -0
- package/dist/sdk/authentication-jwt-bearer/types.mjs.map +1 -0
- package/dist/sdk/authentication.js +26 -0
- package/dist/sdk/authentication.js.map +1 -0
- package/dist/sdk/authentication.mjs +26 -0
- package/dist/sdk/authentication.mjs.map +1 -0
- package/dist/sdk/encryption.js +10 -0
- package/dist/sdk/encryption.js.map +1 -0
- package/dist/sdk/encryption.mjs +10 -0
- package/dist/sdk/encryption.mjs.map +1 -0
- package/dist/sdk/env.js +12 -0
- package/dist/sdk/env.js.map +1 -0
- package/dist/sdk/env.mjs +12 -0
- package/dist/sdk/env.mjs.map +1 -0
- package/dist/sdk/errors.js +18 -0
- package/dist/sdk/errors.js.map +1 -0
- package/dist/sdk/errors.mjs +18 -0
- package/dist/sdk/errors.mjs.map +1 -0
- package/dist/sdk/index.js +68 -0
- package/dist/sdk/index.js.map +1 -0
- package/dist/sdk/index.mjs +68 -0
- package/dist/sdk/index.mjs.map +1 -0
- package/dist/sdk/user-storage.js +13 -0
- package/dist/sdk/user-storage.js.map +1 -0
- package/dist/sdk/user-storage.mjs +13 -0
- package/dist/sdk/user-storage.mjs.map +1 -0
- package/dist/sdk/utils/eip-6963-metamask-provider.js +10 -0
- package/dist/sdk/utils/eip-6963-metamask-provider.js.map +1 -0
- package/dist/sdk/utils/eip-6963-metamask-provider.mjs +10 -0
- package/dist/sdk/utils/eip-6963-metamask-provider.mjs.map +1 -0
- package/dist/sdk/utils/messaging-signing-snap-requests.js +16 -0
- package/dist/sdk/utils/messaging-signing-snap-requests.js.map +1 -0
- package/dist/sdk/utils/messaging-signing-snap-requests.mjs +16 -0
- package/dist/sdk/utils/messaging-signing-snap-requests.mjs.map +1 -0
- package/dist/tsconfig.build.tsbuildinfo +1 -0
- package/dist/types/index.d.ts +2 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/sdk/__fixtures__/mock-auth.d.ts +39 -0
- package/dist/types/sdk/__fixtures__/mock-auth.d.ts.map +1 -0
- package/dist/types/sdk/__fixtures__/mock-userstorage.d.ts +18 -0
- package/dist/types/sdk/__fixtures__/mock-userstorage.d.ts.map +1 -0
- package/dist/types/sdk/__fixtures__/test-utils.d.ts +25 -0
- package/dist/types/sdk/__fixtures__/test-utils.d.ts.map +1 -0
- package/dist/types/sdk/authentication-jwt-bearer/constants.d.ts +2 -0
- package/dist/types/sdk/authentication-jwt-bearer/constants.d.ts.map +1 -0
- package/dist/types/sdk/authentication-jwt-bearer/flow-siwe.d.ts +23 -0
- package/dist/types/sdk/authentication-jwt-bearer/flow-siwe.d.ts.map +1 -0
- package/dist/types/sdk/authentication-jwt-bearer/flow-srp.d.ts +17 -0
- package/dist/types/sdk/authentication-jwt-bearer/flow-srp.d.ts.map +1 -0
- package/dist/types/sdk/authentication-jwt-bearer/services.d.ts +45 -0
- package/dist/types/sdk/authentication-jwt-bearer/services.d.ts.map +1 -0
- package/dist/types/sdk/authentication-jwt-bearer/types.d.ts +60 -0
- package/dist/types/sdk/authentication-jwt-bearer/types.d.ts.map +1 -0
- package/dist/types/sdk/authentication.d.ts +29 -0
- package/dist/types/sdk/authentication.d.ts.map +1 -0
- package/dist/types/sdk/encryption.d.ts +20 -0
- package/dist/types/sdk/encryption.d.ts.map +1 -0
- package/dist/types/sdk/env.d.ts +27 -0
- package/dist/types/sdk/env.d.ts.map +1 -0
- package/dist/types/sdk/errors.d.ts +19 -0
- package/dist/types/sdk/errors.d.ts.map +1 -0
- package/dist/types/sdk/index.d.ts +7 -0
- package/dist/types/sdk/index.d.ts.map +1 -0
- package/dist/types/sdk/user-storage.d.ts +25 -0
- package/dist/types/sdk/user-storage.d.ts.map +1 -0
- package/dist/types/sdk/utils/eip-6963-metamask-provider.d.ts +25 -0
- package/dist/types/sdk/utils/eip-6963-metamask-provider.d.ts.map +1 -0
- package/dist/types/sdk/utils/messaging-signing-snap-requests.d.ts +33 -0
- package/dist/types/sdk/utils/messaging-signing-snap-requests.d.ts.map +1 -0
- package/package.json +68 -0
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to this project will be documented in this file.
|
|
4
|
+
|
|
5
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
|
+
|
|
8
|
+
## [Unreleased]
|
|
9
|
+
|
|
10
|
+
[Unreleased]: https://github.com/MetaMask/core/
|
package/LICENSE
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2024 MetaMask
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
package/README.md
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# `@metamask/profile-sync-controller`
|
|
2
|
+
|
|
3
|
+
The profile sync controller 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
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
`yarn add @metamask/profile-sync-controller`
|
|
8
|
+
|
|
9
|
+
or
|
|
10
|
+
|
|
11
|
+
`npm install @metamask/profile-sync-controller`
|
|
12
|
+
|
|
13
|
+
## Contributing
|
|
14
|
+
|
|
15
|
+
This package is part of a monorepo. Instructions for contributing can be found in the [monorepo README](https://github.com/MetaMask/core#readme).
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
// src/sdk/authentication-jwt-bearer/types.ts
|
|
2
|
+
var AuthType = /* @__PURE__ */ ((AuthType2) => {
|
|
3
|
+
AuthType2["SRP"] = "SRP";
|
|
4
|
+
AuthType2["SiWE"] = "SiWE";
|
|
5
|
+
return AuthType2;
|
|
6
|
+
})(AuthType || {});
|
|
7
|
+
|
|
8
|
+
export {
|
|
9
|
+
AuthType
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=chunk-2FZSWVHT.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
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"]}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import {
|
|
2
|
+
SIWE_LOGIN_URL,
|
|
3
|
+
authenticate,
|
|
4
|
+
authorizeOIDC,
|
|
5
|
+
getNonce
|
|
6
|
+
} from "./chunk-CYGZ4WLJ.mjs";
|
|
7
|
+
import {
|
|
8
|
+
ValidationError
|
|
9
|
+
} from "./chunk-BHVT2QEA.mjs";
|
|
10
|
+
import {
|
|
11
|
+
SESSION_LIFETIME_MS
|
|
12
|
+
} from "./chunk-KKRIOEXD.mjs";
|
|
13
|
+
import {
|
|
14
|
+
__privateAdd,
|
|
15
|
+
__privateGet,
|
|
16
|
+
__privateMethod,
|
|
17
|
+
__privateSet
|
|
18
|
+
} from "./chunk-XUI43LEZ.mjs";
|
|
19
|
+
|
|
20
|
+
// src/sdk/authentication-jwt-bearer/flow-siwe.ts
|
|
21
|
+
import { SiweMessage } from "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
|
+
__privateAdd(this, _getAuthSession);
|
|
26
|
+
__privateAdd(this, _login);
|
|
27
|
+
__privateAdd(this, _createSiWELoginRawMessage);
|
|
28
|
+
__privateAdd(this, _assertSigner);
|
|
29
|
+
__privateAdd(this, _config, void 0);
|
|
30
|
+
__privateAdd(this, _options, void 0);
|
|
31
|
+
__privateAdd(this, _signer, void 0);
|
|
32
|
+
__privateSet(this, _config, config);
|
|
33
|
+
__privateSet(this, _options, options);
|
|
34
|
+
}
|
|
35
|
+
async getAccessToken() {
|
|
36
|
+
const session = await __privateMethod(this, _getAuthSession, getAuthSession_fn).call(this);
|
|
37
|
+
if (session) {
|
|
38
|
+
return session.token.accessToken;
|
|
39
|
+
}
|
|
40
|
+
const loginResponse = await __privateMethod(this, _login, login_fn).call(this);
|
|
41
|
+
return loginResponse.token.accessToken;
|
|
42
|
+
}
|
|
43
|
+
async getUserProfile() {
|
|
44
|
+
const session = await __privateMethod(this, _getAuthSession, getAuthSession_fn).call(this);
|
|
45
|
+
if (session) {
|
|
46
|
+
return session.profile;
|
|
47
|
+
}
|
|
48
|
+
const loginResponse = await __privateMethod(this, _login, login_fn).call(this);
|
|
49
|
+
return loginResponse.profile;
|
|
50
|
+
}
|
|
51
|
+
async getIdentifier() {
|
|
52
|
+
__privateMethod(this, _assertSigner, assertSigner_fn).call(this, __privateGet(this, _signer));
|
|
53
|
+
return __privateGet(this, _signer).address;
|
|
54
|
+
}
|
|
55
|
+
async signMessage(message) {
|
|
56
|
+
__privateMethod(this, _assertSigner, assertSigner_fn).call(this, __privateGet(this, _signer));
|
|
57
|
+
return await __privateGet(this, _signer).signMessage(message);
|
|
58
|
+
}
|
|
59
|
+
prepare(signer) {
|
|
60
|
+
__privateSet(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 __privateGet(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 < SESSION_LIFETIME_MS) {
|
|
75
|
+
return auth;
|
|
76
|
+
}
|
|
77
|
+
return null;
|
|
78
|
+
};
|
|
79
|
+
_login = new WeakSet();
|
|
80
|
+
login_fn = async function() {
|
|
81
|
+
__privateMethod(this, _assertSigner, assertSigner_fn).call(this, __privateGet(this, _signer));
|
|
82
|
+
const address = await this.getIdentifier();
|
|
83
|
+
const nonceRes = await getNonce(address, __privateGet(this, _config).env);
|
|
84
|
+
const rawMessage = __privateMethod(this, _createSiWELoginRawMessage, createSiWELoginRawMessage_fn).call(this, nonceRes.nonce);
|
|
85
|
+
const signature = await this.signMessage(rawMessage);
|
|
86
|
+
const authResponse = await authenticate(
|
|
87
|
+
rawMessage,
|
|
88
|
+
signature,
|
|
89
|
+
__privateGet(this, _config).type,
|
|
90
|
+
__privateGet(this, _config).env
|
|
91
|
+
);
|
|
92
|
+
const tokenResponse = await authorizeOIDC(
|
|
93
|
+
authResponse.token,
|
|
94
|
+
__privateGet(this, _config).env
|
|
95
|
+
);
|
|
96
|
+
const result = {
|
|
97
|
+
profile: authResponse.profile,
|
|
98
|
+
token: tokenResponse
|
|
99
|
+
};
|
|
100
|
+
await __privateGet(this, _options).storage.setLoginResponse(result);
|
|
101
|
+
return result;
|
|
102
|
+
};
|
|
103
|
+
_createSiWELoginRawMessage = new WeakSet();
|
|
104
|
+
createSiWELoginRawMessage_fn = function(nonce) {
|
|
105
|
+
__privateMethod(this, _assertSigner, assertSigner_fn).call(this, __privateGet(this, _signer));
|
|
106
|
+
return new SiweMessage({
|
|
107
|
+
domain: __privateGet(this, _signer)?.domain,
|
|
108
|
+
address: __privateGet(this, _signer)?.address,
|
|
109
|
+
uri: SIWE_LOGIN_URL(__privateGet(this, _config).env),
|
|
110
|
+
version: "1",
|
|
111
|
+
chainId: __privateGet(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 ValidationError(`you must call 'prepare()' before logging in`);
|
|
120
|
+
}
|
|
121
|
+
};
|
|
122
|
+
|
|
123
|
+
export {
|
|
124
|
+
SIWEJwtBearerAuth
|
|
125
|
+
};
|
|
126
|
+
//# sourceMappingURL=chunk-4NGEEDGV.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
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":[]}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
// src/sdk/utils/messaging-signing-snap-requests.ts
|
|
2
|
+
var SNAP_ORIGIN = "npm:@metamask/message-signing-snap";
|
|
3
|
+
var foundSnap = (snap) => snap.id === SNAP_ORIGIN;
|
|
4
|
+
async function connectSnap(provider) {
|
|
5
|
+
const result = await provider.request({
|
|
6
|
+
method: "wallet_requestSnaps",
|
|
7
|
+
params: {
|
|
8
|
+
[SNAP_ORIGIN]: {}
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
return result;
|
|
12
|
+
}
|
|
13
|
+
async function getSnaps(provider) {
|
|
14
|
+
const result = await provider.request({
|
|
15
|
+
method: "wallet_getSnaps"
|
|
16
|
+
});
|
|
17
|
+
return result;
|
|
18
|
+
}
|
|
19
|
+
async function getSnap(provider) {
|
|
20
|
+
try {
|
|
21
|
+
const snaps = await getSnaps(provider);
|
|
22
|
+
return Object.values(snaps ?? {}).find((snap) => foundSnap(snap));
|
|
23
|
+
} catch (e) {
|
|
24
|
+
console.error("Failed to obtain installed snap", e);
|
|
25
|
+
return void 0;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
var MESSAGE_SIGNING_SNAP = {
|
|
29
|
+
async getPublicKey(provider) {
|
|
30
|
+
const publicKey = await provider.request({
|
|
31
|
+
method: "wallet_invokeSnap",
|
|
32
|
+
params: { snapId: SNAP_ORIGIN, request: { method: "getPublicKey" } }
|
|
33
|
+
});
|
|
34
|
+
return publicKey;
|
|
35
|
+
},
|
|
36
|
+
async signMessage(provider, message) {
|
|
37
|
+
const signedMessage = await provider?.request({
|
|
38
|
+
method: "wallet_invokeSnap",
|
|
39
|
+
params: {
|
|
40
|
+
snapId: SNAP_ORIGIN,
|
|
41
|
+
request: { method: "signMessage", params: { message } }
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
return signedMessage;
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
export {
|
|
49
|
+
SNAP_ORIGIN,
|
|
50
|
+
connectSnap,
|
|
51
|
+
getSnaps,
|
|
52
|
+
getSnap,
|
|
53
|
+
MESSAGE_SIGNING_SNAP
|
|
54
|
+
};
|
|
55
|
+
//# sourceMappingURL=chunk-5EBUFNAN.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/sdk/utils/messaging-signing-snap-requests.ts"],"sourcesContent":["import type { Eip1193Provider } from 'ethers';\n\nexport type Snap = {\n permissionName: string;\n id: string;\n version: string;\n initialPermissions: Record<string, unknown>;\n};\nexport type GetSnapsResponse = Record<string, Snap>;\n\nexport const SNAP_ORIGIN = 'npm:@metamask/message-signing-snap';\n\nconst foundSnap = (snap: Snap) => snap.id === SNAP_ORIGIN;\n\n/**\n * Requests Connection to the Message Signing Snap\n *\n * @param provider - MetaMask Wallet Provider\n * @returns snap connect result\n */\nexport async function connectSnap(provider: Eip1193Provider): Promise<string> {\n const result: string = await provider.request({\n method: 'wallet_requestSnaps',\n params: {\n [SNAP_ORIGIN]: {},\n },\n });\n\n return result;\n}\n\n/**\n * Gets Snaps from a MetaMask Wallet\n *\n * @param provider - MetaMask Wallet Provider\n * @returns All currently installed snaps.\n */\nexport async function getSnaps(\n provider: Eip1193Provider,\n): Promise<GetSnapsResponse> {\n const result: GetSnapsResponse = await provider.request({\n method: 'wallet_getSnaps',\n });\n\n return result;\n}\n\n/**\n * Will return the message signing snap if installed\n * @param provider - MetaMask Wallet Provider\n */\nexport async function getSnap(\n provider: Eip1193Provider,\n): Promise<Snap | undefined> {\n try {\n const snaps = await getSnaps(provider);\n return Object.values(snaps ?? {}).find((snap) => foundSnap(snap));\n } catch (e) {\n console.error('Failed to obtain installed snap', e);\n return undefined;\n }\n}\n\nexport const MESSAGE_SIGNING_SNAP = {\n async getPublicKey(provider: Eip1193Provider) {\n const publicKey: string = await provider.request({\n method: 'wallet_invokeSnap',\n params: { snapId: SNAP_ORIGIN, request: { method: 'getPublicKey' } },\n });\n\n return publicKey;\n },\n\n async signMessage(provider: Eip1193Provider, message: `metamask:${string}`) {\n const signedMessage: string = await provider?.request({\n method: 'wallet_invokeSnap',\n params: {\n snapId: SNAP_ORIGIN,\n request: { method: 'signMessage', params: { message } },\n },\n });\n\n return signedMessage;\n },\n};\n"],"mappings":";AAUO,IAAM,cAAc;AAE3B,IAAM,YAAY,CAAC,SAAe,KAAK,OAAO;AAQ9C,eAAsB,YAAY,UAA4C;AAC5E,QAAM,SAAiB,MAAM,SAAS,QAAQ;AAAA,IAC5C,QAAQ;AAAA,IACR,QAAQ;AAAA,MACN,CAAC,WAAW,GAAG,CAAC;AAAA,IAClB;AAAA,EACF,CAAC;AAED,SAAO;AACT;AAQA,eAAsB,SACpB,UAC2B;AAC3B,QAAM,SAA2B,MAAM,SAAS,QAAQ;AAAA,IACtD,QAAQ;AAAA,EACV,CAAC;AAED,SAAO;AACT;AAMA,eAAsB,QACpB,UAC2B;AAC3B,MAAI;AACF,UAAM,QAAQ,MAAM,SAAS,QAAQ;AACrC,WAAO,OAAO,OAAO,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,SAAS,UAAU,IAAI,CAAC;AAAA,EAClE,SAAS,GAAG;AACV,YAAQ,MAAM,mCAAmC,CAAC;AAClD,WAAO;AAAA,EACT;AACF;AAEO,IAAM,uBAAuB;AAAA,EAClC,MAAM,aAAa,UAA2B;AAC5C,UAAM,YAAoB,MAAM,SAAS,QAAQ;AAAA,MAC/C,QAAQ;AAAA,MACR,QAAQ,EAAE,QAAQ,aAAa,SAAS,EAAE,QAAQ,eAAe,EAAE;AAAA,IACrE,CAAC;AAED,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,YAAY,UAA2B,SAA+B;AAC1E,UAAM,gBAAwB,MAAM,UAAU,QAAQ;AAAA,MACpD,QAAQ;AAAA,MACR,QAAQ;AAAA,QACN,QAAQ;AAAA,QACR,SAAS,EAAE,QAAQ,eAAe,QAAQ,EAAE,QAAQ,EAAE;AAAA,MACxD;AAAA,IACF,CAAC;AAED,WAAO;AAAA,EACT;AACF;","names":[]}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
// src/sdk/utils/eip-6963-metamask-provider.ts
|
|
2
|
+
var metamaskClientsRdns = {
|
|
3
|
+
main: "io.metamask",
|
|
4
|
+
flask: "io.metamask.flask",
|
|
5
|
+
institutional: "io.metamask.mmi"
|
|
6
|
+
};
|
|
7
|
+
var providerCache = {};
|
|
8
|
+
function getMetaMaskProviderEIP6963(type = "any") {
|
|
9
|
+
return new Promise((res) => {
|
|
10
|
+
if (type !== "any" && metamaskClientsRdns[type] === void 0) {
|
|
11
|
+
res(null);
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
14
|
+
const cachedProvider = providerCache[type];
|
|
15
|
+
if (cachedProvider) {
|
|
16
|
+
res(cachedProvider);
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
const providers = [];
|
|
20
|
+
const handleProviderEvent = (event) => {
|
|
21
|
+
const typedEvent = event;
|
|
22
|
+
const providerDetail = typedEvent?.detail;
|
|
23
|
+
if (providerDetail?.provider && providerDetail?.info?.rdns) {
|
|
24
|
+
providers.push({
|
|
25
|
+
rdns: providerDetail?.info?.rdns,
|
|
26
|
+
provider: providerDetail?.provider
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
window.addEventListener("eip6963:announceProvider", handleProviderEvent);
|
|
31
|
+
window.dispatchEvent(new Event("eip6963:requestProvider"));
|
|
32
|
+
setTimeout(() => {
|
|
33
|
+
window.removeEventListener(
|
|
34
|
+
"eip6963:announceProvider",
|
|
35
|
+
handleProviderEvent
|
|
36
|
+
);
|
|
37
|
+
let provider;
|
|
38
|
+
if (type === "any") {
|
|
39
|
+
const metamaskClients = Object.values(metamaskClientsRdns);
|
|
40
|
+
provider = providers.find((p) => metamaskClients.includes(p.rdns))?.provider ?? null;
|
|
41
|
+
} else {
|
|
42
|
+
const metamaskRdns = metamaskClientsRdns[type];
|
|
43
|
+
provider = providers.find((p) => p.rdns === metamaskRdns)?.provider ?? null;
|
|
44
|
+
}
|
|
45
|
+
if (provider) {
|
|
46
|
+
providerCache[type] = provider;
|
|
47
|
+
}
|
|
48
|
+
return res(provider);
|
|
49
|
+
}, 100);
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
export {
|
|
54
|
+
metamaskClientsRdns,
|
|
55
|
+
getMetaMaskProviderEIP6963
|
|
56
|
+
};
|
|
57
|
+
//# sourceMappingURL=chunk-5XSXZTED.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/sdk/utils/eip-6963-metamask-provider.ts"],"sourcesContent":["import type { Eip1193Provider } from 'ethers';\n\n// We can isolate and create a metamask function/closure\nexport type AnnounceProviderEventDetail = {\n info?: { rdns?: string };\n provider?: Eip1193Provider;\n};\nexport type AnnounceProviderEvent = CustomEvent<AnnounceProviderEventDetail>;\n\nexport const metamaskClientsRdns = {\n main: 'io.metamask',\n flask: 'io.metamask.flask',\n institutional: 'io.metamask.mmi',\n};\n\nexport type MetamaskClientRdnsKey = keyof typeof metamaskClientsRdns;\n\ntype MetaMaskClientType = 'any' | MetamaskClientRdnsKey;\n\n// Cache, as when the function is recalled, we can reuse instead of continue waiting\nconst providerCache: Partial<Record<MetaMaskClientType, Eip1193Provider>> = {};\n\n/**\n * This uses EIP6963 to find all metamask accounts and returns the first matching provider\n * the consumer requests (main, flask, institutional, or any)\n *\n * @param type - the MetaMask Wallet type (main, flask, institutional, or any)\n * @returns a ethers provider so you can make requests to that specific wallet\n */\nexport function getMetaMaskProviderEIP6963(\n type: MetaMaskClientType = 'any',\n): Promise<Eip1193Provider | null> {\n return new Promise<Eip1193Provider | null>((res) => {\n if (type !== 'any' && metamaskClientsRdns[type] === undefined) {\n res(null);\n return;\n }\n\n const cachedProvider = providerCache[type];\n if (cachedProvider) {\n res(cachedProvider);\n return;\n }\n\n const providers: { rdns: string; provider: Eip1193Provider }[] = [];\n\n const handleProviderEvent = (event: unknown) => {\n const typedEvent = event as CustomEvent<AnnounceProviderEventDetail>;\n const providerDetail = typedEvent?.detail;\n if (providerDetail?.provider && providerDetail?.info?.rdns) {\n providers.push({\n rdns: providerDetail?.info?.rdns,\n provider: providerDetail?.provider,\n });\n }\n };\n\n window.addEventListener('eip6963:announceProvider', handleProviderEvent);\n window.dispatchEvent(new Event('eip6963:requestProvider'));\n\n /**\n * It may take some time for the events to be emitted from the different wallets.\n * So waiting a small period of time before we use the collected events.\n */\n setTimeout(() => {\n // remove attached listener\n window.removeEventListener(\n 'eip6963:announceProvider',\n handleProviderEvent,\n );\n\n let provider: Eip1193Provider | null;\n if (type === 'any') {\n // return the first MM client we find\n const metamaskClients = Object.values(metamaskClientsRdns);\n provider =\n providers.find((p) => metamaskClients.includes(p.rdns))?.provider ??\n null;\n } else {\n const metamaskRdns = metamaskClientsRdns[type];\n provider =\n providers.find((p) => p.rdns === metamaskRdns)?.provider ?? null;\n }\n\n if (provider) {\n providerCache[type] = provider;\n }\n return res(provider);\n }, 100);\n });\n}\n"],"mappings":";AASO,IAAM,sBAAsB;AAAA,EACjC,MAAM;AAAA,EACN,OAAO;AAAA,EACP,eAAe;AACjB;AAOA,IAAM,gBAAsE,CAAC;AAStE,SAAS,2BACd,OAA2B,OACM;AACjC,SAAO,IAAI,QAAgC,CAAC,QAAQ;AAClD,QAAI,SAAS,SAAS,oBAAoB,IAAI,MAAM,QAAW;AAC7D,UAAI,IAAI;AACR;AAAA,IACF;AAEA,UAAM,iBAAiB,cAAc,IAAI;AACzC,QAAI,gBAAgB;AAClB,UAAI,cAAc;AAClB;AAAA,IACF;AAEA,UAAM,YAA2D,CAAC;AAElE,UAAM,sBAAsB,CAAC,UAAmB;AAC9C,YAAM,aAAa;AACnB,YAAM,iBAAiB,YAAY;AACnC,UAAI,gBAAgB,YAAY,gBAAgB,MAAM,MAAM;AAC1D,kBAAU,KAAK;AAAA,UACb,MAAM,gBAAgB,MAAM;AAAA,UAC5B,UAAU,gBAAgB;AAAA,QAC5B,CAAC;AAAA,MACH;AAAA,IACF;AAEA,WAAO,iBAAiB,4BAA4B,mBAAmB;AACvE,WAAO,cAAc,IAAI,MAAM,yBAAyB,CAAC;AAMzD,eAAW,MAAM;AAEf,aAAO;AAAA,QACL;AAAA,QACA;AAAA,MACF;AAEA,UAAI;AACJ,UAAI,SAAS,OAAO;AAElB,cAAM,kBAAkB,OAAO,OAAO,mBAAmB;AACzD,mBACE,UAAU,KAAK,CAAC,MAAM,gBAAgB,SAAS,EAAE,IAAI,CAAC,GAAG,YACzD;AAAA,MACJ,OAAO;AACL,cAAM,eAAe,oBAAoB,IAAI;AAC7C,mBACE,UAAU,KAAK,CAAC,MAAM,EAAE,SAAS,YAAY,GAAG,YAAY;AAAA,MAChE;AAEA,UAAI,UAAU;AACZ,sBAAc,IAAI,IAAI;AAAA,MACxB;AACA,aAAO,IAAI,QAAQ;AAAA,IACrB,GAAG,GAAG;AAAA,EACR,CAAC;AACH;","names":[]}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
var _chunkVZXD5DCQjs = require('./chunk-VZXD5DCQ.js');
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
var _chunkKHFPE566js = require('./chunk-KHFPE566.js');
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
var _chunkGQLHSQGZjs = require('./chunk-GQLHSQGZ.js');
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
var _chunkZ4BLTVTBjs = require('./chunk-Z4BLTVTB.js');
|
|
17
|
+
|
|
18
|
+
// src/sdk/user-storage.ts
|
|
19
|
+
var STORAGE_URL = (env, feature, entry) => `${_chunkKHFPE566js.getEnvUrls.call(void 0, env).userStorageApiUrl}/api/v1/userstorage/${feature}/${entry}`;
|
|
20
|
+
var _upsertUserStorage, upsertUserStorage_fn, _getUserStorage, getUserStorage_fn, _createEntryKey, createEntryKey_fn, _getAuthorizationHeader, getAuthorizationHeader_fn;
|
|
21
|
+
var UserStorage = class {
|
|
22
|
+
constructor(config, options) {
|
|
23
|
+
_chunkZ4BLTVTBjs.__privateAdd.call(void 0, this, _upsertUserStorage);
|
|
24
|
+
_chunkZ4BLTVTBjs.__privateAdd.call(void 0, this, _getUserStorage);
|
|
25
|
+
_chunkZ4BLTVTBjs.__privateAdd.call(void 0, this, _createEntryKey);
|
|
26
|
+
_chunkZ4BLTVTBjs.__privateAdd.call(void 0, this, _getAuthorizationHeader);
|
|
27
|
+
this.env = config.env;
|
|
28
|
+
this.config = config;
|
|
29
|
+
this.options = options;
|
|
30
|
+
}
|
|
31
|
+
async setItem(feature, key, value) {
|
|
32
|
+
if (!feature.trim() || !key.trim()) {
|
|
33
|
+
throw new (0, _chunkGQLHSQGZjs.ValidationError)("feature or key cannot be empty strings");
|
|
34
|
+
}
|
|
35
|
+
await _chunkZ4BLTVTBjs.__privateMethod.call(void 0, this, _upsertUserStorage, upsertUserStorage_fn).call(this, feature, key, value);
|
|
36
|
+
}
|
|
37
|
+
async getItem(feature, key) {
|
|
38
|
+
if (!feature.trim() || !key.trim()) {
|
|
39
|
+
throw new (0, _chunkGQLHSQGZjs.ValidationError)("feature or key cannot be empty strings");
|
|
40
|
+
}
|
|
41
|
+
return _chunkZ4BLTVTBjs.__privateMethod.call(void 0, this, _getUserStorage, getUserStorage_fn).call(this, feature, key);
|
|
42
|
+
}
|
|
43
|
+
async getStorageKey() {
|
|
44
|
+
const storageKey = await this.options.storage?.getStorageKey();
|
|
45
|
+
if (storageKey) {
|
|
46
|
+
return storageKey;
|
|
47
|
+
}
|
|
48
|
+
const userProfile = await this.config.auth.getUserProfile();
|
|
49
|
+
const storageKeySignature = await this.config.auth.signMessage(
|
|
50
|
+
`metamask:${userProfile.profileId}`
|
|
51
|
+
);
|
|
52
|
+
const hashedStorageKeySignature = _chunkVZXD5DCQjs.createSHA256Hash.call(void 0, storageKeySignature);
|
|
53
|
+
await this.options.storage?.setStorageKey(hashedStorageKeySignature);
|
|
54
|
+
return hashedStorageKeySignature;
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
_upsertUserStorage = new WeakSet();
|
|
58
|
+
upsertUserStorage_fn = async function(feature, key, data) {
|
|
59
|
+
try {
|
|
60
|
+
const headers = await _chunkZ4BLTVTBjs.__privateMethod.call(void 0, this, _getAuthorizationHeader, getAuthorizationHeader_fn).call(this);
|
|
61
|
+
const storageKey = await this.getStorageKey();
|
|
62
|
+
const encryptedData = _chunkVZXD5DCQjs.encryption_default.encryptString(data, storageKey);
|
|
63
|
+
const url = new URL(
|
|
64
|
+
STORAGE_URL(this.env, feature, _chunkZ4BLTVTBjs.__privateMethod.call(void 0, this, _createEntryKey, createEntryKey_fn).call(this, key, storageKey))
|
|
65
|
+
);
|
|
66
|
+
const response = await fetch(url.toString(), {
|
|
67
|
+
method: "PUT",
|
|
68
|
+
headers: {
|
|
69
|
+
"Content-Type": "application/json",
|
|
70
|
+
...headers
|
|
71
|
+
},
|
|
72
|
+
body: JSON.stringify({ data: encryptedData })
|
|
73
|
+
});
|
|
74
|
+
if (!response.ok) {
|
|
75
|
+
const responseBody = await response.json().catch(() => ({
|
|
76
|
+
message: "unknown",
|
|
77
|
+
error: "unknown"
|
|
78
|
+
}));
|
|
79
|
+
throw new Error(
|
|
80
|
+
`HTTP error message: ${responseBody.message}, error: ${responseBody.error}`
|
|
81
|
+
);
|
|
82
|
+
}
|
|
83
|
+
} catch (e) {
|
|
84
|
+
const errorMessage = e instanceof Error ? e.message : JSON.stringify(e ?? "");
|
|
85
|
+
throw new (0, _chunkGQLHSQGZjs.UserStorageError)(
|
|
86
|
+
`failed to upsert user storage for feature '${feature}' and key '${key}'. ${errorMessage}`
|
|
87
|
+
);
|
|
88
|
+
}
|
|
89
|
+
};
|
|
90
|
+
_getUserStorage = new WeakSet();
|
|
91
|
+
getUserStorage_fn = async function(feature, key) {
|
|
92
|
+
try {
|
|
93
|
+
const headers = await _chunkZ4BLTVTBjs.__privateMethod.call(void 0, this, _getAuthorizationHeader, getAuthorizationHeader_fn).call(this);
|
|
94
|
+
const storageKey = await this.getStorageKey();
|
|
95
|
+
const url = new URL(
|
|
96
|
+
STORAGE_URL(this.env, feature, _chunkZ4BLTVTBjs.__privateMethod.call(void 0, this, _createEntryKey, createEntryKey_fn).call(this, key, storageKey))
|
|
97
|
+
);
|
|
98
|
+
const response = await fetch(url.toString(), {
|
|
99
|
+
headers: {
|
|
100
|
+
"Content-Type": "application/json",
|
|
101
|
+
...headers
|
|
102
|
+
}
|
|
103
|
+
});
|
|
104
|
+
if (response.status === 404) {
|
|
105
|
+
throw new (0, _chunkGQLHSQGZjs.NotFoundError)(
|
|
106
|
+
`feature/key set not found for feature '${feature}' and key '${key}'.`
|
|
107
|
+
);
|
|
108
|
+
}
|
|
109
|
+
if (!response.ok) {
|
|
110
|
+
const responseBody = await response.json();
|
|
111
|
+
throw new Error(
|
|
112
|
+
`HTTP error message: ${responseBody.message}, error: ${responseBody.error}`
|
|
113
|
+
);
|
|
114
|
+
}
|
|
115
|
+
const { Data: encryptedData } = await response.json();
|
|
116
|
+
return _chunkVZXD5DCQjs.encryption_default.decryptString(encryptedData, storageKey);
|
|
117
|
+
} catch (e) {
|
|
118
|
+
if (e instanceof _chunkGQLHSQGZjs.NotFoundError) {
|
|
119
|
+
throw e;
|
|
120
|
+
}
|
|
121
|
+
const errorMessage = e instanceof Error ? e.message : JSON.stringify(e ?? "");
|
|
122
|
+
throw new (0, _chunkGQLHSQGZjs.UserStorageError)(
|
|
123
|
+
`failed to get user storage for feature '${feature}' and key '${key}'. ${errorMessage}`
|
|
124
|
+
);
|
|
125
|
+
}
|
|
126
|
+
};
|
|
127
|
+
_createEntryKey = new WeakSet();
|
|
128
|
+
createEntryKey_fn = function(key, storageKey) {
|
|
129
|
+
const hashedKey = _chunkVZXD5DCQjs.createSHA256Hash.call(void 0, key + storageKey);
|
|
130
|
+
return hashedKey;
|
|
131
|
+
};
|
|
132
|
+
_getAuthorizationHeader = new WeakSet();
|
|
133
|
+
getAuthorizationHeader_fn = async function() {
|
|
134
|
+
const accessToken = await this.config.auth.getAccessToken();
|
|
135
|
+
return { Authorization: `Bearer ${accessToken}` };
|
|
136
|
+
};
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
exports.STORAGE_URL = STORAGE_URL; exports.UserStorage = UserStorage;
|
|
142
|
+
//# sourceMappingURL=chunk-6X6I3HZU.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 async #getAuthorizationHeader(): Promise<{ Authorization: string }> {\n const accessToken = await this.config.auth.getAccessToken();\n return { Authorization: `Bearer ${accessToken}` };\n }\n}\n"]}
|
|
@@ -0,0 +1,7 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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"]}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
// src/sdk/errors.ts
|
|
2
|
+
var NonceRetrievalError = class extends Error {
|
|
3
|
+
constructor(message) {
|
|
4
|
+
super(message);
|
|
5
|
+
this.name = "NonceRetrievalError";
|
|
6
|
+
}
|
|
7
|
+
};
|
|
8
|
+
var SignInError = class extends Error {
|
|
9
|
+
constructor(message) {
|
|
10
|
+
super(message);
|
|
11
|
+
this.name = "SignInError";
|
|
12
|
+
}
|
|
13
|
+
};
|
|
14
|
+
var UserStorageError = class extends Error {
|
|
15
|
+
constructor(message) {
|
|
16
|
+
super(message);
|
|
17
|
+
this.name = "UserStorageError";
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
var ValidationError = class extends Error {
|
|
21
|
+
constructor(message) {
|
|
22
|
+
super(message);
|
|
23
|
+
this.name = "ValidationError";
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
var UnsupportedAuthTypeError = class extends Error {
|
|
27
|
+
constructor(message) {
|
|
28
|
+
super(message);
|
|
29
|
+
this.name = "UnsupportedAuthTypeError";
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
var NotFoundError = class extends Error {
|
|
33
|
+
constructor(message) {
|
|
34
|
+
super(message);
|
|
35
|
+
this.name = "NotFoundError";
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
export {
|
|
40
|
+
NonceRetrievalError,
|
|
41
|
+
SignInError,
|
|
42
|
+
UserStorageError,
|
|
43
|
+
ValidationError,
|
|
44
|
+
UnsupportedAuthTypeError,
|
|
45
|
+
NotFoundError
|
|
46
|
+
};
|
|
47
|
+
//# sourceMappingURL=chunk-BHVT2QEA.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
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":[]}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true});// src/sdk/authentication-jwt-bearer/types.ts
|
|
2
|
+
var AuthType = /* @__PURE__ */ ((AuthType2) => {
|
|
3
|
+
AuthType2["SRP"] = "SRP";
|
|
4
|
+
AuthType2["SiWE"] = "SiWE";
|
|
5
|
+
return AuthType2;
|
|
6
|
+
})(AuthType || {});
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
exports.AuthType = AuthType;
|
|
11
|
+
//# sourceMappingURL=chunk-CFST6GWE.js.map
|
|
@@ -0,0 +1 @@
|
|
|
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"]}
|