@blocklet/js-sdk 1.16.26-beta-351de484 → 1.16.26-beta-cca12425
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/index.cjs +183 -29
- package/dist/index.d.cts +10 -2
- package/dist/index.d.mts +10 -2
- package/dist/index.d.ts +10 -2
- package/dist/index.mjs +183 -31
- package/package.json +3 -3
package/dist/index.cjs
CHANGED
|
@@ -115,8 +115,11 @@ const sleep = (time = 0) => {
|
|
|
115
115
|
}, time);
|
|
116
116
|
});
|
|
117
117
|
};
|
|
118
|
+
const getBearerToken = (token) => {
|
|
119
|
+
return `Bearer ${encodeURIComponent(token)}`;
|
|
120
|
+
};
|
|
118
121
|
|
|
119
|
-
async function sleepForLoading(config, lazyTime) {
|
|
122
|
+
async function sleepForLoading(config, lazyTime = 300) {
|
|
120
123
|
config.metaData.endTime = +/* @__PURE__ */ new Date();
|
|
121
124
|
const { startTime, endTime } = config.metaData;
|
|
122
125
|
const timeDiff = endTime - startTime;
|
|
@@ -124,15 +127,15 @@ async function sleepForLoading(config, lazyTime) {
|
|
|
124
127
|
await sleep(lazyTime - timeDiff);
|
|
125
128
|
delete config.metaData;
|
|
126
129
|
}
|
|
127
|
-
const
|
|
130
|
+
const createAxios$1 = (options, requestParams) => {
|
|
128
131
|
const instance = axios__default.create({
|
|
129
132
|
...options,
|
|
130
133
|
headers: {
|
|
131
|
-
...options
|
|
134
|
+
...options?.headers,
|
|
132
135
|
"x-blocklet-js-sdk-version": version
|
|
133
136
|
}
|
|
134
137
|
});
|
|
135
|
-
if (lazy) {
|
|
138
|
+
if (requestParams?.lazy) {
|
|
136
139
|
instance.interceptors.request.use(
|
|
137
140
|
(config) => {
|
|
138
141
|
config.metaData = { startTime: +/* @__PURE__ */ new Date() };
|
|
@@ -142,34 +145,32 @@ const createApi = (options = {}, { lazy = false, lazyTime = 300 } = {}) => {
|
|
|
142
145
|
);
|
|
143
146
|
instance.interceptors.response.use(
|
|
144
147
|
async (res) => {
|
|
145
|
-
await sleepForLoading(res.config, lazyTime);
|
|
148
|
+
await sleepForLoading(res.config, requestParams?.lazyTime);
|
|
146
149
|
return res;
|
|
147
150
|
},
|
|
148
151
|
async (err) => {
|
|
149
|
-
await sleepForLoading(err.response.config, lazyTime);
|
|
152
|
+
await sleepForLoading(err.response.config, requestParams?.lazyTime);
|
|
150
153
|
return Promise.reject(err);
|
|
151
154
|
}
|
|
152
155
|
);
|
|
153
156
|
}
|
|
154
157
|
return instance;
|
|
155
158
|
};
|
|
156
|
-
|
|
157
|
-
const baseURL = constant.WELLKNOWN_SERVICE_PATH_PREFIX;
|
|
158
|
-
async function renewRefreshToken(refreshToken) {
|
|
159
|
+
async function renewRefreshToken$1(refreshToken) {
|
|
159
160
|
if (!refreshToken) {
|
|
160
161
|
throw new Error("Refresh token not found");
|
|
161
162
|
}
|
|
162
|
-
const refreshApi =
|
|
163
|
-
baseURL,
|
|
163
|
+
const refreshApi = createAxios$1({
|
|
164
|
+
baseURL: constant.WELLKNOWN_SERVICE_PATH_PREFIX,
|
|
164
165
|
timeout: 10 * 1e3,
|
|
165
166
|
headers: {
|
|
166
|
-
authorization:
|
|
167
|
+
authorization: getBearerToken(refreshToken)
|
|
167
168
|
}
|
|
168
169
|
});
|
|
169
|
-
const { data } = await refreshApi.post("api/did/refreshSession");
|
|
170
|
+
const { data } = await refreshApi.post("/api/did/refreshSession");
|
|
170
171
|
return data;
|
|
171
172
|
}
|
|
172
|
-
function createRequest({
|
|
173
|
+
function createRequest$1({
|
|
173
174
|
getSessionToken,
|
|
174
175
|
setSessionToken,
|
|
175
176
|
removeSessionToken,
|
|
@@ -178,19 +179,21 @@ function createRequest({
|
|
|
178
179
|
removeRefreshToken,
|
|
179
180
|
onRefreshTokenError,
|
|
180
181
|
onRefreshTokenSuccess
|
|
181
|
-
},
|
|
182
|
+
}, requestOptions, requestParams) {
|
|
182
183
|
let refreshingTokenRequest = null;
|
|
183
|
-
const service =
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
184
|
+
const service = createAxios$1(
|
|
185
|
+
{
|
|
186
|
+
timeout: 30 * 1e3,
|
|
187
|
+
...requestOptions
|
|
188
|
+
},
|
|
189
|
+
requestParams
|
|
190
|
+
);
|
|
188
191
|
service.interceptors.request.use(
|
|
189
192
|
async (config) => {
|
|
190
193
|
if (!Cookie__default.get(constant.SESSION_TOKEN_STORAGE_KEY)) {
|
|
191
194
|
const token = getSessionToken();
|
|
192
195
|
if (token) {
|
|
193
|
-
config.headers.authorization =
|
|
196
|
+
config.headers.authorization = getBearerToken(token);
|
|
194
197
|
}
|
|
195
198
|
}
|
|
196
199
|
if (refreshingTokenRequest) {
|
|
@@ -208,7 +211,7 @@ function createRequest({
|
|
|
208
211
|
if (error?.response?.status === 401 && !originalRequest._retry) {
|
|
209
212
|
originalRequest._retry = true;
|
|
210
213
|
if (!refreshingTokenRequest) {
|
|
211
|
-
refreshingTokenRequest = renewRefreshToken(getRefreshToken());
|
|
214
|
+
refreshingTokenRequest = renewRefreshToken$1(getRefreshToken());
|
|
212
215
|
}
|
|
213
216
|
try {
|
|
214
217
|
const tokenData = await refreshingTokenRequest;
|
|
@@ -235,6 +238,110 @@ function createRequest({
|
|
|
235
238
|
return service;
|
|
236
239
|
}
|
|
237
240
|
|
|
241
|
+
function createFetch$1(globalOptions = {}, requestParams) {
|
|
242
|
+
return async (input, options) => {
|
|
243
|
+
const startAt = Date.now();
|
|
244
|
+
const request = fetch(input, {
|
|
245
|
+
...globalOptions,
|
|
246
|
+
...options,
|
|
247
|
+
headers: {
|
|
248
|
+
...globalOptions?.headers,
|
|
249
|
+
...options?.headers,
|
|
250
|
+
"x-blocklet-js-sdk-version": version
|
|
251
|
+
}
|
|
252
|
+
});
|
|
253
|
+
try {
|
|
254
|
+
return request;
|
|
255
|
+
} catch (error) {
|
|
256
|
+
throw error;
|
|
257
|
+
} finally {
|
|
258
|
+
const endAt = Date.now();
|
|
259
|
+
if (requestParams?.lazy) {
|
|
260
|
+
const lazyTime = requestParams?.lazyTime ?? 300;
|
|
261
|
+
const timeDiff = endAt - startAt;
|
|
262
|
+
if (timeDiff < lazyTime)
|
|
263
|
+
await sleep(lazyTime - timeDiff);
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
};
|
|
267
|
+
}
|
|
268
|
+
async function renewRefreshToken(refreshToken) {
|
|
269
|
+
if (!refreshToken) {
|
|
270
|
+
throw new Error("Refresh token not found");
|
|
271
|
+
}
|
|
272
|
+
const refreshApi = createFetch$1();
|
|
273
|
+
const res = await refreshApi(ufo.joinURL(constant.WELLKNOWN_SERVICE_PATH_PREFIX, "/api/did/refreshSession"), {
|
|
274
|
+
method: "POST",
|
|
275
|
+
headers: {
|
|
276
|
+
authorization: getBearerToken(refreshToken)
|
|
277
|
+
}
|
|
278
|
+
});
|
|
279
|
+
const data = await res.json();
|
|
280
|
+
return data;
|
|
281
|
+
}
|
|
282
|
+
function createRequest({
|
|
283
|
+
baseURL,
|
|
284
|
+
getSessionToken,
|
|
285
|
+
setSessionToken,
|
|
286
|
+
removeSessionToken,
|
|
287
|
+
getRefreshToken,
|
|
288
|
+
setRefreshToken,
|
|
289
|
+
removeRefreshToken,
|
|
290
|
+
onRefreshTokenError,
|
|
291
|
+
onRefreshTokenSuccess
|
|
292
|
+
}, requestOptions, requestParams) {
|
|
293
|
+
let refreshingTokenRequest = null;
|
|
294
|
+
const service = createFetch$1(requestOptions, requestParams);
|
|
295
|
+
return async (input, options) => {
|
|
296
|
+
let authorization;
|
|
297
|
+
const finalUrl = typeof input === "string" ? ufo.joinURL(baseURL, input) : input;
|
|
298
|
+
if (!Cookie__default.get(constant.SESSION_TOKEN_STORAGE_KEY)) {
|
|
299
|
+
const token = getSessionToken();
|
|
300
|
+
if (token) {
|
|
301
|
+
authorization = getBearerToken(token);
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
if (refreshingTokenRequest) {
|
|
305
|
+
await refreshingTokenRequest;
|
|
306
|
+
}
|
|
307
|
+
const res = await service(finalUrl, {
|
|
308
|
+
...options,
|
|
309
|
+
headers: {
|
|
310
|
+
...options?.headers,
|
|
311
|
+
authorization
|
|
312
|
+
}
|
|
313
|
+
});
|
|
314
|
+
if (!res.ok && res.status === 401) {
|
|
315
|
+
refreshingTokenRequest = renewRefreshToken(getRefreshToken());
|
|
316
|
+
try {
|
|
317
|
+
const tokenData = await refreshingTokenRequest;
|
|
318
|
+
setSessionToken(tokenData.nextToken);
|
|
319
|
+
setRefreshToken(tokenData.nextRefreshToken);
|
|
320
|
+
if (typeof onRefreshTokenSuccess === "function") {
|
|
321
|
+
onRefreshTokenSuccess(tokenData);
|
|
322
|
+
}
|
|
323
|
+
return service(finalUrl, {
|
|
324
|
+
...options,
|
|
325
|
+
headers: {
|
|
326
|
+
...options?.headers,
|
|
327
|
+
authorization
|
|
328
|
+
}
|
|
329
|
+
});
|
|
330
|
+
} catch (error) {
|
|
331
|
+
removeSessionToken();
|
|
332
|
+
removeRefreshToken();
|
|
333
|
+
if (typeof onRefreshTokenError === "function") {
|
|
334
|
+
onRefreshTokenError(error);
|
|
335
|
+
}
|
|
336
|
+
return Promise.reject(error);
|
|
337
|
+
} finally {
|
|
338
|
+
refreshingTokenRequest = null;
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
return res;
|
|
342
|
+
};
|
|
343
|
+
}
|
|
344
|
+
|
|
238
345
|
var __defProp = Object.defineProperty;
|
|
239
346
|
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
240
347
|
var __publicField = (obj, key, value) => {
|
|
@@ -248,7 +355,34 @@ class BlockletSDK {
|
|
|
248
355
|
__publicField(this, "userSession");
|
|
249
356
|
__publicField(this, "token");
|
|
250
357
|
const tokenService = new TokenService();
|
|
251
|
-
const
|
|
358
|
+
const internalApi = createRequest$1(
|
|
359
|
+
{
|
|
360
|
+
getSessionToken: tokenService.getSessionToken,
|
|
361
|
+
setSessionToken: tokenService.setSessionToken,
|
|
362
|
+
removeSessionToken: tokenService.removeSessionToken,
|
|
363
|
+
getRefreshToken: tokenService.getRefreshToken,
|
|
364
|
+
setRefreshToken: tokenService.setRefreshToken,
|
|
365
|
+
removeRefreshToken: tokenService.removeRefreshToken,
|
|
366
|
+
onRefreshTokenError: () => {
|
|
367
|
+
console.error("Failed to refresh token");
|
|
368
|
+
},
|
|
369
|
+
onRefreshTokenSuccess: () => {
|
|
370
|
+
}
|
|
371
|
+
},
|
|
372
|
+
{
|
|
373
|
+
baseURL: constant.WELLKNOWN_SERVICE_PATH_PREFIX
|
|
374
|
+
}
|
|
375
|
+
);
|
|
376
|
+
this.user = new AuthService({ api: internalApi });
|
|
377
|
+
this.userSession = new UserSessionService({ api: internalApi });
|
|
378
|
+
this.token = tokenService;
|
|
379
|
+
this.api = internalApi;
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
function createAxios(config, requestParams) {
|
|
383
|
+
const tokenService = new TokenService();
|
|
384
|
+
return createRequest$1(
|
|
385
|
+
{
|
|
252
386
|
getSessionToken: tokenService.getSessionToken,
|
|
253
387
|
setSessionToken: tokenService.setSessionToken,
|
|
254
388
|
removeSessionToken: tokenService.removeSessionToken,
|
|
@@ -260,12 +394,32 @@ class BlockletSDK {
|
|
|
260
394
|
},
|
|
261
395
|
onRefreshTokenSuccess: () => {
|
|
262
396
|
}
|
|
263
|
-
}
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
397
|
+
},
|
|
398
|
+
config,
|
|
399
|
+
requestParams
|
|
400
|
+
);
|
|
401
|
+
}
|
|
402
|
+
function createFetch(options, requestParams) {
|
|
403
|
+
const tokenService = new TokenService();
|
|
404
|
+
return createRequest(
|
|
405
|
+
{
|
|
406
|
+
getSessionToken: tokenService.getSessionToken,
|
|
407
|
+
setSessionToken: tokenService.setSessionToken,
|
|
408
|
+
removeSessionToken: tokenService.removeSessionToken,
|
|
409
|
+
getRefreshToken: tokenService.getRefreshToken,
|
|
410
|
+
setRefreshToken: tokenService.setRefreshToken,
|
|
411
|
+
removeRefreshToken: tokenService.removeRefreshToken,
|
|
412
|
+
onRefreshTokenError: () => {
|
|
413
|
+
console.error("Failed to refresh token");
|
|
414
|
+
},
|
|
415
|
+
onRefreshTokenSuccess: () => {
|
|
416
|
+
}
|
|
417
|
+
},
|
|
418
|
+
options,
|
|
419
|
+
requestParams
|
|
420
|
+
);
|
|
269
421
|
}
|
|
270
422
|
|
|
271
423
|
exports.BlockletSDK = BlockletSDK;
|
|
424
|
+
exports.createAxios = createAxios;
|
|
425
|
+
exports.createFetch = createFetch;
|
package/dist/index.d.cts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import
|
|
1
|
+
import * as axios from 'axios';
|
|
2
|
+
import { Axios, AxiosRequestConfig } from 'axios';
|
|
2
3
|
|
|
3
4
|
type UserPublicInfo = {
|
|
4
5
|
avatar: string;
|
|
@@ -94,6 +95,11 @@ declare class UserSessionService {
|
|
|
94
95
|
}): Promise<UserSession[]>;
|
|
95
96
|
}
|
|
96
97
|
|
|
98
|
+
type RequestParams = {
|
|
99
|
+
lazy?: boolean;
|
|
100
|
+
lazyTime?: number;
|
|
101
|
+
};
|
|
102
|
+
|
|
97
103
|
declare class BlockletSDK {
|
|
98
104
|
api: Axios;
|
|
99
105
|
user: AuthService;
|
|
@@ -101,5 +107,7 @@ declare class BlockletSDK {
|
|
|
101
107
|
token: TokenService;
|
|
102
108
|
constructor();
|
|
103
109
|
}
|
|
110
|
+
declare function createAxios(config?: AxiosRequestConfig, requestParams?: RequestParams): axios.AxiosInstance;
|
|
111
|
+
declare function createFetch(options?: RequestInit, requestParams?: RequestParams): (input: string | Request | URL, options?: RequestInit) => Promise<Response>;
|
|
104
112
|
|
|
105
|
-
export { AuthService, BlockletSDK, type NotificationConfig, type PrivacyConfig, TokenService, type UserPublicInfo, type UserSession, UserSessionService, type UserSessionUser, type Webhook };
|
|
113
|
+
export { AuthService, BlockletSDK, type NotificationConfig, type PrivacyConfig, TokenService, type UserPublicInfo, type UserSession, UserSessionService, type UserSessionUser, type Webhook, createAxios, createFetch };
|
package/dist/index.d.mts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import
|
|
1
|
+
import * as axios from 'axios';
|
|
2
|
+
import { Axios, AxiosRequestConfig } from 'axios';
|
|
2
3
|
|
|
3
4
|
type UserPublicInfo = {
|
|
4
5
|
avatar: string;
|
|
@@ -94,6 +95,11 @@ declare class UserSessionService {
|
|
|
94
95
|
}): Promise<UserSession[]>;
|
|
95
96
|
}
|
|
96
97
|
|
|
98
|
+
type RequestParams = {
|
|
99
|
+
lazy?: boolean;
|
|
100
|
+
lazyTime?: number;
|
|
101
|
+
};
|
|
102
|
+
|
|
97
103
|
declare class BlockletSDK {
|
|
98
104
|
api: Axios;
|
|
99
105
|
user: AuthService;
|
|
@@ -101,5 +107,7 @@ declare class BlockletSDK {
|
|
|
101
107
|
token: TokenService;
|
|
102
108
|
constructor();
|
|
103
109
|
}
|
|
110
|
+
declare function createAxios(config?: AxiosRequestConfig, requestParams?: RequestParams): axios.AxiosInstance;
|
|
111
|
+
declare function createFetch(options?: RequestInit, requestParams?: RequestParams): (input: string | Request | URL, options?: RequestInit) => Promise<Response>;
|
|
104
112
|
|
|
105
|
-
export { AuthService, BlockletSDK, type NotificationConfig, type PrivacyConfig, TokenService, type UserPublicInfo, type UserSession, UserSessionService, type UserSessionUser, type Webhook };
|
|
113
|
+
export { AuthService, BlockletSDK, type NotificationConfig, type PrivacyConfig, TokenService, type UserPublicInfo, type UserSession, UserSessionService, type UserSessionUser, type Webhook, createAxios, createFetch };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import
|
|
1
|
+
import * as axios from 'axios';
|
|
2
|
+
import { Axios, AxiosRequestConfig } from 'axios';
|
|
2
3
|
|
|
3
4
|
type UserPublicInfo = {
|
|
4
5
|
avatar: string;
|
|
@@ -94,6 +95,11 @@ declare class UserSessionService {
|
|
|
94
95
|
}): Promise<UserSession[]>;
|
|
95
96
|
}
|
|
96
97
|
|
|
98
|
+
type RequestParams = {
|
|
99
|
+
lazy?: boolean;
|
|
100
|
+
lazyTime?: number;
|
|
101
|
+
};
|
|
102
|
+
|
|
97
103
|
declare class BlockletSDK {
|
|
98
104
|
api: Axios;
|
|
99
105
|
user: AuthService;
|
|
@@ -101,5 +107,7 @@ declare class BlockletSDK {
|
|
|
101
107
|
token: TokenService;
|
|
102
108
|
constructor();
|
|
103
109
|
}
|
|
110
|
+
declare function createAxios(config?: AxiosRequestConfig, requestParams?: RequestParams): axios.AxiosInstance;
|
|
111
|
+
declare function createFetch(options?: RequestInit, requestParams?: RequestParams): (input: string | Request | URL, options?: RequestInit) => Promise<Response>;
|
|
104
112
|
|
|
105
|
-
export { AuthService, BlockletSDK, type NotificationConfig, type PrivacyConfig, TokenService, type UserPublicInfo, type UserSession, UserSessionService, type UserSessionUser, type Webhook };
|
|
113
|
+
export { AuthService, BlockletSDK, type NotificationConfig, type PrivacyConfig, TokenService, type UserPublicInfo, type UserSession, UserSessionService, type UserSessionUser, type Webhook, createAxios, createFetch };
|
package/dist/index.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { WELLKNOWN_SERVICE_PATH_PREFIX, SESSION_TOKEN_STORAGE_KEY, REFRESH_TOKEN_STORAGE_KEY } from '@abtnode/constant';
|
|
2
|
-
import { withQuery } from 'ufo';
|
|
2
|
+
import { withQuery, joinURL } from 'ufo';
|
|
3
3
|
import Cookie from 'js-cookie';
|
|
4
4
|
import axios from 'axios';
|
|
5
5
|
|
|
@@ -108,8 +108,11 @@ const sleep = (time = 0) => {
|
|
|
108
108
|
}, time);
|
|
109
109
|
});
|
|
110
110
|
};
|
|
111
|
+
const getBearerToken = (token) => {
|
|
112
|
+
return `Bearer ${encodeURIComponent(token)}`;
|
|
113
|
+
};
|
|
111
114
|
|
|
112
|
-
async function sleepForLoading(config, lazyTime) {
|
|
115
|
+
async function sleepForLoading(config, lazyTime = 300) {
|
|
113
116
|
config.metaData.endTime = +/* @__PURE__ */ new Date();
|
|
114
117
|
const { startTime, endTime } = config.metaData;
|
|
115
118
|
const timeDiff = endTime - startTime;
|
|
@@ -117,15 +120,15 @@ async function sleepForLoading(config, lazyTime) {
|
|
|
117
120
|
await sleep(lazyTime - timeDiff);
|
|
118
121
|
delete config.metaData;
|
|
119
122
|
}
|
|
120
|
-
const
|
|
123
|
+
const createAxios$1 = (options, requestParams) => {
|
|
121
124
|
const instance = axios.create({
|
|
122
125
|
...options,
|
|
123
126
|
headers: {
|
|
124
|
-
...options
|
|
127
|
+
...options?.headers,
|
|
125
128
|
"x-blocklet-js-sdk-version": version
|
|
126
129
|
}
|
|
127
130
|
});
|
|
128
|
-
if (lazy) {
|
|
131
|
+
if (requestParams?.lazy) {
|
|
129
132
|
instance.interceptors.request.use(
|
|
130
133
|
(config) => {
|
|
131
134
|
config.metaData = { startTime: +/* @__PURE__ */ new Date() };
|
|
@@ -135,34 +138,32 @@ const createApi = (options = {}, { lazy = false, lazyTime = 300 } = {}) => {
|
|
|
135
138
|
);
|
|
136
139
|
instance.interceptors.response.use(
|
|
137
140
|
async (res) => {
|
|
138
|
-
await sleepForLoading(res.config, lazyTime);
|
|
141
|
+
await sleepForLoading(res.config, requestParams?.lazyTime);
|
|
139
142
|
return res;
|
|
140
143
|
},
|
|
141
144
|
async (err) => {
|
|
142
|
-
await sleepForLoading(err.response.config, lazyTime);
|
|
145
|
+
await sleepForLoading(err.response.config, requestParams?.lazyTime);
|
|
143
146
|
return Promise.reject(err);
|
|
144
147
|
}
|
|
145
148
|
);
|
|
146
149
|
}
|
|
147
150
|
return instance;
|
|
148
151
|
};
|
|
149
|
-
|
|
150
|
-
const baseURL = WELLKNOWN_SERVICE_PATH_PREFIX;
|
|
151
|
-
async function renewRefreshToken(refreshToken) {
|
|
152
|
+
async function renewRefreshToken$1(refreshToken) {
|
|
152
153
|
if (!refreshToken) {
|
|
153
154
|
throw new Error("Refresh token not found");
|
|
154
155
|
}
|
|
155
|
-
const refreshApi =
|
|
156
|
-
baseURL,
|
|
156
|
+
const refreshApi = createAxios$1({
|
|
157
|
+
baseURL: WELLKNOWN_SERVICE_PATH_PREFIX,
|
|
157
158
|
timeout: 10 * 1e3,
|
|
158
159
|
headers: {
|
|
159
|
-
authorization:
|
|
160
|
+
authorization: getBearerToken(refreshToken)
|
|
160
161
|
}
|
|
161
162
|
});
|
|
162
|
-
const { data } = await refreshApi.post("api/did/refreshSession");
|
|
163
|
+
const { data } = await refreshApi.post("/api/did/refreshSession");
|
|
163
164
|
return data;
|
|
164
165
|
}
|
|
165
|
-
function createRequest({
|
|
166
|
+
function createRequest$1({
|
|
166
167
|
getSessionToken,
|
|
167
168
|
setSessionToken,
|
|
168
169
|
removeSessionToken,
|
|
@@ -171,19 +172,21 @@ function createRequest({
|
|
|
171
172
|
removeRefreshToken,
|
|
172
173
|
onRefreshTokenError,
|
|
173
174
|
onRefreshTokenSuccess
|
|
174
|
-
},
|
|
175
|
+
}, requestOptions, requestParams) {
|
|
175
176
|
let refreshingTokenRequest = null;
|
|
176
|
-
const service =
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
177
|
+
const service = createAxios$1(
|
|
178
|
+
{
|
|
179
|
+
timeout: 30 * 1e3,
|
|
180
|
+
...requestOptions
|
|
181
|
+
},
|
|
182
|
+
requestParams
|
|
183
|
+
);
|
|
181
184
|
service.interceptors.request.use(
|
|
182
185
|
async (config) => {
|
|
183
186
|
if (!Cookie.get(SESSION_TOKEN_STORAGE_KEY)) {
|
|
184
187
|
const token = getSessionToken();
|
|
185
188
|
if (token) {
|
|
186
|
-
config.headers.authorization =
|
|
189
|
+
config.headers.authorization = getBearerToken(token);
|
|
187
190
|
}
|
|
188
191
|
}
|
|
189
192
|
if (refreshingTokenRequest) {
|
|
@@ -201,7 +204,7 @@ function createRequest({
|
|
|
201
204
|
if (error?.response?.status === 401 && !originalRequest._retry) {
|
|
202
205
|
originalRequest._retry = true;
|
|
203
206
|
if (!refreshingTokenRequest) {
|
|
204
|
-
refreshingTokenRequest = renewRefreshToken(getRefreshToken());
|
|
207
|
+
refreshingTokenRequest = renewRefreshToken$1(getRefreshToken());
|
|
205
208
|
}
|
|
206
209
|
try {
|
|
207
210
|
const tokenData = await refreshingTokenRequest;
|
|
@@ -228,6 +231,110 @@ function createRequest({
|
|
|
228
231
|
return service;
|
|
229
232
|
}
|
|
230
233
|
|
|
234
|
+
function createFetch$1(globalOptions = {}, requestParams) {
|
|
235
|
+
return async (input, options) => {
|
|
236
|
+
const startAt = Date.now();
|
|
237
|
+
const request = fetch(input, {
|
|
238
|
+
...globalOptions,
|
|
239
|
+
...options,
|
|
240
|
+
headers: {
|
|
241
|
+
...globalOptions?.headers,
|
|
242
|
+
...options?.headers,
|
|
243
|
+
"x-blocklet-js-sdk-version": version
|
|
244
|
+
}
|
|
245
|
+
});
|
|
246
|
+
try {
|
|
247
|
+
return request;
|
|
248
|
+
} catch (error) {
|
|
249
|
+
throw error;
|
|
250
|
+
} finally {
|
|
251
|
+
const endAt = Date.now();
|
|
252
|
+
if (requestParams?.lazy) {
|
|
253
|
+
const lazyTime = requestParams?.lazyTime ?? 300;
|
|
254
|
+
const timeDiff = endAt - startAt;
|
|
255
|
+
if (timeDiff < lazyTime)
|
|
256
|
+
await sleep(lazyTime - timeDiff);
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
};
|
|
260
|
+
}
|
|
261
|
+
async function renewRefreshToken(refreshToken) {
|
|
262
|
+
if (!refreshToken) {
|
|
263
|
+
throw new Error("Refresh token not found");
|
|
264
|
+
}
|
|
265
|
+
const refreshApi = createFetch$1();
|
|
266
|
+
const res = await refreshApi(joinURL(WELLKNOWN_SERVICE_PATH_PREFIX, "/api/did/refreshSession"), {
|
|
267
|
+
method: "POST",
|
|
268
|
+
headers: {
|
|
269
|
+
authorization: getBearerToken(refreshToken)
|
|
270
|
+
}
|
|
271
|
+
});
|
|
272
|
+
const data = await res.json();
|
|
273
|
+
return data;
|
|
274
|
+
}
|
|
275
|
+
function createRequest({
|
|
276
|
+
baseURL,
|
|
277
|
+
getSessionToken,
|
|
278
|
+
setSessionToken,
|
|
279
|
+
removeSessionToken,
|
|
280
|
+
getRefreshToken,
|
|
281
|
+
setRefreshToken,
|
|
282
|
+
removeRefreshToken,
|
|
283
|
+
onRefreshTokenError,
|
|
284
|
+
onRefreshTokenSuccess
|
|
285
|
+
}, requestOptions, requestParams) {
|
|
286
|
+
let refreshingTokenRequest = null;
|
|
287
|
+
const service = createFetch$1(requestOptions, requestParams);
|
|
288
|
+
return async (input, options) => {
|
|
289
|
+
let authorization;
|
|
290
|
+
const finalUrl = typeof input === "string" ? joinURL(baseURL, input) : input;
|
|
291
|
+
if (!Cookie.get(SESSION_TOKEN_STORAGE_KEY)) {
|
|
292
|
+
const token = getSessionToken();
|
|
293
|
+
if (token) {
|
|
294
|
+
authorization = getBearerToken(token);
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
if (refreshingTokenRequest) {
|
|
298
|
+
await refreshingTokenRequest;
|
|
299
|
+
}
|
|
300
|
+
const res = await service(finalUrl, {
|
|
301
|
+
...options,
|
|
302
|
+
headers: {
|
|
303
|
+
...options?.headers,
|
|
304
|
+
authorization
|
|
305
|
+
}
|
|
306
|
+
});
|
|
307
|
+
if (!res.ok && res.status === 401) {
|
|
308
|
+
refreshingTokenRequest = renewRefreshToken(getRefreshToken());
|
|
309
|
+
try {
|
|
310
|
+
const tokenData = await refreshingTokenRequest;
|
|
311
|
+
setSessionToken(tokenData.nextToken);
|
|
312
|
+
setRefreshToken(tokenData.nextRefreshToken);
|
|
313
|
+
if (typeof onRefreshTokenSuccess === "function") {
|
|
314
|
+
onRefreshTokenSuccess(tokenData);
|
|
315
|
+
}
|
|
316
|
+
return service(finalUrl, {
|
|
317
|
+
...options,
|
|
318
|
+
headers: {
|
|
319
|
+
...options?.headers,
|
|
320
|
+
authorization
|
|
321
|
+
}
|
|
322
|
+
});
|
|
323
|
+
} catch (error) {
|
|
324
|
+
removeSessionToken();
|
|
325
|
+
removeRefreshToken();
|
|
326
|
+
if (typeof onRefreshTokenError === "function") {
|
|
327
|
+
onRefreshTokenError(error);
|
|
328
|
+
}
|
|
329
|
+
return Promise.reject(error);
|
|
330
|
+
} finally {
|
|
331
|
+
refreshingTokenRequest = null;
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
return res;
|
|
335
|
+
};
|
|
336
|
+
}
|
|
337
|
+
|
|
231
338
|
var __defProp = Object.defineProperty;
|
|
232
339
|
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
233
340
|
var __publicField = (obj, key, value) => {
|
|
@@ -241,7 +348,34 @@ class BlockletSDK {
|
|
|
241
348
|
__publicField(this, "userSession");
|
|
242
349
|
__publicField(this, "token");
|
|
243
350
|
const tokenService = new TokenService();
|
|
244
|
-
const
|
|
351
|
+
const internalApi = createRequest$1(
|
|
352
|
+
{
|
|
353
|
+
getSessionToken: tokenService.getSessionToken,
|
|
354
|
+
setSessionToken: tokenService.setSessionToken,
|
|
355
|
+
removeSessionToken: tokenService.removeSessionToken,
|
|
356
|
+
getRefreshToken: tokenService.getRefreshToken,
|
|
357
|
+
setRefreshToken: tokenService.setRefreshToken,
|
|
358
|
+
removeRefreshToken: tokenService.removeRefreshToken,
|
|
359
|
+
onRefreshTokenError: () => {
|
|
360
|
+
console.error("Failed to refresh token");
|
|
361
|
+
},
|
|
362
|
+
onRefreshTokenSuccess: () => {
|
|
363
|
+
}
|
|
364
|
+
},
|
|
365
|
+
{
|
|
366
|
+
baseURL: WELLKNOWN_SERVICE_PATH_PREFIX
|
|
367
|
+
}
|
|
368
|
+
);
|
|
369
|
+
this.user = new AuthService({ api: internalApi });
|
|
370
|
+
this.userSession = new UserSessionService({ api: internalApi });
|
|
371
|
+
this.token = tokenService;
|
|
372
|
+
this.api = internalApi;
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
function createAxios(config, requestParams) {
|
|
376
|
+
const tokenService = new TokenService();
|
|
377
|
+
return createRequest$1(
|
|
378
|
+
{
|
|
245
379
|
getSessionToken: tokenService.getSessionToken,
|
|
246
380
|
setSessionToken: tokenService.setSessionToken,
|
|
247
381
|
removeSessionToken: tokenService.removeSessionToken,
|
|
@@ -253,12 +387,30 @@ class BlockletSDK {
|
|
|
253
387
|
},
|
|
254
388
|
onRefreshTokenSuccess: () => {
|
|
255
389
|
}
|
|
256
|
-
}
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
390
|
+
},
|
|
391
|
+
config,
|
|
392
|
+
requestParams
|
|
393
|
+
);
|
|
394
|
+
}
|
|
395
|
+
function createFetch(options, requestParams) {
|
|
396
|
+
const tokenService = new TokenService();
|
|
397
|
+
return createRequest(
|
|
398
|
+
{
|
|
399
|
+
getSessionToken: tokenService.getSessionToken,
|
|
400
|
+
setSessionToken: tokenService.setSessionToken,
|
|
401
|
+
removeSessionToken: tokenService.removeSessionToken,
|
|
402
|
+
getRefreshToken: tokenService.getRefreshToken,
|
|
403
|
+
setRefreshToken: tokenService.setRefreshToken,
|
|
404
|
+
removeRefreshToken: tokenService.removeRefreshToken,
|
|
405
|
+
onRefreshTokenError: () => {
|
|
406
|
+
console.error("Failed to refresh token");
|
|
407
|
+
},
|
|
408
|
+
onRefreshTokenSuccess: () => {
|
|
409
|
+
}
|
|
410
|
+
},
|
|
411
|
+
options,
|
|
412
|
+
requestParams
|
|
413
|
+
);
|
|
262
414
|
}
|
|
263
415
|
|
|
264
|
-
export { BlockletSDK };
|
|
416
|
+
export { BlockletSDK, createAxios, createFetch };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@blocklet/js-sdk",
|
|
3
|
-
"version": "1.16.26-beta-
|
|
3
|
+
"version": "1.16.26-beta-cca12425",
|
|
4
4
|
"main": "dist/index.cjs",
|
|
5
5
|
"module": "dist/index.mjs",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
"build": "unbuild"
|
|
32
32
|
},
|
|
33
33
|
"dependencies": {
|
|
34
|
-
"@abtnode/constant": "1.16.26-beta-
|
|
34
|
+
"@abtnode/constant": "1.16.26-beta-cca12425",
|
|
35
35
|
"axios": "^0.27.2",
|
|
36
36
|
"js-cookie": "^3.0.5",
|
|
37
37
|
"ufo": "^1.3.2"
|
|
@@ -39,5 +39,5 @@
|
|
|
39
39
|
"devDependencies": {
|
|
40
40
|
"unbuild": "^2.0.0"
|
|
41
41
|
},
|
|
42
|
-
"gitHead": "
|
|
42
|
+
"gitHead": "fc2804fa8010d4311f1c74e65fb98d117598df2a"
|
|
43
43
|
}
|