@arcblock/did-connect-service 4.0.0-beta.8

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 (503) hide show
  1. package/dist/_generated/did-address-bundle-string.d.ts +3 -0
  2. package/dist/_generated/did-address-bundle-string.d.ts.map +1 -0
  3. package/dist/_generated/did-address-bundle-string.js +3 -0
  4. package/dist/_generated/did-address-bundle-string.js.map +1 -0
  5. package/dist/_generated/header-bundle-string.d.ts +3 -0
  6. package/dist/_generated/header-bundle-string.d.ts.map +1 -0
  7. package/dist/_generated/header-bundle-string.js +3 -0
  8. package/dist/_generated/header-bundle-string.js.map +1 -0
  9. package/dist/_generated/login-bundle-string.d.ts +3 -0
  10. package/dist/_generated/login-bundle-string.d.ts.map +1 -0
  11. package/dist/_generated/login-bundle-string.js +3 -0
  12. package/dist/_generated/login-bundle-string.js.map +1 -0
  13. package/dist/_generated/qr-bundle-string.d.ts +3 -0
  14. package/dist/_generated/qr-bundle-string.d.ts.map +1 -0
  15. package/dist/_generated/qr-bundle-string.js +3 -0
  16. package/dist/_generated/qr-bundle-string.js.map +1 -0
  17. package/dist/access/access-key-util.d.ts +19 -0
  18. package/dist/access/access-key-util.d.ts.map +1 -0
  19. package/dist/access/access-key-util.js +45 -0
  20. package/dist/access/access-key-util.js.map +1 -0
  21. package/dist/access/access-policy.d.ts +55 -0
  22. package/dist/access/access-policy.d.ts.map +1 -0
  23. package/dist/access/access-policy.js +177 -0
  24. package/dist/access/access-policy.js.map +1 -0
  25. package/dist/access/login-access-check.d.ts +27 -0
  26. package/dist/access/login-access-check.d.ts.map +1 -0
  27. package/dist/access/login-access-check.js +34 -0
  28. package/dist/access/login-access-check.js.map +1 -0
  29. package/dist/access/rbac.d.ts +19 -0
  30. package/dist/access/rbac.d.ts.map +1 -0
  31. package/dist/access/rbac.js +79 -0
  32. package/dist/access/rbac.js.map +1 -0
  33. package/dist/access-key-handler.d.ts +37 -0
  34. package/dist/access-key-handler.d.ts.map +1 -0
  35. package/dist/access-key-handler.js +316 -0
  36. package/dist/access-key-handler.js.map +1 -0
  37. package/dist/access-key-util.d.ts +19 -0
  38. package/dist/access-key-util.d.ts.map +1 -0
  39. package/dist/access-key-util.js +45 -0
  40. package/dist/access-key-util.js.map +1 -0
  41. package/dist/access-policy.d.ts +53 -0
  42. package/dist/access-policy.d.ts.map +1 -0
  43. package/dist/access-policy.js +153 -0
  44. package/dist/access-policy.js.map +1 -0
  45. package/dist/auth-client.d.ts +20 -0
  46. package/dist/auth-client.d.ts.map +1 -0
  47. package/dist/auth-client.js +42 -0
  48. package/dist/auth-client.js.map +1 -0
  49. package/dist/auth-entrypoint.d.ts +45 -0
  50. package/dist/auth-entrypoint.d.ts.map +1 -0
  51. package/dist/auth-entrypoint.js +31 -0
  52. package/dist/auth-entrypoint.js.map +1 -0
  53. package/dist/auth-handler.d.ts +136 -0
  54. package/dist/auth-handler.d.ts.map +1 -0
  55. package/dist/auth-handler.js +408 -0
  56. package/dist/auth-handler.js.map +1 -0
  57. package/dist/auth-rpc-types.d.ts +139 -0
  58. package/dist/auth-rpc-types.d.ts.map +1 -0
  59. package/dist/auth-rpc-types.js +11 -0
  60. package/dist/auth-rpc-types.js.map +1 -0
  61. package/dist/auth-rpc.d.ts +80 -0
  62. package/dist/auth-rpc.d.ts.map +1 -0
  63. package/dist/auth-rpc.js +257 -0
  64. package/dist/auth-rpc.js.map +1 -0
  65. package/dist/auth-worker.d.ts +42 -0
  66. package/dist/auth-worker.d.ts.map +1 -0
  67. package/dist/auth-worker.js +120 -0
  68. package/dist/auth-worker.js.map +1 -0
  69. package/dist/blocklet-js-handler.d.ts +22 -0
  70. package/dist/blocklet-js-handler.d.ts.map +1 -0
  71. package/dist/blocklet-js-handler.js +205 -0
  72. package/dist/blocklet-js-handler.js.map +1 -0
  73. package/dist/blocklet-service-client.d.ts +80 -0
  74. package/dist/blocklet-service-client.d.ts.map +1 -0
  75. package/dist/blocklet-service-client.js +130 -0
  76. package/dist/blocklet-service-client.js.map +1 -0
  77. package/dist/blocklet-service-rpc-types.d.ts +153 -0
  78. package/dist/blocklet-service-rpc-types.d.ts.map +1 -0
  79. package/dist/blocklet-service-rpc-types.js +11 -0
  80. package/dist/blocklet-service-rpc-types.js.map +1 -0
  81. package/dist/blocklet-service-rpc.d.ts +92 -0
  82. package/dist/blocklet-service-rpc.d.ts.map +1 -0
  83. package/dist/blocklet-service-rpc.js +410 -0
  84. package/dist/blocklet-service-rpc.js.map +1 -0
  85. package/dist/blocklet-service.d.ts +57 -0
  86. package/dist/blocklet-service.d.ts.map +1 -0
  87. package/dist/blocklet-service.js +377 -0
  88. package/dist/blocklet-service.js.map +1 -0
  89. package/dist/branding-handler.d.ts +42 -0
  90. package/dist/branding-handler.d.ts.map +1 -0
  91. package/dist/branding-handler.js +326 -0
  92. package/dist/branding-handler.js.map +1 -0
  93. package/dist/constants.d.ts +18 -0
  94. package/dist/constants.d.ts.map +1 -0
  95. package/dist/constants.js +17 -0
  96. package/dist/constants.js.map +1 -0
  97. package/dist/crypto/aes-gcm.d.ts +18 -0
  98. package/dist/crypto/aes-gcm.d.ts.map +1 -0
  99. package/dist/crypto/aes-gcm.js +46 -0
  100. package/dist/crypto/aes-gcm.js.map +1 -0
  101. package/dist/d1-token-storage.d.ts +31 -0
  102. package/dist/d1-token-storage.d.ts.map +1 -0
  103. package/dist/d1-token-storage.js +83 -0
  104. package/dist/d1-token-storage.js.map +1 -0
  105. package/dist/did-connect-handler.d.ts +57 -0
  106. package/dist/did-connect-handler.d.ts.map +1 -0
  107. package/dist/did-connect-handler.js +182 -0
  108. package/dist/did-connect-handler.js.map +1 -0
  109. package/dist/did.d.ts +14 -0
  110. package/dist/did.d.ts.map +1 -0
  111. package/dist/did.js +17 -0
  112. package/dist/did.js.map +1 -0
  113. package/dist/email-login-handler.d.ts +50 -0
  114. package/dist/email-login-handler.d.ts.map +1 -0
  115. package/dist/email-login-handler.js +238 -0
  116. package/dist/email-login-handler.js.map +1 -0
  117. package/dist/embedded.d.ts +25 -0
  118. package/dist/embedded.d.ts.map +1 -0
  119. package/dist/embedded.js +21 -0
  120. package/dist/embedded.js.map +1 -0
  121. package/dist/federation-utils.d.ts +23 -0
  122. package/dist/federation-utils.d.ts.map +1 -0
  123. package/dist/federation-utils.js +25 -0
  124. package/dist/federation-utils.js.map +1 -0
  125. package/dist/handler.d.ts +90 -0
  126. package/dist/handler.d.ts.map +1 -0
  127. package/dist/handler.js +591 -0
  128. package/dist/handler.js.map +1 -0
  129. package/dist/handlers/access-key-connect-handler.d.ts +40 -0
  130. package/dist/handlers/access-key-connect-handler.d.ts.map +1 -0
  131. package/dist/handlers/access-key-connect-handler.js +153 -0
  132. package/dist/handlers/access-key-connect-handler.js.map +1 -0
  133. package/dist/handlers/access-key-handler.d.ts +54 -0
  134. package/dist/handlers/access-key-handler.d.ts.map +1 -0
  135. package/dist/handlers/access-key-handler.js +336 -0
  136. package/dist/handlers/access-key-handler.js.map +1 -0
  137. package/dist/handlers/admin-instance-handler.d.ts +29 -0
  138. package/dist/handlers/admin-instance-handler.d.ts.map +1 -0
  139. package/dist/handlers/admin-instance-handler.js +156 -0
  140. package/dist/handlers/admin-instance-handler.js.map +1 -0
  141. package/dist/handlers/auth-handler.d.ts +151 -0
  142. package/dist/handlers/auth-handler.d.ts.map +1 -0
  143. package/dist/handlers/auth-handler.js +873 -0
  144. package/dist/handlers/auth-handler.js.map +1 -0
  145. package/dist/handlers/avatar-handler.d.ts +42 -0
  146. package/dist/handlers/avatar-handler.d.ts.map +1 -0
  147. package/dist/handlers/avatar-handler.js +179 -0
  148. package/dist/handlers/avatar-handler.js.map +1 -0
  149. package/dist/handlers/blocklet-js-handler.d.ts +26 -0
  150. package/dist/handlers/blocklet-js-handler.d.ts.map +1 -0
  151. package/dist/handlers/blocklet-js-handler.js +226 -0
  152. package/dist/handlers/blocklet-js-handler.js.map +1 -0
  153. package/dist/handlers/branding-handler.d.ts +45 -0
  154. package/dist/handlers/branding-handler.d.ts.map +1 -0
  155. package/dist/handlers/branding-handler.js +392 -0
  156. package/dist/handlers/branding-handler.js.map +1 -0
  157. package/dist/handlers/did-connect-handler.d.ts +81 -0
  158. package/dist/handlers/did-connect-handler.d.ts.map +1 -0
  159. package/dist/handlers/did-connect-handler.js +384 -0
  160. package/dist/handlers/did-connect-handler.js.map +1 -0
  161. package/dist/handlers/email-login-handler.d.ts +53 -0
  162. package/dist/handlers/email-login-handler.d.ts.map +1 -0
  163. package/dist/handlers/email-login-handler.js +320 -0
  164. package/dist/handlers/email-login-handler.js.map +1 -0
  165. package/dist/handlers/federation-admin-handler.d.ts +69 -0
  166. package/dist/handlers/federation-admin-handler.d.ts.map +1 -0
  167. package/dist/handlers/federation-admin-handler.js +602 -0
  168. package/dist/handlers/federation-admin-handler.js.map +1 -0
  169. package/dist/handlers/membership-handler.d.ts +27 -0
  170. package/dist/handlers/membership-handler.d.ts.map +1 -0
  171. package/dist/handlers/membership-handler.js +122 -0
  172. package/dist/handlers/membership-handler.js.map +1 -0
  173. package/dist/handlers/oauth-handler.d.ts +79 -0
  174. package/dist/handlers/oauth-handler.d.ts.map +1 -0
  175. package/dist/handlers/oauth-handler.js +870 -0
  176. package/dist/handlers/oauth-handler.js.map +1 -0
  177. package/dist/handlers/passkey-handler.d.ts +112 -0
  178. package/dist/handlers/passkey-handler.d.ts.map +1 -0
  179. package/dist/handlers/passkey-handler.js +1020 -0
  180. package/dist/handlers/passkey-handler.js.map +1 -0
  181. package/dist/handlers/team-handler.d.ts +120 -0
  182. package/dist/handlers/team-handler.d.ts.map +1 -0
  183. package/dist/handlers/team-handler.js +1750 -0
  184. package/dist/handlers/team-handler.js.map +1 -0
  185. package/dist/handlers/ticket-handler.d.ts +33 -0
  186. package/dist/handlers/ticket-handler.d.ts.map +1 -0
  187. package/dist/handlers/ticket-handler.js +131 -0
  188. package/dist/handlers/ticket-handler.js.map +1 -0
  189. package/dist/identity/auth-entrypoint.d.ts +45 -0
  190. package/dist/identity/auth-entrypoint.d.ts.map +1 -0
  191. package/dist/identity/auth-entrypoint.js +32 -0
  192. package/dist/identity/auth-entrypoint.js.map +1 -0
  193. package/dist/identity/auto-membership.d.ts +16 -0
  194. package/dist/identity/auto-membership.d.ts.map +1 -0
  195. package/dist/identity/auto-membership.js +52 -0
  196. package/dist/identity/auto-membership.js.map +1 -0
  197. package/dist/identity/federation.d.ts +23 -0
  198. package/dist/identity/federation.d.ts.map +1 -0
  199. package/dist/identity/federation.js +26 -0
  200. package/dist/identity/federation.js.map +1 -0
  201. package/dist/identity/gravatar.d.ts +14 -0
  202. package/dist/identity/gravatar.d.ts.map +1 -0
  203. package/dist/identity/gravatar.js +132 -0
  204. package/dist/identity/gravatar.js.map +1 -0
  205. package/dist/identity/instance-role.d.ts +10 -0
  206. package/dist/identity/instance-role.d.ts.map +1 -0
  207. package/dist/identity/instance-role.js +20 -0
  208. package/dist/identity/instance-role.js.map +1 -0
  209. package/dist/identity/invitation-util.d.ts +7 -0
  210. package/dist/identity/invitation-util.d.ts.map +1 -0
  211. package/dist/identity/invitation-util.js +66 -0
  212. package/dist/identity/invitation-util.js.map +1 -0
  213. package/dist/identity/jwt.d.ts +7 -0
  214. package/dist/identity/jwt.d.ts.map +1 -0
  215. package/dist/identity/jwt.js +72 -0
  216. package/dist/identity/jwt.js.map +1 -0
  217. package/dist/identity/passkey-did.d.ts +14 -0
  218. package/dist/identity/passkey-did.d.ts.map +1 -0
  219. package/dist/identity/passkey-did.js +17 -0
  220. package/dist/identity/passkey-did.js.map +1 -0
  221. package/dist/identity/session-context.d.ts +35 -0
  222. package/dist/identity/session-context.d.ts.map +1 -0
  223. package/dist/identity/session-context.js +39 -0
  224. package/dist/identity/session-context.js.map +1 -0
  225. package/dist/identity/sign-response.d.ts +31 -0
  226. package/dist/identity/sign-response.d.ts.map +1 -0
  227. package/dist/identity/sign-response.js +62 -0
  228. package/dist/identity/sign-response.js.map +1 -0
  229. package/dist/identity/wallet-identity.d.ts +71 -0
  230. package/dist/identity/wallet-identity.d.ts.map +1 -0
  231. package/dist/identity/wallet-identity.js +97 -0
  232. package/dist/identity/wallet-identity.js.map +1 -0
  233. package/dist/identity/webauthn.d.ts +69 -0
  234. package/dist/identity/webauthn.d.ts.map +1 -0
  235. package/dist/identity/webauthn.js +113 -0
  236. package/dist/identity/webauthn.js.map +1 -0
  237. package/dist/index.d.ts +67 -0
  238. package/dist/index.d.ts.map +1 -0
  239. package/dist/index.js +53 -0
  240. package/dist/index.js.map +1 -0
  241. package/dist/instance-role.d.ts +10 -0
  242. package/dist/instance-role.d.ts.map +1 -0
  243. package/dist/instance-role.js +20 -0
  244. package/dist/instance-role.js.map +1 -0
  245. package/dist/jwt.d.ts +7 -0
  246. package/dist/jwt.d.ts.map +1 -0
  247. package/dist/jwt.js +72 -0
  248. package/dist/jwt.js.map +1 -0
  249. package/dist/locale.d.ts +17 -0
  250. package/dist/locale.d.ts.map +1 -0
  251. package/dist/locale.js +48 -0
  252. package/dist/locale.js.map +1 -0
  253. package/dist/login-entry.d.ts +9 -0
  254. package/dist/login-entry.d.ts.map +1 -0
  255. package/dist/login-entry.js +9 -0
  256. package/dist/login-entry.js.map +1 -0
  257. package/dist/membership-handler.d.ts +27 -0
  258. package/dist/membership-handler.d.ts.map +1 -0
  259. package/dist/membership-handler.js +111 -0
  260. package/dist/membership-handler.js.map +1 -0
  261. package/dist/oauth-adapters/apple.d.ts +36 -0
  262. package/dist/oauth-adapters/apple.d.ts.map +1 -0
  263. package/dist/oauth-adapters/apple.js +127 -0
  264. package/dist/oauth-adapters/apple.js.map +1 -0
  265. package/dist/oauth-adapters/auth0-legacy.d.ts +28 -0
  266. package/dist/oauth-adapters/auth0-legacy.d.ts.map +1 -0
  267. package/dist/oauth-adapters/auth0-legacy.js +63 -0
  268. package/dist/oauth-adapters/auth0-legacy.js.map +1 -0
  269. package/dist/oauth-adapters/auth0.d.ts +24 -0
  270. package/dist/oauth-adapters/auth0.d.ts.map +1 -0
  271. package/dist/oauth-adapters/auth0.js +59 -0
  272. package/dist/oauth-adapters/auth0.js.map +1 -0
  273. package/dist/oauth-adapters/facebook.d.ts +20 -0
  274. package/dist/oauth-adapters/facebook.d.ts.map +1 -0
  275. package/dist/oauth-adapters/facebook.js +52 -0
  276. package/dist/oauth-adapters/facebook.js.map +1 -0
  277. package/dist/oauth-adapters/github.d.ts +20 -0
  278. package/dist/oauth-adapters/github.d.ts.map +1 -0
  279. package/dist/oauth-adapters/github.js +78 -0
  280. package/dist/oauth-adapters/github.js.map +1 -0
  281. package/dist/oauth-adapters/google.d.ts +21 -0
  282. package/dist/oauth-adapters/google.d.ts.map +1 -0
  283. package/dist/oauth-adapters/google.js +61 -0
  284. package/dist/oauth-adapters/google.js.map +1 -0
  285. package/dist/oauth-adapters/jwks-cache.d.ts +24 -0
  286. package/dist/oauth-adapters/jwks-cache.d.ts.map +1 -0
  287. package/dist/oauth-adapters/jwks-cache.js +77 -0
  288. package/dist/oauth-adapters/jwks-cache.js.map +1 -0
  289. package/dist/oauth-adapters/twitter.d.ts +23 -0
  290. package/dist/oauth-adapters/twitter.d.ts.map +1 -0
  291. package/dist/oauth-adapters/twitter.js +65 -0
  292. package/dist/oauth-adapters/twitter.js.map +1 -0
  293. package/dist/oauth-adapters/types.d.ts +60 -0
  294. package/dist/oauth-adapters/types.d.ts.map +1 -0
  295. package/dist/oauth-adapters/types.js +8 -0
  296. package/dist/oauth-adapters/types.js.map +1 -0
  297. package/dist/oauth-callback-page.d.ts +9 -0
  298. package/dist/oauth-callback-page.d.ts.map +1 -0
  299. package/dist/oauth-callback-page.js +31 -0
  300. package/dist/oauth-callback-page.js.map +1 -0
  301. package/dist/oauth-handler.d.ts +72 -0
  302. package/dist/oauth-handler.d.ts.map +1 -0
  303. package/dist/oauth-handler.js +423 -0
  304. package/dist/oauth-handler.js.map +1 -0
  305. package/dist/page.d.ts +33 -0
  306. package/dist/page.d.ts.map +1 -0
  307. package/dist/page.js +59 -0
  308. package/dist/page.js.map +1 -0
  309. package/dist/pages/admin/i18n.d.ts +31 -0
  310. package/dist/pages/admin/i18n.d.ts.map +1 -0
  311. package/dist/pages/admin/i18n.js +1345 -0
  312. package/dist/pages/admin/i18n.js.map +1 -0
  313. package/dist/pages/admin/index.d.ts +36 -0
  314. package/dist/pages/admin/index.d.ts.map +1 -0
  315. package/dist/pages/admin/index.js +418 -0
  316. package/dist/pages/admin/index.js.map +1 -0
  317. package/dist/pages/admin/scripts/api-client.d.ts +6 -0
  318. package/dist/pages/admin/scripts/api-client.d.ts.map +1 -0
  319. package/dist/pages/admin/scripts/api-client.js +38 -0
  320. package/dist/pages/admin/scripts/api-client.js.map +1 -0
  321. package/dist/pages/admin/scripts/cropper.d.ts +8 -0
  322. package/dist/pages/admin/scripts/cropper.d.ts.map +1 -0
  323. package/dist/pages/admin/scripts/cropper.js +222 -0
  324. package/dist/pages/admin/scripts/cropper.js.map +1 -0
  325. package/dist/pages/admin/scripts/dialog.d.ts +5 -0
  326. package/dist/pages/admin/scripts/dialog.d.ts.map +1 -0
  327. package/dist/pages/admin/scripts/dialog.js +88 -0
  328. package/dist/pages/admin/scripts/dialog.js.map +1 -0
  329. package/dist/pages/admin/scripts/router.d.ts +5 -0
  330. package/dist/pages/admin/scripts/router.d.ts.map +1 -0
  331. package/dist/pages/admin/scripts/router.js +54 -0
  332. package/dist/pages/admin/scripts/router.js.map +1 -0
  333. package/dist/pages/admin/scripts/toast.d.ts +5 -0
  334. package/dist/pages/admin/scripts/toast.d.ts.map +1 -0
  335. package/dist/pages/admin/scripts/toast.js +30 -0
  336. package/dist/pages/admin/scripts/toast.js.map +1 -0
  337. package/dist/pages/admin/scripts/utils.d.ts +5 -0
  338. package/dist/pages/admin/scripts/utils.d.ts.map +1 -0
  339. package/dist/pages/admin/scripts/utils.js +108 -0
  340. package/dist/pages/admin/scripts/utils.js.map +1 -0
  341. package/dist/pages/admin/styles.d.ts +9 -0
  342. package/dist/pages/admin/styles.d.ts.map +1 -0
  343. package/dist/pages/admin/styles.js +2223 -0
  344. package/dist/pages/admin/styles.js.map +1 -0
  345. package/dist/pages/admin/tab-access-keys.d.ts +8 -0
  346. package/dist/pages/admin/tab-access-keys.d.ts.map +1 -0
  347. package/dist/pages/admin/tab-access-keys.js +255 -0
  348. package/dist/pages/admin/tab-access-keys.js.map +1 -0
  349. package/dist/pages/admin/tab-access.d.ts +14 -0
  350. package/dist/pages/admin/tab-access.d.ts.map +1 -0
  351. package/dist/pages/admin/tab-access.js +420 -0
  352. package/dist/pages/admin/tab-access.js.map +1 -0
  353. package/dist/pages/admin/tab-appearance.d.ts +9 -0
  354. package/dist/pages/admin/tab-appearance.d.ts.map +1 -0
  355. package/dist/pages/admin/tab-appearance.js +298 -0
  356. package/dist/pages/admin/tab-appearance.js.map +1 -0
  357. package/dist/pages/admin/tab-audit.d.ts +8 -0
  358. package/dist/pages/admin/tab-audit.d.ts.map +1 -0
  359. package/dist/pages/admin/tab-audit.js +289 -0
  360. package/dist/pages/admin/tab-audit.js.map +1 -0
  361. package/dist/pages/admin/tab-branding.d.ts +9 -0
  362. package/dist/pages/admin/tab-branding.d.ts.map +1 -0
  363. package/dist/pages/admin/tab-branding.js +486 -0
  364. package/dist/pages/admin/tab-branding.js.map +1 -0
  365. package/dist/pages/admin/tab-federation.d.ts +8 -0
  366. package/dist/pages/admin/tab-federation.d.ts.map +1 -0
  367. package/dist/pages/admin/tab-federation.js +416 -0
  368. package/dist/pages/admin/tab-federation.js.map +1 -0
  369. package/dist/pages/admin/tab-invitations.d.ts +8 -0
  370. package/dist/pages/admin/tab-invitations.d.ts.map +1 -0
  371. package/dist/pages/admin/tab-invitations.js +161 -0
  372. package/dist/pages/admin/tab-invitations.js.map +1 -0
  373. package/dist/pages/admin/tab-members.d.ts +8 -0
  374. package/dist/pages/admin/tab-members.d.ts.map +1 -0
  375. package/dist/pages/admin/tab-members.js +575 -0
  376. package/dist/pages/admin/tab-members.js.map +1 -0
  377. package/dist/pages/admin/tab-profile-accounts.d.ts +9 -0
  378. package/dist/pages/admin/tab-profile-accounts.d.ts.map +1 -0
  379. package/dist/pages/admin/tab-profile-accounts.js +580 -0
  380. package/dist/pages/admin/tab-profile-accounts.js.map +1 -0
  381. package/dist/pages/admin/tab-profile.d.ts +8 -0
  382. package/dist/pages/admin/tab-profile.d.ts.map +1 -0
  383. package/dist/pages/admin/tab-profile.js +383 -0
  384. package/dist/pages/admin/tab-profile.js.map +1 -0
  385. package/dist/pages/admin/tab-settings.d.ts +9 -0
  386. package/dist/pages/admin/tab-settings.d.ts.map +1 -0
  387. package/dist/pages/admin/tab-settings.js +486 -0
  388. package/dist/pages/admin/tab-settings.js.map +1 -0
  389. package/dist/pages/admin-instances-page.d.ts +8 -0
  390. package/dist/pages/admin-instances-page.d.ts.map +1 -0
  391. package/dist/pages/admin-instances-page.js +386 -0
  392. package/dist/pages/admin-instances-page.js.map +1 -0
  393. package/dist/pages/auth-script.d.ts +18 -0
  394. package/dist/pages/auth-script.d.ts.map +1 -0
  395. package/dist/pages/auth-script.js +185 -0
  396. package/dist/pages/auth-script.js.map +1 -0
  397. package/dist/pages/design-tokens.d.ts +86 -0
  398. package/dist/pages/design-tokens.d.ts.map +1 -0
  399. package/dist/pages/design-tokens.js +159 -0
  400. package/dist/pages/design-tokens.js.map +1 -0
  401. package/dist/pages/did-address-bundle-entry.d.ts +14 -0
  402. package/dist/pages/did-address-bundle-entry.d.ts.map +1 -0
  403. package/dist/pages/did-address-bundle-entry.js +20 -0
  404. package/dist/pages/did-address-bundle-entry.js.map +1 -0
  405. package/dist/pages/did-connect-script.d.ts +16 -0
  406. package/dist/pages/did-connect-script.d.ts.map +1 -0
  407. package/dist/pages/did-connect-script.js +105 -0
  408. package/dist/pages/did-connect-script.js.map +1 -0
  409. package/dist/pages/error-page.d.ts +21 -0
  410. package/dist/pages/error-page.d.ts.map +1 -0
  411. package/dist/pages/error-page.js +103 -0
  412. package/dist/pages/error-page.js.map +1 -0
  413. package/dist/pages/gen-access-key-page.d.ts +27 -0
  414. package/dist/pages/gen-access-key-page.d.ts.map +1 -0
  415. package/dist/pages/gen-access-key-page.js +406 -0
  416. package/dist/pages/gen-access-key-page.js.map +1 -0
  417. package/dist/pages/header-bundle-entry.d.ts +2 -0
  418. package/dist/pages/header-bundle-entry.d.ts.map +1 -0
  419. package/dist/pages/header-bundle-entry.js +4 -0
  420. package/dist/pages/header-bundle-entry.js.map +1 -0
  421. package/dist/pages/homepage.d.ts +17 -0
  422. package/dist/pages/homepage.d.ts.map +1 -0
  423. package/dist/pages/homepage.js +407 -0
  424. package/dist/pages/homepage.js.map +1 -0
  425. package/dist/pages/invite-page.d.ts +16 -0
  426. package/dist/pages/invite-page.d.ts.map +1 -0
  427. package/dist/pages/invite-page.js +241 -0
  428. package/dist/pages/invite-page.js.map +1 -0
  429. package/dist/pages/login-bundle-entry.d.ts +9 -0
  430. package/dist/pages/login-bundle-entry.d.ts.map +1 -0
  431. package/dist/pages/login-bundle-entry.js +9 -0
  432. package/dist/pages/login-bundle-entry.js.map +1 -0
  433. package/dist/pages/login-page.d.ts +37 -0
  434. package/dist/pages/login-page.d.ts.map +1 -0
  435. package/dist/pages/login-page.js +93 -0
  436. package/dist/pages/login-page.js.map +1 -0
  437. package/dist/pages/oauth-callback-page.d.ts +16 -0
  438. package/dist/pages/oauth-callback-page.d.ts.map +1 -0
  439. package/dist/pages/oauth-callback-page.js +84 -0
  440. package/dist/pages/oauth-callback-page.js.map +1 -0
  441. package/dist/pages/qr-bundle-entry.d.ts +6 -0
  442. package/dist/pages/qr-bundle-entry.d.ts.map +1 -0
  443. package/dist/pages/qr-bundle-entry.js +7 -0
  444. package/dist/pages/qr-bundle-entry.js.map +1 -0
  445. package/dist/pages/shared-styles.d.ts +6 -0
  446. package/dist/pages/shared-styles.d.ts.map +1 -0
  447. package/dist/pages/shared-styles.js +109 -0
  448. package/dist/pages/shared-styles.js.map +1 -0
  449. package/dist/rbac.d.ts +19 -0
  450. package/dist/rbac.d.ts.map +1 -0
  451. package/dist/rbac.js +76 -0
  452. package/dist/rbac.js.map +1 -0
  453. package/dist/session-context.d.ts +35 -0
  454. package/dist/session-context.d.ts.map +1 -0
  455. package/dist/session-context.js +39 -0
  456. package/dist/session-context.js.map +1 -0
  457. package/dist/store/d1-compat.d.ts +21 -0
  458. package/dist/store/d1-compat.d.ts.map +1 -0
  459. package/dist/store/d1-compat.js +111 -0
  460. package/dist/store/d1-compat.js.map +1 -0
  461. package/dist/store/d1-store.d.ts +348 -0
  462. package/dist/store/d1-store.d.ts.map +1 -0
  463. package/dist/store/d1-store.js +1587 -0
  464. package/dist/store/d1-store.js.map +1 -0
  465. package/dist/store/d1-token-storage.d.ts +31 -0
  466. package/dist/store/d1-token-storage.d.ts.map +1 -0
  467. package/dist/store/d1-token-storage.js +92 -0
  468. package/dist/store/d1-token-storage.js.map +1 -0
  469. package/dist/store.d.ts +222 -0
  470. package/dist/store.d.ts.map +1 -0
  471. package/dist/store.js +1366 -0
  472. package/dist/store.js.map +1 -0
  473. package/dist/team-handler.d.ts +90 -0
  474. package/dist/team-handler.d.ts.map +1 -0
  475. package/dist/team-handler.js +1225 -0
  476. package/dist/team-handler.js.map +1 -0
  477. package/dist/theme-utils.d.ts +195 -0
  478. package/dist/theme-utils.d.ts.map +1 -0
  479. package/dist/theme-utils.js +132 -0
  480. package/dist/theme-utils.js.map +1 -0
  481. package/dist/ticket-handler.d.ts +28 -0
  482. package/dist/ticket-handler.d.ts.map +1 -0
  483. package/dist/ticket-handler.js +74 -0
  484. package/dist/ticket-handler.js.map +1 -0
  485. package/dist/types.d.ts +258 -0
  486. package/dist/types.d.ts.map +1 -0
  487. package/dist/types.js +3 -0
  488. package/dist/types.js.map +1 -0
  489. package/dist/wallet-identity.d.ts +32 -0
  490. package/dist/wallet-identity.d.ts.map +1 -0
  491. package/dist/wallet-identity.js +43 -0
  492. package/dist/wallet-identity.js.map +1 -0
  493. package/dist/webauthn.d.ts +65 -0
  494. package/dist/webauthn.d.ts.map +1 -0
  495. package/dist/webauthn.js +112 -0
  496. package/dist/webauthn.js.map +1 -0
  497. package/migrations/0001_initial_schema.sql +143 -0
  498. package/migrations/0002_add_columns.sql +12 -0
  499. package/migrations/0003_add_tables.sql +53 -0
  500. package/migrations/0004_seed_policies.sql +17 -0
  501. package/migrations/0005_add_instance_indexes.sql +9 -0
  502. package/migrations/0006_add_audit_query_indexes.sql +8 -0
  503. package/package.json +74 -0
@@ -0,0 +1,153 @@
1
+ /**
2
+ * AccessKeyConnectHandler — Browser-auth flow for external services to obtain access keys.
3
+ *
4
+ * Flow: caller creates session → opens browser → user logs in & authorizes → caller polls for encrypted key.
5
+ *
6
+ * Routes:
7
+ * GET /.well-known/service/gen-access-key — Browser authorization page
8
+ * POST /.well-known/service/api/access-key/session — Create authorization session
9
+ * GET /.well-known/service/api/access-key/session?sid= — Poll session status
10
+ * POST /.well-known/service/api/access-key/authorize — User authorizes (requires login)
11
+ * DELETE /.well-known/service/api/access-key/session?sid= — Delete session
12
+ */
13
+ import { encryptAES } from "../crypto/aes-gcm.js";
14
+ import { buildGenAccessKeyPageHTML } from "../pages/gen-access-key-page.js";
15
+ const SESSION_TTL_MS = 5 * 60 * 1000; // 5 minutes
16
+ export class AccessKeyConnectHandler {
17
+ store;
18
+ auth;
19
+ accessKeyHandler;
20
+ pageOptions;
21
+ constructor(options) {
22
+ this.store = options.store;
23
+ this.auth = options.auth;
24
+ this.accessKeyHandler = options.accessKeyHandler;
25
+ this.pageOptions = options.pageOptions;
26
+ }
27
+ async fetch(request, instanceDid) {
28
+ const url = new URL(request.url);
29
+ const { pathname } = url;
30
+ // Browser authorization page
31
+ if (pathname === "/.well-known/service/gen-access-key" &&
32
+ request.method === "GET") {
33
+ return new Response(buildGenAccessKeyPageHTML(this.pageOptions), {
34
+ headers: {
35
+ "Content-Type": "text/html; charset=utf-8",
36
+ "Cache-Control": "no-store",
37
+ },
38
+ });
39
+ }
40
+ // Session API
41
+ if (pathname === "/.well-known/service/api/access-key/session") {
42
+ if (request.method === "POST")
43
+ return this.createSession(request);
44
+ if (request.method === "GET")
45
+ return this.getSession(request);
46
+ if (request.method === "DELETE")
47
+ return this.deleteSession(request);
48
+ return null;
49
+ }
50
+ // User authorization
51
+ if (pathname === "/.well-known/service/api/access-key/authorize" &&
52
+ request.method === "POST") {
53
+ return this.authorize(request, instanceDid);
54
+ }
55
+ return null;
56
+ }
57
+ /** POST /api/access-key/session — create a temporary authorization session */
58
+ async createSession(_request) {
59
+ let source = "";
60
+ try {
61
+ const body = (await _request.json());
62
+ source = body.source || "";
63
+ }
64
+ catch {
65
+ // empty body is ok
66
+ }
67
+ const id = crypto.randomUUID();
68
+ const challenge = Array.from(crypto.getRandomValues(new Uint8Array(24)))
69
+ .map((b) => b.toString(16).padStart(2, "0"))
70
+ .join("");
71
+ const expiresAt = new Date(Date.now() + SESSION_TTL_MS).toISOString();
72
+ // Opportunistic cleanup of expired sessions
73
+ await this.store.purgeExpiredAccessKeySessions();
74
+ await this.store.createAccessKeySession({ id, challenge, source, expiresAt });
75
+ return jsonResponse({ id, challenge });
76
+ }
77
+ /** GET /api/access-key/session?sid= — caller polls for completion */
78
+ async getSession(request) {
79
+ const sid = new URL(request.url).searchParams.get("sid");
80
+ if (!sid)
81
+ return jsonResponse({ error: "Missing sid" }, 400);
82
+ const session = await this.store.getAccessKeySession(sid);
83
+ if (!session) {
84
+ return jsonResponse({ error: "Session not found or expired" }, 404);
85
+ }
86
+ // Never expose challenge in poll response
87
+ return jsonResponse({
88
+ status: session.status,
89
+ accessKeyId: session.access_key_id || null,
90
+ accessKeySecret: session.access_key_secret_encrypted || null,
91
+ });
92
+ }
93
+ /** DELETE /api/access-key/session?sid= — cleanup */
94
+ async deleteSession(request) {
95
+ const sid = new URL(request.url).searchParams.get("sid");
96
+ if (sid)
97
+ await this.store.deleteAccessKeySession(sid);
98
+ return jsonResponse({ ok: true });
99
+ }
100
+ /** POST /api/access-key/authorize — user confirms authorization in browser */
101
+ async authorize(request, instanceDid) {
102
+ const caller = await this.auth.verifyFull(request);
103
+ if (!caller) {
104
+ return jsonResponse({ error: "Authentication required" }, 401);
105
+ }
106
+ let body;
107
+ try {
108
+ body = (await request.json());
109
+ }
110
+ catch {
111
+ return jsonResponse({ error: "Invalid JSON body" }, 400);
112
+ }
113
+ const { sid } = body;
114
+ if (!sid)
115
+ return jsonResponse({ error: "Missing sid" }, 400);
116
+ const session = await this.store.getAccessKeySession(sid);
117
+ if (!session) {
118
+ return jsonResponse({ error: "Session not found or expired" }, 404);
119
+ }
120
+ if (session.status === "completed") {
121
+ return jsonResponse({ error: "This session has already been authorized" }, 409);
122
+ }
123
+ if (session.status !== "pending") {
124
+ return jsonResponse({ error: "Invalid session state" }, 400);
125
+ }
126
+ // Create access key via AccessKeyHandler.createKeyInternal (preserves audit log)
127
+ const accessKey = await this.accessKeyHandler.createKeyInternal({
128
+ role: caller.role || "guest",
129
+ remark: `Authorized: ${session.source || "external"}`,
130
+ createdBy: caller.did,
131
+ authType: "simple",
132
+ instanceDid,
133
+ });
134
+ // AES-GCM encrypt secret using session challenge
135
+ const encrypted = await encryptAES(accessKey.accessKeySecret, session.challenge);
136
+ await this.store.updateAccessKeySession(sid, {
137
+ status: "completed",
138
+ accessKeyId: accessKey.accessKeyId,
139
+ accessKeySecretEncrypted: encrypted,
140
+ });
141
+ return jsonResponse({ ok: true, accessKeyId: accessKey.accessKeyId });
142
+ }
143
+ }
144
+ function jsonResponse(data, status = 200) {
145
+ return new Response(JSON.stringify(data), {
146
+ status,
147
+ headers: {
148
+ "Content-Type": "application/json",
149
+ "Cache-Control": "private, no-store",
150
+ },
151
+ });
152
+ }
153
+ //# sourceMappingURL=access-key-connect-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"access-key-connect-handler.js","sourceRoot":"","sources":["../../src/handlers/access-key-connect-handler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * AccessKeyHandler — HTTP handler for access key management API.
3
+ *
4
+ * API routes (/.well-known/service/api/access-keys):
5
+ * GET / — List access keys (paginated, searchable)
6
+ * POST / — Create a new access key
7
+ * GET /:id — Get access key details
8
+ * PUT /:id — Update access key (remark, expireAt)
9
+ * DELETE /:id — Delete an access key
10
+ */
11
+ import type { D1Store } from "../store/d1-store.js";
12
+ import type { Role } from "../types.js";
13
+ import type { Auth } from "./passkey-handler.js";
14
+ export declare class AccessKeyHandler {
15
+ private store;
16
+ private passkey;
17
+ private apiBase;
18
+ constructor(options: {
19
+ store: D1Store;
20
+ passkey: Auth;
21
+ basePath?: string;
22
+ });
23
+ /**
24
+ * Create an access key programmatically (internal use — caller must handle auth).
25
+ * Used by AccessKeyConnectHandler for browser-auth flow.
26
+ */
27
+ createKeyInternal(params: {
28
+ role: Role;
29
+ remark: string;
30
+ createdBy: string;
31
+ authType?: "simple";
32
+ instanceDid?: string;
33
+ expireAt?: string | null;
34
+ ip?: string;
35
+ }): Promise<{
36
+ accessKeyId: string;
37
+ accessKeySecret: string;
38
+ }>;
39
+ /** Main HTTP router. Returns Response or null if path doesn't match. */
40
+ fetch(request: Request, instanceDid?: string): Promise<Response | null>;
41
+ private handleAPI;
42
+ private verifyAndCheckApproval;
43
+ private handleList;
44
+ private handleCreate;
45
+ private handleGet;
46
+ private handleUpdate;
47
+ private handleDelete;
48
+ /** Non-admin callers can only operate on keys they created. Admin+ can operate on any key. */
49
+ private requireOwnership;
50
+ private jsonResponse;
51
+ private errorResponse;
52
+ private parseJSON;
53
+ }
54
+ //# sourceMappingURL=access-key-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"access-key-handler.d.ts","sourceRoot":"","sources":["../../src/handlers/access-key-handler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAKH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,KAAK,EAAkB,IAAI,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAcjD,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,KAAK,CAAU;IACvB,OAAO,CAAC,OAAO,CAAO;IACtB,OAAO,CAAC,OAAO,CAAS;gBAEZ,OAAO,EAAE;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,IAAI,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE;IAMzE;;;OAGG;IACG,iBAAiB,CAAC,MAAM,EAAE;QAC9B,IAAI,EAAE,IAAI,CAAC;QACX,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,CAAC,EAAE,QAAQ,CAAC;QACpB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACzB,EAAE,CAAC,EAAE,MAAM,CAAC;KACb,GAAG,OAAO,CAAC;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,eAAe,EAAE,MAAM,CAAA;KAAE,CAAC;IA6B7D,wEAAwE;IAClE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;YAU/D,SAAS;YAoDT,sBAAsB;YAyCtB,UAAU;YA6BV,YAAY;YAuEZ,SAAS;YAuBT,YAAY;YAuEZ,YAAY;IAkD1B,8FAA8F;IAC9F,OAAO,CAAC,gBAAgB;IAQxB,OAAO,CAAC,YAAY;IAUpB,OAAO,CAAC,aAAa;YAIP,SAAS;CAOxB"}
@@ -0,0 +1,336 @@
1
+ /**
2
+ * AccessKeyHandler — HTTP handler for access key management API.
3
+ *
4
+ * API routes (/.well-known/service/api/access-keys):
5
+ * GET / — List access keys (paginated, searchable)
6
+ * POST / — Create a new access key
7
+ * GET /:id — Get access key details
8
+ * PUT /:id — Update access key (remark, expireAt)
9
+ * DELETE /:id — Delete an access key
10
+ */
11
+ import { generateAccessKey } from "../access/access-key-util.js";
12
+ import { PermissionError, requirePermission } from "../access/rbac.js";
13
+ import { resolveInstanceRole } from "../identity/instance-role.js";
14
+ const API_BASE = "/.well-known/service/api/access-keys";
15
+ const ROLE_RANK = { owner: 3, admin: 2, member: 1, guest: 0 };
16
+ const ADMIN_RANK = 2;
17
+ const MAX_REMARK_LENGTH = 200;
18
+ const MAX_PAGE_SIZE = 100;
19
+ const VALID_ROLES = ["owner", "admin", "member", "guest"];
20
+ export class AccessKeyHandler {
21
+ store;
22
+ passkey;
23
+ apiBase;
24
+ constructor(options) {
25
+ this.store = options.store;
26
+ this.passkey = options.passkey;
27
+ this.apiBase = options.basePath ?? API_BASE;
28
+ }
29
+ /**
30
+ * Create an access key programmatically (internal use — caller must handle auth).
31
+ * Used by AccessKeyConnectHandler for browser-auth flow.
32
+ */
33
+ async createKeyInternal(params) {
34
+ const key = generateAccessKey();
35
+ await this.store.createAccessKey({
36
+ accessKeyId: key.accessKeyId,
37
+ accessKeyPublic: key.accessKeyPublic,
38
+ role: params.role,
39
+ remark: params.remark,
40
+ createdBy: params.createdBy,
41
+ expireAt: params.expireAt ?? null,
42
+ instanceDid: params.instanceDid,
43
+ });
44
+ // Audit log
45
+ await this.store.createAuditLog({
46
+ action: "accessKey.create",
47
+ operatorDid: params.createdBy,
48
+ metadata: {
49
+ accessKeyId: key.accessKeyId,
50
+ role: params.role,
51
+ remark: params.remark,
52
+ source: params.authType === "simple" ? "access-key-connect" : "api",
53
+ },
54
+ ip: params.ip,
55
+ instanceDid: params.instanceDid,
56
+ });
57
+ return { accessKeyId: key.accessKeyId, accessKeySecret: key.accessKeySecret };
58
+ }
59
+ /** Main HTTP router. Returns Response or null if path doesn't match. */
60
+ async fetch(request, instanceDid) {
61
+ const url = new URL(request.url);
62
+ const { pathname } = url;
63
+ if (!pathname.startsWith(this.apiBase))
64
+ return null;
65
+ const path = pathname.slice(this.apiBase.length) || "/";
66
+ return this.handleAPI(request, path, url, instanceDid);
67
+ }
68
+ async handleAPI(request, path, url, instanceDid) {
69
+ const method = request.method;
70
+ try {
71
+ const caller = await this.verifyAndCheckApproval(request, instanceDid);
72
+ // List: GET /
73
+ if (method === "GET" && path === "/") {
74
+ return await this.handleList(caller, url, instanceDid);
75
+ }
76
+ // Create: POST /
77
+ if (method === "POST" && path === "/") {
78
+ return await this.handleCreate(caller, request, instanceDid);
79
+ }
80
+ // Detail/Update/Delete: /:id
81
+ const idMatch = path.match(/^\/([^/]+)$/);
82
+ if (!idMatch)
83
+ return this.errorResponse("Not found", 404, "NOT_FOUND");
84
+ const accessKeyId = decodeURIComponent(idMatch[1]);
85
+ if (method === "GET") {
86
+ return await this.handleGet(caller, accessKeyId, instanceDid);
87
+ }
88
+ if (method === "PUT") {
89
+ return await this.handleUpdate(caller, accessKeyId, request, instanceDid);
90
+ }
91
+ if (method === "DELETE") {
92
+ return await this.handleDelete(caller, accessKeyId, instanceDid);
93
+ }
94
+ return this.errorResponse("Not found", 404, "NOT_FOUND");
95
+ }
96
+ catch (err) {
97
+ if (err instanceof AccessKeyError) {
98
+ return this.errorResponse(err.message, err.status, err.code);
99
+ }
100
+ if (err instanceof PermissionError) {
101
+ return this.errorResponse("Insufficient permissions", 403, "FORBIDDEN");
102
+ }
103
+ const message = err instanceof Error ? err.message : "Internal error";
104
+ return this.errorResponse(message, 500, "INTERNAL_ERROR");
105
+ }
106
+ }
107
+ // ─── Auth middleware ─────────────────────────────────────────────────
108
+ async verifyAndCheckApproval(request, instanceDid) {
109
+ const caller = await this.passkey.verifyFull(request);
110
+ if (!caller) {
111
+ throw new AccessKeyError("Authentication required", 401, "UNAUTHENTICATED");
112
+ }
113
+ const user = await this.store.getUserByDid(caller.did);
114
+ if (!user) {
115
+ throw new AccessKeyError("User not found", 401, "UNAUTHENTICATED");
116
+ }
117
+ if (!user.approved) {
118
+ throw new AccessKeyError("User is blocked", 403, "BLOCKED");
119
+ }
120
+ const ip = request.headers.get("CF-Connecting-IP") ?? undefined;
121
+ if (instanceDid) {
122
+ const effectiveRole = await resolveInstanceRole(this.store, caller.did, instanceDid, user.role ?? undefined);
123
+ if (!effectiveRole) {
124
+ throw new AccessKeyError("Not a member of this instance", 403, "FORBIDDEN");
125
+ }
126
+ return { ...caller, role: effectiveRole, ip };
127
+ }
128
+ return {
129
+ ...caller,
130
+ role: caller.role ?? user.role ?? "guest",
131
+ ip,
132
+ };
133
+ }
134
+ // ─── Handlers ────────────────────────────────────────────────────────
135
+ async handleList(caller, url, instanceDid) {
136
+ requirePermission(caller.role, "accessKey.list");
137
+ let page = Number.parseInt(url.searchParams.get("page") ?? "1", 10);
138
+ let pageSize = Number.parseInt(url.searchParams.get("pageSize") ?? "20", 10);
139
+ const search = url.searchParams.get("search") ?? undefined;
140
+ if (page < 1)
141
+ page = 1;
142
+ if (pageSize > MAX_PAGE_SIZE)
143
+ pageSize = MAX_PAGE_SIZE;
144
+ if (pageSize < 1)
145
+ pageSize = 20;
146
+ // Non-admin users only see their own keys
147
+ const callerRank = ROLE_RANK[caller.role] ?? 0;
148
+ const createdBy = callerRank >= ADMIN_RANK ? undefined : caller.did;
149
+ const result = await this.store.getAccessKeys({
150
+ page,
151
+ pageSize,
152
+ search,
153
+ createdBy,
154
+ instanceDid,
155
+ });
156
+ return this.jsonResponse({ ...result, page, pageSize });
157
+ }
158
+ async handleCreate(caller, request, instanceDid) {
159
+ requirePermission(caller.role, "accessKey.create");
160
+ const body = await this.parseJSON(request);
161
+ // Validate role
162
+ if (!body.role) {
163
+ throw new AccessKeyError("Missing required field: role", 400, "VALIDATION_ERROR");
164
+ }
165
+ if (!VALID_ROLES.includes(body.role)) {
166
+ throw new AccessKeyError(`Invalid role: ${body.role}. Must be one of: ${VALID_ROLES.join(", ")}`, 400, "VALIDATION_ERROR");
167
+ }
168
+ // Role escalation prevention: caller cannot create key with higher role
169
+ const callerRank = ROLE_RANK[caller.role] ?? 0;
170
+ const targetRank = ROLE_RANK[body.role] ?? 0;
171
+ if (targetRank > callerRank) {
172
+ throw new AccessKeyError("Cannot create key with higher role than your own", 403, "FORBIDDEN");
173
+ }
174
+ // Validate expireAt (if provided)
175
+ if (body.expireAt !== undefined && body.expireAt !== null) {
176
+ const expireDate = new Date(body.expireAt);
177
+ if (Number.isNaN(expireDate.getTime())) {
178
+ throw new AccessKeyError("Invalid expireAt date", 400, "VALIDATION_ERROR");
179
+ }
180
+ if (expireDate < new Date()) {
181
+ throw new AccessKeyError("expireAt must be in the future", 400, "VALIDATION_ERROR");
182
+ }
183
+ }
184
+ // Truncate remark
185
+ const remark = (body.remark ?? "").slice(0, MAX_REMARK_LENGTH);
186
+ const result = await this.createKeyInternal({
187
+ role: body.role,
188
+ remark,
189
+ createdBy: caller.did,
190
+ expireAt: body.expireAt ?? null,
191
+ instanceDid,
192
+ ip: caller.ip,
193
+ });
194
+ const stored = await this.store.getAccessKeyById(result.accessKeyId);
195
+ return this.jsonResponse({
196
+ ...stored,
197
+ accessKeySecret: result.accessKeySecret,
198
+ createdByName: caller.displayName ?? null,
199
+ }, 201);
200
+ }
201
+ async handleGet(caller, accessKeyId, instanceDid) {
202
+ requirePermission(caller.role, "accessKey.view");
203
+ const key = await this.store.getAccessKeyById(accessKeyId);
204
+ if (!key) {
205
+ throw new AccessKeyError("Access key not found", 404, "NOT_FOUND");
206
+ }
207
+ // Instance ownership check: only instance's own keys are visible
208
+ if (instanceDid && key.instanceDid !== instanceDid) {
209
+ throw new AccessKeyError("Access key not found", 404, "NOT_FOUND");
210
+ }
211
+ // Non-admin users can only view their own keys
212
+ this.requireOwnership(caller, key.createdBy);
213
+ return this.jsonResponse(key);
214
+ }
215
+ async handleUpdate(caller, accessKeyId, request, instanceDid) {
216
+ requirePermission(caller.role, "accessKey.update");
217
+ const existing = await this.store.getAccessKeyById(accessKeyId);
218
+ if (!existing) {
219
+ throw new AccessKeyError("Access key not found", 404, "NOT_FOUND");
220
+ }
221
+ // Instance ownership check: only instance's own keys are accessible
222
+ if (instanceDid && existing.instanceDid !== instanceDid) {
223
+ throw new AccessKeyError("Access key not found", 404, "NOT_FOUND");
224
+ }
225
+ // Non-admin users can only update their own keys
226
+ this.requireOwnership(caller, existing.createdBy);
227
+ // Role-rank enforcement (admin+): cannot modify key with higher role
228
+ const callerRank = ROLE_RANK[caller.role] ?? 0;
229
+ if (callerRank >= ADMIN_RANK) {
230
+ const keyRank = ROLE_RANK[existing.role] ?? 0;
231
+ if (keyRank > callerRank) {
232
+ throw new AccessKeyError("Cannot modify key with higher role than your own", 403, "FORBIDDEN");
233
+ }
234
+ }
235
+ const body = await this.parseJSON(request);
236
+ // Validate expireAt
237
+ if (body.expireAt !== undefined && body.expireAt !== null) {
238
+ const expireDate = new Date(body.expireAt);
239
+ if (Number.isNaN(expireDate.getTime())) {
240
+ throw new AccessKeyError("Invalid expireAt date", 400, "VALIDATION_ERROR");
241
+ }
242
+ }
243
+ // Truncate remark
244
+ const update = {};
245
+ if (body.remark !== undefined) {
246
+ update.remark = body.remark.slice(0, MAX_REMARK_LENGTH);
247
+ }
248
+ if ("expireAt" in body) {
249
+ update.expireAt = body.expireAt;
250
+ }
251
+ const updated = await this.store.updateAccessKey(accessKeyId, update);
252
+ // Audit log
253
+ await this.store.createAuditLog({
254
+ action: "accessKey.update",
255
+ operatorDid: caller.did,
256
+ targetDid: accessKeyId,
257
+ metadata: update,
258
+ ip: caller.ip,
259
+ instanceDid,
260
+ });
261
+ return this.jsonResponse(updated);
262
+ }
263
+ async handleDelete(caller, accessKeyId, instanceDid) {
264
+ requirePermission(caller.role, "accessKey.delete");
265
+ const existing = await this.store.getAccessKeyById(accessKeyId);
266
+ if (!existing) {
267
+ throw new AccessKeyError("Access key not found", 404, "NOT_FOUND");
268
+ }
269
+ // Instance ownership check: only instance's own keys are accessible
270
+ if (instanceDid && existing.instanceDid !== instanceDid) {
271
+ throw new AccessKeyError("Access key not found", 404, "NOT_FOUND");
272
+ }
273
+ // Non-admin users can only delete their own keys
274
+ this.requireOwnership(caller, existing.createdBy);
275
+ // Role-rank enforcement (admin+): cannot delete key with higher role
276
+ const callerRank = ROLE_RANK[caller.role] ?? 0;
277
+ if (callerRank >= ADMIN_RANK) {
278
+ const keyRank = ROLE_RANK[existing.role] ?? 0;
279
+ if (keyRank > callerRank) {
280
+ throw new AccessKeyError("Cannot delete key with higher role than your own", 403, "FORBIDDEN");
281
+ }
282
+ }
283
+ await this.store.deleteAccessKey(accessKeyId);
284
+ // Audit log
285
+ await this.store.createAuditLog({
286
+ action: "accessKey.delete",
287
+ operatorDid: caller.did,
288
+ targetDid: accessKeyId,
289
+ metadata: { role: existing.role },
290
+ ip: caller.ip,
291
+ instanceDid,
292
+ });
293
+ return new Response(null, { status: 204 });
294
+ }
295
+ // ─── Helpers ─────────────────────────────────────────────────────────
296
+ /** Non-admin callers can only operate on keys they created. Admin+ can operate on any key. */
297
+ requireOwnership(caller, keyCreatedBy) {
298
+ const callerRank = ROLE_RANK[caller.role] ?? 0;
299
+ if (callerRank >= ADMIN_RANK)
300
+ return; // admin+ can access all keys
301
+ if (caller.did !== keyCreatedBy) {
302
+ throw new AccessKeyError("Access key not found", 404, "NOT_FOUND");
303
+ }
304
+ }
305
+ jsonResponse(data, status = 200) {
306
+ return new Response(JSON.stringify(data), {
307
+ status,
308
+ headers: {
309
+ "Content-Type": "application/json",
310
+ "Cache-Control": "private, no-store",
311
+ },
312
+ });
313
+ }
314
+ errorResponse(message, status, code) {
315
+ return this.jsonResponse({ ok: false, error: message, code }, status);
316
+ }
317
+ async parseJSON(request) {
318
+ try {
319
+ return (await request.json());
320
+ }
321
+ catch {
322
+ throw new AccessKeyError("Invalid JSON body", 400, "VALIDATION_ERROR");
323
+ }
324
+ }
325
+ }
326
+ class AccessKeyError extends Error {
327
+ status;
328
+ code;
329
+ constructor(message, status, code) {
330
+ super(message);
331
+ this.status = status;
332
+ this.code = code;
333
+ this.name = "AccessKeyError";
334
+ }
335
+ }
336
+ //# sourceMappingURL=access-key-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"access-key-handler.js","sourceRoot":"","sources":["../../src/handlers/access-key-handler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * AdminInstanceHandler — Admin-only CRUD for instance registration.
3
+ *
4
+ * Routes:
5
+ * POST /.well-known/service/api/admin/instances — register instance
6
+ * GET /.well-known/service/api/admin/instances — list instances
7
+ * DELETE /.well-known/service/api/admin/instances/:did — remove instance
8
+ * GET /.well-known/service/admin/instances — admin UI page
9
+ */
10
+ import type { D1Store } from "../store/d1-store.js";
11
+ import type { Auth } from "./passkey-handler.js";
12
+ export interface AdminInstanceHandlerOptions {
13
+ store: D1Store;
14
+ auth: Auth;
15
+ }
16
+ export declare class AdminInstanceHandler {
17
+ private options;
18
+ constructor(options: AdminInstanceHandlerOptions);
19
+ fetch(request: Request, instanceDid?: string): Promise<Response | null>;
20
+ /** POST /api/admin/instances — register instance */
21
+ private register;
22
+ /** GET /api/admin/instances — list registered instances */
23
+ private list;
24
+ /** DELETE /api/admin/instances/:did — remove instance registration (best-effort cleanup) */
25
+ private remove;
26
+ /** Render admin UI page */
27
+ private renderPage;
28
+ }
29
+ //# sourceMappingURL=admin-instance-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin-instance-handler.d.ts","sourceRoot":"","sources":["../../src/handlers/admin-instance-handler.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAEjD,MAAM,WAAW,2BAA2B;IAC1C,KAAK,EAAE,OAAO,CAAC;IACf,IAAI,EAAE,IAAI,CAAC;CACZ;AASD,qBAAa,oBAAoB;IACnB,OAAO,CAAC,OAAO;gBAAP,OAAO,EAAE,2BAA2B;IAElD,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAuC7E,oDAAoD;YACtC,QAAQ;IAgFtB,2DAA2D;YAC7C,IAAI;IAKlB,4FAA4F;YAC9E,MAAM;IAkBpB,2BAA2B;YACb,UAAU;CASzB"}