@arcblock/did-connect-service 4.0.4 → 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 +33 -0
  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/csrf.d.ts +17 -0
  15. package/dist/identity/csrf.d.ts.map +1 -0
  16. package/dist/identity/csrf.js +56 -0
  17. package/dist/identity/csrf.js.map +1 -0
  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
@@ -1,80 +0,0 @@
1
- /**
2
- * AuthRPCImpl — Core RPC logic for Auth Worker Service Binding.
3
- *
4
- * This class implements all RPC methods using raw values (JWT strings,
5
- * header strings) instead of Request objects, making it testable without
6
- * Cloudflare runtime. The actual WorkerEntrypoint subclass (in auth-worker.ts)
7
- * delegates to this class.
8
- */
9
- import type { AuditLogDTO, CallerIdentityDTO, CreateAuditLogInput, MemberWithUserInfoDTO, RegisterAppConfig, RuleWithPolicyDTO, StoredMembershipDTO, StoredUserDTO } from "./auth-rpc-types.js";
10
- export declare class AuthRPCImpl {
11
- private readonly db;
12
- private readonly jwtSecret;
13
- private _store?;
14
- constructor(db: D1Database, jwtSecret: string);
15
- private store;
16
- /** Lightweight verify: JWT signature check only, no D1. */
17
- verify(jwt: string): Promise<CallerIdentityDTO | null>;
18
- /** Full verify: JWT + DB user existence + approval status. */
19
- verifyFull(jwt: string): Promise<CallerIdentityDTO | null>;
20
- /** Resolve identity: Access Key (Bearer) first, then JWT fallback. */
21
- resolveIdentity(jwt: string | null, authorizationHeader: string | null, instanceDid?: string): Promise<CallerIdentityDTO | null>;
22
- /** Access policy evaluation — returns serialized decision. */
23
- enforceAccess(jwt: string | null, authorizationHeader: string | null, pathname: string, instanceDid?: string): Promise<{
24
- allowed: true;
25
- caller: CallerIdentityDTO | null;
26
- } | {
27
- allowed: false;
28
- status: 401 | 403;
29
- }>;
30
- getMembership(userDid: string, instanceDid: string): Promise<StoredMembershipDTO | null>;
31
- listMemberships(instanceDid: string): Promise<StoredMembershipDTO[]>;
32
- listMembershipsWithUserInfo(instanceDid: string): Promise<MemberWithUserInfoDTO[]>;
33
- createMembership(userDid: string, instanceDid: string, role: string, invitedBy?: string): Promise<void>;
34
- updateMembershipRole(userDid: string, instanceDid: string, role: string): Promise<void>;
35
- deleteMembership(userDid: string, instanceDid: string): Promise<void>;
36
- deleteMembershipsByInstance(instanceDid: string): Promise<void>;
37
- getSetting(instanceDid: string, key: string): Promise<string | null>;
38
- setSetting(instanceDid: string, key: string, value: string): Promise<void>;
39
- listSettings(instanceDid: string): Promise<{
40
- key: string;
41
- value: string | null;
42
- updated_at: string;
43
- }[]>;
44
- deleteSetting(instanceDid: string, key: string): Promise<void>;
45
- getAuditLogsForInstance(instanceDid: string, opts: {
46
- page: number;
47
- pageSize: number;
48
- action?: string;
49
- }): Promise<{
50
- logs: AuditLogDTO[];
51
- total: number;
52
- }>;
53
- getAuditLogById(id: number, instanceDid: string): Promise<AuditLogDTO | null>;
54
- createAuditLog(input: CreateAuditLogInput): Promise<void>;
55
- getActiveRulesForInstance(instanceDid: string): Promise<RuleWithPolicyDTO[]>;
56
- seedInstanceDefaults(instanceDid: string): Promise<void>;
57
- getUserByDid(did: string): Promise<StoredUserDTO | null>;
58
- createUser(params: {
59
- did: string;
60
- pk: string;
61
- fullName?: string;
62
- email?: string;
63
- avatar?: string;
64
- sourceProvider: string;
65
- ip?: string;
66
- domain?: string;
67
- }): Promise<void>;
68
- updateLastLogin(did: string, ip?: string, domain?: string): Promise<void>;
69
- saveChallenge(id: string, challenge: string, invitationId?: string): Promise<void>;
70
- getChallenge(id: string): Promise<{
71
- challenge: string;
72
- invitationId: string | null;
73
- } | null>;
74
- deleteChallenge(id: string): Promise<void>;
75
- registerApp(config: RegisterAppConfig): Promise<{
76
- instanceDid: string;
77
- }>;
78
- private resolveAccessKey;
79
- }
80
- //# sourceMappingURL=auth-rpc.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"auth-rpc.d.ts","sourceRoot":"","sources":["../src/auth-rpc.ts"],"names":[],"mappings":"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"}
package/dist/auth-rpc.js DELETED
@@ -1,257 +0,0 @@
1
- /**
2
- * AuthRPCImpl — Core RPC logic for Auth Worker Service Binding.
3
- *
4
- * This class implements all RPC methods using raw values (JWT strings,
5
- * header strings) instead of Request objects, making it testable without
6
- * Cloudflare runtime. The actual WorkerEntrypoint subclass (in auth-worker.ts)
7
- * delegates to this class.
8
- */
9
- import { deriveAccessKeyId, isAccessKeyToken, } from "./access/access-key-util.js";
10
- import { evaluateAccess } from "./access/access-policy.js";
11
- import { invalidateConfigCache } from "./auth-worker.js";
12
- import { verifyJWT } from "./identity/jwt.js";
13
- import { D1Store } from "./store/d1-store.js";
14
- export class AuthRPCImpl {
15
- db;
16
- jwtSecret;
17
- _store;
18
- constructor(db, jwtSecret) {
19
- this.db = db;
20
- this.jwtSecret = jwtSecret;
21
- }
22
- store() {
23
- this._store ??= new D1Store(this.db);
24
- return this._store;
25
- }
26
- // ── Layer 1: Auth Core ─────────────────────────────────────────────
27
- /** Lightweight verify: JWT signature check only, no D1. */
28
- async verify(jwt) {
29
- const payload = await verifyJWT(jwt, this.jwtSecret);
30
- if (!payload?.did || !payload.pk)
31
- return null;
32
- return {
33
- did: payload.did,
34
- pk: payload.pk,
35
- displayName: payload.displayName,
36
- };
37
- }
38
- /** Full verify: JWT + DB user existence + approval status. */
39
- async verifyFull(jwt) {
40
- const caller = await this.verify(jwt);
41
- if (!caller)
42
- return null;
43
- const user = await this.store().getUserByDid(caller.did);
44
- if (!user?.approved)
45
- return null;
46
- return {
47
- ...caller,
48
- displayName: user.fullName ?? caller.displayName,
49
- role: user.role ?? "guest",
50
- avatar: `/.well-known/service/avatar/${caller.did}`,
51
- };
52
- }
53
- /** Resolve identity: Access Key (Bearer) first, then JWT fallback. */
54
- async resolveIdentity(jwt, authorizationHeader, instanceDid) {
55
- // 1. Try access key auth
56
- if (authorizationHeader) {
57
- const akCaller = await this.resolveAccessKey(authorizationHeader, instanceDid);
58
- if (akCaller)
59
- return akCaller;
60
- }
61
- // 2. Fall back to JWT
62
- if (!jwt)
63
- return null;
64
- const jwtCaller = await this.verify(jwt);
65
- if (!jwtCaller)
66
- return null;
67
- const user = await this.store().getUserByDid(jwtCaller.did);
68
- if (user) {
69
- return {
70
- ...jwtCaller,
71
- role: user.role ?? "guest",
72
- avatar: `/.well-known/service/avatar/${jwtCaller.did}`,
73
- authMethod: "passkey",
74
- approved: !!user.approved,
75
- };
76
- }
77
- return { ...jwtCaller, authMethod: "passkey" };
78
- }
79
- /** Access policy evaluation — returns serialized decision. */
80
- async enforceAccess(jwt, authorizationHeader, pathname, instanceDid) {
81
- // 1. Resolve caller identity
82
- let callerIdentity = null;
83
- let role = null;
84
- let blocked = false;
85
- if (authorizationHeader) {
86
- const akCaller = await this.resolveAccessKey(authorizationHeader, instanceDid);
87
- if (akCaller) {
88
- callerIdentity = akCaller;
89
- role = akCaller.role ?? null;
90
- blocked = akCaller.approved === false;
91
- }
92
- }
93
- if (!callerIdentity && jwt) {
94
- const jwtCaller = await this.verify(jwt);
95
- if (jwtCaller) {
96
- callerIdentity = jwtCaller;
97
- const user = await this.store().getUserByDid(jwtCaller.did);
98
- if (user) {
99
- role = user.role ?? "guest";
100
- blocked = !user.approved;
101
- callerIdentity = { ...jwtCaller, role: role };
102
- }
103
- }
104
- }
105
- // 2. Load rules and evaluate
106
- const rules = instanceDid
107
- ? await this.store().getActiveRulesForInstance(instanceDid)
108
- : await this.store().getActiveRulesWithPolicies();
109
- const result = evaluateAccess(rules, pathname, role ? { role } : null);
110
- // 3. Public routes: allow everyone, even blocked users
111
- if (result.allowed) {
112
- if (blocked) {
113
- const publicCheck = evaluateAccess(rules, pathname, null);
114
- if (!publicCheck.allowed) {
115
- return { allowed: false, status: 403 };
116
- }
117
- }
118
- const caller = callerIdentity && !blocked
119
- ? { ...callerIdentity, role: (role ?? undefined) }
120
- : null;
121
- return { allowed: true, caller };
122
- }
123
- // 4. Access denied
124
- if (result.reason === "unauthenticated") {
125
- return { allowed: false, status: 401 };
126
- }
127
- return { allowed: false, status: 403 };
128
- }
129
- // ── Layer 2: Data RPC ──────────────────────────────────────────────
130
- async getMembership(userDid, instanceDid) {
131
- return this.store().getMembership(userDid, instanceDid);
132
- }
133
- async listMemberships(instanceDid) {
134
- return this.store().listMemberships(instanceDid);
135
- }
136
- async listMembershipsWithUserInfo(instanceDid) {
137
- return this.store().listMembershipsWithUserInfo(instanceDid);
138
- }
139
- async createMembership(userDid, instanceDid, role, invitedBy) {
140
- await this.store().createMembership(userDid, instanceDid, role, invitedBy);
141
- }
142
- async updateMembershipRole(userDid, instanceDid, role) {
143
- await this.store().updateMembershipRole(userDid, instanceDid, role);
144
- }
145
- async deleteMembership(userDid, instanceDid) {
146
- await this.store().deleteMembership(userDid, instanceDid);
147
- }
148
- async deleteMembershipsByInstance(instanceDid) {
149
- await this.store().deleteMembershipsByInstance(instanceDid);
150
- }
151
- async getSetting(instanceDid, key) {
152
- return this.store().getSetting(instanceDid, key);
153
- }
154
- async setSetting(instanceDid, key, value) {
155
- await this.store().setSetting(instanceDid, key, value);
156
- }
157
- async listSettings(instanceDid) {
158
- return this.store().listSettings(instanceDid);
159
- }
160
- async deleteSetting(instanceDid, key) {
161
- await this.store().deleteSetting(instanceDid, key);
162
- }
163
- async getAuditLogsForInstance(instanceDid, opts) {
164
- return this.store().getAuditLogsForInstance(instanceDid, opts);
165
- }
166
- async getAuditLogById(id, instanceDid) {
167
- return this.store().getAuditLogById(id, instanceDid);
168
- }
169
- async createAuditLog(input) {
170
- await this.store().createAuditLog(input);
171
- }
172
- async getActiveRulesForInstance(instanceDid) {
173
- return this.store().getActiveRulesForInstance(instanceDid);
174
- }
175
- async seedInstanceDefaults(instanceDid) {
176
- await this.store().seedInstanceDefaults(instanceDid);
177
- }
178
- // ── Layer 3: Lifecycle RPC ─────────────────────────────────────────
179
- async getUserByDid(did) {
180
- const user = await this.store().getUserByDid(did);
181
- if (!user)
182
- return null;
183
- return {
184
- did: user.did,
185
- pk: user.pk,
186
- fullName: user.fullName ?? undefined,
187
- email: user.email ?? undefined,
188
- avatar: user.avatar ?? undefined,
189
- role: user.role ?? undefined,
190
- approved: user.approved,
191
- };
192
- }
193
- async createUser(params) {
194
- await this.store().createUser(params);
195
- }
196
- async updateLastLogin(did, ip, domain) {
197
- await this.store().updateLastLogin(did, ip, domain);
198
- }
199
- async saveChallenge(id, challenge, invitationId) {
200
- await this.store().saveChallenge(id, challenge, invitationId);
201
- }
202
- async getChallenge(id) {
203
- return this.store().getChallenge(id);
204
- }
205
- async deleteChallenge(id) {
206
- await this.store().deleteChallenge(id);
207
- }
208
- async registerApp(config) {
209
- const { instanceDid, appSk, appPsk, appName } = config;
210
- const s = this.store();
211
- // Use store.setSetting for each key — consistent with D1 schema constraints
212
- await s.setSetting(instanceDid, "app:sk", appSk);
213
- if (appPsk)
214
- await s.setSetting(instanceDid, "app:psk", appPsk);
215
- if (appName)
216
- await s.setSetting(instanceDid, "app:name", appName);
217
- // Invalidate config cache so next request picks up the new keys
218
- invalidateConfigCache(instanceDid);
219
- // Seed instance defaults (idempotent)
220
- await s.seedInstanceDefaults(instanceDid);
221
- return { instanceDid };
222
- }
223
- // ── Internal helpers ───────────────────────────────────────────────
224
- async resolveAccessKey(authorizationHeader, instanceDid) {
225
- const token = authorizationHeader.replace(/^Bearer\s+/i, "").trim();
226
- if (!isAccessKeyToken(token))
227
- return null;
228
- const accessKeyId = deriveAccessKeyId(token);
229
- if (!accessKeyId)
230
- return null;
231
- const key = await this.store().getAccessKeyById(accessKeyId);
232
- if (!key)
233
- return null;
234
- // Check expiration
235
- if (key.expireAt && new Date(key.expireAt) < new Date())
236
- return null;
237
- // Instance ownership check
238
- if (instanceDid && key.instanceDid && key.instanceDid !== instanceDid)
239
- return null;
240
- // Check creator
241
- const creator = await this.store().getUserByDid(key.createdBy);
242
- if (!creator)
243
- return null;
244
- // Fire-and-forget: update lastUsedAt
245
- this.store().refreshAccessKeyLastUsed(accessKeyId).catch(() => { });
246
- return {
247
- did: creator.did,
248
- pk: creator.pk,
249
- displayName: creator.fullName ?? undefined,
250
- role: key.role,
251
- authMethod: "access-key",
252
- accessKeyId,
253
- approved: !!creator.approved,
254
- };
255
- }
256
- }
257
- //# sourceMappingURL=auth-rpc.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"auth-rpc.js","sourceRoot":"","sources":["../src/auth-rpc.ts"],"names":[],"mappings":"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"}
@@ -1,42 +0,0 @@
1
- /**
2
- * Auth Worker — Independent Worker entry point for Service Binding mode.
3
- *
4
- * Exposes two integration surfaces:
5
- * 1. `fetch()` — Consumer forwards /.well-known/service/* requests here
6
- * 2. `AuthRPC` — Consumer calls RPC methods (verify, enforceAccess, etc.)
7
- *
8
- * Supports two modes:
9
- * - Single-tenant: env.APP_SK set → used directly (playground/dev)
10
- * - Multi-tenant: X-Instance-Did header → load appSk/appPsk from D1 settings
11
- */
12
- import { type AuthHandler } from "./handlers/auth-handler.js";
13
- export interface AuthWorkerEnv {
14
- BLOCKLET_SERVICE_DB: D1Database;
15
- JWT_SECRET: string;
16
- /** Optional R2 binding for avatar/logo storage. */
17
- AVATAR_BUCKET?: R2Bucket;
18
- /** Single-tenant mode: app secret key from env. */
19
- APP_SK?: string;
20
- /** Single-tenant mode: permanent secret key from env. */
21
- APP_PSK?: string;
22
- /** Relying Party name for WebAuthn. */
23
- RP_NAME?: string;
24
- /** Optional email login configuration. */
25
- RESEND_API_KEY?: string;
26
- EMAIL_FROM?: string;
27
- }
28
- /** Clear cached config for an instance (called after registerApp). */
29
- export declare function invalidateConfigCache(instanceDid: string): void;
30
- /** Reset all caches — for testing only. */
31
- export declare function _resetConfigCacheForTesting(): void;
32
- /**
33
- * Build an AuthHandler for the given mode:
34
- * - Single-tenant: env.APP_SK → use directly
35
- * - Multi-tenant: instanceDid → load from D1 settings
36
- */
37
- export declare function buildHandler(instanceDid: string | undefined, env: AuthWorkerEnv): Promise<AuthHandler>;
38
- declare const _default: {
39
- fetch(request: Request, env: AuthWorkerEnv): Promise<Response>;
40
- };
41
- export default _default;
42
- //# sourceMappingURL=auth-worker.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"auth-worker.d.ts","sourceRoot":"","sources":["../src/auth-worker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,KAAK,WAAW,EAAqB,MAAM,4BAA4B,CAAC;AAKjF,MAAM,WAAW,aAAa;IAC5B,mBAAmB,EAAE,UAAU,CAAC;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,mDAAmD;IACnD,aAAa,CAAC,EAAE,QAAQ,CAAC;IACzB,mDAAmD;IACnD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,yDAAyD;IACzD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,uCAAuC;IACvC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,0CAA0C;IAC1C,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAyBD,sEAAsE;AACtE,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAE/D;AAED,2CAA2C;AAC3C,wBAAgB,2BAA2B,IAAI,IAAI,CAElD;AAID;;;;GAIG;AACH,wBAAsB,YAAY,CAChC,WAAW,EAAE,MAAM,GAAG,SAAS,EAC/B,GAAG,EAAE,aAAa,GACjB,OAAO,CAAC,WAAW,CAAC,CA8BtB;;mBAmCsB,OAAO,OAAO,aAAa,GAAG,OAAO,CAAC,QAAQ,CAAC;;AADtE,wBAiBE"}
@@ -1,120 +0,0 @@
1
- /**
2
- * Auth Worker — Independent Worker entry point for Service Binding mode.
3
- *
4
- * Exposes two integration surfaces:
5
- * 1. `fetch()` — Consumer forwards /.well-known/service/* requests here
6
- * 2. `AuthRPC` — Consumer calls RPC methods (verify, enforceAccess, etc.)
7
- *
8
- * Supports two modes:
9
- * - Single-tenant: env.APP_SK set → used directly (playground/dev)
10
- * - Multi-tenant: X-Instance-Did header → load appSk/appPsk from D1 settings
11
- */
12
- import { createAuthHandler } from "./handlers/auth-handler.js";
13
- import { D1Store } from "./store/d1-store.js";
14
- const _configCache = new Map();
15
- const CONFIG_TTL = 5 * 60 * 1000; // 5 minutes
16
- async function resolveConfig(instanceDid, store) {
17
- const cached = _configCache.get(instanceDid);
18
- if (cached && Date.now() - cached.at < CONFIG_TTL)
19
- return cached.config;
20
- const appSk = await store.getSetting(instanceDid, "app:sk");
21
- if (!appSk)
22
- throw new Error(`No appSk configured for instance: ${instanceDid}`);
23
- const appPsk = (await store.getSetting(instanceDid, "app:psk")) ?? undefined;
24
- const config = { appSk, appPsk };
25
- _configCache.set(instanceDid, { config, at: Date.now() });
26
- return config;
27
- }
28
- /** Clear cached config for an instance (called after registerApp). */
29
- export function invalidateConfigCache(instanceDid) {
30
- _configCache.delete(instanceDid);
31
- }
32
- /** Reset all caches — for testing only. */
33
- export function _resetConfigCacheForTesting() {
34
- _configCache.clear();
35
- }
36
- // ─── buildHandler ──────────────────────────────────────────────────────
37
- /**
38
- * Build an AuthHandler for the given mode:
39
- * - Single-tenant: env.APP_SK → use directly
40
- * - Multi-tenant: instanceDid → load from D1 settings
41
- */
42
- export async function buildHandler(instanceDid, env) {
43
- const store = new D1Store(env.BLOCKLET_SERVICE_DB);
44
- // Single-tenant fast path: APP_SK in env
45
- if (env.APP_SK) {
46
- return createAuthHandler({
47
- db: env.BLOCKLET_SERVICE_DB,
48
- jwtSecret: env.JWT_SECRET,
49
- rpName: env.RP_NAME ?? "DID Connect",
50
- appSk: env.APP_SK,
51
- appPsk: env.APP_PSK,
52
- r2: env.AVATAR_BUCKET,
53
- resendApiKey: env.RESEND_API_KEY,
54
- emailFrom: env.EMAIL_FROM,
55
- });
56
- }
57
- // Multi-tenant: instanceDid required
58
- if (!instanceDid)
59
- throw new Error("Missing X-Instance-Did header (multi-tenant mode)");
60
- const { appSk, appPsk } = await resolveConfig(instanceDid, store);
61
- return createAuthHandler({
62
- db: env.BLOCKLET_SERVICE_DB,
63
- jwtSecret: env.JWT_SECRET,
64
- rpName: env.RP_NAME ?? "DID Connect",
65
- appSk,
66
- appPsk,
67
- r2: env.AVATAR_BUCKET,
68
- });
69
- }
70
- // ─── AuthRPC (WorkerEntrypoint wrapper) ────────────────────────────────
71
- //
72
- // For real Cloudflare deployment, create a thin wrapper:
73
- //
74
- // import { WorkerEntrypoint } from 'cloudflare:workers';
75
- // import { AuthRPCImpl } from './auth-rpc.js';
76
- //
77
- // export class AuthRPC extends WorkerEntrypoint<AuthWorkerEnv> {
78
- // private _impl?: AuthRPCImpl;
79
- // private impl() {
80
- // this._impl ??= new AuthRPCImpl(this.env.BLOCKLET_SERVICE_DB, this.env.JWT_SECRET);
81
- // return this._impl;
82
- // }
83
- // verify(jwt: string) { return this.impl().verify(jwt); }
84
- // verifyFull(jwt: string) { return this.impl().verifyFull(jwt); }
85
- // resolveIdentity(...args: Parameters<AuthRPCImpl['resolveIdentity']>) {
86
- // return this.impl().resolveIdentity(...args);
87
- // }
88
- // enforceAccess(...args: Parameters<AuthRPCImpl['enforceAccess']>) {
89
- // return this.impl().enforceAccess(...args);
90
- // }
91
- // // Delegate all other AuthRPCInterface methods to this.impl()
92
- // }
93
- //
94
- // Consumer wrangler.toml:
95
- // [[services]]
96
- // binding = "AUTH"
97
- // service = "did-connect-auth"
98
- // entrypoint = "AuthRPC"
99
- // ─── Default fetch handler ─────────────────────────────────────────────
100
- export default {
101
- async fetch(request, env) {
102
- try {
103
- const instanceDid = request.headers.get("X-Instance-Did") ?? undefined;
104
- const auth = await buildHandler(instanceDid, env);
105
- const r = await auth.route(request, { instanceDid });
106
- if (r)
107
- return r;
108
- return new Response("Not Found", { status: 404 });
109
- }
110
- catch (err) {
111
- const msg = err instanceof Error ? err.message : "Internal error";
112
- const status = msg.includes("Missing X-Instance-Did") ? 400 : 500;
113
- return new Response(JSON.stringify({ error: msg }), {
114
- status,
115
- headers: { "Content-Type": "application/json" },
116
- });
117
- }
118
- },
119
- };
120
- //# sourceMappingURL=auth-worker.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"auth-worker.js","sourceRoot":"","sources":["../src/auth-worker.ts"],"names":[],"mappings":"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"}
@@ -1,22 +0,0 @@
1
- import type { D1Store } from "./store/d1-store.js";
2
- export interface BlockletJsOptions {
3
- store: D1Store;
4
- appSk: string;
5
- /** Explicit app DID — otherwise derived from appSk */
6
- appDid?: string;
7
- /** Permanent secret key (PSK) — for correct appPid when SK has been rotated */
8
- appPsk?: string;
9
- /** Instance DID for settings scope (defaults to '_global_') */
10
- instanceDid?: string;
11
- serverVersion?: string;
12
- }
13
- export declare class BlockletJsHandler {
14
- private options;
15
- private appDid;
16
- private appPid;
17
- private appPk;
18
- constructor(options: BlockletJsOptions);
19
- fetch(request: Request): Promise<Response | null>;
20
- private buildBlockletData;
21
- }
22
- //# sourceMappingURL=blocklet-js-handler.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"blocklet-js-handler.d.ts","sourceRoot":"","sources":["../src/blocklet-js-handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAInD,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,sDAAsD;IACtD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,+EAA+E;IAC/E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,+DAA+D;IAC/D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,qBAAa,iBAAiB;IAKhB,OAAO,CAAC,OAAO;IAJ3B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,KAAK,CAAS;gBAEF,OAAO,EAAE,iBAAiB;IAOxC,KAAK,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;YA4BzC,iBAAiB;CAkLhC"}