@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.
- package/assets/fonts/noto-sans-sc-regular.otf +0 -0
- package/dist/embedded.d.ts +32 -0
- package/dist/embedded.d.ts.map +1 -1
- package/dist/embedded.js +3 -0
- package/dist/embedded.js.map +1 -1
- package/dist/handlers/auth-handler.d.ts +5 -0
- package/dist/handlers/auth-handler.d.ts.map +1 -1
- package/dist/handlers/auth-handler.js +1 -22
- package/dist/handlers/auth-handler.js.map +1 -1
- package/dist/handlers/branding-handler.d.ts +17 -0
- package/dist/handlers/branding-handler.d.ts.map +1 -1
- package/dist/handlers/branding-handler.js +107 -5
- package/dist/handlers/branding-handler.js.map +1 -1
- package/dist/identity/gravatar.d.ts +0 -2
- package/dist/identity/gravatar.d.ts.map +1 -1
- package/dist/identity/gravatar.js +0 -9
- package/dist/identity/gravatar.js.map +1 -1
- package/dist/og/emoji.d.ts +12 -0
- package/dist/og/emoji.d.ts.map +1 -0
- package/dist/og/emoji.js +71 -0
- package/dist/og/emoji.js.map +1 -0
- package/dist/og/generator.d.ts +3 -0
- package/dist/og/generator.d.ts.map +1 -0
- package/dist/og/generator.js +338 -0
- package/dist/og/generator.js.map +1 -0
- package/dist/og/index.d.ts +6 -0
- package/dist/og/index.d.ts.map +1 -0
- package/dist/og/index.js +4 -0
- package/dist/og/index.js.map +1 -0
- package/dist/og/passport-svg.d.ts +52 -0
- package/dist/og/passport-svg.d.ts.map +1 -0
- package/dist/og/passport-svg.js +157 -0
- package/dist/og/passport-svg.js.map +1 -0
- package/dist/og/ssrf-guard.d.ts +38 -0
- package/dist/og/ssrf-guard.d.ts.map +1 -0
- package/dist/og/ssrf-guard.js +188 -0
- package/dist/og/ssrf-guard.js.map +1 -0
- package/dist/og/templates.d.ts +26 -0
- package/dist/og/templates.d.ts.map +1 -0
- package/dist/og/templates.js +302 -0
- package/dist/og/templates.js.map +1 -0
- package/dist/og/types.d.ts +74 -0
- package/dist/og/types.d.ts.map +1 -0
- package/dist/og/types.js +14 -0
- package/dist/og/types.js.map +1 -0
- package/package.json +18 -4
- package/dist/access-key-handler.d.ts +0 -37
- package/dist/access-key-handler.d.ts.map +0 -1
- package/dist/access-key-handler.js +0 -316
- package/dist/access-key-handler.js.map +0 -1
- package/dist/access-key-util.d.ts +0 -19
- package/dist/access-key-util.d.ts.map +0 -1
- package/dist/access-key-util.js +0 -45
- package/dist/access-key-util.js.map +0 -1
- package/dist/access-policy.d.ts +0 -53
- package/dist/access-policy.d.ts.map +0 -1
- package/dist/access-policy.js +0 -153
- package/dist/access-policy.js.map +0 -1
- package/dist/auth-client.d.ts +0 -20
- package/dist/auth-client.d.ts.map +0 -1
- package/dist/auth-client.js +0 -42
- package/dist/auth-client.js.map +0 -1
- package/dist/auth-entrypoint.d.ts +0 -45
- package/dist/auth-entrypoint.d.ts.map +0 -1
- package/dist/auth-entrypoint.js +0 -31
- package/dist/auth-entrypoint.js.map +0 -1
- package/dist/auth-handler.d.ts +0 -136
- package/dist/auth-handler.d.ts.map +0 -1
- package/dist/auth-handler.js +0 -408
- package/dist/auth-handler.js.map +0 -1
- package/dist/auth-rpc-types.d.ts +0 -139
- package/dist/auth-rpc-types.d.ts.map +0 -1
- package/dist/auth-rpc-types.js +0 -11
- package/dist/auth-rpc-types.js.map +0 -1
- package/dist/auth-rpc.d.ts +0 -80
- package/dist/auth-rpc.d.ts.map +0 -1
- package/dist/auth-rpc.js +0 -257
- package/dist/auth-rpc.js.map +0 -1
- package/dist/auth-worker.d.ts +0 -42
- package/dist/auth-worker.d.ts.map +0 -1
- package/dist/auth-worker.js +0 -120
- package/dist/auth-worker.js.map +0 -1
- package/dist/blocklet-js-handler.d.ts +0 -22
- package/dist/blocklet-js-handler.d.ts.map +0 -1
- package/dist/blocklet-js-handler.js +0 -205
- package/dist/blocklet-js-handler.js.map +0 -1
- package/dist/branding-handler.d.ts +0 -42
- package/dist/branding-handler.d.ts.map +0 -1
- package/dist/branding-handler.js +0 -326
- package/dist/branding-handler.js.map +0 -1
- package/dist/d1-token-storage.d.ts +0 -31
- package/dist/d1-token-storage.d.ts.map +0 -1
- package/dist/d1-token-storage.js +0 -83
- package/dist/d1-token-storage.js.map +0 -1
- package/dist/did-connect-handler.d.ts +0 -57
- package/dist/did-connect-handler.d.ts.map +0 -1
- package/dist/did-connect-handler.js +0 -182
- package/dist/did-connect-handler.js.map +0 -1
- package/dist/did.d.ts +0 -14
- package/dist/did.d.ts.map +0 -1
- package/dist/did.js +0 -17
- package/dist/did.js.map +0 -1
- package/dist/email-login-handler.d.ts +0 -50
- package/dist/email-login-handler.d.ts.map +0 -1
- package/dist/email-login-handler.js +0 -238
- package/dist/email-login-handler.js.map +0 -1
- package/dist/federation-utils.d.ts +0 -23
- package/dist/federation-utils.d.ts.map +0 -1
- package/dist/federation-utils.js +0 -25
- package/dist/federation-utils.js.map +0 -1
- package/dist/handler.d.ts +0 -90
- package/dist/handler.d.ts.map +0 -1
- package/dist/handler.js +0 -591
- package/dist/handler.js.map +0 -1
- package/dist/identity/invitation-util.d.ts +0 -7
- package/dist/identity/invitation-util.d.ts.map +0 -1
- package/dist/identity/invitation-util.js +0 -66
- package/dist/identity/invitation-util.js.map +0 -1
- package/dist/instance-role.d.ts +0 -10
- package/dist/instance-role.d.ts.map +0 -1
- package/dist/instance-role.js +0 -20
- package/dist/instance-role.js.map +0 -1
- package/dist/jwt.d.ts +0 -7
- package/dist/jwt.d.ts.map +0 -1
- package/dist/jwt.js +0 -72
- package/dist/jwt.js.map +0 -1
- package/dist/login-entry.d.ts +0 -9
- package/dist/login-entry.d.ts.map +0 -1
- package/dist/login-entry.js +0 -9
- package/dist/login-entry.js.map +0 -1
- package/dist/membership-handler.d.ts +0 -27
- package/dist/membership-handler.d.ts.map +0 -1
- package/dist/membership-handler.js +0 -111
- package/dist/membership-handler.js.map +0 -1
- package/dist/oauth-callback-page.d.ts +0 -9
- package/dist/oauth-callback-page.d.ts.map +0 -1
- package/dist/oauth-callback-page.js +0 -31
- package/dist/oauth-callback-page.js.map +0 -1
- package/dist/oauth-handler.d.ts +0 -72
- package/dist/oauth-handler.d.ts.map +0 -1
- package/dist/oauth-handler.js +0 -423
- package/dist/oauth-handler.js.map +0 -1
- package/dist/page.d.ts +0 -33
- package/dist/page.d.ts.map +0 -1
- package/dist/page.js +0 -59
- package/dist/page.js.map +0 -1
- package/dist/pages/auth-script.d.ts +0 -18
- package/dist/pages/auth-script.d.ts.map +0 -1
- package/dist/pages/auth-script.js +0 -185
- package/dist/pages/auth-script.js.map +0 -1
- package/dist/pages/design-tokens.d.ts +0 -86
- package/dist/pages/design-tokens.d.ts.map +0 -1
- package/dist/pages/design-tokens.js +0 -159
- package/dist/pages/design-tokens.js.map +0 -1
- package/dist/pages/did-connect-script.d.ts +0 -16
- package/dist/pages/did-connect-script.d.ts.map +0 -1
- package/dist/pages/did-connect-script.js +0 -105
- package/dist/pages/did-connect-script.js.map +0 -1
- package/dist/pages/shared-styles.d.ts +0 -6
- package/dist/pages/shared-styles.d.ts.map +0 -1
- package/dist/pages/shared-styles.js +0 -109
- package/dist/pages/shared-styles.js.map +0 -1
- package/dist/rbac.d.ts +0 -19
- package/dist/rbac.d.ts.map +0 -1
- package/dist/rbac.js +0 -76
- package/dist/rbac.js.map +0 -1
- package/dist/session-context.d.ts +0 -35
- package/dist/session-context.d.ts.map +0 -1
- package/dist/session-context.js +0 -39
- package/dist/session-context.js.map +0 -1
- package/dist/store.d.ts +0 -222
- package/dist/store.d.ts.map +0 -1
- package/dist/store.js +0 -1366
- package/dist/store.js.map +0 -1
- package/dist/team-handler.d.ts +0 -90
- package/dist/team-handler.d.ts.map +0 -1
- package/dist/team-handler.js +0 -1225
- package/dist/team-handler.js.map +0 -1
- package/dist/ticket-handler.d.ts +0 -28
- package/dist/ticket-handler.d.ts.map +0 -1
- package/dist/ticket-handler.js +0 -74
- package/dist/ticket-handler.js.map +0 -1
- package/dist/wallet-identity.d.ts +0 -32
- package/dist/wallet-identity.d.ts.map +0 -1
- package/dist/wallet-identity.js +0 -43
- package/dist/wallet-identity.js.map +0 -1
- package/dist/webauthn.d.ts +0 -65
- package/dist/webauthn.d.ts.map +0 -1
- package/dist/webauthn.js +0 -112
- package/dist/webauthn.js.map +0 -1
|
@@ -1,238 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* EmailLoginHandler — email code + magic link login for Cloudflare Workers.
|
|
3
|
-
*
|
|
4
|
-
* Flow:
|
|
5
|
-
* 1. POST /sendCode — generate 6-digit code, send via Resend, return { id }
|
|
6
|
-
* 2. GET /status — poll whether code has been verified (for UX)
|
|
7
|
-
* 3. POST /login — verify code (or magic token JWT), derive DID, issue JWT
|
|
8
|
-
*
|
|
9
|
-
* Routes (under /.well-known/service/api/email):
|
|
10
|
-
* POST /sendCode
|
|
11
|
-
* GET /status
|
|
12
|
-
* POST /login
|
|
13
|
-
*/
|
|
14
|
-
import { LOGIN_PROVIDER } from "./constants.js";
|
|
15
|
-
import { deriveDID } from "./identity/federation.js";
|
|
16
|
-
import { signJWT, verifyJWT } from "./identity/jwt.js";
|
|
17
|
-
const PREFIX = "/.well-known/service/api/email";
|
|
18
|
-
export class EmailLoginHandler {
|
|
19
|
-
options;
|
|
20
|
-
constructor(options) {
|
|
21
|
-
this.options = options;
|
|
22
|
-
}
|
|
23
|
-
/** Resolve email config: constructor options take priority, fall back to D1 email:config. */
|
|
24
|
-
async resolveEmailConfig() {
|
|
25
|
-
if (this.options.resendApiKey && this.options.emailFrom) {
|
|
26
|
-
return { resendApiKey: this.options.resendApiKey, emailFrom: this.options.emailFrom };
|
|
27
|
-
}
|
|
28
|
-
// Fall back to D1 settings
|
|
29
|
-
const did = this.options.instanceDid;
|
|
30
|
-
if (!did)
|
|
31
|
-
return null;
|
|
32
|
-
try {
|
|
33
|
-
const raw = await this.options.store.getSetting(did, "email:config");
|
|
34
|
-
if (!raw)
|
|
35
|
-
return null;
|
|
36
|
-
const config = JSON.parse(raw);
|
|
37
|
-
if (config.resendApiKey && config.fromAddress) {
|
|
38
|
-
return { resendApiKey: config.resendApiKey, emailFrom: config.fromAddress };
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
catch {
|
|
42
|
-
// ignore
|
|
43
|
-
}
|
|
44
|
-
return null;
|
|
45
|
-
}
|
|
46
|
-
/** Check whether email login is available (config exists in env or D1). */
|
|
47
|
-
async isEnabled() {
|
|
48
|
-
return (await this.resolveEmailConfig()) !== null;
|
|
49
|
-
}
|
|
50
|
-
async fetch(request) {
|
|
51
|
-
const url = new URL(request.url);
|
|
52
|
-
const path = url.pathname;
|
|
53
|
-
if (path === `${PREFIX}/sendCode` && request.method === "POST") {
|
|
54
|
-
return this.sendCode(request);
|
|
55
|
-
}
|
|
56
|
-
if (path === `${PREFIX}/status` && request.method === "GET") {
|
|
57
|
-
return this.checkStatus(request);
|
|
58
|
-
}
|
|
59
|
-
if (path === `${PREFIX}/login` && request.method === "POST") {
|
|
60
|
-
return this.login(request);
|
|
61
|
-
}
|
|
62
|
-
return null;
|
|
63
|
-
}
|
|
64
|
-
/** POST /sendCode — generate code, send email, return { id }. */
|
|
65
|
-
async sendCode(request) {
|
|
66
|
-
const emailConfig = await this.resolveEmailConfig();
|
|
67
|
-
if (!emailConfig) {
|
|
68
|
-
return jsonResponse({ error: "Email login is not configured" }, 503);
|
|
69
|
-
}
|
|
70
|
-
let body;
|
|
71
|
-
try {
|
|
72
|
-
body = await request.json();
|
|
73
|
-
}
|
|
74
|
-
catch {
|
|
75
|
-
return jsonResponse({ error: "Invalid request body" }, 400);
|
|
76
|
-
}
|
|
77
|
-
const email = body.email?.toLowerCase().trim();
|
|
78
|
-
if (!email || !email.includes("@")) {
|
|
79
|
-
return jsonResponse({ error: "Invalid email address" }, 400);
|
|
80
|
-
}
|
|
81
|
-
// Rate limit: 1 code per email per minute
|
|
82
|
-
if (await this.options.store.isVerifyCodeSent(email)) {
|
|
83
|
-
return jsonResponse({ error: "Code already sent, please wait" }, 429);
|
|
84
|
-
}
|
|
85
|
-
// Generate 6-digit code
|
|
86
|
-
const code = Array.from({ length: 6 }, () => Math.floor(Math.random() * 10)).join("");
|
|
87
|
-
const id = await this.options.store.createVerifyCode(code, email, "login");
|
|
88
|
-
// Generate magic link JWT (30 min)
|
|
89
|
-
const origin = new URL(request.url).origin;
|
|
90
|
-
const magicToken = await signJWT({ id, code }, this.options.jwtSecret, 1800);
|
|
91
|
-
const magicLink = `${origin}/.well-known/service/login?magicToken=${magicToken}`;
|
|
92
|
-
// Send via Resend API
|
|
93
|
-
try {
|
|
94
|
-
const res = await fetch("https://api.resend.com/emails", {
|
|
95
|
-
method: "POST",
|
|
96
|
-
headers: {
|
|
97
|
-
Authorization: `Bearer ${emailConfig.resendApiKey}`,
|
|
98
|
-
"Content-Type": "application/json",
|
|
99
|
-
},
|
|
100
|
-
body: JSON.stringify({
|
|
101
|
-
from: emailConfig.emailFrom,
|
|
102
|
-
to: email,
|
|
103
|
-
subject: "Your login code",
|
|
104
|
-
html: renderVerifyCodeEmail(code, magicLink),
|
|
105
|
-
}),
|
|
106
|
-
});
|
|
107
|
-
if (!res.ok) {
|
|
108
|
-
const text = await res.text();
|
|
109
|
-
return jsonResponse({ error: `Failed to send email: ${text}` }, 500);
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
catch (err) {
|
|
113
|
-
const message = err instanceof Error ? err.message : "Email send failed";
|
|
114
|
-
return jsonResponse({ error: message }, 500);
|
|
115
|
-
}
|
|
116
|
-
await this.options.store.markVerifyCodeSent(code);
|
|
117
|
-
return jsonResponse({ id });
|
|
118
|
-
}
|
|
119
|
-
/** GET /status — check if a verification code has been used. */
|
|
120
|
-
async checkStatus(request) {
|
|
121
|
-
const url = new URL(request.url);
|
|
122
|
-
const id = url.searchParams.get("id");
|
|
123
|
-
if (!id)
|
|
124
|
-
return jsonResponse({ error: "Missing id parameter" }, 400);
|
|
125
|
-
// Status is implicit: if the code has been consumed, user is logged in
|
|
126
|
-
// This endpoint is a placeholder for frontend polling
|
|
127
|
-
return jsonResponse({ status: "pending" });
|
|
128
|
-
}
|
|
129
|
-
/** POST /login — verify code or magic token, derive DID, issue JWT. */
|
|
130
|
-
async login(request) {
|
|
131
|
-
let body;
|
|
132
|
-
try {
|
|
133
|
-
body = await request.json();
|
|
134
|
-
}
|
|
135
|
-
catch {
|
|
136
|
-
return jsonResponse({ error: "Invalid request body" }, 400);
|
|
137
|
-
}
|
|
138
|
-
// Resolve the verification code
|
|
139
|
-
let verifyCode;
|
|
140
|
-
if (body.magicToken) {
|
|
141
|
-
const payload = await verifyJWT(body.magicToken, this.options.jwtSecret);
|
|
142
|
-
if (!payload || typeof payload.code !== "string") {
|
|
143
|
-
return jsonResponse({ error: "Invalid or expired magic link" }, 400);
|
|
144
|
-
}
|
|
145
|
-
verifyCode = payload.code;
|
|
146
|
-
}
|
|
147
|
-
else if (body.code) {
|
|
148
|
-
verifyCode = body.code;
|
|
149
|
-
}
|
|
150
|
-
else {
|
|
151
|
-
return jsonResponse({ error: "Missing code or magicToken" }, 400);
|
|
152
|
-
}
|
|
153
|
-
// Consume verify code (single-use)
|
|
154
|
-
const record = await this.options.store.consumeVerifyCode(verifyCode);
|
|
155
|
-
if (!record) {
|
|
156
|
-
return jsonResponse({ error: "Invalid or expired code" }, 400);
|
|
157
|
-
}
|
|
158
|
-
// Derive DID from email (delegates to master in federated mode)
|
|
159
|
-
const sub = `email|${record.subject}`;
|
|
160
|
-
const wallet = await deriveDID(sub, {
|
|
161
|
-
appSk: this.options.appSk,
|
|
162
|
-
authMaster: this.options.authMaster,
|
|
163
|
-
});
|
|
164
|
-
const userDid = wallet.did;
|
|
165
|
-
const userPk = wallet.pk;
|
|
166
|
-
// Create or update user
|
|
167
|
-
const { store } = this.options;
|
|
168
|
-
const existingUser = await store.getUserByDid(userDid);
|
|
169
|
-
const isNewUser = !existingUser;
|
|
170
|
-
if (isNewUser) {
|
|
171
|
-
await store.createUser({
|
|
172
|
-
did: userDid,
|
|
173
|
-
pk: userPk,
|
|
174
|
-
fullName: record.subject.split("@")[0],
|
|
175
|
-
email: record.subject,
|
|
176
|
-
sourceProvider: LOGIN_PROVIDER.EMAIL,
|
|
177
|
-
});
|
|
178
|
-
const userCount = await store.getUserCount();
|
|
179
|
-
if (userCount === 1) {
|
|
180
|
-
await store.updateUserRole(userDid, "owner");
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
|
-
else {
|
|
184
|
-
await store.updateLastLogin(userDid);
|
|
185
|
-
}
|
|
186
|
-
// Upsert connected account
|
|
187
|
-
await store.upsertConnectedAccount({
|
|
188
|
-
did: userDid,
|
|
189
|
-
pk: userPk,
|
|
190
|
-
userDid,
|
|
191
|
-
provider: "email",
|
|
192
|
-
id: sub,
|
|
193
|
-
});
|
|
194
|
-
// Audit log
|
|
195
|
-
await store.createAuditLog({
|
|
196
|
-
action: isNewUser ? "user.register" : "user.login",
|
|
197
|
-
operatorDid: userDid,
|
|
198
|
-
metadata: { provider: "email" },
|
|
199
|
-
});
|
|
200
|
-
// Sign JWT and set cookie
|
|
201
|
-
const user = await store.getUserByDid(userDid);
|
|
202
|
-
const payload = { did: userDid, pk: userPk };
|
|
203
|
-
if (user?.fullName)
|
|
204
|
-
payload.displayName = user.fullName;
|
|
205
|
-
if (user?.role)
|
|
206
|
-
payload.role = user.role;
|
|
207
|
-
const jwt = await signJWT(payload, this.options.jwtSecret, this.options.jwtExpiresIn);
|
|
208
|
-
let cookie = `${this.options.cookieName}=${jwt}; Path=/; HttpOnly; Secure; SameSite=Lax; Max-Age=${this.options.jwtExpiresIn}`;
|
|
209
|
-
const cookieDomain = typeof this.options.rpID === "string" ? this.options.rpID : undefined;
|
|
210
|
-
if (cookieDomain?.includes("."))
|
|
211
|
-
cookie += `; Domain=${cookieDomain}`;
|
|
212
|
-
return new Response(JSON.stringify({ ok: true, did: userDid }), {
|
|
213
|
-
status: 200,
|
|
214
|
-
headers: {
|
|
215
|
-
"Content-Type": "application/json",
|
|
216
|
-
"Set-Cookie": cookie,
|
|
217
|
-
"Cache-Control": "private, no-store",
|
|
218
|
-
},
|
|
219
|
-
});
|
|
220
|
-
}
|
|
221
|
-
}
|
|
222
|
-
function jsonResponse(data, status = 200) {
|
|
223
|
-
return new Response(JSON.stringify(data), {
|
|
224
|
-
status,
|
|
225
|
-
headers: { "Content-Type": "application/json", "Cache-Control": "private, no-store" },
|
|
226
|
-
});
|
|
227
|
-
}
|
|
228
|
-
function renderVerifyCodeEmail(code, magicLink) {
|
|
229
|
-
return `<!DOCTYPE html>
|
|
230
|
-
<html><body style="font-family: sans-serif; max-width: 480px; margin: 0 auto; padding: 20px;">
|
|
231
|
-
<h2>Your Login Code</h2>
|
|
232
|
-
<p style="font-size: 32px; font-weight: bold; letter-spacing: 8px; text-align: center; padding: 20px; background: #f5f5f5; border-radius: 8px;">${code}</p>
|
|
233
|
-
<p>Enter this code in the login form, or click the link below:</p>
|
|
234
|
-
<p><a href="${magicLink}" style="color: #0066cc;">Sign in with magic link</a></p>
|
|
235
|
-
<p style="color: #666; font-size: 12px;">This code expires in 30 minutes.</p>
|
|
236
|
-
</body></html>`;
|
|
237
|
-
}
|
|
238
|
-
//# sourceMappingURL=email-login-handler.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"email-login-handler.js","sourceRoot":"","sources":["../src/email-login-handler.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Federation utilities — DID derivation delegation for multi-site auth.
|
|
3
|
-
*
|
|
4
|
-
* In standalone mode, DID is derived locally via fromAppDid(sub, localSK).
|
|
5
|
-
* In federated mode, DID derivation is delegated to the master worker via
|
|
6
|
-
* Service Binding RPC (zero-latency, same-thread call).
|
|
7
|
-
*/
|
|
8
|
-
import type { AuthEntrypointInterface } from "./auth-entrypoint.js";
|
|
9
|
-
/**
|
|
10
|
-
* Derive a user DID from a subject identifier.
|
|
11
|
-
*
|
|
12
|
-
* @param sub - Provider-prefixed subject (e.g. "google-oauth2|123", "email|user@example.com")
|
|
13
|
-
* @param options.appSk - Local app secret key (standalone mode)
|
|
14
|
-
* @param options.authMaster - Service Binding to master worker (federated mode)
|
|
15
|
-
*/
|
|
16
|
-
export declare function deriveDID(sub: string, options: {
|
|
17
|
-
appSk: string;
|
|
18
|
-
authMaster?: AuthEntrypointInterface;
|
|
19
|
-
}): Promise<{
|
|
20
|
-
did: string;
|
|
21
|
-
pk: string;
|
|
22
|
-
}>;
|
|
23
|
-
//# sourceMappingURL=federation-utils.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"federation-utils.d.ts","sourceRoot":"","sources":["../src/federation-utils.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAEpE;;;;;;GAMG;AACH,wBAAsB,SAAS,CAC7B,GAAG,EAAE,MAAM,EACX,OAAO,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,uBAAuB,CAAA;CAAE,GAC/D,OAAO,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,CAAC,CAQtC"}
|
package/dist/federation-utils.js
DELETED
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Federation utilities — DID derivation delegation for multi-site auth.
|
|
3
|
-
*
|
|
4
|
-
* In standalone mode, DID is derived locally via fromAppDid(sub, localSK).
|
|
5
|
-
* In federated mode, DID derivation is delegated to the master worker via
|
|
6
|
-
* Service Binding RPC (zero-latency, same-thread call).
|
|
7
|
-
*/
|
|
8
|
-
import { fromAppDid } from "@arcblock/did-ext";
|
|
9
|
-
/**
|
|
10
|
-
* Derive a user DID from a subject identifier.
|
|
11
|
-
*
|
|
12
|
-
* @param sub - Provider-prefixed subject (e.g. "google-oauth2|123", "email|user@example.com")
|
|
13
|
-
* @param options.appSk - Local app secret key (standalone mode)
|
|
14
|
-
* @param options.authMaster - Service Binding to master worker (federated mode)
|
|
15
|
-
*/
|
|
16
|
-
export async function deriveDID(sub, options) {
|
|
17
|
-
if (options.authMaster) {
|
|
18
|
-
// Federated mode: RPC call to master (zero-delay, same thread)
|
|
19
|
-
return options.authMaster.deriveDID(sub);
|
|
20
|
-
}
|
|
21
|
-
// Standalone mode: local derivation
|
|
22
|
-
const wallet = fromAppDid(sub, options.appSk);
|
|
23
|
-
return { did: wallet.address, pk: wallet.publicKey };
|
|
24
|
-
}
|
|
25
|
-
//# sourceMappingURL=federation-utils.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"federation-utils.js","sourceRoot":"","sources":["../src/federation-utils.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAI/C;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,GAAW,EACX,OAAgE;IAEhE,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;QACvB,+DAA+D;QAC/D,OAAO,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IAC3C,CAAC;IACD,oCAAoC;IACpC,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IAC9C,OAAO,EAAE,GAAG,EAAE,MAAM,CAAC,OAAO,EAAE,EAAE,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC;AACvD,CAAC"}
|
package/dist/handler.d.ts
DELETED
|
@@ -1,90 +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 type { D1Store } from "./store/d1-store.js";
|
|
13
|
-
import type { AuthOptions, CallerIdentity, Role } from "./types.js";
|
|
14
|
-
/**
|
|
15
|
-
* Extract Bearer token from Authorization header and resolve access key caller.
|
|
16
|
-
* Returns null if no access key token or if validation fails.
|
|
17
|
-
*/
|
|
18
|
-
export declare function resolveAccessKeyCaller(request: Request, store: D1Store, instanceDid?: string): Promise<{
|
|
19
|
-
did: string;
|
|
20
|
-
pk: string;
|
|
21
|
-
role: Role;
|
|
22
|
-
displayName?: string;
|
|
23
|
-
blocked: boolean;
|
|
24
|
-
accessKeyId: string;
|
|
25
|
-
} | null>;
|
|
26
|
-
export declare class Auth {
|
|
27
|
-
private store;
|
|
28
|
-
private jwtSecret;
|
|
29
|
-
private rpName;
|
|
30
|
-
private rpID?;
|
|
31
|
-
private jwtExpiresIn;
|
|
32
|
-
private cookieName;
|
|
33
|
-
constructor(options: AuthOptions);
|
|
34
|
-
/** Expose the store for sharing with TeamHandler. */
|
|
35
|
-
getStore(): D1Store;
|
|
36
|
-
/**
|
|
37
|
-
* Handle auth API requests. Expects the prefix to be already stripped —
|
|
38
|
-
* internally matches /register (GET/POST) and /auth (GET/POST).
|
|
39
|
-
*/
|
|
40
|
-
fetch(request: Request): Promise<Response>;
|
|
41
|
-
/** Verify JWT from cookie — hot path, pure crypto, no D1. */
|
|
42
|
-
verify(request: Request): Promise<CallerIdentity | null>;
|
|
43
|
-
/**
|
|
44
|
-
* Full verification: access key (Bearer) first, then JWT + DB check.
|
|
45
|
-
* Returns null if neither auth method succeeds, or if user is blocked/deleted.
|
|
46
|
-
*/
|
|
47
|
-
verifyFull(request: Request): Promise<CallerIdentity | null>;
|
|
48
|
-
/**
|
|
49
|
-
* Verify access key from Authorization: Bearer header.
|
|
50
|
-
* Returns CallerIdentity with the key's role, or null.
|
|
51
|
-
*/
|
|
52
|
-
verifyAccessKey(request: Request): Promise<CallerIdentity | null>;
|
|
53
|
-
/** Return the login page HTML, filtering methods by builtin-providers settings. */
|
|
54
|
-
getLoginPage(instanceDid?: string, overrides?: {
|
|
55
|
-
methods?: string[];
|
|
56
|
-
oauthProviders?: Array<{
|
|
57
|
-
name: string;
|
|
58
|
-
icon?: string;
|
|
59
|
-
}>;
|
|
60
|
-
}): Promise<Response>;
|
|
61
|
-
/** GET /register — Generate registration challenge options.
|
|
62
|
-
* Always returns options (even when registration is gated) because:
|
|
63
|
-
* - Re-registration of existing passkeys bypasses the gate
|
|
64
|
-
* - The registrationAllowed flag lets the client show/hide UI
|
|
65
|
-
* - The actual gate is enforced at POST /register time */
|
|
66
|
-
private handleRegisterRequest;
|
|
67
|
-
/** POST /register — Verify registration credential, create user, issue JWT. */
|
|
68
|
-
private handleRegisterResponse;
|
|
69
|
-
/** GET /auth — Generate authentication challenge options. */
|
|
70
|
-
private handleAuthRequest;
|
|
71
|
-
/** POST /auth — Verify authentication credential, issue JWT. */
|
|
72
|
-
private handleAuthResponse;
|
|
73
|
-
private handleRegistrationVerify;
|
|
74
|
-
private handleAuthenticationVerify;
|
|
75
|
-
/** Clear auth cookie. GET → redirect to /, POST → JSON response. */
|
|
76
|
-
logout(request: Request): Response;
|
|
77
|
-
/**
|
|
78
|
-
* Determine if passkey registration should be allowed.
|
|
79
|
-
*
|
|
80
|
-
* Returns true if ANY of:
|
|
81
|
-
* 1. No users exist (first user becomes owner)
|
|
82
|
-
* 2. Default access policy is "public"
|
|
83
|
-
* 3. A valid invitation is presented
|
|
84
|
-
*/
|
|
85
|
-
private checkRegistrationEligibility;
|
|
86
|
-
private issueJWT;
|
|
87
|
-
private getRPID;
|
|
88
|
-
private extractCookie;
|
|
89
|
-
}
|
|
90
|
-
//# sourceMappingURL=handler.d.ts.map
|
package/dist/handler.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../src/handler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAOH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AA8CpE;;;GAGG;AACH,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,OAAO,EACd,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC;IACT,GAAG,EAAE,MAAM,CAAC;IACZ,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,IAAI,CAAC;IACX,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;CACrB,GAAG,IAAI,CAAC,CAoCR;AAED,qBAAa,IAAI;IACf,OAAO,CAAC,KAAK,CAAU;IACvB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,IAAI,CAAC,CAA0C;IACvD,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,UAAU,CAAS;gBAEf,OAAO,EAAE,WAAW;IAShC,qDAAqD;IACrD,QAAQ,IAAI,OAAO;IAInB;;;OAGG;IACG,KAAK,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC;IAqBhD,6DAA6D;IACvD,MAAM,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAiB9D;;;OAGG;IACG,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAmBlE;;;OAGG;IACG,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAYvE,mFAAmF;IAC7E,YAAY,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,cAAc,CAAC,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,IAAI,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC,CAAA;KAAE,GAAG,OAAO,CAAC,QAAQ,CAAC;IA+DxJ;;;;+DAI2D;YAC7C,qBAAqB;IA4BnC,+EAA+E;YACjE,sBAAsB;IAkDpC,6DAA6D;YAC/C,iBAAiB;IAoB/B,gEAAgE;YAClD,kBAAkB;YA2ClB,wBAAwB;YAyHxB,0BAA0B;IAgExC,oEAAoE;IACpE,MAAM,CAAC,OAAO,EAAE,OAAO,GAAG,QAAQ;IAsBlC;;;;;;;OAOG;YACW,4BAA4B;YAwB5B,QAAQ;IAqBtB,OAAO,CAAC,OAAO;IAMf,OAAO,CAAC,aAAa;CAWtB"}
|