@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
|
@@ -0,0 +1 @@
|
|
|
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"]}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
var _chunkNRH6O4QZjs = require('./chunk-NRH6O4QZ.js');
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
var _chunkRG4II6WHjs = require('./chunk-RG4II6WH.js');
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
var _chunkPQ5T4GHYjs = require('./chunk-PQ5T4GHY.js');
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
var _chunkGQLHSQGZjs = require('./chunk-GQLHSQGZ.js');
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
var _chunkBARZBXO7js = require('./chunk-BARZBXO7.js');
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
var _chunkZ4BLTVTBjs = require('./chunk-Z4BLTVTB.js');
|
|
24
|
+
|
|
25
|
+
// src/sdk/authentication-jwt-bearer/flow-srp.ts
|
|
26
|
+
var defaultEIP6963SigningOptions = {
|
|
27
|
+
getIdentifier: async () => {
|
|
28
|
+
const provider = await _chunkRG4II6WHjs.getMetaMaskProviderEIP6963.call(void 0, );
|
|
29
|
+
if (!provider) {
|
|
30
|
+
throw new (0, _chunkGQLHSQGZjs.ValidationError)("No MetaMask wallet connected");
|
|
31
|
+
}
|
|
32
|
+
return await _chunkPQ5T4GHYjs.MESSAGE_SIGNING_SNAP.getPublicKey(provider);
|
|
33
|
+
},
|
|
34
|
+
signMessage: async (message) => {
|
|
35
|
+
const provider = await _chunkRG4II6WHjs.getMetaMaskProviderEIP6963.call(void 0, );
|
|
36
|
+
if (!provider) {
|
|
37
|
+
throw new (0, _chunkGQLHSQGZjs.ValidationError)("No MetaMask wallet connected");
|
|
38
|
+
}
|
|
39
|
+
if (!message.startsWith("metamask:")) {
|
|
40
|
+
throw new (0, _chunkGQLHSQGZjs.ValidationError)('message must start with "metamask:"');
|
|
41
|
+
}
|
|
42
|
+
const formattedMessage = message;
|
|
43
|
+
return await _chunkPQ5T4GHYjs.MESSAGE_SIGNING_SNAP.signMessage(provider, formattedMessage);
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
var _config, _options, _getAuthSession, getAuthSession_fn, _login, login_fn, _createSrpLoginRawMessage, createSrpLoginRawMessage_fn;
|
|
47
|
+
var SRPJwtBearerAuth = class {
|
|
48
|
+
constructor(config, options) {
|
|
49
|
+
_chunkZ4BLTVTBjs.__privateAdd.call(void 0, this, _getAuthSession);
|
|
50
|
+
_chunkZ4BLTVTBjs.__privateAdd.call(void 0, this, _login);
|
|
51
|
+
_chunkZ4BLTVTBjs.__privateAdd.call(void 0, this, _createSrpLoginRawMessage);
|
|
52
|
+
_chunkZ4BLTVTBjs.__privateAdd.call(void 0, this, _config, void 0);
|
|
53
|
+
_chunkZ4BLTVTBjs.__privateAdd.call(void 0, this, _options, void 0);
|
|
54
|
+
_chunkZ4BLTVTBjs.__privateSet.call(void 0, this, _config, config);
|
|
55
|
+
_chunkZ4BLTVTBjs.__privateSet.call(void 0, this, _options, {
|
|
56
|
+
storage: options.storage,
|
|
57
|
+
signing: options.signing ?? defaultEIP6963SigningOptions
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
async getAccessToken() {
|
|
61
|
+
const session = await _chunkZ4BLTVTBjs.__privateMethod.call(void 0, this, _getAuthSession, getAuthSession_fn).call(this);
|
|
62
|
+
if (session) {
|
|
63
|
+
return session.token.accessToken;
|
|
64
|
+
}
|
|
65
|
+
const loginResponse = await _chunkZ4BLTVTBjs.__privateMethod.call(void 0, this, _login, login_fn).call(this);
|
|
66
|
+
return loginResponse.token.accessToken;
|
|
67
|
+
}
|
|
68
|
+
async getUserProfile() {
|
|
69
|
+
const session = await _chunkZ4BLTVTBjs.__privateMethod.call(void 0, this, _getAuthSession, getAuthSession_fn).call(this);
|
|
70
|
+
if (session) {
|
|
71
|
+
return session.profile;
|
|
72
|
+
}
|
|
73
|
+
const loginResponse = await _chunkZ4BLTVTBjs.__privateMethod.call(void 0, this, _login, login_fn).call(this);
|
|
74
|
+
return loginResponse.profile;
|
|
75
|
+
}
|
|
76
|
+
async getIdentifier() {
|
|
77
|
+
return await _chunkZ4BLTVTBjs.__privateGet.call(void 0, this, _options).signing.getIdentifier();
|
|
78
|
+
}
|
|
79
|
+
async signMessage(message) {
|
|
80
|
+
return await _chunkZ4BLTVTBjs.__privateGet.call(void 0, this, _options).signing.signMessage(message);
|
|
81
|
+
}
|
|
82
|
+
};
|
|
83
|
+
_config = new WeakMap();
|
|
84
|
+
_options = new WeakMap();
|
|
85
|
+
_getAuthSession = new WeakSet();
|
|
86
|
+
getAuthSession_fn = async function() {
|
|
87
|
+
const auth = await _chunkZ4BLTVTBjs.__privateGet.call(void 0, this, _options).storage.getLoginResponse();
|
|
88
|
+
if (!auth) {
|
|
89
|
+
return null;
|
|
90
|
+
}
|
|
91
|
+
const currentTime = Date.now();
|
|
92
|
+
const sessionAge = currentTime - auth.token.obtainedAt;
|
|
93
|
+
if (sessionAge < _chunkBARZBXO7js.SESSION_LIFETIME_MS) {
|
|
94
|
+
return auth;
|
|
95
|
+
}
|
|
96
|
+
return null;
|
|
97
|
+
};
|
|
98
|
+
_login = new WeakSet();
|
|
99
|
+
login_fn = async function() {
|
|
100
|
+
const address = await this.getIdentifier();
|
|
101
|
+
const nonceRes = await _chunkNRH6O4QZjs.getNonce.call(void 0, address, _chunkZ4BLTVTBjs.__privateGet.call(void 0, this, _config).env);
|
|
102
|
+
const publicKey = await _chunkZ4BLTVTBjs.__privateGet.call(void 0, this, _options).signing.getIdentifier();
|
|
103
|
+
const rawMessage = _chunkZ4BLTVTBjs.__privateMethod.call(void 0, this, _createSrpLoginRawMessage, createSrpLoginRawMessage_fn).call(this, nonceRes.nonce, publicKey);
|
|
104
|
+
const signature = await this.signMessage(rawMessage);
|
|
105
|
+
const authResponse = await _chunkNRH6O4QZjs.authenticate.call(void 0,
|
|
106
|
+
rawMessage,
|
|
107
|
+
signature,
|
|
108
|
+
_chunkZ4BLTVTBjs.__privateGet.call(void 0, this, _config).type,
|
|
109
|
+
_chunkZ4BLTVTBjs.__privateGet.call(void 0, this, _config).env
|
|
110
|
+
);
|
|
111
|
+
const tokenResponse = await _chunkNRH6O4QZjs.authorizeOIDC.call(void 0,
|
|
112
|
+
authResponse.token,
|
|
113
|
+
_chunkZ4BLTVTBjs.__privateGet.call(void 0, this, _config).env
|
|
114
|
+
);
|
|
115
|
+
const result = {
|
|
116
|
+
profile: authResponse.profile,
|
|
117
|
+
token: tokenResponse
|
|
118
|
+
};
|
|
119
|
+
await _chunkZ4BLTVTBjs.__privateGet.call(void 0, this, _options).storage.setLoginResponse(result);
|
|
120
|
+
return result;
|
|
121
|
+
};
|
|
122
|
+
_createSrpLoginRawMessage = new WeakSet();
|
|
123
|
+
createSrpLoginRawMessage_fn = function(nonce, publicKey) {
|
|
124
|
+
return `metamask:${nonce}:${publicKey}`;
|
|
125
|
+
};
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
|
|
129
|
+
exports.SRPJwtBearerAuth = SRPJwtBearerAuth;
|
|
130
|
+
//# sourceMappingURL=chunk-OF3TQWGX.js.map
|
|
@@ -0,0 +1 @@
|
|
|
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"]}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true});// 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
|
+
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
exports.SNAP_ORIGIN = SNAP_ORIGIN; exports.connectSnap = connectSnap; exports.getSnaps = getSnaps; exports.getSnap = getSnap; exports.MESSAGE_SIGNING_SNAP = MESSAGE_SIGNING_SNAP;
|
|
55
|
+
//# sourceMappingURL=chunk-PQ5T4GHY.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/sdk/utils/messaging-signing-snap-requests.ts"],"names":[],"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","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"]}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true});// 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
|
+
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
exports.metamaskClientsRdns = metamaskClientsRdns; exports.getMetaMaskProviderEIP6963 = getMetaMaskProviderEIP6963;
|
|
57
|
+
//# sourceMappingURL=chunk-RG4II6WH.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/sdk/utils/eip-6963-metamask-provider.ts"],"names":[],"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","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"]}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import {
|
|
2
|
+
__privateAdd,
|
|
3
|
+
__privateGet,
|
|
4
|
+
__privateMethod
|
|
5
|
+
} from "./chunk-XUI43LEZ.mjs";
|
|
6
|
+
|
|
7
|
+
// src/sdk/encryption.ts
|
|
8
|
+
import { gcm } from "@noble/ciphers/aes";
|
|
9
|
+
import { randomBytes } from "@noble/ciphers/webcrypto";
|
|
10
|
+
import { pbkdf2 } from "@noble/hashes/pbkdf2";
|
|
11
|
+
import { sha256 } from "@noble/hashes/sha256";
|
|
12
|
+
import { utf8ToBytes, concatBytes, bytesToHex } from "@noble/hashes/utils";
|
|
13
|
+
function byteArrayToBase64(byteArray) {
|
|
14
|
+
return Buffer.from(byteArray).toString("base64");
|
|
15
|
+
}
|
|
16
|
+
function base64ToByteArray(base64) {
|
|
17
|
+
return new Uint8Array(Buffer.from(base64, "base64"));
|
|
18
|
+
}
|
|
19
|
+
function bytesToUtf8(byteArray) {
|
|
20
|
+
const decoder = new TextDecoder("utf-8");
|
|
21
|
+
return decoder.decode(byteArray);
|
|
22
|
+
}
|
|
23
|
+
var _ALGORITHM_NONCE_SIZE, _ALGORITHM_KEY_SIZE, _PBKDF2_SALT_SIZE, _PBKDF2_ITERATIONS, _encryptStringV1, encryptStringV1_fn, _decryptStringV1, decryptStringV1_fn, _encrypt, encrypt_fn, _decrypt, decrypt_fn;
|
|
24
|
+
var EncryptorDecryptor = class {
|
|
25
|
+
constructor() {
|
|
26
|
+
__privateAdd(this, _encryptStringV1);
|
|
27
|
+
__privateAdd(this, _decryptStringV1);
|
|
28
|
+
__privateAdd(this, _encrypt);
|
|
29
|
+
__privateAdd(this, _decrypt);
|
|
30
|
+
__privateAdd(this, _ALGORITHM_NONCE_SIZE, 12);
|
|
31
|
+
// 12 bytes
|
|
32
|
+
__privateAdd(this, _ALGORITHM_KEY_SIZE, 16);
|
|
33
|
+
// 16 bytes
|
|
34
|
+
__privateAdd(this, _PBKDF2_SALT_SIZE, 16);
|
|
35
|
+
// 16 bytes
|
|
36
|
+
__privateAdd(this, _PBKDF2_ITERATIONS, 9e5);
|
|
37
|
+
}
|
|
38
|
+
encryptString(plaintext, password) {
|
|
39
|
+
try {
|
|
40
|
+
if (plaintext.trim().length === 0) {
|
|
41
|
+
throw new Error("No plain text provided");
|
|
42
|
+
}
|
|
43
|
+
return __privateMethod(this, _encryptStringV1, encryptStringV1_fn).call(this, plaintext, password);
|
|
44
|
+
} catch (e) {
|
|
45
|
+
const errorMessage = e instanceof Error ? e.message : String(e);
|
|
46
|
+
throw new Error(`Unable to encrypt string - ${errorMessage}`);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
decryptString(encryptedDataStr, password) {
|
|
50
|
+
try {
|
|
51
|
+
const encryptedData = JSON.parse(encryptedDataStr);
|
|
52
|
+
if (encryptedData.v === "1") {
|
|
53
|
+
return __privateMethod(this, _decryptStringV1, decryptStringV1_fn).call(this, encryptedData, password);
|
|
54
|
+
}
|
|
55
|
+
throw new Error(
|
|
56
|
+
`Unsupported encrypted data payload - ${JSON.stringify(encryptedData)}`
|
|
57
|
+
);
|
|
58
|
+
} catch (e) {
|
|
59
|
+
const errorMessage = e instanceof Error ? e.message : String(e);
|
|
60
|
+
throw new Error(`Unable to decrypt string - ${errorMessage}`);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
_ALGORITHM_NONCE_SIZE = new WeakMap();
|
|
65
|
+
_ALGORITHM_KEY_SIZE = new WeakMap();
|
|
66
|
+
_PBKDF2_SALT_SIZE = new WeakMap();
|
|
67
|
+
_PBKDF2_ITERATIONS = new WeakMap();
|
|
68
|
+
_encryptStringV1 = new WeakSet();
|
|
69
|
+
encryptStringV1_fn = function(plaintext, password) {
|
|
70
|
+
const salt = randomBytes(__privateGet(this, _PBKDF2_SALT_SIZE));
|
|
71
|
+
const key = pbkdf2(sha256, password, salt, {
|
|
72
|
+
c: __privateGet(this, _PBKDF2_ITERATIONS),
|
|
73
|
+
dkLen: __privateGet(this, _ALGORITHM_KEY_SIZE)
|
|
74
|
+
});
|
|
75
|
+
const plaintextRaw = utf8ToBytes(plaintext);
|
|
76
|
+
const ciphertextAndNonceAndSalt = concatBytes(
|
|
77
|
+
salt,
|
|
78
|
+
__privateMethod(this, _encrypt, encrypt_fn).call(this, plaintextRaw, key)
|
|
79
|
+
);
|
|
80
|
+
const encryptedData = byteArrayToBase64(ciphertextAndNonceAndSalt);
|
|
81
|
+
const encryptedPayload = {
|
|
82
|
+
v: "1",
|
|
83
|
+
d: encryptedData,
|
|
84
|
+
iterations: __privateGet(this, _PBKDF2_ITERATIONS)
|
|
85
|
+
};
|
|
86
|
+
return JSON.stringify(encryptedPayload);
|
|
87
|
+
};
|
|
88
|
+
_decryptStringV1 = new WeakSet();
|
|
89
|
+
decryptStringV1_fn = function(data, password) {
|
|
90
|
+
const { iterations, d: base64CiphertextAndNonceAndSalt } = data;
|
|
91
|
+
const ciphertextAndNonceAndSalt = base64ToByteArray(
|
|
92
|
+
base64CiphertextAndNonceAndSalt
|
|
93
|
+
);
|
|
94
|
+
const salt = ciphertextAndNonceAndSalt.slice(0, __privateGet(this, _PBKDF2_SALT_SIZE));
|
|
95
|
+
const ciphertextAndNonce = ciphertextAndNonceAndSalt.slice(
|
|
96
|
+
__privateGet(this, _PBKDF2_SALT_SIZE),
|
|
97
|
+
ciphertextAndNonceAndSalt.length
|
|
98
|
+
);
|
|
99
|
+
const key = pbkdf2(sha256, password, salt, {
|
|
100
|
+
c: iterations,
|
|
101
|
+
dkLen: __privateGet(this, _ALGORITHM_KEY_SIZE)
|
|
102
|
+
});
|
|
103
|
+
return bytesToUtf8(__privateMethod(this, _decrypt, decrypt_fn).call(this, ciphertextAndNonce, key));
|
|
104
|
+
};
|
|
105
|
+
_encrypt = new WeakSet();
|
|
106
|
+
encrypt_fn = function(plaintext, key) {
|
|
107
|
+
const nonce = randomBytes(__privateGet(this, _ALGORITHM_NONCE_SIZE));
|
|
108
|
+
const ciphertext = gcm(key, nonce).encrypt(plaintext);
|
|
109
|
+
return concatBytes(nonce, ciphertext);
|
|
110
|
+
};
|
|
111
|
+
_decrypt = new WeakSet();
|
|
112
|
+
decrypt_fn = function(ciphertextAndNonce, key) {
|
|
113
|
+
const nonce = ciphertextAndNonce.slice(0, __privateGet(this, _ALGORITHM_NONCE_SIZE));
|
|
114
|
+
const ciphertext = ciphertextAndNonce.slice(
|
|
115
|
+
__privateGet(this, _ALGORITHM_NONCE_SIZE),
|
|
116
|
+
ciphertextAndNonce.length
|
|
117
|
+
);
|
|
118
|
+
return gcm(key, nonce).decrypt(ciphertext);
|
|
119
|
+
};
|
|
120
|
+
var encryption = new EncryptorDecryptor();
|
|
121
|
+
var encryption_default = encryption;
|
|
122
|
+
function createSHA256Hash(data) {
|
|
123
|
+
const hashedData = sha256(data);
|
|
124
|
+
return bytesToHex(hashedData);
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
export {
|
|
128
|
+
encryption_default,
|
|
129
|
+
createSHA256Hash
|
|
130
|
+
};
|
|
131
|
+
//# sourceMappingURL=chunk-UMKBFFZ5.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
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":[]}
|
|
@@ -0,0 +1,126 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/sdk/authentication-jwt-bearer/flow-siwe.ts"],"names":[],"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","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"]}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
2
|
+
|
|
3
|
+
var _chunkUVJVONBFjs = require('./chunk-UVJVONBF.js');
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
var _chunkOF3TQWGXjs = require('./chunk-OF3TQWGX.js');
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
var _chunkGQLHSQGZjs = require('./chunk-GQLHSQGZ.js');
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
var _chunkZ4BLTVTBjs = require('./chunk-Z4BLTVTB.js');
|
|
16
|
+
|
|
17
|
+
// src/sdk/authentication.ts
|
|
18
|
+
var _type, _sdk, _assertSIWE, assertSIWE_fn;
|
|
19
|
+
var JwtBearerAuth = class {
|
|
20
|
+
constructor(...args) {
|
|
21
|
+
_chunkZ4BLTVTBjs.__privateAdd.call(void 0, this, _assertSIWE);
|
|
22
|
+
_chunkZ4BLTVTBjs.__privateAdd.call(void 0, this, _type, void 0);
|
|
23
|
+
_chunkZ4BLTVTBjs.__privateAdd.call(void 0, this, _sdk, void 0);
|
|
24
|
+
_chunkZ4BLTVTBjs.__privateSet.call(void 0, this, _type, args[0].type);
|
|
25
|
+
if (args[0].type === "SRP" /* SRP */) {
|
|
26
|
+
_chunkZ4BLTVTBjs.__privateSet.call(void 0, this, _sdk, new (0, _chunkOF3TQWGXjs.SRPJwtBearerAuth)(args[0], args[1]));
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
if (args[0].type === "SiWE" /* SiWE */) {
|
|
30
|
+
_chunkZ4BLTVTBjs.__privateSet.call(void 0, this, _sdk, new (0, _chunkUVJVONBFjs.SIWEJwtBearerAuth)(args[0], args[1]));
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
throw new (0, _chunkGQLHSQGZjs.UnsupportedAuthTypeError)("unsupported auth type");
|
|
34
|
+
}
|
|
35
|
+
async getAccessToken() {
|
|
36
|
+
return await _chunkZ4BLTVTBjs.__privateGet.call(void 0, this, _sdk).getAccessToken();
|
|
37
|
+
}
|
|
38
|
+
async getUserProfile() {
|
|
39
|
+
return await _chunkZ4BLTVTBjs.__privateGet.call(void 0, this, _sdk).getUserProfile();
|
|
40
|
+
}
|
|
41
|
+
async getIdentifier() {
|
|
42
|
+
return await _chunkZ4BLTVTBjs.__privateGet.call(void 0, this, _sdk).getIdentifier();
|
|
43
|
+
}
|
|
44
|
+
async signMessage(message) {
|
|
45
|
+
return await _chunkZ4BLTVTBjs.__privateGet.call(void 0, this, _sdk).signMessage(message);
|
|
46
|
+
}
|
|
47
|
+
prepare(signer) {
|
|
48
|
+
_chunkZ4BLTVTBjs.__privateMethod.call(void 0, this, _assertSIWE, assertSIWE_fn).call(this, _chunkZ4BLTVTBjs.__privateGet.call(void 0, this, _type), _chunkZ4BLTVTBjs.__privateGet.call(void 0, this, _sdk));
|
|
49
|
+
_chunkZ4BLTVTBjs.__privateGet.call(void 0, 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 (0, _chunkGQLHSQGZjs.UnsupportedAuthTypeError)(
|
|
60
|
+
"This method is only available via SIWE auth type"
|
|
61
|
+
);
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
exports.JwtBearerAuth = JwtBearerAuth;
|
|
67
|
+
//# sourceMappingURL=chunk-VHUU4HEY.js.map
|