@arcblock/did-connect-service 4.0.5 → 4.0.6

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.
Files changed (190) hide show
  1. package/assets/fonts/noto-sans-sc-regular.otf +0 -0
  2. package/dist/embedded.d.ts +32 -0
  3. package/dist/embedded.d.ts.map +1 -1
  4. package/dist/embedded.js +3 -0
  5. package/dist/embedded.js.map +1 -1
  6. package/dist/handlers/auth-handler.d.ts +5 -0
  7. package/dist/handlers/auth-handler.d.ts.map +1 -1
  8. package/dist/handlers/auth-handler.js +1 -22
  9. package/dist/handlers/auth-handler.js.map +1 -1
  10. package/dist/handlers/branding-handler.d.ts +17 -0
  11. package/dist/handlers/branding-handler.d.ts.map +1 -1
  12. package/dist/handlers/branding-handler.js +107 -5
  13. package/dist/handlers/branding-handler.js.map +1 -1
  14. package/dist/identity/gravatar.d.ts +0 -2
  15. package/dist/identity/gravatar.d.ts.map +1 -1
  16. package/dist/identity/gravatar.js +0 -9
  17. package/dist/identity/gravatar.js.map +1 -1
  18. package/dist/og/emoji.d.ts +12 -0
  19. package/dist/og/emoji.d.ts.map +1 -0
  20. package/dist/og/emoji.js +71 -0
  21. package/dist/og/emoji.js.map +1 -0
  22. package/dist/og/generator.d.ts +3 -0
  23. package/dist/og/generator.d.ts.map +1 -0
  24. package/dist/og/generator.js +338 -0
  25. package/dist/og/generator.js.map +1 -0
  26. package/dist/og/index.d.ts +6 -0
  27. package/dist/og/index.d.ts.map +1 -0
  28. package/dist/og/index.js +4 -0
  29. package/dist/og/index.js.map +1 -0
  30. package/dist/og/passport-svg.d.ts +52 -0
  31. package/dist/og/passport-svg.d.ts.map +1 -0
  32. package/dist/og/passport-svg.js +157 -0
  33. package/dist/og/passport-svg.js.map +1 -0
  34. package/dist/og/ssrf-guard.d.ts +38 -0
  35. package/dist/og/ssrf-guard.d.ts.map +1 -0
  36. package/dist/og/ssrf-guard.js +188 -0
  37. package/dist/og/ssrf-guard.js.map +1 -0
  38. package/dist/og/templates.d.ts +26 -0
  39. package/dist/og/templates.d.ts.map +1 -0
  40. package/dist/og/templates.js +302 -0
  41. package/dist/og/templates.js.map +1 -0
  42. package/dist/og/types.d.ts +74 -0
  43. package/dist/og/types.d.ts.map +1 -0
  44. package/dist/og/types.js +14 -0
  45. package/dist/og/types.js.map +1 -0
  46. package/package.json +18 -4
  47. package/dist/access-key-handler.d.ts +0 -37
  48. package/dist/access-key-handler.d.ts.map +0 -1
  49. package/dist/access-key-handler.js +0 -316
  50. package/dist/access-key-handler.js.map +0 -1
  51. package/dist/access-key-util.d.ts +0 -19
  52. package/dist/access-key-util.d.ts.map +0 -1
  53. package/dist/access-key-util.js +0 -45
  54. package/dist/access-key-util.js.map +0 -1
  55. package/dist/access-policy.d.ts +0 -53
  56. package/dist/access-policy.d.ts.map +0 -1
  57. package/dist/access-policy.js +0 -153
  58. package/dist/access-policy.js.map +0 -1
  59. package/dist/auth-client.d.ts +0 -20
  60. package/dist/auth-client.d.ts.map +0 -1
  61. package/dist/auth-client.js +0 -42
  62. package/dist/auth-client.js.map +0 -1
  63. package/dist/auth-entrypoint.d.ts +0 -45
  64. package/dist/auth-entrypoint.d.ts.map +0 -1
  65. package/dist/auth-entrypoint.js +0 -31
  66. package/dist/auth-entrypoint.js.map +0 -1
  67. package/dist/auth-handler.d.ts +0 -136
  68. package/dist/auth-handler.d.ts.map +0 -1
  69. package/dist/auth-handler.js +0 -408
  70. package/dist/auth-handler.js.map +0 -1
  71. package/dist/auth-rpc-types.d.ts +0 -139
  72. package/dist/auth-rpc-types.d.ts.map +0 -1
  73. package/dist/auth-rpc-types.js +0 -11
  74. package/dist/auth-rpc-types.js.map +0 -1
  75. package/dist/auth-rpc.d.ts +0 -80
  76. package/dist/auth-rpc.d.ts.map +0 -1
  77. package/dist/auth-rpc.js +0 -257
  78. package/dist/auth-rpc.js.map +0 -1
  79. package/dist/auth-worker.d.ts +0 -42
  80. package/dist/auth-worker.d.ts.map +0 -1
  81. package/dist/auth-worker.js +0 -120
  82. package/dist/auth-worker.js.map +0 -1
  83. package/dist/blocklet-js-handler.d.ts +0 -22
  84. package/dist/blocklet-js-handler.d.ts.map +0 -1
  85. package/dist/blocklet-js-handler.js +0 -205
  86. package/dist/blocklet-js-handler.js.map +0 -1
  87. package/dist/branding-handler.d.ts +0 -42
  88. package/dist/branding-handler.d.ts.map +0 -1
  89. package/dist/branding-handler.js +0 -326
  90. package/dist/branding-handler.js.map +0 -1
  91. package/dist/d1-token-storage.d.ts +0 -31
  92. package/dist/d1-token-storage.d.ts.map +0 -1
  93. package/dist/d1-token-storage.js +0 -83
  94. package/dist/d1-token-storage.js.map +0 -1
  95. package/dist/did-connect-handler.d.ts +0 -57
  96. package/dist/did-connect-handler.d.ts.map +0 -1
  97. package/dist/did-connect-handler.js +0 -182
  98. package/dist/did-connect-handler.js.map +0 -1
  99. package/dist/did.d.ts +0 -14
  100. package/dist/did.d.ts.map +0 -1
  101. package/dist/did.js +0 -17
  102. package/dist/did.js.map +0 -1
  103. package/dist/email-login-handler.d.ts +0 -50
  104. package/dist/email-login-handler.d.ts.map +0 -1
  105. package/dist/email-login-handler.js +0 -238
  106. package/dist/email-login-handler.js.map +0 -1
  107. package/dist/federation-utils.d.ts +0 -23
  108. package/dist/federation-utils.d.ts.map +0 -1
  109. package/dist/federation-utils.js +0 -25
  110. package/dist/federation-utils.js.map +0 -1
  111. package/dist/handler.d.ts +0 -90
  112. package/dist/handler.d.ts.map +0 -1
  113. package/dist/handler.js +0 -591
  114. package/dist/handler.js.map +0 -1
  115. package/dist/identity/invitation-util.d.ts +0 -7
  116. package/dist/identity/invitation-util.d.ts.map +0 -1
  117. package/dist/identity/invitation-util.js +0 -66
  118. package/dist/identity/invitation-util.js.map +0 -1
  119. package/dist/instance-role.d.ts +0 -10
  120. package/dist/instance-role.d.ts.map +0 -1
  121. package/dist/instance-role.js +0 -20
  122. package/dist/instance-role.js.map +0 -1
  123. package/dist/jwt.d.ts +0 -7
  124. package/dist/jwt.d.ts.map +0 -1
  125. package/dist/jwt.js +0 -72
  126. package/dist/jwt.js.map +0 -1
  127. package/dist/login-entry.d.ts +0 -9
  128. package/dist/login-entry.d.ts.map +0 -1
  129. package/dist/login-entry.js +0 -9
  130. package/dist/login-entry.js.map +0 -1
  131. package/dist/membership-handler.d.ts +0 -27
  132. package/dist/membership-handler.d.ts.map +0 -1
  133. package/dist/membership-handler.js +0 -111
  134. package/dist/membership-handler.js.map +0 -1
  135. package/dist/oauth-callback-page.d.ts +0 -9
  136. package/dist/oauth-callback-page.d.ts.map +0 -1
  137. package/dist/oauth-callback-page.js +0 -31
  138. package/dist/oauth-callback-page.js.map +0 -1
  139. package/dist/oauth-handler.d.ts +0 -72
  140. package/dist/oauth-handler.d.ts.map +0 -1
  141. package/dist/oauth-handler.js +0 -423
  142. package/dist/oauth-handler.js.map +0 -1
  143. package/dist/page.d.ts +0 -33
  144. package/dist/page.d.ts.map +0 -1
  145. package/dist/page.js +0 -59
  146. package/dist/page.js.map +0 -1
  147. package/dist/pages/auth-script.d.ts +0 -18
  148. package/dist/pages/auth-script.d.ts.map +0 -1
  149. package/dist/pages/auth-script.js +0 -185
  150. package/dist/pages/auth-script.js.map +0 -1
  151. package/dist/pages/design-tokens.d.ts +0 -86
  152. package/dist/pages/design-tokens.d.ts.map +0 -1
  153. package/dist/pages/design-tokens.js +0 -159
  154. package/dist/pages/design-tokens.js.map +0 -1
  155. package/dist/pages/did-connect-script.d.ts +0 -16
  156. package/dist/pages/did-connect-script.d.ts.map +0 -1
  157. package/dist/pages/did-connect-script.js +0 -105
  158. package/dist/pages/did-connect-script.js.map +0 -1
  159. package/dist/pages/shared-styles.d.ts +0 -6
  160. package/dist/pages/shared-styles.d.ts.map +0 -1
  161. package/dist/pages/shared-styles.js +0 -109
  162. package/dist/pages/shared-styles.js.map +0 -1
  163. package/dist/rbac.d.ts +0 -19
  164. package/dist/rbac.d.ts.map +0 -1
  165. package/dist/rbac.js +0 -76
  166. package/dist/rbac.js.map +0 -1
  167. package/dist/session-context.d.ts +0 -35
  168. package/dist/session-context.d.ts.map +0 -1
  169. package/dist/session-context.js +0 -39
  170. package/dist/session-context.js.map +0 -1
  171. package/dist/store.d.ts +0 -222
  172. package/dist/store.d.ts.map +0 -1
  173. package/dist/store.js +0 -1366
  174. package/dist/store.js.map +0 -1
  175. package/dist/team-handler.d.ts +0 -90
  176. package/dist/team-handler.d.ts.map +0 -1
  177. package/dist/team-handler.js +0 -1225
  178. package/dist/team-handler.js.map +0 -1
  179. package/dist/ticket-handler.d.ts +0 -28
  180. package/dist/ticket-handler.d.ts.map +0 -1
  181. package/dist/ticket-handler.js +0 -74
  182. package/dist/ticket-handler.js.map +0 -1
  183. package/dist/wallet-identity.d.ts +0 -32
  184. package/dist/wallet-identity.d.ts.map +0 -1
  185. package/dist/wallet-identity.js +0 -43
  186. package/dist/wallet-identity.js.map +0 -1
  187. package/dist/webauthn.d.ts +0 -65
  188. package/dist/webauthn.d.ts.map +0 -1
  189. package/dist/webauthn.js +0 -112
  190. package/dist/webauthn.js.map +0 -1
package/dist/handler.js DELETED
@@ -1,591 +0,0 @@
1
- /**
2
- * Auth — Core auth handler for Cloudflare Workers.
3
- *
4
- * Routes (prefix-stripped, under /.well-known/service/api/passkey):
5
- * GET /register — Generate registration challenge options
6
- * POST /register — Verify registration credential, create user, issue JWT
7
- * GET /auth — Generate authentication challenge options
8
- * POST /auth — Verify authentication credential, issue JWT
9
- *
10
- * Session and logout are handled by auth-handler at /did/session and /did/logout.
11
- */
12
- import { deriveAccessKeyId, isAccessKeyToken } from "./access/access-key-util.js";
13
- import { LOGIN_PROVIDER } from "./constants.js";
14
- import { derivePasskeyDID } from "./identity/passkey-did.js";
15
- import { signJWT, verifyJWT } from "./identity/jwt.js";
16
- import { renderLoginPage } from "./pages/login-page.js";
17
- import { generateChallengeOptions, verifyAuthentication, verifyRegistration } from "./identity/webauthn.js";
18
- const DEFAULT_COOKIE_NAME = "login_token";
19
- const DEFAULT_EXPIRES_IN = 7 * 24 * 60 * 60; // 7 days
20
- const MAX_NAME_LENGTH = 64;
21
- /** Sanitize and validate user-provided name. */
22
- function sanitizeName(raw) {
23
- if (!raw)
24
- return undefined;
25
- // Strip control chars (C0 range + DEL), trim, limit length
26
- let clean = "";
27
- for (const ch of raw) {
28
- const code = ch.charCodeAt(0);
29
- if (code >= 0x20 && code !== 0x7f)
30
- clean += ch;
31
- }
32
- clean = clean.trim().slice(0, MAX_NAME_LENGTH);
33
- return clean || undefined;
34
- }
35
- function jsonResponse(data, status = 200, headers) {
36
- return new Response(JSON.stringify(data), {
37
- status,
38
- headers: {
39
- "Content-Type": "application/json",
40
- "Cache-Control": "private, no-store",
41
- ...headers,
42
- },
43
- });
44
- }
45
- function errorResponse(message, status = 400) {
46
- return jsonResponse({ error: message }, status);
47
- }
48
- /**
49
- * Extract Bearer token from Authorization header and resolve access key caller.
50
- * Returns null if no access key token or if validation fails.
51
- */
52
- export async function resolveAccessKeyCaller(request, store, instanceDid) {
53
- const authHeader = request.headers.get("Authorization");
54
- if (!authHeader)
55
- return null;
56
- const token = authHeader.replace(/^Bearer\s+/i, "").trim();
57
- if (!isAccessKeyToken(token))
58
- return null;
59
- const accessKeyId = deriveAccessKeyId(token);
60
- if (!accessKeyId)
61
- return null;
62
- const key = await store.getAccessKeyById(accessKeyId);
63
- if (!key)
64
- return null;
65
- // Check expiration
66
- if (key.expireAt && new Date(key.expireAt) < new Date())
67
- return null;
68
- // Instance ownership check (D7): instance-scoped key must match instanceDid
69
- if (instanceDid && key.instanceDid && key.instanceDid !== instanceDid) {
70
- return null; // key belongs to a different instance
71
- }
72
- // Check creator exists and is not blocked
73
- const creator = await store.getUserByDid(key.createdBy);
74
- if (!creator)
75
- return null;
76
- // Fire-and-forget: update lastUsedAt
77
- store.refreshAccessKeyLastUsed(accessKeyId).catch(() => { });
78
- return {
79
- did: creator.did,
80
- pk: creator.pk,
81
- role: key.role,
82
- displayName: creator.fullName ?? undefined,
83
- blocked: !creator.approved,
84
- accessKeyId,
85
- };
86
- }
87
- export class Auth {
88
- store;
89
- jwtSecret;
90
- rpName;
91
- rpID;
92
- jwtExpiresIn;
93
- cookieName;
94
- constructor(options) {
95
- this.store = options.store;
96
- this.jwtSecret = options.jwtSecret;
97
- this.rpName = options.rpName;
98
- this.rpID = options.rpID;
99
- this.jwtExpiresIn = options.jwtExpiresIn ?? DEFAULT_EXPIRES_IN;
100
- this.cookieName = options.cookieName ?? DEFAULT_COOKIE_NAME;
101
- }
102
- /** Expose the store for sharing with TeamHandler. */
103
- getStore() {
104
- return this.store;
105
- }
106
- /**
107
- * Handle auth API requests. Expects the prefix to be already stripped —
108
- * internally matches /register (GET/POST) and /auth (GET/POST).
109
- */
110
- async fetch(request) {
111
- const url = new URL(request.url);
112
- // Strip the well-known prefix to get internal route
113
- const path = url.pathname.replace("/.well-known/service/api/passkey", "");
114
- if (path === "/register" && request.method === "GET") {
115
- return this.handleRegisterRequest(request);
116
- }
117
- if (path === "/register" && request.method === "POST") {
118
- return this.handleRegisterResponse(request);
119
- }
120
- if (path === "/auth" && request.method === "GET") {
121
- return this.handleAuthRequest(request);
122
- }
123
- if (path === "/auth" && request.method === "POST") {
124
- return this.handleAuthResponse(request);
125
- }
126
- return errorResponse("Not found", 404);
127
- }
128
- /** Verify JWT from cookie — hot path, pure crypto, no D1. */
129
- async verify(request) {
130
- const cookie = request.headers.get("Cookie");
131
- if (!cookie)
132
- return null;
133
- const token = this.extractCookie(cookie);
134
- if (!token)
135
- return null;
136
- const payload = await verifyJWT(token, this.jwtSecret);
137
- if (!payload || !payload.did || !payload.pk)
138
- return null;
139
- return {
140
- did: payload.did,
141
- pk: payload.pk,
142
- displayName: payload.displayName,
143
- };
144
- }
145
- /**
146
- * Full verification: access key (Bearer) first, then JWT + DB check.
147
- * Returns null if neither auth method succeeds, or if user is blocked/deleted.
148
- */
149
- async verifyFull(request) {
150
- // Try access key auth first
151
- const akCaller = await this.verifyAccessKey(request);
152
- if (akCaller)
153
- return akCaller;
154
- // Fall back to JWT auth
155
- const caller = await this.verify(request);
156
- if (!caller)
157
- return null;
158
- const user = await this.store.getUserByDid(caller.did);
159
- if (!user || !user.approved)
160
- return null;
161
- return {
162
- ...caller,
163
- displayName: user.fullName ?? caller.displayName,
164
- role: user.role ?? "guest",
165
- };
166
- }
167
- /**
168
- * Verify access key from Authorization: Bearer header.
169
- * Returns CallerIdentity with the key's role, or null.
170
- */
171
- async verifyAccessKey(request) {
172
- const resolved = await resolveAccessKeyCaller(request, this.store);
173
- if (!resolved || resolved.blocked)
174
- return null;
175
- return {
176
- did: resolved.did,
177
- pk: resolved.pk,
178
- displayName: resolved.displayName,
179
- role: resolved.role,
180
- };
181
- }
182
- /** Return the login page HTML, filtering methods by builtin-providers settings. */
183
- async getLoginPage(instanceDid, overrides) {
184
- // Read builtin-providers config to filter methods
185
- let methods = overrides?.methods;
186
- if (instanceDid) {
187
- try {
188
- const raw = await this.store.getSetting(instanceDid, "auth:builtin-providers");
189
- if (raw) {
190
- const config = JSON.parse(raw);
191
- // Build methods based on what's enabled, keeping existing order
192
- const methodMap = { passkey: "passkey", "did-connect": "wallet", email: "email" };
193
- if (methods) {
194
- methods = methods.filter((m) => {
195
- const configKey = methodMap[m];
196
- if (!configKey)
197
- return true; // oauth and unknown methods pass through
198
- const entry = config[configKey];
199
- return !entry || entry.enabled !== false;
200
- });
201
- }
202
- }
203
- }
204
- catch {
205
- // On error, keep all methods enabled (safe degradation)
206
- }
207
- }
208
- // Read branding data (name + logo) from D1
209
- let appName = this.rpName;
210
- let appLogo;
211
- if (instanceDid) {
212
- try {
213
- const [brandingRaw, logosRaw] = await Promise.all([
214
- this.store.getSetting(instanceDid, "app:branding"),
215
- this.store.getSetting(instanceDid, "app:logos"),
216
- ]);
217
- if (brandingRaw) {
218
- const branding = JSON.parse(brandingRaw);
219
- if (branding.name)
220
- appName = branding.name;
221
- }
222
- if (logosRaw) {
223
- const logos = JSON.parse(logosRaw);
224
- if (logos.square)
225
- appLogo = "/.well-known/service/blocklet/logo";
226
- }
227
- }
228
- catch {
229
- // On error, use defaults
230
- }
231
- }
232
- const html = renderLoginPage({
233
- apiPrefix: "/.well-known/service/api/did",
234
- appName,
235
- appLogo,
236
- methods,
237
- oauthProviders: overrides?.oauthProviders,
238
- });
239
- return new Response(html, {
240
- headers: {
241
- "Content-Type": "text/html; charset=utf-8",
242
- "Cache-Control": "private, no-store",
243
- },
244
- });
245
- }
246
- // ─── Internal route handlers ────────────────────────────────────────
247
- /** GET /register — Generate registration challenge options.
248
- * Always returns options (even when registration is gated) because:
249
- * - Re-registration of existing passkeys bypasses the gate
250
- * - The registrationAllowed flag lets the client show/hide UI
251
- * - The actual gate is enforced at POST /register time */
252
- async handleRegisterRequest(request) {
253
- const rpID = this.getRPID(request);
254
- const challengeId = crypto.randomUUID();
255
- const challenge = crypto.randomUUID();
256
- const url = new URL(request.url);
257
- const userName = sanitizeName(url.searchParams.get("name") ?? undefined);
258
- const invitationId = url.searchParams.get("invitationId") ?? undefined;
259
- const registrationAllowed = await this.checkRegistrationEligibility(invitationId);
260
- await this.store.saveChallenge(challengeId, challenge, invitationId);
261
- this.store.purgeExpiredChallenges().catch(() => { });
262
- const options = await generateChallengeOptions({
263
- rpID,
264
- rpName: this.rpName,
265
- challenge,
266
- userName,
267
- });
268
- return jsonResponse({
269
- challengeId,
270
- registration: options.registration,
271
- registrationAllowed,
272
- });
273
- }
274
- /** POST /register — Verify registration credential, create user, issue JWT. */
275
- async handleRegisterResponse(request) {
276
- const body = (await request.json());
277
- const { challengeId, credential } = body;
278
- if (!challengeId || !credential) {
279
- return errorResponse("Missing required fields");
280
- }
281
- const userName = sanitizeName(body.name);
282
- const stored = await this.store.getChallenge(challengeId);
283
- if (!stored) {
284
- return errorResponse("Invalid or expired challenge");
285
- }
286
- await this.store.deleteChallenge(challengeId);
287
- const { challenge, invitationId } = stored;
288
- const rpID = this.getRPID(request);
289
- const requestUrl = new URL(request.url);
290
- const origin = request.headers.get("Origin") || requestUrl.origin;
291
- const ip = request.headers.get("CF-Connecting-IP") ?? undefined;
292
- const hostname = requestUrl.hostname;
293
- const cookieDomain = this.rpID ? rpID : undefined;
294
- const ctx = {
295
- expectedChallenge: challenge,
296
- expectedOrigin: origin,
297
- expectedRPID: rpID,
298
- ip,
299
- hostname,
300
- cookieDomain,
301
- request,
302
- };
303
- try {
304
- return await this.handleRegistrationVerify(credential, ctx, userName, invitationId ?? undefined);
305
- }
306
- catch (err) {
307
- const message = err instanceof Error ? err.message : "Registration verification failed";
308
- return errorResponse(message);
309
- }
310
- }
311
- /** GET /auth — Generate authentication challenge options. */
312
- async handleAuthRequest(request) {
313
- const rpID = this.getRPID(request);
314
- const challengeId = crypto.randomUUID();
315
- const challenge = crypto.randomUUID();
316
- await this.store.saveChallenge(challengeId, challenge);
317
- this.store.purgeExpiredChallenges().catch(() => { });
318
- const options = await generateChallengeOptions({
319
- rpID,
320
- rpName: this.rpName,
321
- challenge,
322
- });
323
- return jsonResponse({
324
- challengeId,
325
- authentication: options.authentication,
326
- });
327
- }
328
- /** POST /auth — Verify authentication credential, issue JWT. */
329
- async handleAuthResponse(request) {
330
- const body = (await request.json());
331
- const { challengeId, credential } = body;
332
- if (!challengeId || !credential) {
333
- return errorResponse("Missing required fields");
334
- }
335
- const stored = await this.store.getChallenge(challengeId);
336
- if (!stored) {
337
- return errorResponse("Invalid or expired challenge");
338
- }
339
- await this.store.deleteChallenge(challengeId);
340
- const { challenge } = stored;
341
- const rpID = this.getRPID(request);
342
- const requestUrl = new URL(request.url);
343
- const origin = request.headers.get("Origin") || requestUrl.origin;
344
- const ip = request.headers.get("CF-Connecting-IP") ?? undefined;
345
- const hostname = requestUrl.hostname;
346
- const cookieDomain = this.rpID ? rpID : undefined;
347
- const ctx = {
348
- expectedChallenge: challenge,
349
- expectedOrigin: origin,
350
- expectedRPID: rpID,
351
- ip,
352
- hostname,
353
- cookieDomain,
354
- request,
355
- };
356
- try {
357
- return await this.handleAuthenticationVerify(credential, ctx);
358
- }
359
- catch (err) {
360
- const message = err instanceof Error ? err.message : "Authentication verification failed";
361
- return errorResponse(message);
362
- }
363
- }
364
- async handleRegistrationVerify(credential, ctx, userName, invitationId) {
365
- const { expectedChallenge, expectedOrigin, expectedRPID, ip, hostname, cookieDomain, request } = ctx;
366
- const verification = await verifyRegistration({
367
- response: credential,
368
- expectedChallenge,
369
- expectedOrigin,
370
- expectedRPID,
371
- });
372
- if (!verification.verified || !verification.registrationInfo) {
373
- return errorResponse("Registration verification failed");
374
- }
375
- const { credential: regCredential, credentialDeviceType, credentialBackedUp, } = verification.registrationInfo;
376
- const publicKeyBytes = regCredential.publicKey;
377
- const credentialId = regCredential.id;
378
- // Derive DID from passkey public key
379
- const passkeyDid = derivePasskeyDID(publicKeyBytes);
380
- const pkBase64 = uint8ArrayToBase64(publicKeyBytes);
381
- // Check if this passkey already exists (re-registration)
382
- const existing = await this.store.getConnectedAccountByDid(passkeyDid);
383
- if (existing) {
384
- // Treat as login for existing passkey
385
- await this.store.updateLastLogin(existing.userDid, ip, hostname);
386
- const user = await this.store.getUserByDid(existing.userDid);
387
- // Audit log: re-registration login
388
- await this.store.createAuditLog({
389
- action: "user.login",
390
- operatorDid: existing.userDid,
391
- metadata: { source: "passkey", type: "re-registration", domain: hostname },
392
- ip,
393
- });
394
- return this.issueJWT(existing.userDid, existing.pk ?? pkBase64, user?.fullName ?? undefined, user?.role ?? undefined, cookieDomain, request);
395
- }
396
- // Server-side registration gate (L2 defense)
397
- const eligible = await this.checkRegistrationEligibility(invitationId);
398
- if (!eligible) {
399
- await this.store.createAuditLog({
400
- action: "user.register_blocked",
401
- operatorDid: passkeyDid,
402
- metadata: {
403
- source: "passkey",
404
- reason: "registration_closed",
405
- invitationId: invitationId ?? null,
406
- domain: hostname,
407
- },
408
- ip,
409
- });
410
- return errorResponse("Registration is not allowed. An invitation is required.", 403);
411
- }
412
- // New registration: user DID = first passkey DID
413
- const userDid = passkeyDid;
414
- await this.store.createUser({
415
- did: userDid,
416
- pk: pkBase64,
417
- fullName: userName,
418
- sourceProvider: LOGIN_PROVIDER.PASSKEY,
419
- ip,
420
- domain: hostname,
421
- });
422
- const transports = credential?.response
423
- ?.transports;
424
- await this.store.createConnectedAccount({
425
- did: passkeyDid,
426
- pk: pkBase64,
427
- userDid,
428
- provider: "passkey",
429
- id: credentialId,
430
- extra: JSON.stringify({
431
- transports,
432
- rpID: expectedRPID,
433
- credentialDeviceType,
434
- credentialBackedUp,
435
- }),
436
- userInfo: JSON.stringify({ name: userName || "Passkey User" }),
437
- ip,
438
- });
439
- await this.store.incrementPasskeyCount(userDid);
440
- // First-user-is-owner: check if this is the only user
441
- const userCount = await this.store.getUserCount();
442
- let role;
443
- if (userCount === 1) {
444
- await this.store.updateUserRole(userDid, "owner");
445
- role = "owner";
446
- }
447
- // Audit log: new registration
448
- await this.store.createAuditLog({
449
- action: "user.register",
450
- operatorDid: userDid,
451
- metadata: { role: role ?? "guest", source: "passkey", domain: hostname },
452
- ip,
453
- });
454
- return this.issueJWT(userDid, pkBase64, userName, role, cookieDomain, request);
455
- }
456
- async handleAuthenticationVerify(credential, ctx) {
457
- const { expectedChallenge, expectedOrigin, expectedRPID, ip, hostname, cookieDomain, request } = ctx;
458
- const credentialData = credential;
459
- const credentialId = credentialData.id;
460
- // Look up stored passkey by credential ID
461
- const stored = await this.store.getConnectedAccountById(credentialId);
462
- if (!stored || !stored.extra) {
463
- return errorResponse("Unknown credential");
464
- }
465
- const extra = JSON.parse(stored.extra);
466
- // Reconstruct public key from base64
467
- const publicKey = base64ToUint8Array(stored.pk ?? "");
468
- const verification = await verifyAuthentication({
469
- response: credential,
470
- expectedChallenge,
471
- expectedOrigin,
472
- expectedRPID,
473
- credential: {
474
- id: credentialId,
475
- publicKey,
476
- counter: stored.counter,
477
- transports: extra.transports,
478
- },
479
- });
480
- if (!verification.verified) {
481
- return errorResponse("Authentication verification failed");
482
- }
483
- // Update counter and last login
484
- await this.store.updateCounter(stored.did, verification.authenticationInfo.newCounter);
485
- await this.store.updateLastLogin(stored.userDid, ip, hostname);
486
- const user = await this.store.getUserByDid(stored.userDid);
487
- // Audit log: login
488
- await this.store.createAuditLog({
489
- action: "user.login",
490
- operatorDid: stored.userDid,
491
- metadata: { source: "passkey", domain: hostname },
492
- ip,
493
- });
494
- return this.issueJWT(stored.userDid, stored.pk ?? "", user?.fullName ?? undefined, user?.role ?? undefined, cookieDomain, request);
495
- }
496
- /** Clear auth cookie. GET → redirect to /, POST → JSON response. */
497
- logout(request) {
498
- const cookieDomain = this.rpID ? this.getRPID(request) : undefined;
499
- const isSecure = new URL(request.url).protocol === "https:";
500
- const securePart = isSecure ? " Secure;" : "";
501
- let clearCookie = `${this.cookieName}=; Path=/; HttpOnly;${securePart} SameSite=Lax; Max-Age=0`;
502
- if (cookieDomain?.includes("."))
503
- clearCookie += `; Domain=${cookieDomain}`;
504
- if (request.method === "GET") {
505
- return new Response('<html><head><meta http-equiv="refresh" content="0;url=/"></head></html>', {
506
- headers: {
507
- "Set-Cookie": clearCookie,
508
- "Content-Type": "text/html; charset=utf-8",
509
- },
510
- });
511
- }
512
- return jsonResponse({ ok: true }, 200, { "Set-Cookie": clearCookie });
513
- }
514
- // ─── Registration eligibility ──────────────────────────────────────
515
- /**
516
- * Determine if passkey registration should be allowed.
517
- *
518
- * Returns true if ANY of:
519
- * 1. No users exist (first user becomes owner)
520
- * 2. Default access policy is "public"
521
- * 3. A valid invitation is presented
522
- */
523
- async checkRegistrationEligibility(invitationId) {
524
- const userCount = await this.store.getUserCount();
525
- if (userCount === 0)
526
- return true;
527
- const isOpen = await this.store.isRegistrationOpen();
528
- if (isOpen)
529
- return true;
530
- if (invitationId) {
531
- const invitation = await this.store.getInvitation(invitationId);
532
- if (invitation &&
533
- invitation.status === "active" &&
534
- new Date(invitation.expireAt) > new Date() &&
535
- invitation.useCount < invitation.maxUses) {
536
- return true;
537
- }
538
- }
539
- return false;
540
- }
541
- // ─── Helpers ────────────────────────────────────────────────────────
542
- async issueJWT(did, pk, displayName, role, cookieDomain, request) {
543
- const payload = { did, pk };
544
- if (displayName)
545
- payload.displayName = displayName;
546
- if (role)
547
- payload.role = role;
548
- const token = await signJWT(payload, this.jwtSecret, this.jwtExpiresIn);
549
- const maxAge = this.jwtExpiresIn;
550
- const isSecure = !request || new URL(request.url).protocol === "https:";
551
- const securePart = isSecure ? " Secure;" : "";
552
- let cookie = `${this.cookieName}=${token}; Path=/; HttpOnly;${securePart} SameSite=Lax; Max-Age=${maxAge}`;
553
- if (cookieDomain?.includes("."))
554
- cookie += `; Domain=${cookieDomain}`;
555
- return jsonResponse({ ok: true, did }, 200, { "Set-Cookie": cookie });
556
- }
557
- getRPID(request) {
558
- if (typeof this.rpID === "function")
559
- return this.rpID(request);
560
- if (this.rpID)
561
- return this.rpID;
562
- return new URL(request.url).hostname;
563
- }
564
- extractCookie(cookieHeader) {
565
- const prefix = `${this.cookieName}=`;
566
- const cookies = cookieHeader.split(";");
567
- for (const cookie of cookies) {
568
- const trimmed = cookie.trim();
569
- if (trimmed.startsWith(prefix)) {
570
- return trimmed.slice(prefix.length);
571
- }
572
- }
573
- return null;
574
- }
575
- }
576
- function uint8ArrayToBase64(bytes) {
577
- let binary = "";
578
- for (let i = 0; i < bytes.length; i++) {
579
- binary += String.fromCharCode(bytes[i]);
580
- }
581
- return btoa(binary);
582
- }
583
- function base64ToUint8Array(base64) {
584
- const binary = atob(base64);
585
- const bytes = new Uint8Array(binary.length);
586
- for (let i = 0; i < binary.length; i++) {
587
- bytes[i] = binary.charCodeAt(i);
588
- }
589
- return bytes;
590
- }
591
- //# sourceMappingURL=handler.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"handler.js","sourceRoot":"","sources":["../src/handler.ts"],"names":[],"mappings":"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"}
@@ -1,7 +0,0 @@
1
- import type { D1Store } from "../store/d1-store.js";
2
- import type { Role } from "../types.js";
3
- export declare function processPendingInvitation(store: D1Store, userDid: string, invitationId: string | undefined, currentInstanceDid: string | undefined, ip?: string): Promise<{
4
- role?: Role;
5
- inviterDid?: string;
6
- } | undefined>;
7
- //# sourceMappingURL=invitation-util.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"invitation-util.d.ts","sourceRoot":"","sources":["../../src/identity/invitation-util.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAExC,wBAAsB,wBAAwB,CAC5C,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,GAAG,SAAS,EAChC,kBAAkB,EAAE,MAAM,GAAG,SAAS,EACtC,EAAE,CAAC,EAAE,MAAM,GACV,OAAO,CAAC;IAAE,IAAI,CAAC,EAAE,IAAI,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAAC,CAiE3D"}