@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
package/dist/cjs/node/index.cjs
CHANGED
|
@@ -45,16 +45,15 @@ __export(index_node_exports, {
|
|
|
45
45
|
IamErrorCode: () => IamErrorCode,
|
|
46
46
|
Network: () => Network,
|
|
47
47
|
RefreshSession: () => RefreshSession,
|
|
48
|
+
RefreshToken: () => RefreshToken,
|
|
48
49
|
SdkDevice: () => SdkDevice,
|
|
49
50
|
UrlHelper: () => UrlHelper,
|
|
50
51
|
Validate: () => Validate,
|
|
52
|
+
createAuthInterceptor: () => createAuthInterceptor,
|
|
51
53
|
createCustomPathInterceptor: () => createCustomPathInterceptor,
|
|
52
54
|
createGetSessionInterceptor: () => createGetSessionInterceptor,
|
|
53
55
|
createRefreshSessionInterceptor: () => createRefreshSessionInterceptor,
|
|
54
|
-
|
|
55
|
-
doRefreshSession: () => doRefreshSession,
|
|
56
|
-
isType: () => isType,
|
|
57
|
-
refreshWithLock: () => refreshWithLock
|
|
56
|
+
isType: () => isType
|
|
58
57
|
});
|
|
59
58
|
module.exports = __toCommonJS(index_node_exports);
|
|
60
59
|
|
|
@@ -64,8 +63,29 @@ if (!global.crypto) {
|
|
|
64
63
|
global.crypto = import_crypto.webcrypto;
|
|
65
64
|
}
|
|
66
65
|
|
|
67
|
-
// src/utils/
|
|
66
|
+
// src/utils/ApiUtils.ts
|
|
68
67
|
var import_axios = __toESM(require("axios"), 1);
|
|
68
|
+
var ApiUtils = class {
|
|
69
|
+
};
|
|
70
|
+
ApiUtils.mergeAxiosConfigs = (config, overrides) => {
|
|
71
|
+
return {
|
|
72
|
+
...config,
|
|
73
|
+
...overrides,
|
|
74
|
+
headers: {
|
|
75
|
+
...config == null ? void 0 : config.headers,
|
|
76
|
+
...overrides == null ? void 0 : overrides.headers
|
|
77
|
+
}
|
|
78
|
+
};
|
|
79
|
+
};
|
|
80
|
+
ApiUtils.is4xxError = (error) => {
|
|
81
|
+
if (import_axios.default.isAxiosError(error) && error.response) {
|
|
82
|
+
return error.response.status >= 400 && error.response.status <= 499;
|
|
83
|
+
}
|
|
84
|
+
return false;
|
|
85
|
+
};
|
|
86
|
+
|
|
87
|
+
// src/utils/Network.ts
|
|
88
|
+
var import_axios2 = __toESM(require("axios"), 1);
|
|
69
89
|
var import_query_string = __toESM(require("query-string"), 1);
|
|
70
90
|
|
|
71
91
|
// src/utils/SdkDevice.ts
|
|
@@ -109,7 +129,7 @@ var isMobile = (opts) => {
|
|
|
109
129
|
// src/utils/Network.ts
|
|
110
130
|
var _Network = class _Network {
|
|
111
131
|
static create(...configs) {
|
|
112
|
-
const axiosInstance =
|
|
132
|
+
const axiosInstance = import_axios2.default.create(
|
|
113
133
|
Object.assign(
|
|
114
134
|
{
|
|
115
135
|
paramsSerializer: import_query_string.default.stringify
|
|
@@ -173,9 +193,12 @@ var AccelByteSDK = class _AccelByteSDK {
|
|
|
173
193
|
}
|
|
174
194
|
}
|
|
175
195
|
};
|
|
176
|
-
this.axiosInstance =
|
|
196
|
+
this.axiosInstance = this.createAxiosInstance();
|
|
177
197
|
this.token = {};
|
|
178
198
|
}
|
|
199
|
+
createAxiosInstance() {
|
|
200
|
+
return Network.create({ baseURL: this.coreConfig.baseURL, ...this.axiosConfig.request });
|
|
201
|
+
}
|
|
179
202
|
assembly() {
|
|
180
203
|
return {
|
|
181
204
|
axiosInstance: this.axiosInstance,
|
|
@@ -208,6 +231,7 @@ var AccelByteSDK = class _AccelByteSDK {
|
|
|
208
231
|
return this;
|
|
209
232
|
}
|
|
210
233
|
this.axiosConfig.interceptors = this.axiosConfig.interceptors.filter(filterCallback);
|
|
234
|
+
this.axiosInstance = this.createAxiosInstance();
|
|
211
235
|
return this;
|
|
212
236
|
}
|
|
213
237
|
setConfig({ coreConfig, axiosConfig }) {
|
|
@@ -219,6 +243,7 @@ var AccelByteSDK = class _AccelByteSDK {
|
|
|
219
243
|
...this.axiosConfig,
|
|
220
244
|
...axiosConfig
|
|
221
245
|
};
|
|
246
|
+
this.axiosInstance = this.createAxiosInstance();
|
|
222
247
|
return this;
|
|
223
248
|
}
|
|
224
249
|
setToken(token) {
|
|
@@ -226,6 +251,12 @@ var AccelByteSDK = class _AccelByteSDK {
|
|
|
226
251
|
...this.token,
|
|
227
252
|
...token
|
|
228
253
|
};
|
|
254
|
+
const configOverride = { headers: { Authorization: this.token.accessToken ? `Bearer ${this.token.accessToken}` : "" } };
|
|
255
|
+
this.axiosConfig = {
|
|
256
|
+
...this.axiosConfig,
|
|
257
|
+
request: ApiUtils.mergeAxiosConfigs(this.axiosInstance.defaults, configOverride)
|
|
258
|
+
};
|
|
259
|
+
this.axiosInstance = this.createAxiosInstance();
|
|
229
260
|
}
|
|
230
261
|
removeToken() {
|
|
231
262
|
this.token = {};
|
|
@@ -262,7 +293,7 @@ var ERROR_CODE_TOKEN_EXPIRED = 10196;
|
|
|
262
293
|
var ERROR_USER_BANNED = 10134;
|
|
263
294
|
|
|
264
295
|
// src/interceptors/AuthInterceptors.ts
|
|
265
|
-
var
|
|
296
|
+
var import_axios3 = __toESM(require("axios"), 1);
|
|
266
297
|
|
|
267
298
|
// src/utils/DesktopChecker.ts
|
|
268
299
|
var _DesktopChecker = class _DesktopChecker {
|
|
@@ -506,69 +537,83 @@ var LoginUrls = /* @__PURE__ */ ((LoginUrls2) => {
|
|
|
506
537
|
LoginUrls2["REVOKE"] = "/iam/v3/oauth/revoke";
|
|
507
538
|
return LoginUrls2;
|
|
508
539
|
})(LoginUrls || {});
|
|
509
|
-
var
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
grant_type: "refresh_token"
|
|
523
|
-
};
|
|
524
|
-
if (tokenUrl === "/iam/v4/oauth/token" /* GRANT_TOKEN_V4 */) {
|
|
525
|
-
return new OAuth20V4$(axios4).postOauthToken_v4(payload);
|
|
526
|
-
}
|
|
527
|
-
const oauth20 = new OAuth20$(axios4);
|
|
528
|
-
return oauth20.postOauthToken(payload);
|
|
529
|
-
};
|
|
530
|
-
var refreshWithLock = ({
|
|
531
|
-
axiosConfig,
|
|
532
|
-
refreshToken,
|
|
533
|
-
clientId,
|
|
534
|
-
tokenUrl
|
|
535
|
-
}) => {
|
|
536
|
-
if (RefreshSession.isLocked()) {
|
|
537
|
-
return Promise.resolve().then(async () => {
|
|
538
|
-
while (RefreshSession.isLocked()) {
|
|
539
|
-
await RefreshSession.sleepAsync(REFRESH_EXPIRY_CHECK_RATE);
|
|
540
|
+
var noOp = () => {
|
|
541
|
+
};
|
|
542
|
+
var RefreshToken = class {
|
|
543
|
+
constructor({ config, interceptors }) {
|
|
544
|
+
// Return Promise<true> if refresh in any tab is successful;
|
|
545
|
+
this.runWithLock = () => {
|
|
546
|
+
if (RefreshSession.isLocked()) {
|
|
547
|
+
return Promise.resolve().then(async () => {
|
|
548
|
+
while (RefreshSession.isLocked()) {
|
|
549
|
+
await RefreshSession.sleepAsync(REFRESH_EXPIRY_CHECK_RATE);
|
|
550
|
+
}
|
|
551
|
+
return {};
|
|
552
|
+
});
|
|
540
553
|
}
|
|
541
|
-
return {};
|
|
542
|
-
});
|
|
543
|
-
}
|
|
544
|
-
RefreshSession.lock(REFRESH_EXPIRY);
|
|
545
|
-
let isLocallyRefreshingToken = true;
|
|
546
|
-
(async () => {
|
|
547
|
-
while (isLocallyRefreshingToken) {
|
|
548
554
|
RefreshSession.lock(REFRESH_EXPIRY);
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
555
|
+
let isLocallyRefreshingToken = true;
|
|
556
|
+
(async () => {
|
|
557
|
+
while (isLocallyRefreshingToken) {
|
|
558
|
+
RefreshSession.lock(REFRESH_EXPIRY);
|
|
559
|
+
await RefreshSession.sleepAsync(REFRESH_EXPIRY_UPDATE_RATE);
|
|
560
|
+
}
|
|
561
|
+
})();
|
|
562
|
+
return Promise.resolve().then(() => this.run()).finally(() => {
|
|
563
|
+
isLocallyRefreshingToken = false;
|
|
564
|
+
RefreshSession.unlock();
|
|
565
|
+
});
|
|
566
|
+
};
|
|
567
|
+
this.run = async () => {
|
|
568
|
+
const { axiosConfig, refreshToken } = this.config;
|
|
569
|
+
if (DesktopChecker.isDesktopApp() && !axiosConfig.withCredentials && !refreshToken) {
|
|
570
|
+
return false;
|
|
571
|
+
}
|
|
572
|
+
const result = await this.refreshToken();
|
|
573
|
+
if (result.error) {
|
|
574
|
+
return false;
|
|
575
|
+
}
|
|
576
|
+
return result.response.data;
|
|
577
|
+
};
|
|
578
|
+
this.refreshToken = () => {
|
|
579
|
+
const { axiosConfig, refreshToken, clientId, tokenUrl } = this.config;
|
|
580
|
+
const config = {
|
|
581
|
+
...axiosConfig,
|
|
582
|
+
withCredentials: false,
|
|
583
|
+
headers: {
|
|
584
|
+
"Content-Type": "application/x-www-form-urlencoded",
|
|
585
|
+
Authorization: `Basic ${Buffer.from(`${clientId}:`).toString("base64")}`
|
|
586
|
+
}
|
|
587
|
+
};
|
|
588
|
+
const axios4 = Network.create(config);
|
|
589
|
+
for (const interceptor of this.interceptors) {
|
|
590
|
+
if (interceptor.type === "request") {
|
|
591
|
+
axios4.interceptors.request.use(interceptor == null ? void 0 : interceptor.onRequest, interceptor.onError);
|
|
592
|
+
}
|
|
593
|
+
if (interceptor.type === "response") {
|
|
594
|
+
axios4.interceptors.response.use(interceptor == null ? void 0 : interceptor.onSuccess, interceptor.onError);
|
|
595
|
+
}
|
|
596
|
+
}
|
|
597
|
+
const payload = {
|
|
598
|
+
refresh_token: refreshToken || void 0,
|
|
599
|
+
client_id: clientId,
|
|
600
|
+
grant_type: "refresh_token"
|
|
601
|
+
};
|
|
602
|
+
if (tokenUrl === "/iam/v4/oauth/token" /* GRANT_TOKEN_V4 */) {
|
|
603
|
+
return new OAuth20V4$(axios4).postOauthToken_v4(payload);
|
|
604
|
+
}
|
|
605
|
+
const oauth20 = new OAuth20$(axios4);
|
|
606
|
+
return oauth20.postOauthToken(payload);
|
|
607
|
+
};
|
|
608
|
+
this.config = config;
|
|
609
|
+
this.interceptors = interceptors || [];
|
|
564
610
|
}
|
|
565
|
-
return result.response.data;
|
|
566
611
|
};
|
|
567
|
-
var
|
|
612
|
+
var refreshComplete = (error, tokenResponse, onSessionExpired, axiosConfig, errorConfig) => {
|
|
568
613
|
if (tokenResponse) {
|
|
569
614
|
const { access_token } = tokenResponse;
|
|
570
615
|
if (!axiosConfig.withCredentials && access_token) {
|
|
571
|
-
return (0,
|
|
616
|
+
return (0, import_axios3.default)({
|
|
572
617
|
...errorConfig,
|
|
573
618
|
headers: {
|
|
574
619
|
...errorConfig.headers,
|
|
@@ -576,7 +621,7 @@ var uponRefreshComplete = (error, tokenResponse, onSessionExpired, axiosConfig,
|
|
|
576
621
|
}
|
|
577
622
|
});
|
|
578
623
|
} else {
|
|
579
|
-
return (0,
|
|
624
|
+
return (0, import_axios3.default)(errorConfig);
|
|
580
625
|
}
|
|
581
626
|
}
|
|
582
627
|
if (onSessionExpired) {
|
|
@@ -584,6 +629,49 @@ var uponRefreshComplete = (error, tokenResponse, onSessionExpired, axiosConfig,
|
|
|
584
629
|
}
|
|
585
630
|
throw error;
|
|
586
631
|
};
|
|
632
|
+
var createAuthInterceptor = ({
|
|
633
|
+
clientId,
|
|
634
|
+
onSessionExpired,
|
|
635
|
+
onGetUserSession,
|
|
636
|
+
expectedErrorUrls = Object.values({ ...LoginUrls, ...GrantTokenUrls }),
|
|
637
|
+
getRefreshToken,
|
|
638
|
+
tokenUrl = "/iam/v3/oauth/token" /* GRANT_TOKEN */
|
|
639
|
+
}) => {
|
|
640
|
+
return {
|
|
641
|
+
type: "response",
|
|
642
|
+
name: "session-expired",
|
|
643
|
+
onError: (e) => {
|
|
644
|
+
const error = e;
|
|
645
|
+
const { config, response } = error;
|
|
646
|
+
if (import_axios3.default.isCancel(error)) {
|
|
647
|
+
return Promise.reject(error);
|
|
648
|
+
}
|
|
649
|
+
if (!response) {
|
|
650
|
+
console.warn(`sdk:ERR_INTERNET_DISCONNECTED ${config == null ? void 0 : config.baseURL}${config == null ? void 0 : config.url}. ${error.message}
|
|
651
|
+
`);
|
|
652
|
+
}
|
|
653
|
+
if ((response == null ? void 0 : response.status) === 401) {
|
|
654
|
+
const { url } = config || {};
|
|
655
|
+
const axiosConfig = config;
|
|
656
|
+
const refreshToken = getRefreshToken();
|
|
657
|
+
if (!url || url && expectedErrorUrls.includes(url)) {
|
|
658
|
+
return Promise.reject(error);
|
|
659
|
+
}
|
|
660
|
+
const refresh = new RefreshToken({
|
|
661
|
+
config: { axiosConfig, clientId, refreshToken, tokenUrl },
|
|
662
|
+
interceptors: [
|
|
663
|
+
createRefreshSessionInterceptor({ tokenUrl }),
|
|
664
|
+
createGetSessionInterceptor({ onGetUserSession: onGetUserSession || noOp, tokenUrl })
|
|
665
|
+
]
|
|
666
|
+
});
|
|
667
|
+
return refresh.runWithLock().then((tokenResponse) => {
|
|
668
|
+
return refreshComplete(error, tokenResponse, onSessionExpired, axiosConfig, config || {});
|
|
669
|
+
});
|
|
670
|
+
}
|
|
671
|
+
return Promise.reject(error);
|
|
672
|
+
}
|
|
673
|
+
};
|
|
674
|
+
};
|
|
587
675
|
var createRefreshSessionInterceptor = (options) => {
|
|
588
676
|
const { tokenUrl = "/iam/v3/oauth/token" /* GRANT_TOKEN */ } = options || {};
|
|
589
677
|
return {
|
|
@@ -617,41 +705,6 @@ var createGetSessionInterceptor = ({
|
|
|
617
705
|
return response;
|
|
618
706
|
}
|
|
619
707
|
});
|
|
620
|
-
var createSessionExpiredInterceptor = ({
|
|
621
|
-
clientId,
|
|
622
|
-
onSessionExpired,
|
|
623
|
-
expectedErrorUrls = Object.values({ ...LoginUrls, ...GrantTokenUrls }),
|
|
624
|
-
getRefreshToken,
|
|
625
|
-
tokenUrl = "/iam/v3/oauth/token" /* GRANT_TOKEN */
|
|
626
|
-
}) => {
|
|
627
|
-
return {
|
|
628
|
-
type: "response",
|
|
629
|
-
name: "session-expired",
|
|
630
|
-
onError: (e) => {
|
|
631
|
-
const error = e;
|
|
632
|
-
const { config, response } = error;
|
|
633
|
-
if (import_axios2.default.isCancel(error)) {
|
|
634
|
-
return Promise.reject(error);
|
|
635
|
-
}
|
|
636
|
-
if (!response) {
|
|
637
|
-
console.warn(`sdk:ERR_INTERNET_DISCONNECTED ${config == null ? void 0 : config.baseURL}${config == null ? void 0 : config.url}. ${error.message}
|
|
638
|
-
`);
|
|
639
|
-
}
|
|
640
|
-
if ((response == null ? void 0 : response.status) === 401) {
|
|
641
|
-
const { url } = config || {};
|
|
642
|
-
const axiosConfig = config;
|
|
643
|
-
const refreshToken = getRefreshToken();
|
|
644
|
-
if (!url || url && expectedErrorUrls.includes(url)) {
|
|
645
|
-
return Promise.reject(error);
|
|
646
|
-
}
|
|
647
|
-
return refreshWithLock({ axiosConfig, clientId, refreshToken, tokenUrl }).then((tokenResponse) => {
|
|
648
|
-
return uponRefreshComplete(error, tokenResponse, onSessionExpired, axiosConfig, config || {});
|
|
649
|
-
});
|
|
650
|
-
}
|
|
651
|
-
return Promise.reject(error);
|
|
652
|
-
}
|
|
653
|
-
};
|
|
654
|
-
};
|
|
655
708
|
|
|
656
709
|
// src/constants/paths.ts
|
|
657
710
|
var INTERNAL_SERVICES = {
|
|
@@ -747,27 +800,6 @@ var ErrorInterceptors = [
|
|
|
747
800
|
}
|
|
748
801
|
];
|
|
749
802
|
|
|
750
|
-
// src/utils/ApiUtils.ts
|
|
751
|
-
var import_axios3 = __toESM(require("axios"), 1);
|
|
752
|
-
var ApiUtils = class {
|
|
753
|
-
};
|
|
754
|
-
ApiUtils.mergeAxiosConfigs = (config, overrides) => {
|
|
755
|
-
return {
|
|
756
|
-
...config,
|
|
757
|
-
...overrides,
|
|
758
|
-
headers: {
|
|
759
|
-
...config == null ? void 0 : config.headers,
|
|
760
|
-
...overrides == null ? void 0 : overrides.headers
|
|
761
|
-
}
|
|
762
|
-
};
|
|
763
|
-
};
|
|
764
|
-
ApiUtils.is4xxError = (error) => {
|
|
765
|
-
if (import_axios3.default.isAxiosError(error) && error.response) {
|
|
766
|
-
return error.response.status >= 400 && error.response.status <= 499;
|
|
767
|
-
}
|
|
768
|
-
return false;
|
|
769
|
-
};
|
|
770
|
-
|
|
771
803
|
// src/utils/Type.ts
|
|
772
804
|
function isType(schema, data) {
|
|
773
805
|
return schema.safeParse(data).success;
|
|
@@ -839,15 +871,14 @@ var UrlHelper = _UrlHelper;
|
|
|
839
871
|
IamErrorCode,
|
|
840
872
|
Network,
|
|
841
873
|
RefreshSession,
|
|
874
|
+
RefreshToken,
|
|
842
875
|
SdkDevice,
|
|
843
876
|
UrlHelper,
|
|
844
877
|
Validate,
|
|
878
|
+
createAuthInterceptor,
|
|
845
879
|
createCustomPathInterceptor,
|
|
846
880
|
createGetSessionInterceptor,
|
|
847
881
|
createRefreshSessionInterceptor,
|
|
848
|
-
|
|
849
|
-
doRefreshSession,
|
|
850
|
-
isType,
|
|
851
|
-
refreshWithLock
|
|
882
|
+
isType
|
|
852
883
|
});
|
|
853
884
|
//# sourceMappingURL=index.cjs.map
|