@palbase/web 4.0.0 → 4.0.2
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/_mls-wasm.cjs +32 -0
- package/dist/_mls-wasm.cjs.map +1 -0
- package/dist/_mls-wasm.js +11 -0
- package/dist/_mls-wasm.js.map +1 -0
- package/dist/{analytics-facade-DwOtlXPP.d.cts → analytics-facade-CaluA4bW.d.cts} +26 -1
- package/dist/{analytics-facade-Nk6J9Ncm.d.ts → analytics-facade-Cp3d4QI-.d.ts} +26 -1
- package/dist/{chunk-S7NAY3MW.js → chunk-CFDU23TB.js} +3 -10
- package/dist/chunk-CFDU23TB.js.map +1 -0
- package/dist/chunk-PZ5AY32C.js +10 -0
- package/dist/chunk-PZ5AY32C.js.map +1 -0
- package/dist/{chunk-NP4NIY7A.js → chunk-TW6YN354.js} +84 -27
- package/dist/chunk-TW6YN354.js.map +1 -0
- package/dist/gen/cli.cjs +5 -5
- package/dist/gen/cli.cjs.map +1 -1
- package/dist/gen/cli.js +6 -5
- package/dist/gen/cli.js.map +1 -1
- package/dist/index.cjs +91 -27
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +3 -3
- package/dist/index.d.ts +3 -3
- package/dist/index.js +3 -2
- package/dist/internal.cjs +90 -26
- package/dist/internal.cjs.map +1 -1
- package/dist/internal.d.cts +3 -3
- package/dist/internal.d.ts +3 -3
- package/dist/internal.js +3 -2
- package/dist/next/client.cjs +90 -26
- package/dist/next/client.cjs.map +1 -1
- package/dist/next/client.js +3 -2
- package/dist/next/client.js.map +1 -1
- package/dist/next/index.cjs +81 -27
- package/dist/next/index.cjs.map +1 -1
- package/dist/next/index.d.cts +2 -2
- package/dist/next/index.d.ts +2 -2
- package/dist/next/index.js +3 -2
- package/dist/next/index.js.map +1 -1
- package/dist/{pb-FG_nV7NR.d.ts → pb-DUK5qy81.d.ts} +1 -1
- package/dist/{pb-C9v5dEO6.d.cts → pb-DvV6ftmf.d.cts} +1 -1
- package/dist/react/index.cjs +10 -2
- package/dist/react/index.cjs.map +1 -1
- package/dist/react/index.d.cts +1 -1
- package/dist/react/index.d.ts +1 -1
- package/dist/react/index.js +3 -2
- package/dist/react/index.js.map +1 -1
- package/package.json +10 -3
- package/dist/chunk-NP4NIY7A.js.map +0 -1
- package/dist/chunk-S7NAY3MW.js.map +0 -1
- package/dist/pkg/palbe_mls_bg.wasm +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/messaging/wasm/asset.ts"],"sourcesContent":["import encodedWasm from './pkg/palbe_mls_bg.wasm';\n\n// Built as a private package-import target. Keeping the bytes in their own\n// lazily imported JavaScript module lets browser bundlers carry/split the MLS\n// engine without a public-path convention, while Node ESM and CJS resolve the\n// exact same package-owned bytes.\nexport default encodedWasm;\n"],"mappings":";;;;;;AAMA,IAAO,gBAAQ;","names":[]}
|
|
@@ -1663,7 +1663,13 @@ type AuthChangeEvent = {
|
|
|
1663
1663
|
user: AuthUser;
|
|
1664
1664
|
} | {
|
|
1665
1665
|
type: 'signedOut';
|
|
1666
|
-
|
|
1666
|
+
/**
|
|
1667
|
+
* `userInitiated` — pb.auth.signOut(); `sessionExpired` — a refresh
|
|
1668
|
+
* ultimately failed; `accountDeleted` — this device ran deleteAccount();
|
|
1669
|
+
* `sessionInvalid` — a server-side session kill (erased/revoked subject)
|
|
1670
|
+
* was observed on a request and the client tore down reactively.
|
|
1671
|
+
*/
|
|
1672
|
+
reason: 'userInitiated' | 'sessionExpired' | 'accountDeleted' | 'sessionInvalid';
|
|
1667
1673
|
} | {
|
|
1668
1674
|
type: 'tokenRefreshed';
|
|
1669
1675
|
};
|
|
@@ -1672,6 +1678,7 @@ declare class PalbeAuth {
|
|
|
1672
1678
|
private readonly rt;
|
|
1673
1679
|
private cachedUser;
|
|
1674
1680
|
private signingOut;
|
|
1681
|
+
private nextSignOutReason;
|
|
1675
1682
|
private signingIn;
|
|
1676
1683
|
private signedInState;
|
|
1677
1684
|
private hydratingUser;
|
|
@@ -1690,6 +1697,24 @@ declare class PalbeAuth {
|
|
|
1690
1697
|
password: string;
|
|
1691
1698
|
}): Promise<AuthSuccess>;
|
|
1692
1699
|
signOut(): Promise<void>;
|
|
1700
|
+
/**
|
|
1701
|
+
* Self-service account erasure ("right to be forgotten"). Calls palauth
|
|
1702
|
+
* `DELETE /auth/user` (session-authed + fresh re-auth): password users pass
|
|
1703
|
+
* `{ password }`; passwordless/OAuth users rely on a freshly stepped-up
|
|
1704
|
+
* session. On 202 the erasure workflow is durably queued AND every session is
|
|
1705
|
+
* already revoked server-side — so we tear down local state (mirroring
|
|
1706
|
+
* `signOut()`'s clear, minus the pointless `/logout`) and emit
|
|
1707
|
+
* `signedOut{reason:'accountDeleted'}`.
|
|
1708
|
+
*
|
|
1709
|
+
* On 401 `reauth_required` / 503 `not_configured` (or `erasure_unavailable`)
|
|
1710
|
+
* the request throws BEFORE the teardown line, so the local session is left
|
|
1711
|
+
* fully intact — the deletion did not happen and the user is still signed in.
|
|
1712
|
+
*/
|
|
1713
|
+
deleteAccount(params?: {
|
|
1714
|
+
password?: string;
|
|
1715
|
+
}): Promise<{
|
|
1716
|
+
erasureId: string;
|
|
1717
|
+
}>;
|
|
1693
1718
|
getUser(): Promise<AuthUser>;
|
|
1694
1719
|
refreshUser(): Promise<AuthUser>;
|
|
1695
1720
|
/**
|
|
@@ -1663,7 +1663,13 @@ type AuthChangeEvent = {
|
|
|
1663
1663
|
user: AuthUser;
|
|
1664
1664
|
} | {
|
|
1665
1665
|
type: 'signedOut';
|
|
1666
|
-
|
|
1666
|
+
/**
|
|
1667
|
+
* `userInitiated` — pb.auth.signOut(); `sessionExpired` — a refresh
|
|
1668
|
+
* ultimately failed; `accountDeleted` — this device ran deleteAccount();
|
|
1669
|
+
* `sessionInvalid` — a server-side session kill (erased/revoked subject)
|
|
1670
|
+
* was observed on a request and the client tore down reactively.
|
|
1671
|
+
*/
|
|
1672
|
+
reason: 'userInitiated' | 'sessionExpired' | 'accountDeleted' | 'sessionInvalid';
|
|
1667
1673
|
} | {
|
|
1668
1674
|
type: 'tokenRefreshed';
|
|
1669
1675
|
};
|
|
@@ -1672,6 +1678,7 @@ declare class PalbeAuth {
|
|
|
1672
1678
|
private readonly rt;
|
|
1673
1679
|
private cachedUser;
|
|
1674
1680
|
private signingOut;
|
|
1681
|
+
private nextSignOutReason;
|
|
1675
1682
|
private signingIn;
|
|
1676
1683
|
private signedInState;
|
|
1677
1684
|
private hydratingUser;
|
|
@@ -1690,6 +1697,24 @@ declare class PalbeAuth {
|
|
|
1690
1697
|
password: string;
|
|
1691
1698
|
}): Promise<AuthSuccess>;
|
|
1692
1699
|
signOut(): Promise<void>;
|
|
1700
|
+
/**
|
|
1701
|
+
* Self-service account erasure ("right to be forgotten"). Calls palauth
|
|
1702
|
+
* `DELETE /auth/user` (session-authed + fresh re-auth): password users pass
|
|
1703
|
+
* `{ password }`; passwordless/OAuth users rely on a freshly stepped-up
|
|
1704
|
+
* session. On 202 the erasure workflow is durably queued AND every session is
|
|
1705
|
+
* already revoked server-side — so we tear down local state (mirroring
|
|
1706
|
+
* `signOut()`'s clear, minus the pointless `/logout`) and emit
|
|
1707
|
+
* `signedOut{reason:'accountDeleted'}`.
|
|
1708
|
+
*
|
|
1709
|
+
* On 401 `reauth_required` / 503 `not_configured` (or `erasure_unavailable`)
|
|
1710
|
+
* the request throws BEFORE the teardown line, so the local session is left
|
|
1711
|
+
* fully intact — the deletion did not happen and the user is still signed in.
|
|
1712
|
+
*/
|
|
1713
|
+
deleteAccount(params?: {
|
|
1714
|
+
password?: string;
|
|
1715
|
+
}): Promise<{
|
|
1716
|
+
erasureId: string;
|
|
1717
|
+
}>;
|
|
1693
1718
|
getUser(): Promise<AuthUser>;
|
|
1694
1719
|
refreshUser(): Promise<AuthUser>;
|
|
1695
1720
|
/**
|
|
@@ -1,12 +1,6 @@
|
|
|
1
|
-
var __defProp = Object.defineProperty;
|
|
2
|
-
var __export = (target, all) => {
|
|
3
|
-
for (var name in all)
|
|
4
|
-
__defProp(target, name, { get: all[name], enumerable: true });
|
|
5
|
-
};
|
|
6
|
-
|
|
7
1
|
// src/api-key.ts
|
|
8
|
-
var API_KEY_RE = /^pb_([a-z0-9]
|
|
9
|
-
var PUBLISHABLE_API_KEY_RE = /^pb_([a-z0-9]
|
|
2
|
+
var API_KEY_RE = /^pb_([a-z0-9]{4,24})_[cs][A-Za-z0-9]{20}$/;
|
|
3
|
+
var PUBLISHABLE_API_KEY_RE = /^pb_([a-z0-9]{4,24})_c[A-Za-z0-9]{20}$/;
|
|
10
4
|
function environmentRefFromApiKey(apiKey) {
|
|
11
5
|
const m = API_KEY_RE.exec(apiKey);
|
|
12
6
|
return m ? m[1] ?? "" : "";
|
|
@@ -17,8 +11,7 @@ function environmentRefFromPublishableApiKey(apiKey) {
|
|
|
17
11
|
}
|
|
18
12
|
|
|
19
13
|
export {
|
|
20
|
-
__export,
|
|
21
14
|
environmentRefFromApiKey,
|
|
22
15
|
environmentRefFromPublishableApiKey
|
|
23
16
|
};
|
|
24
|
-
//# sourceMappingURL=chunk-
|
|
17
|
+
//# sourceMappingURL=chunk-CFDU23TB.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/api-key.ts"],"sourcesContent":["/**\n * `pb_<environmentRef>_<scope><random>` → environmentRef ('' if malformed).\n * Utility for callers that only have a raw key. App-bound runtime storage and\n * palbe/next cookie naming use the explicit `PalbeConfig.environmentRef` emitted\n * by `palbe-gen`.\n *\n * The key is shape-validated (prefix `pb`, a 4-24 character lowercase ASCII\n * alphanumeric environmentRef, and a `<scope><20-base62-random>` secret segment\n * where scope ∈ {c,s}) before a ref is returned. A structurally-invalid key returns\n * '' so session storage stays\n * UNSCOPED rather than getting bound to a partially-parsed ref — a loose parse\n * (e.g. `pb_victim_cXX`) must not scope persisted sessions to `victim` and\n * hydrate a session belonging to a different, real key. The backend remains the\n * authority that rejects a bad key on the first request; this keeps the client's\n * local session-storage scoping honest. (Audit finding apikey-ref-mismatch.)\n */\nconst API_KEY_RE = /^pb_([a-z0-9]{4,24})_[cs][A-Za-z0-9]{20}$/;\nconst PUBLISHABLE_API_KEY_RE = /^pb_([a-z0-9]{4,24})_c[A-Za-z0-9]{20}$/;\n\nexport function environmentRefFromApiKey(apiKey: string): string {\n const m = API_KEY_RE.exec(apiKey);\n return m ? (m[1] ?? '') : '';\n}\n\n/** Internal app-runtime parser: browser config accepts publishable keys only. */\nexport function environmentRefFromPublishableApiKey(apiKey: string): string {\n const match = PUBLISHABLE_API_KEY_RE.exec(apiKey);\n return match ? (match[1] ?? '') : '';\n}\n"],"mappings":";AAgBA,IAAM,aAAa;AACnB,IAAM,yBAAyB;AAExB,SAAS,yBAAyB,QAAwB;AAC/D,QAAM,IAAI,WAAW,KAAK,MAAM;AAChC,SAAO,IAAK,EAAE,CAAC,KAAK,KAAM;AAC5B;AAGO,SAAS,oCAAoC,QAAwB;AAC1E,QAAM,QAAQ,uBAAuB,KAAK,MAAM;AAChD,SAAO,QAAS,MAAM,CAAC,KAAK,KAAM;AACpC;","names":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
|
-
__export,
|
|
3
2
|
environmentRefFromPublishableApiKey
|
|
4
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-CFDU23TB.js";
|
|
4
|
+
import {
|
|
5
|
+
__export
|
|
6
|
+
} from "./chunk-PZ5AY32C.js";
|
|
5
7
|
|
|
6
8
|
// ../core/dist/index.js
|
|
7
9
|
var CACHE_TTL_MS = 5 * 60 * 1e3;
|
|
@@ -18,7 +20,7 @@ var PalbaseError = class extends Error {
|
|
|
18
20
|
}
|
|
19
21
|
};
|
|
20
22
|
var PALBASE_DEFAULT_HOST = "api.palbase.studio";
|
|
21
|
-
var API_KEY_RE = /^pb_([a-z0-9]
|
|
23
|
+
var API_KEY_RE = /^pb_([a-z0-9]{4,24})_c[A-Za-z0-9]{20}$/;
|
|
22
24
|
function parseEnvironmentRef(apiKey) {
|
|
23
25
|
return API_KEY_RE.exec(apiKey)?.[1] ?? null;
|
|
24
26
|
}
|
|
@@ -395,6 +397,11 @@ var PERF_EXCLUDED_PREFIX = "/v1/analytics/";
|
|
|
395
397
|
function isSelfTraced(path) {
|
|
396
398
|
return path.startsWith(PERF_EXCLUDED_PREFIX);
|
|
397
399
|
}
|
|
400
|
+
function isSessionKilled(status, code) {
|
|
401
|
+
if (status === 401) return code === "session_revoked";
|
|
402
|
+
if (status === 403) return code === "subject_fenced" || code === "subject_erased";
|
|
403
|
+
return false;
|
|
404
|
+
}
|
|
398
405
|
function nowMs() {
|
|
399
406
|
return typeof performance !== "undefined" && typeof performance.now === "function" ? performance.now() : Date.now();
|
|
400
407
|
}
|
|
@@ -430,7 +437,7 @@ async function palbeRequest(rt, method, path, spec = {}) {
|
|
|
430
437
|
let res;
|
|
431
438
|
try {
|
|
432
439
|
res = await attempt();
|
|
433
|
-
if (res.error?.status === 401 && rt.tokenManager.getRefreshToken() && rt.tokenManager.refreshFunction) {
|
|
440
|
+
if (res.error?.status === 401 && res.error.code !== "session_revoked" && rt.tokenManager.getRefreshToken() && rt.tokenManager.refreshFunction) {
|
|
434
441
|
try {
|
|
435
442
|
await rt.tokenManager.refreshSession();
|
|
436
443
|
} catch (refreshErr) {
|
|
@@ -450,6 +457,9 @@ async function palbeRequest(rt, method, path, spec = {}) {
|
|
|
450
457
|
if (!isAbort(e)) record(asPalbaseError(e)?.status ?? 0);
|
|
451
458
|
throw e;
|
|
452
459
|
}
|
|
460
|
+
if (res.error && isSessionKilled(res.error.status, res.error.code)) {
|
|
461
|
+
rt.auth.reactiveTeardown();
|
|
462
|
+
}
|
|
453
463
|
record(res.error?.status ?? 200);
|
|
454
464
|
return unwrap(res);
|
|
455
465
|
}
|
|
@@ -1424,7 +1434,8 @@ var PalbeAuth = class {
|
|
|
1424
1434
|
if (!this.signedInState) return;
|
|
1425
1435
|
this.signedInState = false;
|
|
1426
1436
|
this.cachedUser = null;
|
|
1427
|
-
const reason = this.signingOut ? "userInitiated" : "sessionExpired";
|
|
1437
|
+
const reason = this.nextSignOutReason ?? (this.signingOut ? "userInitiated" : "sessionExpired");
|
|
1438
|
+
this.nextSignOutReason = null;
|
|
1428
1439
|
this.emitState({ status: "signedOut" });
|
|
1429
1440
|
this.emitEvent({ type: "signedOut", reason });
|
|
1430
1441
|
} else if (event === "TOKEN_REFRESHED") {
|
|
@@ -1437,6 +1448,10 @@ var PalbeAuth = class {
|
|
|
1437
1448
|
rt;
|
|
1438
1449
|
cachedUser = null;
|
|
1439
1450
|
signingOut = false;
|
|
1451
|
+
// Explicit signedOut reason pinned for the NEXT session clear (deleteAccount /
|
|
1452
|
+
// reactiveTeardown set it before clearSession; the SIGNED_OUT handler consumes
|
|
1453
|
+
// it exactly once, then resets to null → normal signOut/expiry split resumes).
|
|
1454
|
+
nextSignOutReason = null;
|
|
1440
1455
|
signingIn = false;
|
|
1441
1456
|
// suppresses AuthClient's TOKEN_REFRESHED during re-signIn
|
|
1442
1457
|
signedInState = false;
|
|
@@ -1484,6 +1499,45 @@ var PalbeAuth = class {
|
|
|
1484
1499
|
this.cachedUser = null;
|
|
1485
1500
|
}
|
|
1486
1501
|
}
|
|
1502
|
+
/**
|
|
1503
|
+
* Self-service account erasure ("right to be forgotten"). Calls palauth
|
|
1504
|
+
* `DELETE /auth/user` (session-authed + fresh re-auth): password users pass
|
|
1505
|
+
* `{ password }`; passwordless/OAuth users rely on a freshly stepped-up
|
|
1506
|
+
* session. On 202 the erasure workflow is durably queued AND every session is
|
|
1507
|
+
* already revoked server-side — so we tear down local state (mirroring
|
|
1508
|
+
* `signOut()`'s clear, minus the pointless `/logout`) and emit
|
|
1509
|
+
* `signedOut{reason:'accountDeleted'}`.
|
|
1510
|
+
*
|
|
1511
|
+
* On 401 `reauth_required` / 503 `not_configured` (or `erasure_unavailable`)
|
|
1512
|
+
* the request throws BEFORE the teardown line, so the local session is left
|
|
1513
|
+
* fully intact — the deletion did not happen and the user is still signed in.
|
|
1514
|
+
*/
|
|
1515
|
+
async deleteAccount(params = {}) {
|
|
1516
|
+
const res = await palbeRequest(this.rt, "DELETE", "/auth/user", {
|
|
1517
|
+
body: params.password ? { password: params.password } : {}
|
|
1518
|
+
});
|
|
1519
|
+
this.nextSignOutReason = "accountDeleted";
|
|
1520
|
+
this.rt.tokenManager.clearSession();
|
|
1521
|
+
this.rt.storage.clear();
|
|
1522
|
+
this.cachedUser = null;
|
|
1523
|
+
return { erasureId: res.erasure_id };
|
|
1524
|
+
}
|
|
1525
|
+
/**
|
|
1526
|
+
* @internal — invoked by the transport choke point (`request.ts`), not app code.
|
|
1527
|
+
* Reactive teardown when the server reports the session is gone: a 403
|
|
1528
|
+
* `subject_fenced`/`subject_erased` (subject being erased) or a 401
|
|
1529
|
+
* `session_revoked`. Clears local state and emits
|
|
1530
|
+
* `signedOut{reason:'sessionInvalid'}` exactly once (deduped by
|
|
1531
|
+
* `signedInState`). An ordinary 403 authz denial does NOT reach here —
|
|
1532
|
+
* `request.ts` matches only the exact session-kill codes.
|
|
1533
|
+
*/
|
|
1534
|
+
reactiveTeardown() {
|
|
1535
|
+
if (!this.signedInState) return;
|
|
1536
|
+
this.nextSignOutReason = "sessionInvalid";
|
|
1537
|
+
this.rt.tokenManager.clearSession();
|
|
1538
|
+
this.rt.storage.clear();
|
|
1539
|
+
this.cachedUser = null;
|
|
1540
|
+
}
|
|
1487
1541
|
async getUser() {
|
|
1488
1542
|
const raw = await palbeRequest(this.rt, "GET", "/auth/user");
|
|
1489
1543
|
return mapWireUser(raw);
|
|
@@ -6432,26 +6486,25 @@ var GLUE_MODULE = "./palbe_mls_bg.js";
|
|
|
6432
6486
|
var SNIPPET_MODULE = "./snippets/mls-rs-core-f99cdecbb456b09c/inline0.js";
|
|
6433
6487
|
var inflight = null;
|
|
6434
6488
|
var ready = null;
|
|
6435
|
-
|
|
6436
|
-
|
|
6437
|
-
|
|
6438
|
-
const fsSpecifier = ["node", "fs/promises"].join(":");
|
|
6439
|
-
const { readFile } = await import(
|
|
6440
|
-
/* webpackIgnore: true */
|
|
6441
|
-
fsSpecifier
|
|
6442
|
-
);
|
|
6443
|
-
const bytes = await readFile(wasmUrl);
|
|
6444
|
-
return WebAssembly.compile(bytes);
|
|
6489
|
+
function decodeBase64(encoded) {
|
|
6490
|
+
if (typeof encoded !== "string" || encoded.length === 0 || typeof globalThis.atob !== "function") {
|
|
6491
|
+
throw new Error("palbe-mls WASM asset is invalid");
|
|
6445
6492
|
}
|
|
6446
|
-
|
|
6447
|
-
|
|
6448
|
-
|
|
6449
|
-
|
|
6450
|
-
|
|
6451
|
-
|
|
6493
|
+
let binary;
|
|
6494
|
+
try {
|
|
6495
|
+
binary = globalThis.atob(encoded);
|
|
6496
|
+
} catch {
|
|
6497
|
+
throw new Error("palbe-mls WASM asset is invalid");
|
|
6498
|
+
}
|
|
6499
|
+
const bytes = new Uint8Array(binary.length);
|
|
6500
|
+
for (let index = 0; index < binary.length; index += 1) {
|
|
6501
|
+
bytes[index] = binary.charCodeAt(index);
|
|
6452
6502
|
}
|
|
6453
|
-
|
|
6454
|
-
|
|
6503
|
+
return bytes.buffer;
|
|
6504
|
+
}
|
|
6505
|
+
async function loadWasmModule() {
|
|
6506
|
+
const asset = await import("#palbase-mls-wasm");
|
|
6507
|
+
return WebAssembly.compile(decodeBase64(asset.default));
|
|
6455
6508
|
}
|
|
6456
6509
|
function buildImports() {
|
|
6457
6510
|
return {
|
|
@@ -6462,7 +6515,7 @@ function buildImports() {
|
|
|
6462
6515
|
function initMls() {
|
|
6463
6516
|
if (ready) return Promise.resolve(ready);
|
|
6464
6517
|
if (inflight) return inflight;
|
|
6465
|
-
|
|
6518
|
+
const attempt = (async () => {
|
|
6466
6519
|
const module2 = await loadWasmModule();
|
|
6467
6520
|
const instance = await WebAssembly.instantiate(module2, buildImports());
|
|
6468
6521
|
const setWasm = __wbg_set_wasm;
|
|
@@ -6481,7 +6534,11 @@ function initMls() {
|
|
|
6481
6534
|
ready = g;
|
|
6482
6535
|
return g;
|
|
6483
6536
|
})();
|
|
6484
|
-
|
|
6537
|
+
inflight = attempt;
|
|
6538
|
+
void attempt.catch(() => {
|
|
6539
|
+
if (inflight === attempt) inflight = null;
|
|
6540
|
+
});
|
|
6541
|
+
return attempt;
|
|
6485
6542
|
}
|
|
6486
6543
|
function requireMls() {
|
|
6487
6544
|
if (!ready) {
|
|
@@ -8934,7 +8991,7 @@ function defaultSessionStorage(key) {
|
|
|
8934
8991
|
}
|
|
8935
8992
|
|
|
8936
8993
|
// src/version.ts
|
|
8937
|
-
var VERSION = "4.0.
|
|
8994
|
+
var VERSION = "4.0.2";
|
|
8938
8995
|
|
|
8939
8996
|
// src/runtime.ts
|
|
8940
8997
|
function buildRuntime(config) {
|
|
@@ -9361,4 +9418,4 @@ export {
|
|
|
9361
9418
|
pb,
|
|
9362
9419
|
createBoundClient
|
|
9363
9420
|
};
|
|
9364
|
-
//# sourceMappingURL=chunk-
|
|
9421
|
+
//# sourceMappingURL=chunk-TW6YN354.js.map
|