@orangecheck/auth-client 2.33.1 → 2.33.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/index.d.mts +8 -1
- package/dist/index.d.ts +8 -1
- package/dist/index.js +103 -3
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +98 -4
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.mjs
CHANGED
|
@@ -4,6 +4,90 @@ import { startRegistration, startAuthentication } from '@simplewebauthn/browser'
|
|
|
4
4
|
|
|
5
5
|
// src/provider.tsx
|
|
6
6
|
|
|
7
|
+
// src/return-to.ts
|
|
8
|
+
var PREFIX = "oc:return-fragment:";
|
|
9
|
+
var FRAGMENT_TTL_MS = 15 * 60 * 1e3;
|
|
10
|
+
function store() {
|
|
11
|
+
try {
|
|
12
|
+
return window.sessionStorage;
|
|
13
|
+
} catch {
|
|
14
|
+
return null;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
function stripFragment(target) {
|
|
18
|
+
const cut = target.indexOf("#");
|
|
19
|
+
return cut < 0 ? target : target.slice(0, cut);
|
|
20
|
+
}
|
|
21
|
+
function keep(pathAndQuery, hash) {
|
|
22
|
+
if (hash.length < 2) return;
|
|
23
|
+
try {
|
|
24
|
+
store()?.setItem(PREFIX + pathAndQuery, JSON.stringify({ hash, at: Date.now() }));
|
|
25
|
+
} catch {
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
function withoutFragment(target) {
|
|
29
|
+
if (typeof window !== "undefined" && target.includes("#")) {
|
|
30
|
+
try {
|
|
31
|
+
const u = new URL(target, window.location.href);
|
|
32
|
+
if (u.origin === window.location.origin) keep(u.pathname + u.search, u.hash);
|
|
33
|
+
} catch {
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return stripFragment(target);
|
|
37
|
+
}
|
|
38
|
+
function returnToHere() {
|
|
39
|
+
if (typeof window === "undefined") return "/";
|
|
40
|
+
const { pathname, search, hash } = window.location;
|
|
41
|
+
return withoutFragment(pathname + search + hash);
|
|
42
|
+
}
|
|
43
|
+
function keepFragmentOnReturnLinks() {
|
|
44
|
+
if (typeof document === "undefined") return () => {
|
|
45
|
+
};
|
|
46
|
+
const onClick = (e) => {
|
|
47
|
+
const { pathname, search, hash, href } = window.location;
|
|
48
|
+
if (hash.length < 2 || e.defaultPrevented) return;
|
|
49
|
+
const link = e.target?.closest?.("a[href]");
|
|
50
|
+
if (!link) return;
|
|
51
|
+
try {
|
|
52
|
+
const to = new URL(link.getAttribute("href") ?? "", href);
|
|
53
|
+
const back = to.searchParams.get("return_to");
|
|
54
|
+
if (!back) return;
|
|
55
|
+
const here = new URL(back, href);
|
|
56
|
+
if (here.origin === window.location.origin && here.pathname === pathname && here.search === search) {
|
|
57
|
+
keep(pathname + search, hash);
|
|
58
|
+
}
|
|
59
|
+
} catch {
|
|
60
|
+
}
|
|
61
|
+
};
|
|
62
|
+
document.addEventListener("click", onClick, true);
|
|
63
|
+
return () => document.removeEventListener("click", onClick, true);
|
|
64
|
+
}
|
|
65
|
+
function restoreReturnFragment() {
|
|
66
|
+
if (typeof window === "undefined") return false;
|
|
67
|
+
const s = store();
|
|
68
|
+
if (!s) return false;
|
|
69
|
+
const { pathname, search, hash } = window.location;
|
|
70
|
+
const key = PREFIX + pathname + search;
|
|
71
|
+
let raw;
|
|
72
|
+
try {
|
|
73
|
+
raw = s.getItem(key);
|
|
74
|
+
if (raw === null) return false;
|
|
75
|
+
s.removeItem(key);
|
|
76
|
+
} catch {
|
|
77
|
+
return false;
|
|
78
|
+
}
|
|
79
|
+
if (hash) return false;
|
|
80
|
+
try {
|
|
81
|
+
const kept = JSON.parse(raw);
|
|
82
|
+
if (typeof kept.hash !== "string" || !kept.hash.startsWith("#")) return false;
|
|
83
|
+
if (typeof kept.at !== "number" || Date.now() - kept.at > FRAGMENT_TTL_MS) return false;
|
|
84
|
+
window.history.replaceState(window.history.state, "", pathname + search + kept.hash);
|
|
85
|
+
return true;
|
|
86
|
+
} catch {
|
|
87
|
+
return false;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
|
|
7
91
|
// src/types.ts
|
|
8
92
|
var DISPLAY_IDENTITY_KINDS = ["did", "btc", "email", "nostr"];
|
|
9
93
|
var DEFAULT_CONFIG = {
|
|
@@ -20,7 +104,7 @@ function buildSignInUrl(cfg, returnTo) {
|
|
|
20
104
|
const base = `${cfg.authOrigin}${cfg.signInPath}`;
|
|
21
105
|
if (!returnTo) return base;
|
|
22
106
|
const u = new URL(base);
|
|
23
|
-
u.searchParams.set("return_to", returnTo);
|
|
107
|
+
u.searchParams.set("return_to", stripFragment(returnTo));
|
|
24
108
|
return u.toString();
|
|
25
109
|
}
|
|
26
110
|
function buildAddAccountUrl(cfg, returnTo) {
|
|
@@ -259,6 +343,13 @@ function OcSessionProvider({
|
|
|
259
343
|
defaultReturnTo
|
|
260
344
|
}) {
|
|
261
345
|
const cfg = React4.useMemo(() => resolveConfig(config), [config]);
|
|
346
|
+
React4.useState(() => {
|
|
347
|
+
if (typeof window !== "undefined") {
|
|
348
|
+
consumeTabAdoptMarker();
|
|
349
|
+
restoreReturnFragment();
|
|
350
|
+
}
|
|
351
|
+
return null;
|
|
352
|
+
});
|
|
262
353
|
const [account, setAccount] = React4.useState(null);
|
|
263
354
|
const [roster, setRoster] = React4.useState([]);
|
|
264
355
|
const [status, setStatus] = React4.useState("loading");
|
|
@@ -353,6 +444,7 @@ function OcSessionProvider({
|
|
|
353
444
|
cancelled = true;
|
|
354
445
|
};
|
|
355
446
|
}, [refresh, cfg.authOrigin, cfg.multiAccount]);
|
|
447
|
+
React4.useEffect(() => keepFragmentOnReturnLinks(), []);
|
|
356
448
|
React4.useEffect(
|
|
357
449
|
() => cfg.multiAccount ? installTabFetchInterceptor(cfg.authOrigin) : void 0,
|
|
358
450
|
[cfg.authOrigin, cfg.multiAccount]
|
|
@@ -1153,7 +1245,7 @@ function redirectToSudo(args = {}) {
|
|
|
1153
1245
|
}
|
|
1154
1246
|
const cfg = resolveConfig(args.config);
|
|
1155
1247
|
const url = new URL("/sudo", cfg.authOrigin);
|
|
1156
|
-
const returnTo = args.returnTo ?? window.location.href;
|
|
1248
|
+
const returnTo = withoutFragment(args.returnTo ?? window.location.href);
|
|
1157
1249
|
if (returnTo) url.searchParams.set("return_to", returnTo);
|
|
1158
1250
|
if (args.purpose) url.searchParams.set("purpose", args.purpose);
|
|
1159
1251
|
window.location.assign(url.toString());
|
|
@@ -2517,7 +2609,9 @@ function ProviderSignIn({
|
|
|
2517
2609
|
}, [authOrigin, credentials, hidden]);
|
|
2518
2610
|
if (hidden) return null;
|
|
2519
2611
|
if (providers !== null && providers.length === 0) return null;
|
|
2520
|
-
const providerReturnTo =
|
|
2612
|
+
const providerReturnTo = stripFragment(
|
|
2613
|
+
returnTo.startsWith("/") ? origin ? `${origin}${returnTo}` : returnTo : returnTo
|
|
2614
|
+
);
|
|
2521
2615
|
const line = { flex: 1, height: 1, background: "var(--border, #27272a)" };
|
|
2522
2616
|
const BLOCK_GAP = 16;
|
|
2523
2617
|
const BUTTON_GAP = 8;
|
|
@@ -3882,6 +3976,6 @@ function useStepUpAuth(opts) {
|
|
|
3882
3976
|
return { status, error, stepUp, reset };
|
|
3883
3977
|
}
|
|
3884
3978
|
|
|
3885
|
-
export { DEFAULT_CONFIG, DISPLAY_IDENTITY_KINDS, OcAccountChip, OcAccountPill, OcAddressInput, OcBond, OcLinkedIdentities, OcSessionProvider, OcSignIn, OcSignInButton, SUDO_ACCOUNT_MISMATCH_MESSAGE, TAB_ACCOUNT_HINT_KEY, TAB_ADOPT_HASH, TAB_SESSION_HEADER, TAB_SESSION_STORAGE_KEY, bondFloorsText, buildAddAccountUrl, buildSignInUrl, clearTabSession, consumeTabAccountHint, consumeTabAdoptMarker, familyReturnTarget, fetchOcBond, fetchOcLinkedIdentities, handleSudoRequired, installTabFetchInterceptor, installTabLinkDecorator, isSudoAccountMismatch, readTabSession, redirectToSudo, safeReturnTo, tabSessionHeader, useOcAddressSuggestion, useOcSession, useOptionalOcSession, useStepUpAuth, useWebAuthnList, useWebAuthnRegister, writeTabSession };
|
|
3979
|
+
export { DEFAULT_CONFIG, DISPLAY_IDENTITY_KINDS, FRAGMENT_TTL_MS, OcAccountChip, OcAccountPill, OcAddressInput, OcBond, OcLinkedIdentities, OcSessionProvider, OcSignIn, OcSignInButton, SUDO_ACCOUNT_MISMATCH_MESSAGE, TAB_ACCOUNT_HINT_KEY, TAB_ADOPT_HASH, TAB_SESSION_HEADER, TAB_SESSION_STORAGE_KEY, bondFloorsText, buildAddAccountUrl, buildSignInUrl, clearTabSession, consumeTabAccountHint, consumeTabAdoptMarker, familyReturnTarget, fetchOcBond, fetchOcLinkedIdentities, handleSudoRequired, installTabFetchInterceptor, installTabLinkDecorator, isSudoAccountMismatch, keepFragmentOnReturnLinks, readTabSession, redirectToSudo, restoreReturnFragment, returnToHere, safeReturnTo, stripFragment, tabSessionHeader, useOcAddressSuggestion, useOcSession, useOptionalOcSession, useStepUpAuth, useWebAuthnList, useWebAuthnRegister, withoutFragment, writeTabSession };
|
|
3886
3980
|
//# sourceMappingURL=index.mjs.map
|
|
3887
3981
|
//# sourceMappingURL=index.mjs.map
|