@arcblock/did-connect-service 4.1.52 → 4.1.54
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/_generated/asset-bytes.js +1 -1
- package/dist/_generated/asset-manifest.js +4 -4
- package/dist/_generated/login-bundle-string.d.ts +1 -1
- package/dist/_generated/login-bundle-string.d.ts.map +1 -1
- package/dist/_generated/login-bundle-string.js +1 -1
- package/dist/_generated/login-bundle-string.js.map +1 -1
- package/dist/_generated/qr-bundle-string.d.ts +1 -1
- package/dist/_generated/qr-bundle-string.d.ts.map +1 -1
- package/dist/_generated/qr-bundle-string.js +1 -1
- package/dist/_generated/qr-bundle-string.js.map +1 -1
- package/dist/assets/{design.99dc4ddc.css → design.dfa1e109.css} +4 -4
- package/dist/assets/{login.fa75e481.css → login.875ad8b9.css} +117 -26
- package/dist/assets/login.c242a16a.js +862 -0
- package/dist/assets/{qr.c0d203ca.js → qr.dba9e6b3.js} +3 -3
- package/dist/handlers/access-key-connect-handler.d.ts +1 -1
- package/dist/handlers/access-key-connect-handler.d.ts.map +1 -1
- package/dist/handlers/access-key-connect-handler.js +1 -1
- package/dist/handlers/access-key-connect-handler.js.map +1 -1
- package/dist/handlers/auth-handler.d.ts.map +1 -1
- package/dist/handlers/auth-handler.js +35 -143
- package/dist/handlers/auth-handler.js.map +1 -1
- package/dist/handlers/login-page-model.d.ts +62 -0
- package/dist/handlers/login-page-model.d.ts.map +1 -0
- package/dist/handlers/login-page-model.js +218 -0
- package/dist/handlers/login-page-model.js.map +1 -0
- package/dist/handlers/oauth-handler.d.ts.map +1 -1
- package/dist/handlers/oauth-handler.js +27 -4
- package/dist/handlers/oauth-handler.js.map +1 -1
- package/dist/handlers/passkey-handler.d.ts +17 -2
- package/dist/handlers/passkey-handler.d.ts.map +1 -1
- package/dist/handlers/passkey-handler.js +48 -107
- package/dist/handlers/passkey-handler.js.map +1 -1
- package/dist/handlers/team-handler.d.ts.map +1 -1
- package/dist/handlers/team-handler.js +1 -13
- package/dist/handlers/team-handler.js.map +1 -1
- package/dist/http/security-headers.d.ts +38 -0
- package/dist/http/security-headers.d.ts.map +1 -0
- package/dist/http/security-headers.js +67 -0
- package/dist/http/security-headers.js.map +1 -0
- package/dist/identity/webauthn.d.ts +1 -1
- package/dist/identity/webauthn.d.ts.map +1 -1
- package/dist/identity/webauthn.js +6 -3
- package/dist/identity/webauthn.js.map +1 -1
- package/dist/pages/gen-access-key-page.d.ts +15 -0
- package/dist/pages/gen-access-key-page.d.ts.map +1 -1
- package/dist/pages/gen-access-key-page.js +15 -2
- package/dist/pages/gen-access-key-page.js.map +1 -1
- package/dist/pages/invite-page.d.ts +9 -2
- package/dist/pages/invite-page.d.ts.map +1 -1
- package/dist/pages/invite-page.js +26 -28
- package/dist/pages/invite-page.js.map +1 -1
- package/dist/pages/login-bundle-entry.d.ts +1 -1
- package/dist/pages/login-bundle-entry.d.ts.map +1 -1
- package/dist/pages/login-bundle-entry.js +1 -1
- package/dist/pages/login-bundle-entry.js.map +1 -1
- package/dist/pages/login-page.d.ts +2 -0
- package/dist/pages/login-page.d.ts.map +1 -1
- package/dist/pages/login-page.js +39 -0
- package/dist/pages/login-page.js.map +1 -1
- package/dist/pages/oauth-callback-page.d.ts +17 -1
- package/dist/pages/oauth-callback-page.d.ts.map +1 -1
- package/dist/pages/oauth-callback-page.js +29 -9
- package/dist/pages/oauth-callback-page.js.map +1 -1
- package/package.json +5 -5
- package/dist/assets/login.e70223b2.js +0 -752
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared security headers for server-rendered HTML responses (see issue #72).
|
|
3
|
+
*
|
|
4
|
+
* connect-service renders login/homepage/admin/invite/OAuth/error pages as raw
|
|
5
|
+
* HTML strings from several different handlers (there is no single Hono app /
|
|
6
|
+
* router that all of them funnel through — see the handlers listed at each
|
|
7
|
+
* `htmlResponse` call site). Without a common send point, every one of those
|
|
8
|
+
* handlers previously built its own `new Response(html, { headers: {...} })`
|
|
9
|
+
* and could silently drop hardening headers. `htmlResponse` is the one place
|
|
10
|
+
* that guarantees they don't: every HTML response gets `X-Frame-Options`,
|
|
11
|
+
* `X-Content-Type-Options`, and a CSP, even though the pages themselves stay
|
|
12
|
+
* wherever they are.
|
|
13
|
+
*
|
|
14
|
+
* This is defense-in-depth, not a substitute for fixing individual XSS sinks
|
|
15
|
+
* (see #62/#63/#64) — it limits what an attacker can do *if* one of those sinks
|
|
16
|
+
* is (or becomes) exploitable: no clickjacking (`frame-ancestors 'none'` +
|
|
17
|
+
* `X-Frame-Options: DENY`), no cross-origin script/style loads, no MIME-sniff
|
|
18
|
+
* smuggling (`nosniff`).
|
|
19
|
+
*
|
|
20
|
+
* CSP trade-off (intentional, see #72 discussion): connect-service's pages rely
|
|
21
|
+
* heavily on inline `<script>` blocks (see `packages/connect-service/CLAUDE.md` —
|
|
22
|
+
* Browser Asset Externalization) — the login/OAuth/admin/invite pages all inline
|
|
23
|
+
* small bootstrap scripts alongside externalized asset bundles. Migrating every
|
|
24
|
+
* inline script to a nonce- or hash-based CSP is a much larger, higher-regression-risk
|
|
25
|
+
* change than this issue calls for, so `script-src`/`style-src` keep `'unsafe-inline'`
|
|
26
|
+
* for now. The policy still meaningfully narrows the blast radius (no foreign script
|
|
27
|
+
* origins, no framing, no arbitrary form submission targets). Tightening to a
|
|
28
|
+
* nonce-based CSP is a good follow-up once the inline-script surface is consolidated.
|
|
29
|
+
*/
|
|
30
|
+
export declare const HTML_SECURITY_HEADERS: Readonly<Record<string, string>>;
|
|
31
|
+
/**
|
|
32
|
+
* Build a `Response` for server-rendered HTML. Merges the shared security headers
|
|
33
|
+
* (always applied — they are not overridable via `init.headers`, see #72) with
|
|
34
|
+
* caller-supplied headers (`Content-Type` defaults to `text/html; charset=utf-8`
|
|
35
|
+
* unless the caller sets its own, `Cache-Control` etc. pass through untouched).
|
|
36
|
+
*/
|
|
37
|
+
export declare function htmlResponse(html: string, init?: ResponseInit): Response;
|
|
38
|
+
//# sourceMappingURL=security-headers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"security-headers.d.ts","sourceRoot":"","sources":["../../src/http/security-headers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAmBH,eAAO,MAAM,qBAAqB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAIjE,CAAC;AAEH;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,YAAY,GAAG,QAAQ,CASxE"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared security headers for server-rendered HTML responses (see issue #72).
|
|
3
|
+
*
|
|
4
|
+
* connect-service renders login/homepage/admin/invite/OAuth/error pages as raw
|
|
5
|
+
* HTML strings from several different handlers (there is no single Hono app /
|
|
6
|
+
* router that all of them funnel through — see the handlers listed at each
|
|
7
|
+
* `htmlResponse` call site). Without a common send point, every one of those
|
|
8
|
+
* handlers previously built its own `new Response(html, { headers: {...} })`
|
|
9
|
+
* and could silently drop hardening headers. `htmlResponse` is the one place
|
|
10
|
+
* that guarantees they don't: every HTML response gets `X-Frame-Options`,
|
|
11
|
+
* `X-Content-Type-Options`, and a CSP, even though the pages themselves stay
|
|
12
|
+
* wherever they are.
|
|
13
|
+
*
|
|
14
|
+
* This is defense-in-depth, not a substitute for fixing individual XSS sinks
|
|
15
|
+
* (see #62/#63/#64) — it limits what an attacker can do *if* one of those sinks
|
|
16
|
+
* is (or becomes) exploitable: no clickjacking (`frame-ancestors 'none'` +
|
|
17
|
+
* `X-Frame-Options: DENY`), no cross-origin script/style loads, no MIME-sniff
|
|
18
|
+
* smuggling (`nosniff`).
|
|
19
|
+
*
|
|
20
|
+
* CSP trade-off (intentional, see #72 discussion): connect-service's pages rely
|
|
21
|
+
* heavily on inline `<script>` blocks (see `packages/connect-service/CLAUDE.md` —
|
|
22
|
+
* Browser Asset Externalization) — the login/OAuth/admin/invite pages all inline
|
|
23
|
+
* small bootstrap scripts alongside externalized asset bundles. Migrating every
|
|
24
|
+
* inline script to a nonce- or hash-based CSP is a much larger, higher-regression-risk
|
|
25
|
+
* change than this issue calls for, so `script-src`/`style-src` keep `'unsafe-inline'`
|
|
26
|
+
* for now. The policy still meaningfully narrows the blast radius (no foreign script
|
|
27
|
+
* origins, no framing, no arbitrary form submission targets). Tightening to a
|
|
28
|
+
* nonce-based CSP is a good follow-up once the inline-script surface is consolidated.
|
|
29
|
+
*/
|
|
30
|
+
/** Directives shared by every HTML response. Keep in sync with the pages this
|
|
31
|
+
* protects: assets are same-origin (`assetUrl()` — see `asset-registry.ts`),
|
|
32
|
+
* avatars/branding logos may be arbitrary external `https:` URLs, and all forms /
|
|
33
|
+
* XHR calls target this same origin (OAuth provider redirects are top-level
|
|
34
|
+
* navigations, which CSP does not gate). */
|
|
35
|
+
const CONTENT_SECURITY_POLICY = [
|
|
36
|
+
"default-src 'self'",
|
|
37
|
+
"script-src 'self' 'unsafe-inline'",
|
|
38
|
+
"style-src 'self' 'unsafe-inline'",
|
|
39
|
+
"img-src 'self' data: https:",
|
|
40
|
+
"font-src 'self' data:",
|
|
41
|
+
"connect-src 'self'",
|
|
42
|
+
"frame-ancestors 'none'",
|
|
43
|
+
"base-uri 'self'",
|
|
44
|
+
"form-action 'self'",
|
|
45
|
+
].join("; ");
|
|
46
|
+
export const HTML_SECURITY_HEADERS = Object.freeze({
|
|
47
|
+
"X-Frame-Options": "DENY",
|
|
48
|
+
"X-Content-Type-Options": "nosniff",
|
|
49
|
+
"Content-Security-Policy": CONTENT_SECURITY_POLICY,
|
|
50
|
+
});
|
|
51
|
+
/**
|
|
52
|
+
* Build a `Response` for server-rendered HTML. Merges the shared security headers
|
|
53
|
+
* (always applied — they are not overridable via `init.headers`, see #72) with
|
|
54
|
+
* caller-supplied headers (`Content-Type` defaults to `text/html; charset=utf-8`
|
|
55
|
+
* unless the caller sets its own, `Cache-Control` etc. pass through untouched).
|
|
56
|
+
*/
|
|
57
|
+
export function htmlResponse(html, init) {
|
|
58
|
+
const headers = new Headers(init?.headers);
|
|
59
|
+
if (!headers.has("Content-Type")) {
|
|
60
|
+
headers.set("Content-Type", "text/html; charset=utf-8");
|
|
61
|
+
}
|
|
62
|
+
for (const [name, value] of Object.entries(HTML_SECURITY_HEADERS)) {
|
|
63
|
+
headers.set(name, value);
|
|
64
|
+
}
|
|
65
|
+
return new Response(html, { ...init, headers });
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=security-headers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"security-headers.js","sourceRoot":"","sources":["../../src/http/security-headers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH;;;;4CAI4C;AAC5C,MAAM,uBAAuB,GAAG;IAC9B,oBAAoB;IACpB,mCAAmC;IACnC,kCAAkC;IAClC,6BAA6B;IAC7B,uBAAuB;IACvB,oBAAoB;IACpB,wBAAwB;IACxB,iBAAiB;IACjB,oBAAoB;CACrB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEb,MAAM,CAAC,MAAM,qBAAqB,GAAqC,MAAM,CAAC,MAAM,CAAC;IACnF,iBAAiB,EAAE,MAAM;IACzB,wBAAwB,EAAE,SAAS;IACnC,yBAAyB,EAAE,uBAAuB;CACnD,CAAC,CAAC;AAEH;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,IAAY,EAAE,IAAmB;IAC5D,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC3C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,CAAC;QACjC,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,0BAA0B,CAAC,CAAC;IAC1D,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,qBAAqB,CAAC,EAAE,CAAC;QAClE,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC3B,CAAC;IACD,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;AAClD,CAAC"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Thin wrappers around @ocap/mcrypto webauthn (lightweight, no ASN.1/X.509 chain).
|
|
3
3
|
*
|
|
4
4
|
* residentKey "preferred", userVerification "discouraged" (no password prompt),
|
|
5
|
-
* authenticatorAttachment "platform",
|
|
5
|
+
* authenticatorAttachment "platform", algorithm ES256 (-7).
|
|
6
6
|
*/
|
|
7
7
|
import type { RegistrationResponseJSON, VerifiedRegistrationResponse } from "@ocap/mcrypto/lib/webauthn";
|
|
8
8
|
export type { RegistrationResponseJSON, VerifiedRegistrationResponse };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webauthn.d.ts","sourceRoot":"","sources":["../../src/identity/webauthn.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,wBAAwB,EACxB,4BAA4B,EAC7B,MAAM,4BAA4B,CAAC;AAapC,YAAY,EAAE,wBAAwB,EAAE,4BAA4B,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"webauthn.d.ts","sourceRoot":"","sources":["../../src/identity/webauthn.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,wBAAwB,EACxB,4BAA4B,EAC7B,MAAM,4BAA4B,CAAC;AAapC,YAAY,EAAE,wBAAwB,EAAE,4BAA4B,EAAE,CAAC;AAQvE,MAAM,MAAM,4BAA4B,GAAG,MAAM,CAAC;AAElD,MAAM,MAAM,0BAA0B,GAAG;IACvC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE;QACR,iBAAiB,EAAE,MAAM,CAAC;QAC1B,cAAc,EAAE,MAAM,CAAC;QACvB,SAAS,EAAE,MAAM,CAAC;QAClB,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC;IACF,sBAAsB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC7C,uBAAuB,CAAC,EAAE,MAAM,CAAC;CAClC,CAAC;AAIF,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kBAAkB,CAAC,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,YAAY,CAAA;KAAE,CAAC,CAAC;CAChE;AAED,MAAM,WAAW,eAAe;IAC9B,cAAc,EAAE,qCAAqC,CAAC;IACtD,YAAY,EAAE,sCAAsC,CAAC;CACtD;AAED,wBAAsB,wBAAwB,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC,CA4B/F;AAID,MAAM,WAAW,wBAAwB;IACvC,QAAQ,EAAE,wBAAwB,CAAC;IACnC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,wBAAwB,yCASxE;AAID,MAAM,WAAW,0BAA0B;IACzC,QAAQ,EAAE,0BAA0B,CAAC;IACrC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE;QACV,EAAE,EAAE,MAAM,CAAC;QACX,SAAS,EAAE,UAAU,CAAC;QACtB,OAAO,EAAE,MAAM,CAAC;QAChB,UAAU,CAAC,EAAE,4BAA4B,EAAE,CAAC;KAC7C,CAAC;CACH;AAED,wBAAsB,oBAAoB,CAAC,MAAM,EAAE,0BAA0B;;;;;;;;;;;GA4E5E"}
|
|
@@ -2,9 +2,12 @@
|
|
|
2
2
|
* Thin wrappers around @ocap/mcrypto webauthn (lightweight, no ASN.1/X.509 chain).
|
|
3
3
|
*
|
|
4
4
|
* residentKey "preferred", userVerification "discouraged" (no password prompt),
|
|
5
|
-
* authenticatorAttachment "platform",
|
|
5
|
+
* authenticatorAttachment "platform", algorithm ES256 (-7).
|
|
6
6
|
*/
|
|
7
7
|
import { decodeClientDataJSON, generateAuthenticationOptions, generateRegistrationOptions, isoBase64URL, isoUint8Array, parseAuthenticatorData, toHash, verifyRegistrationResponse, verifySignature, } from "@ocap/mcrypto/lib/webauthn";
|
|
8
|
+
// Keep registration aligned with the EC2 signature verifier. Advertising EdDSA
|
|
9
|
+
// or RSA creates credentials that registration accepts but sign-in cannot verify.
|
|
10
|
+
const SUPPORTED_PASSKEY_ALGORITHMS = [-7];
|
|
8
11
|
export async function generateChallengeOptions(opts) {
|
|
9
12
|
const authentication = (await generateAuthenticationOptions({
|
|
10
13
|
rpID: opts.rpID,
|
|
@@ -26,7 +29,7 @@ export async function generateChallengeOptions(opts) {
|
|
|
26
29
|
userVerification: "discouraged",
|
|
27
30
|
authenticatorAttachment: "platform",
|
|
28
31
|
},
|
|
29
|
-
supportedAlgorithmIDs:
|
|
32
|
+
supportedAlgorithmIDs: SUPPORTED_PASSKEY_ALGORITHMS,
|
|
30
33
|
...(opts.excludeCredentials && { excludeCredentials: opts.excludeCredentials }),
|
|
31
34
|
}));
|
|
32
35
|
return { authentication, registration };
|
|
@@ -38,7 +41,7 @@ export async function verifyRegistration(params) {
|
|
|
38
41
|
expectedOrigin: params.expectedOrigin,
|
|
39
42
|
expectedRPID: params.expectedRPID,
|
|
40
43
|
requireUserVerification: false,
|
|
41
|
-
supportedAlgorithmIDs:
|
|
44
|
+
supportedAlgorithmIDs: SUPPORTED_PASSKEY_ALGORITHMS,
|
|
42
45
|
});
|
|
43
46
|
}
|
|
44
47
|
export async function verifyAuthentication(params) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webauthn.js","sourceRoot":"","sources":["../../src/identity/webauthn.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,EACL,oBAAoB,EACpB,6BAA6B,EAC7B,2BAA2B,EAC3B,YAAY,EACZ,aAAa,EACb,sBAAsB,EACtB,MAAM,EACN,0BAA0B,EAC1B,eAAe,GAChB,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"webauthn.js","sourceRoot":"","sources":["../../src/identity/webauthn.ts"],"names":[],"mappings":"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"}
|
|
@@ -21,6 +21,21 @@ export interface GenAccessKeyPageOptions {
|
|
|
21
21
|
}>;
|
|
22
22
|
/** Application name */
|
|
23
23
|
appName?: string;
|
|
24
|
+
/** Color theme for the embedded LoginPage. Omitted from the client JSON when unset. */
|
|
25
|
+
theme?: "light" | "dark" | "auto";
|
|
26
|
+
/** Enabled languages for the embedded LoginPage. */
|
|
27
|
+
locales?: Array<{
|
|
28
|
+
code: string;
|
|
29
|
+
label: string;
|
|
30
|
+
}>;
|
|
31
|
+
/** Application logo URL for the embedded LoginPage. */
|
|
32
|
+
appLogo?: string;
|
|
33
|
+
/** Federation: Master OAuth origin for the embedded LoginPage. */
|
|
34
|
+
masterOAuthOrigin?: string;
|
|
35
|
+
/** Federation: Master app name for the embedded LoginPage. */
|
|
36
|
+
masterAppName?: string;
|
|
37
|
+
/** Locale for the embedded LoginPage. Page chrome uses the `locale` argument. */
|
|
38
|
+
locale?: string;
|
|
24
39
|
/** API prefix for DID endpoints (default: /.well-known/service/api/did) */
|
|
25
40
|
apiPrefix?: string;
|
|
26
41
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gen-access-key-page.d.ts","sourceRoot":"","sources":["../../src/pages/gen-access-key-page.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAI3E,MAAM,WAAW,uBAAuB;IACtC,oEAAoE;IACpE,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,0BAA0B;IAC1B,cAAc,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IACtF,uBAAuB;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,2EAA2E;IAC3E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;OAKG;IACH,YAAY,CAAC,EAAE,mBAAmB,CAAC;CACpC;AAiCD,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyG8B,CAAC;AAqT/D,wBAAgB,yBAAyB,CAAC,OAAO,CAAC,EAAE,uBAAuB,EAAE,MAAM,SAAO,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"gen-access-key-page.d.ts","sourceRoot":"","sources":["../../src/pages/gen-access-key-page.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAI3E,MAAM,WAAW,uBAAuB;IACtC,oEAAoE;IACpE,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,0BAA0B;IAC1B,cAAc,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IACtF,uBAAuB;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,uFAAuF;IACvF,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;IAClC,oDAAoD;IACpD,OAAO,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACjD,uDAAuD;IACvD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,kEAAkE;IAClE,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,8DAA8D;IAC9D,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iFAAiF;IACjF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,2EAA2E;IAC3E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;OAKG;IACH,YAAY,CAAC,EAAE,mBAAmB,CAAC;CACpC;AAiCD,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyG8B,CAAC;AAqT/D,wBAAgB,yBAAyB,CAAC,OAAO,CAAC,EAAE,uBAAuB,EAAE,MAAM,SAAO,GAAG,MAAM,CAoblG"}
|
|
@@ -408,6 +408,12 @@ export function buildGenAccessKeyPageHTML(options, locale = "en") {
|
|
|
408
408
|
// Signals the client script to leave the server-rendered consent
|
|
409
409
|
// identity alone (see the guard around setSource).
|
|
410
410
|
serverConsent: Boolean(options?.oauthConsent),
|
|
411
|
+
...(options?.theme !== undefined ? { theme: options.theme } : {}),
|
|
412
|
+
...(options?.locales !== undefined ? { locales: options.locales } : {}),
|
|
413
|
+
...(options?.appLogo !== undefined ? { appLogo: options.appLogo } : {}),
|
|
414
|
+
...(options?.masterOAuthOrigin !== undefined ? { masterOAuthOrigin: options.masterOAuthOrigin } : {}),
|
|
415
|
+
...(options?.masterAppName !== undefined ? { masterAppName: options.masterAppName } : {}),
|
|
416
|
+
...(options?.locale !== undefined ? { locale: options.locale } : {}),
|
|
411
417
|
}));
|
|
412
418
|
const apiPrefix = options?.apiPrefix || "/.well-known/service/api/did";
|
|
413
419
|
const { code, htmlLang } = resolvePageLocale(locale);
|
|
@@ -660,7 +666,7 @@ export function buildGenAccessKeyPageHTML(options, locale = "en") {
|
|
|
660
666
|
function showLogin() {
|
|
661
667
|
wrapper.className = 'auth-wrapper phase-login';
|
|
662
668
|
var loginRoot = document.getElementById('login-root');
|
|
663
|
-
var
|
|
669
|
+
var loginOptions = {
|
|
664
670
|
methods: pageOpts.methods,
|
|
665
671
|
oauthProviders: pageOpts.oauthProviders,
|
|
666
672
|
appName: pageOpts.appName,
|
|
@@ -674,7 +680,14 @@ export function buildGenAccessKeyPageHTML(options, locale = "en") {
|
|
|
674
680
|
}
|
|
675
681
|
});
|
|
676
682
|
},
|
|
677
|
-
}
|
|
683
|
+
};
|
|
684
|
+
if (pageOpts.theme !== undefined) loginOptions.theme = pageOpts.theme;
|
|
685
|
+
if (pageOpts.locales !== undefined) loginOptions.locales = pageOpts.locales;
|
|
686
|
+
if (pageOpts.appLogo !== undefined) loginOptions.appLogo = pageOpts.appLogo;
|
|
687
|
+
if (pageOpts.masterOAuthOrigin !== undefined) loginOptions.masterOAuthOrigin = pageOpts.masterOAuthOrigin;
|
|
688
|
+
if (pageOpts.masterAppName !== undefined) loginOptions.masterAppName = pageOpts.masterAppName;
|
|
689
|
+
if (pageOpts.locale !== undefined) loginOptions.locale = pageOpts.locale;
|
|
690
|
+
var page = new LB.LoginPage(loginRoot, config, http, loginOptions);
|
|
678
691
|
page.mount();
|
|
679
692
|
}
|
|
680
693
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gen-access-key-page.js","sourceRoot":"","sources":["../../src/pages/gen-access-key-page.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAEhD,OAAO,EAAE,iBAAiB,EAAwB,MAAM,cAAc,CAAC;AACvE,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"gen-access-key-page.js","sourceRoot":"","sources":["../../src/pages/gen-access-key-page.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* 1. GET /invitations/:id/info → validate invitation
|
|
8
8
|
* 2. GET /did/session → check if already authenticated
|
|
9
9
|
* 3. If authenticated: "Confirm & Join" button
|
|
10
|
-
* 4. If not:
|
|
10
|
+
* 4. If not: GET login-config and mount LoginPage → on success → accept
|
|
11
11
|
* 5. POST /invitations/:id/accept → redirect to "/"
|
|
12
12
|
*/
|
|
13
13
|
export declare const INVITE_I18N: {
|
|
@@ -30,6 +30,8 @@ export declare const INVITE_I18N: {
|
|
|
30
30
|
readonly invalidFallback: "This invitation is not valid.";
|
|
31
31
|
readonly verifyErrorTitle: "Error";
|
|
32
32
|
readonly verifyErrorMsg: "Failed to verify invitation. Please try again.";
|
|
33
|
+
readonly loginErrorTitle: "Unable to load sign-in";
|
|
34
|
+
readonly loginErrorMsg: "Failed to load sign-in options. Please try again.";
|
|
33
35
|
readonly joining: "Joining...";
|
|
34
36
|
readonly acceptFailed: "Failed to accept invitation";
|
|
35
37
|
};
|
|
@@ -52,6 +54,8 @@ export declare const INVITE_I18N: {
|
|
|
52
54
|
readonly invalidFallback: "此邀请无效。";
|
|
53
55
|
readonly verifyErrorTitle: "出错了";
|
|
54
56
|
readonly verifyErrorMsg: "验证邀请失败,请重试。";
|
|
57
|
+
readonly loginErrorTitle: "无法加载登录";
|
|
58
|
+
readonly loginErrorMsg: "加载登录选项失败,请重试。";
|
|
55
59
|
readonly joining: "正在加入…";
|
|
56
60
|
readonly acceptFailed: "接受邀请失败";
|
|
57
61
|
};
|
|
@@ -74,6 +78,8 @@ export declare const INVITE_I18N: {
|
|
|
74
78
|
readonly invalidFallback: "此邀請無效。";
|
|
75
79
|
readonly verifyErrorTitle: "發生錯誤";
|
|
76
80
|
readonly verifyErrorMsg: "驗證邀請失敗,請再試一次。";
|
|
81
|
+
readonly loginErrorTitle: "無法載入登入";
|
|
82
|
+
readonly loginErrorMsg: "載入登入選項失敗,請再試一次。";
|
|
77
83
|
readonly joining: "正在加入…";
|
|
78
84
|
readonly acceptFailed: "接受邀請失敗";
|
|
79
85
|
};
|
|
@@ -96,12 +102,13 @@ export declare const INVITE_I18N: {
|
|
|
96
102
|
readonly invalidFallback: "この招待は無効です。";
|
|
97
103
|
readonly verifyErrorTitle: "エラー";
|
|
98
104
|
readonly verifyErrorMsg: "招待の確認に失敗しました。もう一度お試しください。";
|
|
105
|
+
readonly loginErrorTitle: "ログインを読み込めません";
|
|
106
|
+
readonly loginErrorMsg: "ログイン方法の読み込みに失敗しました。もう一度お試しください。";
|
|
99
107
|
readonly joining: "参加しています…";
|
|
100
108
|
readonly acceptFailed: "招待の承諾に失敗しました";
|
|
101
109
|
};
|
|
102
110
|
};
|
|
103
111
|
export declare function buildInvitePageHTML(apiBase: string, locale?: string, options?: {
|
|
104
|
-
masterOAuthOrigin?: string;
|
|
105
112
|
appName?: string;
|
|
106
113
|
}): string;
|
|
107
114
|
//# sourceMappingURL=invite-page.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"invite-page.d.ts","sourceRoot":"","sources":["../../src/pages/invite-page.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;
|
|
1
|
+
{"version":3,"file":"invite-page.d.ts","sourceRoot":"","sources":["../../src/pages/invite-page.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAmCH,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiGgC,CAAC;AAEzD,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,MAAM,EACf,MAAM,SAAO,EACb,OAAO,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GAC7B,MAAM,CA8PR"}
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* 1. GET /invitations/:id/info → validate invitation
|
|
8
8
|
* 2. GET /did/session → check if already authenticated
|
|
9
9
|
* 3. If authenticated: "Confirm & Join" button
|
|
10
|
-
* 4. If not:
|
|
10
|
+
* 4. If not: GET login-config and mount LoginPage → on success → accept
|
|
11
11
|
* 5. POST /invitations/:id/accept → redirect to "/"
|
|
12
12
|
*/
|
|
13
13
|
import { assetUrl } from "../asset-registry.js";
|
|
@@ -32,6 +32,8 @@ export const INVITE_I18N = {
|
|
|
32
32
|
invalidFallback: "This invitation is not valid.",
|
|
33
33
|
verifyErrorTitle: "Error",
|
|
34
34
|
verifyErrorMsg: "Failed to verify invitation. Please try again.",
|
|
35
|
+
loginErrorTitle: "Unable to load sign-in",
|
|
36
|
+
loginErrorMsg: "Failed to load sign-in options. Please try again.",
|
|
35
37
|
joining: "Joining...",
|
|
36
38
|
acceptFailed: "Failed to accept invitation",
|
|
37
39
|
},
|
|
@@ -54,6 +56,8 @@ export const INVITE_I18N = {
|
|
|
54
56
|
invalidFallback: "此邀请无效。",
|
|
55
57
|
verifyErrorTitle: "出错了",
|
|
56
58
|
verifyErrorMsg: "验证邀请失败,请重试。",
|
|
59
|
+
loginErrorTitle: "无法加载登录",
|
|
60
|
+
loginErrorMsg: "加载登录选项失败,请重试。",
|
|
57
61
|
joining: "正在加入…",
|
|
58
62
|
acceptFailed: "接受邀请失败",
|
|
59
63
|
},
|
|
@@ -76,6 +80,8 @@ export const INVITE_I18N = {
|
|
|
76
80
|
invalidFallback: "此邀請無效。",
|
|
77
81
|
verifyErrorTitle: "發生錯誤",
|
|
78
82
|
verifyErrorMsg: "驗證邀請失敗,請再試一次。",
|
|
83
|
+
loginErrorTitle: "無法載入登入",
|
|
84
|
+
loginErrorMsg: "載入登入選項失敗,請再試一次。",
|
|
79
85
|
joining: "正在加入…",
|
|
80
86
|
acceptFailed: "接受邀請失敗",
|
|
81
87
|
},
|
|
@@ -98,12 +104,13 @@ export const INVITE_I18N = {
|
|
|
98
104
|
invalidFallback: "この招待は無効です。",
|
|
99
105
|
verifyErrorTitle: "エラー",
|
|
100
106
|
verifyErrorMsg: "招待の確認に失敗しました。もう一度お試しください。",
|
|
107
|
+
loginErrorTitle: "ログインを読み込めません",
|
|
108
|
+
loginErrorMsg: "ログイン方法の読み込みに失敗しました。もう一度お試しください。",
|
|
101
109
|
joining: "参加しています…",
|
|
102
110
|
acceptFailed: "招待の承諾に失敗しました",
|
|
103
111
|
},
|
|
104
112
|
};
|
|
105
113
|
export function buildInvitePageHTML(apiBase, locale = "en", options) {
|
|
106
|
-
const masterOAuthOriginJson = JSON.stringify(options?.masterOAuthOrigin ?? null);
|
|
107
114
|
const { code, htmlLang } = resolvePageLocale(locale);
|
|
108
115
|
const t = INVITE_I18N[code];
|
|
109
116
|
const appName = (options?.appName ?? "App")
|
|
@@ -123,6 +130,8 @@ export function buildInvitePageHTML(apiBase, locale = "en", options) {
|
|
|
123
130
|
invalidFallback: t.invalidFallback,
|
|
124
131
|
verifyErrorTitle: t.verifyErrorTitle,
|
|
125
132
|
verifyErrorMsg: t.verifyErrorMsg,
|
|
133
|
+
loginErrorTitle: t.loginErrorTitle,
|
|
134
|
+
loginErrorMsg: t.loginErrorMsg,
|
|
126
135
|
joining: t.joining,
|
|
127
136
|
acceptFailed: t.acceptFailed,
|
|
128
137
|
});
|
|
@@ -209,7 +218,6 @@ var FetchHttpAdapter = __LoginBundle.FetchHttpAdapter;
|
|
|
209
218
|
|
|
210
219
|
var I18N = ${clientI18n};
|
|
211
220
|
var API_BASE = ${JSON.stringify(apiBase)};
|
|
212
|
-
var MASTER_OAUTH_ORIGIN = ${masterOAuthOriginJson};
|
|
213
221
|
var invitationId = new URLSearchParams(location.search).get("id");
|
|
214
222
|
|
|
215
223
|
function show(id) {
|
|
@@ -319,45 +327,35 @@ async function init() {
|
|
|
319
327
|
// Not authenticated
|
|
320
328
|
}
|
|
321
329
|
|
|
322
|
-
show("valid-state");
|
|
323
|
-
|
|
324
330
|
if (isAuthenticated) {
|
|
331
|
+
show("valid-state");
|
|
325
332
|
// Show confirm button
|
|
326
333
|
document.getElementById("confirm-btn").classList.remove("hidden");
|
|
327
334
|
} else {
|
|
328
|
-
//
|
|
335
|
+
// Methods, providers, theme, and masterOAuthOrigin come from login-config.
|
|
336
|
+
// LoginPage writes <html data-theme> the same way the standalone login page does.
|
|
329
337
|
document.getElementById("card").style.display = "none";
|
|
330
|
-
var
|
|
331
|
-
mountEl.classList.remove("hidden");
|
|
332
|
-
|
|
333
|
-
// Fetch OAuth configs to populate login methods
|
|
334
|
-
var oauthProviders = [];
|
|
338
|
+
var loginConfig;
|
|
335
339
|
try {
|
|
336
|
-
var
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
oauthProviders = oauthData.providers;
|
|
340
|
-
}
|
|
340
|
+
var loginRes = await fetch("/.well-known/service/api/did/login-config");
|
|
341
|
+
if (!loginRes.ok) throw new Error("login-config");
|
|
342
|
+
loginConfig = await loginRes.json();
|
|
341
343
|
} catch (e) {
|
|
342
|
-
|
|
344
|
+
document.getElementById("card").style.display = "";
|
|
345
|
+
showError(I18N.loginErrorTitle, I18N.loginErrorMsg);
|
|
346
|
+
return;
|
|
343
347
|
}
|
|
344
348
|
|
|
345
|
-
var
|
|
346
|
-
|
|
347
|
-
methods.push("email", "did-connect");
|
|
349
|
+
var mountEl = document.getElementById("login-mount");
|
|
350
|
+
mountEl.classList.remove("hidden");
|
|
348
351
|
|
|
349
|
-
var
|
|
350
|
-
var
|
|
351
|
-
var loginPage = new LoginPage(mountEl, { apiPrefix: apiPrefix, servicePrefix: "/.well-known/service" }, http, {
|
|
352
|
-
methods: methods,
|
|
353
|
-
oauthProviders: oauthProviders.map(function(p) { return { id: p.name, name: p.name, enabled: true }; }),
|
|
352
|
+
var http = new FetchHttpAdapter();
|
|
353
|
+
var loginPage = new LoginPage(mountEl, loginConfig.connect, http, Object.assign({}, loginConfig.options, {
|
|
354
354
|
invitationId: invitationId,
|
|
355
|
-
masterOAuthOrigin: MASTER_OAUTH_ORIGIN || undefined,
|
|
356
355
|
onSuccess: function() {
|
|
357
|
-
// Login succeeded — accept invitation
|
|
358
356
|
handleConfirm();
|
|
359
357
|
},
|
|
360
|
-
});
|
|
358
|
+
}));
|
|
361
359
|
loginPage.mount();
|
|
362
360
|
}
|
|
363
361
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"invite-page.js","sourceRoot":"","sources":["../../src/pages/invite-page.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAwB,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"invite-page.js","sourceRoot":"","sources":["../../src/pages/invite-page.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,5 +5,5 @@
|
|
|
5
5
|
* Used by page.ts and invite-page.ts via the generated string constant.
|
|
6
6
|
*/
|
|
7
7
|
export { FetchHttpAdapter } from '@arcblock/did-connect-core';
|
|
8
|
-
export { LoginPage, runPasskeyAuth } from '@arcblock/did-connect-core/ui';
|
|
8
|
+
export { LoginDialog, LoginPage, runPasskeyAuth } from '@arcblock/did-connect-core/ui';
|
|
9
9
|
//# sourceMappingURL=login-bundle-entry.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login-bundle-entry.d.ts","sourceRoot":"","sources":["../../src/pages/login-bundle-entry.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC"}
|
|
1
|
+
{"version":3,"file":"login-bundle-entry.d.ts","sourceRoot":"","sources":["../../src/pages/login-bundle-entry.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC"}
|
|
@@ -5,5 +5,5 @@
|
|
|
5
5
|
* Used by page.ts and invite-page.ts via the generated string constant.
|
|
6
6
|
*/
|
|
7
7
|
export { FetchHttpAdapter } from '@arcblock/did-connect-core';
|
|
8
|
-
export { LoginPage, runPasskeyAuth } from '@arcblock/did-connect-core/ui';
|
|
8
|
+
export { LoginDialog, LoginPage, runPasskeyAuth } from '@arcblock/did-connect-core/ui';
|
|
9
9
|
//# sourceMappingURL=login-bundle-entry.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login-bundle-entry.js","sourceRoot":"","sources":["../../src/pages/login-bundle-entry.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC"}
|
|
1
|
+
{"version":3,"file":"login-bundle-entry.js","sourceRoot":"","sources":["../../src/pages/login-bundle-entry.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC"}
|
|
@@ -5,6 +5,8 @@
|
|
|
5
5
|
* JS uses a pre-built IIFE bundle from core/ui (LoginPage + runPasskeyAuth).
|
|
6
6
|
*/
|
|
7
7
|
export interface RenderLoginPageConfig {
|
|
8
|
+
/** Public instance scope for origin-local method preference, never user identity. */
|
|
9
|
+
preferenceKey?: string;
|
|
8
10
|
/** API prefix for DID Connect endpoints */
|
|
9
11
|
apiPrefix: string;
|
|
10
12
|
/** Application name displayed on login page */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login-page.d.ts","sourceRoot":"","sources":["../../src/pages/login-page.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,MAAM,WAAW,qBAAqB;IACpC,2CAA2C;IAC3C,SAAS,EAAE,MAAM,CAAC;IAClB,+CAA+C;IAC/C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,+CAA+C;IAC/C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iEAAiE;IACjE,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,0BAA0B;IAC1B,cAAc,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACxD,6BAA6B;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,OAAO,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACjD,2BAA2B;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yBAAyB;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,2BAA2B;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kBAAkB;IAClB,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;IAClC,mEAAmE;IACnE,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,gEAAgE;IAChE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;;;OAKG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;
|
|
1
|
+
{"version":3,"file":"login-page.d.ts","sourceRoot":"","sources":["../../src/pages/login-page.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,MAAM,WAAW,qBAAqB;IACpC,qFAAqF;IACrF,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,2CAA2C;IAC3C,SAAS,EAAE,MAAM,CAAC;IAClB,+CAA+C;IAC/C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,+CAA+C;IAC/C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iEAAiE;IACjE,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,0BAA0B;IAC1B,cAAc,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACxD,6BAA6B;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,OAAO,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACjD,2BAA2B;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yBAAyB;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,2BAA2B;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kBAAkB;IAClB,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;IAClC,mEAAmE;IACnE,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,gEAAgE;IAChE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;;;OAKG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAgCD,wBAAgB,eAAe,CAAC,MAAM,EAAE,qBAAqB,GAAG,MAAM,CAsIrE"}
|
package/dist/pages/login-page.js
CHANGED
|
@@ -22,6 +22,17 @@ const SIGN_IN_TITLES = {
|
|
|
22
22
|
"zh-TW": "登入",
|
|
23
23
|
ja: "ログイン",
|
|
24
24
|
};
|
|
25
|
+
/**
|
|
26
|
+
* Fixed purpose titles for `?login_intent=bookmark|comment`.
|
|
27
|
+
* Only enabled locales are serialized into the page. An unpublished language
|
|
28
|
+
* must not appear as copy just because the client knows the intent name.
|
|
29
|
+
*/
|
|
30
|
+
const LOGIN_INTENT_TITLES = {
|
|
31
|
+
en: { bookmark: "Sign in to save this page", comment: "Sign in to write a comment" },
|
|
32
|
+
zh: { bookmark: "登录后收藏此页面", comment: "登录后发表评论" },
|
|
33
|
+
"zh-TW": { bookmark: "登入後收藏此頁面", comment: "登入後發表評論" },
|
|
34
|
+
ja: { bookmark: "ログインしてこのページを保存", comment: "ログインしてコメントを書く" },
|
|
35
|
+
};
|
|
25
36
|
export function renderLoginPage(config) {
|
|
26
37
|
const connectConfig = {
|
|
27
38
|
apiPrefix: config.apiPrefix,
|
|
@@ -30,6 +41,7 @@ export function renderLoginPage(config) {
|
|
|
30
41
|
};
|
|
31
42
|
const locale = config.locale || "en";
|
|
32
43
|
const options = {
|
|
44
|
+
preferenceKey: config.preferenceKey,
|
|
33
45
|
methods: config.methods || ["passkey", "did-connect"],
|
|
34
46
|
oauthProviders: config.oauthProviders,
|
|
35
47
|
locale,
|
|
@@ -48,6 +60,13 @@ export function renderLoginPage(config) {
|
|
|
48
60
|
};
|
|
49
61
|
const configJSON = escapeForScript(JSON.stringify(connectConfig));
|
|
50
62
|
const optionsJSON = escapeForScript(JSON.stringify(options));
|
|
63
|
+
// Omitted locales keep the historical en/zh toggle, so only those titles ship.
|
|
64
|
+
const enabledLocaleCodes = config.locales?.map((item) => item.code) ?? ["en", "zh"];
|
|
65
|
+
const purposeTitles = Object.fromEntries(enabledLocaleCodes.flatMap((code) => {
|
|
66
|
+
const copy = LOGIN_INTENT_TITLES[code];
|
|
67
|
+
return copy ? [[code, copy]] : [];
|
|
68
|
+
}));
|
|
69
|
+
const purposeTitlesJSON = escapeForScript(JSON.stringify(purposeTitles));
|
|
51
70
|
// App-level default for the escape link, overridable per-navigation via ?cancel_to=
|
|
52
71
|
const cancelDefaultJSON = escapeForScript(JSON.stringify(config.cancelUrl || "/"));
|
|
53
72
|
const pageLocale = resolvePageLocale(locale);
|
|
@@ -74,6 +93,14 @@ export function renderLoginPage(config) {
|
|
|
74
93
|
var config = ${configJSON};
|
|
75
94
|
var options = ${optionsJSON};
|
|
76
95
|
var params = new URLSearchParams(location.search);
|
|
96
|
+
// Only bounded intent names affect copy; never render caller-supplied title HTML.
|
|
97
|
+
// purposeTitles contains enabled locales only.
|
|
98
|
+
var intent = params.get('login_intent');
|
|
99
|
+
var purposeTitles = ${purposeTitlesJSON};
|
|
100
|
+
var purposeForLocale = purposeTitles[options.locale] || purposeTitles.en;
|
|
101
|
+
var purposeTitle = purposeForLocale ? purposeForLocale[intent] : undefined;
|
|
102
|
+
if ((intent === 'bookmark' || intent === 'comment') && purposeTitle) options.purpose = { title: purposeTitle };
|
|
103
|
+
|
|
77
104
|
function persistArcLang(lang) {
|
|
78
105
|
document.cookie = 'arc_lang=' + encodeURIComponent(lang) + ';path=/;max-age=31536000;SameSite=Lax';
|
|
79
106
|
}
|
|
@@ -105,6 +132,18 @@ export function renderLoginPage(config) {
|
|
|
105
132
|
location.href = next.toString();
|
|
106
133
|
};
|
|
107
134
|
}
|
|
135
|
+
// ?theme= is a preview and wins. Otherwise localStorage web-mode wins over
|
|
136
|
+
// the server theme (did_connect_theme / arc_mode). LoginPage reads the same
|
|
137
|
+
// keys again; this assignment keeps the bootstrap explicit.
|
|
138
|
+
var urlTheme = params.get('theme');
|
|
139
|
+
if (urlTheme === 'light' || urlTheme === 'dark' || urlTheme === 'auto') {
|
|
140
|
+
options.theme = urlTheme;
|
|
141
|
+
} else {
|
|
142
|
+
try {
|
|
143
|
+
var storedTheme = localStorage.getItem('web-mode');
|
|
144
|
+
if (storedTheme === 'light' || storedTheme === 'dark' || storedTheme === 'auto') options.theme = storedTheme;
|
|
145
|
+
} catch (e) {}
|
|
146
|
+
}
|
|
108
147
|
// Escape hatch destination for the "← Back" link: ?cancel_to= → app default → "/"
|
|
109
148
|
options.homeUrl = resolveSameOrigin(params.get("${CANCEL_TO_PARAM}"), ${cancelDefaultJSON});
|
|
110
149
|
if (options.onSuccess === "__reload__") {
|