@crossmint/client-sdk-auth 1.1.4 → 1.1.5
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/dist/CrossmintAuthClient.cjs +1 -12
- package/dist/CrossmintAuthClient.js +1 -12
- package/dist/chunk-22GIA4MK.js +1 -0
- package/dist/chunk-3K3UA645.js +1 -0
- package/dist/chunk-CK4JCQY6.cjs +1 -0
- package/dist/chunk-FTVKNCGF.cjs +1 -0
- package/dist/chunk-HU56N5SW.js +1 -0
- package/dist/chunk-NIH25R3L.js +1 -0
- package/dist/chunk-NYYORERK.cjs +1 -0
- package/dist/chunk-NZ2DAY24.cjs +1 -0
- package/dist/chunk-REIMEXVF.js +1 -0
- package/dist/chunk-U76ID4TS.js +0 -0
- package/dist/chunk-VDJHVTKI.cjs +1 -0
- package/dist/chunk-XHYLTO6W.cjs +1 -0
- package/dist/index.cjs +1 -29
- package/dist/index.js +1 -29
- package/dist/utils/constants.cjs +1 -8
- package/dist/utils/constants.js +1 -8
- package/dist/utils/cookies.cjs +1 -12
- package/dist/utils/cookies.js +1 -12
- package/dist/utils/index.cjs +1 -21
- package/dist/utils/index.js +1 -21
- package/dist/utils/jwt.cjs +1 -8
- package/dist/utils/jwt.js +1 -8
- package/package.json +4 -5
- package/dist/CrossmintAuthClient.cjs.map +0 -1
- package/dist/CrossmintAuthClient.js.map +0 -1
- package/dist/chunk-5JXPQKM4.js +0 -19
- package/dist/chunk-5JXPQKM4.js.map +0 -1
- package/dist/chunk-BGMXXFQ4.cjs +0 -19
- package/dist/chunk-BGMXXFQ4.cjs.map +0 -1
- package/dist/chunk-BMYZMMVR.js +0 -7
- package/dist/chunk-BMYZMMVR.js.map +0 -1
- package/dist/chunk-F45I5NLI.cjs +0 -46
- package/dist/chunk-F45I5NLI.cjs.map +0 -1
- package/dist/chunk-FEGDFSUW.cjs +0 -275
- package/dist/chunk-FEGDFSUW.cjs.map +0 -1
- package/dist/chunk-JPRRZPBL.js +0 -46
- package/dist/chunk-JPRRZPBL.js.map +0 -1
- package/dist/chunk-MLMLBCSI.js +0 -11
- package/dist/chunk-MLMLBCSI.js.map +0 -1
- package/dist/chunk-QY4RIGNM.cjs +0 -11
- package/dist/chunk-QY4RIGNM.cjs.map +0 -1
- package/dist/chunk-SGSYRRRS.js +0 -275
- package/dist/chunk-SGSYRRRS.js.map +0 -1
- package/dist/chunk-TIUX4OOQ.cjs +0 -7
- package/dist/chunk-TIUX4OOQ.cjs.map +0 -1
- package/dist/chunk-TOXKCKTY.js +0 -1
- package/dist/chunk-TOXKCKTY.js.map +0 -1
- package/dist/chunk-VQ3HTIQ3.cjs +0 -1
- package/dist/chunk-VQ3HTIQ3.cjs.map +0 -1
- package/dist/index.cjs.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/utils/constants.cjs.map +0 -1
- package/dist/utils/constants.js.map +0 -1
- package/dist/utils/cookies.cjs.map +0 -1
- package/dist/utils/cookies.js.map +0 -1
- package/dist/utils/index.cjs.map +0 -1
- package/dist/utils/index.js.map +0 -1
- package/dist/utils/jwt.cjs.map +0 -1
- package/dist/utils/jwt.js.map +0 -1
- package/src/CrossmintAuthClient.test.ts +0 -416
- package/src/CrossmintAuthClient.ts +0 -294
- package/src/index.ts +0 -3
- package/src/utils/constants.ts +0 -1
- package/src/utils/cookies.test.ts +0 -44
- package/src/utils/cookies.ts +0 -13
- package/src/utils/index.ts +0 -3
- package/src/utils/jwt.ts +0 -6
package/dist/chunk-FEGDFSUW.cjs
DELETED
|
@@ -1,275 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
2
|
-
|
|
3
|
-
var _chunkTIUX4OOQcjs = require('./chunk-TIUX4OOQ.cjs');
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
var _chunkBGMXXFQ4cjs = require('./chunk-BGMXXFQ4.cjs');
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
var _chunkQY4RIGNMcjs = require('./chunk-QY4RIGNM.cjs');
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
var _chunkF45I5NLIcjs = require('./chunk-F45I5NLI.cjs');
|
|
17
|
-
|
|
18
|
-
// src/CrossmintAuthClient.ts
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
var _commonsdkauth = require('@crossmint/common-sdk-auth');
|
|
27
|
-
var _clientsdkbase = require('@crossmint/client-sdk-base');
|
|
28
|
-
var CrossmintAuthClient = class _CrossmintAuthClient extends _commonsdkauth.CrossmintAuth {
|
|
29
|
-
constructor(crossmint, apiClient, config = {}) {
|
|
30
|
-
var _a, _b;
|
|
31
|
-
super(crossmint, apiClient, config);
|
|
32
|
-
this.refreshTask = null;
|
|
33
|
-
this.refreshPromise = null;
|
|
34
|
-
this.callbacks = (_a = config.callbacks) != null ? _a : {};
|
|
35
|
-
this.logoutRoute = (_b = config.logoutRoute) != null ? _b : null;
|
|
36
|
-
}
|
|
37
|
-
static from(crossmint, config = {}) {
|
|
38
|
-
const authClient = new _CrossmintAuthClient(crossmint, _commonsdkauth.CrossmintAuth.defaultApiClient(crossmint), config);
|
|
39
|
-
if (typeof window !== "undefined") {
|
|
40
|
-
authClient.handleRefreshAuthMaterial();
|
|
41
|
-
}
|
|
42
|
-
return authClient;
|
|
43
|
-
}
|
|
44
|
-
getUser() {
|
|
45
|
-
return _chunkF45I5NLIcjs.__async.call(void 0, this, null, function* () {
|
|
46
|
-
try {
|
|
47
|
-
const response = yield this.apiClient.get(`api/${_commonsdkauth.CROSSMINT_API_VERSION}/sdk/auth/user`, {
|
|
48
|
-
headers: { "Content-Type": "application/json" }
|
|
49
|
-
});
|
|
50
|
-
if (!response.ok) {
|
|
51
|
-
throw yield response.text();
|
|
52
|
-
}
|
|
53
|
-
return yield response.json();
|
|
54
|
-
} catch (error) {
|
|
55
|
-
throw new (0, _commonsdkauth.CrossmintAuthenticationError)(
|
|
56
|
-
`Failed to fetch user: ${error instanceof Error ? error.message : "Unknown error"}`
|
|
57
|
-
);
|
|
58
|
-
}
|
|
59
|
-
});
|
|
60
|
-
}
|
|
61
|
-
storeAuthMaterial(authMaterial) {
|
|
62
|
-
_chunkBGMXXFQ4cjs.setCookie.call(void 0, _commonsdkauth.SESSION_PREFIX, authMaterial.jwt);
|
|
63
|
-
_chunkBGMXXFQ4cjs.setCookie.call(void 0, _commonsdkauth.REFRESH_TOKEN_PREFIX, authMaterial.refreshToken.secret, authMaterial.refreshToken.expiresAt);
|
|
64
|
-
}
|
|
65
|
-
logout() {
|
|
66
|
-
return _chunkF45I5NLIcjs.__async.call(void 0, this, null, function* () {
|
|
67
|
-
var _a, _b;
|
|
68
|
-
const oldRefreshToken = _chunkBGMXXFQ4cjs.getCookie.call(void 0, _commonsdkauth.REFRESH_TOKEN_PREFIX);
|
|
69
|
-
_chunkBGMXXFQ4cjs.deleteCookie.call(void 0, _commonsdkauth.REFRESH_TOKEN_PREFIX);
|
|
70
|
-
_chunkBGMXXFQ4cjs.deleteCookie.call(void 0, _commonsdkauth.SESSION_PREFIX);
|
|
71
|
-
(_b = (_a = this.callbacks).onLogout) == null ? void 0 : _b.call(_a);
|
|
72
|
-
try {
|
|
73
|
-
if (this.logoutRoute != null) {
|
|
74
|
-
yield this.logoutFromCustomRoute();
|
|
75
|
-
} else if (oldRefreshToken != null) {
|
|
76
|
-
yield this.logoutFromDefaultRoute(oldRefreshToken);
|
|
77
|
-
}
|
|
78
|
-
} catch (error) {
|
|
79
|
-
console.error(error);
|
|
80
|
-
}
|
|
81
|
-
});
|
|
82
|
-
}
|
|
83
|
-
handleRefreshAuthMaterial(refreshTokenSecret) {
|
|
84
|
-
return _chunkF45I5NLIcjs.__async.call(void 0, this, null, function* () {
|
|
85
|
-
var _a, _b;
|
|
86
|
-
const refreshToken = refreshTokenSecret != null ? refreshTokenSecret : _chunkBGMXXFQ4cjs.getCookie.call(void 0, _commonsdkauth.REFRESH_TOKEN_PREFIX);
|
|
87
|
-
if (refreshToken == null && this.refreshRoute == null) {
|
|
88
|
-
return;
|
|
89
|
-
}
|
|
90
|
-
try {
|
|
91
|
-
if (this.refreshPromise == null) {
|
|
92
|
-
this.refreshPromise = this.refreshAuthMaterial(refreshToken);
|
|
93
|
-
}
|
|
94
|
-
const authMaterial = yield this.refreshPromise;
|
|
95
|
-
if (this.refreshRoute == null) {
|
|
96
|
-
this.storeAuthMaterial(authMaterial);
|
|
97
|
-
}
|
|
98
|
-
(_b = (_a = this.callbacks).onTokenRefresh) == null ? void 0 : _b.call(_a, authMaterial);
|
|
99
|
-
this.scheduleNextRefresh(authMaterial.jwt);
|
|
100
|
-
} catch (error) {
|
|
101
|
-
console.error(error);
|
|
102
|
-
this.logout();
|
|
103
|
-
} finally {
|
|
104
|
-
this.refreshPromise = null;
|
|
105
|
-
}
|
|
106
|
-
});
|
|
107
|
-
}
|
|
108
|
-
getOAuthUrl(provider) {
|
|
109
|
-
return _chunkF45I5NLIcjs.__async.call(void 0, this, null, function* () {
|
|
110
|
-
try {
|
|
111
|
-
const response = yield this.apiClient.get(`${_commonsdkauth.AUTH_SDK_ROOT_ENDPOINT}/social/${provider}/start`, {
|
|
112
|
-
headers: { "Content-Type": "application/json" }
|
|
113
|
-
});
|
|
114
|
-
if (!response.ok) {
|
|
115
|
-
throw yield response.text();
|
|
116
|
-
}
|
|
117
|
-
const data = yield response.json();
|
|
118
|
-
return data.oauthUrl;
|
|
119
|
-
} catch (error) {
|
|
120
|
-
throw new (0, _commonsdkauth.CrossmintAuthenticationError)(
|
|
121
|
-
`Failed to get OAuth URL for provider ${provider}: ${error instanceof Error ? error.message : "Unknown error"}`
|
|
122
|
-
);
|
|
123
|
-
}
|
|
124
|
-
});
|
|
125
|
-
}
|
|
126
|
-
sendEmailOtp(email) {
|
|
127
|
-
return _chunkF45I5NLIcjs.__async.call(void 0, this, null, function* () {
|
|
128
|
-
try {
|
|
129
|
-
const response = yield this.apiClient.post(`${_commonsdkauth.AUTH_SDK_ROOT_ENDPOINT}/otps/send`, {
|
|
130
|
-
headers: { "Content-Type": "application/json" },
|
|
131
|
-
body: JSON.stringify({ email })
|
|
132
|
-
});
|
|
133
|
-
if (!response.ok) {
|
|
134
|
-
throw yield response.text();
|
|
135
|
-
}
|
|
136
|
-
return yield response.json();
|
|
137
|
-
} catch (error) {
|
|
138
|
-
throw new (0, _commonsdkauth.CrossmintAuthenticationError)(
|
|
139
|
-
`Failed to send email OTP: ${error instanceof Error ? error.message : "Unknown error"}`
|
|
140
|
-
);
|
|
141
|
-
}
|
|
142
|
-
});
|
|
143
|
-
}
|
|
144
|
-
confirmEmailOtp(email, emailId, token) {
|
|
145
|
-
return _chunkF45I5NLIcjs.__async.call(void 0, this, null, function* () {
|
|
146
|
-
try {
|
|
147
|
-
const queryParams = new URLSearchParams({
|
|
148
|
-
email,
|
|
149
|
-
signinAuthenticationMethod: "email",
|
|
150
|
-
token,
|
|
151
|
-
locale: "en",
|
|
152
|
-
state: emailId
|
|
153
|
-
});
|
|
154
|
-
const response = yield this.apiClient.post(`${_commonsdkauth.AUTH_SDK_ROOT_ENDPOINT}/authenticate?${queryParams}`, {
|
|
155
|
-
headers: { "Content-Type": "application/json" }
|
|
156
|
-
});
|
|
157
|
-
if (!response.ok) {
|
|
158
|
-
throw yield response.text();
|
|
159
|
-
}
|
|
160
|
-
const resData = yield response.json();
|
|
161
|
-
return resData.oneTimeSecret;
|
|
162
|
-
} catch (error) {
|
|
163
|
-
throw new (0, _commonsdkauth.CrossmintAuthenticationError)(
|
|
164
|
-
`Failed to confirm email OTP: ${error instanceof Error ? error.message : "Unknown error"}`
|
|
165
|
-
);
|
|
166
|
-
}
|
|
167
|
-
});
|
|
168
|
-
}
|
|
169
|
-
signInWithFarcaster(data) {
|
|
170
|
-
return _chunkF45I5NLIcjs.__async.call(void 0, this, null, function* () {
|
|
171
|
-
try {
|
|
172
|
-
const queryParams = new URLSearchParams({
|
|
173
|
-
signinAuthenticationMethod: "farcaster",
|
|
174
|
-
callbackUrl: `${this.apiClient.baseUrl}/${_commonsdkauth.AUTH_SDK_ROOT_ENDPOINT}/callback`
|
|
175
|
-
});
|
|
176
|
-
const response = yield this.apiClient.post(`${_commonsdkauth.AUTH_SDK_ROOT_ENDPOINT}/authenticate?${queryParams}`, {
|
|
177
|
-
headers: { "Content-Type": "application/json" },
|
|
178
|
-
body: JSON.stringify(_chunkF45I5NLIcjs.__spreadProps.call(void 0, _chunkF45I5NLIcjs.__spreadValues.call(void 0, {}, data), {
|
|
179
|
-
domain: data.signatureParams.domain,
|
|
180
|
-
redirect: true,
|
|
181
|
-
callbackUrl: `${this.apiClient.baseUrl}/${_commonsdkauth.AUTH_SDK_ROOT_ENDPOINT}/callback`
|
|
182
|
-
}))
|
|
183
|
-
});
|
|
184
|
-
if (!response.ok) {
|
|
185
|
-
throw yield response.text();
|
|
186
|
-
}
|
|
187
|
-
const resData = yield response.json();
|
|
188
|
-
return resData.oneTimeSecret;
|
|
189
|
-
} catch (error) {
|
|
190
|
-
throw new (0, _commonsdkauth.CrossmintAuthenticationError)(
|
|
191
|
-
`Failed to sign in with Farcaster: ${error instanceof Error ? error.message : "Unknown error"}`
|
|
192
|
-
);
|
|
193
|
-
}
|
|
194
|
-
});
|
|
195
|
-
}
|
|
196
|
-
signInWithSmartWallet(address) {
|
|
197
|
-
return _chunkF45I5NLIcjs.__async.call(void 0, this, null, function* () {
|
|
198
|
-
try {
|
|
199
|
-
const queryParams = new URLSearchParams({ signinAuthenticationMethod: "evm" });
|
|
200
|
-
const response = yield this.apiClient.post(
|
|
201
|
-
`${_commonsdkauth.AUTH_SDK_ROOT_ENDPOINT}/crypto_wallets/authenticate/start?${queryParams}`,
|
|
202
|
-
{
|
|
203
|
-
headers: { "Content-Type": "application/json" },
|
|
204
|
-
body: JSON.stringify({ walletAddress: address })
|
|
205
|
-
}
|
|
206
|
-
);
|
|
207
|
-
if (!response.ok) {
|
|
208
|
-
throw yield response.text();
|
|
209
|
-
}
|
|
210
|
-
return yield response.json();
|
|
211
|
-
} catch (error) {
|
|
212
|
-
throw new (0, _commonsdkauth.CrossmintAuthenticationError)(
|
|
213
|
-
`Failed to initiate smart wallet sign in: ${error instanceof Error ? error.message : "Unknown error"}`
|
|
214
|
-
);
|
|
215
|
-
}
|
|
216
|
-
});
|
|
217
|
-
}
|
|
218
|
-
authenticateSmartWallet(address, signature) {
|
|
219
|
-
return _chunkF45I5NLIcjs.__async.call(void 0, this, null, function* () {
|
|
220
|
-
try {
|
|
221
|
-
const queryParams = new URLSearchParams({
|
|
222
|
-
signinAuthenticationMethod: "evm",
|
|
223
|
-
callbackUrl: `${this.apiClient.baseUrl}/${_commonsdkauth.AUTH_SDK_ROOT_ENDPOINT}/callback`
|
|
224
|
-
});
|
|
225
|
-
const response = yield this.apiClient.post(
|
|
226
|
-
`${_commonsdkauth.AUTH_SDK_ROOT_ENDPOINT}/crypto_wallets/authenticate?${queryParams}`,
|
|
227
|
-
{
|
|
228
|
-
headers: { "Content-Type": "application/json" },
|
|
229
|
-
body: JSON.stringify({ walletAddress: address, signature })
|
|
230
|
-
}
|
|
231
|
-
);
|
|
232
|
-
if (!response.ok) {
|
|
233
|
-
throw yield response.text();
|
|
234
|
-
}
|
|
235
|
-
return yield response.json();
|
|
236
|
-
} catch (error) {
|
|
237
|
-
throw new (0, _commonsdkauth.CrossmintAuthenticationError)(
|
|
238
|
-
`Failed to authenticate smart wallet: ${error instanceof Error ? error.message : "Unknown error"}`
|
|
239
|
-
);
|
|
240
|
-
}
|
|
241
|
-
});
|
|
242
|
-
}
|
|
243
|
-
logoutFromCustomRoute() {
|
|
244
|
-
return _chunkF45I5NLIcjs.__async.call(void 0, this, null, function* () {
|
|
245
|
-
if (!this.logoutRoute) {
|
|
246
|
-
throw new Error("Custom logout route is not set");
|
|
247
|
-
}
|
|
248
|
-
return yield fetch(this.logoutRoute, { method: "POST" });
|
|
249
|
-
});
|
|
250
|
-
}
|
|
251
|
-
scheduleNextRefresh(jwt) {
|
|
252
|
-
const jwtExpiration = _chunkQY4RIGNMcjs.getJWTExpiration.call(void 0, jwt);
|
|
253
|
-
if (!jwtExpiration) {
|
|
254
|
-
throw new Error("Invalid JWT");
|
|
255
|
-
}
|
|
256
|
-
const currentTime = Date.now() / 1e3;
|
|
257
|
-
const timeToExpire = jwtExpiration - currentTime - _chunkTIUX4OOQcjs.TIME_BEFORE_EXPIRING_JWT_IN_SECONDS;
|
|
258
|
-
if (timeToExpire > 0) {
|
|
259
|
-
const endTime = Date.now() + timeToExpire * 1e3;
|
|
260
|
-
this.cancelScheduledRefresh();
|
|
261
|
-
this.refreshTask = _clientsdkbase.queueTask.call(void 0, () => this.handleRefreshAuthMaterial(), endTime);
|
|
262
|
-
}
|
|
263
|
-
}
|
|
264
|
-
cancelScheduledRefresh() {
|
|
265
|
-
if (this.refreshTask) {
|
|
266
|
-
this.refreshTask.cancel();
|
|
267
|
-
this.refreshTask = null;
|
|
268
|
-
}
|
|
269
|
-
}
|
|
270
|
-
};
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
exports.CrossmintAuthClient = CrossmintAuthClient;
|
|
275
|
-
//# sourceMappingURL=chunk-FEGDFSUW.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/CrossmintAuthClient.ts"],"names":[],"mappings":"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","sourcesContent":["import type { UseSignInData } from \"@farcaster/auth-kit\";\nimport {\n AUTH_SDK_ROOT_ENDPOINT,\n type AuthMaterialWithUser,\n CROSSMINT_API_VERSION,\n CrossmintAuth,\n CrossmintAuthenticationError,\n type CrossmintAuthOptions,\n type OAuthProvider,\n REFRESH_TOKEN_PREFIX,\n SESSION_PREFIX,\n} from \"@crossmint/common-sdk-auth\";\nimport type { Crossmint, CrossmintApiClient } from \"@crossmint/common-sdk-base\";\nimport { type CancellableTask, queueTask } from \"@crossmint/client-sdk-base\";\nimport { deleteCookie, getCookie, getJWTExpiration, setCookie, TIME_BEFORE_EXPIRING_JWT_IN_SECONDS } from \"./utils\";\n\ntype CrossmintAuthClientConfig = CrossmintAuthOptions & {\n callbacks?: CrossmintAuthClientCallbacks;\n logoutRoute?: string;\n};\n\nexport class CrossmintAuthClient extends CrossmintAuth {\n private callbacks: CrossmintAuthClientCallbacks;\n private refreshTask: CancellableTask | null = null;\n private refreshPromise: Promise<AuthMaterialWithUser> | null = null;\n private logoutRoute: string | null;\n\n private constructor(crossmint: Crossmint, apiClient: CrossmintApiClient, config: CrossmintAuthClientConfig = {}) {\n super(crossmint, apiClient, config);\n this.callbacks = config.callbacks ?? {};\n this.logoutRoute = config.logoutRoute ?? null;\n }\n\n public static from(crossmint: Crossmint, config: CrossmintAuthClientConfig = {}): CrossmintAuthClient {\n const authClient = new CrossmintAuthClient(crossmint, CrossmintAuth.defaultApiClient(crossmint), config);\n // In case an instance is created on the server, we can't refresh as this stores cookies\n if (typeof window !== \"undefined\") {\n authClient.handleRefreshAuthMaterial();\n }\n return authClient;\n }\n\n public async getUser() {\n try {\n const response = await this.apiClient.get(`api/${CROSSMINT_API_VERSION}/sdk/auth/user`, {\n headers: { \"Content-Type\": \"application/json\" },\n });\n\n if (!response.ok) {\n throw await response.text();\n }\n\n return await response.json();\n } catch (error) {\n throw new CrossmintAuthenticationError(\n `Failed to fetch user: ${error instanceof Error ? error.message : \"Unknown error\"}`\n );\n }\n }\n\n public storeAuthMaterial(authMaterial: AuthMaterialWithUser) {\n setCookie(SESSION_PREFIX, authMaterial.jwt);\n setCookie(REFRESH_TOKEN_PREFIX, authMaterial.refreshToken.secret, authMaterial.refreshToken.expiresAt);\n }\n\n public async logout() {\n // Store the old refresh token to pass it to the logout route before deleting the cookies\n const oldRefreshToken = getCookie(REFRESH_TOKEN_PREFIX);\n\n // Even if there's a server error, we want to clear the cookies and we do it first to load faster\n deleteCookie(REFRESH_TOKEN_PREFIX);\n deleteCookie(SESSION_PREFIX);\n this.callbacks.onLogout?.();\n try {\n if (this.logoutRoute != null) {\n await this.logoutFromCustomRoute();\n } else if (oldRefreshToken != null) {\n await this.logoutFromDefaultRoute(oldRefreshToken);\n }\n } catch (error) {\n console.error(error);\n }\n }\n\n public async handleRefreshAuthMaterial(refreshTokenSecret?: string): Promise<void> {\n const refreshToken = refreshTokenSecret ?? getCookie(REFRESH_TOKEN_PREFIX);\n // If there is a custom refresh route, that endpoint will fetch the cookies itself\n if (refreshToken == null && this.refreshRoute == null) {\n return;\n }\n\n try {\n // Create new refresh promise if none exists\n if (this.refreshPromise == null) {\n this.refreshPromise = this.refreshAuthMaterial(refreshToken);\n }\n const authMaterial = await this.refreshPromise;\n\n // If a custom refresh route is set, storing in cookies is handled in the server\n if (this.refreshRoute == null) {\n this.storeAuthMaterial(authMaterial);\n }\n\n this.callbacks.onTokenRefresh?.(authMaterial);\n\n this.scheduleNextRefresh(authMaterial.jwt);\n } catch (error) {\n console.error(error);\n this.logout();\n } finally {\n this.refreshPromise = null;\n }\n }\n\n public async getOAuthUrl(provider: OAuthProvider) {\n try {\n const response = await this.apiClient.get(`${AUTH_SDK_ROOT_ENDPOINT}/social/${provider}/start`, {\n headers: { \"Content-Type\": \"application/json\" },\n });\n\n if (!response.ok) {\n throw await response.text();\n }\n\n const data = await response.json();\n return data.oauthUrl;\n } catch (error) {\n throw new CrossmintAuthenticationError(\n `Failed to get OAuth URL for provider ${provider}: ${error instanceof Error ? error.message : \"Unknown error\"}`\n );\n }\n }\n\n public async sendEmailOtp(email: string) {\n try {\n const response = await this.apiClient.post(`${AUTH_SDK_ROOT_ENDPOINT}/otps/send`, {\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ email }),\n });\n\n if (!response.ok) {\n throw await response.text();\n }\n\n return await response.json();\n } catch (error) {\n throw new CrossmintAuthenticationError(\n `Failed to send email OTP: ${error instanceof Error ? error.message : \"Unknown error\"}`\n );\n }\n }\n\n public async confirmEmailOtp(email: string, emailId: string, token: string) {\n try {\n const queryParams = new URLSearchParams({\n email,\n signinAuthenticationMethod: \"email\",\n token,\n locale: \"en\",\n state: emailId,\n });\n\n const response = await this.apiClient.post(`${AUTH_SDK_ROOT_ENDPOINT}/authenticate?${queryParams}`, {\n headers: { \"Content-Type\": \"application/json\" },\n });\n\n if (!response.ok) {\n throw await response.text();\n }\n\n const resData = await response.json();\n return resData.oneTimeSecret;\n } catch (error) {\n throw new CrossmintAuthenticationError(\n `Failed to confirm email OTP: ${error instanceof Error ? error.message : \"Unknown error\"}`\n );\n }\n }\n\n public async signInWithFarcaster(data: UseSignInData) {\n try {\n const queryParams = new URLSearchParams({\n signinAuthenticationMethod: \"farcaster\",\n callbackUrl: `${this.apiClient.baseUrl}/${AUTH_SDK_ROOT_ENDPOINT}/callback`,\n });\n\n const response = await this.apiClient.post(`${AUTH_SDK_ROOT_ENDPOINT}/authenticate?${queryParams}`, {\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n ...data,\n domain: data.signatureParams.domain,\n redirect: true,\n callbackUrl: `${this.apiClient.baseUrl}/${AUTH_SDK_ROOT_ENDPOINT}/callback`,\n }),\n });\n\n if (!response.ok) {\n throw await response.text();\n }\n\n const resData = await response.json();\n return resData.oneTimeSecret;\n } catch (error) {\n throw new CrossmintAuthenticationError(\n `Failed to sign in with Farcaster: ${error instanceof Error ? error.message : \"Unknown error\"}`\n );\n }\n }\n\n public async signInWithSmartWallet(address: string) {\n try {\n const queryParams = new URLSearchParams({ signinAuthenticationMethod: \"evm\" });\n const response = await this.apiClient.post(\n `${AUTH_SDK_ROOT_ENDPOINT}/crypto_wallets/authenticate/start?${queryParams}`,\n {\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ walletAddress: address }),\n }\n );\n\n if (!response.ok) {\n throw await response.text();\n }\n\n return await response.json();\n } catch (error) {\n throw new CrossmintAuthenticationError(\n `Failed to initiate smart wallet sign in: ${error instanceof Error ? error.message : \"Unknown error\"}`\n );\n }\n }\n\n public async authenticateSmartWallet(address: string, signature: string) {\n try {\n const queryParams = new URLSearchParams({\n signinAuthenticationMethod: \"evm\",\n callbackUrl: `${this.apiClient.baseUrl}/${AUTH_SDK_ROOT_ENDPOINT}/callback`,\n });\n const response = await this.apiClient.post(\n `${AUTH_SDK_ROOT_ENDPOINT}/crypto_wallets/authenticate?${queryParams}`,\n {\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ walletAddress: address, signature }),\n }\n );\n\n if (!response.ok) {\n throw await response.text();\n }\n\n return await response.json();\n } catch (error) {\n throw new CrossmintAuthenticationError(\n `Failed to authenticate smart wallet: ${error instanceof Error ? error.message : \"Unknown error\"}`\n );\n }\n }\n\n private async logoutFromCustomRoute(): Promise<Response> {\n if (!this.logoutRoute) {\n throw new Error(\"Custom logout route is not set\");\n }\n\n return await fetch(this.logoutRoute, { method: \"POST\" });\n }\n\n private scheduleNextRefresh(jwt: string): void {\n const jwtExpiration = getJWTExpiration(jwt);\n if (!jwtExpiration) {\n throw new Error(\"Invalid JWT\");\n }\n\n const currentTime = Date.now() / 1000;\n const timeToExpire = jwtExpiration - currentTime - TIME_BEFORE_EXPIRING_JWT_IN_SECONDS;\n\n if (timeToExpire > 0) {\n const endTime = Date.now() + timeToExpire * 1000;\n this.cancelScheduledRefresh();\n this.refreshTask = queueTask(() => this.handleRefreshAuthMaterial(), endTime);\n }\n }\n\n private cancelScheduledRefresh(): void {\n if (this.refreshTask) {\n this.refreshTask.cancel();\n this.refreshTask = null;\n }\n }\n}\n\ntype CrossmintAuthClientCallbacks = {\n onTokenRefresh?: (authMaterial: AuthMaterialWithUser) => void;\n onLogout?: () => void;\n};\n"]}
|
package/dist/chunk-JPRRZPBL.js
DELETED
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
var __defProp = Object.defineProperty;
|
|
2
|
-
var __defProps = Object.defineProperties;
|
|
3
|
-
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
|
|
4
|
-
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
5
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
-
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
7
|
-
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
8
|
-
var __spreadValues = (a, b) => {
|
|
9
|
-
for (var prop in b || (b = {}))
|
|
10
|
-
if (__hasOwnProp.call(b, prop))
|
|
11
|
-
__defNormalProp(a, prop, b[prop]);
|
|
12
|
-
if (__getOwnPropSymbols)
|
|
13
|
-
for (var prop of __getOwnPropSymbols(b)) {
|
|
14
|
-
if (__propIsEnum.call(b, prop))
|
|
15
|
-
__defNormalProp(a, prop, b[prop]);
|
|
16
|
-
}
|
|
17
|
-
return a;
|
|
18
|
-
};
|
|
19
|
-
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
|
|
20
|
-
var __async = (__this, __arguments, generator) => {
|
|
21
|
-
return new Promise((resolve, reject) => {
|
|
22
|
-
var fulfilled = (value) => {
|
|
23
|
-
try {
|
|
24
|
-
step(generator.next(value));
|
|
25
|
-
} catch (e) {
|
|
26
|
-
reject(e);
|
|
27
|
-
}
|
|
28
|
-
};
|
|
29
|
-
var rejected = (value) => {
|
|
30
|
-
try {
|
|
31
|
-
step(generator.throw(value));
|
|
32
|
-
} catch (e) {
|
|
33
|
-
reject(e);
|
|
34
|
-
}
|
|
35
|
-
};
|
|
36
|
-
var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
|
|
37
|
-
step((generator = generator.apply(__this, __arguments)).next());
|
|
38
|
-
});
|
|
39
|
-
};
|
|
40
|
-
|
|
41
|
-
export {
|
|
42
|
-
__spreadValues,
|
|
43
|
-
__spreadProps,
|
|
44
|
-
__async
|
|
45
|
-
};
|
|
46
|
-
//# sourceMappingURL=chunk-JPRRZPBL.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
package/dist/chunk-MLMLBCSI.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utils/jwt.ts"],"sourcesContent":["import { jwtDecode } from \"jwt-decode\";\n\nexport function getJWTExpiration(token: string) {\n const decoded = jwtDecode(token);\n return decoded.exp;\n}\n"],"mappings":";AAAA,SAAS,iBAAiB;AAEnB,SAAS,iBAAiB,OAAe;AAC5C,QAAM,UAAU,UAAU,KAAK;AAC/B,SAAO,QAAQ;AACnB;","names":[]}
|
package/dist/chunk-QY4RIGNM.cjs
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports, "__esModule", {value: true});// src/utils/jwt.ts
|
|
2
|
-
var _jwtdecode = require('jwt-decode');
|
|
3
|
-
function getJWTExpiration(token) {
|
|
4
|
-
const decoded = _jwtdecode.jwtDecode.call(void 0, token);
|
|
5
|
-
return decoded.exp;
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
exports.getJWTExpiration = getJWTExpiration;
|
|
11
|
-
//# sourceMappingURL=chunk-QY4RIGNM.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utils/jwt.ts"],"names":[],"mappings":";AAAA,SAAS,iBAAiB;AAEnB,SAAS,iBAAiB,OAAe;AAC5C,QAAM,UAAU,UAAU,KAAK;AAC/B,SAAO,QAAQ;AACnB","sourcesContent":["import { jwtDecode } from \"jwt-decode\";\n\nexport function getJWTExpiration(token: string) {\n const decoded = jwtDecode(token);\n return decoded.exp;\n}\n"]}
|
package/dist/chunk-SGSYRRRS.js
DELETED
|
@@ -1,275 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
TIME_BEFORE_EXPIRING_JWT_IN_SECONDS
|
|
3
|
-
} from "./chunk-BMYZMMVR.js";
|
|
4
|
-
import {
|
|
5
|
-
deleteCookie,
|
|
6
|
-
getCookie,
|
|
7
|
-
setCookie
|
|
8
|
-
} from "./chunk-5JXPQKM4.js";
|
|
9
|
-
import {
|
|
10
|
-
getJWTExpiration
|
|
11
|
-
} from "./chunk-MLMLBCSI.js";
|
|
12
|
-
import {
|
|
13
|
-
__async,
|
|
14
|
-
__spreadProps,
|
|
15
|
-
__spreadValues
|
|
16
|
-
} from "./chunk-JPRRZPBL.js";
|
|
17
|
-
|
|
18
|
-
// src/CrossmintAuthClient.ts
|
|
19
|
-
import {
|
|
20
|
-
AUTH_SDK_ROOT_ENDPOINT,
|
|
21
|
-
CROSSMINT_API_VERSION,
|
|
22
|
-
CrossmintAuth,
|
|
23
|
-
CrossmintAuthenticationError,
|
|
24
|
-
REFRESH_TOKEN_PREFIX,
|
|
25
|
-
SESSION_PREFIX
|
|
26
|
-
} from "@crossmint/common-sdk-auth";
|
|
27
|
-
import { queueTask } from "@crossmint/client-sdk-base";
|
|
28
|
-
var CrossmintAuthClient = class _CrossmintAuthClient extends CrossmintAuth {
|
|
29
|
-
constructor(crossmint, apiClient, config = {}) {
|
|
30
|
-
var _a, _b;
|
|
31
|
-
super(crossmint, apiClient, config);
|
|
32
|
-
this.refreshTask = null;
|
|
33
|
-
this.refreshPromise = null;
|
|
34
|
-
this.callbacks = (_a = config.callbacks) != null ? _a : {};
|
|
35
|
-
this.logoutRoute = (_b = config.logoutRoute) != null ? _b : null;
|
|
36
|
-
}
|
|
37
|
-
static from(crossmint, config = {}) {
|
|
38
|
-
const authClient = new _CrossmintAuthClient(crossmint, CrossmintAuth.defaultApiClient(crossmint), config);
|
|
39
|
-
if (typeof window !== "undefined") {
|
|
40
|
-
authClient.handleRefreshAuthMaterial();
|
|
41
|
-
}
|
|
42
|
-
return authClient;
|
|
43
|
-
}
|
|
44
|
-
getUser() {
|
|
45
|
-
return __async(this, null, function* () {
|
|
46
|
-
try {
|
|
47
|
-
const response = yield this.apiClient.get(`api/${CROSSMINT_API_VERSION}/sdk/auth/user`, {
|
|
48
|
-
headers: { "Content-Type": "application/json" }
|
|
49
|
-
});
|
|
50
|
-
if (!response.ok) {
|
|
51
|
-
throw yield response.text();
|
|
52
|
-
}
|
|
53
|
-
return yield response.json();
|
|
54
|
-
} catch (error) {
|
|
55
|
-
throw new CrossmintAuthenticationError(
|
|
56
|
-
`Failed to fetch user: ${error instanceof Error ? error.message : "Unknown error"}`
|
|
57
|
-
);
|
|
58
|
-
}
|
|
59
|
-
});
|
|
60
|
-
}
|
|
61
|
-
storeAuthMaterial(authMaterial) {
|
|
62
|
-
setCookie(SESSION_PREFIX, authMaterial.jwt);
|
|
63
|
-
setCookie(REFRESH_TOKEN_PREFIX, authMaterial.refreshToken.secret, authMaterial.refreshToken.expiresAt);
|
|
64
|
-
}
|
|
65
|
-
logout() {
|
|
66
|
-
return __async(this, null, function* () {
|
|
67
|
-
var _a, _b;
|
|
68
|
-
const oldRefreshToken = getCookie(REFRESH_TOKEN_PREFIX);
|
|
69
|
-
deleteCookie(REFRESH_TOKEN_PREFIX);
|
|
70
|
-
deleteCookie(SESSION_PREFIX);
|
|
71
|
-
(_b = (_a = this.callbacks).onLogout) == null ? void 0 : _b.call(_a);
|
|
72
|
-
try {
|
|
73
|
-
if (this.logoutRoute != null) {
|
|
74
|
-
yield this.logoutFromCustomRoute();
|
|
75
|
-
} else if (oldRefreshToken != null) {
|
|
76
|
-
yield this.logoutFromDefaultRoute(oldRefreshToken);
|
|
77
|
-
}
|
|
78
|
-
} catch (error) {
|
|
79
|
-
console.error(error);
|
|
80
|
-
}
|
|
81
|
-
});
|
|
82
|
-
}
|
|
83
|
-
handleRefreshAuthMaterial(refreshTokenSecret) {
|
|
84
|
-
return __async(this, null, function* () {
|
|
85
|
-
var _a, _b;
|
|
86
|
-
const refreshToken = refreshTokenSecret != null ? refreshTokenSecret : getCookie(REFRESH_TOKEN_PREFIX);
|
|
87
|
-
if (refreshToken == null && this.refreshRoute == null) {
|
|
88
|
-
return;
|
|
89
|
-
}
|
|
90
|
-
try {
|
|
91
|
-
if (this.refreshPromise == null) {
|
|
92
|
-
this.refreshPromise = this.refreshAuthMaterial(refreshToken);
|
|
93
|
-
}
|
|
94
|
-
const authMaterial = yield this.refreshPromise;
|
|
95
|
-
if (this.refreshRoute == null) {
|
|
96
|
-
this.storeAuthMaterial(authMaterial);
|
|
97
|
-
}
|
|
98
|
-
(_b = (_a = this.callbacks).onTokenRefresh) == null ? void 0 : _b.call(_a, authMaterial);
|
|
99
|
-
this.scheduleNextRefresh(authMaterial.jwt);
|
|
100
|
-
} catch (error) {
|
|
101
|
-
console.error(error);
|
|
102
|
-
this.logout();
|
|
103
|
-
} finally {
|
|
104
|
-
this.refreshPromise = null;
|
|
105
|
-
}
|
|
106
|
-
});
|
|
107
|
-
}
|
|
108
|
-
getOAuthUrl(provider) {
|
|
109
|
-
return __async(this, null, function* () {
|
|
110
|
-
try {
|
|
111
|
-
const response = yield this.apiClient.get(`${AUTH_SDK_ROOT_ENDPOINT}/social/${provider}/start`, {
|
|
112
|
-
headers: { "Content-Type": "application/json" }
|
|
113
|
-
});
|
|
114
|
-
if (!response.ok) {
|
|
115
|
-
throw yield response.text();
|
|
116
|
-
}
|
|
117
|
-
const data = yield response.json();
|
|
118
|
-
return data.oauthUrl;
|
|
119
|
-
} catch (error) {
|
|
120
|
-
throw new CrossmintAuthenticationError(
|
|
121
|
-
`Failed to get OAuth URL for provider ${provider}: ${error instanceof Error ? error.message : "Unknown error"}`
|
|
122
|
-
);
|
|
123
|
-
}
|
|
124
|
-
});
|
|
125
|
-
}
|
|
126
|
-
sendEmailOtp(email) {
|
|
127
|
-
return __async(this, null, function* () {
|
|
128
|
-
try {
|
|
129
|
-
const response = yield this.apiClient.post(`${AUTH_SDK_ROOT_ENDPOINT}/otps/send`, {
|
|
130
|
-
headers: { "Content-Type": "application/json" },
|
|
131
|
-
body: JSON.stringify({ email })
|
|
132
|
-
});
|
|
133
|
-
if (!response.ok) {
|
|
134
|
-
throw yield response.text();
|
|
135
|
-
}
|
|
136
|
-
return yield response.json();
|
|
137
|
-
} catch (error) {
|
|
138
|
-
throw new CrossmintAuthenticationError(
|
|
139
|
-
`Failed to send email OTP: ${error instanceof Error ? error.message : "Unknown error"}`
|
|
140
|
-
);
|
|
141
|
-
}
|
|
142
|
-
});
|
|
143
|
-
}
|
|
144
|
-
confirmEmailOtp(email, emailId, token) {
|
|
145
|
-
return __async(this, null, function* () {
|
|
146
|
-
try {
|
|
147
|
-
const queryParams = new URLSearchParams({
|
|
148
|
-
email,
|
|
149
|
-
signinAuthenticationMethod: "email",
|
|
150
|
-
token,
|
|
151
|
-
locale: "en",
|
|
152
|
-
state: emailId
|
|
153
|
-
});
|
|
154
|
-
const response = yield this.apiClient.post(`${AUTH_SDK_ROOT_ENDPOINT}/authenticate?${queryParams}`, {
|
|
155
|
-
headers: { "Content-Type": "application/json" }
|
|
156
|
-
});
|
|
157
|
-
if (!response.ok) {
|
|
158
|
-
throw yield response.text();
|
|
159
|
-
}
|
|
160
|
-
const resData = yield response.json();
|
|
161
|
-
return resData.oneTimeSecret;
|
|
162
|
-
} catch (error) {
|
|
163
|
-
throw new CrossmintAuthenticationError(
|
|
164
|
-
`Failed to confirm email OTP: ${error instanceof Error ? error.message : "Unknown error"}`
|
|
165
|
-
);
|
|
166
|
-
}
|
|
167
|
-
});
|
|
168
|
-
}
|
|
169
|
-
signInWithFarcaster(data) {
|
|
170
|
-
return __async(this, null, function* () {
|
|
171
|
-
try {
|
|
172
|
-
const queryParams = new URLSearchParams({
|
|
173
|
-
signinAuthenticationMethod: "farcaster",
|
|
174
|
-
callbackUrl: `${this.apiClient.baseUrl}/${AUTH_SDK_ROOT_ENDPOINT}/callback`
|
|
175
|
-
});
|
|
176
|
-
const response = yield this.apiClient.post(`${AUTH_SDK_ROOT_ENDPOINT}/authenticate?${queryParams}`, {
|
|
177
|
-
headers: { "Content-Type": "application/json" },
|
|
178
|
-
body: JSON.stringify(__spreadProps(__spreadValues({}, data), {
|
|
179
|
-
domain: data.signatureParams.domain,
|
|
180
|
-
redirect: true,
|
|
181
|
-
callbackUrl: `${this.apiClient.baseUrl}/${AUTH_SDK_ROOT_ENDPOINT}/callback`
|
|
182
|
-
}))
|
|
183
|
-
});
|
|
184
|
-
if (!response.ok) {
|
|
185
|
-
throw yield response.text();
|
|
186
|
-
}
|
|
187
|
-
const resData = yield response.json();
|
|
188
|
-
return resData.oneTimeSecret;
|
|
189
|
-
} catch (error) {
|
|
190
|
-
throw new CrossmintAuthenticationError(
|
|
191
|
-
`Failed to sign in with Farcaster: ${error instanceof Error ? error.message : "Unknown error"}`
|
|
192
|
-
);
|
|
193
|
-
}
|
|
194
|
-
});
|
|
195
|
-
}
|
|
196
|
-
signInWithSmartWallet(address) {
|
|
197
|
-
return __async(this, null, function* () {
|
|
198
|
-
try {
|
|
199
|
-
const queryParams = new URLSearchParams({ signinAuthenticationMethod: "evm" });
|
|
200
|
-
const response = yield this.apiClient.post(
|
|
201
|
-
`${AUTH_SDK_ROOT_ENDPOINT}/crypto_wallets/authenticate/start?${queryParams}`,
|
|
202
|
-
{
|
|
203
|
-
headers: { "Content-Type": "application/json" },
|
|
204
|
-
body: JSON.stringify({ walletAddress: address })
|
|
205
|
-
}
|
|
206
|
-
);
|
|
207
|
-
if (!response.ok) {
|
|
208
|
-
throw yield response.text();
|
|
209
|
-
}
|
|
210
|
-
return yield response.json();
|
|
211
|
-
} catch (error) {
|
|
212
|
-
throw new CrossmintAuthenticationError(
|
|
213
|
-
`Failed to initiate smart wallet sign in: ${error instanceof Error ? error.message : "Unknown error"}`
|
|
214
|
-
);
|
|
215
|
-
}
|
|
216
|
-
});
|
|
217
|
-
}
|
|
218
|
-
authenticateSmartWallet(address, signature) {
|
|
219
|
-
return __async(this, null, function* () {
|
|
220
|
-
try {
|
|
221
|
-
const queryParams = new URLSearchParams({
|
|
222
|
-
signinAuthenticationMethod: "evm",
|
|
223
|
-
callbackUrl: `${this.apiClient.baseUrl}/${AUTH_SDK_ROOT_ENDPOINT}/callback`
|
|
224
|
-
});
|
|
225
|
-
const response = yield this.apiClient.post(
|
|
226
|
-
`${AUTH_SDK_ROOT_ENDPOINT}/crypto_wallets/authenticate?${queryParams}`,
|
|
227
|
-
{
|
|
228
|
-
headers: { "Content-Type": "application/json" },
|
|
229
|
-
body: JSON.stringify({ walletAddress: address, signature })
|
|
230
|
-
}
|
|
231
|
-
);
|
|
232
|
-
if (!response.ok) {
|
|
233
|
-
throw yield response.text();
|
|
234
|
-
}
|
|
235
|
-
return yield response.json();
|
|
236
|
-
} catch (error) {
|
|
237
|
-
throw new CrossmintAuthenticationError(
|
|
238
|
-
`Failed to authenticate smart wallet: ${error instanceof Error ? error.message : "Unknown error"}`
|
|
239
|
-
);
|
|
240
|
-
}
|
|
241
|
-
});
|
|
242
|
-
}
|
|
243
|
-
logoutFromCustomRoute() {
|
|
244
|
-
return __async(this, null, function* () {
|
|
245
|
-
if (!this.logoutRoute) {
|
|
246
|
-
throw new Error("Custom logout route is not set");
|
|
247
|
-
}
|
|
248
|
-
return yield fetch(this.logoutRoute, { method: "POST" });
|
|
249
|
-
});
|
|
250
|
-
}
|
|
251
|
-
scheduleNextRefresh(jwt) {
|
|
252
|
-
const jwtExpiration = getJWTExpiration(jwt);
|
|
253
|
-
if (!jwtExpiration) {
|
|
254
|
-
throw new Error("Invalid JWT");
|
|
255
|
-
}
|
|
256
|
-
const currentTime = Date.now() / 1e3;
|
|
257
|
-
const timeToExpire = jwtExpiration - currentTime - TIME_BEFORE_EXPIRING_JWT_IN_SECONDS;
|
|
258
|
-
if (timeToExpire > 0) {
|
|
259
|
-
const endTime = Date.now() + timeToExpire * 1e3;
|
|
260
|
-
this.cancelScheduledRefresh();
|
|
261
|
-
this.refreshTask = queueTask(() => this.handleRefreshAuthMaterial(), endTime);
|
|
262
|
-
}
|
|
263
|
-
}
|
|
264
|
-
cancelScheduledRefresh() {
|
|
265
|
-
if (this.refreshTask) {
|
|
266
|
-
this.refreshTask.cancel();
|
|
267
|
-
this.refreshTask = null;
|
|
268
|
-
}
|
|
269
|
-
}
|
|
270
|
-
};
|
|
271
|
-
|
|
272
|
-
export {
|
|
273
|
-
CrossmintAuthClient
|
|
274
|
-
};
|
|
275
|
-
//# sourceMappingURL=chunk-SGSYRRRS.js.map
|