@alliumcloud/avatar-sso-internal 2.5.6-dev.4 → 2.5.6-testing.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/main.d.ts +1 -20
- package/dist/main.js +2 -55
- package/dist/main.js.map +1 -1
- package/package.json +1 -1
package/dist/main.d.ts
CHANGED
|
@@ -69,11 +69,6 @@ interface Config {
|
|
|
69
69
|
storage?: CustomStorage;
|
|
70
70
|
clientUrl?: string;
|
|
71
71
|
serverUrl?: string;
|
|
72
|
-
/**
|
|
73
|
-
* Enable the call logger (`onLog`). Off by default — when off, the instance
|
|
74
|
-
* is not wrapped in a Proxy, so there is zero logging overhead in production.
|
|
75
|
-
*/
|
|
76
|
-
debug?: boolean;
|
|
77
72
|
}
|
|
78
73
|
interface Profile {
|
|
79
74
|
id: string;
|
|
@@ -259,19 +254,6 @@ interface ActionSessionCleared {
|
|
|
259
254
|
}
|
|
260
255
|
type Actions = ActionSessionCleared | ActionSSOExchange | ActionLocalExchange | ActionLogout | ActionRefresh | ActionProfileFetch | ActionProfileUpdate | ActionProfilePhotoUpdate | ActionAddClothUpdate | ActionFetchAllCloths | ActionFetchCloth | ActionUpdateCloth | ActionClothDelete | ActionAddMaterial | ActionGetMaterials | ActionGetMaterial | ActionUpdateMaterial | ActionDeleteMaterial | ActionAddSkull | ActionUpdateSkull | ActionGetAllSkulls | ActionGetSkull | ActionDeleteSkull | ActionSkullMaterialAdd | ActionSkullMaterialGetAll | ActionSkullMaterialGetById | ActionSkullMaterialUpdate | ActionSkullMaterialDelete | ActionBodyAddFile | ActionBodyGetAll | ActionBodyGetById | ActionBodyUpdate | ActionBodyDelete | ActionLocalLogin | ActionLocalRegister | ActionLocalLogout;
|
|
261
256
|
type Cb = (action: Actions) => void;
|
|
262
|
-
/** Sink for formatted SDK log lines, plugged in via `sso.onLog(...)`. */
|
|
263
|
-
type Log = (message: string) => void;
|
|
264
|
-
/** Controls whether payload/response data is collected into the log line. */
|
|
265
|
-
interface LogOptions {
|
|
266
|
-
/** include the call payload in the log line. Default `false`. */
|
|
267
|
-
request?: boolean;
|
|
268
|
-
/** include the resolved response in the log line. Default `false`. */
|
|
269
|
-
response?: boolean;
|
|
270
|
-
}
|
|
271
|
-
/** Injected onto the SDK instance by `withLogger`. */
|
|
272
|
-
type WithLog = {
|
|
273
|
-
onLog: (log: Log, options?: LogOptions) => void;
|
|
274
|
-
};
|
|
275
257
|
interface ErrorRes {
|
|
276
258
|
statusCode: number;
|
|
277
259
|
success: false;
|
|
@@ -520,7 +502,6 @@ declare class SSO {
|
|
|
520
502
|
readonly dbId = "local-user";
|
|
521
503
|
private callbacks;
|
|
522
504
|
private cb;
|
|
523
|
-
readonly onLog: WithLog["onLog"];
|
|
524
505
|
constructor(config: Config);
|
|
525
506
|
readonly register: (payload: LocalRegisterPayload) => Promise<LocalRegister>;
|
|
526
507
|
private readonly localLogin;
|
|
@@ -591,4 +572,4 @@ declare class SSO {
|
|
|
591
572
|
readonly getLocalUser: () => Promise<DBRes>;
|
|
592
573
|
}
|
|
593
574
|
|
|
594
|
-
export { type AccessTokenPayload, type Actions, type AddClothFilePayload, type AddClothPayload, type AddMaterialFilePayload, type AddMaterialPayload, type AddSkullFilePayload, type AddSkullPayload, type AssetGender, type Body, type BodyAddFilePayload, type BodyAddPayload, type BodyUpdateFilePayload, type BodyUpdatePayload, type Cb, type Cloth, type Config, CustomStorage, type DBRes, type ErrorRes, type Exchange, type GetClothsOptions, type GetMaterialsOptions, type LocalLoginPayload, type LocalRegister, type LocalRegisterPayload, type
|
|
575
|
+
export { type AccessTokenPayload, type Actions, type AddClothFilePayload, type AddClothPayload, type AddMaterialFilePayload, type AddMaterialPayload, type AddSkullFilePayload, type AddSkullPayload, type AssetGender, type Body, type BodyAddFilePayload, type BodyAddPayload, type BodyUpdateFilePayload, type BodyUpdatePayload, type Cb, type Cloth, type Config, CustomStorage, type DBRes, type ErrorRes, type Exchange, type GetClothsOptions, type GetMaterialsOptions, type LocalLoginPayload, type LocalRegister, type LocalRegisterPayload, type LoginPayload, type Material, type Profile, type RefToken, type RefreshTokenPayload, type SignedUrl, type Skull, type SkullMaterial, type SkullMaterialAddFilePayload, type SkullMaterialAddPayload, type SkullMaterialUpdateFilePayload, type SkullMaterialUpdatePayload, type SuccessRes, type UpdateClothPayload, type UpdateMaterialPayload, type UpdateProfilePayload, type UpdateProfilePicture, type UpdateProfilePicturePayload, type UpdateSkullPayload, type Verify, type VerifyOtpPayload, SSO as default };
|
package/dist/main.js
CHANGED
|
@@ -105,8 +105,8 @@ __export(environment_exports, {
|
|
|
105
105
|
ssoClientUrl: () => ssoClientUrl,
|
|
106
106
|
ssoServerUrl: () => ssoServerUrl
|
|
107
107
|
});
|
|
108
|
-
var ssoClientUrl = "https://app-
|
|
109
|
-
var ssoServerUrl = "https://api-gw-
|
|
108
|
+
var ssoClientUrl = "https://app-testing.2x22.com";
|
|
109
|
+
var ssoServerUrl = "https://api-gw-testing.2x22.com/sso/api/v1";
|
|
110
110
|
|
|
111
111
|
// src/config/index.ts
|
|
112
112
|
var db = new Database({
|
|
@@ -196,55 +196,6 @@ var CustomStorage = class {
|
|
|
196
196
|
// src/lib/utils.ts
|
|
197
197
|
var isBrowser = () => typeof window !== "undefined";
|
|
198
198
|
|
|
199
|
-
// src/lib/withLogger.ts
|
|
200
|
-
function withLogger(target) {
|
|
201
|
-
const ts = () => (/* @__PURE__ */ new Date()).toISOString();
|
|
202
|
-
const fmt = (v) => v === void 0 ? "" : typeof v === "string" ? `"${v}"` : JSON.stringify(v);
|
|
203
|
-
let log = () => {
|
|
204
|
-
};
|
|
205
|
-
let opts = { request: false, response: false };
|
|
206
|
-
return new Proxy(target, {
|
|
207
|
-
get(obj, prop, receiver) {
|
|
208
|
-
if (prop === "onLog") {
|
|
209
|
-
return (fn, options) => {
|
|
210
|
-
log = fn;
|
|
211
|
-
opts = {
|
|
212
|
-
request: options?.request ?? false,
|
|
213
|
-
response: options?.response ?? false
|
|
214
|
-
};
|
|
215
|
-
};
|
|
216
|
-
}
|
|
217
|
-
const value = Reflect.get(obj, prop, receiver);
|
|
218
|
-
if (typeof value !== "function") return value;
|
|
219
|
-
const method = String(prop);
|
|
220
|
-
return (...args) => {
|
|
221
|
-
const start = Date.now();
|
|
222
|
-
const payload = args.length === 0 ? void 0 : args.length === 1 ? args[0] : args;
|
|
223
|
-
log(
|
|
224
|
-
opts.request ? `[${ts()}] \u2192 ${method} payload=${fmt(payload)}` : `[${ts()}] \u2192 ${method}`
|
|
225
|
-
);
|
|
226
|
-
const ok = (out) => {
|
|
227
|
-
log(
|
|
228
|
-
opts.response ? `[${ts()}] \u2190 ${method} response=${fmt(out)} (${Date.now() - start}ms)` : `[${ts()}] \u2190 ${method} (${Date.now() - start}ms)`
|
|
229
|
-
);
|
|
230
|
-
return out;
|
|
231
|
-
};
|
|
232
|
-
const fail = (err) => {
|
|
233
|
-
const msg = err instanceof Error ? err.message : String(err);
|
|
234
|
-
log(`[${ts()}] \u2717 ${method} failed (${Date.now() - start}ms): ${msg}`);
|
|
235
|
-
throw err;
|
|
236
|
-
};
|
|
237
|
-
try {
|
|
238
|
-
const out = value.apply(obj, args);
|
|
239
|
-
return out instanceof Promise ? out.then(ok, fail) : ok(out);
|
|
240
|
-
} catch (err) {
|
|
241
|
-
return fail(err);
|
|
242
|
-
}
|
|
243
|
-
};
|
|
244
|
-
}
|
|
245
|
-
});
|
|
246
|
-
}
|
|
247
|
-
|
|
248
199
|
// src/main.ts
|
|
249
200
|
var SSO = class {
|
|
250
201
|
constructor(config) {
|
|
@@ -257,9 +208,6 @@ var SSO = class {
|
|
|
257
208
|
this.cb = (payload) => {
|
|
258
209
|
for (const cb of this.callbacks) cb(payload);
|
|
259
210
|
};
|
|
260
|
-
// no-op by default; the withLogger Proxy overrides this when debug is on
|
|
261
|
-
this.onLog = () => {
|
|
262
|
-
};
|
|
263
211
|
this.register = async (payload) => {
|
|
264
212
|
const { redirectUri, type, ...body } = payload;
|
|
265
213
|
const queryParams = this.emailVerificationQuery({ redirectUri, type });
|
|
@@ -1348,7 +1296,6 @@ var SSO = class {
|
|
|
1348
1296
|
this.db = config.storage instanceof CustomStorage ? config.storage : db;
|
|
1349
1297
|
this.ssoClientUrl = config.clientUrl ?? ssoClientUrl2;
|
|
1350
1298
|
this.ssoServerUrl = config.serverUrl ?? ssoServerUrl2;
|
|
1351
|
-
return config.debug ? withLogger(this) : this;
|
|
1352
1299
|
}
|
|
1353
1300
|
};
|
|
1354
1301
|
|
package/dist/main.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/lib/database.ts","../src/config/environment.ts","../src/config/index.ts","../src/lib/CustomStorage.ts","../src/lib/utils.ts","../src/lib/withLogger.ts","../src/main.ts"],"names":["db","ssoClientUrl","ssoServerUrl","r"],"mappings":"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","file":"main.js","sourcesContent":["export default class Database {\n constructor(\n private readonly config: {\n dbName: string;\n dbVersion: number;\n storeName: string;\n },\n ) {}\n\n open = (): Promise<IDBDatabase> => {\n return new Promise((resolve, reject) => {\n const request = indexedDB.open(this.config.dbName, this.config.dbVersion);\n\n request.onerror = () => reject(request.error);\n\n request.onupgradeneeded = () => {\n const db = request.result;\n\n if (!db.objectStoreNames.contains(this.config.storeName))\n db.createObjectStore(this.config.storeName, {\n keyPath: \"id\",\n });\n };\n\n request.onsuccess = () => resolve(request.result);\n });\n };\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n create = async (user: { id: string; [key: string]: any }) => {\n const db = await this.open();\n\n return new Promise((resolve, reject) => {\n const tx = db.transaction(this.config.storeName, \"readwrite\");\n const store = tx.objectStore(this.config.storeName);\n\n const request = store.add(user);\n\n request.onsuccess = () => resolve(user);\n request.onerror = () => reject(request.error);\n });\n };\n\n getById = async <T = unknown>(id: string): Promise<T | null> => {\n const db = await this.open();\n\n return new Promise((resolve, reject) => {\n const tx = db.transaction(this.config.storeName, \"readonly\");\n const store = tx.objectStore(this.config.storeName);\n\n const request = store.get(id) ?? null;\n\n request.onsuccess = () => resolve(request.result as T);\n request.onerror = () => reject(request.error);\n });\n };\n\n getAll = async () => {\n const db = await this.open();\n\n return new Promise((resolve, reject) => {\n const tx = db.transaction(this.config.storeName, \"readonly\");\n const store = tx.objectStore(this.config.storeName);\n\n const request = store.getAll();\n\n request.onsuccess = () => resolve(request.result);\n request.onerror = () => reject(request.error);\n });\n };\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n update = async (id: string, updates: Partial<Record<string, any>>) => {\n const db = await this.open();\n\n return new Promise((resolve, reject) => {\n const tx = db.transaction(this.config.storeName, \"readwrite\");\n const store = tx.objectStore(this.config.storeName);\n\n const getReq = store.get(id);\n\n getReq.onerror = () => reject(getReq.error);\n\n getReq.onsuccess = () => {\n if (!getReq.result) {\n reject(new Error(\"User not found\"));\n return;\n }\n\n const updatedUser = {\n ...getReq.result,\n ...updates,\n };\n\n const putReq = store.put(updatedUser);\n\n putReq.onsuccess = () => resolve(updatedUser);\n putReq.onerror = () => reject(putReq.error);\n };\n });\n };\n\n delete = async (id: string) => {\n const db = await this.open();\n\n return new Promise((resolve, reject) => {\n const tx = db.transaction(this.config.storeName, \"readwrite\");\n const store = tx.objectStore(this.config.storeName);\n\n const request = store.delete(id);\n\n request.onsuccess = () => resolve(true);\n request.onerror = () => reject(request.error);\n });\n };\n\n reset = async () => {\n const db = await this.open();\n\n return new Promise((resolve, reject) => {\n const tx = db.transaction(this.config.storeName, \"readwrite\");\n const store = tx.objectStore(this.config.storeName);\n\n const request = store.clear();\n\n request.onsuccess = () => resolve(true);\n request.onerror = () => reject(request.error);\n });\n };\n}\n","/**\n * URLs baked in at build time by tsup — see tsup.config.ts.\n * `process.env.*` refs here are compile-time string replacements, not runtime lookups.\n */\ndeclare const process: {\n env: {\n SSO_CLIENT_URL: string;\n SSO_SERVER_URL: string;\n };\n};\n\nexport const ssoClientUrl: string = process.env.SSO_CLIENT_URL;\nexport const ssoServerUrl: string = process.env.SSO_SERVER_URL;\n","import Database from \"../lib/database\";\nimport { Actions } from \"../types\";\nimport * as environment from \"./environment\";\n\nexport const db = new Database({\n dbName: \"sso-sdk\",\n dbVersion: 1,\n storeName: \"credentials\",\n});\n\nexport const ssoClientUrl = environment?.ssoClientUrl;\nexport const ssoServerUrl = environment?.ssoServerUrl;\n\nexport const actions = {\n local_login: \"local-login\",\n local_register: \"local-register\",\n local_logout: \"local-logout\",\n local_exchange: \"local-exchange\",\n sso_exchange: \"sso-exchange\",\n logout: \"logout\",\n session_cleared: \"session-cleared\",\n refresh: \"refresh\",\n profile_fetch: \"profile.fetch\",\n profile_update: \"profile.update\",\n profile_photo_update: \"profile-photo.update\",\n cloth_add: \"cloth.add\",\n cloth_fetch_all: \"cloth.fetch-all\",\n cloth_fetch: \"cloth.fetch\",\n cloth_update: \"cloth.update\",\n cloth_delete: \"cloth.delete\",\n material_add: \"material.add\",\n material_fetch_all: \"material.fetch-all\",\n material_fetch: \"material.fetch\",\n material_update: \"material.update\",\n material_delete: \"material.delete\",\n skull_add: \"skull.add\",\n skull_update: \"skull.update\",\n skull_fetch_all: \"skull.fetch-all\",\n skull_fetch: \"skull.fetch\",\n skull_delete: \"skull.delete\",\n skull_material_add: \"skull-material.add\",\n skull_material_fetch_all: \"skull-material.fetch-all\",\n skull_material_fetch: \"skull-material.fetch\",\n skull_material_update: \"skull-material.update\",\n skull_material_delete: \"skull-material.delete\",\n body_add: \"body.add\",\n body_fetch_all: \"body.fetch-all\",\n body_fetch: \"body.fetch\",\n body_update: \"body.update\",\n body_delete: \"body.delete\",\n} satisfies Record<string, Actions[\"type\"]>;\n","interface StorageDriver {\n get(key: string): string | null;\n set(key: string, value: string): void;\n remove(key: string): void;\n}\n\nexport default class CustomStorage {\n constructor(private readonly storage: StorageDriver) {}\n\n open = async () => this.storage;\n\n create = async <T extends { id: string }>(user: T) => {\n this.storage.set(user.id, JSON.stringify(user));\n\n return user;\n };\n\n getById = async <T = unknown>(id: string): Promise<T | null> => {\n const item = this.storage.get(id);\n\n if (!item) return null;\n\n return JSON.parse(item) as T;\n };\n\n getAll = async () => {\n return [];\n };\n\n update = async <T extends Record<string, unknown>>(\n id: string,\n updates: Partial<T>,\n ) => {\n const item = await this.getById<T>(id);\n\n if (!item) throw new Error(\"User not found\");\n\n const updatedItem = {\n ...item,\n ...updates,\n };\n\n this.storage.set(id, JSON.stringify(updatedItem));\n\n return updatedItem;\n };\n\n delete = async (id: string) => {\n this.storage.remove(id);\n\n return true;\n };\n\n reset = async () => {\n this.storage.remove(\"local-user\");\n\n return true;\n };\n}\n","export const isBrowser = () => typeof window !== \"undefined\";\n","import { Log, LogOptions, WithLog } from \"../types\";\n\n/**\n * Wraps an SDK instance in a Proxy that emits a formatted log line for every\n * method call (payload in, response/error out) without touching any method.\n *\n * - The sink starts as a no-op; the consumer plugs one in via `instance.onLog(fn)`.\n * - Internal `this.foo()` calls are NOT re-logged (methods run on the raw target).\n * - Errors are logged and rethrown, never swallowed.\n */\nexport function withLogger<T extends object>(target: T): T & WithLog {\n const ts = () => new Date().toISOString();\n const fmt = (v: unknown) =>\n v === undefined ? \"\" : typeof v === \"string\" ? `\"${v}\"` : JSON.stringify(v);\n\n // sink starts as a no-op; consumer swaps it via `instance.onLog(...)`\n let log: Log = () => {};\n // request/response data collection is opt-in; off by default\n let opts: Required<LogOptions> = { request: false, response: false };\n\n return new Proxy(target, {\n get(obj, prop, receiver) {\n // injected method — not present on the real class\n if (prop === \"onLog\") {\n return (fn: Log, options?: LogOptions) => {\n log = fn;\n opts = {\n request: options?.request ?? false,\n response: options?.response ?? false,\n };\n };\n }\n\n const value = Reflect.get(obj, prop, receiver);\n if (typeof value !== \"function\") return value;\n\n const method = String(prop);\n\n return (...args: unknown[]) => {\n const start = Date.now();\n\n // payload = what the method was called with (only when opted in)\n const payload =\n args.length === 0 ? undefined : args.length === 1 ? args[0] : args;\n log(\n opts.request\n ? `[${ts()}] → ${method} payload=${fmt(payload)}`\n : `[${ts()}] → ${method}`,\n );\n\n const ok = (out: unknown) => {\n // response = what the method returned (only when opted in)\n log(\n opts.response\n ? `[${ts()}] ← ${method} response=${fmt(out)} (${Date.now() - start}ms)`\n : `[${ts()}] ← ${method} (${Date.now() - start}ms)`,\n );\n return out;\n };\n const fail = (err: unknown) => {\n const msg = err instanceof Error ? err.message : String(err);\n log(`[${ts()}] ✗ ${method} failed (${Date.now() - start}ms): ${msg}`);\n throw err;\n };\n\n try {\n const out = (value as (...a: unknown[]) => unknown).apply(obj, args);\n return out instanceof Promise ? out.then(ok, fail) : ok(out);\n } catch (err) {\n return fail(err);\n }\n };\n },\n }) as T & WithLog;\n}\n","import * as c from \"./config\";\nimport CustomStorage from \"./lib/CustomStorage\";\nimport Database from \"./lib/database\";\nimport { isBrowser } from \"./lib/utils\";\nimport { withLogger } from \"./lib/withLogger\";\nimport {\n AddClothFilePayload,\n AddClothPayload,\n AddMaterialFilePayload,\n AddMaterialPayload,\n AddSkullFilePayload,\n AddSkullPayload,\n Body,\n BodyAddFilePayload,\n BodyAddPayload,\n BodyUpdateFilePayload,\n BodyUpdatePayload,\n Cb,\n Cloth,\n Config,\n DBRes,\n ErrorRes,\n Exchange,\n GetClothsOptions,\n GetMaterialsOptions,\n LocalRegister,\n LocalRegisterPayload,\n LoginPayload,\n Material,\n Profile,\n RefreshTokenPayload,\n RefToken,\n SignedUrl,\n Skull,\n SkullMaterial,\n SkullMaterialAddFilePayload,\n SkullMaterialAddPayload,\n SkullMaterialUpdateFilePayload,\n SkullMaterialUpdatePayload,\n SuccessRes,\n UpdateClothPayload,\n UpdateMaterialPayload,\n UpdateProfilePayload,\n UpdateProfilePicture,\n UpdateProfilePicturePayload,\n UpdateSkullPayload,\n Verify,\n VerifyOtpPayload,\n WithLog,\n} from \"./types\";\n\nexport type * from \"./types\";\n\nexport { default as CustomStorage } from \"./lib/CustomStorage\";\n\nexport default class SSO {\n readonly serviceType = \"AVATAR_SSO\";\n protected readonly db: Database | CustomStorage;\n protected ssoClientUrl = c.ssoClientUrl;\n protected ssoServerUrl = c.ssoServerUrl;\n readonly sdkKey: string;\n readonly dbId = \"local-user\";\n private callbacks = new Set<Cb>();\n private cb: Cb = (payload) => {\n for (const cb of this.callbacks) cb(payload);\n };\n\n // no-op by default; the withLogger Proxy overrides this when debug is on\n readonly onLog: WithLog[\"onLog\"] = () => {};\n\n constructor(private readonly config: Config) {\n this.sdkKey = config.sdkKey ?? \"no-sdk-key\";\n this.db = config.storage instanceof CustomStorage ? config.storage : c.db;\n this.ssoClientUrl = config.clientUrl ?? c.ssoClientUrl;\n this.ssoServerUrl = config.serverUrl ?? c.ssoServerUrl;\n\n // only wrap when debug is on; otherwise return the raw instance (zero overhead)\n return config.debug ? withLogger(this) : this;\n }\n\n readonly register = async (\n payload: LocalRegisterPayload,\n ): Promise<LocalRegister> => {\n const { redirectUri, type, ...body } = payload;\n const queryParams = this.emailVerificationQuery({ redirectUri, type });\n\n const res = await fetch(`${this.ssoServerUrl}/users/signup${queryParams}`, {\n method: \"POST\",\n body: JSON.stringify(body),\n headers: {\n \"Content-Type\": \"application/json\",\n \"x-sdk-key\": this.sdkKey,\n },\n });\n const json = (await res.json()) as SuccessRes<LocalRegister> | ErrorRes;\n\n if (!res?.ok || !json.success)\n throw new Error(json.message ?? \"SSO-SDK: Local register failed.\");\n\n this.cb({\n type: c.actions.local_register,\n payload: json.data,\n });\n\n return json.data;\n };\n\n private readonly localLogin = async (payload: LoginPayload) => {\n if (!(payload instanceof Object)) return;\n\n const { redirectUri, type, ...body } = payload;\n const queryParams = this.emailVerificationQuery({ redirectUri, type });\n\n const res = await fetch(`${this.ssoServerUrl}/users/signin${queryParams}`, {\n method: \"POST\",\n body: JSON.stringify(body),\n headers: {\n \"Content-Type\": \"application/json\",\n \"x-sdk-key\": this.sdkKey,\n },\n });\n\n const json: SuccessRes | ErrorRes = await res.json();\n\n if (!res?.ok || !json.success)\n throw new Error(json.message ?? \"SSO-SDK: Local login failed.\");\n\n this.cb({\n type: c.actions.local_login,\n payload: null,\n });\n };\n private readonly ssoLogin = async (redirectUrl: LoginPayload) => {\n if (redirectUrl instanceof Object) return;\n\n this.throwIfNotBrowser();\n\n const r = `${this.ssoClientUrl}/sso?sdkKey=${this.sdkKey}&redirectUri=${redirectUrl}`;\n\n window.location.href = r;\n };\n /**\n * Login function that triggers both local and SSO login flows. If the payload is a string, it will trigger the SSO login flow with the payload as the redirect URL. If the payload is an object, it will trigger the local login flow with the payload as the login data.\n * @param payload just redirect URL string for SSO login or LocalLoginPayload for local login\n * @returns\n */\n readonly login = async (payload: LoginPayload) => {\n await Promise.all([this.localLogin(payload), this.ssoLogin(payload)]);\n };\n\n private readonly decodeJwtPayload = <T>(token: string) => {\n try {\n const payload = token.split(\".\")[1];\n if (!payload) return null;\n\n const base64 = payload.replace(/-/g, \"+\").replace(/_/g, \"/\");\n\n return JSON.parse(atob(base64)) as T;\n } catch {\n return null;\n }\n };\n\n /**\n * - it throws.\n */\n private readonly autoRefresh = async () => {\n const existingUser = await this.getLocalUser().catch(() => null);\n\n if (!existingUser) return null;\n\n const { accessToken, refreshToken } = existingUser.tokens;\n\n const decodedRT = this.decodeJwtPayload<RefreshTokenPayload>(refreshToken);\n const decodedAT = this.decodeJwtPayload<RefreshTokenPayload>(accessToken);\n\n const date = new Date();\n\n const isValidRefToken =\n decodedRT?.exp && decodedAT?.exp && date.getTime() < decodedRT.exp * 1000;\n\n if (!isValidRefToken) {\n await this.db.reset();\n throw new Error(`SSO-SDK: Session cleared. Please login again.`);\n } else {\n date.setMinutes(date.getMinutes() + 5); // check if it expires in the next 5 minutes\n const shouldRefresh =\n decodedAT?.exp && date.getTime() > decodedAT.exp * 1000;\n\n if (!shouldRefresh) return existingUser.tokens;\n\n return await this.refresh();\n }\n };\n\n private readonly localExchange = async (\n email: string | null,\n token: string | null,\n ): Promise<Exchange | void> => {\n if (!email || !token) return;\n\n const res = await fetch(`${this.ssoServerUrl}/users/verify`, {\n method: \"POST\",\n body: JSON.stringify({\n token,\n email,\n }),\n headers: {\n \"Content-Type\": \"application/json\",\n \"x-sdk-key\": this.sdkKey,\n },\n });\n\n const verifyRes: SuccessRes<Verify> | ErrorRes = await res.json();\n\n if (!res.ok || !verifyRes.success)\n throw new Error(verifyRes.message ?? `SSO-SDK: Local exchange failed.`);\n\n const profileRes = await fetch(`${this.ssoServerUrl}/users/profile`, {\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${verifyRes.data.tokens.accessToken}`,\n \"x-sdk-key\": this.sdkKey,\n },\n });\n\n const profileJson: SuccessRes<Profile> | ErrorRes = await profileRes.json();\n\n if (!profileRes.ok || !profileJson.success)\n throw new Error(profileJson.message ?? `SSO-SDK: Profile fetch failed.`);\n\n await this.db.open();\n\n await this.db.delete(this.dbId);\n\n await this.db.create({\n ...profileJson.data,\n userId: profileJson.data.id,\n tokens: verifyRes.data.tokens,\n id: this.dbId,\n });\n\n this.cb({\n type: c.actions.local_exchange,\n payload: profileJson.data,\n });\n\n return { ...profileJson.data, tokens: verifyRes.data.tokens };\n };\n\n readonly verifyOtp = async (payload: VerifyOtpPayload) => {\n await this.db.reset();\n\n const email = payload.email.trim().toLowerCase();\n const otpCode = payload.otpCode.trim();\n\n if (!email || !otpCode) throw new Error(`SSO-SDK: Invalid OTP payload.`);\n\n const res = await this.localExchange(email, otpCode);\n\n if (!res) throw new Error(`SSO-SDK: OTP verification failed.`);\n\n return res;\n };\n private readonly ssoExchange = async (\n email: string | null,\n token: string | null,\n ): Promise<Exchange | void> => {\n if (email || !token) return;\n\n const res = await fetch(`${this.ssoServerUrl}/sso/exchange`, {\n method: \"POST\",\n body: JSON.stringify({\n token,\n sdkKey: this.sdkKey,\n }),\n headers: {\n \"Content-Type\": \"application/json\",\n \"x-sdk-key\": this.sdkKey,\n },\n });\n\n const data: SuccessRes<{\n tokens: {\n accessToken: string;\n refreshToken: string;\n };\n }> = await res.json();\n\n if (!res.ok)\n throw new Error(data.message ?? `SSO-SDK: SSO exchange failed.`);\n\n const profileRes = await fetch(`${this.ssoServerUrl}/users/profile`, {\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${data.data.tokens.accessToken}`,\n \"x-sdk-key\": this.sdkKey,\n },\n });\n\n const profileJson: SuccessRes<Profile> | ErrorRes = await profileRes.json();\n\n if (!profileRes.ok || !profileJson.success)\n throw new Error(profileJson.message ?? `SSO-SDK: Profile fetch failed.`);\n\n await this.db.open();\n\n await this.db.delete(this.dbId);\n\n await this.db.create({\n ...profileJson.data,\n userId: profileJson.data.id,\n tokens: data.data.tokens,\n id: this.dbId,\n });\n\n this.cb({\n type: c.actions.sso_exchange,\n payload: profileJson.data,\n });\n\n return { ...profileJson.data, tokens: data.data.tokens };\n };\n /**\n * - this will just skip the exchange returning null if the query params are not correct and won't throw an error.\n */\n readonly exchange = async () => {\n this.throwIfNotBrowser();\n\n const url = new URL(window.location.href);\n const email = url.searchParams.get(\"email\");\n const token = url.searchParams.get(\"token\");\n\n const isExchanging = !!(email && token);\n\n if (isExchanging) {\n url.searchParams.delete(\"email\");\n url.searchParams.delete(\"token\");\n window.history.replaceState({}, \"\", url);\n }\n\n const tokenReused = await this.autoRefresh().catch((e) => {\n if (/session cleared/i.test(e?.message ?? \"\") && !isExchanging) {\n this.cb({\n type: c.actions.session_cleared,\n payload: null,\n });\n }\n\n if (!isExchanging)\n throw new Error(e?.message ?? `SSO-SDK: Auto refresh failed.`);\n\n return null;\n });\n\n if (tokenReused && isExchanging)\n throw new Error(`SSO-SDK: User already logged in.`);\n\n if (!isExchanging) return null;\n\n await this.db.reset(); // reset the db before exchange to avoid conflicts\n\n const sanitizedEmail = email\n ? email.trim().toLowerCase().replace(/\\s+/g, \"+\")\n : null;\n\n const res = await Promise.all([\n this.localExchange(sanitizedEmail, token),\n this.ssoExchange(sanitizedEmail, token),\n ]).then((r) => r.find((r2) => !!r2));\n\n if (!res) throw new Error(`SSO-SDK: Exchange failed.`);\n\n return res;\n };\n\n readonly fetchProfile = async () => {\n const res = await this.withRefresh(async (aT) => {\n return await fetch(`${this.ssoServerUrl}/users/profile`, {\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${aT}`,\n \"x-sdk-key\": this.sdkKey,\n },\n });\n });\n\n const pRes: SuccessRes<Profile> | ErrorRes = await res.json();\n\n if (!res?.ok || !pRes.success)\n throw new Error(pRes.message ?? `SSO-SDK: Profile fetch failed.`);\n\n this.cb({\n type: c.actions.profile_fetch,\n payload: pRes.data,\n });\n\n return pRes.data;\n };\n\n readonly refresh = async () => {\n const dbUser = (await this.db.getById(this.dbId)) as DBRes | undefined;\n\n if (!dbUser) throw new Error(`SSO-SDK: No user found in IndexedDB.`);\n\n const res = await fetch(`${this.ssoServerUrl}/users/refresh`, {\n method: \"POST\",\n body: JSON.stringify({\n token: dbUser.tokens.refreshToken,\n }),\n headers: {\n \"Content-Type\": \"application/json\",\n \"x-sdk-key\": this.sdkKey,\n },\n });\n\n const refTokeRes: SuccessRes<RefToken> | ErrorRes = await res.json();\n\n if (!res.ok || !refTokeRes.success) {\n this.db.delete(this.dbId);\n this.cb({\n type: c.actions.session_cleared,\n payload: null,\n });\n throw new Error(refTokeRes.message ?? `SSO-SDK: Refresh failed.`);\n }\n\n await this.db.update(this.dbId, {\n ...dbUser,\n tokens: {\n accessToken: refTokeRes.data.accessToken,\n refreshToken: refTokeRes.data.refreshToken,\n },\n });\n\n this.cb({\n type: c.actions.refresh,\n payload: refTokeRes.data,\n });\n\n return refTokeRes.data;\n };\n\n private readonly localLogout = async (redirectUrl?: string) => {\n if (redirectUrl) return;\n\n const res = await this.withRefresh(async (aT) => {\n return await fetch(`${this.ssoServerUrl}/users/logout`, {\n method: \"DELETE\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${aT}`,\n \"x-sdk-key\": this.sdkKey,\n },\n });\n });\n\n const json: SuccessRes | ErrorRes = await res.json();\n\n if (!res?.ok || !json.success)\n throw new Error(json.message ?? `SSO-SDK: Local logout failed.`);\n\n await this.db.delete(this.dbId);\n\n this.cb({\n type: c.actions.local_logout,\n payload: null,\n });\n\n return true;\n };\n private readonly ssoLogout = async (redirectUrl?: string) => {\n if (!redirectUrl) return;\n\n this.throwIfNotBrowser();\n\n const url = this.validatedUrl(redirectUrl);\n\n const res = await this.withRefresh(async (aT) => {\n return await fetch(`${this.ssoServerUrl}/users/logout`, {\n method: \"DELETE\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${aT}`,\n \"x-sdk-key\": this.sdkKey,\n },\n });\n });\n\n const json: SuccessRes | ErrorRes = await res.json();\n\n if (!res?.ok || !json.success)\n throw new Error(json.message ?? `SSO-SDK: Logout failed.`);\n\n await this.db.delete(this.dbId);\n\n const goToUrl = `${this.ssoClientUrl}/logout?redirectUri=${url}`;\n location.href = goToUrl;\n\n this.cb({\n type: c.actions.logout,\n payload: null,\n });\n\n return true;\n };\n /**\n * - If a redirect URL is provided, it will trigger the SSO logout flow and redirect the user to the provided URL after logout.\n * - If no redirect URL is provided, it will trigger the local logout flow and clear the user data from IndexedDB.\n */\n readonly logout = async (redirectUrl?: string): Promise<Boolean> => {\n const res = await Promise.all([\n this.localLogout(redirectUrl),\n this.ssoLogout(redirectUrl),\n ]).then((r) => r.find((r) => r !== undefined));\n\n if (!res) throw new Error(\"SSO-SDK: Logout failed.\");\n\n this.cb({\n type: c.actions.session_cleared,\n payload: null,\n });\n\n return res;\n };\n\n readonly onEvents = (cb: Cb) => {\n this.callbacks.add(cb);\n return () => this.callbacks.delete(cb);\n };\n\n protected readonly withRefresh = async (\n api: (aT: string) => Promise<Response>,\n ) => {\n await this.db.open();\n const dbUser = (await this.db.getById(this.dbId)) as DBRes | undefined;\n\n if (!dbUser) throw new Error(`SSO-SDK: No user found in IndexedDB.`);\n\n const r = await api(dbUser.tokens.accessToken);\n\n if (r.status !== 401) return r;\n\n const resToken = await this.refresh();\n\n const nR = await api(resToken.accessToken);\n\n return nR;\n };\n\n readonly profileUpdate = async (payload: UpdateProfilePayload) => {\n const res = await this.withRefresh(async (aT) => {\n return await fetch(`${this.ssoServerUrl}/users/profile`, {\n method: \"PATCH\",\n body: JSON.stringify(payload),\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${aT}`,\n \"x-sdk-key\": this.sdkKey,\n },\n });\n });\n\n const pRes: SuccessRes<Profile> | ErrorRes = await res.json();\n if (!res?.ok || !pRes.success)\n throw new Error(pRes.message ?? `SSO-SDK: Profile update failed.`);\n\n const { id, ...rest } = pRes.data;\n\n await this.db.update(this.dbId, {\n ...rest,\n userId: id,\n });\n\n this.cb({\n type: c.actions.profile_update,\n payload: pRes.data,\n });\n\n return pRes.data;\n };\n\n readonly avatarUpdate = async (file: File) => {\n const photoURL = await this.fileUpload(file);\n\n if (!photoURL) throw new Error(`SSO-SDK: File upload failed.`);\n\n const res = await this.withRefresh(async (aT) => {\n return await fetch(`${this.ssoServerUrl}/users/profile/avatar`, {\n method: \"PUT\",\n body: JSON.stringify({\n photoURL,\n } satisfies UpdateProfilePicturePayload),\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${aT}`,\n \"x-sdk-key\": this.sdkKey,\n },\n });\n });\n\n const pRes: SuccessRes<UpdateProfilePicture> | ErrorRes = await res.json();\n\n if (!res?.ok || !pRes.success)\n throw new Error(pRes.message ?? `SSO-SDK: Profile update failed.`);\n\n const { id, ...rest } = pRes.data;\n\n await this.db.update(this.dbId, {\n ...rest,\n userId: id,\n });\n\n this.cb({\n type: c.actions.profile_photo_update,\n payload: pRes.data,\n });\n\n return pRes.data;\n };\n\n private readonly fileUpload = async (file: File) => {\n const { type } = file;\n\n const url = await this.withRefresh(async (aT) => {\n return await fetch(`${this.ssoServerUrl}/uploads/url?fileType=${type}`, {\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${aT}`,\n \"x-sdk-key\": this.sdkKey,\n },\n });\n });\n\n const json: SuccessRes<SignedUrl> | ErrorRes = await url.json();\n if (!url?.ok || !json.success)\n throw new Error(json.message ?? `SSO-SDK: could not get upload url.`);\n\n const upload = await fetch(json.data.url, {\n method: json.data.method,\n body: file,\n headers: json.data.headers,\n });\n\n if (!upload.ok) throw new Error(`SSO-SDK: could not upload file.`);\n\n const { origin, pathname } = new URL(json.data.url);\n\n return `${origin}${pathname}`;\n };\n\n private readonly clothAdd = async (payload: AddClothFilePayload) => {\n const thumb = await this.fileUpload(payload.thumb);\n if (!thumb) throw new Error(`SSO-SDK: File upload failed.`);\n\n const jsonPayload = {\n ...payload,\n thumb,\n } satisfies AddClothPayload;\n\n await this.db.open();\n\n const dbUser = (await this.db.getById(this.dbId)) as DBRes | undefined;\n\n if (!dbUser) throw new Error(`SSO-SDK: No user found in IndexedDB.`);\n\n const res = await this.withRefresh(async (aT) => {\n return await fetch(`${this.ssoServerUrl}/clothings`, {\n method: \"POST\",\n body: JSON.stringify(jsonPayload),\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${aT || dbUser.tokens.accessToken}`,\n \"x-sdk-key\": this.sdkKey,\n },\n });\n });\n\n const bodyRes: SuccessRes<Cloth> | ErrorRes = await res.json();\n if (!res?.ok || !bodyRes.success)\n throw new Error(bodyRes.message ?? `SSO-SDK: Cloth add failed.`);\n\n const { data } = bodyRes;\n\n this.cb({\n type: c.actions.cloth_add,\n payload: data,\n });\n\n return data;\n };\n\n readonly clothGetAll = async (options?: GetClothsOptions) => {\n const queryParams = new URLSearchParams({\n skip: Math.ceil(options?.skip ?? 0).toString(),\n limit: Math.ceil(options?.limit ?? 10).toString(),\n sort: options?.sort ?? \"asc\",\n });\n\n const res = await this.withRefresh(async (aT) => {\n return await fetch(\n `${this.ssoServerUrl}/clothings?${queryParams.toString()}`,\n {\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${aT}`,\n \"x-sdk-key\": this.sdkKey,\n },\n },\n );\n });\n\n const clothRes: SuccessRes<Cloth[]> | ErrorRes = await res.json();\n if (!res?.ok || !clothRes.success)\n throw new Error(clothRes.message ?? `SSO-SDK: Get all cloths failed.`);\n\n this.cb({\n type: c.actions.cloth_fetch_all,\n payload: clothRes.data,\n });\n\n return clothRes.data;\n };\n\n readonly clothGetById = async (clothId: string) => {\n const res = await this.withRefresh(async (aT) => {\n return await fetch(`${this.ssoServerUrl}/clothings/${clothId}`, {\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${aT}`,\n \"x-sdk-key\": this.sdkKey,\n },\n });\n });\n\n const clothRes: SuccessRes<Cloth> | ErrorRes = await res.json();\n\n if (!res?.ok || !clothRes.success)\n throw new Error(clothRes.message ?? `SSO-SDK: Get cloth by id failed.`);\n\n this.cb({\n type: c.actions.cloth_fetch,\n payload: clothRes.data,\n });\n\n return clothRes.data;\n };\n\n private readonly clothUpdate = async (\n clothId: string,\n payload: UpdateClothPayload,\n ) => {\n const res = await this.withRefresh(async (aT) => {\n return await fetch(`${this.ssoServerUrl}/clothings/${clothId}`, {\n method: \"PATCH\",\n body: JSON.stringify(payload),\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${aT}`,\n \"x-sdk-key\": this.sdkKey,\n },\n });\n });\n\n const clothRes: SuccessRes<Cloth> | ErrorRes = await res.json();\n\n if (!res?.ok || !clothRes.success)\n throw new Error(clothRes.message ?? `SSO-SDK: Cloth update failed.`);\n\n const { data } = clothRes;\n\n this.cb({\n type: c.actions.cloth_update,\n payload: data,\n });\n\n return data;\n };\n\n private readonly clothDelete = async (clothId: string) => {\n await this.db.open();\n\n const dbUser = (await this.db.getById(this.dbId)) as DBRes | undefined;\n\n if (!dbUser) throw new Error(`SSO-SDK: No user found in IndexedDB.`);\n\n const res = await this.withRefresh(async (aT) => {\n return await fetch(`${this.ssoServerUrl}/clothings/${clothId}`, {\n method: \"DELETE\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${aT || dbUser.tokens.accessToken}`,\n \"x-sdk-key\": this.sdkKey,\n },\n });\n });\n\n const clothRes: SuccessRes<Cloth> | ErrorRes = await res.json();\n\n if (!res?.ok || !clothRes.success)\n throw new Error(clothRes.message ?? `SSO-SDK: Cloth delete failed.`);\n\n this.cb({\n type: c.actions.cloth_delete,\n payload: clothRes.data,\n });\n\n return clothRes.data;\n };\n\n // materials\n private readonly materialAdd = async (payload: AddMaterialFilePayload) => {\n const thumb = await this.fileUpload(payload.thumb);\n if (!thumb) throw new Error(`SSO-SDK: File upload failed.`);\n\n const jsonPayload = {\n ...payload,\n thumb: thumb,\n } satisfies AddMaterialPayload;\n\n const res = await this.withRefresh(async (aT) => {\n return await fetch(`${this.ssoServerUrl}/clothings/materials`, {\n method: \"POST\",\n body: JSON.stringify(jsonPayload),\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${aT}`,\n \"x-sdk-key\": this.sdkKey,\n },\n });\n });\n\n const materialRes: SuccessRes<Material> | ErrorRes = await res.json();\n\n if (!res?.ok || !materialRes.success)\n throw new Error(materialRes.message ?? `SSO-SDK: Material add failed.`);\n\n const { data } = materialRes;\n\n this.cb({\n type: c.actions.material_add,\n payload: data,\n });\n\n return data;\n };\n\n readonly materialGetAll = async (options?: GetMaterialsOptions) => {\n const params = new URLSearchParams({\n skip: options?.skip?.toString() || \"0\",\n limit: options?.limit?.toString() || \"10\",\n sort: options?.sort || \"asc\",\n });\n\n const res = await this.withRefresh(async (aT) => {\n return await fetch(`${this.ssoServerUrl}/clothings/materials?${params}`, {\n method: \"GET\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${aT}`,\n \"x-sdk-key\": this.sdkKey,\n },\n });\n });\n\n const materialRes: SuccessRes<Material[]> | ErrorRes = await res.json();\n\n if (!res?.ok || !materialRes.success)\n throw new Error(\n materialRes.message ?? `SSO-SDK: Material fetch all failed.`,\n );\n\n const { data } = materialRes;\n\n this.cb({\n type: c.actions.material_fetch_all,\n payload: data,\n });\n\n return data;\n };\n\n readonly materialGetById = async (materialId: string) => {\n const res = await this.withRefresh(async (aT) => {\n return await fetch(\n `${this.ssoServerUrl}/clothings/materials/${materialId}`,\n {\n method: \"GET\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${aT}`,\n \"x-sdk-key\": this.sdkKey,\n },\n },\n );\n });\n\n const materialRes: SuccessRes<Material> | ErrorRes = await res.json();\n\n if (!res?.ok || !materialRes.success)\n throw new Error(\n materialRes.message ?? `SSO-SDK: Material fetch by id failed.`,\n );\n\n const { data } = materialRes;\n\n this.cb({\n type: c.actions.material_fetch,\n payload: data,\n });\n\n return data;\n };\n\n private readonly materialUpdate = async (\n materialId: string,\n payload: UpdateMaterialPayload,\n ) => {\n const res = await this.withRefresh(async (aT) => {\n return await fetch(\n `${this.ssoServerUrl}/clothings/materials/${materialId}`,\n {\n method: \"PATCH\",\n body: JSON.stringify(payload),\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${aT}`,\n \"x-sdk-key\": this.sdkKey,\n },\n },\n );\n });\n\n const materialRes: SuccessRes<Material> | ErrorRes = await res.json();\n if (!res?.ok || !materialRes.success)\n throw new Error(\n materialRes.message ?? `SSO-SDK: Material update failed.`,\n );\n\n const { data } = materialRes;\n\n this.cb({\n type: c.actions.material_update,\n payload: data,\n });\n\n return data;\n };\n\n private readonly materialDelete = async (materialId: string) => {\n const res = await this.withRefresh(async (aT) => {\n return await fetch(\n `${this.ssoServerUrl}/clothings/materials/${materialId}`,\n {\n method: \"DELETE\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${aT}`,\n \"x-sdk-key\": this.sdkKey,\n },\n },\n );\n });\n\n const materialRes: SuccessRes<Material> | ErrorRes = await res.json();\n\n if (!res?.ok || !materialRes.success)\n throw new Error(\n materialRes.message ?? `SSO-SDK: Material delete failed.`,\n );\n\n const { data } = materialRes;\n\n this.cb({\n type: c.actions.material_delete,\n payload: data,\n });\n\n return data;\n };\n\n // skulls\n private readonly skullAdd = async (payload: AddSkullFilePayload) => {\n const preview = await this.fileUpload(payload.filePreview);\n const model = await this.fileUpload(payload.file3d);\n\n if (!preview || !model) throw new Error(`SSO-SDK: File upload failed.`);\n\n const jsonPayload = {\n ...payload,\n previewUrl: preview,\n url3d: model,\n } satisfies AddSkullPayload;\n\n const res = await this.withRefresh(async (aT) => {\n return await fetch(`${this.ssoServerUrl}/skulls`, {\n method: \"POST\",\n body: JSON.stringify(jsonPayload),\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${aT}`,\n \"x-sdk-key\": this.sdkKey,\n },\n });\n });\n\n const skullRes: SuccessRes<Skull> | ErrorRes = await res.json();\n\n if (!res?.ok || !skullRes.success)\n throw new Error(skullRes.message ?? \"SSO-SDK: Skull add failed.\");\n\n const { data } = skullRes;\n\n this.cb({\n type: c.actions.skull_add,\n payload: data,\n });\n\n return data;\n };\n\n private readonly skullUpdate = async (\n skullId: string,\n payload: UpdateSkullPayload,\n ) => {\n const res = await this.withRefresh(async (aT) => {\n return await fetch(`${this.ssoServerUrl}/skulls/${skullId}`, {\n method: \"PATCH\",\n body: JSON.stringify(payload),\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${aT}`,\n \"x-sdk-key\": this.sdkKey,\n },\n });\n });\n\n const skullRes = (await res.json()) as SuccessRes<Skull> | ErrorRes;\n\n if (!res?.ok || !skullRes.success)\n throw new Error(skullRes.message ?? \"SSO-SDK: Skull update failed.\");\n\n const { data } = skullRes;\n\n this.cb({\n type: c.actions.skull_update,\n payload: data,\n });\n\n return data;\n };\n\n readonly skullGetAll = async () => {\n const res = await this.withRefresh(async (aT) => {\n return await fetch(`${this.ssoServerUrl}/skulls`, {\n method: \"GET\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${aT}`,\n \"x-sdk-key\": this.sdkKey,\n },\n });\n });\n\n const skullRes: SuccessRes<Skull[]> | ErrorRes = await res.json();\n\n if (!res?.ok || !skullRes.success)\n throw new Error(skullRes.message ?? \"SSO-SDK: Skull get all failed.\");\n\n const { data } = skullRes;\n\n this.cb({\n type: c.actions.skull_fetch_all,\n payload: data,\n });\n\n return data;\n };\n\n readonly skullGetById = async (skullId: string) => {\n const res = await this.withRefresh(async (aT) => {\n return await fetch(`${this.ssoServerUrl}/skulls/${skullId}`, {\n method: \"GET\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${aT}`,\n \"x-sdk-key\": this.sdkKey,\n },\n });\n });\n\n const skullRes: SuccessRes<Skull> | ErrorRes = await res.json();\n\n if (!res?.ok || !skullRes.success)\n throw new Error(skullRes.message ?? \"SSO-SDK: Skull get by id failed.\");\n\n const { data } = skullRes;\n\n this.cb({\n type: c.actions.skull_fetch,\n payload: data,\n });\n\n return data;\n };\n\n private readonly skullDelete = async (skullId: string) => {\n const res = await this.withRefresh(async (aT) => {\n return await fetch(`${this.ssoServerUrl}/skulls/${skullId}`, {\n method: \"DELETE\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${aT}`,\n \"x-sdk-key\": this.sdkKey,\n },\n });\n });\n\n const skullRes: SuccessRes<Skull> | ErrorRes = await res.json();\n\n if (!res?.ok || !skullRes.success)\n throw new Error(skullRes.message ?? \"SSO-SDK: Skull delete failed.\");\n\n const { data } = skullRes;\n\n this.cb({\n type: c.actions.skull_delete,\n payload: data,\n });\n\n return data;\n };\n\n // skull material\n private readonly skullMaterialAdd = async (\n payload: SkullMaterialAddFilePayload,\n ) => {\n const { file3d, previewFile, ...rest } = payload;\n const preview = await this.fileUpload(previewFile);\n const model = await this.fileUpload(file3d);\n\n if (!preview || !model) throw new Error(`SSO-SDK: File upload failed.`);\n\n const jsonPayload = {\n ...rest,\n previewUrl: preview,\n url3d: model,\n } satisfies SkullMaterialAddPayload;\n\n const res = await this.withRefresh(async (aT) => {\n return await fetch(`${this.ssoServerUrl}/skulls/materials`, {\n method: \"POST\",\n body: JSON.stringify(jsonPayload),\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${aT}`,\n \"x-sdk-key\": this.sdkKey,\n },\n });\n });\n\n const skullRes: SuccessRes<SkullMaterial> | ErrorRes = await res.json();\n\n if (!res?.ok || !skullRes.success)\n throw new Error(\n skullRes.message ?? \"SSO-SDK: Skull material add failed.\",\n );\n\n const { data } = skullRes;\n\n this.cb({\n type: c.actions.skull_material_add,\n payload: data,\n });\n\n return data;\n };\n\n readonly skullMaterialGetAll = async () => {\n const res = await this.withRefresh(async (aT) => {\n return await fetch(`${this.ssoServerUrl}/skulls/materials`, {\n method: \"GET\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${aT}`,\n \"x-sdk-key\": this.sdkKey,\n },\n });\n });\n\n const skullRes: SuccessRes<SkullMaterial[]> | ErrorRes = await res.json();\n\n if (!res?.ok || !skullRes.success)\n throw new Error(\n skullRes.message ?? \"SSO-SDK: Skull materials get all failed.\",\n );\n\n const { data } = skullRes;\n\n this.cb({\n type: c.actions.skull_material_fetch_all,\n payload: data,\n });\n\n return data;\n };\n\n readonly skullMaterialGetById = async (id: string) => {\n const res = await this.withRefresh(async (aT) => {\n return await fetch(`${this.ssoServerUrl}/skulls/materials/${id}`, {\n method: \"GET\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${aT}`,\n \"x-sdk-key\": this.sdkKey,\n },\n });\n });\n\n const skullRes: SuccessRes<SkullMaterial> | ErrorRes = await res.json();\n\n if (!res?.ok || !skullRes.success)\n throw new Error(\n skullRes.message ?? \"SSO-SDK: Skull material get by id failed.\",\n );\n\n const { data } = skullRes;\n\n this.cb({\n type: c.actions.skull_material_fetch,\n payload: data,\n });\n\n return data;\n };\n\n private readonly skullMaterialUpdate = async (\n id: string,\n payload: SkullMaterialUpdateFilePayload,\n ) => {\n const { file3d, previewFile, ...rest } = payload;\n const preview = previewFile && (await this.fileUpload(previewFile));\n const model = file3d && (await this.fileUpload(file3d));\n\n const jsonPayload = {\n ...rest,\n previewUrl: preview,\n url3d: model,\n } satisfies SkullMaterialUpdatePayload;\n\n const res = await this.withRefresh(async (aT) => {\n return await fetch(`${this.ssoServerUrl}/skulls/materials/${id}`, {\n method: \"PATCH\",\n body: JSON.stringify(jsonPayload),\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${aT}`,\n \"x-sdk-key\": this.sdkKey,\n },\n });\n });\n\n const skullRes: SuccessRes<SkullMaterial> | ErrorRes = await res.json();\n\n if (!res?.ok || !skullRes.success)\n throw new Error(\n skullRes.message ?? \"SSO-SDK: Skull material update failed.\",\n );\n\n const { data } = skullRes;\n\n this.cb({\n type: c.actions.skull_material_update,\n payload: data,\n });\n\n return data;\n };\n\n private readonly skullMaterialDelete = async (id: string) => {\n const res = await this.withRefresh(async (aT) => {\n return await fetch(`${this.ssoServerUrl}/skulls/materials/${id}`, {\n method: \"DELETE\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${aT}`,\n \"x-sdk-key\": this.sdkKey,\n },\n });\n });\n\n const skullRes: SuccessRes<SkullMaterial> | ErrorRes = await res.json();\n\n if (!res?.ok || !skullRes.success)\n throw new Error(\n skullRes.message ?? \"SSO-SDK: Skull material delete failed.\",\n );\n\n const { data } = skullRes;\n\n this.cb({\n type: c.actions.skull_material_delete,\n payload: data,\n });\n\n return data;\n };\n\n // body\n private readonly bodyAdd = async (payload: BodyAddFilePayload) => {\n const { file3d, previewFile, ...rest } = payload;\n const preview = await this.fileUpload(previewFile);\n const model = await this.fileUpload(file3d);\n\n if (!preview || !model) throw new Error(`SSO-SDK: File upload failed.`);\n\n const jsonPayload = {\n ...rest,\n previewUrl: preview,\n url3d: model,\n } satisfies BodyAddPayload;\n\n const res = await this.withRefresh(async (aT) => {\n return await fetch(`${this.ssoServerUrl}/bodies`, {\n method: \"POST\",\n body: JSON.stringify(jsonPayload),\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${aT}`,\n \"x-sdk-key\": this.sdkKey,\n },\n });\n });\n\n const bodyRes: SuccessRes<Body> | ErrorRes = await res.json();\n\n if (!res?.ok || !bodyRes.success)\n throw new Error(bodyRes.message ?? \"SSO-SDK: Body add failed.\");\n\n const { data } = bodyRes;\n\n this.cb({\n type: c.actions.body_add,\n payload: data,\n });\n\n return data;\n };\n\n readonly bodyGetAll = async () => {\n const res = await this.withRefresh(async (aT) => {\n return await fetch(`${this.ssoServerUrl}/bodies`, {\n method: \"GET\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${aT}`,\n \"x-sdk-key\": this.sdkKey,\n },\n });\n });\n\n const bodyRes: SuccessRes<Body[]> | ErrorRes = await res.json();\n\n if (!res?.ok || !bodyRes.success)\n throw new Error(bodyRes.message ?? \"SSO-SDK: Body add failed.\");\n\n const { data } = bodyRes;\n\n this.cb({\n type: c.actions.body_fetch_all,\n payload: data,\n });\n\n return data;\n };\n\n readonly bodyGetById = async (id: string) => {\n const res = await this.withRefresh(async (aT) => {\n return await fetch(`${this.ssoServerUrl}/bodies/${id}`, {\n method: \"GET\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${aT}`,\n \"x-sdk-key\": this.sdkKey,\n },\n });\n });\n\n const bodyRes: SuccessRes<Body> | ErrorRes = await res.json();\n\n if (!res?.ok || !bodyRes.success)\n throw new Error(bodyRes.message ?? \"SSO-SDK: Body add failed.\");\n\n const { data } = bodyRes;\n\n this.cb({\n type: c.actions.body_fetch,\n payload: data,\n });\n\n return data;\n };\n\n private readonly bodyUpdate = async (\n id: string,\n payload: BodyUpdateFilePayload,\n ) => {\n const { file3d, previewFile, ...rest } = payload;\n const preview = previewFile && (await this.fileUpload(previewFile));\n const model = file3d && (await this.fileUpload(file3d));\n\n const jsonPayload = {\n ...rest,\n previewUrl: preview,\n url3d: model,\n } satisfies BodyUpdatePayload;\n\n const res = await this.withRefresh(async (aT) => {\n return await fetch(`${this.ssoServerUrl}/bodies/${id}`, {\n method: \"PATCH\",\n body: JSON.stringify(jsonPayload),\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${aT}`,\n \"x-sdk-key\": this.sdkKey,\n },\n });\n });\n\n const bodyRes: SuccessRes<Body> | ErrorRes = await res.json();\n\n if (!res?.ok || !bodyRes.success)\n throw new Error(bodyRes.message ?? \"SSO-SDK: Body add failed.\");\n\n const { data } = bodyRes;\n\n this.cb({\n type: c.actions.body_update,\n payload: data,\n });\n\n return data;\n };\n\n private readonly bodyDelete = async (id: string) => {\n const res = await this.withRefresh(async (aT) => {\n return await fetch(`${this.ssoServerUrl}/bodies/${id}`, {\n method: \"DELETE\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${aT}`,\n \"x-sdk-key\": this.sdkKey,\n },\n });\n });\n\n const bodyRes: SuccessRes<Body> | ErrorRes = await res.json();\n\n if (!res?.ok || !bodyRes.success)\n throw new Error(bodyRes.message ?? \"SSO-SDK: Body add failed.\");\n\n const { data } = bodyRes;\n\n this.cb({\n type: c.actions.body_delete,\n payload: data,\n });\n\n return data;\n };\n\n private validatedUrl = (url: string) => {\n try {\n return new URL(url).href;\n } catch {\n throw new Error(`SSO-SDK: Invalid URL.`);\n }\n };\n\n private emailVerificationQuery = ({\n redirectUri,\n type,\n }: {\n redirectUri?: string;\n type?: \"otp\";\n }) => {\n const params = new URLSearchParams();\n\n if (redirectUri) params.set(\"redirectUri\", this.validatedUrl(redirectUri));\n if (type) params.set(\"type\", type);\n\n const query = params.toString();\n\n return query ? `?${query}` : \"\";\n };\n\n private throwIfNotBrowser = () => {\n if (!isBrowser()) throw new Error(\"SSO-SDK: Not in browser.\");\n };\n\n /**\n * get user from indexedDB without validating tokens.\n */\n readonly getLocalUser = async () => {\n const dbUser = (await this.db.getById(this.dbId)) as DBRes | undefined;\n\n if (!dbUser) throw new Error(`SSO-SDK: No user found in IndexedDB.`);\n\n return dbUser;\n };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/lib/database.ts","../src/config/environment.ts","../src/config/index.ts","../src/lib/CustomStorage.ts","../src/lib/utils.ts","../src/main.ts"],"names":["db","ssoClientUrl","ssoServerUrl","r"],"mappings":"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","file":"main.js","sourcesContent":["export default class Database {\n constructor(\n private readonly config: {\n dbName: string;\n dbVersion: number;\n storeName: string;\n },\n ) {}\n\n open = (): Promise<IDBDatabase> => {\n return new Promise((resolve, reject) => {\n const request = indexedDB.open(this.config.dbName, this.config.dbVersion);\n\n request.onerror = () => reject(request.error);\n\n request.onupgradeneeded = () => {\n const db = request.result;\n\n if (!db.objectStoreNames.contains(this.config.storeName))\n db.createObjectStore(this.config.storeName, {\n keyPath: \"id\",\n });\n };\n\n request.onsuccess = () => resolve(request.result);\n });\n };\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n create = async (user: { id: string; [key: string]: any }) => {\n const db = await this.open();\n\n return new Promise((resolve, reject) => {\n const tx = db.transaction(this.config.storeName, \"readwrite\");\n const store = tx.objectStore(this.config.storeName);\n\n const request = store.add(user);\n\n request.onsuccess = () => resolve(user);\n request.onerror = () => reject(request.error);\n });\n };\n\n getById = async <T = unknown>(id: string): Promise<T | null> => {\n const db = await this.open();\n\n return new Promise((resolve, reject) => {\n const tx = db.transaction(this.config.storeName, \"readonly\");\n const store = tx.objectStore(this.config.storeName);\n\n const request = store.get(id) ?? null;\n\n request.onsuccess = () => resolve(request.result as T);\n request.onerror = () => reject(request.error);\n });\n };\n\n getAll = async () => {\n const db = await this.open();\n\n return new Promise((resolve, reject) => {\n const tx = db.transaction(this.config.storeName, \"readonly\");\n const store = tx.objectStore(this.config.storeName);\n\n const request = store.getAll();\n\n request.onsuccess = () => resolve(request.result);\n request.onerror = () => reject(request.error);\n });\n };\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n update = async (id: string, updates: Partial<Record<string, any>>) => {\n const db = await this.open();\n\n return new Promise((resolve, reject) => {\n const tx = db.transaction(this.config.storeName, \"readwrite\");\n const store = tx.objectStore(this.config.storeName);\n\n const getReq = store.get(id);\n\n getReq.onerror = () => reject(getReq.error);\n\n getReq.onsuccess = () => {\n if (!getReq.result) {\n reject(new Error(\"User not found\"));\n return;\n }\n\n const updatedUser = {\n ...getReq.result,\n ...updates,\n };\n\n const putReq = store.put(updatedUser);\n\n putReq.onsuccess = () => resolve(updatedUser);\n putReq.onerror = () => reject(putReq.error);\n };\n });\n };\n\n delete = async (id: string) => {\n const db = await this.open();\n\n return new Promise((resolve, reject) => {\n const tx = db.transaction(this.config.storeName, \"readwrite\");\n const store = tx.objectStore(this.config.storeName);\n\n const request = store.delete(id);\n\n request.onsuccess = () => resolve(true);\n request.onerror = () => reject(request.error);\n });\n };\n\n reset = async () => {\n const db = await this.open();\n\n return new Promise((resolve, reject) => {\n const tx = db.transaction(this.config.storeName, \"readwrite\");\n const store = tx.objectStore(this.config.storeName);\n\n const request = store.clear();\n\n request.onsuccess = () => resolve(true);\n request.onerror = () => reject(request.error);\n });\n };\n}\n","/**\n * URLs baked in at build time by tsup — see tsup.config.ts.\n * `process.env.*` refs here are compile-time string replacements, not runtime lookups.\n */\ndeclare const process: {\n env: {\n SSO_CLIENT_URL: string;\n SSO_SERVER_URL: string;\n };\n};\n\nexport const ssoClientUrl: string = process.env.SSO_CLIENT_URL;\nexport const ssoServerUrl: string = process.env.SSO_SERVER_URL;\n","import Database from \"../lib/database\";\nimport { Actions } from \"../types\";\nimport * as environment from \"./environment\";\n\nexport const db = new Database({\n dbName: \"sso-sdk\",\n dbVersion: 1,\n storeName: \"credentials\",\n});\n\nexport const ssoClientUrl = environment?.ssoClientUrl;\nexport const ssoServerUrl = environment?.ssoServerUrl;\n\nexport const actions = {\n local_login: \"local-login\",\n local_register: \"local-register\",\n local_logout: \"local-logout\",\n local_exchange: \"local-exchange\",\n sso_exchange: \"sso-exchange\",\n logout: \"logout\",\n session_cleared: \"session-cleared\",\n refresh: \"refresh\",\n profile_fetch: \"profile.fetch\",\n profile_update: \"profile.update\",\n profile_photo_update: \"profile-photo.update\",\n cloth_add: \"cloth.add\",\n cloth_fetch_all: \"cloth.fetch-all\",\n cloth_fetch: \"cloth.fetch\",\n cloth_update: \"cloth.update\",\n cloth_delete: \"cloth.delete\",\n material_add: \"material.add\",\n material_fetch_all: \"material.fetch-all\",\n material_fetch: \"material.fetch\",\n material_update: \"material.update\",\n material_delete: \"material.delete\",\n skull_add: \"skull.add\",\n skull_update: \"skull.update\",\n skull_fetch_all: \"skull.fetch-all\",\n skull_fetch: \"skull.fetch\",\n skull_delete: \"skull.delete\",\n skull_material_add: \"skull-material.add\",\n skull_material_fetch_all: \"skull-material.fetch-all\",\n skull_material_fetch: \"skull-material.fetch\",\n skull_material_update: \"skull-material.update\",\n skull_material_delete: \"skull-material.delete\",\n body_add: \"body.add\",\n body_fetch_all: \"body.fetch-all\",\n body_fetch: \"body.fetch\",\n body_update: \"body.update\",\n body_delete: \"body.delete\",\n} satisfies Record<string, Actions[\"type\"]>;\n","interface StorageDriver {\n get(key: string): string | null;\n set(key: string, value: string): void;\n remove(key: string): void;\n}\n\nexport default class CustomStorage {\n constructor(private readonly storage: StorageDriver) {}\n\n open = async () => this.storage;\n\n create = async <T extends { id: string }>(user: T) => {\n this.storage.set(user.id, JSON.stringify(user));\n\n return user;\n };\n\n getById = async <T = unknown>(id: string): Promise<T | null> => {\n const item = this.storage.get(id);\n\n if (!item) return null;\n\n return JSON.parse(item) as T;\n };\n\n getAll = async () => {\n return [];\n };\n\n update = async <T extends Record<string, unknown>>(\n id: string,\n updates: Partial<T>,\n ) => {\n const item = await this.getById<T>(id);\n\n if (!item) throw new Error(\"User not found\");\n\n const updatedItem = {\n ...item,\n ...updates,\n };\n\n this.storage.set(id, JSON.stringify(updatedItem));\n\n return updatedItem;\n };\n\n delete = async (id: string) => {\n this.storage.remove(id);\n\n return true;\n };\n\n reset = async () => {\n this.storage.remove(\"local-user\");\n\n return true;\n };\n}\n","export const isBrowser = () => typeof window !== \"undefined\";\n","import * as c from \"./config\";\nimport CustomStorage from \"./lib/CustomStorage\";\nimport Database from \"./lib/database\";\nimport { isBrowser } from \"./lib/utils\";\nimport {\n AddClothFilePayload,\n AddClothPayload,\n AddMaterialFilePayload,\n AddMaterialPayload,\n AddSkullFilePayload,\n AddSkullPayload,\n Body,\n BodyAddFilePayload,\n BodyAddPayload,\n BodyUpdateFilePayload,\n BodyUpdatePayload,\n Cb,\n Cloth,\n Config,\n DBRes,\n ErrorRes,\n Exchange,\n GetClothsOptions,\n GetMaterialsOptions,\n LocalRegister,\n LocalRegisterPayload,\n LoginPayload,\n Material,\n Profile,\n RefreshTokenPayload,\n RefToken,\n SignedUrl,\n Skull,\n SkullMaterial,\n SkullMaterialAddFilePayload,\n SkullMaterialAddPayload,\n SkullMaterialUpdateFilePayload,\n SkullMaterialUpdatePayload,\n SuccessRes,\n UpdateClothPayload,\n UpdateMaterialPayload,\n UpdateProfilePayload,\n UpdateProfilePicture,\n UpdateProfilePicturePayload,\n UpdateSkullPayload,\n Verify,\n VerifyOtpPayload,\n} from \"./types\";\n\nexport type * from \"./types\";\n\nexport { default as CustomStorage } from \"./lib/CustomStorage\";\n\nexport default class SSO {\n readonly serviceType = \"AVATAR_SSO\";\n protected readonly db: Database | CustomStorage;\n protected ssoClientUrl = c.ssoClientUrl;\n protected ssoServerUrl = c.ssoServerUrl;\n readonly sdkKey: string;\n readonly dbId = \"local-user\";\n private callbacks = new Set<Cb>();\n private cb: Cb = (payload) => {\n for (const cb of this.callbacks) cb(payload);\n };\n\n constructor(private readonly config: Config) {\n this.sdkKey = config.sdkKey ?? \"no-sdk-key\";\n this.db = config.storage instanceof CustomStorage ? config.storage : c.db;\n this.ssoClientUrl = config.clientUrl ?? c.ssoClientUrl;\n this.ssoServerUrl = config.serverUrl ?? c.ssoServerUrl;\n }\n\n readonly register = async (\n payload: LocalRegisterPayload,\n ): Promise<LocalRegister> => {\n const { redirectUri, type, ...body } = payload;\n const queryParams = this.emailVerificationQuery({ redirectUri, type });\n\n const res = await fetch(`${this.ssoServerUrl}/users/signup${queryParams}`, {\n method: \"POST\",\n body: JSON.stringify(body),\n headers: {\n \"Content-Type\": \"application/json\",\n \"x-sdk-key\": this.sdkKey,\n },\n });\n const json = (await res.json()) as SuccessRes<LocalRegister> | ErrorRes;\n\n if (!res?.ok || !json.success)\n throw new Error(json.message ?? \"SSO-SDK: Local register failed.\");\n\n this.cb({\n type: c.actions.local_register,\n payload: json.data,\n });\n\n return json.data;\n };\n\n private readonly localLogin = async (payload: LoginPayload) => {\n if (!(payload instanceof Object)) return;\n\n const { redirectUri, type, ...body } = payload;\n const queryParams = this.emailVerificationQuery({ redirectUri, type });\n\n const res = await fetch(`${this.ssoServerUrl}/users/signin${queryParams}`, {\n method: \"POST\",\n body: JSON.stringify(body),\n headers: {\n \"Content-Type\": \"application/json\",\n \"x-sdk-key\": this.sdkKey,\n },\n });\n\n const json: SuccessRes | ErrorRes = await res.json();\n\n if (!res?.ok || !json.success)\n throw new Error(json.message ?? \"SSO-SDK: Local login failed.\");\n\n this.cb({\n type: c.actions.local_login,\n payload: null,\n });\n };\n private readonly ssoLogin = async (redirectUrl: LoginPayload) => {\n if (redirectUrl instanceof Object) return;\n\n this.throwIfNotBrowser();\n\n const r = `${this.ssoClientUrl}/sso?sdkKey=${this.sdkKey}&redirectUri=${redirectUrl}`;\n\n window.location.href = r;\n };\n /**\n * Login function that triggers both local and SSO login flows. If the payload is a string, it will trigger the SSO login flow with the payload as the redirect URL. If the payload is an object, it will trigger the local login flow with the payload as the login data.\n * @param payload just redirect URL string for SSO login or LocalLoginPayload for local login\n * @returns\n */\n readonly login = async (payload: LoginPayload) => {\n await Promise.all([this.localLogin(payload), this.ssoLogin(payload)]);\n };\n\n private readonly decodeJwtPayload = <T>(token: string) => {\n try {\n const payload = token.split(\".\")[1];\n if (!payload) return null;\n\n const base64 = payload.replace(/-/g, \"+\").replace(/_/g, \"/\");\n\n return JSON.parse(atob(base64)) as T;\n } catch {\n return null;\n }\n };\n\n /**\n * - it throws.\n */\n private readonly autoRefresh = async () => {\n const existingUser = await this.getLocalUser().catch(() => null);\n\n if (!existingUser) return null;\n\n const { accessToken, refreshToken } = existingUser.tokens;\n\n const decodedRT = this.decodeJwtPayload<RefreshTokenPayload>(refreshToken);\n const decodedAT = this.decodeJwtPayload<RefreshTokenPayload>(accessToken);\n\n const date = new Date();\n\n const isValidRefToken =\n decodedRT?.exp && decodedAT?.exp && date.getTime() < decodedRT.exp * 1000;\n\n if (!isValidRefToken) {\n await this.db.reset();\n throw new Error(`SSO-SDK: Session cleared. Please login again.`);\n } else {\n date.setMinutes(date.getMinutes() + 5); // check if it expires in the next 5 minutes\n const shouldRefresh =\n decodedAT?.exp && date.getTime() > decodedAT.exp * 1000;\n\n if (!shouldRefresh) return existingUser.tokens;\n\n return await this.refresh();\n }\n };\n\n private readonly localExchange = async (\n email: string | null,\n token: string | null,\n ): Promise<Exchange | void> => {\n if (!email || !token) return;\n\n const res = await fetch(`${this.ssoServerUrl}/users/verify`, {\n method: \"POST\",\n body: JSON.stringify({\n token,\n email,\n }),\n headers: {\n \"Content-Type\": \"application/json\",\n \"x-sdk-key\": this.sdkKey,\n },\n });\n\n const verifyRes: SuccessRes<Verify> | ErrorRes = await res.json();\n\n if (!res.ok || !verifyRes.success)\n throw new Error(verifyRes.message ?? `SSO-SDK: Local exchange failed.`);\n\n const profileRes = await fetch(`${this.ssoServerUrl}/users/profile`, {\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${verifyRes.data.tokens.accessToken}`,\n \"x-sdk-key\": this.sdkKey,\n },\n });\n\n const profileJson: SuccessRes<Profile> | ErrorRes = await profileRes.json();\n\n if (!profileRes.ok || !profileJson.success)\n throw new Error(profileJson.message ?? `SSO-SDK: Profile fetch failed.`);\n\n await this.db.open();\n\n await this.db.delete(this.dbId);\n\n await this.db.create({\n ...profileJson.data,\n userId: profileJson.data.id,\n tokens: verifyRes.data.tokens,\n id: this.dbId,\n });\n\n this.cb({\n type: c.actions.local_exchange,\n payload: profileJson.data,\n });\n\n return { ...profileJson.data, tokens: verifyRes.data.tokens };\n };\n\n readonly verifyOtp = async (payload: VerifyOtpPayload) => {\n await this.db.reset();\n\n const email = payload.email.trim().toLowerCase();\n const otpCode = payload.otpCode.trim();\n\n if (!email || !otpCode) throw new Error(`SSO-SDK: Invalid OTP payload.`);\n\n const res = await this.localExchange(email, otpCode);\n\n if (!res) throw new Error(`SSO-SDK: OTP verification failed.`);\n\n return res;\n };\n private readonly ssoExchange = async (\n email: string | null,\n token: string | null,\n ): Promise<Exchange | void> => {\n if (email || !token) return;\n\n const res = await fetch(`${this.ssoServerUrl}/sso/exchange`, {\n method: \"POST\",\n body: JSON.stringify({\n token,\n sdkKey: this.sdkKey,\n }),\n headers: {\n \"Content-Type\": \"application/json\",\n \"x-sdk-key\": this.sdkKey,\n },\n });\n\n const data: SuccessRes<{\n tokens: {\n accessToken: string;\n refreshToken: string;\n };\n }> = await res.json();\n\n if (!res.ok)\n throw new Error(data.message ?? `SSO-SDK: SSO exchange failed.`);\n\n const profileRes = await fetch(`${this.ssoServerUrl}/users/profile`, {\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${data.data.tokens.accessToken}`,\n \"x-sdk-key\": this.sdkKey,\n },\n });\n\n const profileJson: SuccessRes<Profile> | ErrorRes = await profileRes.json();\n\n if (!profileRes.ok || !profileJson.success)\n throw new Error(profileJson.message ?? `SSO-SDK: Profile fetch failed.`);\n\n await this.db.open();\n\n await this.db.delete(this.dbId);\n\n await this.db.create({\n ...profileJson.data,\n userId: profileJson.data.id,\n tokens: data.data.tokens,\n id: this.dbId,\n });\n\n this.cb({\n type: c.actions.sso_exchange,\n payload: profileJson.data,\n });\n\n return { ...profileJson.data, tokens: data.data.tokens };\n };\n /**\n * - this will just skip the exchange returning null if the query params are not correct and won't throw an error.\n */\n readonly exchange = async () => {\n this.throwIfNotBrowser();\n\n const url = new URL(window.location.href);\n const email = url.searchParams.get(\"email\");\n const token = url.searchParams.get(\"token\");\n\n const isExchanging = !!(email && token);\n\n if (isExchanging) {\n url.searchParams.delete(\"email\");\n url.searchParams.delete(\"token\");\n window.history.replaceState({}, \"\", url);\n }\n\n const tokenReused = await this.autoRefresh().catch((e) => {\n if (/session cleared/i.test(e?.message ?? \"\") && !isExchanging) {\n this.cb({\n type: c.actions.session_cleared,\n payload: null,\n });\n }\n\n if (!isExchanging)\n throw new Error(e?.message ?? `SSO-SDK: Auto refresh failed.`);\n\n return null;\n });\n\n if (tokenReused && isExchanging)\n throw new Error(`SSO-SDK: User already logged in.`);\n\n if (!isExchanging) return null;\n\n await this.db.reset(); // reset the db before exchange to avoid conflicts\n\n const sanitizedEmail = email\n ? email.trim().toLowerCase().replace(/\\s+/g, \"+\")\n : null;\n\n const res = await Promise.all([\n this.localExchange(sanitizedEmail, token),\n this.ssoExchange(sanitizedEmail, token),\n ]).then((r) => r.find((r2) => !!r2));\n\n if (!res) throw new Error(`SSO-SDK: Exchange failed.`);\n\n return res;\n };\n\n readonly fetchProfile = async () => {\n const res = await this.withRefresh(async (aT) => {\n return await fetch(`${this.ssoServerUrl}/users/profile`, {\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${aT}`,\n \"x-sdk-key\": this.sdkKey,\n },\n });\n });\n\n const pRes: SuccessRes<Profile> | ErrorRes = await res.json();\n\n if (!res?.ok || !pRes.success)\n throw new Error(pRes.message ?? `SSO-SDK: Profile fetch failed.`);\n\n this.cb({\n type: c.actions.profile_fetch,\n payload: pRes.data,\n });\n\n return pRes.data;\n };\n\n readonly refresh = async () => {\n const dbUser = (await this.db.getById(this.dbId)) as DBRes | undefined;\n\n if (!dbUser) throw new Error(`SSO-SDK: No user found in IndexedDB.`);\n\n const res = await fetch(`${this.ssoServerUrl}/users/refresh`, {\n method: \"POST\",\n body: JSON.stringify({\n token: dbUser.tokens.refreshToken,\n }),\n headers: {\n \"Content-Type\": \"application/json\",\n \"x-sdk-key\": this.sdkKey,\n },\n });\n\n const refTokeRes: SuccessRes<RefToken> | ErrorRes = await res.json();\n\n if (!res.ok || !refTokeRes.success) {\n this.db.delete(this.dbId);\n this.cb({\n type: c.actions.session_cleared,\n payload: null,\n });\n throw new Error(refTokeRes.message ?? `SSO-SDK: Refresh failed.`);\n }\n\n await this.db.update(this.dbId, {\n ...dbUser,\n tokens: {\n accessToken: refTokeRes.data.accessToken,\n refreshToken: refTokeRes.data.refreshToken,\n },\n });\n\n this.cb({\n type: c.actions.refresh,\n payload: refTokeRes.data,\n });\n\n return refTokeRes.data;\n };\n\n private readonly localLogout = async (redirectUrl?: string) => {\n if (redirectUrl) return;\n\n const res = await this.withRefresh(async (aT) => {\n return await fetch(`${this.ssoServerUrl}/users/logout`, {\n method: \"DELETE\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${aT}`,\n \"x-sdk-key\": this.sdkKey,\n },\n });\n });\n\n const json: SuccessRes | ErrorRes = await res.json();\n\n if (!res?.ok || !json.success)\n throw new Error(json.message ?? `SSO-SDK: Local logout failed.`);\n\n await this.db.delete(this.dbId);\n\n this.cb({\n type: c.actions.local_logout,\n payload: null,\n });\n\n return true;\n };\n private readonly ssoLogout = async (redirectUrl?: string) => {\n if (!redirectUrl) return;\n\n this.throwIfNotBrowser();\n\n const url = this.validatedUrl(redirectUrl);\n\n const res = await this.withRefresh(async (aT) => {\n return await fetch(`${this.ssoServerUrl}/users/logout`, {\n method: \"DELETE\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${aT}`,\n \"x-sdk-key\": this.sdkKey,\n },\n });\n });\n\n const json: SuccessRes | ErrorRes = await res.json();\n\n if (!res?.ok || !json.success)\n throw new Error(json.message ?? `SSO-SDK: Logout failed.`);\n\n await this.db.delete(this.dbId);\n\n const goToUrl = `${this.ssoClientUrl}/logout?redirectUri=${url}`;\n location.href = goToUrl;\n\n this.cb({\n type: c.actions.logout,\n payload: null,\n });\n\n return true;\n };\n /**\n * - If a redirect URL is provided, it will trigger the SSO logout flow and redirect the user to the provided URL after logout.\n * - If no redirect URL is provided, it will trigger the local logout flow and clear the user data from IndexedDB.\n */\n readonly logout = async (redirectUrl?: string): Promise<Boolean> => {\n const res = await Promise.all([\n this.localLogout(redirectUrl),\n this.ssoLogout(redirectUrl),\n ]).then((r) => r.find((r) => r !== undefined));\n\n if (!res) throw new Error(\"SSO-SDK: Logout failed.\");\n\n this.cb({\n type: c.actions.session_cleared,\n payload: null,\n });\n\n return res;\n };\n\n readonly onEvents = (cb: Cb) => {\n this.callbacks.add(cb);\n return () => this.callbacks.delete(cb);\n };\n\n protected readonly withRefresh = async (\n api: (aT: string) => Promise<Response>,\n ) => {\n await this.db.open();\n const dbUser = (await this.db.getById(this.dbId)) as DBRes | undefined;\n\n if (!dbUser) throw new Error(`SSO-SDK: No user found in IndexedDB.`);\n\n const r = await api(dbUser.tokens.accessToken);\n\n if (r.status !== 401) return r;\n\n const resToken = await this.refresh();\n\n const nR = await api(resToken.accessToken);\n\n return nR;\n };\n\n readonly profileUpdate = async (payload: UpdateProfilePayload) => {\n const res = await this.withRefresh(async (aT) => {\n return await fetch(`${this.ssoServerUrl}/users/profile`, {\n method: \"PATCH\",\n body: JSON.stringify(payload),\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${aT}`,\n \"x-sdk-key\": this.sdkKey,\n },\n });\n });\n\n const pRes: SuccessRes<Profile> | ErrorRes = await res.json();\n if (!res?.ok || !pRes.success)\n throw new Error(pRes.message ?? `SSO-SDK: Profile update failed.`);\n\n const { id, ...rest } = pRes.data;\n\n await this.db.update(this.dbId, {\n ...rest,\n userId: id,\n });\n\n this.cb({\n type: c.actions.profile_update,\n payload: pRes.data,\n });\n\n return pRes.data;\n };\n\n readonly avatarUpdate = async (file: File) => {\n const photoURL = await this.fileUpload(file);\n\n if (!photoURL) throw new Error(`SSO-SDK: File upload failed.`);\n\n const res = await this.withRefresh(async (aT) => {\n return await fetch(`${this.ssoServerUrl}/users/profile/avatar`, {\n method: \"PUT\",\n body: JSON.stringify({\n photoURL,\n } satisfies UpdateProfilePicturePayload),\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${aT}`,\n \"x-sdk-key\": this.sdkKey,\n },\n });\n });\n\n const pRes: SuccessRes<UpdateProfilePicture> | ErrorRes = await res.json();\n\n if (!res?.ok || !pRes.success)\n throw new Error(pRes.message ?? `SSO-SDK: Profile update failed.`);\n\n const { id, ...rest } = pRes.data;\n\n await this.db.update(this.dbId, {\n ...rest,\n userId: id,\n });\n\n this.cb({\n type: c.actions.profile_photo_update,\n payload: pRes.data,\n });\n\n return pRes.data;\n };\n\n private readonly fileUpload = async (file: File) => {\n const { type } = file;\n\n const url = await this.withRefresh(async (aT) => {\n return await fetch(`${this.ssoServerUrl}/uploads/url?fileType=${type}`, {\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${aT}`,\n \"x-sdk-key\": this.sdkKey,\n },\n });\n });\n\n const json: SuccessRes<SignedUrl> | ErrorRes = await url.json();\n if (!url?.ok || !json.success)\n throw new Error(json.message ?? `SSO-SDK: could not get upload url.`);\n\n const upload = await fetch(json.data.url, {\n method: json.data.method,\n body: file,\n headers: json.data.headers,\n });\n\n if (!upload.ok) throw new Error(`SSO-SDK: could not upload file.`);\n\n const { origin, pathname } = new URL(json.data.url);\n\n return `${origin}${pathname}`;\n };\n\n private readonly clothAdd = async (payload: AddClothFilePayload) => {\n const thumb = await this.fileUpload(payload.thumb);\n if (!thumb) throw new Error(`SSO-SDK: File upload failed.`);\n\n const jsonPayload = {\n ...payload,\n thumb,\n } satisfies AddClothPayload;\n\n await this.db.open();\n\n const dbUser = (await this.db.getById(this.dbId)) as DBRes | undefined;\n\n if (!dbUser) throw new Error(`SSO-SDK: No user found in IndexedDB.`);\n\n const res = await this.withRefresh(async (aT) => {\n return await fetch(`${this.ssoServerUrl}/clothings`, {\n method: \"POST\",\n body: JSON.stringify(jsonPayload),\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${aT || dbUser.tokens.accessToken}`,\n \"x-sdk-key\": this.sdkKey,\n },\n });\n });\n\n const bodyRes: SuccessRes<Cloth> | ErrorRes = await res.json();\n if (!res?.ok || !bodyRes.success)\n throw new Error(bodyRes.message ?? `SSO-SDK: Cloth add failed.`);\n\n const { data } = bodyRes;\n\n this.cb({\n type: c.actions.cloth_add,\n payload: data,\n });\n\n return data;\n };\n\n readonly clothGetAll = async (options?: GetClothsOptions) => {\n const queryParams = new URLSearchParams({\n skip: Math.ceil(options?.skip ?? 0).toString(),\n limit: Math.ceil(options?.limit ?? 10).toString(),\n sort: options?.sort ?? \"asc\",\n });\n\n const res = await this.withRefresh(async (aT) => {\n return await fetch(\n `${this.ssoServerUrl}/clothings?${queryParams.toString()}`,\n {\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${aT}`,\n \"x-sdk-key\": this.sdkKey,\n },\n },\n );\n });\n\n const clothRes: SuccessRes<Cloth[]> | ErrorRes = await res.json();\n if (!res?.ok || !clothRes.success)\n throw new Error(clothRes.message ?? `SSO-SDK: Get all cloths failed.`);\n\n this.cb({\n type: c.actions.cloth_fetch_all,\n payload: clothRes.data,\n });\n\n return clothRes.data;\n };\n\n readonly clothGetById = async (clothId: string) => {\n const res = await this.withRefresh(async (aT) => {\n return await fetch(`${this.ssoServerUrl}/clothings/${clothId}`, {\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${aT}`,\n \"x-sdk-key\": this.sdkKey,\n },\n });\n });\n\n const clothRes: SuccessRes<Cloth> | ErrorRes = await res.json();\n\n if (!res?.ok || !clothRes.success)\n throw new Error(clothRes.message ?? `SSO-SDK: Get cloth by id failed.`);\n\n this.cb({\n type: c.actions.cloth_fetch,\n payload: clothRes.data,\n });\n\n return clothRes.data;\n };\n\n private readonly clothUpdate = async (\n clothId: string,\n payload: UpdateClothPayload,\n ) => {\n const res = await this.withRefresh(async (aT) => {\n return await fetch(`${this.ssoServerUrl}/clothings/${clothId}`, {\n method: \"PATCH\",\n body: JSON.stringify(payload),\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${aT}`,\n \"x-sdk-key\": this.sdkKey,\n },\n });\n });\n\n const clothRes: SuccessRes<Cloth> | ErrorRes = await res.json();\n\n if (!res?.ok || !clothRes.success)\n throw new Error(clothRes.message ?? `SSO-SDK: Cloth update failed.`);\n\n const { data } = clothRes;\n\n this.cb({\n type: c.actions.cloth_update,\n payload: data,\n });\n\n return data;\n };\n\n private readonly clothDelete = async (clothId: string) => {\n await this.db.open();\n\n const dbUser = (await this.db.getById(this.dbId)) as DBRes | undefined;\n\n if (!dbUser) throw new Error(`SSO-SDK: No user found in IndexedDB.`);\n\n const res = await this.withRefresh(async (aT) => {\n return await fetch(`${this.ssoServerUrl}/clothings/${clothId}`, {\n method: \"DELETE\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${aT || dbUser.tokens.accessToken}`,\n \"x-sdk-key\": this.sdkKey,\n },\n });\n });\n\n const clothRes: SuccessRes<Cloth> | ErrorRes = await res.json();\n\n if (!res?.ok || !clothRes.success)\n throw new Error(clothRes.message ?? `SSO-SDK: Cloth delete failed.`);\n\n this.cb({\n type: c.actions.cloth_delete,\n payload: clothRes.data,\n });\n\n return clothRes.data;\n };\n\n // materials\n private readonly materialAdd = async (payload: AddMaterialFilePayload) => {\n const thumb = await this.fileUpload(payload.thumb);\n if (!thumb) throw new Error(`SSO-SDK: File upload failed.`);\n\n const jsonPayload = {\n ...payload,\n thumb: thumb,\n } satisfies AddMaterialPayload;\n\n const res = await this.withRefresh(async (aT) => {\n return await fetch(`${this.ssoServerUrl}/clothings/materials`, {\n method: \"POST\",\n body: JSON.stringify(jsonPayload),\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${aT}`,\n \"x-sdk-key\": this.sdkKey,\n },\n });\n });\n\n const materialRes: SuccessRes<Material> | ErrorRes = await res.json();\n\n if (!res?.ok || !materialRes.success)\n throw new Error(materialRes.message ?? `SSO-SDK: Material add failed.`);\n\n const { data } = materialRes;\n\n this.cb({\n type: c.actions.material_add,\n payload: data,\n });\n\n return data;\n };\n\n readonly materialGetAll = async (options?: GetMaterialsOptions) => {\n const params = new URLSearchParams({\n skip: options?.skip?.toString() || \"0\",\n limit: options?.limit?.toString() || \"10\",\n sort: options?.sort || \"asc\",\n });\n\n const res = await this.withRefresh(async (aT) => {\n return await fetch(`${this.ssoServerUrl}/clothings/materials?${params}`, {\n method: \"GET\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${aT}`,\n \"x-sdk-key\": this.sdkKey,\n },\n });\n });\n\n const materialRes: SuccessRes<Material[]> | ErrorRes = await res.json();\n\n if (!res?.ok || !materialRes.success)\n throw new Error(\n materialRes.message ?? `SSO-SDK: Material fetch all failed.`,\n );\n\n const { data } = materialRes;\n\n this.cb({\n type: c.actions.material_fetch_all,\n payload: data,\n });\n\n return data;\n };\n\n readonly materialGetById = async (materialId: string) => {\n const res = await this.withRefresh(async (aT) => {\n return await fetch(\n `${this.ssoServerUrl}/clothings/materials/${materialId}`,\n {\n method: \"GET\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${aT}`,\n \"x-sdk-key\": this.sdkKey,\n },\n },\n );\n });\n\n const materialRes: SuccessRes<Material> | ErrorRes = await res.json();\n\n if (!res?.ok || !materialRes.success)\n throw new Error(\n materialRes.message ?? `SSO-SDK: Material fetch by id failed.`,\n );\n\n const { data } = materialRes;\n\n this.cb({\n type: c.actions.material_fetch,\n payload: data,\n });\n\n return data;\n };\n\n private readonly materialUpdate = async (\n materialId: string,\n payload: UpdateMaterialPayload,\n ) => {\n const res = await this.withRefresh(async (aT) => {\n return await fetch(\n `${this.ssoServerUrl}/clothings/materials/${materialId}`,\n {\n method: \"PATCH\",\n body: JSON.stringify(payload),\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${aT}`,\n \"x-sdk-key\": this.sdkKey,\n },\n },\n );\n });\n\n const materialRes: SuccessRes<Material> | ErrorRes = await res.json();\n if (!res?.ok || !materialRes.success)\n throw new Error(\n materialRes.message ?? `SSO-SDK: Material update failed.`,\n );\n\n const { data } = materialRes;\n\n this.cb({\n type: c.actions.material_update,\n payload: data,\n });\n\n return data;\n };\n\n private readonly materialDelete = async (materialId: string) => {\n const res = await this.withRefresh(async (aT) => {\n return await fetch(\n `${this.ssoServerUrl}/clothings/materials/${materialId}`,\n {\n method: \"DELETE\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${aT}`,\n \"x-sdk-key\": this.sdkKey,\n },\n },\n );\n });\n\n const materialRes: SuccessRes<Material> | ErrorRes = await res.json();\n\n if (!res?.ok || !materialRes.success)\n throw new Error(\n materialRes.message ?? `SSO-SDK: Material delete failed.`,\n );\n\n const { data } = materialRes;\n\n this.cb({\n type: c.actions.material_delete,\n payload: data,\n });\n\n return data;\n };\n\n // skulls\n private readonly skullAdd = async (payload: AddSkullFilePayload) => {\n const preview = await this.fileUpload(payload.filePreview);\n const model = await this.fileUpload(payload.file3d);\n\n if (!preview || !model) throw new Error(`SSO-SDK: File upload failed.`);\n\n const jsonPayload = {\n ...payload,\n previewUrl: preview,\n url3d: model,\n } satisfies AddSkullPayload;\n\n const res = await this.withRefresh(async (aT) => {\n return await fetch(`${this.ssoServerUrl}/skulls`, {\n method: \"POST\",\n body: JSON.stringify(jsonPayload),\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${aT}`,\n \"x-sdk-key\": this.sdkKey,\n },\n });\n });\n\n const skullRes: SuccessRes<Skull> | ErrorRes = await res.json();\n\n if (!res?.ok || !skullRes.success)\n throw new Error(skullRes.message ?? \"SSO-SDK: Skull add failed.\");\n\n const { data } = skullRes;\n\n this.cb({\n type: c.actions.skull_add,\n payload: data,\n });\n\n return data;\n };\n\n private readonly skullUpdate = async (\n skullId: string,\n payload: UpdateSkullPayload,\n ) => {\n const res = await this.withRefresh(async (aT) => {\n return await fetch(`${this.ssoServerUrl}/skulls/${skullId}`, {\n method: \"PATCH\",\n body: JSON.stringify(payload),\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${aT}`,\n \"x-sdk-key\": this.sdkKey,\n },\n });\n });\n\n const skullRes = (await res.json()) as SuccessRes<Skull> | ErrorRes;\n\n if (!res?.ok || !skullRes.success)\n throw new Error(skullRes.message ?? \"SSO-SDK: Skull update failed.\");\n\n const { data } = skullRes;\n\n this.cb({\n type: c.actions.skull_update,\n payload: data,\n });\n\n return data;\n };\n\n readonly skullGetAll = async () => {\n const res = await this.withRefresh(async (aT) => {\n return await fetch(`${this.ssoServerUrl}/skulls`, {\n method: \"GET\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${aT}`,\n \"x-sdk-key\": this.sdkKey,\n },\n });\n });\n\n const skullRes: SuccessRes<Skull[]> | ErrorRes = await res.json();\n\n if (!res?.ok || !skullRes.success)\n throw new Error(skullRes.message ?? \"SSO-SDK: Skull get all failed.\");\n\n const { data } = skullRes;\n\n this.cb({\n type: c.actions.skull_fetch_all,\n payload: data,\n });\n\n return data;\n };\n\n readonly skullGetById = async (skullId: string) => {\n const res = await this.withRefresh(async (aT) => {\n return await fetch(`${this.ssoServerUrl}/skulls/${skullId}`, {\n method: \"GET\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${aT}`,\n \"x-sdk-key\": this.sdkKey,\n },\n });\n });\n\n const skullRes: SuccessRes<Skull> | ErrorRes = await res.json();\n\n if (!res?.ok || !skullRes.success)\n throw new Error(skullRes.message ?? \"SSO-SDK: Skull get by id failed.\");\n\n const { data } = skullRes;\n\n this.cb({\n type: c.actions.skull_fetch,\n payload: data,\n });\n\n return data;\n };\n\n private readonly skullDelete = async (skullId: string) => {\n const res = await this.withRefresh(async (aT) => {\n return await fetch(`${this.ssoServerUrl}/skulls/${skullId}`, {\n method: \"DELETE\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${aT}`,\n \"x-sdk-key\": this.sdkKey,\n },\n });\n });\n\n const skullRes: SuccessRes<Skull> | ErrorRes = await res.json();\n\n if (!res?.ok || !skullRes.success)\n throw new Error(skullRes.message ?? \"SSO-SDK: Skull delete failed.\");\n\n const { data } = skullRes;\n\n this.cb({\n type: c.actions.skull_delete,\n payload: data,\n });\n\n return data;\n };\n\n // skull material\n private readonly skullMaterialAdd = async (\n payload: SkullMaterialAddFilePayload,\n ) => {\n const { file3d, previewFile, ...rest } = payload;\n const preview = await this.fileUpload(previewFile);\n const model = await this.fileUpload(file3d);\n\n if (!preview || !model) throw new Error(`SSO-SDK: File upload failed.`);\n\n const jsonPayload = {\n ...rest,\n previewUrl: preview,\n url3d: model,\n } satisfies SkullMaterialAddPayload;\n\n const res = await this.withRefresh(async (aT) => {\n return await fetch(`${this.ssoServerUrl}/skulls/materials`, {\n method: \"POST\",\n body: JSON.stringify(jsonPayload),\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${aT}`,\n \"x-sdk-key\": this.sdkKey,\n },\n });\n });\n\n const skullRes: SuccessRes<SkullMaterial> | ErrorRes = await res.json();\n\n if (!res?.ok || !skullRes.success)\n throw new Error(\n skullRes.message ?? \"SSO-SDK: Skull material add failed.\",\n );\n\n const { data } = skullRes;\n\n this.cb({\n type: c.actions.skull_material_add,\n payload: data,\n });\n\n return data;\n };\n\n readonly skullMaterialGetAll = async () => {\n const res = await this.withRefresh(async (aT) => {\n return await fetch(`${this.ssoServerUrl}/skulls/materials`, {\n method: \"GET\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${aT}`,\n \"x-sdk-key\": this.sdkKey,\n },\n });\n });\n\n const skullRes: SuccessRes<SkullMaterial[]> | ErrorRes = await res.json();\n\n if (!res?.ok || !skullRes.success)\n throw new Error(\n skullRes.message ?? \"SSO-SDK: Skull materials get all failed.\",\n );\n\n const { data } = skullRes;\n\n this.cb({\n type: c.actions.skull_material_fetch_all,\n payload: data,\n });\n\n return data;\n };\n\n readonly skullMaterialGetById = async (id: string) => {\n const res = await this.withRefresh(async (aT) => {\n return await fetch(`${this.ssoServerUrl}/skulls/materials/${id}`, {\n method: \"GET\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${aT}`,\n \"x-sdk-key\": this.sdkKey,\n },\n });\n });\n\n const skullRes: SuccessRes<SkullMaterial> | ErrorRes = await res.json();\n\n if (!res?.ok || !skullRes.success)\n throw new Error(\n skullRes.message ?? \"SSO-SDK: Skull material get by id failed.\",\n );\n\n const { data } = skullRes;\n\n this.cb({\n type: c.actions.skull_material_fetch,\n payload: data,\n });\n\n return data;\n };\n\n private readonly skullMaterialUpdate = async (\n id: string,\n payload: SkullMaterialUpdateFilePayload,\n ) => {\n const { file3d, previewFile, ...rest } = payload;\n const preview = previewFile && (await this.fileUpload(previewFile));\n const model = file3d && (await this.fileUpload(file3d));\n\n const jsonPayload = {\n ...rest,\n previewUrl: preview,\n url3d: model,\n } satisfies SkullMaterialUpdatePayload;\n\n const res = await this.withRefresh(async (aT) => {\n return await fetch(`${this.ssoServerUrl}/skulls/materials/${id}`, {\n method: \"PATCH\",\n body: JSON.stringify(jsonPayload),\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${aT}`,\n \"x-sdk-key\": this.sdkKey,\n },\n });\n });\n\n const skullRes: SuccessRes<SkullMaterial> | ErrorRes = await res.json();\n\n if (!res?.ok || !skullRes.success)\n throw new Error(\n skullRes.message ?? \"SSO-SDK: Skull material update failed.\",\n );\n\n const { data } = skullRes;\n\n this.cb({\n type: c.actions.skull_material_update,\n payload: data,\n });\n\n return data;\n };\n\n private readonly skullMaterialDelete = async (id: string) => {\n const res = await this.withRefresh(async (aT) => {\n return await fetch(`${this.ssoServerUrl}/skulls/materials/${id}`, {\n method: \"DELETE\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${aT}`,\n \"x-sdk-key\": this.sdkKey,\n },\n });\n });\n\n const skullRes: SuccessRes<SkullMaterial> | ErrorRes = await res.json();\n\n if (!res?.ok || !skullRes.success)\n throw new Error(\n skullRes.message ?? \"SSO-SDK: Skull material delete failed.\",\n );\n\n const { data } = skullRes;\n\n this.cb({\n type: c.actions.skull_material_delete,\n payload: data,\n });\n\n return data;\n };\n\n // body\n private readonly bodyAdd = async (payload: BodyAddFilePayload) => {\n const { file3d, previewFile, ...rest } = payload;\n const preview = await this.fileUpload(previewFile);\n const model = await this.fileUpload(file3d);\n\n if (!preview || !model) throw new Error(`SSO-SDK: File upload failed.`);\n\n const jsonPayload = {\n ...rest,\n previewUrl: preview,\n url3d: model,\n } satisfies BodyAddPayload;\n\n const res = await this.withRefresh(async (aT) => {\n return await fetch(`${this.ssoServerUrl}/bodies`, {\n method: \"POST\",\n body: JSON.stringify(jsonPayload),\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${aT}`,\n \"x-sdk-key\": this.sdkKey,\n },\n });\n });\n\n const bodyRes: SuccessRes<Body> | ErrorRes = await res.json();\n\n if (!res?.ok || !bodyRes.success)\n throw new Error(bodyRes.message ?? \"SSO-SDK: Body add failed.\");\n\n const { data } = bodyRes;\n\n this.cb({\n type: c.actions.body_add,\n payload: data,\n });\n\n return data;\n };\n\n readonly bodyGetAll = async () => {\n const res = await this.withRefresh(async (aT) => {\n return await fetch(`${this.ssoServerUrl}/bodies`, {\n method: \"GET\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${aT}`,\n \"x-sdk-key\": this.sdkKey,\n },\n });\n });\n\n const bodyRes: SuccessRes<Body[]> | ErrorRes = await res.json();\n\n if (!res?.ok || !bodyRes.success)\n throw new Error(bodyRes.message ?? \"SSO-SDK: Body add failed.\");\n\n const { data } = bodyRes;\n\n this.cb({\n type: c.actions.body_fetch_all,\n payload: data,\n });\n\n return data;\n };\n\n readonly bodyGetById = async (id: string) => {\n const res = await this.withRefresh(async (aT) => {\n return await fetch(`${this.ssoServerUrl}/bodies/${id}`, {\n method: \"GET\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${aT}`,\n \"x-sdk-key\": this.sdkKey,\n },\n });\n });\n\n const bodyRes: SuccessRes<Body> | ErrorRes = await res.json();\n\n if (!res?.ok || !bodyRes.success)\n throw new Error(bodyRes.message ?? \"SSO-SDK: Body add failed.\");\n\n const { data } = bodyRes;\n\n this.cb({\n type: c.actions.body_fetch,\n payload: data,\n });\n\n return data;\n };\n\n private readonly bodyUpdate = async (\n id: string,\n payload: BodyUpdateFilePayload,\n ) => {\n const { file3d, previewFile, ...rest } = payload;\n const preview = previewFile && (await this.fileUpload(previewFile));\n const model = file3d && (await this.fileUpload(file3d));\n\n const jsonPayload = {\n ...rest,\n previewUrl: preview,\n url3d: model,\n } satisfies BodyUpdatePayload;\n\n const res = await this.withRefresh(async (aT) => {\n return await fetch(`${this.ssoServerUrl}/bodies/${id}`, {\n method: \"PATCH\",\n body: JSON.stringify(jsonPayload),\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${aT}`,\n \"x-sdk-key\": this.sdkKey,\n },\n });\n });\n\n const bodyRes: SuccessRes<Body> | ErrorRes = await res.json();\n\n if (!res?.ok || !bodyRes.success)\n throw new Error(bodyRes.message ?? \"SSO-SDK: Body add failed.\");\n\n const { data } = bodyRes;\n\n this.cb({\n type: c.actions.body_update,\n payload: data,\n });\n\n return data;\n };\n\n private readonly bodyDelete = async (id: string) => {\n const res = await this.withRefresh(async (aT) => {\n return await fetch(`${this.ssoServerUrl}/bodies/${id}`, {\n method: \"DELETE\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${aT}`,\n \"x-sdk-key\": this.sdkKey,\n },\n });\n });\n\n const bodyRes: SuccessRes<Body> | ErrorRes = await res.json();\n\n if (!res?.ok || !bodyRes.success)\n throw new Error(bodyRes.message ?? \"SSO-SDK: Body add failed.\");\n\n const { data } = bodyRes;\n\n this.cb({\n type: c.actions.body_delete,\n payload: data,\n });\n\n return data;\n };\n\n private validatedUrl = (url: string) => {\n try {\n return new URL(url).href;\n } catch {\n throw new Error(`SSO-SDK: Invalid URL.`);\n }\n };\n\n private emailVerificationQuery = ({\n redirectUri,\n type,\n }: {\n redirectUri?: string;\n type?: \"otp\";\n }) => {\n const params = new URLSearchParams();\n\n if (redirectUri) params.set(\"redirectUri\", this.validatedUrl(redirectUri));\n if (type) params.set(\"type\", type);\n\n const query = params.toString();\n\n return query ? `?${query}` : \"\";\n };\n\n private throwIfNotBrowser = () => {\n if (!isBrowser()) throw new Error(\"SSO-SDK: Not in browser.\");\n };\n\n /**\n * get user from indexedDB without validating tokens.\n */\n readonly getLocalUser = async () => {\n const dbUser = (await this.db.getById(this.dbId)) as DBRes | undefined;\n\n if (!dbUser) throw new Error(`SSO-SDK: No user found in IndexedDB.`);\n\n return dbUser;\n };\n}\n"]}
|
package/package.json
CHANGED