@palbase/web 4.0.1 → 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/{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-NXEPAEF5.js → chunk-CFDU23TB.js} +3 -3
- package/dist/chunk-CFDU23TB.js.map +1 -0
- package/dist/{chunk-TGDS6VMT.js → chunk-TW6YN354.js} +58 -6
- 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 +5 -5
- package/dist/gen/cli.js.map +1 -1
- package/dist/index.cjs +55 -3
- 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 +2 -2
- package/dist/internal.cjs +57 -5
- 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 +2 -2
- package/dist/next/client.cjs +57 -5
- package/dist/next/client.cjs.map +1 -1
- package/dist/next/client.js +2 -2
- package/dist/next/index.cjs +58 -6
- 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 +2 -2
- 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 +2 -2
- package/package.json +2 -2
- package/dist/chunk-NXEPAEF5.js.map +0 -1
- package/dist/chunk-TGDS6VMT.js.map +0 -1
package/dist/next/client.js
CHANGED
package/dist/next/index.cjs
CHANGED
|
@@ -57,8 +57,8 @@ function asWireAuthResult(raw) {
|
|
|
57
57
|
}
|
|
58
58
|
|
|
59
59
|
// src/api-key.ts
|
|
60
|
-
var API_KEY_RE = /^pb_([a-z0-9]
|
|
61
|
-
var PUBLISHABLE_API_KEY_RE = /^pb_([a-z0-9]
|
|
60
|
+
var API_KEY_RE = /^pb_([a-z0-9]{4,24})_[cs][A-Za-z0-9]{20}$/;
|
|
61
|
+
var PUBLISHABLE_API_KEY_RE = /^pb_([a-z0-9]{4,24})_c[A-Za-z0-9]{20}$/;
|
|
62
62
|
function environmentRefFromApiKey(apiKey) {
|
|
63
63
|
const m = API_KEY_RE.exec(apiKey);
|
|
64
64
|
return m ? m[1] ?? "" : "";
|
|
@@ -168,7 +168,7 @@ var PalbaseError = class extends Error {
|
|
|
168
168
|
}
|
|
169
169
|
};
|
|
170
170
|
var PALBASE_DEFAULT_HOST = "api.palbase.studio";
|
|
171
|
-
var API_KEY_RE2 = /^pb_([a-z0-9]
|
|
171
|
+
var API_KEY_RE2 = /^pb_([a-z0-9]{4,24})_c[A-Za-z0-9]{20}$/;
|
|
172
172
|
function parseEnvironmentRef(apiKey) {
|
|
173
173
|
return API_KEY_RE2.exec(apiKey)?.[1] ?? null;
|
|
174
174
|
}
|
|
@@ -545,6 +545,11 @@ var PERF_EXCLUDED_PREFIX = "/v1/analytics/";
|
|
|
545
545
|
function isSelfTraced(path) {
|
|
546
546
|
return path.startsWith(PERF_EXCLUDED_PREFIX);
|
|
547
547
|
}
|
|
548
|
+
function isSessionKilled(status, code) {
|
|
549
|
+
if (status === 401) return code === "session_revoked";
|
|
550
|
+
if (status === 403) return code === "subject_fenced" || code === "subject_erased";
|
|
551
|
+
return false;
|
|
552
|
+
}
|
|
548
553
|
function nowMs() {
|
|
549
554
|
return typeof performance !== "undefined" && typeof performance.now === "function" ? performance.now() : Date.now();
|
|
550
555
|
}
|
|
@@ -580,7 +585,7 @@ async function palbeRequest(rt, method, path, spec = {}) {
|
|
|
580
585
|
let res;
|
|
581
586
|
try {
|
|
582
587
|
res = await attempt();
|
|
583
|
-
if (res.error?.status === 401 && rt.tokenManager.getRefreshToken() && rt.tokenManager.refreshFunction) {
|
|
588
|
+
if (res.error?.status === 401 && res.error.code !== "session_revoked" && rt.tokenManager.getRefreshToken() && rt.tokenManager.refreshFunction) {
|
|
584
589
|
try {
|
|
585
590
|
await rt.tokenManager.refreshSession();
|
|
586
591
|
} catch (refreshErr) {
|
|
@@ -600,6 +605,9 @@ async function palbeRequest(rt, method, path, spec = {}) {
|
|
|
600
605
|
if (!isAbort(e)) record(asPalbaseError(e)?.status ?? 0);
|
|
601
606
|
throw e;
|
|
602
607
|
}
|
|
608
|
+
if (res.error && isSessionKilled(res.error.status, res.error.code)) {
|
|
609
|
+
rt.auth.reactiveTeardown();
|
|
610
|
+
}
|
|
603
611
|
record(res.error?.status ?? 200);
|
|
604
612
|
return unwrap(res);
|
|
605
613
|
}
|
|
@@ -1478,7 +1486,8 @@ var PalbeAuth = class {
|
|
|
1478
1486
|
if (!this.signedInState) return;
|
|
1479
1487
|
this.signedInState = false;
|
|
1480
1488
|
this.cachedUser = null;
|
|
1481
|
-
const reason = this.signingOut ? "userInitiated" : "sessionExpired";
|
|
1489
|
+
const reason = this.nextSignOutReason ?? (this.signingOut ? "userInitiated" : "sessionExpired");
|
|
1490
|
+
this.nextSignOutReason = null;
|
|
1482
1491
|
this.emitState({ status: "signedOut" });
|
|
1483
1492
|
this.emitEvent({ type: "signedOut", reason });
|
|
1484
1493
|
} else if (event === "TOKEN_REFRESHED") {
|
|
@@ -1491,6 +1500,10 @@ var PalbeAuth = class {
|
|
|
1491
1500
|
rt;
|
|
1492
1501
|
cachedUser = null;
|
|
1493
1502
|
signingOut = false;
|
|
1503
|
+
// Explicit signedOut reason pinned for the NEXT session clear (deleteAccount /
|
|
1504
|
+
// reactiveTeardown set it before clearSession; the SIGNED_OUT handler consumes
|
|
1505
|
+
// it exactly once, then resets to null → normal signOut/expiry split resumes).
|
|
1506
|
+
nextSignOutReason = null;
|
|
1494
1507
|
signingIn = false;
|
|
1495
1508
|
// suppresses AuthClient's TOKEN_REFRESHED during re-signIn
|
|
1496
1509
|
signedInState = false;
|
|
@@ -1538,6 +1551,45 @@ var PalbeAuth = class {
|
|
|
1538
1551
|
this.cachedUser = null;
|
|
1539
1552
|
}
|
|
1540
1553
|
}
|
|
1554
|
+
/**
|
|
1555
|
+
* Self-service account erasure ("right to be forgotten"). Calls palauth
|
|
1556
|
+
* `DELETE /auth/user` (session-authed + fresh re-auth): password users pass
|
|
1557
|
+
* `{ password }`; passwordless/OAuth users rely on a freshly stepped-up
|
|
1558
|
+
* session. On 202 the erasure workflow is durably queued AND every session is
|
|
1559
|
+
* already revoked server-side — so we tear down local state (mirroring
|
|
1560
|
+
* `signOut()`'s clear, minus the pointless `/logout`) and emit
|
|
1561
|
+
* `signedOut{reason:'accountDeleted'}`.
|
|
1562
|
+
*
|
|
1563
|
+
* On 401 `reauth_required` / 503 `not_configured` (or `erasure_unavailable`)
|
|
1564
|
+
* the request throws BEFORE the teardown line, so the local session is left
|
|
1565
|
+
* fully intact — the deletion did not happen and the user is still signed in.
|
|
1566
|
+
*/
|
|
1567
|
+
async deleteAccount(params = {}) {
|
|
1568
|
+
const res = await palbeRequest(this.rt, "DELETE", "/auth/user", {
|
|
1569
|
+
body: params.password ? { password: params.password } : {}
|
|
1570
|
+
});
|
|
1571
|
+
this.nextSignOutReason = "accountDeleted";
|
|
1572
|
+
this.rt.tokenManager.clearSession();
|
|
1573
|
+
this.rt.storage.clear();
|
|
1574
|
+
this.cachedUser = null;
|
|
1575
|
+
return { erasureId: res.erasure_id };
|
|
1576
|
+
}
|
|
1577
|
+
/**
|
|
1578
|
+
* @internal — invoked by the transport choke point (`request.ts`), not app code.
|
|
1579
|
+
* Reactive teardown when the server reports the session is gone: a 403
|
|
1580
|
+
* `subject_fenced`/`subject_erased` (subject being erased) or a 401
|
|
1581
|
+
* `session_revoked`. Clears local state and emits
|
|
1582
|
+
* `signedOut{reason:'sessionInvalid'}` exactly once (deduped by
|
|
1583
|
+
* `signedInState`). An ordinary 403 authz denial does NOT reach here —
|
|
1584
|
+
* `request.ts` matches only the exact session-kill codes.
|
|
1585
|
+
*/
|
|
1586
|
+
reactiveTeardown() {
|
|
1587
|
+
if (!this.signedInState) return;
|
|
1588
|
+
this.nextSignOutReason = "sessionInvalid";
|
|
1589
|
+
this.rt.tokenManager.clearSession();
|
|
1590
|
+
this.rt.storage.clear();
|
|
1591
|
+
this.cachedUser = null;
|
|
1592
|
+
}
|
|
1541
1593
|
async getUser() {
|
|
1542
1594
|
const raw = await palbeRequest(this.rt, "GET", "/auth/user");
|
|
1543
1595
|
return mapWireUser(raw);
|
|
@@ -8986,7 +9038,7 @@ function defaultSessionStorage(key) {
|
|
|
8986
9038
|
}
|
|
8987
9039
|
|
|
8988
9040
|
// src/version.ts
|
|
8989
|
-
var VERSION = "4.0.
|
|
9041
|
+
var VERSION = "4.0.2";
|
|
8990
9042
|
|
|
8991
9043
|
// src/runtime.ts
|
|
8992
9044
|
function buildRuntime(config) {
|