@accelbyte/sdk 0.0.0-dev-20240906023252 → 0.0.0-dev-20240910111050
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/cjs/node/index.cjs +156 -125
- package/dist/cjs/node/index.cjs.map +1 -1
- package/dist/es/browser/index.browser.js +153 -121
- package/dist/es/browser/index.browser.js.map +1 -1
- package/dist/es/node/index.node.js +153 -121
- package/dist/es/node/index.node.js.map +1 -1
- package/dist/index.d.ts +39 -36
- package/package.json +4 -3
|
@@ -4,8 +4,29 @@ if (!global.crypto) {
|
|
|
4
4
|
global.crypto = webcrypto;
|
|
5
5
|
}
|
|
6
6
|
|
|
7
|
-
// src/utils/
|
|
7
|
+
// src/utils/ApiUtils.ts
|
|
8
8
|
import axios from "axios";
|
|
9
|
+
var ApiUtils = class {
|
|
10
|
+
};
|
|
11
|
+
ApiUtils.mergeAxiosConfigs = (config, overrides) => {
|
|
12
|
+
return {
|
|
13
|
+
...config,
|
|
14
|
+
...overrides,
|
|
15
|
+
headers: {
|
|
16
|
+
...config == null ? void 0 : config.headers,
|
|
17
|
+
...overrides == null ? void 0 : overrides.headers
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
};
|
|
21
|
+
ApiUtils.is4xxError = (error) => {
|
|
22
|
+
if (axios.isAxiosError(error) && error.response) {
|
|
23
|
+
return error.response.status >= 400 && error.response.status <= 499;
|
|
24
|
+
}
|
|
25
|
+
return false;
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
// src/utils/Network.ts
|
|
29
|
+
import axios2 from "axios";
|
|
9
30
|
import qs from "query-string";
|
|
10
31
|
|
|
11
32
|
// src/utils/SdkDevice.ts
|
|
@@ -49,7 +70,7 @@ var isMobile = (opts) => {
|
|
|
49
70
|
// src/utils/Network.ts
|
|
50
71
|
var _Network = class _Network {
|
|
51
72
|
static create(...configs) {
|
|
52
|
-
const axiosInstance =
|
|
73
|
+
const axiosInstance = axios2.create(
|
|
53
74
|
Object.assign(
|
|
54
75
|
{
|
|
55
76
|
paramsSerializer: qs.stringify
|
|
@@ -113,9 +134,12 @@ var AccelByteSDK = class _AccelByteSDK {
|
|
|
113
134
|
}
|
|
114
135
|
}
|
|
115
136
|
};
|
|
116
|
-
this.axiosInstance =
|
|
137
|
+
this.axiosInstance = this.createAxiosInstance();
|
|
117
138
|
this.token = {};
|
|
118
139
|
}
|
|
140
|
+
createAxiosInstance() {
|
|
141
|
+
return Network.create({ baseURL: this.coreConfig.baseURL, ...this.axiosConfig.request });
|
|
142
|
+
}
|
|
119
143
|
assembly() {
|
|
120
144
|
return {
|
|
121
145
|
axiosInstance: this.axiosInstance,
|
|
@@ -148,6 +172,7 @@ var AccelByteSDK = class _AccelByteSDK {
|
|
|
148
172
|
return this;
|
|
149
173
|
}
|
|
150
174
|
this.axiosConfig.interceptors = this.axiosConfig.interceptors.filter(filterCallback);
|
|
175
|
+
this.axiosInstance = this.createAxiosInstance();
|
|
151
176
|
return this;
|
|
152
177
|
}
|
|
153
178
|
setConfig({ coreConfig, axiosConfig }) {
|
|
@@ -159,6 +184,7 @@ var AccelByteSDK = class _AccelByteSDK {
|
|
|
159
184
|
...this.axiosConfig,
|
|
160
185
|
...axiosConfig
|
|
161
186
|
};
|
|
187
|
+
this.axiosInstance = this.createAxiosInstance();
|
|
162
188
|
return this;
|
|
163
189
|
}
|
|
164
190
|
setToken(token) {
|
|
@@ -166,6 +192,12 @@ var AccelByteSDK = class _AccelByteSDK {
|
|
|
166
192
|
...this.token,
|
|
167
193
|
...token
|
|
168
194
|
};
|
|
195
|
+
const configOverride = { headers: { Authorization: this.token.accessToken ? `Bearer ${this.token.accessToken}` : "" } };
|
|
196
|
+
this.axiosConfig = {
|
|
197
|
+
...this.axiosConfig,
|
|
198
|
+
request: ApiUtils.mergeAxiosConfigs(this.axiosInstance.defaults, configOverride)
|
|
199
|
+
};
|
|
200
|
+
this.axiosInstance = this.createAxiosInstance();
|
|
169
201
|
}
|
|
170
202
|
removeToken() {
|
|
171
203
|
this.token = {};
|
|
@@ -202,7 +234,7 @@ var ERROR_CODE_TOKEN_EXPIRED = 10196;
|
|
|
202
234
|
var ERROR_USER_BANNED = 10134;
|
|
203
235
|
|
|
204
236
|
// src/interceptors/AuthInterceptors.ts
|
|
205
|
-
import
|
|
237
|
+
import axios3 from "axios";
|
|
206
238
|
|
|
207
239
|
// src/utils/DesktopChecker.ts
|
|
208
240
|
var _DesktopChecker = class _DesktopChecker {
|
|
@@ -446,69 +478,83 @@ var LoginUrls = /* @__PURE__ */ ((LoginUrls2) => {
|
|
|
446
478
|
LoginUrls2["REVOKE"] = "/iam/v3/oauth/revoke";
|
|
447
479
|
return LoginUrls2;
|
|
448
480
|
})(LoginUrls || {});
|
|
449
|
-
var
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
grant_type: "refresh_token"
|
|
463
|
-
};
|
|
464
|
-
if (tokenUrl === "/iam/v4/oauth/token" /* GRANT_TOKEN_V4 */) {
|
|
465
|
-
return new OAuth20V4$(axios4).postOauthToken_v4(payload);
|
|
466
|
-
}
|
|
467
|
-
const oauth20 = new OAuth20$(axios4);
|
|
468
|
-
return oauth20.postOauthToken(payload);
|
|
469
|
-
};
|
|
470
|
-
var refreshWithLock = ({
|
|
471
|
-
axiosConfig,
|
|
472
|
-
refreshToken,
|
|
473
|
-
clientId,
|
|
474
|
-
tokenUrl
|
|
475
|
-
}) => {
|
|
476
|
-
if (RefreshSession.isLocked()) {
|
|
477
|
-
return Promise.resolve().then(async () => {
|
|
478
|
-
while (RefreshSession.isLocked()) {
|
|
479
|
-
await RefreshSession.sleepAsync(REFRESH_EXPIRY_CHECK_RATE);
|
|
481
|
+
var noOp = () => {
|
|
482
|
+
};
|
|
483
|
+
var RefreshToken = class {
|
|
484
|
+
constructor({ config, interceptors }) {
|
|
485
|
+
// Return Promise<true> if refresh in any tab is successful;
|
|
486
|
+
this.runWithLock = () => {
|
|
487
|
+
if (RefreshSession.isLocked()) {
|
|
488
|
+
return Promise.resolve().then(async () => {
|
|
489
|
+
while (RefreshSession.isLocked()) {
|
|
490
|
+
await RefreshSession.sleepAsync(REFRESH_EXPIRY_CHECK_RATE);
|
|
491
|
+
}
|
|
492
|
+
return {};
|
|
493
|
+
});
|
|
480
494
|
}
|
|
481
|
-
return {};
|
|
482
|
-
});
|
|
483
|
-
}
|
|
484
|
-
RefreshSession.lock(REFRESH_EXPIRY);
|
|
485
|
-
let isLocallyRefreshingToken = true;
|
|
486
|
-
(async () => {
|
|
487
|
-
while (isLocallyRefreshingToken) {
|
|
488
495
|
RefreshSession.lock(REFRESH_EXPIRY);
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
496
|
+
let isLocallyRefreshingToken = true;
|
|
497
|
+
(async () => {
|
|
498
|
+
while (isLocallyRefreshingToken) {
|
|
499
|
+
RefreshSession.lock(REFRESH_EXPIRY);
|
|
500
|
+
await RefreshSession.sleepAsync(REFRESH_EXPIRY_UPDATE_RATE);
|
|
501
|
+
}
|
|
502
|
+
})();
|
|
503
|
+
return Promise.resolve().then(() => this.run()).finally(() => {
|
|
504
|
+
isLocallyRefreshingToken = false;
|
|
505
|
+
RefreshSession.unlock();
|
|
506
|
+
});
|
|
507
|
+
};
|
|
508
|
+
this.run = async () => {
|
|
509
|
+
const { axiosConfig, refreshToken } = this.config;
|
|
510
|
+
if (DesktopChecker.isDesktopApp() && !axiosConfig.withCredentials && !refreshToken) {
|
|
511
|
+
return false;
|
|
512
|
+
}
|
|
513
|
+
const result = await this.refreshToken();
|
|
514
|
+
if (result.error) {
|
|
515
|
+
return false;
|
|
516
|
+
}
|
|
517
|
+
return result.response.data;
|
|
518
|
+
};
|
|
519
|
+
this.refreshToken = () => {
|
|
520
|
+
const { axiosConfig, refreshToken, clientId, tokenUrl } = this.config;
|
|
521
|
+
const config = {
|
|
522
|
+
...axiosConfig,
|
|
523
|
+
withCredentials: false,
|
|
524
|
+
headers: {
|
|
525
|
+
"Content-Type": "application/x-www-form-urlencoded",
|
|
526
|
+
Authorization: `Basic ${Buffer.from(`${clientId}:`).toString("base64")}`
|
|
527
|
+
}
|
|
528
|
+
};
|
|
529
|
+
const axios4 = Network.create(config);
|
|
530
|
+
for (const interceptor of this.interceptors) {
|
|
531
|
+
if (interceptor.type === "request") {
|
|
532
|
+
axios4.interceptors.request.use(interceptor == null ? void 0 : interceptor.onRequest, interceptor.onError);
|
|
533
|
+
}
|
|
534
|
+
if (interceptor.type === "response") {
|
|
535
|
+
axios4.interceptors.response.use(interceptor == null ? void 0 : interceptor.onSuccess, interceptor.onError);
|
|
536
|
+
}
|
|
537
|
+
}
|
|
538
|
+
const payload = {
|
|
539
|
+
refresh_token: refreshToken || void 0,
|
|
540
|
+
client_id: clientId,
|
|
541
|
+
grant_type: "refresh_token"
|
|
542
|
+
};
|
|
543
|
+
if (tokenUrl === "/iam/v4/oauth/token" /* GRANT_TOKEN_V4 */) {
|
|
544
|
+
return new OAuth20V4$(axios4).postOauthToken_v4(payload);
|
|
545
|
+
}
|
|
546
|
+
const oauth20 = new OAuth20$(axios4);
|
|
547
|
+
return oauth20.postOauthToken(payload);
|
|
548
|
+
};
|
|
549
|
+
this.config = config;
|
|
550
|
+
this.interceptors = interceptors || [];
|
|
504
551
|
}
|
|
505
|
-
return result.response.data;
|
|
506
552
|
};
|
|
507
|
-
var
|
|
553
|
+
var refreshComplete = (error, tokenResponse, onSessionExpired, axiosConfig, errorConfig) => {
|
|
508
554
|
if (tokenResponse) {
|
|
509
555
|
const { access_token } = tokenResponse;
|
|
510
556
|
if (!axiosConfig.withCredentials && access_token) {
|
|
511
|
-
return
|
|
557
|
+
return axios3({
|
|
512
558
|
...errorConfig,
|
|
513
559
|
headers: {
|
|
514
560
|
...errorConfig.headers,
|
|
@@ -516,7 +562,7 @@ var uponRefreshComplete = (error, tokenResponse, onSessionExpired, axiosConfig,
|
|
|
516
562
|
}
|
|
517
563
|
});
|
|
518
564
|
} else {
|
|
519
|
-
return
|
|
565
|
+
return axios3(errorConfig);
|
|
520
566
|
}
|
|
521
567
|
}
|
|
522
568
|
if (onSessionExpired) {
|
|
@@ -524,6 +570,49 @@ var uponRefreshComplete = (error, tokenResponse, onSessionExpired, axiosConfig,
|
|
|
524
570
|
}
|
|
525
571
|
throw error;
|
|
526
572
|
};
|
|
573
|
+
var createAuthInterceptor = ({
|
|
574
|
+
clientId,
|
|
575
|
+
onSessionExpired,
|
|
576
|
+
onGetUserSession,
|
|
577
|
+
expectedErrorUrls = Object.values({ ...LoginUrls, ...GrantTokenUrls }),
|
|
578
|
+
getRefreshToken,
|
|
579
|
+
tokenUrl = "/iam/v3/oauth/token" /* GRANT_TOKEN */
|
|
580
|
+
}) => {
|
|
581
|
+
return {
|
|
582
|
+
type: "response",
|
|
583
|
+
name: "session-expired",
|
|
584
|
+
onError: (e) => {
|
|
585
|
+
const error = e;
|
|
586
|
+
const { config, response } = error;
|
|
587
|
+
if (axios3.isCancel(error)) {
|
|
588
|
+
return Promise.reject(error);
|
|
589
|
+
}
|
|
590
|
+
if (!response) {
|
|
591
|
+
console.warn(`sdk:ERR_INTERNET_DISCONNECTED ${config == null ? void 0 : config.baseURL}${config == null ? void 0 : config.url}. ${error.message}
|
|
592
|
+
`);
|
|
593
|
+
}
|
|
594
|
+
if ((response == null ? void 0 : response.status) === 401) {
|
|
595
|
+
const { url } = config || {};
|
|
596
|
+
const axiosConfig = config;
|
|
597
|
+
const refreshToken = getRefreshToken();
|
|
598
|
+
if (!url || url && expectedErrorUrls.includes(url)) {
|
|
599
|
+
return Promise.reject(error);
|
|
600
|
+
}
|
|
601
|
+
const refresh = new RefreshToken({
|
|
602
|
+
config: { axiosConfig, clientId, refreshToken, tokenUrl },
|
|
603
|
+
interceptors: [
|
|
604
|
+
createRefreshSessionInterceptor({ tokenUrl }),
|
|
605
|
+
createGetSessionInterceptor({ onGetUserSession: onGetUserSession || noOp, tokenUrl })
|
|
606
|
+
]
|
|
607
|
+
});
|
|
608
|
+
return refresh.runWithLock().then((tokenResponse) => {
|
|
609
|
+
return refreshComplete(error, tokenResponse, onSessionExpired, axiosConfig, config || {});
|
|
610
|
+
});
|
|
611
|
+
}
|
|
612
|
+
return Promise.reject(error);
|
|
613
|
+
}
|
|
614
|
+
};
|
|
615
|
+
};
|
|
527
616
|
var createRefreshSessionInterceptor = (options) => {
|
|
528
617
|
const { tokenUrl = "/iam/v3/oauth/token" /* GRANT_TOKEN */ } = options || {};
|
|
529
618
|
return {
|
|
@@ -557,41 +646,6 @@ var createGetSessionInterceptor = ({
|
|
|
557
646
|
return response;
|
|
558
647
|
}
|
|
559
648
|
});
|
|
560
|
-
var createSessionExpiredInterceptor = ({
|
|
561
|
-
clientId,
|
|
562
|
-
onSessionExpired,
|
|
563
|
-
expectedErrorUrls = Object.values({ ...LoginUrls, ...GrantTokenUrls }),
|
|
564
|
-
getRefreshToken,
|
|
565
|
-
tokenUrl = "/iam/v3/oauth/token" /* GRANT_TOKEN */
|
|
566
|
-
}) => {
|
|
567
|
-
return {
|
|
568
|
-
type: "response",
|
|
569
|
-
name: "session-expired",
|
|
570
|
-
onError: (e) => {
|
|
571
|
-
const error = e;
|
|
572
|
-
const { config, response } = error;
|
|
573
|
-
if (axios2.isCancel(error)) {
|
|
574
|
-
return Promise.reject(error);
|
|
575
|
-
}
|
|
576
|
-
if (!response) {
|
|
577
|
-
console.warn(`sdk:ERR_INTERNET_DISCONNECTED ${config == null ? void 0 : config.baseURL}${config == null ? void 0 : config.url}. ${error.message}
|
|
578
|
-
`);
|
|
579
|
-
}
|
|
580
|
-
if ((response == null ? void 0 : response.status) === 401) {
|
|
581
|
-
const { url } = config || {};
|
|
582
|
-
const axiosConfig = config;
|
|
583
|
-
const refreshToken = getRefreshToken();
|
|
584
|
-
if (!url || url && expectedErrorUrls.includes(url)) {
|
|
585
|
-
return Promise.reject(error);
|
|
586
|
-
}
|
|
587
|
-
return refreshWithLock({ axiosConfig, clientId, refreshToken, tokenUrl }).then((tokenResponse) => {
|
|
588
|
-
return uponRefreshComplete(error, tokenResponse, onSessionExpired, axiosConfig, config || {});
|
|
589
|
-
});
|
|
590
|
-
}
|
|
591
|
-
return Promise.reject(error);
|
|
592
|
-
}
|
|
593
|
-
};
|
|
594
|
-
};
|
|
595
649
|
|
|
596
650
|
// src/constants/paths.ts
|
|
597
651
|
var INTERNAL_SERVICES = {
|
|
@@ -687,27 +741,6 @@ var ErrorInterceptors = [
|
|
|
687
741
|
}
|
|
688
742
|
];
|
|
689
743
|
|
|
690
|
-
// src/utils/ApiUtils.ts
|
|
691
|
-
import axios3 from "axios";
|
|
692
|
-
var ApiUtils = class {
|
|
693
|
-
};
|
|
694
|
-
ApiUtils.mergeAxiosConfigs = (config, overrides) => {
|
|
695
|
-
return {
|
|
696
|
-
...config,
|
|
697
|
-
...overrides,
|
|
698
|
-
headers: {
|
|
699
|
-
...config == null ? void 0 : config.headers,
|
|
700
|
-
...overrides == null ? void 0 : overrides.headers
|
|
701
|
-
}
|
|
702
|
-
};
|
|
703
|
-
};
|
|
704
|
-
ApiUtils.is4xxError = (error) => {
|
|
705
|
-
if (axios3.isAxiosError(error) && error.response) {
|
|
706
|
-
return error.response.status >= 400 && error.response.status <= 499;
|
|
707
|
-
}
|
|
708
|
-
return false;
|
|
709
|
-
};
|
|
710
|
-
|
|
711
744
|
// src/utils/Type.ts
|
|
712
745
|
function isType(schema, data) {
|
|
713
746
|
return schema.safeParse(data).success;
|
|
@@ -778,15 +811,14 @@ export {
|
|
|
778
811
|
IamErrorCode,
|
|
779
812
|
Network,
|
|
780
813
|
RefreshSession,
|
|
814
|
+
RefreshToken,
|
|
781
815
|
SdkDevice,
|
|
782
816
|
UrlHelper,
|
|
783
817
|
Validate,
|
|
818
|
+
createAuthInterceptor,
|
|
784
819
|
createCustomPathInterceptor,
|
|
785
820
|
createGetSessionInterceptor,
|
|
786
821
|
createRefreshSessionInterceptor,
|
|
787
|
-
|
|
788
|
-
doRefreshSession,
|
|
789
|
-
isType,
|
|
790
|
-
refreshWithLock
|
|
822
|
+
isType
|
|
791
823
|
};
|
|
792
824
|
//# sourceMappingURL=index.node.js.map
|