@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,126 @@
|
|
|
1
|
+
import {
|
|
2
|
+
getEnvUrls,
|
|
3
|
+
getOidcClientId
|
|
4
|
+
} from "./chunk-WJRV2JCX.mjs";
|
|
5
|
+
import {
|
|
6
|
+
NonceRetrievalError,
|
|
7
|
+
SignInError,
|
|
8
|
+
ValidationError
|
|
9
|
+
} from "./chunk-BHVT2QEA.mjs";
|
|
10
|
+
|
|
11
|
+
// src/sdk/authentication-jwt-bearer/services.ts
|
|
12
|
+
var NONCE_URL = (env) => `${getEnvUrls(env).authApiUrl}/api/v2/nonce`;
|
|
13
|
+
var OIDC_TOKEN_URL = (env) => `${getEnvUrls(env).oidcApiUrl}/oauth2/token`;
|
|
14
|
+
var SRP_LOGIN_URL = (env) => `${getEnvUrls(env).authApiUrl}/api/v2/srp/login`;
|
|
15
|
+
var SIWE_LOGIN_URL = (env) => `${getEnvUrls(env).authApiUrl}/api/v2/siwe/login`;
|
|
16
|
+
var getAuthenticationUrl = (authType, env) => {
|
|
17
|
+
switch (authType) {
|
|
18
|
+
case "SRP" /* SRP */:
|
|
19
|
+
return SRP_LOGIN_URL(env);
|
|
20
|
+
case "SiWE" /* SiWE */:
|
|
21
|
+
return SIWE_LOGIN_URL(env);
|
|
22
|
+
default:
|
|
23
|
+
throw new ValidationError(
|
|
24
|
+
`Invalid AuthType: ${authType} - unable to create Auth URL`
|
|
25
|
+
);
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
async function getNonce(id, env) {
|
|
29
|
+
const nonceUrl = new URL(NONCE_URL(env));
|
|
30
|
+
nonceUrl.searchParams.set("identifier", id);
|
|
31
|
+
try {
|
|
32
|
+
const nonceResponse = await fetch(nonceUrl.toString());
|
|
33
|
+
if (!nonceResponse.ok) {
|
|
34
|
+
const responseBody = await nonceResponse.json();
|
|
35
|
+
throw new Error(
|
|
36
|
+
`HTTP error message: ${responseBody.message}, error: ${responseBody.error}`
|
|
37
|
+
);
|
|
38
|
+
}
|
|
39
|
+
const nonceJson = await nonceResponse.json();
|
|
40
|
+
return {
|
|
41
|
+
nonce: nonceJson.nonce,
|
|
42
|
+
identifier: nonceJson.identifier,
|
|
43
|
+
expiresIn: nonceJson.expires_in
|
|
44
|
+
};
|
|
45
|
+
} catch (e) {
|
|
46
|
+
const errorMessage = e instanceof Error ? e.message : JSON.stringify(e ?? "");
|
|
47
|
+
throw new NonceRetrievalError(`failed to generate nonce: ${errorMessage}`);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
async function authorizeOIDC(jwtToken, env) {
|
|
51
|
+
const grantType = "urn:ietf:params:oauth:grant-type:jwt-bearer";
|
|
52
|
+
const headers = new Headers({
|
|
53
|
+
"Content-Type": "application/x-www-form-urlencoded"
|
|
54
|
+
});
|
|
55
|
+
const urlEncodedBody = new URLSearchParams();
|
|
56
|
+
urlEncodedBody.append("grant_type", grantType);
|
|
57
|
+
urlEncodedBody.append("client_id", getOidcClientId(env));
|
|
58
|
+
urlEncodedBody.append("assertion", jwtToken);
|
|
59
|
+
try {
|
|
60
|
+
const response = await fetch(OIDC_TOKEN_URL(env), {
|
|
61
|
+
method: "POST",
|
|
62
|
+
headers,
|
|
63
|
+
body: urlEncodedBody.toString()
|
|
64
|
+
});
|
|
65
|
+
if (!response.ok) {
|
|
66
|
+
const responseBody = await response.json();
|
|
67
|
+
throw new Error(
|
|
68
|
+
`HTTP error: ${responseBody.error_description}, error code: ${responseBody.error}`
|
|
69
|
+
);
|
|
70
|
+
}
|
|
71
|
+
const accessTokenResponse = await response.json();
|
|
72
|
+
return {
|
|
73
|
+
accessToken: accessTokenResponse.access_token,
|
|
74
|
+
expiresIn: accessTokenResponse.expires_in,
|
|
75
|
+
obtainedAt: Date.now()
|
|
76
|
+
};
|
|
77
|
+
} catch (e) {
|
|
78
|
+
const errorMessage = e instanceof Error ? e.message : JSON.stringify(e ?? "");
|
|
79
|
+
throw new SignInError(`unable to get access token: ${errorMessage}`);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
async function authenticate(rawMessage, signature, authType, env) {
|
|
83
|
+
const authenticationUrl = getAuthenticationUrl(authType, env);
|
|
84
|
+
try {
|
|
85
|
+
const response = await fetch(authenticationUrl, {
|
|
86
|
+
method: "POST",
|
|
87
|
+
headers: {
|
|
88
|
+
"Content-Type": "application/json"
|
|
89
|
+
},
|
|
90
|
+
body: JSON.stringify({
|
|
91
|
+
signature,
|
|
92
|
+
raw_message: rawMessage
|
|
93
|
+
})
|
|
94
|
+
});
|
|
95
|
+
if (!response.ok) {
|
|
96
|
+
const responseBody = await response.json();
|
|
97
|
+
throw new Error(
|
|
98
|
+
`${authType} login HTTP error: ${responseBody.message}, error code: ${responseBody.error}`
|
|
99
|
+
);
|
|
100
|
+
}
|
|
101
|
+
const loginResponse = await response.json();
|
|
102
|
+
return {
|
|
103
|
+
token: loginResponse.token,
|
|
104
|
+
expiresIn: loginResponse.expires_in,
|
|
105
|
+
profile: {
|
|
106
|
+
identifierId: loginResponse.profile.identifier_id,
|
|
107
|
+
metaMetricsId: loginResponse.profile.metametrics_id,
|
|
108
|
+
profileId: loginResponse.profile.profile_id
|
|
109
|
+
}
|
|
110
|
+
};
|
|
111
|
+
} catch (e) {
|
|
112
|
+
const errorMessage = e instanceof Error ? e.message : JSON.stringify(e ?? "");
|
|
113
|
+
throw new SignInError(`unable to perform SRP login: ${errorMessage}`);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
export {
|
|
118
|
+
NONCE_URL,
|
|
119
|
+
OIDC_TOKEN_URL,
|
|
120
|
+
SRP_LOGIN_URL,
|
|
121
|
+
SIWE_LOGIN_URL,
|
|
122
|
+
getNonce,
|
|
123
|
+
authorizeOIDC,
|
|
124
|
+
authenticate
|
|
125
|
+
};
|
|
126
|
+
//# sourceMappingURL=chunk-CYGZ4WLJ.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/sdk/authentication-jwt-bearer/services.ts"],"sourcesContent":["import type { Env } from '../env';\nimport { getEnvUrls, getOidcClientId } from '../env';\nimport { NonceRetrievalError, SignInError, ValidationError } from '../errors';\nimport type { AccessToken, ErrorMessage, UserProfile } from './types';\nimport { AuthType } from './types';\n\nexport const NONCE_URL = (env: Env) =>\n `${getEnvUrls(env).authApiUrl}/api/v2/nonce`;\n\nexport const OIDC_TOKEN_URL = (env: Env) =>\n `${getEnvUrls(env).oidcApiUrl}/oauth2/token`;\n\nexport const SRP_LOGIN_URL = (env: Env) =>\n `${getEnvUrls(env).authApiUrl}/api/v2/srp/login`;\n\nexport const SIWE_LOGIN_URL = (env: Env) =>\n `${getEnvUrls(env).authApiUrl}/api/v2/siwe/login`;\n\nconst getAuthenticationUrl = (authType: AuthType, env: Env): string => {\n switch (authType) {\n case AuthType.SRP:\n return SRP_LOGIN_URL(env);\n case AuthType.SiWE:\n return SIWE_LOGIN_URL(env);\n /* istanbul ignore next */\n default:\n throw new ValidationError(\n `Invalid AuthType: ${authType as number} - unable to create Auth URL`,\n );\n }\n};\n\ntype NonceResponse = {\n nonce: string;\n identifier: string;\n expiresIn: number;\n};\n\n/**\n * Service to Get Nonce for JWT Bearer Flow\n *\n * @param id - identifier ID\n * @param env - server environment\n * @returns the nonce.\n */\nexport async function getNonce(id: string, env: Env): Promise<NonceResponse> {\n const nonceUrl = new URL(NONCE_URL(env));\n nonceUrl.searchParams.set('identifier', id);\n\n try {\n const nonceResponse = await fetch(nonceUrl.toString());\n if (!nonceResponse.ok) {\n const responseBody = (await nonceResponse.json()) as ErrorMessage;\n throw new Error(\n `HTTP error message: ${responseBody.message}, error: ${responseBody.error}`,\n );\n }\n\n const nonceJson = await nonceResponse.json();\n return {\n nonce: nonceJson.nonce,\n identifier: nonceJson.identifier,\n expiresIn: nonceJson.expires_in,\n };\n } catch (e) {\n /* istanbul ignore next */\n const errorMessage =\n e instanceof Error ? e.message : JSON.stringify(e ?? '');\n throw new NonceRetrievalError(`failed to generate nonce: ${errorMessage}`);\n }\n}\n\n/**\n * Service to Authorize And perform OIDC Flow to get the Access Token\n *\n * @param jwtToken - The original token received from Authentication. This is traded for the Access Token. (the authentication token is single-use)\n * @param env - server environment\n * @returns Access Token from Authorization server\n */\nexport async function authorizeOIDC(\n jwtToken: string,\n env: Env,\n): Promise<AccessToken> {\n const grantType = 'urn:ietf:params:oauth:grant-type:jwt-bearer';\n const headers = new Headers({\n 'Content-Type': 'application/x-www-form-urlencoded',\n });\n\n const urlEncodedBody = new URLSearchParams();\n urlEncodedBody.append('grant_type', grantType);\n urlEncodedBody.append('client_id', getOidcClientId(env));\n urlEncodedBody.append('assertion', jwtToken);\n\n try {\n const response = await fetch(OIDC_TOKEN_URL(env), {\n method: 'POST',\n headers,\n body: urlEncodedBody.toString(),\n });\n\n if (!response.ok) {\n const responseBody = (await response.json()) as {\n error_description: string;\n error: string;\n };\n throw new Error(\n `HTTP error: ${responseBody.error_description}, error code: ${responseBody.error}`,\n );\n }\n\n const accessTokenResponse = await response.json();\n return {\n accessToken: accessTokenResponse.access_token,\n expiresIn: accessTokenResponse.expires_in,\n obtainedAt: Date.now(),\n };\n } catch (e) {\n /* istanbul ignore next */\n const errorMessage =\n e instanceof Error ? e.message : JSON.stringify(e ?? '');\n throw new SignInError(`unable to get access token: ${errorMessage}`);\n }\n}\n\ntype Authentication = {\n token: string;\n expiresIn: number;\n profile: UserProfile;\n};\n/**\n * Service to Authenticate/Login a user via SIWE or SRP derived key.\n *\n * @param rawMessage - raw message for validation when authenticating\n * @param signature - signed raw message\n * @param authType - authentication type/flow used\n * @param env - server environment\n * @returns Authentication Token\n */\nexport async function authenticate(\n rawMessage: string,\n signature: string,\n authType: AuthType,\n env: Env,\n): Promise<Authentication> {\n const authenticationUrl = getAuthenticationUrl(authType, env);\n\n try {\n const response = await fetch(authenticationUrl, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n signature,\n raw_message: rawMessage,\n }),\n });\n\n if (!response.ok) {\n const responseBody = (await response.json()) as ErrorMessage;\n throw new Error(\n `${authType} login HTTP error: ${responseBody.message}, error code: ${responseBody.error}`,\n );\n }\n\n const loginResponse = await response.json();\n return {\n token: loginResponse.token,\n expiresIn: loginResponse.expires_in,\n profile: {\n identifierId: loginResponse.profile.identifier_id,\n metaMetricsId: loginResponse.profile.metametrics_id,\n profileId: loginResponse.profile.profile_id,\n },\n };\n } catch (e) {\n /* istanbul ignore next */\n const errorMessage =\n e instanceof Error ? e.message : JSON.stringify(e ?? '');\n throw new SignInError(`unable to perform SRP login: ${errorMessage}`);\n }\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
import {
|
|
2
|
+
createSHA256Hash,
|
|
3
|
+
encryption_default
|
|
4
|
+
} from "./chunk-UMKBFFZ5.mjs";
|
|
5
|
+
import {
|
|
6
|
+
getEnvUrls
|
|
7
|
+
} from "./chunk-WJRV2JCX.mjs";
|
|
8
|
+
import {
|
|
9
|
+
NotFoundError,
|
|
10
|
+
UserStorageError,
|
|
11
|
+
ValidationError
|
|
12
|
+
} from "./chunk-BHVT2QEA.mjs";
|
|
13
|
+
import {
|
|
14
|
+
__privateAdd,
|
|
15
|
+
__privateMethod
|
|
16
|
+
} from "./chunk-XUI43LEZ.mjs";
|
|
17
|
+
|
|
18
|
+
// src/sdk/user-storage.ts
|
|
19
|
+
var STORAGE_URL = (env, feature, entry) => `${getEnvUrls(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
|
+
__privateAdd(this, _upsertUserStorage);
|
|
24
|
+
__privateAdd(this, _getUserStorage);
|
|
25
|
+
__privateAdd(this, _createEntryKey);
|
|
26
|
+
__privateAdd(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 ValidationError("feature or key cannot be empty strings");
|
|
34
|
+
}
|
|
35
|
+
await __privateMethod(this, _upsertUserStorage, upsertUserStorage_fn).call(this, feature, key, value);
|
|
36
|
+
}
|
|
37
|
+
async getItem(feature, key) {
|
|
38
|
+
if (!feature.trim() || !key.trim()) {
|
|
39
|
+
throw new ValidationError("feature or key cannot be empty strings");
|
|
40
|
+
}
|
|
41
|
+
return __privateMethod(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 = createSHA256Hash(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 __privateMethod(this, _getAuthorizationHeader, getAuthorizationHeader_fn).call(this);
|
|
61
|
+
const storageKey = await this.getStorageKey();
|
|
62
|
+
const encryptedData = encryption_default.encryptString(data, storageKey);
|
|
63
|
+
const url = new URL(
|
|
64
|
+
STORAGE_URL(this.env, feature, __privateMethod(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 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 __privateMethod(this, _getAuthorizationHeader, getAuthorizationHeader_fn).call(this);
|
|
94
|
+
const storageKey = await this.getStorageKey();
|
|
95
|
+
const url = new URL(
|
|
96
|
+
STORAGE_URL(this.env, feature, __privateMethod(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 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 encryption_default.decryptString(encryptedData, storageKey);
|
|
117
|
+
} catch (e) {
|
|
118
|
+
if (e instanceof NotFoundError) {
|
|
119
|
+
throw e;
|
|
120
|
+
}
|
|
121
|
+
const errorMessage = e instanceof Error ? e.message : JSON.stringify(e ?? "");
|
|
122
|
+
throw new 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 = createSHA256Hash(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
|
+
export {
|
|
139
|
+
STORAGE_URL,
|
|
140
|
+
UserStorage
|
|
141
|
+
};
|
|
142
|
+
//# sourceMappingURL=chunk-CZ7YK35S.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/sdk/user-storage.ts"],"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"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";//# sourceMappingURL=chunk-DEATIRII.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":""}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true});// 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
|
+
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
exports.NonceRetrievalError = NonceRetrievalError; exports.SignInError = SignInError; exports.UserStorageError = UserStorageError; exports.ValidationError = ValidationError; exports.UnsupportedAuthTypeError = UnsupportedAuthTypeError; exports.NotFoundError = NotFoundError;
|
|
47
|
+
//# sourceMappingURL=chunk-GQLHSQGZ.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/sdk/errors.ts"],"names":[],"mappings":";AAAO,IAAM,sBAAN,cAAkC,MAAM;AAAA,EAC7C,YAAY,SAAiB;AAC3B,UAAM,OAAO;AACb,SAAK,OAAO;AAAA,EACd;AACF;AAEO,IAAM,cAAN,cAA0B,MAAM;AAAA,EACrC,YAAY,SAAiB;AAC3B,UAAM,OAAO;AACb,SAAK,OAAO;AAAA,EACd;AACF;AAEO,IAAM,mBAAN,cAA+B,MAAM;AAAA,EAC1C,YAAY,SAAiB;AAC3B,UAAM,OAAO;AACb,SAAK,OAAO;AAAA,EACd;AACF;AAEO,IAAM,kBAAN,cAA8B,MAAM;AAAA,EACzC,YAAY,SAAiB;AAC3B,UAAM,OAAO;AACb,SAAK,OAAO;AAAA,EACd;AACF;AAEO,IAAM,2BAAN,cAAuC,MAAM;AAAA,EAClD,YAAY,SAAiB;AAC3B,UAAM,OAAO;AACb,SAAK,OAAO;AAAA,EACd;AACF;AAEO,IAAM,gBAAN,cAA4B,MAAM;AAAA,EACvC,YAAY,SAAiB;AAC3B,UAAM,OAAO;AACb,SAAK,OAAO;AAAA,EACd;AACF","sourcesContent":["export class NonceRetrievalError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'NonceRetrievalError';\n }\n}\n\nexport class SignInError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'SignInError';\n }\n}\n\nexport class UserStorageError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'UserStorageError';\n }\n}\n\nexport class ValidationError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'ValidationError';\n }\n}\n\nexport class UnsupportedAuthTypeError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'UnsupportedAuthTypeError';\n }\n}\n\nexport class NotFoundError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'NotFoundError';\n }\n}\n"]}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import {
|
|
2
|
+
SIWEJwtBearerAuth
|
|
3
|
+
} from "./chunk-4NGEEDGV.mjs";
|
|
4
|
+
import {
|
|
5
|
+
SRPJwtBearerAuth
|
|
6
|
+
} from "./chunk-VXPVURGH.mjs";
|
|
7
|
+
import {
|
|
8
|
+
UnsupportedAuthTypeError
|
|
9
|
+
} from "./chunk-BHVT2QEA.mjs";
|
|
10
|
+
import {
|
|
11
|
+
__privateAdd,
|
|
12
|
+
__privateGet,
|
|
13
|
+
__privateMethod,
|
|
14
|
+
__privateSet
|
|
15
|
+
} from "./chunk-XUI43LEZ.mjs";
|
|
16
|
+
|
|
17
|
+
// src/sdk/authentication.ts
|
|
18
|
+
var _type, _sdk, _assertSIWE, assertSIWE_fn;
|
|
19
|
+
var JwtBearerAuth = class {
|
|
20
|
+
constructor(...args) {
|
|
21
|
+
__privateAdd(this, _assertSIWE);
|
|
22
|
+
__privateAdd(this, _type, void 0);
|
|
23
|
+
__privateAdd(this, _sdk, void 0);
|
|
24
|
+
__privateSet(this, _type, args[0].type);
|
|
25
|
+
if (args[0].type === "SRP" /* SRP */) {
|
|
26
|
+
__privateSet(this, _sdk, new SRPJwtBearerAuth(args[0], args[1]));
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
if (args[0].type === "SiWE" /* SiWE */) {
|
|
30
|
+
__privateSet(this, _sdk, new SIWEJwtBearerAuth(args[0], args[1]));
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
throw new UnsupportedAuthTypeError("unsupported auth type");
|
|
34
|
+
}
|
|
35
|
+
async getAccessToken() {
|
|
36
|
+
return await __privateGet(this, _sdk).getAccessToken();
|
|
37
|
+
}
|
|
38
|
+
async getUserProfile() {
|
|
39
|
+
return await __privateGet(this, _sdk).getUserProfile();
|
|
40
|
+
}
|
|
41
|
+
async getIdentifier() {
|
|
42
|
+
return await __privateGet(this, _sdk).getIdentifier();
|
|
43
|
+
}
|
|
44
|
+
async signMessage(message) {
|
|
45
|
+
return await __privateGet(this, _sdk).signMessage(message);
|
|
46
|
+
}
|
|
47
|
+
prepare(signer) {
|
|
48
|
+
__privateMethod(this, _assertSIWE, assertSIWE_fn).call(this, __privateGet(this, _type), __privateGet(this, _sdk));
|
|
49
|
+
__privateGet(this, _sdk).prepare(signer);
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
_type = new WeakMap();
|
|
53
|
+
_sdk = new WeakMap();
|
|
54
|
+
_assertSIWE = new WeakSet();
|
|
55
|
+
assertSIWE_fn = function(type, sdk) {
|
|
56
|
+
if (type === "SiWE" /* SiWE */) {
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
throw new UnsupportedAuthTypeError(
|
|
60
|
+
"This method is only available via SIWE auth type"
|
|
61
|
+
);
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
export {
|
|
65
|
+
JwtBearerAuth
|
|
66
|
+
};
|
|
67
|
+
//# sourceMappingURL=chunk-GVMIXMYB.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/sdk/authentication.ts"],"sourcesContent":["import { SIWEJwtBearerAuth } from './authentication-jwt-bearer/flow-siwe';\nimport { SRPJwtBearerAuth } from './authentication-jwt-bearer/flow-srp';\nimport type { UserProfile } from './authentication-jwt-bearer/types';\nimport { AuthType } from './authentication-jwt-bearer/types';\nimport { UnsupportedAuthTypeError } from './errors';\n\n// Computing the Classes, so we only get back the public methods for the interface.\ntype Compute<T> = T extends infer U ? { [K in keyof U]: U[K] } : never;\ntype SIWEInterface = Compute<SIWEJwtBearerAuth>;\ntype SRPInterface = Compute<SRPJwtBearerAuth>;\n\ntype SiweParams = ConstructorParameters<typeof SIWEJwtBearerAuth>;\ntype SRPParams = ConstructorParameters<typeof SRPJwtBearerAuth>;\ntype JwtBearerAuthParams = SiweParams | SRPParams;\n\nexport class JwtBearerAuth implements SIWEInterface, SRPInterface {\n #type: AuthType;\n\n #sdk: SIWEJwtBearerAuth | SRPJwtBearerAuth;\n\n constructor(...args: JwtBearerAuthParams) {\n this.#type = args[0].type;\n\n if (args[0].type === AuthType.SRP) {\n this.#sdk = new SRPJwtBearerAuth(args[0], args[1]);\n return;\n }\n\n if (args[0].type === AuthType.SiWE) {\n this.#sdk = new SIWEJwtBearerAuth(args[0], args[1]);\n return;\n }\n\n throw new UnsupportedAuthTypeError('unsupported auth type');\n }\n\n async getAccessToken(): Promise<string> {\n return await this.#sdk.getAccessToken();\n }\n\n async getUserProfile(): Promise<UserProfile> {\n return await this.#sdk.getUserProfile();\n }\n\n async getIdentifier(): Promise<string> {\n return await this.#sdk.getIdentifier();\n }\n\n async signMessage(message: string): Promise<string> {\n return await this.#sdk.signMessage(message);\n }\n\n prepare(signer: {\n address: string;\n chainId: number;\n signMessage: (message: string) => Promise<string>;\n domain: string;\n }): void {\n this.#assertSIWE(this.#type, this.#sdk);\n this.#sdk.prepare(signer);\n }\n\n #assertSIWE(\n type: AuthType,\n sdk: SIWEJwtBearerAuth | SRPJwtBearerAuth,\n ): asserts sdk is SIWEJwtBearerAuth {\n if (type === AuthType.SiWE) {\n return;\n }\n\n throw new UnsupportedAuthTypeError(\n 'This method is only available via SIWE auth type',\n );\n }\n}\n\nexport { SIWEJwtBearerAuth } from './authentication-jwt-bearer/flow-siwe';\nexport { SRPJwtBearerAuth } from './authentication-jwt-bearer/flow-srp';\nexport * from './authentication-jwt-bearer/types';\n"],"mappings":";;;;;;;;;;;;;;;;;AAAA;AAeO,IAAM,gBAAN,MAA2D;AAAA,EAKhE,eAAe,MAA2B;AA0C1C;AA9CA;AAEA;AAGE,uBAAK,OAAQ,KAAK,CAAC,EAAE;AAErB,QAAI,KAAK,CAAC,EAAE,0BAAuB;AACjC,yBAAK,MAAO,IAAI,iBAAiB,KAAK,CAAC,GAAG,KAAK,CAAC,CAAC;AACjD;AAAA,IACF;AAEA,QAAI,KAAK,CAAC,EAAE,4BAAwB;AAClC,yBAAK,MAAO,IAAI,kBAAkB,KAAK,CAAC,GAAG,KAAK,CAAC,CAAC;AAClD;AAAA,IACF;AAEA,UAAM,IAAI,yBAAyB,uBAAuB;AAAA,EAC5D;AAAA,EAEA,MAAM,iBAAkC;AACtC,WAAO,MAAM,mBAAK,MAAK,eAAe;AAAA,EACxC;AAAA,EAEA,MAAM,iBAAuC;AAC3C,WAAO,MAAM,mBAAK,MAAK,eAAe;AAAA,EACxC;AAAA,EAEA,MAAM,gBAAiC;AACrC,WAAO,MAAM,mBAAK,MAAK,cAAc;AAAA,EACvC;AAAA,EAEA,MAAM,YAAY,SAAkC;AAClD,WAAO,MAAM,mBAAK,MAAK,YAAY,OAAO;AAAA,EAC5C;AAAA,EAEA,QAAQ,QAKC;AACP,0BAAK,4BAAL,WAAiB,mBAAK,QAAO,mBAAK;AAClC,uBAAK,MAAK,QAAQ,MAAM;AAAA,EAC1B;AAcF;AA1DE;AAEA;AA4CA;AAAA,gBAAW,SACT,MACA,KACkC;AAClC,MAAI,4BAAwB;AAC1B;AAAA,EACF;AAEA,QAAM,IAAI;AAAA,IACR;AAAA,EACF;AACF;","names":[]}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true});// src/sdk/env.ts
|
|
2
|
+
var Env = /* @__PURE__ */ ((Env2) => {
|
|
3
|
+
Env2["DEV"] = "dev";
|
|
4
|
+
Env2["UAT"] = "uat";
|
|
5
|
+
Env2["PRD"] = "prd";
|
|
6
|
+
return Env2;
|
|
7
|
+
})(Env || {});
|
|
8
|
+
var ENV_URLS = {
|
|
9
|
+
dev: {
|
|
10
|
+
authApiUrl: "https://authentication.dev-api.cx.metamask.io",
|
|
11
|
+
oidcApiUrl: "https://oidc.dev-api.cx.metamask.io",
|
|
12
|
+
userStorageApiUrl: "https://user-storage.dev-api.cx.metamask.io"
|
|
13
|
+
},
|
|
14
|
+
uat: {
|
|
15
|
+
authApiUrl: "https://authentication.uat-api.cx.metamask.io",
|
|
16
|
+
oidcApiUrl: "https://oidc.uat-api.cx.metamask.io",
|
|
17
|
+
userStorageApiUrl: "https://user-storage.uat-api.cx.metamask.io"
|
|
18
|
+
},
|
|
19
|
+
prd: {
|
|
20
|
+
authApiUrl: "https://authentication.api.cx.metamask.io",
|
|
21
|
+
oidcApiUrl: "https://oidc.api.cx.metamask.io",
|
|
22
|
+
userStorageApiUrl: "https://user-storage.api.cx.metamask.io"
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
function getEnvUrls(env) {
|
|
26
|
+
if (!ENV_URLS[env]) {
|
|
27
|
+
throw new Error("invalid environment configuration");
|
|
28
|
+
}
|
|
29
|
+
return ENV_URLS[env];
|
|
30
|
+
}
|
|
31
|
+
function getOidcClientId(env) {
|
|
32
|
+
switch (env) {
|
|
33
|
+
case "dev" /* DEV */:
|
|
34
|
+
return "f1a963d7-50dc-4cb5-8d81-f1f3654f0df3";
|
|
35
|
+
case "uat" /* UAT */:
|
|
36
|
+
return "a9de167c-c9a6-43d8-af39-d301fd44c485";
|
|
37
|
+
case "prd" /* PRD */:
|
|
38
|
+
return "1132f10a-b4e5-4390-a5f2-d9c6022db564";
|
|
39
|
+
default:
|
|
40
|
+
throw new Error("invalid env: cannot determine oidc client id");
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
exports.Env = Env; exports.getEnvUrls = getEnvUrls; exports.getOidcClientId = getOidcClientId;
|
|
49
|
+
//# sourceMappingURL=chunk-KHFPE566.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/sdk/env.ts"],"names":["Env"],"mappings":";AAAO,IAAW,MAAX,kBAAWA,SAAX;AACL,EAAAA,KAAA,SAAM;AACN,EAAAA,KAAA,SAAM;AACN,EAAAA,KAAA,SAAM;AAHU,SAAAA;AAAA,GAAA;AAYlB,IAAM,WAAsC;AAAA,EAC1C,KAAK;AAAA,IACH,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ,mBAAmB;AAAA,EACrB;AAAA,EACA,KAAK;AAAA,IACH,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ,mBAAmB;AAAA,EACrB;AAAA,EACA,KAAK;AAAA,IACH,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ,mBAAmB;AAAA,EACrB;AACF;AASO,SAAS,WAAW,KAAwB;AACjD,MAAI,CAAC,SAAS,GAAG,GAAG;AAClB,UAAM,IAAI,MAAM,mCAAmC;AAAA,EACrD;AACA,SAAO,SAAS,GAAG;AACrB;AAQO,SAAS,gBAAgB,KAAkB;AAChD,UAAQ,KAAK;AAAA,IACX,KAAK;AACH,aAAO;AAAA,IAET,KAAK;AACH,aAAO;AAAA,IAET,KAAK;AACH,aAAO;AAAA,IAET;AACE,YAAM,IAAI,MAAM,8CAA8C;AAAA,EAClE;AACF","sourcesContent":["export const enum Env {\n DEV = 'dev',\n UAT = 'uat',\n PRD = 'prd',\n}\n\ntype EnvUrlsEntry = {\n authApiUrl: string;\n oidcApiUrl: string;\n userStorageApiUrl: string;\n};\n\nconst ENV_URLS: Record<Env, EnvUrlsEntry> = {\n dev: {\n authApiUrl: 'https://authentication.dev-api.cx.metamask.io',\n oidcApiUrl: 'https://oidc.dev-api.cx.metamask.io',\n userStorageApiUrl: 'https://user-storage.dev-api.cx.metamask.io',\n },\n uat: {\n authApiUrl: 'https://authentication.uat-api.cx.metamask.io',\n oidcApiUrl: 'https://oidc.uat-api.cx.metamask.io',\n userStorageApiUrl: 'https://user-storage.uat-api.cx.metamask.io',\n },\n prd: {\n authApiUrl: 'https://authentication.api.cx.metamask.io',\n oidcApiUrl: 'https://oidc.api.cx.metamask.io',\n userStorageApiUrl: 'https://user-storage.api.cx.metamask.io',\n },\n};\n\n/**\n * Validates and returns correct environment endpoints\n *\n * @param env - environment field\n * @returns the correct environment url\n * @throws on invalid environment passed\n */\nexport function getEnvUrls(env: Env): EnvUrlsEntry {\n if (!ENV_URLS[env]) {\n throw new Error('invalid environment configuration');\n }\n return ENV_URLS[env];\n}\n\n/**\n * Returns the valid OIDC Client ID (used during authorization)\n *\n * @param env - environment field\n * @returns the OIDC client id for the environment\n */\nexport function getOidcClientId(env: Env): string {\n switch (env) {\n case Env.DEV:\n return 'f1a963d7-50dc-4cb5-8d81-f1f3654f0df3';\n /* istanbul ignore next */\n case Env.UAT:\n return 'a9de167c-c9a6-43d8-af39-d301fd44c485';\n /* istanbul ignore next */\n case Env.PRD:\n return '1132f10a-b4e5-4390-a5f2-d9c6022db564';\n /* istanbul ignore next */\n default:\n throw new Error('invalid env: cannot determine oidc client id');\n }\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/sdk/authentication-jwt-bearer/constants.ts"],"sourcesContent":["export const SESSION_LIFETIME_MS = 45 * 60 * 1000; // 45 minutes in milliseconds\n"],"mappings":";AAAO,IAAM,sBAAsB,KAAK,KAAK;","names":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
//# sourceMappingURL=chunk-MKJYSWME.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
var _chunkKHFPE566js = require('./chunk-KHFPE566.js');
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
var _chunkGQLHSQGZjs = require('./chunk-GQLHSQGZ.js');
|
|
10
|
+
|
|
11
|
+
// src/sdk/authentication-jwt-bearer/services.ts
|
|
12
|
+
var NONCE_URL = (env) => `${_chunkKHFPE566js.getEnvUrls.call(void 0, env).authApiUrl}/api/v2/nonce`;
|
|
13
|
+
var OIDC_TOKEN_URL = (env) => `${_chunkKHFPE566js.getEnvUrls.call(void 0, env).oidcApiUrl}/oauth2/token`;
|
|
14
|
+
var SRP_LOGIN_URL = (env) => `${_chunkKHFPE566js.getEnvUrls.call(void 0, env).authApiUrl}/api/v2/srp/login`;
|
|
15
|
+
var SIWE_LOGIN_URL = (env) => `${_chunkKHFPE566js.getEnvUrls.call(void 0, env).authApiUrl}/api/v2/siwe/login`;
|
|
16
|
+
var getAuthenticationUrl = (authType, env) => {
|
|
17
|
+
switch (authType) {
|
|
18
|
+
case "SRP" /* SRP */:
|
|
19
|
+
return SRP_LOGIN_URL(env);
|
|
20
|
+
case "SiWE" /* SiWE */:
|
|
21
|
+
return SIWE_LOGIN_URL(env);
|
|
22
|
+
default:
|
|
23
|
+
throw new (0, _chunkGQLHSQGZjs.ValidationError)(
|
|
24
|
+
`Invalid AuthType: ${authType} - unable to create Auth URL`
|
|
25
|
+
);
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
async function getNonce(id, env) {
|
|
29
|
+
const nonceUrl = new URL(NONCE_URL(env));
|
|
30
|
+
nonceUrl.searchParams.set("identifier", id);
|
|
31
|
+
try {
|
|
32
|
+
const nonceResponse = await fetch(nonceUrl.toString());
|
|
33
|
+
if (!nonceResponse.ok) {
|
|
34
|
+
const responseBody = await nonceResponse.json();
|
|
35
|
+
throw new Error(
|
|
36
|
+
`HTTP error message: ${responseBody.message}, error: ${responseBody.error}`
|
|
37
|
+
);
|
|
38
|
+
}
|
|
39
|
+
const nonceJson = await nonceResponse.json();
|
|
40
|
+
return {
|
|
41
|
+
nonce: nonceJson.nonce,
|
|
42
|
+
identifier: nonceJson.identifier,
|
|
43
|
+
expiresIn: nonceJson.expires_in
|
|
44
|
+
};
|
|
45
|
+
} catch (e) {
|
|
46
|
+
const errorMessage = e instanceof Error ? e.message : JSON.stringify(e ?? "");
|
|
47
|
+
throw new (0, _chunkGQLHSQGZjs.NonceRetrievalError)(`failed to generate nonce: ${errorMessage}`);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
async function authorizeOIDC(jwtToken, env) {
|
|
51
|
+
const grantType = "urn:ietf:params:oauth:grant-type:jwt-bearer";
|
|
52
|
+
const headers = new Headers({
|
|
53
|
+
"Content-Type": "application/x-www-form-urlencoded"
|
|
54
|
+
});
|
|
55
|
+
const urlEncodedBody = new URLSearchParams();
|
|
56
|
+
urlEncodedBody.append("grant_type", grantType);
|
|
57
|
+
urlEncodedBody.append("client_id", _chunkKHFPE566js.getOidcClientId.call(void 0, env));
|
|
58
|
+
urlEncodedBody.append("assertion", jwtToken);
|
|
59
|
+
try {
|
|
60
|
+
const response = await fetch(OIDC_TOKEN_URL(env), {
|
|
61
|
+
method: "POST",
|
|
62
|
+
headers,
|
|
63
|
+
body: urlEncodedBody.toString()
|
|
64
|
+
});
|
|
65
|
+
if (!response.ok) {
|
|
66
|
+
const responseBody = await response.json();
|
|
67
|
+
throw new Error(
|
|
68
|
+
`HTTP error: ${responseBody.error_description}, error code: ${responseBody.error}`
|
|
69
|
+
);
|
|
70
|
+
}
|
|
71
|
+
const accessTokenResponse = await response.json();
|
|
72
|
+
return {
|
|
73
|
+
accessToken: accessTokenResponse.access_token,
|
|
74
|
+
expiresIn: accessTokenResponse.expires_in,
|
|
75
|
+
obtainedAt: Date.now()
|
|
76
|
+
};
|
|
77
|
+
} catch (e) {
|
|
78
|
+
const errorMessage = e instanceof Error ? e.message : JSON.stringify(e ?? "");
|
|
79
|
+
throw new (0, _chunkGQLHSQGZjs.SignInError)(`unable to get access token: ${errorMessage}`);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
async function authenticate(rawMessage, signature, authType, env) {
|
|
83
|
+
const authenticationUrl = getAuthenticationUrl(authType, env);
|
|
84
|
+
try {
|
|
85
|
+
const response = await fetch(authenticationUrl, {
|
|
86
|
+
method: "POST",
|
|
87
|
+
headers: {
|
|
88
|
+
"Content-Type": "application/json"
|
|
89
|
+
},
|
|
90
|
+
body: JSON.stringify({
|
|
91
|
+
signature,
|
|
92
|
+
raw_message: rawMessage
|
|
93
|
+
})
|
|
94
|
+
});
|
|
95
|
+
if (!response.ok) {
|
|
96
|
+
const responseBody = await response.json();
|
|
97
|
+
throw new Error(
|
|
98
|
+
`${authType} login HTTP error: ${responseBody.message}, error code: ${responseBody.error}`
|
|
99
|
+
);
|
|
100
|
+
}
|
|
101
|
+
const loginResponse = await response.json();
|
|
102
|
+
return {
|
|
103
|
+
token: loginResponse.token,
|
|
104
|
+
expiresIn: loginResponse.expires_in,
|
|
105
|
+
profile: {
|
|
106
|
+
identifierId: loginResponse.profile.identifier_id,
|
|
107
|
+
metaMetricsId: loginResponse.profile.metametrics_id,
|
|
108
|
+
profileId: loginResponse.profile.profile_id
|
|
109
|
+
}
|
|
110
|
+
};
|
|
111
|
+
} catch (e) {
|
|
112
|
+
const errorMessage = e instanceof Error ? e.message : JSON.stringify(e ?? "");
|
|
113
|
+
throw new (0, _chunkGQLHSQGZjs.SignInError)(`unable to perform SRP login: ${errorMessage}`);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
exports.NONCE_URL = NONCE_URL; exports.OIDC_TOKEN_URL = OIDC_TOKEN_URL; exports.SRP_LOGIN_URL = SRP_LOGIN_URL; exports.SIWE_LOGIN_URL = SIWE_LOGIN_URL; exports.getNonce = getNonce; exports.authorizeOIDC = authorizeOIDC; exports.authenticate = authenticate;
|
|
126
|
+
//# sourceMappingURL=chunk-NRH6O4QZ.js.map
|