@accelbyte/sdk 4.1.2 → 4.1.4
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/README.md +1 -3
- package/dist/cjs/node/index.cjs +0 -3
- package/dist/cjs/node/index.cjs.map +1 -1
- package/dist/es/browser/index.browser.js +0 -3
- package/dist/es/browser/index.browser.js.map +1 -1
- package/dist/es/node/index.node.js +0 -3
- package/dist/es/node/index.node.js.map +1 -1
- package/dist/global/index.global.js +15 -15
- package/package.json +9 -9
package/README.md
CHANGED
|
@@ -363,8 +363,6 @@ TypeScript SDK supports the following AGS APIs:
|
|
|
363
363
|
- **Play**
|
|
364
364
|
- [Session](https://docs.accelbyte.io/api-explorer/#Session): `@accelbyte/sdk-session`
|
|
365
365
|
- [Matchmaking](https://docs.accelbyte.io/api-explorer/#Matchmaking):`@accelbyte/sdk-matchmaking`
|
|
366
|
-
- [Session Browser Play](https://docs.accelbyte.io/api-explorer/#Session%20Browser%20Play): `@accelbyte/sdk-sessionbrowser`
|
|
367
|
-
- [Session History](https://docs.accelbyte.io/api-explorer/#Session%20History): `@accelbyte/sdk-history`
|
|
368
366
|
- **Social**
|
|
369
367
|
- [Chat](https://docs.accelbyte.io/api-explorer/#Chat): `@accelbyte/sdk-chat`
|
|
370
368
|
- [Lobby](https://docs.accelbyte.io/api-explorer/#Lobby%20-%20Friends,%20Presence%20and%20Notifications): `@accelbyte/sdk-lobby` with websocket support
|
|
@@ -641,7 +639,7 @@ You can live test the TypeScript SDK on the [AccelByte TypeScript SDK Playground
|
|
|
641
639
|
Yes, you can install all the AGS SDK packages in one command using the following `npm` command:
|
|
642
640
|
|
|
643
641
|
```bash
|
|
644
|
-
npm install @accelbyte/sdk @accelbyte/sdk-ams @accelbyte/sdk-achievement @accelbyte/sdk-basic @accelbyte/sdk-audit @accelbyte/sdk-buildinfo @accelbyte/sdk-challenge @accelbyte/sdk-chat @accelbyte/sdk-cloudsave @accelbyte/sdk-differ @accelbyte/sdk-dsmcontroller @accelbyte/sdk-event @accelbyte/sdk-gametelemetry @accelbyte/sdk-gdpr @accelbyte/sdk-groups @accelbyte/sdk-iam @accelbyte/sdk-inventory @accelbyte/sdk-leaderboard @accelbyte/sdk-legal @accelbyte/sdk-lobby @accelbyte/sdk-matchmaking
|
|
642
|
+
npm install @accelbyte/sdk @accelbyte/sdk-ams @accelbyte/sdk-achievement @accelbyte/sdk-basic @accelbyte/sdk-audit @accelbyte/sdk-buildinfo @accelbyte/sdk-challenge @accelbyte/sdk-chat @accelbyte/sdk-cloudsave @accelbyte/sdk-differ @accelbyte/sdk-dsmcontroller @accelbyte/sdk-event @accelbyte/sdk-gametelemetry @accelbyte/sdk-gdpr @accelbyte/sdk-groups @accelbyte/sdk-iam @accelbyte/sdk-inventory @accelbyte/sdk-leaderboard @accelbyte/sdk-legal @accelbyte/sdk-lobby @accelbyte/sdk-matchmaking @accelbyte/sdk-qosmanager @accelbyte/sdk-reporting @accelbyte/sdk-seasonpass @accelbyte/sdk-session @accelbyte/sdk-social @accelbyte/sdk-ugc @accelbyte/sdk-platform
|
|
645
643
|
```
|
|
646
644
|
|
|
647
645
|
## Contributions
|
package/dist/cjs/node/index.cjs
CHANGED
|
@@ -795,15 +795,12 @@ var INTERNAL_SERVICES = {
|
|
|
795
795
|
"/lobby": "justice-lobby-server",
|
|
796
796
|
"/match2": "justice-matchmaking-v2",
|
|
797
797
|
// sdk-matchmaking
|
|
798
|
-
"/matchmaking": "justice-matchmaking",
|
|
799
|
-
// sdk-matchmaking-v1
|
|
800
798
|
"/odin-config": "justice-odin-config-service",
|
|
801
799
|
"/platform": "justice-platform-service",
|
|
802
800
|
"/qosm": "justice-qos-manager-service",
|
|
803
801
|
"/reporting": "justice-reporting-service",
|
|
804
802
|
"/seasonpass": "justice-seasonpass-service",
|
|
805
803
|
"/session": "justice-session-service",
|
|
806
|
-
"/sessionbrowser": "justice-session-browser-service",
|
|
807
804
|
"/social": "justice-social-service",
|
|
808
805
|
"/ugc": "justice-ugc-service",
|
|
809
806
|
"/config": "justice-config-service"
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/index.node.ts","../../../src/polyfills/node.ts","../../../src/utils/ApiUtils.ts","../../../src/utils/Network.ts","../../../src/utils/SdkDevice.ts","../../../src/AccelByteSDK.ts","../../../src/constants/IamErrorCode.ts","../../../src/constants/LinkAccount.ts","../../../src/interceptors/AuthInterceptors.ts","../../../src/utils/DesktopChecker.ts","../../../src/utils/BrowserHelper.ts","../../../src/utils/RefreshSession.ts","../../../../sdk-iam/src/generated-definitions/TokenWithDeviceCookieResponseV3.ts","../../../../sdk-iam/src/generated-definitions/JwtBanV3.ts","../../../../sdk-iam/src/generated-definitions/NamespaceRole.ts","../../../../sdk-iam/src/generated-definitions/PermissionV3.ts","../../../src/utils/CodeGenUtil.ts","../../../src/utils/Validate.ts","../../../src/interceptors/AuthInterceptorDeps.ts","../../../src/constants/paths.ts","../../../src/interceptors/CustomPathInterceptor.ts","../../../src/interceptors/ErrorInterceptor.ts","../../../src/utils/Type.ts","../../../src/utils/UrlHelper.ts"],"sourcesContent":["/*\n * Copyright (c) 2022 AccelByte Inc. All Rights Reserved\n * This is licensed software from AccelByte Inc, for limitations\n * and restrictions contact your company contract manager.\n */\n\n// This needs to be imported otherwise the polyfill will appear after all of the code bundles.\nimport './polyfills/node'\nexport * from './index'\n","/*\n * Copyright (c) 2018-2024 AccelByte Inc. All Rights Reserved\n * This is licensed software from AccelByte Inc, for limitations\n * and restrictions contact your company contract manager.\n */\nimport { webcrypto } from 'crypto'\nimport WebSocket from 'ws'\n\nif (!global.crypto) {\n global.crypto = webcrypto as unknown as Crypto\n}\n\nif (!global.WebSocket) {\n global.WebSocket = WebSocket\n}\n","/*\n * Copyright (c) 2022-2024 AccelByte Inc. All Rights Reserved\n * This is licensed software from AccelByte Inc, for limitations\n * and restrictions contact your company contract manager.\n */\n\nimport axios, { AxiosRequestConfig } from 'axios'\n\nexport class ApiUtils {\n static mergeAxiosConfigs = (config: AxiosRequestConfig, overrides?: AxiosRequestConfig): AxiosRequestConfig => {\n return {\n ...config,\n ...overrides,\n headers: {\n ...config?.headers,\n ...overrides?.headers\n }\n }\n }\n\n static is4xxError = (error: unknown): boolean => {\n if (axios.isAxiosError(error) && error.response) {\n return error.response.status >= 400 && error.response.status <= 499\n }\n return false\n }\n}\n","/*\n * Copyright (c) 2022-2024 AccelByte Inc. All Rights Reserved\n * This is licensed software from AccelByte Inc, for limitations\n * and restrictions contact your company contract manager.\n */\nimport axios, { AxiosInstance, AxiosRequestConfig } from 'axios'\nimport qs from 'query-string'\nimport { SdkDevice } from './SdkDevice'\n\nexport class Network {\n static create(...configs: AxiosRequestConfig[]): AxiosInstance {\n const axiosInstance = axios.create(\n Object.assign(\n {\n paramsSerializer: qs.stringify\n },\n ...configs\n )\n )\n\n return axiosInstance\n }\n\n static withBearerToken(accessToken: string, config?: AxiosRequestConfig): AxiosInstance {\n return Network.create(config || {}, {\n headers: { Authorization: `Bearer ${accessToken}` }\n })\n }\n\n static setDeviceTokenCookie = () => {\n const deviceId = SdkDevice.getDeviceId()\n document.cookie = `device_token=${deviceId}; path=/;`\n }\n\n static removeDeviceTokenCookie = () => {\n document.cookie = `device_token=; expires=${new Date(0).toUTCString()}`\n }\n\n static getFormUrlEncodedData = (data: any): URLSearchParams => {\n const formPayload = new URLSearchParams()\n const formKeys = Object.keys(data) as []\n formKeys.forEach(key => {\n if (data[key]) formPayload.append(key, data[key])\n })\n return formPayload\n }\n}\n","/*\n * Copyright (c) 2022 AccelByte Inc. All Rights Reserved\n * This is licensed software from AccelByte Inc, for limitations\n * and restrictions contact your company contract manager.\n */\nimport * as uuid from 'uuid'\n\nexport class SdkDevice {\n static ID_KEY = 'deviceId'\n\n static TYPE = {\n MOBILE: 'mobile',\n DESKTOP: 'desktop'\n }\n\n static getType = () => {\n return isMobile() ? SdkDevice.TYPE.MOBILE : SdkDevice.TYPE.DESKTOP\n }\n\n static generateUUID = () => {\n const deviceIdInUUID = uuid.v4().split('-').join('')\n localStorage.setItem(SdkDevice.ID_KEY, deviceIdInUUID)\n return deviceIdInUUID\n }\n\n static getDeviceId = () => {\n return localStorage.getItem(this.ID_KEY) || this.generateUUID()\n }\n}\n\n/*\n Below function is copied from npm 'is-mobile'\n */\nconst mobileRE =\n /(android|bb\\d+|meego).+mobile|armv7l|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series[46]0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i\nconst tabletRE = /android|ipad|playbook|silk/i\n\nconst isMobile = (opts?: any) => {\n if (!opts) opts = {}\n let ua = opts.ua\n if (!ua && typeof navigator !== 'undefined') ua = navigator.userAgent\n if (ua && ua.headers && typeof ua.headers['user-agent'] === 'string') {\n ua = ua.headers['user-agent']\n }\n if (typeof ua !== 'string') return false\n\n let result = mobileRE.test(ua) || (!!opts.tablet && tabletRE.test(ua))\n\n if (\n !result &&\n opts.tablet &&\n opts.featureDetect &&\n navigator &&\n navigator.maxTouchPoints > 1 &&\n ua.indexOf('Macintosh') !== -1 &&\n ua.indexOf('Safari') !== -1\n ) {\n result = true\n }\n\n return result\n}\n","/*\n * Copyright (c) 2022-2024 AccelByte Inc. All Rights Reserved\n * This is licensed software from AccelByte Inc, for limitations\n * and restrictions contact your company contract manager.\n */\n\nimport { AxiosInstance, AxiosRequestConfig } from 'axios'\nimport { AxiosConfig, CoreConfig, Interceptor, SdkConstructorParam, SdkSetConfigParam, TokenConfig, WebSocketConfig } from './Types'\nimport { ApiUtils } from './utils/ApiUtils'\nimport { Network } from './utils/Network'\nimport { MakeRequired } from './utils/Type'\n\nexport const AccelByte = {\n SDK: (param: SdkConstructorParam) => {\n return new AccelByteSDK(param)\n }\n}\n\nexport class AccelByteSDK {\n private coreConfig: CoreConfig\n private axiosConfig: AxiosConfig\n private axiosInstance: AxiosInstance\n private webSocketConfig: WebSocketConfig\n private token: TokenConfig\n\n constructor({ coreConfig, axiosConfig, webSocketConfig }: SdkConstructorParam) {\n this.coreConfig = {\n ...coreConfig,\n useSchemaValidation: coreConfig.useSchemaValidation ?? true\n }\n this.axiosConfig = {\n /**\n * when user create a variable to store intercepters and passed into sdk\n * the sdk will use the variable as reference value,\n * so when new interceptor added, reference value will also has the new interceptor,\n * to avoid this we create shallow copy for the interceptors\n */\n interceptors: axiosConfig?.interceptors ? [...axiosConfig.interceptors] : undefined,\n request: {\n timeout: 60000,\n withCredentials: true,\n ...axiosConfig?.request,\n headers: {\n 'Content-Type': 'application/json',\n ...axiosConfig?.request?.headers\n }\n }\n }\n this.axiosInstance = this.createAxiosInstance()\n this.webSocketConfig = {\n allowReconnect: webSocketConfig?.allowReconnect ?? true,\n maxReconnectAttempts: webSocketConfig?.maxReconnectAttempts ?? 0\n }\n this.token = {}\n }\n\n private createAxiosInstance() {\n const axiosInstance = Network.create({ baseURL: this.coreConfig.baseURL, ...this.axiosConfig.request })\n const interceptors = this.axiosConfig.interceptors\n\n if (interceptors) {\n for (const interceptor of interceptors) {\n if (interceptor.type === 'request') {\n axiosInstance.interceptors.request.use(interceptor?.onRequest, interceptor.onError)\n }\n\n if (interceptor.type === 'response') {\n axiosInstance.interceptors.response.use(interceptor?.onSuccess, interceptor.onError)\n }\n }\n }\n\n return axiosInstance\n }\n\n /**\n * Assembles and returns the current Axios instance along with core and Axios configurations.\n */\n assembly() {\n return {\n axiosInstance: this.axiosInstance,\n coreConfig: this.coreConfig,\n axiosConfig: this.axiosConfig as MakeRequired<AxiosConfig, 'request'>,\n webSocketConfig: this.webSocketConfig\n }\n }\n\n /**\n * Creates a new instance of AccelByteSDK with a shallow copy of the current configurations.\n * Optionally allows excluding interceptors.\n * @param {boolean} [opts.interceptors] - Whether to include interceptors in the clone. Default is true.\n * @returns {AccelByteSDK} A new instance of AccelByteSDK with the cloned configuration.\n */\n clone(opts?: { interceptors?: boolean }): AccelByteSDK {\n const newConfigs = {\n coreConfig: { ...this.coreConfig },\n axiosConfig: { ...this.axiosConfig }\n }\n\n if (opts?.interceptors === false) {\n delete newConfigs.axiosConfig.interceptors\n }\n\n const newSdkInstance = new AccelByteSDK(newConfigs)\n\n newSdkInstance.setToken(this.token)\n\n return newSdkInstance\n }\n\n /**\n * Adds interceptors to the current Axios configuration.\n */\n addInterceptors(interceptors: Interceptor[]): AccelByteSDK {\n if (!this.axiosConfig.interceptors) {\n this.axiosConfig.interceptors = []\n }\n\n this.axiosConfig.interceptors.push(...interceptors)\n\n return this\n }\n\n /**\n * Removes interceptors from the Axios configuration. Can remove all interceptors or filter specific ones.\n * @param {function} [filterCallback] - Optional filter function to remove specific interceptors.\n */\n removeInterceptors(): AccelByteSDK\n removeInterceptors(filterCallback: (interceptor: Interceptor) => boolean): AccelByteSDK\n\n removeInterceptors(filterCallback?: (interceptor: Interceptor) => boolean) {\n if (!this.axiosConfig?.interceptors) return this\n if (!filterCallback) {\n this.axiosConfig.interceptors = undefined\n this.axiosInstance.interceptors.request.clear()\n this.axiosInstance.interceptors.response.clear()\n return this\n }\n\n this.axiosConfig.interceptors = this.axiosConfig.interceptors.filter(filterCallback)\n this.axiosInstance = this.createAxiosInstance()\n return this\n }\n\n /**\n * Updates the SDK's core and Axios configurations.\n * Merges the provided configurations with the current ones.\n */\n setConfig({ coreConfig, axiosConfig, webSocketConfig }: SdkSetConfigParam) {\n this.coreConfig = {\n ...this.coreConfig,\n ...coreConfig\n }\n this.axiosConfig = {\n ...this.axiosConfig,\n ...axiosConfig?.interceptors,\n request: ApiUtils.mergeAxiosConfigs(this.axiosConfig.request as AxiosRequestConfig, axiosConfig?.request)\n }\n this.webSocketConfig = {\n ...this.webSocketConfig,\n ...webSocketConfig\n }\n this.axiosInstance = this.createAxiosInstance()\n\n return this\n }\n\n /**\n * Set accessToken and refreshToken and updates the Axios request headers to use Bearer authentication.\n */\n setToken(token: TokenConfig) {\n this.token = {\n ...this.token,\n ...token\n }\n const configOverride = { headers: { Authorization: this.token.accessToken ? `Bearer ${this.token.accessToken}` : '' } }\n this.axiosConfig = {\n ...this.axiosConfig,\n request: ApiUtils.mergeAxiosConfigs(this.axiosInstance.defaults as AxiosRequestConfig, configOverride)\n }\n this.axiosInstance = this.createAxiosInstance()\n }\n\n /**\n * Removes the currently set token.\n */\n removeToken() {\n this.token = {}\n const configOverride = { headers: { Authorization: undefined } }\n this.axiosConfig = {\n ...this.axiosConfig,\n request: ApiUtils.mergeAxiosConfigs(this.axiosInstance.defaults as AxiosRequestConfig, configOverride)\n }\n this.axiosInstance = this.createAxiosInstance()\n }\n\n /**\n * Retrieves the current token configuration.\n */\n getToken() {\n return this.token\n }\n}\n","/*\n * Copyright (c) 2024 AccelByte Inc. All Rights Reserved\n * This is licensed software from AccelByte Inc, for limitations\n * and restrictions contact your company contract manager.\n */\n\n// More detail: https://github.com/AccelByte/go-restful-plugins/blob/master/pkg/auth/iam/event.go\nexport enum IamErrorCode {\n InternalServerError = 20000,\n UnauthorizedAccess = 20001,\n ValidationError = 20002,\n ForbiddenAccess = 20003,\n TooManyRequests = 20007,\n UserNotFound = 20008,\n TokenIsExpired = 20011,\n InsufficientPermissions = 20013,\n InvalidAudience = 20014,\n InsufficientScope = 20015,\n UnableToParseRequestBody = 20019,\n InvalidPaginationParameters = 20021,\n TokenIsNotUserToken = 20022,\n InvalidRefererHeader = 20023,\n SubdomainMismatch = 20030\n}\n","/*\n * Copyright (c) 2022-2024 AccelByte Inc. All Rights Reserved\n * This is licensed software from AccelByte Inc, for limitations\n * and restrictions contact your company contract manager.\n */\n\nexport const ERROR_LINK_ANOTHER_3RD_PARTY_ACCOUNT = 10200\nexport const ERROR_CODE_LINK_DELETION_ACCOUNT = 10135\nexport const ERROR_CODE_TOKEN_EXPIRED = 10196\nexport const ERROR_USER_BANNED = 10134\n","/*\n * Copyright (c) 2022-2024 AccelByte Inc. All Rights Reserved\n * This is licensed software from AccelByte Inc, for limitations\n * and restrictions contact your company contract manager.\n */\nimport axios, { AxiosError, AxiosRequestConfig } from 'axios'\nimport { Interceptor } from '../Types'\nimport { DesktopChecker } from '../utils/DesktopChecker'\nimport { Network } from '../utils/Network'\nimport { RefreshSession } from '../utils/RefreshSession'\nimport { OAuth20$, OAuth20V4$, TokenWithDeviceCookieResponseV3 } from './AuthInterceptorDeps'\n\nconst REFRESH_EXPIRY = 1000\nconst REFRESH_EXPIRY_UPDATE_RATE = 500\nconst REFRESH_EXPIRY_CHECK_RATE = 1000\n\nenum GrantTokenUrls {\n GRANT_TOKEN = '/iam/v3/oauth/token',\n GRANT_TOKEN_V4 = '/iam/v4/oauth/token'\n}\n\nenum LoginUrls {\n REVOKE = '/iam/v3/oauth/revoke'\n}\n\ntype GrantTokenUrlString = `${GrantTokenUrls}`\n\ntype RefreshArgs = {\n axiosConfig: AxiosRequestConfig\n refreshToken?: string\n clientId: string\n tokenUrl?: GrantTokenUrlString\n}\n\nconst noOp = () => {}\n\nexport class RefreshToken {\n private config: RefreshArgs\n private interceptors: Interceptor[]\n\n constructor({ config, interceptors }: { config: RefreshArgs; interceptors?: Interceptor[] }) {\n this.config = config\n this.interceptors = interceptors || []\n }\n\n // Return Promise<true> if refresh in any tab is successful;\n runWithLock = (): Promise<Partial<TokenWithDeviceCookieResponseV3> | false> => {\n //\n if (RefreshSession.isLocked()) {\n return Promise.resolve().then(async () => {\n // This block is executed when other tab / request is refreshing\n while (RefreshSession.isLocked()) {\n await RefreshSession.sleepAsync(REFRESH_EXPIRY_CHECK_RATE)\n }\n return {}\n })\n }\n\n RefreshSession.lock(REFRESH_EXPIRY)\n let isLocallyRefreshingToken = true\n\n ;(async () => {\n // eslint-disable-next-line no-unmodified-loop-condition\n while (isLocallyRefreshingToken) {\n RefreshSession.lock(REFRESH_EXPIRY)\n await RefreshSession.sleepAsync(REFRESH_EXPIRY_UPDATE_RATE)\n }\n })()\n\n return Promise.resolve()\n .then(() => this.run())\n .finally(() => {\n isLocallyRefreshingToken = false\n RefreshSession.unlock()\n })\n }\n\n run = async () => {\n const { axiosConfig, refreshToken } = this.config\n // we need this to check if app use “withCredentials: false” and don’t have refreshToken it should return false,\n // because we track it as a logout user, if not do this even user logout on the desktop app (that use withCredentials: false)\n // will automatically login with refreshSession\n if (DesktopChecker.isDesktopApp() && !axiosConfig.withCredentials && !refreshToken) {\n return false\n }\n\n const result = await this.refreshToken()\n if (result.error) {\n return false\n }\n\n return result.response.data\n }\n\n refreshToken = () => {\n const { axiosConfig, refreshToken, clientId, tokenUrl } = this.config\n const config = {\n ...axiosConfig,\n /**\n * Ideally `withCredentials` should be `true` to make sure that\n * cookies always included when refreshing token\n * especially on cross-origin requests.\n * But if `refreshToken` is provided (e.g. from Launcher),\n * we can set it to false and send refresh_token via payload.\n */\n withCredentials: !refreshToken,\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded',\n Authorization: `Basic ${Buffer.from(`${clientId}:`).toString('base64')}`\n }\n }\n const axios = Network.create(config)\n\n for (const interceptor of this.interceptors) {\n if (interceptor.type === 'request') {\n axios.interceptors.request.use(interceptor?.onRequest, interceptor.onError)\n }\n\n if (interceptor.type === 'response') {\n axios.interceptors.response.use(interceptor?.onSuccess, interceptor.onError)\n }\n }\n\n const payload = {\n refresh_token: refreshToken || undefined,\n client_id: clientId,\n grant_type: 'refresh_token'\n } as const\n\n if (tokenUrl === GrantTokenUrls.GRANT_TOKEN_V4) {\n return new OAuth20V4$(axios).postOauthToken_v4(payload)\n }\n\n const oauth20 = new OAuth20$(axios)\n return oauth20.postOauthToken(payload)\n }\n}\n\nconst refreshComplete = (\n error: AxiosError,\n tokenResponse: Partial<TokenWithDeviceCookieResponseV3> | false,\n onSessionExpired: (() => void) | undefined,\n axiosConfig: AxiosRequestConfig,\n errorConfig: AxiosRequestConfig\n) => {\n //\n if (tokenResponse) {\n const { access_token } = tokenResponse\n\n // desktop\n if (!axiosConfig.withCredentials && access_token) {\n return axios({\n ...errorConfig,\n headers: {\n ...errorConfig.headers,\n Authorization: `Bearer ${access_token}`\n }\n })\n // web\n } else {\n return axios(errorConfig)\n }\n }\n\n if (onSessionExpired) {\n onSessionExpired()\n }\n throw error\n}\n\ntype SessionExpiredInterceptorOptions = {\n /**\n * The client ID used by the SDK, obtained from the Admin Portal under OAuth Clients.\n */\n clientId: string\n\n /**\n * An optional array of URLs that should be ignored when handling session expiration.\n * Default to `['/iam/v3/oauth/token', '/iam/v4/oauth/token', '/iam/v3/oauth/revoke']`\n */\n expectedErrorUrls?: string[]\n\n /**\n * A callback function that retrieves the current refresh token.\n */\n getRefreshToken?: () => string | undefined\n\n /**\n * The URL endpoint for obtaining a new token. Defaults to `'/iam/v3/oauth/token'`.\n */\n tokenUrl?: GrantTokenUrlString\n /**\n * A callback function triggered when the session has expired.\n */\n onSessionExpired: () => void\n\n /**\n * A callback function triggered when successfully get new session.\n */\n onGetUserSession?: (accessToken: string, refreshToken: string) => void\n}\n\nexport const createAuthInterceptor = ({\n clientId,\n onSessionExpired,\n onGetUserSession,\n expectedErrorUrls = Object.values({ ...LoginUrls, ...GrantTokenUrls }),\n getRefreshToken,\n tokenUrl = GrantTokenUrls.GRANT_TOKEN\n}: SessionExpiredInterceptorOptions): Interceptor => {\n return {\n type: 'response',\n name: 'session-expired',\n onError: e => {\n const error = e as AxiosError\n const { config, response } = error\n\n if (axios.isCancel(error)) {\n // expected case, exit\n return Promise.reject(error)\n }\n\n if (!response) {\n console.warn(`sdk:ERR_INTERNET_DISCONNECTED ${config?.baseURL}${config?.url}. ${(error as AxiosError).message}\\n`)\n }\n\n if (response?.status === 401) {\n const { url } = config || {}\n const axiosConfig = config as AxiosRequestConfig\n const refreshToken = getRefreshToken?.()\n\n // expected business case, exit\n if (!url || (url && expectedErrorUrls.includes(url))) {\n return Promise.reject(error)\n }\n\n const refresh = new RefreshToken({\n config: { axiosConfig, clientId, refreshToken, tokenUrl },\n interceptors: [\n createRefreshSessionInterceptor({ tokenUrl }),\n createGetSessionInterceptor({ onGetUserSession: onGetUserSession || noOp, tokenUrl })\n ]\n })\n\n // need to lock on the desktop as well to prevent multiple token request\n return refresh.runWithLock().then(tokenResponse => {\n return refreshComplete(error, tokenResponse, onSessionExpired, axiosConfig, config || {})\n })\n }\n\n return Promise.reject(error)\n }\n }\n}\n\ntype RefreshSessioNInterceptorOptions = {\n /**\n * The URL endpoint for obtaining a new token. Defaults to `'/iam/v3/oauth/token'`.\n */\n tokenUrl?: GrantTokenUrlString\n}\n\nexport const createRefreshSessionInterceptor = (options?: RefreshSessioNInterceptorOptions): Interceptor => {\n const { tokenUrl = GrantTokenUrls.GRANT_TOKEN } = options || {}\n\n return {\n type: 'request',\n name: 'refresh-session',\n onError: error => Promise.reject(error),\n onRequest: async config => {\n // need to lock on the desktop as well to sleep other request before refresh session is done\n const isRefreshTokenUrl = config.url === tokenUrl\n // eslint-disable-next-line no-unmodified-loop-condition\n while (RefreshSession.isLocked() && !isRefreshTokenUrl) {\n await RefreshSession.sleepAsync(200)\n }\n return config\n }\n }\n}\n\ntype GetSessionInterceptorOptions = {\n /**\n * The URL endpoint for obtaining a new token. Defaults to `'/iam/v3/oauth/token'`.\n */\n tokenUrl?: GrantTokenUrlString\n\n /**\n * A callback function triggered when successfully get new session.\n */\n onGetUserSession: (accessToken: string, refreshToken: string) => void\n}\n\nexport const createGetSessionInterceptor = ({\n tokenUrl = GrantTokenUrls.GRANT_TOKEN,\n onGetUserSession\n}: GetSessionInterceptorOptions): Interceptor => ({\n type: 'response',\n name: 'get-session',\n onError: error => Promise.reject(error),\n onSuccess: response => {\n const { config, status } = response\n\n if (config.url === tokenUrl && status === 200) {\n // @ts-ignore\n const { access_token, refresh_token } = response.data as TokenWithDeviceCookieResponseV3\n\n if (access_token) {\n onGetUserSession(access_token, refresh_token ?? '')\n }\n }\n\n return response\n }\n})\n","/*\n * Copyright (c) 2022 AccelByte Inc. All Rights Reserved\n * This is licensed software from AccelByte Inc, for limitations\n * and restrictions contact your company contract manager.\n */\nexport class DesktopChecker {\n private static desktopApp = DesktopChecker.isElectron()\n\n static isDesktopApp() {\n return DesktopChecker.desktopApp && !DesktopChecker.isInIframe()\n }\n\n private static isInIframe() {\n try {\n return window.self !== window.top\n } catch (error) {\n return true\n }\n }\n\n // borrowed from https://github.com/cheton/is-electron\n private static isElectron() {\n // @ts-ignore Renderer process\n if (typeof window !== 'undefined' && typeof window.process === 'object' && window.process.type === 'renderer') {\n return true\n }\n // Main process\n if (typeof process !== 'undefined' && typeof process.versions === 'object' && !!process.versions.electron) {\n return true\n }\n // Detect the user agent when the `nodeIntegration` option is set to false\n if (typeof navigator === 'object' && typeof navigator.userAgent === 'string' && navigator.userAgent.indexOf('Electron') >= 0) {\n return true\n }\n return false\n }\n}\n","/*\n * Copyright (c) 2022 AccelByte Inc. All Rights Reserved\n * This is licensed software from AccelByte Inc, for limitations\n * and restrictions contact your company contract manager.\n */\nexport class BrowserHelper {\n static isOnBrowser = () => {\n return typeof window !== 'undefined' && window.document\n }\n}\n","/*\n * Copyright (c) 2022-2024 AccelByte Inc. All Rights Reserved\n * This is licensed software from AccelByte Inc, for limitations\n * and restrictions contact your company contract manager.\n */\nimport { AxiosRequestConfig } from 'axios'\nimport { BrowserHelper } from './BrowserHelper'\n\nexport class RefreshSession {\n // --\n static KEY = 'RefreshSession.lock'\n\n static isLocked = (): boolean => {\n if (!BrowserHelper.isOnBrowser()) return false\n const lockStatus = localStorage.getItem(RefreshSession.KEY)\n if (!lockStatus) {\n return false\n }\n const lockExpiry = Number(lockStatus)\n if (isNaN(lockExpiry)) {\n return false\n }\n return lockExpiry > new Date().getTime()\n }\n\n static lock = (expiry: number) => {\n if (!BrowserHelper.isOnBrowser()) return\n localStorage.setItem(RefreshSession.KEY, `${new Date().getTime() + expiry}`)\n }\n\n static unlock = () => {\n if (!BrowserHelper.isOnBrowser()) return\n localStorage.removeItem(RefreshSession.KEY)\n }\n\n static sleepAsync = (timeInMs: number) => new Promise(resolve => setTimeout(resolve, timeInMs))\n\n static isBearerAuth = (config?: AxiosRequestConfig) => {\n // @ts-ignore\n if (config?.headers?.Authorization?.toLowerCase().indexOf('bearer') > -1) {\n return true\n }\n return false\n }\n}\n","/*\n * Copyright (c) 2022-2024 AccelByte Inc. All Rights Reserved\n * This is licensed software from AccelByte Inc, for limitations\n * and restrictions contact your company contract manager.\n */\nimport { z } from 'zod'\nimport { JwtBanV3 } from './JwtBanV3.js'\nimport { NamespaceRole } from './NamespaceRole.js'\nimport { PermissionV3 } from './PermissionV3.js'\n\nexport const TokenWithDeviceCookieResponseV3 = z.object({\n access_token: z.string(),\n auth_trust_id: z.string().nullish(),\n bans: z.array(JwtBanV3).nullish(),\n display_name: z.string().nullish(),\n expires_in: z.number().int(),\n is_comply: z.boolean().nullish(),\n jflgs: z.number().int().nullish(),\n namespace: z.string(),\n namespace_roles: z.array(NamespaceRole).nullish(),\n permissions: z.array(PermissionV3),\n platform_id: z.string().nullish(),\n platform_user_id: z.string().nullish(),\n refresh_expires_in: z.number().int().nullish(),\n refresh_token: z.string().nullish(),\n roles: z.array(z.string()).nullish(),\n scope: z.string(),\n simultaneous_platform_id: z.string().nullish(),\n simultaneous_platform_user_id: z.string().nullish(),\n token_type: z.string(),\n unique_display_name: z.string().nullish(),\n user_id: z.string().nullish(),\n xuid: z.string().nullish()\n})\n\nexport interface TokenWithDeviceCookieResponseV3 extends z.TypeOf<typeof TokenWithDeviceCookieResponseV3> {}\n","/*\n * Copyright (c) 2022-2024 AccelByte Inc. All Rights Reserved\n * This is licensed software from AccelByte Inc, for limitations\n * and restrictions contact your company contract manager.\n */\nimport { z } from 'zod'\n\nexport const JwtBanV3 = z.object({\n ban: z.string(),\n disabledDate: z.string().nullish(),\n enabled: z.boolean(),\n endDate: z.string(),\n targetedNamespace: z.string()\n})\n\nexport interface JwtBanV3 extends z.TypeOf<typeof JwtBanV3> {}\n","/*\n * Copyright (c) 2022-2024 AccelByte Inc. All Rights Reserved\n * This is licensed software from AccelByte Inc, for limitations\n * and restrictions contact your company contract manager.\n */\nimport { z } from 'zod'\n\nexport const NamespaceRole = z.object({ namespace: z.string(), roleId: z.string() })\n\nexport interface NamespaceRole extends z.TypeOf<typeof NamespaceRole> {}\n","/*\n * Copyright (c) 2022-2024 AccelByte Inc. All Rights Reserved\n * This is licensed software from AccelByte Inc, for limitations\n * and restrictions contact your company contract manager.\n */\nimport { z } from 'zod'\n\nexport const PermissionV3 = z.object({\n action: z.number().int(),\n resource: z.string(),\n schedAction: z.number().int().nullish(),\n schedCron: z.string().nullish(),\n schedRange: z.array(z.string()).nullish()\n})\n\nexport interface PermissionV3 extends z.TypeOf<typeof PermissionV3> {}\n","/*\n * Copyright (c) 2022 AccelByte Inc. All Rights Reserved\n * This is licensed software from AccelByte Inc, for limitations\n * and restrictions contact your company contract manager.\n */\nexport class CodeGenUtil {\n /**\n * Returns a hash code from a string\n * @param {String} str The string to hash.\n * @return {Number} A 32bit integer\n * @see http://werxltd.com/wp/2010/05/13/javascript-implementation-of-javas-string-hashcode-method/\n */\n static hashCode(str: string): number {\n let hash = 0\n for (let i = 0, len = str.length; i < len; i++) {\n const chr = str.charCodeAt(i)\n hash = (hash << 5) - hash + chr\n hash |= 0 // Convert to 32bit integer\n }\n return hash\n }\n\n static getFormUrlEncodedData = (data: Record<string, any>): URLSearchParams => {\n const formPayload = new URLSearchParams()\n const formKeys = Object.keys(data) as []\n formKeys.forEach(key => {\n if (typeof data[key] !== 'undefined') formPayload.append(key, data[key])\n })\n return formPayload\n }\n}\n","/*\n * Copyright (c) 2022-2024 AccelByte Inc. All Rights Reserved\n * This is licensed software from AccelByte Inc, for limitations\n * and restrictions contact your company contract manager.\n */\nimport { AxiosError, AxiosResponse } from 'axios'\nimport { z, ZodError } from 'zod'\n\nexport type ResponseError = Error | AxiosError\n\nexport type Response<T> =\n | {\n response: AxiosResponse<T>\n error: null\n }\n | {\n response: null\n error: ResponseError\n }\n\nexport class Validate {\n static validateOrReturnResponse<D>(\n useSchemaValidation: boolean,\n networkCall: () => Promise<AxiosResponse<D>>,\n Codec: z.ZodType<D>,\n modelName: string\n ) {\n return useSchemaValidation ? Validate.responseType(() => networkCall(), Codec, modelName) : Validate.unsafeResponse(() => networkCall())\n }\n\n static responseType<D>(networkCall: () => Promise<AxiosResponse<D>>, Codec: z.ZodType<D>, modelName: string) {\n return wrapNetworkCallSafely<D>(async () => {\n const response = await networkCall()\n const decodeResult = Codec.safeParse(response.data)\n if (!decodeResult.success && response.status !== 204) {\n throw new DecodeError({ error: decodeResult.error, response, modelName })\n }\n return response\n })\n }\n\n static unsafeResponse<D>(networkCall: () => Promise<AxiosResponse<D>>) {\n return wrapNetworkCallSafely<D>(() => networkCall())\n }\n\n static safeParse<D>(data: unknown, Codec: z.ZodType<D>): D | null {\n const result = Codec.safeParse(data)\n if (result.success) {\n return result.data\n }\n return null\n }\n}\n\nasync function wrapNetworkCallSafely<D>(networkCallFunction: () => Promise<AxiosResponse<D>>): Promise<Response<D>> {\n try {\n const response = await networkCallFunction()\n return { response, error: null }\n } catch (error) {\n return { response: null, error: <Error>error }\n }\n}\n\nexport class DecodeError extends Error {\n constructor({ error, response, modelName }: { error: ZodError; response: AxiosResponse; modelName: string }) {\n const msg = `response from url \"${response.config.url}\" doesn't match model \"${modelName}\"`\n super(msg)\n console.error(msg, error)\n }\n}\n","/*\n * Copyright (c) 2022-2024 AccelByte Inc. All Rights Reserved\n * This is licensed software from AccelByte Inc, for limitations\n * and restrictions contact your company contract manager.\n */\nimport { AxiosInstance, AxiosRequestConfig } from 'axios'\nimport { TokenWithDeviceCookieResponseV3 } from '~/iam-definitions/TokenWithDeviceCookieResponseV3'\nimport { CodeGenUtil } from '../utils/CodeGenUtil'\nimport { Response, Validate } from '../utils/Validate'\n\nexport { TokenWithDeviceCookieResponseV3 }\n\n/*\n * Copyright (c) 2022-2024 AccelByte Inc. All Rights Reserved\n * This is licensed software from AccelByte Inc, for limitations\n * and restrictions contact your company contract manager.\n */\n\nexport class OAuth20$ {\n // @ts-ignore\n constructor(private axiosInstance: AxiosInstance) {}\n\n postOauthToken<T = TokenWithDeviceCookieResponseV3>(data: {\n grant_type: 'authorization_code' | 'client_credentials' | 'password' | 'refresh_token'\n username?: string | null\n password?: string | null\n code?: string | null\n code_verifier?: string | null\n client_id?: string | null\n redirect_uri?: string | null\n refresh_token?: string | null\n extend_exp?: boolean | null\n }): Promise<Response<T>> {\n const params = {} as AxiosRequestConfig\n const url = '/iam/v3/oauth/token'\n const resultPromise = this.axiosInstance.post(url, CodeGenUtil.getFormUrlEncodedData(data), {\n ...params,\n headers: { ...params.headers, 'content-type': 'application/x-www-form-urlencoded' }\n })\n\n return Validate.responseType(() => resultPromise, TokenWithDeviceCookieResponseV3, 'TokenWithDeviceCookieResponseV3')\n }\n}\n\nexport class OAuth20V4$ {\n // @ts-ignore\n // prettier-ignore\n constructor(private axiosInstance: AxiosInstance) {}\n\n /**\n * This endpoint supports grant type: 1. Grant Type == <code>authorization_code</code>: It generates the user token by given the authorization code which generated in "/iam/v3/authenticate" API response. It should also pass in the redirect_uri, which should be the same as generating the authorization code request. 2. Grant Type == <code>password</code>: The grant type to use for authenticating a user, whether it's by email / username and password combination or through platform. 3. Grant Type == <code>refresh_token</code>: Used to get a new access token for a valid refresh token. 4. Grant Type == <code>client_credentials</code>: It generates a token by checking the client credentials provided through Authorization header. 5. Grant Type == <code>urn:ietf:params:oauth:grant-type:extend_client_credentials</code>: It generates a token by checking the client credentials provided through Authorization header. It only allows publisher/studio namespace client. In generated token: 1. There wil be no roles, namespace_roles & permission. 2. The scope will be fixed as 'extend'. 3. There will have a new field 'extend_namespace', the value is from token request body. 6. Grant Type == <code>urn:ietf:params:oauth:grant-type:login_queue_ticket</code>: It generates a token by validating the login queue ticket against login queue service. ## Access Token Content Following is the access token’s content: - **namespace**. It is the namespace the token was generated from. - **display_name**. The display name of the sub. It is empty if the token is generated from the client credential - **roles**. The sub’s roles. It is empty if the token is generated from the client credential - **namespace_roles**. The sub’s roles scoped to namespace. Improvement from roles, which make the role scoped to specific namespace instead of global to publisher namespace - **permissions**. The sub or aud’ permissions - **bans**. The sub’s list of bans. It is used by the IAM client for validating the token. - **jflgs**. It stands for Justice Flags. It is a special flag used for storing additional status information regarding the sub. It is implemented as a bit mask. Following explains what each bit represents: - 1: Email Address Verified - 2: Phone Number Verified - 4: Anonymous - 8: Suspicious Login - **aud**. The aud is the targeted resource server. - **iat**. The time the token issues at. It is in Epoch time format - **exp**. The time the token expires. It is in Epoch time format - **client_id**. The UserID. The sub is omitted if the token is generated from client credential - **scope**. The scope of the access request, expressed as a list of space-delimited, case-sensitive strings ## Bans The JWT contains user's active bans with its expiry date. List of ban types can be obtained from /bans. ## Device Cookie Validation _**For grant type "password" only**_ Device Cookie is used to protect the user account from brute force login attack, <a target="_blank" href="https://owasp.org/www-community/Slow_Down_Online_Guessing_Attacks_with_Device_Cookies">more detail from OWASP<a>. This endpoint will read device cookie from request header **Auth-Trust-Id**. If device cookie not found, it will generate a new one and set it into response body **auth_trust_id** when successfully login. ## Track Login History This endpoint will track login history to detect suspicious login activity, please provide **Device-Id** (alphanumeric) in request header parameter otherwise it will set to "unknown". Align with General Data Protection Regulation in Europe, user login history will be kept within 28 days by default" ## 2FA remember device To remember device for 2FA, should provide cookie: device_token or header: Device-Token ## Response note If it is a user token request and user hasn't accepted required legal policy, the field <code>is_comply</code> will be false in response and responsed token will have no permission. action code: 10703\n */\n postOauthToken_v4(\n data: {\n grant_type:\n | 'authorization_code'\n | 'client_credentials'\n | 'password'\n | 'refresh_token'\n | 'urn:ietf:params:oauth:grant-type:extend_client_credentials'\n | 'urn:ietf:params:oauth:grant-type:login_queue_ticket'\n additionalData?: string | null\n client_id?: string | null\n client_secret?: string | null\n code?: string | null\n code_verifier?: string | null\n extendNamespace?: string | null\n extend_exp?: boolean | null\n login_queue_ticket?: string | null\n password?: string | null\n redirect_uri?: string | null\n refresh_token?: string | null\n username?: string | null\n },\n queryParams?: { code_challenge?: string | null; code_challenge_method?: 'S256' | 'plain' }\n ): Promise<Response<TokenWithDeviceCookieResponseV3>> {\n const params = { code_challenge_method: 'plain', ...queryParams } as AxiosRequestConfig\n const url = '/iam/v4/oauth/token'\n const resultPromise = this.axiosInstance.post(url, CodeGenUtil.getFormUrlEncodedData(data), {\n ...params,\n headers: { ...params.headers, 'content-type': 'application/x-www-form-urlencoded' }\n })\n\n return Validate.responseType(() => resultPromise, TokenWithDeviceCookieResponseV3, 'TokenWithDeviceCookieResponseV3')\n }\n}\n","/*\n * Copyright (c) 2024 AccelByte Inc. All Rights Reserved\n * This is licensed software from AccelByte Inc, for limitations\n * and restrictions contact your company contract manager.\n */\nexport const BASE_PATHS = [\n '/achievement',\n '/basic',\n '/buildinfo',\n '/chat',\n '/cloudsave',\n '/content-management',\n '/differ',\n '/dsmcontroller',\n '/event',\n '/game-telemetry',\n '/gdpr',\n '/group',\n '/iam',\n '/leaderboard',\n '/agreement',\n '/lobby',\n '/match2',\n '/matchmaking',\n '/odin-config',\n '/platform',\n '/qosm',\n '/reporting',\n '/seasonpass',\n '/session',\n '/sessionbrowser',\n '/social',\n '/ugc',\n '/config'\n] as const\n\nexport type BasePath = (typeof BASE_PATHS)[number] | (string & {})\n\nexport const INTERNAL_SERVICES = {\n '/achievement': 'justice-achievement-service',\n '/basic': 'justice-basic-service',\n '/buildinfo': 'justice-buildinfo-service',\n '/chat': 'justice-chat-service',\n '/cloudsave': 'justice-cloudsave-service',\n '/content-management': 'justice-odin-content-management-service',\n '/differ': 'justice-differ',\n '/dsmcontroller': 'justice-dsm-controller-service',\n '/event': 'justice-event-log-service',\n '/game-telemetry': 'analytics-game-telemetry-api',\n '/gdpr': 'justice-gdpr-service',\n '/group': 'justice-group-service',\n '/iam': 'justice-iam-service',\n '/leaderboard': 'justice-leaderboard-service',\n '/agreement': 'justice-legal-service', // sdk-legal\n '/lobby': 'justice-lobby-server',\n '/match2': 'justice-matchmaking-v2', // sdk-matchmaking\n '/matchmaking': 'justice-matchmaking', // sdk-matchmaking-v1\n '/odin-config': 'justice-odin-config-service',\n '/platform': 'justice-platform-service',\n '/qosm': 'justice-qos-manager-service',\n '/reporting': 'justice-reporting-service',\n '/seasonpass': 'justice-seasonpass-service',\n '/session': 'justice-session-service',\n '/sessionbrowser': 'justice-session-browser-service',\n '/social': 'justice-social-service',\n '/ugc': 'justice-ugc-service',\n '/config': 'justice-config-service'\n} as const\n","/*\n * Copyright (c) 2023-2024 AccelByte Inc. All Rights Reserved\n * This is licensed software from AccelByte Inc, for limitations\n * and restrictions contact your company contract manager.\n */\n\nimport { BasePath, INTERNAL_SERVICES } from '../constants/paths'\nimport { Interceptor } from '../Types'\n\ntype CreateCustomPathInterceptorOptions = {\n /**\n * A list of objects specifying which service base paths should be replaced.\n * For example, providing `{'/iam': '/iam-test'}` will redirect all `'/iam'` requests to `'/iam-test'`.\n */\n basePath: Partial<Record<BasePath, string>>\n\n /**\n * Indicates whether to use the internal AccelByte network. This should only be used in a server environment.\n * When set to true, requests will be made to `http://{service-name}/{path}` instead of the `baseURL`.\n */\n isInternalNetwork?: boolean\n}\n\nexport const createCustomPathInterceptor = ({ basePath, isInternalNetwork }: CreateCustomPathInterceptorOptions): Interceptor => {\n return {\n type: 'request',\n name: 'custom-base-path',\n onRequest: async config => {\n const { url } = config\n if (url) {\n const firstPath = url.split('/')[1]\n const servicePath = `/${firstPath}`\n const newBasePath: string | undefined = basePath?.[servicePath]\n const internalPath = INTERNAL_SERVICES?.[servicePath]\n\n if (isInternalNetwork && internalPath) {\n config.baseURL = `http://${internalPath}`\n }\n\n if (newBasePath) {\n config.url = config.url?.replace(servicePath, newBasePath)\n }\n }\n return config\n },\n onError: error => Promise.reject(error)\n }\n}\n","/*\n * Copyright (c) 2022-2024 AccelByte Inc. All Rights Reserved\n * This is licensed software from AccelByte Inc, for limitations\n * and restrictions contact your company contract manager.\n */\nimport { AxiosError } from 'axios'\nimport { Interceptor } from '../Types'\n\nconst ERROR_ELIGIBILITY_CODE = 13130\n\nexport const ErrorInterceptors: Array<Interceptor> = [\n {\n type: 'response',\n name: 'user-eligibilitiy-change',\n onError: e => {\n const error = e as AxiosError<any>\n if (error.response) {\n const { response } = error\n if (response?.status === 403 && (response?.config as any).url.includes(process.env.BASE_URL) && response?.config.withCredentials) {\n if (response.data.errorCode === ERROR_ELIGIBILITY_CODE) {\n // onUserEligibilityChange()\n }\n }\n }\n\n return Promise.reject(error)\n }\n },\n {\n type: 'response',\n name: 'too-many-request',\n onError: e => {\n const error = e as AxiosError<any>\n if (error.response) {\n const { response } = error\n if (response?.status === 429 /* TooManyRequests */) {\n // onTooManyRequest(error)\n }\n }\n\n return Promise.reject(error)\n }\n }\n]\n","/*\n * Copyright (c) 2024 AccelByte Inc. All Rights Reserved\n * This is licensed software from AccelByte Inc, for limitations\n * and restrictions contact your company contract manager.\n */\n\nimport { z, ZodTypeAny } from 'zod'\n\nexport type MakeOptional<Type, UnionKeys extends keyof Type> = Omit<Type, UnionKeys> & Partial<Pick<Type, UnionKeys>>\nexport type MakeRequired<T, K extends keyof T> = T & { [P in K]-?: T[P] }\n\nexport function isType<T extends ZodTypeAny>(schema: T, data: unknown): data is z.infer<T> {\n return schema.safeParse(data).success\n}\n","/*\n * Copyright (c) 2022-2024 AccelByte Inc. All Rights Reserved\n * This is licensed software from AccelByte Inc, for limitations\n * and restrictions contact your company contract manager.\n */\nexport class UrlHelper {\n static isCompleteURLString = (urlString: string) => {\n try {\n const url = new URL(urlString)\n return url.hostname !== ''\n } catch (error) {}\n return false\n }\n\n static trimSlashFromStringEnd(pathString: string) {\n let newString = pathString\n while (newString[newString.length - 1] === '/') {\n newString = newString.slice(0, -1)\n }\n return newString\n }\n\n static trimSlashFromStringStart(pathString: string) {\n let newString = pathString\n while (newString[0] === '/') {\n newString = newString.slice(1)\n }\n return newString\n }\n\n static trimSlashFromStringEdges(pathString: string) {\n return UrlHelper.trimSlashFromStringStart(this.trimSlashFromStringEnd(pathString))\n }\n\n static combinePaths(...paths: string[]) {\n const completePath = paths.join('/')\n // Replace 2 or more consecutive slashes with a single slash.\n // This is also the behavior from Node's `path.join`.\n return completePath.replace(/\\/{2,}/g, '/')\n }\n\n static combineURLPaths(urlString: string, ...paths: string[]) {\n const url = new URL(urlString)\n const { origin } = url\n const pathname = UrlHelper.trimSlashFromStringEdges(UrlHelper.combinePaths(url.pathname, ...paths))\n return new URL(pathname, origin).toString()\n }\n\n static removeQueryParam(fullUrlString: string, param: string) {\n const url = new URL(fullUrlString)\n const params = url.searchParams\n const pathname = this.trimSlashFromStringEnd(url.pathname)\n\n // Remove the query parameter\n params.delete(param)\n\n // Preserving other URL attributes\n let newUrlString: string\n if (params.toString() === '') newUrlString = `${url.origin}${pathname}${url.hash}`\n else newUrlString = `${url.origin}${pathname}?${params.toString()}${url.hash}`\n\n return newUrlString\n }\n}\n"],"mappings":"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","names":["WebSocket","axios","import_axios","axios","qs","IamErrorCode","import_axios","import_zod","import_zod","import_zod","GrantTokenUrls","LoginUrls","axios"]}
|
|
1
|
+
{"version":3,"sources":["../../../src/index.node.ts","../../../src/polyfills/node.ts","../../../src/utils/ApiUtils.ts","../../../src/utils/Network.ts","../../../src/utils/SdkDevice.ts","../../../src/AccelByteSDK.ts","../../../src/constants/IamErrorCode.ts","../../../src/constants/LinkAccount.ts","../../../src/interceptors/AuthInterceptors.ts","../../../src/utils/DesktopChecker.ts","../../../src/utils/BrowserHelper.ts","../../../src/utils/RefreshSession.ts","../../../../sdk-iam/src/generated-definitions/TokenWithDeviceCookieResponseV3.ts","../../../../sdk-iam/src/generated-definitions/JwtBanV3.ts","../../../../sdk-iam/src/generated-definitions/NamespaceRole.ts","../../../../sdk-iam/src/generated-definitions/PermissionV3.ts","../../../src/utils/CodeGenUtil.ts","../../../src/utils/Validate.ts","../../../src/interceptors/AuthInterceptorDeps.ts","../../../src/constants/paths.ts","../../../src/interceptors/CustomPathInterceptor.ts","../../../src/interceptors/ErrorInterceptor.ts","../../../src/utils/Type.ts","../../../src/utils/UrlHelper.ts"],"sourcesContent":["/*\n * Copyright (c) 2022 AccelByte Inc. All Rights Reserved\n * This is licensed software from AccelByte Inc, for limitations\n * and restrictions contact your company contract manager.\n */\n\n// This needs to be imported otherwise the polyfill will appear after all of the code bundles.\nimport './polyfills/node'\nexport * from './index'\n","/*\n * Copyright (c) 2018-2024 AccelByte Inc. All Rights Reserved\n * This is licensed software from AccelByte Inc, for limitations\n * and restrictions contact your company contract manager.\n */\nimport { webcrypto } from 'crypto'\nimport WebSocket from 'ws'\n\nif (!global.crypto) {\n global.crypto = webcrypto as unknown as Crypto\n}\n\nif (!global.WebSocket) {\n global.WebSocket = WebSocket\n}\n","/*\n * Copyright (c) 2022-2024 AccelByte Inc. All Rights Reserved\n * This is licensed software from AccelByte Inc, for limitations\n * and restrictions contact your company contract manager.\n */\n\nimport axios, { AxiosRequestConfig } from 'axios'\n\nexport class ApiUtils {\n static mergeAxiosConfigs = (config: AxiosRequestConfig, overrides?: AxiosRequestConfig): AxiosRequestConfig => {\n return {\n ...config,\n ...overrides,\n headers: {\n ...config?.headers,\n ...overrides?.headers\n }\n }\n }\n\n static is4xxError = (error: unknown): boolean => {\n if (axios.isAxiosError(error) && error.response) {\n return error.response.status >= 400 && error.response.status <= 499\n }\n return false\n }\n}\n","/*\n * Copyright (c) 2022-2024 AccelByte Inc. All Rights Reserved\n * This is licensed software from AccelByte Inc, for limitations\n * and restrictions contact your company contract manager.\n */\nimport axios, { AxiosInstance, AxiosRequestConfig } from 'axios'\nimport qs from 'query-string'\nimport { SdkDevice } from './SdkDevice'\n\nexport class Network {\n static create(...configs: AxiosRequestConfig[]): AxiosInstance {\n const axiosInstance = axios.create(\n Object.assign(\n {\n paramsSerializer: qs.stringify\n },\n ...configs\n )\n )\n\n return axiosInstance\n }\n\n static withBearerToken(accessToken: string, config?: AxiosRequestConfig): AxiosInstance {\n return Network.create(config || {}, {\n headers: { Authorization: `Bearer ${accessToken}` }\n })\n }\n\n static setDeviceTokenCookie = () => {\n const deviceId = SdkDevice.getDeviceId()\n document.cookie = `device_token=${deviceId}; path=/;`\n }\n\n static removeDeviceTokenCookie = () => {\n document.cookie = `device_token=; expires=${new Date(0).toUTCString()}`\n }\n\n static getFormUrlEncodedData = (data: any): URLSearchParams => {\n const formPayload = new URLSearchParams()\n const formKeys = Object.keys(data) as []\n formKeys.forEach(key => {\n if (data[key]) formPayload.append(key, data[key])\n })\n return formPayload\n }\n}\n","/*\n * Copyright (c) 2022 AccelByte Inc. All Rights Reserved\n * This is licensed software from AccelByte Inc, for limitations\n * and restrictions contact your company contract manager.\n */\nimport * as uuid from 'uuid'\n\nexport class SdkDevice {\n static ID_KEY = 'deviceId'\n\n static TYPE = {\n MOBILE: 'mobile',\n DESKTOP: 'desktop'\n }\n\n static getType = () => {\n return isMobile() ? SdkDevice.TYPE.MOBILE : SdkDevice.TYPE.DESKTOP\n }\n\n static generateUUID = () => {\n const deviceIdInUUID = uuid.v4().split('-').join('')\n localStorage.setItem(SdkDevice.ID_KEY, deviceIdInUUID)\n return deviceIdInUUID\n }\n\n static getDeviceId = () => {\n return localStorage.getItem(this.ID_KEY) || this.generateUUID()\n }\n}\n\n/*\n Below function is copied from npm 'is-mobile'\n */\nconst mobileRE =\n /(android|bb\\d+|meego).+mobile|armv7l|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series[46]0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i\nconst tabletRE = /android|ipad|playbook|silk/i\n\nconst isMobile = (opts?: any) => {\n if (!opts) opts = {}\n let ua = opts.ua\n if (!ua && typeof navigator !== 'undefined') ua = navigator.userAgent\n if (ua && ua.headers && typeof ua.headers['user-agent'] === 'string') {\n ua = ua.headers['user-agent']\n }\n if (typeof ua !== 'string') return false\n\n let result = mobileRE.test(ua) || (!!opts.tablet && tabletRE.test(ua))\n\n if (\n !result &&\n opts.tablet &&\n opts.featureDetect &&\n navigator &&\n navigator.maxTouchPoints > 1 &&\n ua.indexOf('Macintosh') !== -1 &&\n ua.indexOf('Safari') !== -1\n ) {\n result = true\n }\n\n return result\n}\n","/*\n * Copyright (c) 2022-2024 AccelByte Inc. All Rights Reserved\n * This is licensed software from AccelByte Inc, for limitations\n * and restrictions contact your company contract manager.\n */\n\nimport { AxiosInstance, AxiosRequestConfig } from 'axios'\nimport { AxiosConfig, CoreConfig, Interceptor, SdkConstructorParam, SdkSetConfigParam, TokenConfig, WebSocketConfig } from './Types'\nimport { ApiUtils } from './utils/ApiUtils'\nimport { Network } from './utils/Network'\nimport { MakeRequired } from './utils/Type'\n\nexport const AccelByte = {\n SDK: (param: SdkConstructorParam) => {\n return new AccelByteSDK(param)\n }\n}\n\nexport class AccelByteSDK {\n private coreConfig: CoreConfig\n private axiosConfig: AxiosConfig\n private axiosInstance: AxiosInstance\n private webSocketConfig: WebSocketConfig\n private token: TokenConfig\n\n constructor({ coreConfig, axiosConfig, webSocketConfig }: SdkConstructorParam) {\n this.coreConfig = {\n ...coreConfig,\n useSchemaValidation: coreConfig.useSchemaValidation ?? true\n }\n this.axiosConfig = {\n /**\n * when user create a variable to store intercepters and passed into sdk\n * the sdk will use the variable as reference value,\n * so when new interceptor added, reference value will also has the new interceptor,\n * to avoid this we create shallow copy for the interceptors\n */\n interceptors: axiosConfig?.interceptors ? [...axiosConfig.interceptors] : undefined,\n request: {\n timeout: 60000,\n withCredentials: true,\n ...axiosConfig?.request,\n headers: {\n 'Content-Type': 'application/json',\n ...axiosConfig?.request?.headers\n }\n }\n }\n this.axiosInstance = this.createAxiosInstance()\n this.webSocketConfig = {\n allowReconnect: webSocketConfig?.allowReconnect ?? true,\n maxReconnectAttempts: webSocketConfig?.maxReconnectAttempts ?? 0\n }\n this.token = {}\n }\n\n private createAxiosInstance() {\n const axiosInstance = Network.create({ baseURL: this.coreConfig.baseURL, ...this.axiosConfig.request })\n const interceptors = this.axiosConfig.interceptors\n\n if (interceptors) {\n for (const interceptor of interceptors) {\n if (interceptor.type === 'request') {\n axiosInstance.interceptors.request.use(interceptor?.onRequest, interceptor.onError)\n }\n\n if (interceptor.type === 'response') {\n axiosInstance.interceptors.response.use(interceptor?.onSuccess, interceptor.onError)\n }\n }\n }\n\n return axiosInstance\n }\n\n /**\n * Assembles and returns the current Axios instance along with core and Axios configurations.\n */\n assembly() {\n return {\n axiosInstance: this.axiosInstance,\n coreConfig: this.coreConfig,\n axiosConfig: this.axiosConfig as MakeRequired<AxiosConfig, 'request'>,\n webSocketConfig: this.webSocketConfig\n }\n }\n\n /**\n * Creates a new instance of AccelByteSDK with a shallow copy of the current configurations.\n * Optionally allows excluding interceptors.\n * @param {boolean} [opts.interceptors] - Whether to include interceptors in the clone. Default is true.\n * @returns {AccelByteSDK} A new instance of AccelByteSDK with the cloned configuration.\n */\n clone(opts?: { interceptors?: boolean }): AccelByteSDK {\n const newConfigs = {\n coreConfig: { ...this.coreConfig },\n axiosConfig: { ...this.axiosConfig }\n }\n\n if (opts?.interceptors === false) {\n delete newConfigs.axiosConfig.interceptors\n }\n\n const newSdkInstance = new AccelByteSDK(newConfigs)\n\n newSdkInstance.setToken(this.token)\n\n return newSdkInstance\n }\n\n /**\n * Adds interceptors to the current Axios configuration.\n */\n addInterceptors(interceptors: Interceptor[]): AccelByteSDK {\n if (!this.axiosConfig.interceptors) {\n this.axiosConfig.interceptors = []\n }\n\n this.axiosConfig.interceptors.push(...interceptors)\n\n return this\n }\n\n /**\n * Removes interceptors from the Axios configuration. Can remove all interceptors or filter specific ones.\n * @param {function} [filterCallback] - Optional filter function to remove specific interceptors.\n */\n removeInterceptors(): AccelByteSDK\n removeInterceptors(filterCallback: (interceptor: Interceptor) => boolean): AccelByteSDK\n\n removeInterceptors(filterCallback?: (interceptor: Interceptor) => boolean) {\n if (!this.axiosConfig?.interceptors) return this\n if (!filterCallback) {\n this.axiosConfig.interceptors = undefined\n this.axiosInstance.interceptors.request.clear()\n this.axiosInstance.interceptors.response.clear()\n return this\n }\n\n this.axiosConfig.interceptors = this.axiosConfig.interceptors.filter(filterCallback)\n this.axiosInstance = this.createAxiosInstance()\n return this\n }\n\n /**\n * Updates the SDK's core and Axios configurations.\n * Merges the provided configurations with the current ones.\n */\n setConfig({ coreConfig, axiosConfig, webSocketConfig }: SdkSetConfigParam) {\n this.coreConfig = {\n ...this.coreConfig,\n ...coreConfig\n }\n this.axiosConfig = {\n ...this.axiosConfig,\n ...axiosConfig?.interceptors,\n request: ApiUtils.mergeAxiosConfigs(this.axiosConfig.request as AxiosRequestConfig, axiosConfig?.request)\n }\n this.webSocketConfig = {\n ...this.webSocketConfig,\n ...webSocketConfig\n }\n this.axiosInstance = this.createAxiosInstance()\n\n return this\n }\n\n /**\n * Set accessToken and refreshToken and updates the Axios request headers to use Bearer authentication.\n */\n setToken(token: TokenConfig) {\n this.token = {\n ...this.token,\n ...token\n }\n const configOverride = { headers: { Authorization: this.token.accessToken ? `Bearer ${this.token.accessToken}` : '' } }\n this.axiosConfig = {\n ...this.axiosConfig,\n request: ApiUtils.mergeAxiosConfigs(this.axiosInstance.defaults as AxiosRequestConfig, configOverride)\n }\n this.axiosInstance = this.createAxiosInstance()\n }\n\n /**\n * Removes the currently set token.\n */\n removeToken() {\n this.token = {}\n const configOverride = { headers: { Authorization: undefined } }\n this.axiosConfig = {\n ...this.axiosConfig,\n request: ApiUtils.mergeAxiosConfigs(this.axiosInstance.defaults as AxiosRequestConfig, configOverride)\n }\n this.axiosInstance = this.createAxiosInstance()\n }\n\n /**\n * Retrieves the current token configuration.\n */\n getToken() {\n return this.token\n }\n}\n","/*\n * Copyright (c) 2024 AccelByte Inc. All Rights Reserved\n * This is licensed software from AccelByte Inc, for limitations\n * and restrictions contact your company contract manager.\n */\n\n// More detail: https://github.com/AccelByte/go-restful-plugins/blob/master/pkg/auth/iam/event.go\nexport enum IamErrorCode {\n InternalServerError = 20000,\n UnauthorizedAccess = 20001,\n ValidationError = 20002,\n ForbiddenAccess = 20003,\n TooManyRequests = 20007,\n UserNotFound = 20008,\n TokenIsExpired = 20011,\n InsufficientPermissions = 20013,\n InvalidAudience = 20014,\n InsufficientScope = 20015,\n UnableToParseRequestBody = 20019,\n InvalidPaginationParameters = 20021,\n TokenIsNotUserToken = 20022,\n InvalidRefererHeader = 20023,\n SubdomainMismatch = 20030\n}\n","/*\n * Copyright (c) 2022-2024 AccelByte Inc. All Rights Reserved\n * This is licensed software from AccelByte Inc, for limitations\n * and restrictions contact your company contract manager.\n */\n\nexport const ERROR_LINK_ANOTHER_3RD_PARTY_ACCOUNT = 10200\nexport const ERROR_CODE_LINK_DELETION_ACCOUNT = 10135\nexport const ERROR_CODE_TOKEN_EXPIRED = 10196\nexport const ERROR_USER_BANNED = 10134\n","/*\n * Copyright (c) 2022-2024 AccelByte Inc. All Rights Reserved\n * This is licensed software from AccelByte Inc, for limitations\n * and restrictions contact your company contract manager.\n */\nimport axios, { AxiosError, AxiosRequestConfig } from 'axios'\nimport { Interceptor } from '../Types'\nimport { DesktopChecker } from '../utils/DesktopChecker'\nimport { Network } from '../utils/Network'\nimport { RefreshSession } from '../utils/RefreshSession'\nimport { OAuth20$, OAuth20V4$, TokenWithDeviceCookieResponseV3 } from './AuthInterceptorDeps'\n\nconst REFRESH_EXPIRY = 1000\nconst REFRESH_EXPIRY_UPDATE_RATE = 500\nconst REFRESH_EXPIRY_CHECK_RATE = 1000\n\nenum GrantTokenUrls {\n GRANT_TOKEN = '/iam/v3/oauth/token',\n GRANT_TOKEN_V4 = '/iam/v4/oauth/token'\n}\n\nenum LoginUrls {\n REVOKE = '/iam/v3/oauth/revoke'\n}\n\ntype GrantTokenUrlString = `${GrantTokenUrls}`\n\ntype RefreshArgs = {\n axiosConfig: AxiosRequestConfig\n refreshToken?: string\n clientId: string\n tokenUrl?: GrantTokenUrlString\n}\n\nconst noOp = () => {}\n\nexport class RefreshToken {\n private config: RefreshArgs\n private interceptors: Interceptor[]\n\n constructor({ config, interceptors }: { config: RefreshArgs; interceptors?: Interceptor[] }) {\n this.config = config\n this.interceptors = interceptors || []\n }\n\n // Return Promise<true> if refresh in any tab is successful;\n runWithLock = (): Promise<Partial<TokenWithDeviceCookieResponseV3> | false> => {\n //\n if (RefreshSession.isLocked()) {\n return Promise.resolve().then(async () => {\n // This block is executed when other tab / request is refreshing\n while (RefreshSession.isLocked()) {\n await RefreshSession.sleepAsync(REFRESH_EXPIRY_CHECK_RATE)\n }\n return {}\n })\n }\n\n RefreshSession.lock(REFRESH_EXPIRY)\n let isLocallyRefreshingToken = true\n\n ;(async () => {\n // eslint-disable-next-line no-unmodified-loop-condition\n while (isLocallyRefreshingToken) {\n RefreshSession.lock(REFRESH_EXPIRY)\n await RefreshSession.sleepAsync(REFRESH_EXPIRY_UPDATE_RATE)\n }\n })()\n\n return Promise.resolve()\n .then(() => this.run())\n .finally(() => {\n isLocallyRefreshingToken = false\n RefreshSession.unlock()\n })\n }\n\n run = async () => {\n const { axiosConfig, refreshToken } = this.config\n // we need this to check if app use “withCredentials: false” and don’t have refreshToken it should return false,\n // because we track it as a logout user, if not do this even user logout on the desktop app (that use withCredentials: false)\n // will automatically login with refreshSession\n if (DesktopChecker.isDesktopApp() && !axiosConfig.withCredentials && !refreshToken) {\n return false\n }\n\n const result = await this.refreshToken()\n if (result.error) {\n return false\n }\n\n return result.response.data\n }\n\n refreshToken = () => {\n const { axiosConfig, refreshToken, clientId, tokenUrl } = this.config\n const config = {\n ...axiosConfig,\n /**\n * Ideally `withCredentials` should be `true` to make sure that\n * cookies always included when refreshing token\n * especially on cross-origin requests.\n * But if `refreshToken` is provided (e.g. from Launcher),\n * we can set it to false and send refresh_token via payload.\n */\n withCredentials: !refreshToken,\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded',\n Authorization: `Basic ${Buffer.from(`${clientId}:`).toString('base64')}`\n }\n }\n const axios = Network.create(config)\n\n for (const interceptor of this.interceptors) {\n if (interceptor.type === 'request') {\n axios.interceptors.request.use(interceptor?.onRequest, interceptor.onError)\n }\n\n if (interceptor.type === 'response') {\n axios.interceptors.response.use(interceptor?.onSuccess, interceptor.onError)\n }\n }\n\n const payload = {\n refresh_token: refreshToken || undefined,\n client_id: clientId,\n grant_type: 'refresh_token'\n } as const\n\n if (tokenUrl === GrantTokenUrls.GRANT_TOKEN_V4) {\n return new OAuth20V4$(axios).postOauthToken_v4(payload)\n }\n\n const oauth20 = new OAuth20$(axios)\n return oauth20.postOauthToken(payload)\n }\n}\n\nconst refreshComplete = (\n error: AxiosError,\n tokenResponse: Partial<TokenWithDeviceCookieResponseV3> | false,\n onSessionExpired: (() => void) | undefined,\n axiosConfig: AxiosRequestConfig,\n errorConfig: AxiosRequestConfig\n) => {\n //\n if (tokenResponse) {\n const { access_token } = tokenResponse\n\n // desktop\n if (!axiosConfig.withCredentials && access_token) {\n return axios({\n ...errorConfig,\n headers: {\n ...errorConfig.headers,\n Authorization: `Bearer ${access_token}`\n }\n })\n // web\n } else {\n return axios(errorConfig)\n }\n }\n\n if (onSessionExpired) {\n onSessionExpired()\n }\n throw error\n}\n\ntype SessionExpiredInterceptorOptions = {\n /**\n * The client ID used by the SDK, obtained from the Admin Portal under OAuth Clients.\n */\n clientId: string\n\n /**\n * An optional array of URLs that should be ignored when handling session expiration.\n * Default to `['/iam/v3/oauth/token', '/iam/v4/oauth/token', '/iam/v3/oauth/revoke']`\n */\n expectedErrorUrls?: string[]\n\n /**\n * A callback function that retrieves the current refresh token.\n */\n getRefreshToken?: () => string | undefined\n\n /**\n * The URL endpoint for obtaining a new token. Defaults to `'/iam/v3/oauth/token'`.\n */\n tokenUrl?: GrantTokenUrlString\n /**\n * A callback function triggered when the session has expired.\n */\n onSessionExpired: () => void\n\n /**\n * A callback function triggered when successfully get new session.\n */\n onGetUserSession?: (accessToken: string, refreshToken: string) => void\n}\n\nexport const createAuthInterceptor = ({\n clientId,\n onSessionExpired,\n onGetUserSession,\n expectedErrorUrls = Object.values({ ...LoginUrls, ...GrantTokenUrls }),\n getRefreshToken,\n tokenUrl = GrantTokenUrls.GRANT_TOKEN\n}: SessionExpiredInterceptorOptions): Interceptor => {\n return {\n type: 'response',\n name: 'session-expired',\n onError: e => {\n const error = e as AxiosError\n const { config, response } = error\n\n if (axios.isCancel(error)) {\n // expected case, exit\n return Promise.reject(error)\n }\n\n if (!response) {\n console.warn(`sdk:ERR_INTERNET_DISCONNECTED ${config?.baseURL}${config?.url}. ${(error as AxiosError).message}\\n`)\n }\n\n if (response?.status === 401) {\n const { url } = config || {}\n const axiosConfig = config as AxiosRequestConfig\n const refreshToken = getRefreshToken?.()\n\n // expected business case, exit\n if (!url || (url && expectedErrorUrls.includes(url))) {\n return Promise.reject(error)\n }\n\n const refresh = new RefreshToken({\n config: { axiosConfig, clientId, refreshToken, tokenUrl },\n interceptors: [\n createRefreshSessionInterceptor({ tokenUrl }),\n createGetSessionInterceptor({ onGetUserSession: onGetUserSession || noOp, tokenUrl })\n ]\n })\n\n // need to lock on the desktop as well to prevent multiple token request\n return refresh.runWithLock().then(tokenResponse => {\n return refreshComplete(error, tokenResponse, onSessionExpired, axiosConfig, config || {})\n })\n }\n\n return Promise.reject(error)\n }\n }\n}\n\ntype RefreshSessioNInterceptorOptions = {\n /**\n * The URL endpoint for obtaining a new token. Defaults to `'/iam/v3/oauth/token'`.\n */\n tokenUrl?: GrantTokenUrlString\n}\n\nexport const createRefreshSessionInterceptor = (options?: RefreshSessioNInterceptorOptions): Interceptor => {\n const { tokenUrl = GrantTokenUrls.GRANT_TOKEN } = options || {}\n\n return {\n type: 'request',\n name: 'refresh-session',\n onError: error => Promise.reject(error),\n onRequest: async config => {\n // need to lock on the desktop as well to sleep other request before refresh session is done\n const isRefreshTokenUrl = config.url === tokenUrl\n // eslint-disable-next-line no-unmodified-loop-condition\n while (RefreshSession.isLocked() && !isRefreshTokenUrl) {\n await RefreshSession.sleepAsync(200)\n }\n return config\n }\n }\n}\n\ntype GetSessionInterceptorOptions = {\n /**\n * The URL endpoint for obtaining a new token. Defaults to `'/iam/v3/oauth/token'`.\n */\n tokenUrl?: GrantTokenUrlString\n\n /**\n * A callback function triggered when successfully get new session.\n */\n onGetUserSession: (accessToken: string, refreshToken: string) => void\n}\n\nexport const createGetSessionInterceptor = ({\n tokenUrl = GrantTokenUrls.GRANT_TOKEN,\n onGetUserSession\n}: GetSessionInterceptorOptions): Interceptor => ({\n type: 'response',\n name: 'get-session',\n onError: error => Promise.reject(error),\n onSuccess: response => {\n const { config, status } = response\n\n if (config.url === tokenUrl && status === 200) {\n // @ts-ignore\n const { access_token, refresh_token } = response.data as TokenWithDeviceCookieResponseV3\n\n if (access_token) {\n onGetUserSession(access_token, refresh_token ?? '')\n }\n }\n\n return response\n }\n})\n","/*\n * Copyright (c) 2022 AccelByte Inc. All Rights Reserved\n * This is licensed software from AccelByte Inc, for limitations\n * and restrictions contact your company contract manager.\n */\nexport class DesktopChecker {\n private static desktopApp = DesktopChecker.isElectron()\n\n static isDesktopApp() {\n return DesktopChecker.desktopApp && !DesktopChecker.isInIframe()\n }\n\n private static isInIframe() {\n try {\n return window.self !== window.top\n } catch (error) {\n return true\n }\n }\n\n // borrowed from https://github.com/cheton/is-electron\n private static isElectron() {\n // @ts-ignore Renderer process\n if (typeof window !== 'undefined' && typeof window.process === 'object' && window.process.type === 'renderer') {\n return true\n }\n // Main process\n if (typeof process !== 'undefined' && typeof process.versions === 'object' && !!process.versions.electron) {\n return true\n }\n // Detect the user agent when the `nodeIntegration` option is set to false\n if (typeof navigator === 'object' && typeof navigator.userAgent === 'string' && navigator.userAgent.indexOf('Electron') >= 0) {\n return true\n }\n return false\n }\n}\n","/*\n * Copyright (c) 2022 AccelByte Inc. All Rights Reserved\n * This is licensed software from AccelByte Inc, for limitations\n * and restrictions contact your company contract manager.\n */\nexport class BrowserHelper {\n static isOnBrowser = () => {\n return typeof window !== 'undefined' && window.document\n }\n}\n","/*\n * Copyright (c) 2022-2024 AccelByte Inc. All Rights Reserved\n * This is licensed software from AccelByte Inc, for limitations\n * and restrictions contact your company contract manager.\n */\nimport { AxiosRequestConfig } from 'axios'\nimport { BrowserHelper } from './BrowserHelper'\n\nexport class RefreshSession {\n // --\n static KEY = 'RefreshSession.lock'\n\n static isLocked = (): boolean => {\n if (!BrowserHelper.isOnBrowser()) return false\n const lockStatus = localStorage.getItem(RefreshSession.KEY)\n if (!lockStatus) {\n return false\n }\n const lockExpiry = Number(lockStatus)\n if (isNaN(lockExpiry)) {\n return false\n }\n return lockExpiry > new Date().getTime()\n }\n\n static lock = (expiry: number) => {\n if (!BrowserHelper.isOnBrowser()) return\n localStorage.setItem(RefreshSession.KEY, `${new Date().getTime() + expiry}`)\n }\n\n static unlock = () => {\n if (!BrowserHelper.isOnBrowser()) return\n localStorage.removeItem(RefreshSession.KEY)\n }\n\n static sleepAsync = (timeInMs: number) => new Promise(resolve => setTimeout(resolve, timeInMs))\n\n static isBearerAuth = (config?: AxiosRequestConfig) => {\n // @ts-ignore\n if (config?.headers?.Authorization?.toLowerCase().indexOf('bearer') > -1) {\n return true\n }\n return false\n }\n}\n","/*\n * Copyright (c) 2022-2025 AccelByte Inc. All Rights Reserved\n * This is licensed software from AccelByte Inc, for limitations\n * and restrictions contact your company contract manager.\n */\nimport { z } from 'zod'\nimport { JwtBanV3 } from './JwtBanV3.js'\nimport { NamespaceRole } from './NamespaceRole.js'\nimport { PermissionV3 } from './PermissionV3.js'\n\nexport const TokenWithDeviceCookieResponseV3 = z.object({\n access_token: z.string(),\n auth_trust_id: z.string().nullish(),\n bans: z.array(JwtBanV3).nullish(),\n display_name: z.string().nullish(),\n expires_in: z.number().int(),\n is_comply: z.boolean().nullish(),\n jflgs: z.number().int().nullish(),\n namespace: z.string(),\n namespace_roles: z.array(NamespaceRole).nullish(),\n permissions: z.array(PermissionV3),\n platform_id: z.string().nullish(),\n platform_user_id: z.string().nullish(),\n refresh_expires_in: z.number().int().nullish(),\n refresh_token: z.string().nullish(),\n roles: z.array(z.string()).nullish(),\n scope: z.string(),\n simultaneous_platform_id: z.string().nullish(),\n simultaneous_platform_user_id: z.string().nullish(),\n token_type: z.string(),\n unique_display_name: z.string().nullish(),\n user_id: z.string().nullish(),\n xuid: z.string().nullish()\n})\n\nexport interface TokenWithDeviceCookieResponseV3 extends z.TypeOf<typeof TokenWithDeviceCookieResponseV3> {}\n","/*\n * Copyright (c) 2022-2025 AccelByte Inc. All Rights Reserved\n * This is licensed software from AccelByte Inc, for limitations\n * and restrictions contact your company contract manager.\n */\nimport { z } from 'zod'\n\nexport const JwtBanV3 = z.object({\n ban: z.string(),\n disabledDate: z.string().nullish(),\n enabled: z.boolean(),\n endDate: z.string(),\n targetedNamespace: z.string()\n})\n\nexport interface JwtBanV3 extends z.TypeOf<typeof JwtBanV3> {}\n","/*\n * Copyright (c) 2022-2025 AccelByte Inc. All Rights Reserved\n * This is licensed software from AccelByte Inc, for limitations\n * and restrictions contact your company contract manager.\n */\nimport { z } from 'zod'\n\nexport const NamespaceRole = z.object({ namespace: z.string(), roleId: z.string() })\n\nexport interface NamespaceRole extends z.TypeOf<typeof NamespaceRole> {}\n","/*\n * Copyright (c) 2022-2025 AccelByte Inc. All Rights Reserved\n * This is licensed software from AccelByte Inc, for limitations\n * and restrictions contact your company contract manager.\n */\nimport { z } from 'zod'\n\nexport const PermissionV3 = z.object({\n action: z.number().int(),\n resource: z.string(),\n schedAction: z.number().int().nullish(),\n schedCron: z.string().nullish(),\n schedRange: z.array(z.string()).nullish()\n})\n\nexport interface PermissionV3 extends z.TypeOf<typeof PermissionV3> {}\n","/*\n * Copyright (c) 2022 AccelByte Inc. All Rights Reserved\n * This is licensed software from AccelByte Inc, for limitations\n * and restrictions contact your company contract manager.\n */\nexport class CodeGenUtil {\n /**\n * Returns a hash code from a string\n * @param {String} str The string to hash.\n * @return {Number} A 32bit integer\n * @see http://werxltd.com/wp/2010/05/13/javascript-implementation-of-javas-string-hashcode-method/\n */\n static hashCode(str: string): number {\n let hash = 0\n for (let i = 0, len = str.length; i < len; i++) {\n const chr = str.charCodeAt(i)\n hash = (hash << 5) - hash + chr\n hash |= 0 // Convert to 32bit integer\n }\n return hash\n }\n\n static getFormUrlEncodedData = (data: Record<string, any>): URLSearchParams => {\n const formPayload = new URLSearchParams()\n const formKeys = Object.keys(data) as []\n formKeys.forEach(key => {\n if (typeof data[key] !== 'undefined') formPayload.append(key, data[key])\n })\n return formPayload\n }\n}\n","/*\n * Copyright (c) 2022-2024 AccelByte Inc. All Rights Reserved\n * This is licensed software from AccelByte Inc, for limitations\n * and restrictions contact your company contract manager.\n */\nimport { AxiosError, AxiosResponse } from 'axios'\nimport { z, ZodError } from 'zod'\n\nexport type ResponseError = Error | AxiosError\n\nexport type Response<T> =\n | {\n response: AxiosResponse<T>\n error: null\n }\n | {\n response: null\n error: ResponseError\n }\n\nexport class Validate {\n static validateOrReturnResponse<D>(\n useSchemaValidation: boolean,\n networkCall: () => Promise<AxiosResponse<D>>,\n Codec: z.ZodType<D>,\n modelName: string\n ) {\n return useSchemaValidation ? Validate.responseType(() => networkCall(), Codec, modelName) : Validate.unsafeResponse(() => networkCall())\n }\n\n static responseType<D>(networkCall: () => Promise<AxiosResponse<D>>, Codec: z.ZodType<D>, modelName: string) {\n return wrapNetworkCallSafely<D>(async () => {\n const response = await networkCall()\n const decodeResult = Codec.safeParse(response.data)\n if (!decodeResult.success && response.status !== 204) {\n throw new DecodeError({ error: decodeResult.error, response, modelName })\n }\n return response\n })\n }\n\n static unsafeResponse<D>(networkCall: () => Promise<AxiosResponse<D>>) {\n return wrapNetworkCallSafely<D>(() => networkCall())\n }\n\n static safeParse<D>(data: unknown, Codec: z.ZodType<D>): D | null {\n const result = Codec.safeParse(data)\n if (result.success) {\n return result.data\n }\n return null\n }\n}\n\nasync function wrapNetworkCallSafely<D>(networkCallFunction: () => Promise<AxiosResponse<D>>): Promise<Response<D>> {\n try {\n const response = await networkCallFunction()\n return { response, error: null }\n } catch (error) {\n return { response: null, error: <Error>error }\n }\n}\n\nexport class DecodeError extends Error {\n constructor({ error, response, modelName }: { error: ZodError; response: AxiosResponse; modelName: string }) {\n const msg = `response from url \"${response.config.url}\" doesn't match model \"${modelName}\"`\n super(msg)\n console.error(msg, error)\n }\n}\n","/*\n * Copyright (c) 2022-2024 AccelByte Inc. All Rights Reserved\n * This is licensed software from AccelByte Inc, for limitations\n * and restrictions contact your company contract manager.\n */\nimport { AxiosInstance, AxiosRequestConfig } from 'axios'\nimport { TokenWithDeviceCookieResponseV3 } from '~/iam-definitions/TokenWithDeviceCookieResponseV3'\nimport { CodeGenUtil } from '../utils/CodeGenUtil'\nimport { Response, Validate } from '../utils/Validate'\n\nexport { TokenWithDeviceCookieResponseV3 }\n\n/*\n * Copyright (c) 2022-2024 AccelByte Inc. All Rights Reserved\n * This is licensed software from AccelByte Inc, for limitations\n * and restrictions contact your company contract manager.\n */\n\nexport class OAuth20$ {\n // @ts-ignore\n constructor(private axiosInstance: AxiosInstance) {}\n\n postOauthToken<T = TokenWithDeviceCookieResponseV3>(data: {\n grant_type: 'authorization_code' | 'client_credentials' | 'password' | 'refresh_token'\n username?: string | null\n password?: string | null\n code?: string | null\n code_verifier?: string | null\n client_id?: string | null\n redirect_uri?: string | null\n refresh_token?: string | null\n extend_exp?: boolean | null\n }): Promise<Response<T>> {\n const params = {} as AxiosRequestConfig\n const url = '/iam/v3/oauth/token'\n const resultPromise = this.axiosInstance.post(url, CodeGenUtil.getFormUrlEncodedData(data), {\n ...params,\n headers: { ...params.headers, 'content-type': 'application/x-www-form-urlencoded' }\n })\n\n return Validate.responseType(() => resultPromise, TokenWithDeviceCookieResponseV3, 'TokenWithDeviceCookieResponseV3')\n }\n}\n\nexport class OAuth20V4$ {\n // @ts-ignore\n // prettier-ignore\n constructor(private axiosInstance: AxiosInstance) {}\n\n /**\n * This endpoint supports grant type: 1. Grant Type == <code>authorization_code</code>: It generates the user token by given the authorization code which generated in "/iam/v3/authenticate" API response. It should also pass in the redirect_uri, which should be the same as generating the authorization code request. 2. Grant Type == <code>password</code>: The grant type to use for authenticating a user, whether it's by email / username and password combination or through platform. 3. Grant Type == <code>refresh_token</code>: Used to get a new access token for a valid refresh token. 4. Grant Type == <code>client_credentials</code>: It generates a token by checking the client credentials provided through Authorization header. 5. Grant Type == <code>urn:ietf:params:oauth:grant-type:extend_client_credentials</code>: It generates a token by checking the client credentials provided through Authorization header. It only allows publisher/studio namespace client. In generated token: 1. There wil be no roles, namespace_roles & permission. 2. The scope will be fixed as 'extend'. 3. There will have a new field 'extend_namespace', the value is from token request body. 6. Grant Type == <code>urn:ietf:params:oauth:grant-type:login_queue_ticket</code>: It generates a token by validating the login queue ticket against login queue service. ## Access Token Content Following is the access token’s content: - **namespace**. It is the namespace the token was generated from. - **display_name**. The display name of the sub. It is empty if the token is generated from the client credential - **roles**. The sub’s roles. It is empty if the token is generated from the client credential - **namespace_roles**. The sub’s roles scoped to namespace. Improvement from roles, which make the role scoped to specific namespace instead of global to publisher namespace - **permissions**. The sub or aud’ permissions - **bans**. The sub’s list of bans. It is used by the IAM client for validating the token. - **jflgs**. It stands for Justice Flags. It is a special flag used for storing additional status information regarding the sub. It is implemented as a bit mask. Following explains what each bit represents: - 1: Email Address Verified - 2: Phone Number Verified - 4: Anonymous - 8: Suspicious Login - **aud**. The aud is the targeted resource server. - **iat**. The time the token issues at. It is in Epoch time format - **exp**. The time the token expires. It is in Epoch time format - **client_id**. The UserID. The sub is omitted if the token is generated from client credential - **scope**. The scope of the access request, expressed as a list of space-delimited, case-sensitive strings ## Bans The JWT contains user's active bans with its expiry date. List of ban types can be obtained from /bans. ## Device Cookie Validation _**For grant type "password" only**_ Device Cookie is used to protect the user account from brute force login attack, <a target="_blank" href="https://owasp.org/www-community/Slow_Down_Online_Guessing_Attacks_with_Device_Cookies">more detail from OWASP<a>. This endpoint will read device cookie from request header **Auth-Trust-Id**. If device cookie not found, it will generate a new one and set it into response body **auth_trust_id** when successfully login. ## Track Login History This endpoint will track login history to detect suspicious login activity, please provide **Device-Id** (alphanumeric) in request header parameter otherwise it will set to "unknown". Align with General Data Protection Regulation in Europe, user login history will be kept within 28 days by default" ## 2FA remember device To remember device for 2FA, should provide cookie: device_token or header: Device-Token ## Response note If it is a user token request and user hasn't accepted required legal policy, the field <code>is_comply</code> will be false in response and responsed token will have no permission. action code: 10703\n */\n postOauthToken_v4(\n data: {\n grant_type:\n | 'authorization_code'\n | 'client_credentials'\n | 'password'\n | 'refresh_token'\n | 'urn:ietf:params:oauth:grant-type:extend_client_credentials'\n | 'urn:ietf:params:oauth:grant-type:login_queue_ticket'\n additionalData?: string | null\n client_id?: string | null\n client_secret?: string | null\n code?: string | null\n code_verifier?: string | null\n extendNamespace?: string | null\n extend_exp?: boolean | null\n login_queue_ticket?: string | null\n password?: string | null\n redirect_uri?: string | null\n refresh_token?: string | null\n username?: string | null\n },\n queryParams?: { code_challenge?: string | null; code_challenge_method?: 'S256' | 'plain' }\n ): Promise<Response<TokenWithDeviceCookieResponseV3>> {\n const params = { code_challenge_method: 'plain', ...queryParams } as AxiosRequestConfig\n const url = '/iam/v4/oauth/token'\n const resultPromise = this.axiosInstance.post(url, CodeGenUtil.getFormUrlEncodedData(data), {\n ...params,\n headers: { ...params.headers, 'content-type': 'application/x-www-form-urlencoded' }\n })\n\n return Validate.responseType(() => resultPromise, TokenWithDeviceCookieResponseV3, 'TokenWithDeviceCookieResponseV3')\n }\n}\n","/*\n * Copyright (c) 2024 AccelByte Inc. All Rights Reserved\n * This is licensed software from AccelByte Inc, for limitations\n * and restrictions contact your company contract manager.\n */\nexport const BASE_PATHS = [\n '/achievement',\n '/basic',\n '/buildinfo',\n '/chat',\n '/cloudsave',\n '/content-management',\n '/differ',\n '/dsmcontroller',\n '/event',\n '/game-telemetry',\n '/gdpr',\n '/group',\n '/iam',\n '/leaderboard',\n '/agreement',\n '/lobby',\n '/match2',\n '/matchmaking',\n '/odin-config',\n '/platform',\n '/qosm',\n '/reporting',\n '/seasonpass',\n '/session',\n '/sessionbrowser',\n '/social',\n '/ugc',\n '/config'\n] as const\n\nexport type BasePath = (typeof BASE_PATHS)[number] | (string & {})\n\nexport const INTERNAL_SERVICES = {\n '/achievement': 'justice-achievement-service',\n '/basic': 'justice-basic-service',\n '/buildinfo': 'justice-buildinfo-service',\n '/chat': 'justice-chat-service',\n '/cloudsave': 'justice-cloudsave-service',\n '/content-management': 'justice-odin-content-management-service',\n '/differ': 'justice-differ',\n '/dsmcontroller': 'justice-dsm-controller-service',\n '/event': 'justice-event-log-service',\n '/game-telemetry': 'analytics-game-telemetry-api',\n '/gdpr': 'justice-gdpr-service',\n '/group': 'justice-group-service',\n '/iam': 'justice-iam-service',\n '/leaderboard': 'justice-leaderboard-service',\n '/agreement': 'justice-legal-service', // sdk-legal\n '/lobby': 'justice-lobby-server',\n '/match2': 'justice-matchmaking-v2', // sdk-matchmaking\n '/odin-config': 'justice-odin-config-service',\n '/platform': 'justice-platform-service',\n '/qosm': 'justice-qos-manager-service',\n '/reporting': 'justice-reporting-service',\n '/seasonpass': 'justice-seasonpass-service',\n '/session': 'justice-session-service',\n '/social': 'justice-social-service',\n '/ugc': 'justice-ugc-service',\n '/config': 'justice-config-service'\n} as const\n","/*\n * Copyright (c) 2023-2024 AccelByte Inc. All Rights Reserved\n * This is licensed software from AccelByte Inc, for limitations\n * and restrictions contact your company contract manager.\n */\n\nimport { BasePath, INTERNAL_SERVICES } from '../constants/paths'\nimport { Interceptor } from '../Types'\n\ntype CreateCustomPathInterceptorOptions = {\n /**\n * A list of objects specifying which service base paths should be replaced.\n * For example, providing `{'/iam': '/iam-test'}` will redirect all `'/iam'` requests to `'/iam-test'`.\n */\n basePath: Partial<Record<BasePath, string>>\n\n /**\n * Indicates whether to use the internal AccelByte network. This should only be used in a server environment.\n * When set to true, requests will be made to `http://{service-name}/{path}` instead of the `baseURL`.\n */\n isInternalNetwork?: boolean\n}\n\nexport const createCustomPathInterceptor = ({ basePath, isInternalNetwork }: CreateCustomPathInterceptorOptions): Interceptor => {\n return {\n type: 'request',\n name: 'custom-base-path',\n onRequest: async config => {\n const { url } = config\n if (url) {\n const firstPath = url.split('/')[1]\n const servicePath = `/${firstPath}`\n const newBasePath: string | undefined = basePath?.[servicePath]\n const internalPath = INTERNAL_SERVICES?.[servicePath]\n\n if (isInternalNetwork && internalPath) {\n config.baseURL = `http://${internalPath}`\n }\n\n if (newBasePath) {\n config.url = config.url?.replace(servicePath, newBasePath)\n }\n }\n return config\n },\n onError: error => Promise.reject(error)\n }\n}\n","/*\n * Copyright (c) 2022-2024 AccelByte Inc. All Rights Reserved\n * This is licensed software from AccelByte Inc, for limitations\n * and restrictions contact your company contract manager.\n */\nimport { AxiosError } from 'axios'\nimport { Interceptor } from '../Types'\n\nconst ERROR_ELIGIBILITY_CODE = 13130\n\nexport const ErrorInterceptors: Array<Interceptor> = [\n {\n type: 'response',\n name: 'user-eligibilitiy-change',\n onError: e => {\n const error = e as AxiosError<any>\n if (error.response) {\n const { response } = error\n if (response?.status === 403 && (response?.config as any).url.includes(process.env.BASE_URL) && response?.config.withCredentials) {\n if (response.data.errorCode === ERROR_ELIGIBILITY_CODE) {\n // onUserEligibilityChange()\n }\n }\n }\n\n return Promise.reject(error)\n }\n },\n {\n type: 'response',\n name: 'too-many-request',\n onError: e => {\n const error = e as AxiosError<any>\n if (error.response) {\n const { response } = error\n if (response?.status === 429 /* TooManyRequests */) {\n // onTooManyRequest(error)\n }\n }\n\n return Promise.reject(error)\n }\n }\n]\n","/*\n * Copyright (c) 2024 AccelByte Inc. All Rights Reserved\n * This is licensed software from AccelByte Inc, for limitations\n * and restrictions contact your company contract manager.\n */\n\nimport { z, ZodTypeAny } from 'zod'\n\nexport type MakeOptional<Type, UnionKeys extends keyof Type> = Omit<Type, UnionKeys> & Partial<Pick<Type, UnionKeys>>\nexport type MakeRequired<T, K extends keyof T> = T & { [P in K]-?: T[P] }\n\nexport function isType<T extends ZodTypeAny>(schema: T, data: unknown): data is z.infer<T> {\n return schema.safeParse(data).success\n}\n","/*\n * Copyright (c) 2022-2024 AccelByte Inc. All Rights Reserved\n * This is licensed software from AccelByte Inc, for limitations\n * and restrictions contact your company contract manager.\n */\nexport class UrlHelper {\n static isCompleteURLString = (urlString: string) => {\n try {\n const url = new URL(urlString)\n return url.hostname !== ''\n } catch (error) {}\n return false\n }\n\n static trimSlashFromStringEnd(pathString: string) {\n let newString = pathString\n while (newString[newString.length - 1] === '/') {\n newString = newString.slice(0, -1)\n }\n return newString\n }\n\n static trimSlashFromStringStart(pathString: string) {\n let newString = pathString\n while (newString[0] === '/') {\n newString = newString.slice(1)\n }\n return newString\n }\n\n static trimSlashFromStringEdges(pathString: string) {\n return UrlHelper.trimSlashFromStringStart(this.trimSlashFromStringEnd(pathString))\n }\n\n static combinePaths(...paths: string[]) {\n const completePath = paths.join('/')\n // Replace 2 or more consecutive slashes with a single slash.\n // This is also the behavior from Node's `path.join`.\n return completePath.replace(/\\/{2,}/g, '/')\n }\n\n static combineURLPaths(urlString: string, ...paths: string[]) {\n const url = new URL(urlString)\n const { origin } = url\n const pathname = UrlHelper.trimSlashFromStringEdges(UrlHelper.combinePaths(url.pathname, ...paths))\n return new URL(pathname, origin).toString()\n }\n\n static removeQueryParam(fullUrlString: string, param: string) {\n const url = new URL(fullUrlString)\n const params = url.searchParams\n const pathname = this.trimSlashFromStringEnd(url.pathname)\n\n // Remove the query parameter\n params.delete(param)\n\n // Preserving other URL attributes\n let newUrlString: string\n if (params.toString() === '') newUrlString = `${url.origin}${pathname}${url.hash}`\n else newUrlString = `${url.origin}${pathname}?${params.toString()}${url.hash}`\n\n return newUrlString\n }\n}\n"],"mappings":"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","names":["WebSocket","axios","import_axios","axios","qs","IamErrorCode","import_axios","import_zod","import_zod","import_zod","GrantTokenUrls","LoginUrls","axios"]}
|
|
@@ -727,15 +727,12 @@ var INTERNAL_SERVICES = {
|
|
|
727
727
|
"/lobby": "justice-lobby-server",
|
|
728
728
|
"/match2": "justice-matchmaking-v2",
|
|
729
729
|
// sdk-matchmaking
|
|
730
|
-
"/matchmaking": "justice-matchmaking",
|
|
731
|
-
// sdk-matchmaking-v1
|
|
732
730
|
"/odin-config": "justice-odin-config-service",
|
|
733
731
|
"/platform": "justice-platform-service",
|
|
734
732
|
"/qosm": "justice-qos-manager-service",
|
|
735
733
|
"/reporting": "justice-reporting-service",
|
|
736
734
|
"/seasonpass": "justice-seasonpass-service",
|
|
737
735
|
"/session": "justice-session-service",
|
|
738
|
-
"/sessionbrowser": "justice-session-browser-service",
|
|
739
736
|
"/social": "justice-social-service",
|
|
740
737
|
"/ugc": "justice-ugc-service",
|
|
741
738
|
"/config": "justice-config-service"
|