@agilesyndrome/cf-genai-base 5.0.1 → 6.0.0

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 (696) hide show
  1. package/CHANGELOG.md +99 -0
  2. package/CLI.md +9 -13
  3. package/CONTRACT.md +32 -15
  4. package/README.md +95 -28
  5. package/bin/cf-genai.js +24 -8
  6. package/dist/admin/auth.d.ts +12 -0
  7. package/dist/admin/auth.d.ts.map +1 -0
  8. package/dist/admin/auth.js +103 -0
  9. package/dist/admin/auth.js.map +1 -0
  10. package/dist/admin/index.d.ts +2 -0
  11. package/dist/admin/index.d.ts.map +1 -0
  12. package/dist/admin/index.js +2 -0
  13. package/dist/admin/index.js.map +1 -0
  14. package/dist/admin/router.d.ts +4 -0
  15. package/dist/admin/router.d.ts.map +1 -0
  16. package/dist/admin/router.js +24 -0
  17. package/dist/admin/router.js.map +1 -0
  18. package/dist/admin/types.d.ts +43 -0
  19. package/dist/admin/types.d.ts.map +1 -0
  20. package/dist/admin/types.js +2 -0
  21. package/dist/admin/types.js.map +1 -0
  22. package/dist/api/client.d.ts +34 -0
  23. package/dist/api/client.d.ts.map +1 -0
  24. package/dist/api/client.js +59 -0
  25. package/dist/api/client.js.map +1 -0
  26. package/dist/api/contracts.d.ts +31 -0
  27. package/dist/api/contracts.d.ts.map +1 -0
  28. package/dist/api/contracts.js +101 -0
  29. package/dist/api/contracts.js.map +1 -0
  30. package/dist/api/http.d.ts +12 -0
  31. package/dist/api/http.d.ts.map +1 -0
  32. package/dist/api/http.js +36 -0
  33. package/dist/api/http.js.map +1 -0
  34. package/dist/api/index.d.ts +14 -0
  35. package/dist/api/index.d.ts.map +1 -0
  36. package/dist/api/index.js +11 -0
  37. package/dist/api/index.js.map +1 -0
  38. package/dist/api/testing.d.ts +10 -0
  39. package/dist/api/testing.d.ts.map +1 -0
  40. package/dist/api/testing.js +26 -0
  41. package/dist/api/testing.js.map +1 -0
  42. package/dist/app.d.ts +21 -0
  43. package/dist/app.d.ts.map +1 -0
  44. package/dist/app.js +23 -0
  45. package/dist/app.js.map +1 -0
  46. package/dist/auth/constants.d.ts +9 -0
  47. package/dist/auth/constants.d.ts.map +1 -0
  48. package/{src → dist}/auth/constants.js +2 -2
  49. package/dist/auth/constants.js.map +1 -0
  50. package/dist/auth/domains.d.ts +3 -0
  51. package/dist/auth/domains.d.ts.map +1 -0
  52. package/dist/auth/domains.js +8 -0
  53. package/dist/auth/domains.js.map +1 -0
  54. package/dist/auth/encoding.d.ts +7 -0
  55. package/dist/auth/encoding.d.ts.map +1 -0
  56. package/dist/auth/encoding.js +41 -0
  57. package/dist/auth/encoding.js.map +1 -0
  58. package/dist/auth/groups/d1.d.ts +16 -0
  59. package/dist/auth/groups/d1.d.ts.map +1 -0
  60. package/dist/auth/groups/d1.js +66 -0
  61. package/dist/auth/groups/d1.js.map +1 -0
  62. package/dist/auth/groups/domain.d.ts +8 -0
  63. package/dist/auth/groups/domain.d.ts.map +1 -0
  64. package/dist/auth/groups/domain.js +99 -0
  65. package/dist/auth/groups/domain.js.map +1 -0
  66. package/dist/auth/groups/index.d.ts +7 -0
  67. package/dist/auth/groups/index.d.ts.map +1 -0
  68. package/dist/auth/groups/index.js +7 -0
  69. package/dist/auth/groups/index.js.map +1 -0
  70. package/dist/auth/groups/model.d.ts +38 -0
  71. package/dist/auth/groups/model.d.ts.map +1 -0
  72. package/dist/auth/groups/model.js +2 -0
  73. package/dist/auth/groups/model.js.map +1 -0
  74. package/dist/auth/groups/policy.d.ts +5 -0
  75. package/dist/auth/groups/policy.d.ts.map +1 -0
  76. package/dist/auth/groups/policy.js +8 -0
  77. package/dist/auth/groups/policy.js.map +1 -0
  78. package/dist/auth/groups/service.d.ts +20 -0
  79. package/dist/auth/groups/service.d.ts.map +1 -0
  80. package/dist/auth/groups/service.js +40 -0
  81. package/dist/auth/groups/service.js.map +1 -0
  82. package/dist/auth/groups/validation.d.ts +5 -0
  83. package/dist/auth/groups/validation.d.ts.map +1 -0
  84. package/dist/auth/groups/validation.js +22 -0
  85. package/dist/auth/groups/validation.js.map +1 -0
  86. package/dist/auth/groups/views/list.d.ts +10 -0
  87. package/dist/auth/groups/views/list.d.ts.map +1 -0
  88. package/dist/auth/groups/views/list.js +4 -0
  89. package/dist/auth/groups/views/list.js.map +1 -0
  90. package/dist/auth/identity/index.d.ts +58 -0
  91. package/dist/auth/identity/index.d.ts.map +1 -0
  92. package/dist/auth/identity/index.js +58 -0
  93. package/dist/auth/identity/index.js.map +1 -0
  94. package/dist/auth/impersonation/constants.d.ts +2 -0
  95. package/dist/auth/impersonation/constants.d.ts.map +1 -0
  96. package/dist/auth/impersonation/constants.js +2 -0
  97. package/dist/auth/impersonation/constants.js.map +1 -0
  98. package/dist/auth/impersonation/domain.d.ts +6 -0
  99. package/dist/auth/impersonation/domain.d.ts.map +1 -0
  100. package/dist/auth/impersonation/domain.js +16 -0
  101. package/dist/auth/impersonation/domain.js.map +1 -0
  102. package/dist/auth/impersonation/index.d.ts +6 -0
  103. package/dist/auth/impersonation/index.d.ts.map +1 -0
  104. package/dist/auth/impersonation/index.js +6 -0
  105. package/dist/auth/impersonation/index.js.map +1 -0
  106. package/dist/auth/impersonation/model.d.ts +12 -0
  107. package/dist/auth/impersonation/model.d.ts.map +1 -0
  108. package/dist/auth/impersonation/model.js +2 -0
  109. package/dist/auth/impersonation/model.js.map +1 -0
  110. package/dist/auth/impersonation/service.d.ts +4 -0
  111. package/dist/auth/impersonation/service.d.ts.map +1 -0
  112. package/dist/auth/impersonation/service.js +32 -0
  113. package/dist/auth/impersonation/service.js.map +1 -0
  114. package/dist/auth/impersonation/validation.d.ts +4 -0
  115. package/dist/auth/impersonation/validation.d.ts.map +1 -0
  116. package/dist/auth/impersonation/validation.js +14 -0
  117. package/dist/auth/impersonation/validation.js.map +1 -0
  118. package/dist/auth/index.d.ts +13 -0
  119. package/dist/auth/index.d.ts.map +1 -0
  120. package/dist/auth/index.js +13 -0
  121. package/dist/auth/index.js.map +1 -0
  122. package/dist/auth/oauth-single/constants.d.ts +4 -0
  123. package/dist/auth/oauth-single/constants.d.ts.map +1 -0
  124. package/dist/auth/oauth-single/constants.js +5 -0
  125. package/dist/auth/oauth-single/constants.js.map +1 -0
  126. package/dist/auth/oauth-single/cookies.d.ts +10 -0
  127. package/dist/auth/oauth-single/cookies.d.ts.map +1 -0
  128. package/dist/auth/oauth-single/cookies.js +59 -0
  129. package/dist/auth/oauth-single/cookies.js.map +1 -0
  130. package/dist/auth/oauth-single/domain.d.ts +14 -0
  131. package/dist/auth/oauth-single/domain.d.ts.map +1 -0
  132. package/dist/auth/oauth-single/domain.js +12 -0
  133. package/dist/auth/oauth-single/domain.js.map +1 -0
  134. package/dist/auth/oauth-single/index.d.ts +31 -0
  135. package/dist/auth/oauth-single/index.d.ts.map +1 -0
  136. package/dist/auth/oauth-single/index.js +215 -0
  137. package/dist/auth/oauth-single/index.js.map +1 -0
  138. package/dist/auth/oauth-single/model.d.ts +75 -0
  139. package/dist/auth/oauth-single/model.d.ts.map +1 -0
  140. package/dist/auth/oauth-single/model.js +2 -0
  141. package/dist/auth/oauth-single/model.js.map +1 -0
  142. package/dist/auth/oauth-single/protocol.d.ts +9 -0
  143. package/dist/auth/oauth-single/protocol.d.ts.map +1 -0
  144. package/dist/auth/oauth-single/protocol.js +190 -0
  145. package/dist/auth/oauth-single/protocol.js.map +1 -0
  146. package/dist/auth/oauth-single/session.d.ts +7 -0
  147. package/dist/auth/oauth-single/session.d.ts.map +1 -0
  148. package/dist/auth/oauth-single/session.js +78 -0
  149. package/dist/auth/oauth-single/session.js.map +1 -0
  150. package/dist/auth/repositories.d.ts +58 -0
  151. package/dist/auth/repositories.d.ts.map +1 -0
  152. package/dist/auth/repositories.js +31 -0
  153. package/dist/auth/repositories.js.map +1 -0
  154. package/dist/auth/scopes/d1.d.ts +17 -0
  155. package/dist/auth/scopes/d1.d.ts.map +1 -0
  156. package/dist/auth/scopes/d1.js +54 -0
  157. package/dist/auth/scopes/d1.js.map +1 -0
  158. package/dist/auth/scopes/domain.d.ts +7 -0
  159. package/dist/auth/scopes/domain.d.ts.map +1 -0
  160. package/dist/auth/scopes/domain.js +25 -0
  161. package/dist/auth/scopes/domain.js.map +1 -0
  162. package/dist/auth/scopes/index.d.ts +4 -0
  163. package/dist/auth/scopes/index.d.ts.map +1 -0
  164. package/dist/auth/scopes/index.js +4 -0
  165. package/dist/auth/scopes/index.js.map +1 -0
  166. package/dist/auth/scopes/model.d.ts +26 -0
  167. package/dist/auth/scopes/model.d.ts.map +1 -0
  168. package/dist/auth/scopes/model.js +2 -0
  169. package/dist/auth/scopes/model.js.map +1 -0
  170. package/dist/auth/scopes/policy.d.ts +3 -0
  171. package/dist/auth/scopes/policy.d.ts.map +1 -0
  172. package/dist/auth/scopes/policy.js +4 -0
  173. package/dist/auth/scopes/policy.js.map +1 -0
  174. package/dist/auth/scopes/service.d.ts +4 -0
  175. package/dist/auth/scopes/service.d.ts.map +1 -0
  176. package/dist/auth/scopes/service.js +4 -0
  177. package/dist/auth/scopes/service.js.map +1 -0
  178. package/dist/auth/scopes/validation.d.ts +6 -0
  179. package/dist/auth/scopes/validation.d.ts.map +1 -0
  180. package/dist/auth/scopes/validation.js +33 -0
  181. package/dist/auth/scopes/validation.js.map +1 -0
  182. package/dist/auth/scopes/views/list.d.ts +9 -0
  183. package/dist/auth/scopes/views/list.d.ts.map +1 -0
  184. package/dist/auth/scopes/views/list.js +4 -0
  185. package/dist/auth/scopes/views/list.js.map +1 -0
  186. package/dist/auth/subscriptions/d1.d.ts +10 -0
  187. package/dist/auth/subscriptions/d1.d.ts.map +1 -0
  188. package/dist/auth/subscriptions/d1.js +86 -0
  189. package/dist/auth/subscriptions/d1.js.map +1 -0
  190. package/dist/auth/subscriptions/domain.d.ts +10 -0
  191. package/dist/auth/subscriptions/domain.d.ts.map +1 -0
  192. package/dist/auth/subscriptions/domain.js +33 -0
  193. package/dist/auth/subscriptions/domain.js.map +1 -0
  194. package/dist/auth/subscriptions/index.d.ts +6 -0
  195. package/dist/auth/subscriptions/index.d.ts.map +1 -0
  196. package/dist/auth/subscriptions/index.js +6 -0
  197. package/dist/auth/subscriptions/index.js.map +1 -0
  198. package/dist/auth/subscriptions/model.d.ts +20 -0
  199. package/dist/auth/subscriptions/model.d.ts.map +1 -0
  200. package/dist/auth/subscriptions/model.js +2 -0
  201. package/dist/auth/subscriptions/model.js.map +1 -0
  202. package/dist/auth/subscriptions/service.d.ts +12 -0
  203. package/dist/auth/subscriptions/service.d.ts.map +1 -0
  204. package/dist/auth/subscriptions/service.js +71 -0
  205. package/dist/auth/subscriptions/service.js.map +1 -0
  206. package/dist/auth/subscriptions/validation.d.ts +3 -0
  207. package/dist/auth/subscriptions/validation.d.ts.map +1 -0
  208. package/dist/auth/subscriptions/validation.js +21 -0
  209. package/dist/auth/subscriptions/validation.js.map +1 -0
  210. package/dist/auth/tenants/d1.d.ts +12 -0
  211. package/dist/auth/tenants/d1.d.ts.map +1 -0
  212. package/dist/auth/tenants/d1.js +40 -0
  213. package/dist/auth/tenants/d1.js.map +1 -0
  214. package/dist/auth/tenants/delete.d.ts +3 -0
  215. package/dist/auth/tenants/delete.d.ts.map +1 -0
  216. package/dist/auth/tenants/delete.js +28 -0
  217. package/dist/auth/tenants/delete.js.map +1 -0
  218. package/dist/auth/tenants/domain.d.ts +8 -0
  219. package/dist/auth/tenants/domain.d.ts.map +1 -0
  220. package/dist/auth/tenants/domain.js +64 -0
  221. package/dist/auth/tenants/domain.js.map +1 -0
  222. package/dist/auth/tenants/index.d.ts +7 -0
  223. package/dist/auth/tenants/index.d.ts.map +1 -0
  224. package/dist/auth/tenants/index.js +7 -0
  225. package/dist/auth/tenants/index.js.map +1 -0
  226. package/dist/auth/tenants/model.d.ts +28 -0
  227. package/dist/auth/tenants/model.d.ts.map +1 -0
  228. package/dist/auth/tenants/model.js +2 -0
  229. package/dist/auth/tenants/model.js.map +1 -0
  230. package/dist/auth/tenants/policy.d.ts +3 -0
  231. package/dist/auth/tenants/policy.d.ts.map +1 -0
  232. package/dist/auth/tenants/policy.js +4 -0
  233. package/dist/auth/tenants/policy.js.map +1 -0
  234. package/dist/auth/tenants/service.d.ts +14 -0
  235. package/dist/auth/tenants/service.d.ts.map +1 -0
  236. package/dist/auth/tenants/service.js +37 -0
  237. package/dist/auth/tenants/service.js.map +1 -0
  238. package/dist/auth/tenants/validation.d.ts +5 -0
  239. package/dist/auth/tenants/validation.d.ts.map +1 -0
  240. package/dist/auth/tenants/validation.js +21 -0
  241. package/dist/auth/tenants/validation.js.map +1 -0
  242. package/dist/auth/tenants/views/list.d.ts +8 -0
  243. package/dist/auth/tenants/views/list.d.ts.map +1 -0
  244. package/dist/auth/tenants/views/list.js +3 -0
  245. package/dist/auth/tenants/views/list.js.map +1 -0
  246. package/dist/auth/users/access.d.ts +9 -0
  247. package/dist/auth/users/access.d.ts.map +1 -0
  248. package/dist/auth/users/access.js +53 -0
  249. package/dist/auth/users/access.js.map +1 -0
  250. package/dist/auth/users/d1.d.ts +19 -0
  251. package/dist/auth/users/d1.d.ts.map +1 -0
  252. package/dist/auth/users/d1.js +68 -0
  253. package/dist/auth/users/d1.js.map +1 -0
  254. package/dist/auth/users/domain.d.ts +13 -0
  255. package/dist/auth/users/domain.d.ts.map +1 -0
  256. package/dist/auth/users/domain.js +129 -0
  257. package/dist/auth/users/domain.js.map +1 -0
  258. package/dist/auth/users/index.d.ts +7 -0
  259. package/dist/auth/users/index.d.ts.map +1 -0
  260. package/dist/auth/users/index.js +7 -0
  261. package/dist/auth/users/index.js.map +1 -0
  262. package/dist/auth/users/model.d.ts +44 -0
  263. package/dist/auth/users/model.d.ts.map +1 -0
  264. package/dist/auth/users/model.js +2 -0
  265. package/dist/auth/users/model.js.map +1 -0
  266. package/dist/auth/users/service.d.ts +8 -0
  267. package/dist/auth/users/service.d.ts.map +1 -0
  268. package/dist/auth/users/service.js +62 -0
  269. package/dist/auth/users/service.js.map +1 -0
  270. package/dist/auth/users/validation.d.ts +4 -0
  271. package/dist/auth/users/validation.d.ts.map +1 -0
  272. package/dist/auth/users/validation.js +23 -0
  273. package/dist/auth/users/validation.js.map +1 -0
  274. package/dist/cli/cli.d.ts +9 -0
  275. package/dist/cli/cli.d.ts.map +1 -0
  276. package/dist/cli/cli.js +201 -0
  277. package/dist/cli/cli.js.map +1 -0
  278. package/dist/cli/d1.d.ts +24 -0
  279. package/dist/cli/d1.d.ts.map +1 -0
  280. package/dist/cli/d1.js +175 -0
  281. package/dist/cli/d1.js.map +1 -0
  282. package/dist/cli/operations.d.ts +3 -0
  283. package/dist/cli/operations.d.ts.map +1 -0
  284. package/dist/cli/operations.js +63 -0
  285. package/dist/cli/operations.js.map +1 -0
  286. package/dist/cli/project.d.ts +136 -0
  287. package/dist/cli/project.d.ts.map +1 -0
  288. package/dist/cli/project.js +738 -0
  289. package/dist/cli/project.js.map +1 -0
  290. package/dist/cli/status.d.ts +24 -0
  291. package/dist/cli/status.d.ts.map +1 -0
  292. package/dist/cli/status.js +55 -0
  293. package/dist/cli/status.js.map +1 -0
  294. package/dist/cli/tenants.d.ts +9 -0
  295. package/dist/cli/tenants.d.ts.map +1 -0
  296. package/dist/cli/tenants.js +32 -0
  297. package/dist/cli/tenants.js.map +1 -0
  298. package/dist/cli/types.d.ts +43 -0
  299. package/dist/cli/types.d.ts.map +1 -0
  300. package/dist/cli/types.js +2 -0
  301. package/dist/cli/types.js.map +1 -0
  302. package/dist/cli/users.d.ts +8 -0
  303. package/dist/cli/users.d.ts.map +1 -0
  304. package/dist/cli/users.js +74 -0
  305. package/dist/cli/users.js.map +1 -0
  306. package/dist/cli/version.d.ts +12 -0
  307. package/dist/cli/version.d.ts.map +1 -0
  308. package/dist/cli/version.js +60 -0
  309. package/dist/cli/version.js.map +1 -0
  310. package/dist/core/circuits/availability.d.ts +48 -0
  311. package/dist/core/circuits/availability.d.ts.map +1 -0
  312. package/dist/core/circuits/availability.js +87 -0
  313. package/dist/core/circuits/availability.js.map +1 -0
  314. package/dist/core/circuits/d1.d.ts +11 -0
  315. package/dist/core/circuits/d1.d.ts.map +1 -0
  316. package/dist/core/circuits/d1.js +83 -0
  317. package/dist/core/circuits/d1.js.map +1 -0
  318. package/dist/core/circuits/domain.d.ts +7 -0
  319. package/dist/core/circuits/domain.d.ts.map +1 -0
  320. package/dist/core/circuits/domain.js +36 -0
  321. package/dist/core/circuits/domain.js.map +1 -0
  322. package/dist/core/circuits/index.d.ts +6 -0
  323. package/dist/core/circuits/index.d.ts.map +1 -0
  324. package/dist/core/circuits/index.js +6 -0
  325. package/dist/core/circuits/index.js.map +1 -0
  326. package/dist/core/circuits/model.d.ts +50 -0
  327. package/dist/core/circuits/model.d.ts.map +1 -0
  328. package/dist/core/circuits/model.js +2 -0
  329. package/dist/core/circuits/model.js.map +1 -0
  330. package/dist/core/circuits/service.d.ts +9 -0
  331. package/dist/core/circuits/service.d.ts.map +1 -0
  332. package/dist/core/circuits/service.js +63 -0
  333. package/dist/core/circuits/service.js.map +1 -0
  334. package/dist/core/circuits/validation.d.ts +4 -0
  335. package/dist/core/circuits/validation.d.ts.map +1 -0
  336. package/dist/core/circuits/validation.js +35 -0
  337. package/dist/core/circuits/validation.js.map +1 -0
  338. package/dist/core/constants.d.ts +9 -0
  339. package/dist/core/constants.d.ts.map +1 -0
  340. package/{src → dist}/core/constants.js +2 -1
  341. package/dist/core/constants.js.map +1 -0
  342. package/dist/core/database/index.d.ts +14 -0
  343. package/dist/core/database/index.d.ts.map +1 -0
  344. package/dist/core/database/index.js +65 -0
  345. package/dist/core/database/index.js.map +1 -0
  346. package/dist/core/domains.d.ts +2 -0
  347. package/dist/core/domains.d.ts.map +1 -0
  348. package/dist/core/domains.js +7 -0
  349. package/dist/core/domains.js.map +1 -0
  350. package/dist/core/events/audit.d.ts +8 -0
  351. package/dist/core/events/audit.d.ts.map +1 -0
  352. package/dist/core/events/audit.js +27 -0
  353. package/dist/core/events/audit.js.map +1 -0
  354. package/dist/core/events/domain.d.ts +19 -0
  355. package/dist/core/events/domain.d.ts.map +1 -0
  356. package/dist/core/events/domain.js +39 -0
  357. package/dist/core/events/domain.js.map +1 -0
  358. package/dist/core/events/hub.d.ts +10 -0
  359. package/dist/core/events/hub.d.ts.map +1 -0
  360. package/dist/core/events/hub.js +56 -0
  361. package/dist/core/events/hub.js.map +1 -0
  362. package/dist/core/events/index.d.ts +57 -0
  363. package/dist/core/events/index.d.ts.map +1 -0
  364. package/dist/core/events/index.js +170 -0
  365. package/dist/core/events/index.js.map +1 -0
  366. package/dist/core/healthchecks/d1.d.ts +7 -0
  367. package/dist/core/healthchecks/d1.d.ts.map +1 -0
  368. package/dist/core/healthchecks/d1.js +43 -0
  369. package/dist/core/healthchecks/d1.js.map +1 -0
  370. package/dist/core/healthchecks/domain.d.ts +7 -0
  371. package/dist/core/healthchecks/domain.d.ts.map +1 -0
  372. package/dist/core/healthchecks/domain.js +51 -0
  373. package/dist/core/healthchecks/domain.js.map +1 -0
  374. package/dist/core/healthchecks/features.d.ts +19 -0
  375. package/dist/core/healthchecks/features.d.ts.map +1 -0
  376. package/dist/core/healthchecks/features.js +100 -0
  377. package/dist/core/healthchecks/features.js.map +1 -0
  378. package/dist/core/healthchecks/index.d.ts +6 -0
  379. package/dist/core/healthchecks/index.d.ts.map +1 -0
  380. package/dist/core/healthchecks/index.js +6 -0
  381. package/dist/core/healthchecks/index.js.map +1 -0
  382. package/dist/core/healthchecks/model.d.ts +64 -0
  383. package/dist/core/healthchecks/model.d.ts.map +1 -0
  384. package/dist/core/healthchecks/model.js +2 -0
  385. package/dist/core/healthchecks/model.js.map +1 -0
  386. package/dist/core/healthchecks/service.d.ts +8 -0
  387. package/dist/core/healthchecks/service.d.ts.map +1 -0
  388. package/dist/core/healthchecks/service.js +29 -0
  389. package/dist/core/healthchecks/service.js.map +1 -0
  390. package/dist/core/healthchecks/validation.d.ts +5 -0
  391. package/dist/core/healthchecks/validation.d.ts.map +1 -0
  392. package/dist/core/healthchecks/validation.js +51 -0
  393. package/dist/core/healthchecks/validation.js.map +1 -0
  394. package/dist/core/index.d.ts +9 -0
  395. package/dist/core/index.d.ts.map +1 -0
  396. package/dist/core/index.js +9 -0
  397. package/dist/core/index.js.map +1 -0
  398. package/dist/core/jobs/d1.d.ts +19 -0
  399. package/dist/core/jobs/d1.d.ts.map +1 -0
  400. package/dist/core/jobs/d1.js +139 -0
  401. package/dist/core/jobs/d1.js.map +1 -0
  402. package/dist/core/jobs/domain.d.ts +8 -0
  403. package/dist/core/jobs/domain.d.ts.map +1 -0
  404. package/dist/core/jobs/domain.js +59 -0
  405. package/dist/core/jobs/domain.js.map +1 -0
  406. package/dist/core/jobs/events.d.ts +3 -0
  407. package/dist/core/jobs/events.d.ts.map +1 -0
  408. package/dist/core/jobs/events.js +25 -0
  409. package/dist/core/jobs/events.js.map +1 -0
  410. package/dist/core/jobs/index.d.ts +7 -0
  411. package/dist/core/jobs/index.d.ts.map +1 -0
  412. package/dist/core/jobs/index.js +7 -0
  413. package/dist/core/jobs/index.js.map +1 -0
  414. package/dist/core/jobs/model.d.ts +86 -0
  415. package/dist/core/jobs/model.d.ts.map +1 -0
  416. package/dist/core/jobs/model.js +2 -0
  417. package/dist/core/jobs/model.js.map +1 -0
  418. package/dist/core/jobs/service.d.ts +39 -0
  419. package/dist/core/jobs/service.d.ts.map +1 -0
  420. package/dist/core/jobs/service.js +84 -0
  421. package/dist/core/jobs/service.js.map +1 -0
  422. package/dist/core/jobs/validation.d.ts +8 -0
  423. package/dist/core/jobs/validation.d.ts.map +1 -0
  424. package/dist/core/jobs/validation.js +39 -0
  425. package/dist/core/jobs/validation.js.map +1 -0
  426. package/dist/core/security/index.d.ts +30 -0
  427. package/dist/core/security/index.d.ts.map +1 -0
  428. package/dist/core/security/index.js +138 -0
  429. package/dist/core/security/index.js.map +1 -0
  430. package/dist/data/context.d.ts +20 -0
  431. package/dist/data/context.d.ts.map +1 -0
  432. package/dist/data/context.js +65 -0
  433. package/dist/data/context.js.map +1 -0
  434. package/dist/data/index.d.ts +5 -0
  435. package/dist/data/index.d.ts.map +1 -0
  436. package/{src → dist}/data/index.js +2 -0
  437. package/dist/data/index.js.map +1 -0
  438. package/dist/data/json.d.ts +3 -0
  439. package/dist/data/json.d.ts.map +1 -0
  440. package/dist/data/json.js +14 -0
  441. package/dist/data/json.js.map +1 -0
  442. package/dist/data/model.d.ts +96 -0
  443. package/dist/data/model.d.ts.map +1 -0
  444. package/dist/data/model.js +3 -0
  445. package/dist/data/model.js.map +1 -0
  446. package/dist/data/policy.d.ts +14 -0
  447. package/dist/data/policy.d.ts.map +1 -0
  448. package/dist/data/policy.js +89 -0
  449. package/dist/data/policy.js.map +1 -0
  450. package/dist/data/reader.d.ts +9 -0
  451. package/dist/data/reader.d.ts.map +1 -0
  452. package/dist/data/reader.js +203 -0
  453. package/dist/data/reader.js.map +1 -0
  454. package/dist/data/resources.d.ts +9 -0
  455. package/dist/data/resources.d.ts.map +1 -0
  456. package/dist/data/resources.js +129 -0
  457. package/dist/data/resources.js.map +1 -0
  458. package/dist/domain/app-domain.d.ts +36 -0
  459. package/dist/domain/app-domain.d.ts.map +1 -0
  460. package/dist/domain/app-domain.js +79 -0
  461. package/dist/domain/app-domain.js.map +1 -0
  462. package/dist/domain/index.d.ts +3 -0
  463. package/dist/domain/index.d.ts.map +1 -0
  464. package/dist/domain/index.js +3 -0
  465. package/dist/domain/index.js.map +1 -0
  466. package/dist/domain/model.d.ts +37 -0
  467. package/dist/domain/model.d.ts.map +1 -0
  468. package/dist/domain/model.js +2 -0
  469. package/dist/domain/model.js.map +1 -0
  470. package/dist/features/index.d.ts +25 -0
  471. package/dist/features/index.d.ts.map +1 -0
  472. package/dist/features/index.js +61 -0
  473. package/dist/features/index.js.map +1 -0
  474. package/dist/features/llm/client.d.ts +3 -0
  475. package/dist/features/llm/client.d.ts.map +1 -0
  476. package/dist/features/llm/client.js +327 -0
  477. package/dist/features/llm/client.js.map +1 -0
  478. package/dist/features/llm/config.d.ts +7 -0
  479. package/dist/features/llm/config.d.ts.map +1 -0
  480. package/dist/features/llm/config.js +93 -0
  481. package/dist/features/llm/config.js.map +1 -0
  482. package/dist/features/llm/constants.d.ts +5 -0
  483. package/dist/features/llm/constants.d.ts.map +1 -0
  484. package/dist/features/llm/constants.js +6 -0
  485. package/dist/features/llm/constants.js.map +1 -0
  486. package/dist/features/llm/errors.d.ts +12 -0
  487. package/dist/features/llm/errors.d.ts.map +1 -0
  488. package/dist/features/llm/errors.js +19 -0
  489. package/dist/features/llm/errors.js.map +1 -0
  490. package/dist/features/llm/feature.d.ts +6 -0
  491. package/dist/features/llm/feature.d.ts.map +1 -0
  492. package/dist/features/llm/feature.js +37 -0
  493. package/dist/features/llm/feature.js.map +1 -0
  494. package/dist/features/llm/index.d.ts +9 -0
  495. package/dist/features/llm/index.d.ts.map +1 -0
  496. package/dist/features/llm/index.js +6 -0
  497. package/dist/features/llm/index.js.map +1 -0
  498. package/dist/features/llm/model.d.ts +171 -0
  499. package/dist/features/llm/model.d.ts.map +1 -0
  500. package/dist/features/llm/model.js +2 -0
  501. package/dist/features/llm/model.js.map +1 -0
  502. package/dist/features/llm/schema.d.ts +4 -0
  503. package/dist/features/llm/schema.d.ts.map +1 -0
  504. package/dist/features/llm/schema.js +82 -0
  505. package/dist/features/llm/schema.js.map +1 -0
  506. package/dist/features/llm/service.d.ts +29 -0
  507. package/dist/features/llm/service.d.ts.map +1 -0
  508. package/dist/features/llm/service.js +55 -0
  509. package/dist/features/llm/service.js.map +1 -0
  510. package/dist/features/messaging/constants.d.ts +3 -0
  511. package/dist/features/messaging/constants.d.ts.map +1 -0
  512. package/dist/features/messaging/constants.js +4 -0
  513. package/dist/features/messaging/constants.js.map +1 -0
  514. package/dist/features/messaging/domain.d.ts +9 -0
  515. package/dist/features/messaging/domain.d.ts.map +1 -0
  516. package/dist/features/messaging/domain.js +14 -0
  517. package/dist/features/messaging/domain.js.map +1 -0
  518. package/dist/features/messaging/feature.d.ts +7 -0
  519. package/dist/features/messaging/feature.d.ts.map +1 -0
  520. package/dist/features/messaging/feature.js +23 -0
  521. package/dist/features/messaging/feature.js.map +1 -0
  522. package/dist/features/messaging/index.d.ts +12 -0
  523. package/dist/features/messaging/index.d.ts.map +1 -0
  524. package/dist/features/messaging/index.js +8 -0
  525. package/dist/features/messaging/index.js.map +1 -0
  526. package/dist/features/messaging/jobs.d.ts +38 -0
  527. package/dist/features/messaging/jobs.d.ts.map +1 -0
  528. package/dist/features/messaging/jobs.js +40 -0
  529. package/dist/features/messaging/jobs.js.map +1 -0
  530. package/dist/features/messaging/models.d.ts +65 -0
  531. package/dist/features/messaging/models.d.ts.map +1 -0
  532. package/dist/features/messaging/models.js +97 -0
  533. package/dist/features/messaging/models.js.map +1 -0
  534. package/dist/features/messaging/resources.d.ts +8 -0
  535. package/dist/features/messaging/resources.d.ts.map +1 -0
  536. package/dist/features/messaging/resources.js +11 -0
  537. package/dist/features/messaging/resources.js.map +1 -0
  538. package/dist/features/messaging/store.d.ts +46 -0
  539. package/dist/features/messaging/store.d.ts.map +1 -0
  540. package/dist/features/messaging/store.js +208 -0
  541. package/dist/features/messaging/store.js.map +1 -0
  542. package/dist/index.d.ts +20 -0
  543. package/dist/index.d.ts.map +1 -0
  544. package/{src → dist}/index.js +7 -2
  545. package/dist/index.js.map +1 -0
  546. package/dist/input.d.ts +18 -0
  547. package/dist/input.d.ts.map +1 -0
  548. package/dist/input.js +49 -0
  549. package/dist/input.js.map +1 -0
  550. package/dist/repository/model.d.ts +61 -0
  551. package/dist/repository/model.d.ts.map +1 -0
  552. package/dist/repository/model.js +2 -0
  553. package/dist/repository/model.js.map +1 -0
  554. package/dist/repository.d.ts +11 -0
  555. package/dist/repository.d.ts.map +1 -0
  556. package/dist/repository.js +118 -0
  557. package/dist/repository.js.map +1 -0
  558. package/dist/runtime/domains.d.ts +14 -0
  559. package/dist/runtime/domains.d.ts.map +1 -0
  560. package/dist/runtime/domains.js +42 -0
  561. package/dist/runtime/domains.js.map +1 -0
  562. package/dist/runtime/features.d.ts +10 -0
  563. package/dist/runtime/features.d.ts.map +1 -0
  564. package/dist/runtime/features.js +37 -0
  565. package/dist/runtime/features.js.map +1 -0
  566. package/dist/runtime/health.d.ts +6 -0
  567. package/dist/runtime/health.d.ts.map +1 -0
  568. package/dist/runtime/health.js +28 -0
  569. package/dist/runtime/health.js.map +1 -0
  570. package/dist/runtime/hono.d.ts +30 -0
  571. package/dist/runtime/hono.d.ts.map +1 -0
  572. package/dist/runtime/hono.js +50 -0
  573. package/dist/runtime/hono.js.map +1 -0
  574. package/dist/runtime/model.d.ts +133 -0
  575. package/dist/runtime/model.d.ts.map +1 -0
  576. package/dist/runtime/model.js +2 -0
  577. package/dist/runtime/model.js.map +1 -0
  578. package/dist/runtime/responses.d.ts +9 -0
  579. package/dist/runtime/responses.d.ts.map +1 -0
  580. package/dist/runtime/responses.js +14 -0
  581. package/dist/runtime/responses.js.map +1 -0
  582. package/dist/runtime/worker.d.ts +10 -0
  583. package/dist/runtime/worker.d.ts.map +1 -0
  584. package/dist/runtime/worker.js +216 -0
  585. package/dist/runtime/worker.js.map +1 -0
  586. package/dist/ui/index.d.ts +3 -0
  587. package/dist/ui/index.d.ts.map +1 -0
  588. package/dist/ui/index.js +3 -0
  589. package/dist/ui/index.js.map +1 -0
  590. package/dist/ui/react/admin-access.d.ts +2 -0
  591. package/dist/ui/react/admin-access.d.ts.map +1 -0
  592. package/dist/ui/react/admin-access.js +47 -0
  593. package/dist/ui/react/admin-access.js.map +1 -0
  594. package/dist/ui/react/admin-audit.d.ts +2 -0
  595. package/dist/ui/react/admin-audit.d.ts.map +1 -0
  596. package/dist/ui/react/admin-audit.js +13 -0
  597. package/dist/ui/react/admin-audit.js.map +1 -0
  598. package/dist/ui/react/admin-catalogs.d.ts +6 -0
  599. package/dist/ui/react/admin-catalogs.d.ts.map +1 -0
  600. package/dist/ui/react/admin-catalogs.js +37 -0
  601. package/dist/ui/react/admin-catalogs.js.map +1 -0
  602. package/dist/ui/react/admin-dashboard.d.ts +39 -0
  603. package/dist/ui/react/admin-dashboard.d.ts.map +1 -0
  604. package/dist/ui/react/admin-dashboard.js +135 -0
  605. package/dist/ui/react/admin-dashboard.js.map +1 -0
  606. package/dist/ui/react/admin-details.d.ts +27 -0
  607. package/dist/ui/react/admin-details.d.ts.map +1 -0
  608. package/dist/ui/react/admin-details.js +82 -0
  609. package/dist/ui/react/admin-details.js.map +1 -0
  610. package/dist/ui/react/admin-shell.d.ts +20 -0
  611. package/dist/ui/react/admin-shell.d.ts.map +1 -0
  612. package/dist/ui/react/admin-shell.js +24 -0
  613. package/dist/ui/react/admin-shell.js.map +1 -0
  614. package/dist/ui/react/bootstrap.d.ts +9 -0
  615. package/dist/ui/react/bootstrap.d.ts.map +1 -0
  616. package/dist/ui/react/bootstrap.js +45 -0
  617. package/dist/ui/react/bootstrap.js.map +1 -0
  618. package/dist/ui/react/foundation.d.ts +35 -0
  619. package/dist/ui/react/foundation.d.ts.map +1 -0
  620. package/dist/ui/react/foundation.js +62 -0
  621. package/dist/ui/react/foundation.js.map +1 -0
  622. package/dist/ui/react/index.d.ts +12 -0
  623. package/dist/ui/react/index.d.ts.map +1 -0
  624. package/dist/ui/react/index.js +12 -0
  625. package/dist/ui/react/index.js.map +1 -0
  626. package/dist/ui/react/jobs.d.ts +62 -0
  627. package/dist/ui/react/jobs.d.ts.map +1 -0
  628. package/dist/ui/react/jobs.js +114 -0
  629. package/dist/ui/react/jobs.js.map +1 -0
  630. package/dist/ui/react/live-events.d.ts +18 -0
  631. package/dist/ui/react/live-events.d.ts.map +1 -0
  632. package/dist/ui/react/live-events.js +94 -0
  633. package/dist/ui/react/live-events.js.map +1 -0
  634. package/dist/ui/react/types.d.ts +79 -0
  635. package/dist/ui/react/types.d.ts.map +1 -0
  636. package/dist/ui/react/types.js +32 -0
  637. package/dist/ui/react/types.js.map +1 -0
  638. package/dist/ui/ssr.d.ts +55 -0
  639. package/dist/ui/ssr.d.ts.map +1 -0
  640. package/dist/ui/ssr.js +30 -0
  641. package/dist/ui/ssr.js.map +1 -0
  642. package/{src → dist}/ui/styles.css +22 -1
  643. package/migrations/0007_messaging.sql +52 -0
  644. package/migrations/0008_messaging_tenant_integrity.sql +44 -0
  645. package/migrations/0009_healthcheck_measurements.sql +3 -0
  646. package/migrations/0010_admin_dashboard_refinements.sql +24 -0
  647. package/package.json +162 -21
  648. package/changelog.md +0 -25
  649. package/src/admin/index.js +0 -1
  650. package/src/admin/routes.js +0 -64
  651. package/src/api/client.js +0 -8
  652. package/src/api/contracts.js +0 -24
  653. package/src/api/index.js +0 -7
  654. package/src/api/jobs.js +0 -37
  655. package/src/api/testing.js +0 -13
  656. package/src/app.js +0 -5
  657. package/src/auth/encoding.js +0 -6
  658. package/src/auth/groups.js +0 -5
  659. package/src/auth/impersonation.js +0 -15
  660. package/src/auth/index.js +0 -8
  661. package/src/auth/oauth-single.js +0 -193
  662. package/src/auth/scopes.js +0 -32
  663. package/src/auth/subscriptions.js +0 -25
  664. package/src/auth/tenants.js +0 -34
  665. package/src/auth/users.js +0 -31
  666. package/src/cli/cli.js +0 -133
  667. package/src/cli/d1.js +0 -165
  668. package/src/cli/operations.js +0 -34
  669. package/src/cli/project.js +0 -560
  670. package/src/cli/status.js +0 -46
  671. package/src/cli/tenants.js +0 -16
  672. package/src/cli/users.js +0 -34
  673. package/src/cli/version.js +0 -54
  674. package/src/core/circuits.js +0 -134
  675. package/src/core/d1.js +0 -54
  676. package/src/core/event-hub.js +0 -29
  677. package/src/core/events.js +0 -63
  678. package/src/core/identity.js +0 -39
  679. package/src/core/index.js +0 -7
  680. package/src/core/jobs.js +0 -185
  681. package/src/core/security.js +0 -71
  682. package/src/data/context.js +0 -16
  683. package/src/data/reader.js +0 -63
  684. package/src/data/resources.js +0 -42
  685. package/src/repository.js +0 -63
  686. package/src/runtime/features.js +0 -17
  687. package/src/runtime/health.js +0 -17
  688. package/src/runtime/worker.js +0 -45
  689. package/src/ui/index.js +0 -1
  690. package/src/ui/react/admin-access.jsx +0 -29
  691. package/src/ui/react/admin-catalogs.jsx +0 -39
  692. package/src/ui/react/admin-shell.jsx +0 -17
  693. package/src/ui/react/foundation.jsx +0 -40
  694. package/src/ui/react/index.jsx +0 -6
  695. package/src/ui/react/jobs.jsx +0 -63
  696. package/src/ui/react/live-events.jsx +0 -55
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/admin/auth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export * from "./router.js";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/admin/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC"}
@@ -0,0 +1,2 @@
1
+ export * from "./router.js";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/admin/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { AdminBindings, AdminBoundaryOptions, AdminIdentity, AdminRequestState, AdminNext } from "./types.js";
2
+ export declare const ADMIN_API_PREFIX = "/api/admin";
3
+ export declare function adminBoundary<Env extends AdminBindings, User extends AdminIdentity, State extends AdminRequestState<User>, Feature extends object = object>(request: Request, env: Env, ctx: ExecutionContext, next: AdminNext, state: State, options: AdminBoundaryOptions<Env, User, State, Feature>): Promise<Response>;
4
+ //# sourceMappingURL=router.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../src/admin/router.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EACV,aAAa,EACb,oBAAoB,EACpB,aAAa,EACb,iBAAiB,EACjB,SAAS,EACV,MAAM,YAAY,CAAC;AAEpB,eAAO,MAAM,gBAAgB,eAAe,CAAC;AAE7C,wBAAsB,aAAa,CACjC,GAAG,SAAS,aAAa,EACzB,IAAI,SAAS,aAAa,EAC1B,KAAK,SAAS,iBAAiB,CAAC,IAAI,CAAC,EACrC,OAAO,SAAS,MAAM,GAAG,MAAM,EAE/B,OAAO,EAAE,OAAO,EAChB,GAAG,EAAE,GAAG,EACR,GAAG,EAAE,gBAAgB,EACrB,IAAI,EAAE,SAAS,EACf,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,oBAAoB,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,GACvD,OAAO,CAAC,QAAQ,CAAC,CAmBnB"}
@@ -0,0 +1,24 @@
1
+ import { authenticateAdminRequest, authenticationRequired, administratorRequired, isAdminPath, prepareAdminState, requireSameOriginMutation, } from "./auth.js";
2
+ export const ADMIN_API_PREFIX = "/api/admin";
3
+ export async function adminBoundary(request, env, ctx, next, state, options) {
4
+ const url = new URL(request.url);
5
+ if (!isAdminPath(url.pathname))
6
+ return next(request);
7
+ const authenticationFailure = await authenticateAdminRequest(request, env, url, state, options.provider);
8
+ if (authenticationFailure)
9
+ return authenticationFailure;
10
+ const originFailure = requireSameOriginMutation(request, url);
11
+ if (originFailure)
12
+ return originFailure;
13
+ const user = state.user;
14
+ if (!user)
15
+ return authenticationRequired(request);
16
+ await prepareAdminState(env, user, state);
17
+ const policyAllowed = !options.authorize || user.auth_strategy === "http_basic" || (await options.authorize({ request, url, user, env, ctx, state }));
18
+ if (!policyAllowed)
19
+ return administratorRequired(url);
20
+ // Domain routes own dispatch. This boundary only establishes identity and
21
+ // application-wide admin policy before the request reaches Hono.
22
+ return next(request);
23
+ }
24
+ //# sourceMappingURL=router.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"router.js","sourceRoot":"","sources":["../../src/admin/router.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,EACxB,sBAAsB,EACtB,qBAAqB,EACrB,WAAW,EACX,iBAAiB,EACjB,yBAAyB,GAC1B,MAAM,WAAW,CAAC;AASnB,MAAM,CAAC,MAAM,gBAAgB,GAAG,YAAY,CAAC;AAE7C,MAAM,CAAC,KAAK,UAAU,aAAa,CAMjC,OAAgB,EAChB,GAAQ,EACR,GAAqB,EACrB,IAAe,EACf,KAAY,EACZ,OAAwD;IAExD,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACjC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC;IAErD,MAAM,qBAAqB,GAAG,MAAM,wBAAwB,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;IACzG,IAAI,qBAAqB;QAAE,OAAO,qBAAqB,CAAC;IACxD,MAAM,aAAa,GAAG,yBAAyB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IAC9D,IAAI,aAAa;QAAE,OAAO,aAAa,CAAC;IAExC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;IACxB,IAAI,CAAC,IAAI;QAAE,OAAO,sBAAsB,CAAC,OAAO,CAAC,CAAC;IAClD,MAAM,iBAAiB,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IAE1C,MAAM,aAAa,GAAG,CAAC,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC,aAAa,KAAK,YAAY,IAAI,CAAC,MAAM,OAAO,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;IACtJ,IAAI,CAAC,aAAa;QAAE,OAAO,qBAAqB,CAAC,GAAG,CAAC,CAAC;IAEtD,0EAA0E;IAC1E,iEAAiE;IACjE,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC;AACvB,CAAC"}
@@ -0,0 +1,43 @@
1
+ /** The small binding contract used by the reusable admin boundary. */
2
+ export interface AdminBindings {
3
+ AUTH_STRATEGY?: string;
4
+ ADMIN_TOKEN?: string;
5
+ DB?: D1Database;
6
+ }
7
+ export interface AdminAuthorizationUser {
8
+ id: string;
9
+ email?: string | null;
10
+ display_name?: string | null;
11
+ is_admin?: boolean | number;
12
+ }
13
+ export interface AdminIdentity {
14
+ sub: string;
15
+ email?: string;
16
+ name?: string;
17
+ roles?: readonly string[];
18
+ auth_strategy?: string;
19
+ authUser?: AdminAuthorizationUser | null;
20
+ }
21
+ export interface AdminRequestState<User extends AdminIdentity = AdminIdentity> {
22
+ user?: User | null;
23
+ authUser?: AdminAuthorizationUser | null;
24
+ requestedBy?: string;
25
+ }
26
+ export interface AdminUserProvider<Env extends AdminBindings, User extends AdminIdentity> {
27
+ getUser(request: Request, env: Env): User | null | Promise<User | null>;
28
+ }
29
+ export interface AdminAuthorizationContext<Env extends AdminBindings, User extends AdminIdentity, State extends AdminRequestState<User>> {
30
+ request: Request;
31
+ url: URL;
32
+ user: User;
33
+ env: Env;
34
+ ctx: ExecutionContext;
35
+ state: State;
36
+ }
37
+ export interface AdminBoundaryOptions<Env extends AdminBindings, User extends AdminIdentity, State extends AdminRequestState<User>, Feature extends object = object> {
38
+ provider?: AdminUserProvider<Env, User> | null;
39
+ authorize?: (context: AdminAuthorizationContext<Env, User, State>) => boolean | Promise<boolean>;
40
+ features?: readonly Feature[];
41
+ }
42
+ export type AdminNext = (request: Request) => Response | Promise<Response>;
43
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/admin/types.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,MAAM,WAAW,aAAa;IAC5B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,EAAE,CAAC,EAAE,UAAU,CAAC;CACjB;AAED,MAAM,WAAW,sBAAsB;IACrC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,QAAQ,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,sBAAsB,GAAG,IAAI,CAAC;CAC1C;AAED,MAAM,WAAW,iBAAiB,CAAC,IAAI,SAAS,aAAa,GAAG,aAAa;IAC3E,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACnB,QAAQ,CAAC,EAAE,sBAAsB,GAAG,IAAI,CAAC;IACzC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,iBAAiB,CAAC,GAAG,SAAS,aAAa,EAAE,IAAI,SAAS,aAAa;IACtF,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;CACzE;AAED,MAAM,WAAW,yBAAyB,CACxC,GAAG,SAAS,aAAa,EACzB,IAAI,SAAS,aAAa,EAC1B,KAAK,SAAS,iBAAiB,CAAC,IAAI,CAAC;IAErC,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,EAAE,GAAG,CAAC;IACT,IAAI,EAAE,IAAI,CAAC;IACX,GAAG,EAAE,GAAG,CAAC;IACT,GAAG,EAAE,gBAAgB,CAAC;IACtB,KAAK,EAAE,KAAK,CAAC;CACd;AAED,MAAM,WAAW,oBAAoB,CACnC,GAAG,SAAS,aAAa,EACzB,IAAI,SAAS,aAAa,EAC1B,KAAK,SAAS,iBAAiB,CAAC,IAAI,CAAC,EACrC,OAAO,SAAS,MAAM,GAAG,MAAM;IAE/B,QAAQ,CAAC,EAAE,iBAAiB,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC;IAC/C,SAAS,CAAC,EAAE,CACV,OAAO,EAAE,yBAAyB,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,KACjD,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAChC,QAAQ,CAAC,EAAE,SAAS,OAAO,EAAE,CAAC;CAC/B;AAED,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,EAAE,OAAO,KAAK,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/admin/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,34 @@
1
+ export type JsonPrimitive = string | number | boolean | null;
2
+ export interface JsonObject {
3
+ readonly [key: string]: JsonValue;
4
+ }
5
+ export type JsonValue = JsonPrimitive | JsonObject | readonly JsonValue[];
6
+ export type JsonCompatible<Value> = Value extends JsonPrimitive ? Value : Value extends readonly (infer Element)[] ? readonly JsonCompatible<Element>[] : Value extends object ? {
7
+ readonly [Key in keyof Value]: JsonCompatible<Value[Key]>;
8
+ } : never;
9
+ export type JsonErrorEnvelope = JsonObject & {
10
+ readonly error: string;
11
+ };
12
+ export type ApiRequestInput = Parameters<typeof fetch>[0];
13
+ export interface ApiRequestOptions extends RequestInit {
14
+ validateJson?: never;
15
+ }
16
+ export type JsonValidator<Result> = (value: unknown) => value is Result;
17
+ export interface TypedApiRequestOptions<Result> extends RequestInit {
18
+ validateJson: JsonValidator<Result>;
19
+ }
20
+ export type ApiJsonRequestOptions = Omit<ApiRequestOptions, "body">;
21
+ export type TypedApiJsonRequestOptions<Result> = Omit<TypedApiRequestOptions<Result>, "body">;
22
+ export type ApiSuccessResult<Result = JsonValue> = Result | Response;
23
+ export declare class ApiError extends Error {
24
+ readonly status: number;
25
+ readonly requestId: string | null;
26
+ constructor(message: string, status: number, requestId: string | null);
27
+ }
28
+ export declare function isJsonErrorEnvelope(value: unknown): value is JsonErrorEnvelope;
29
+ export declare function apiFetch<Result>(input: ApiRequestInput, options: TypedApiRequestOptions<Result>): Promise<ApiSuccessResult<Result>>;
30
+ export declare function apiFetch(input: ApiRequestInput, options?: ApiRequestOptions): Promise<ApiSuccessResult>;
31
+ export declare function apiJson<Result, Payload>(input: ApiRequestInput, payload: Payload & JsonCompatible<Payload>, options: TypedApiJsonRequestOptions<Result>): Promise<ApiSuccessResult<Result>>;
32
+ export declare function apiJson<Payload>(input: ApiRequestInput, payload: Payload & JsonCompatible<Payload>, options?: ApiJsonRequestOptions): Promise<ApiSuccessResult>;
33
+ export { isJsonObject, isJsonValue } from "../input.js";
34
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC;AAE7D,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;CACnC;AAED,MAAM,MAAM,SAAS,GAAG,aAAa,GAAG,UAAU,GAAG,SAAS,SAAS,EAAE,CAAC;AAE1E,MAAM,MAAM,cAAc,CAAC,KAAK,IAC9B,KAAK,SAAS,aAAa,GAAG,KAAK,GAC/B,KAAK,SAAS,SAAS,CAAC,MAAM,OAAO,CAAC,EAAE,GAAG,SAAS,cAAc,CAAC,OAAO,CAAC,EAAE,GAC7E,KAAK,SAAS,MAAM,GAAG;IAAE,QAAQ,EAAE,GAAG,IAAI,MAAM,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;CAAE,GACpF,KAAK,CAAC;AAEZ,MAAM,MAAM,iBAAiB,GAAG,UAAU,GAAG;IAC3C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG,UAAU,CAAC,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAE1D,MAAM,WAAW,iBAAkB,SAAQ,WAAW;IACpD,YAAY,CAAC,EAAE,KAAK,CAAC;CACtB;AAED,MAAM,MAAM,aAAa,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,OAAO,KAAK,KAAK,IAAI,MAAM,CAAC;AAExE,MAAM,WAAW,sBAAsB,CAAC,MAAM,CAAE,SAAQ,WAAW;IACjE,YAAY,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;CACrC;AAED,MAAM,MAAM,qBAAqB,GAAG,IAAI,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC;AAEpE,MAAM,MAAM,0BAA0B,CAAC,MAAM,IAAI,IAAI,CACnD,sBAAsB,CAAC,MAAM,CAAC,EAC9B,MAAM,CACP,CAAC;AAEF,MAAM,MAAM,gBAAgB,CAAC,MAAM,GAAG,SAAS,IAAI,MAAM,GAAG,QAAQ,CAAC;AAErE,qBAAa,QAAS,SAAQ,KAAK;IACjC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAElC,YAAY,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,EAKpE;CACF;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,iBAAiB,CAE9E;AAaD,wBAAgB,QAAQ,CAAC,MAAM,EAC7B,KAAK,EAAE,eAAe,EACtB,OAAO,EAAE,sBAAsB,CAAC,MAAM,CAAC,GACtC,OAAO,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC;AACrC,wBAAgB,QAAQ,CACtB,KAAK,EAAE,eAAe,EACtB,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,gBAAgB,CAAC,CAAC;AAuC7B,wBAAgB,OAAO,CAAC,MAAM,EAAE,OAAO,EACrC,KAAK,EAAE,eAAe,EACtB,OAAO,EAAE,OAAO,GAAG,cAAc,CAAC,OAAO,CAAC,EAC1C,OAAO,EAAE,0BAA0B,CAAC,MAAM,CAAC,GAC1C,OAAO,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC;AACrC,wBAAgB,OAAO,CAAC,OAAO,EAC7B,KAAK,EAAE,eAAe,EACtB,OAAO,EAAE,OAAO,GAAG,cAAc,CAAC,OAAO,CAAC,EAC1C,OAAO,CAAC,EAAE,qBAAqB,GAC9B,OAAO,CAAC,gBAAgB,CAAC,CAAC;AAc7B,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,59 @@
1
+ export class ApiError extends Error {
2
+ status;
3
+ requestId;
4
+ constructor(message, status, requestId) {
5
+ super(message);
6
+ this.name = "ApiError";
7
+ this.status = status;
8
+ this.requestId = requestId;
9
+ }
10
+ }
11
+ export function isJsonErrorEnvelope(value) {
12
+ return isJsonObject(value) && typeof value.error === "string" && value.error.length > 0;
13
+ }
14
+ function requestHeaders(options) {
15
+ const headers = new Headers({ Accept: "application/json" });
16
+ if (options.body !== undefined && options.body !== null) {
17
+ headers.set("Content-Type", "application/json");
18
+ }
19
+ if (options.headers) {
20
+ new Headers(options.headers).forEach((value, name) => headers.set(name, value));
21
+ }
22
+ return headers;
23
+ }
24
+ export async function apiFetch(input, options = {}) {
25
+ return performApiFetch(input, options);
26
+ }
27
+ async function performApiFetch(input, options) {
28
+ const { validateJson, ...requestOptions } = options;
29
+ const response = await fetch(input, {
30
+ credentials: "same-origin",
31
+ ...requestOptions,
32
+ headers: requestHeaders(requestOptions),
33
+ });
34
+ const payload = await response.clone().json().catch(() => null);
35
+ if (!response.ok) {
36
+ const message = isJsonErrorEnvelope(payload)
37
+ ? payload.error
38
+ : `Request failed (${response.status})`;
39
+ throw new ApiError(message, response.status, response.headers.get("X-Request-ID") || null);
40
+ }
41
+ if (payload === null)
42
+ return response;
43
+ if (validateJson) {
44
+ if (!validateJson(payload))
45
+ throw new TypeError("API response did not match the expected JSON shape");
46
+ return payload;
47
+ }
48
+ return isJsonValue(payload) ? payload : response;
49
+ }
50
+ export function apiJson(input, payload, options = {}) {
51
+ return performApiFetch(input, {
52
+ ...options,
53
+ method: options.method || "POST",
54
+ body: JSON.stringify(payload),
55
+ });
56
+ }
57
+ import { isJsonObject, isJsonValue } from "../input.js";
58
+ export { isJsonObject, isJsonValue } from "../input.js";
59
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ import type { IdentityState, RequestIdentity } from "../auth/identity/index.js";
2
+ import type { DomainAuth } from "../domain/index.js";
3
+ export interface RouteRequestContext<Env = unknown, State = IdentityState> {
4
+ request: Request;
5
+ env: Env;
6
+ ctx: ExecutionContext;
7
+ state: State;
8
+ route: ApiRoute<Env, State>;
9
+ identity: RequestIdentity;
10
+ params: Readonly<Record<string, string>>;
11
+ }
12
+ export interface ApiRoute<Env = unknown, State = IdentityState> {
13
+ method: string | readonly string[];
14
+ path: string | ((pathname: string, request: Request) => boolean);
15
+ auth?: DomainAuth;
16
+ scope?: string | null;
17
+ scopes?: readonly string[];
18
+ scopeMode?: "all" | "any";
19
+ csrf?: boolean;
20
+ authorize?: (context: RouteRequestContext<Env, State>) => boolean | Response | Promise<boolean | Response>;
21
+ handler: (context: RouteRequestContext<Env, State>) => Response | Promise<Response>;
22
+ }
23
+ export interface RouteInput<Env = unknown, State = IdentityState> extends Omit<ApiRoute<Env, State>, "method"> {
24
+ method?: string | readonly string[];
25
+ }
26
+ export declare function defineRoute<Env = unknown, State = IdentityState>({ method, path, auth, scope, csrf, handler, ...rest }: RouteInput<Env, State>): ApiRoute<Env, State>;
27
+ /** Compatibility predicate for callers that need to inspect a route directly. */
28
+ export declare function matchRoute(request: Request, route: Pick<ApiRoute<never, never>, "method" | "path">): boolean;
29
+ export declare function createRouteDispatcher<Env extends object, State extends IdentityState>(routes?: readonly ApiRoute<Env, State>[]): (request: Request, env: Env, ctx: ExecutionContext, state: State) => Promise<Response | null>;
30
+ export declare function dispatchRoutes<Env extends object, State extends IdentityState>(request: Request, env: Env, ctx: ExecutionContext, state: State, routes?: readonly ApiRoute<Env, State>[]): Promise<Response | null>;
31
+ //# sourceMappingURL=contracts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contracts.d.ts","sourceRoot":"","sources":["../../src/api/contracts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,101 @@
1
+ import { Hono } from "hono";
2
+ import { hasScope, requestIdentity } from "../auth/index.js";
3
+ import { json, sameOrigin } from "../core/security/index.js";
4
+ const ROUTER_CONTEXT = "__cfgenai_api_context";
5
+ export function defineRoute({ method = "GET", path, auth = "public", scope = null, csrf = false, handler, ...rest }) {
6
+ if (!path || typeof handler !== "function") {
7
+ throw new TypeError("API routes require path and handler");
8
+ }
9
+ const normalizedMethod = Array.isArray(method)
10
+ ? method.map((value) => String(value).toUpperCase())
11
+ : String(method).toUpperCase();
12
+ return { ...rest, method: normalizedMethod, path, auth, scope, csrf, handler };
13
+ }
14
+ /** Compatibility predicate for callers that need to inspect a route directly. */
15
+ export function matchRoute(request, route) {
16
+ const url = new URL(request.url);
17
+ const methods = Array.isArray(route.method) ? route.method : [route.method];
18
+ const methodMatches = methods
19
+ .map((method) => String(method).toUpperCase())
20
+ .includes(request.method.toUpperCase());
21
+ const pathMatches = typeof route.path === "function"
22
+ ? route.path(url.pathname, request)
23
+ : route.path === url.pathname;
24
+ return methodMatches && pathMatches;
25
+ }
26
+ function createRouteRouter(routes) {
27
+ const app = new Hono();
28
+ // Nested dispatch must not turn typed errors into Hono's generic 500 response.
29
+ app.onError((error) => { throw error; });
30
+ for (const route of routes) {
31
+ const methods = (Array.isArray(route.method) ? route.method : [route.method])
32
+ .map((method) => String(method).toUpperCase());
33
+ const path = typeof route.path === "string" ? route.path : "*";
34
+ for (const method of methods)
35
+ app.on(method, path, async (context, next) => {
36
+ if (typeof route.path === "function"
37
+ && !route.path(new URL(context.req.url).pathname, context.req.raw))
38
+ return next();
39
+ const runtime = context.env[ROUTER_CONTEXT];
40
+ if (!runtime)
41
+ return context.json({ error: "API router context is missing." }, 500);
42
+ runtime.matched = true;
43
+ const identity = requestIdentity(runtime.state);
44
+ if (route.auth === "user" && !identity.isAuthenticated) {
45
+ return json({ error: "Authentication is required." }, 401);
46
+ }
47
+ if (route.auth === "admin" && !identity.isAdmin) {
48
+ return json({ error: "Administrator access is required." }, 403);
49
+ }
50
+ if (route.csrf && !sameOrigin(context.req.raw)) {
51
+ return json({ error: "A same-origin request is required." }, 403);
52
+ }
53
+ const scopes = route.scopes || (route.scope ? [route.scope] : []);
54
+ if (scopes.length) {
55
+ const checks = await Promise.all(scopes.map((scope) => hasScope(runtime.env, runtime.state.user
56
+ ?? (runtime.state.authUser ? { authUser: runtime.state.authUser } : null), scope, { who: identity.who })));
57
+ const allowed = route.scopeMode === "any" ? checks.some(Boolean) : checks.every(Boolean);
58
+ if (!allowed)
59
+ return json({ error: "Required scope is missing." }, 403);
60
+ }
61
+ const routeContext = {
62
+ request: context.req.raw,
63
+ env: runtime.env,
64
+ ctx: runtime.ctx,
65
+ state: runtime.state,
66
+ route,
67
+ identity,
68
+ params: context.req.param(),
69
+ };
70
+ if (route.authorize) {
71
+ const verdict = await route.authorize(routeContext);
72
+ if (verdict instanceof Response)
73
+ return verdict;
74
+ if (!verdict)
75
+ return json({ error: "Access is not permitted." }, 403);
76
+ }
77
+ return route.handler(routeContext);
78
+ });
79
+ }
80
+ return app;
81
+ }
82
+ export function createRouteDispatcher(routes = []) {
83
+ const router = createRouteRouter(routes);
84
+ return async function dispatch(request, env, ctx, state) {
85
+ if (!routes.length)
86
+ return null;
87
+ const routerContext = { env, ctx, state, matched: false };
88
+ const requestEnv = {
89
+ ...env,
90
+ [ROUTER_CONTEXT]: routerContext,
91
+ };
92
+ const response = await router.fetch(request, requestEnv, ctx);
93
+ return !routerContext.matched && response.status === 404 ? null : response;
94
+ };
95
+ }
96
+ export async function dispatchRoutes(request, env, ctx, state, routes = []) {
97
+ if (!routes.length)
98
+ return null;
99
+ return createRouteDispatcher(routes)(request, env, ctx, state);
100
+ }
101
+ //# sourceMappingURL=contracts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contracts.js","sourceRoot":"","sources":["../../src/api/contracts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ export declare const NO_STORE_HEADERS: {
2
+ readonly "Cache-Control": "no-store";
3
+ };
4
+ export declare function readJsonObject(request: Request): Promise<Record<string, unknown> | null>;
5
+ export declare function stringField(body: Record<string, unknown> | null, field: string): string | null;
6
+ export declare function stringArrayField(body: Record<string, unknown> | null, field: string): string[] | null;
7
+ export declare function jsonError(error: string, status: number): Response;
8
+ export declare function badRequest(error: string): Response;
9
+ export declare function notFound(error: string): Response;
10
+ export declare function jsonWithCookie(body: object, cookie: string): Response;
11
+ export declare function errorMessage(error: unknown): string;
12
+ //# sourceMappingURL=http.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/api/http.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,gBAAgB;aAAK,eAAe,EAAE,UAAU;CAAW,CAAC;AAGzE,wBAAsB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,CAE9F;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAG9F;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,CAKrG;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,QAAQ,CAEjE;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,QAAQ,CAElD;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,QAAQ,CAEhD;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,QAAQ,CAOrE;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAEnD"}
@@ -0,0 +1,36 @@
1
+ export const NO_STORE_HEADERS = { "Cache-Control": "no-store" };
2
+ import { readJson } from "../core/security/index.js";
3
+ export async function readJsonObject(request) {
4
+ return readJson(request);
5
+ }
6
+ export function stringField(body, field) {
7
+ const value = body?.[field];
8
+ return typeof value === "string" && value.length > 0 ? value : null;
9
+ }
10
+ export function stringArrayField(body, field) {
11
+ const value = body?.[field];
12
+ return Array.isArray(value) && value.every((entry) => typeof entry === "string")
13
+ ? value
14
+ : null;
15
+ }
16
+ export function jsonError(error, status) {
17
+ return Response.json({ error }, { status, headers: NO_STORE_HEADERS });
18
+ }
19
+ export function badRequest(error) {
20
+ return Response.json({ error }, { status: 400 });
21
+ }
22
+ export function notFound(error) {
23
+ return Response.json({ error }, { status: 404 });
24
+ }
25
+ export function jsonWithCookie(body, cookie) {
26
+ return new Response(JSON.stringify(body), {
27
+ headers: {
28
+ "content-type": "application/json; charset=utf-8",
29
+ "Set-Cookie": cookie,
30
+ },
31
+ });
32
+ }
33
+ export function errorMessage(error) {
34
+ return error instanceof Error ? error.message : "Unable to complete the request";
35
+ }
36
+ //# sourceMappingURL=http.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/api/http.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,gBAAgB,GAAG,EAAE,eAAe,EAAE,UAAU,EAAW,CAAC;AACzE,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAErD,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,OAAgB;IACnD,OAAO,QAAQ,CAAC,OAAO,CAAC,CAAC;AAC3B,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,IAAoC,EAAE,KAAa;IAC7E,MAAM,KAAK,GAAG,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC;IAC5B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;AACtE,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,IAAoC,EAAE,KAAa;IAClF,MAAM,KAAK,GAAG,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC;IAC5B,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,EAAmB,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC;QAC/F,CAAC,CAAC,KAAK;QACP,CAAC,CAAC,IAAI,CAAC;AACX,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,KAAa,EAAE,MAAc;IACrD,OAAO,QAAQ,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,EAAE,CAAC,CAAC;AACzE,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,KAAa;IACtC,OAAO,QAAQ,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;AACnD,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,KAAa;IACpC,OAAO,QAAQ,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;AACnD,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,IAAY,EAAE,MAAc;IACzD,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;QACxC,OAAO,EAAE;YACP,cAAc,EAAE,iCAAiC;YACjD,YAAY,EAAE,MAAM;SACrB;KACF,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,KAAc;IACzC,OAAO,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,gCAAgC,CAAC;AACnF,CAAC"}
@@ -0,0 +1,14 @@
1
+ export { requestContext, requestIdentity, userId } from "../auth/identity/index.js";
2
+ export { requireFeatureCircuit } from "../core/circuits/index.js";
3
+ export { Event, emitEvent } from "../core/events/index.js";
4
+ export { json, readJson, readJsonClone, requireAdmin, requireUser, sameOrigin, secureJson, secureText } from "../core/security/index.js";
5
+ export type { AllowedOriginInput, IdentityLike, JsonObjectBody, ReadJsonCloneResult, ResponseHeaders, SecurityRequestError, } from "../core/security/index.js";
6
+ export { defineRepository, createRepositories, RepositoryError } from "../repository.js";
7
+ export { defineRoute, matchRoute, dispatchRoutes } from "./contracts.js";
8
+ export { ApiError, apiFetch, apiJson, isJsonErrorEnvelope } from "./client.js";
9
+ export type { ApiJsonRequestOptions, ApiRequestInput, ApiRequestOptions, ApiSuccessResult, JsonCompatible, JsonErrorEnvelope, JsonObject, JsonPrimitive, JsonValidator, JsonValue, TypedApiJsonRequestOptions, TypedApiRequestOptions, } from "./client.js";
10
+ export { defineApp } from "../app.js";
11
+ export { SECURITY_HEADER_NAMES, assertSecurityHeaders, assertJsonError } from "./testing.js";
12
+ export type { JsonErrorAssertionInput, JsonErrorAssertionResult, SecurityHeaderAssertionInput, SecurityHeaderAssertionResult, SecurityHeaderName, } from "./testing.js";
13
+ export * from "./http.js";
14
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AACpF,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,aAAa,EAAE,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACzI,YAAY,EACV,kBAAkB,EAClB,YAAY,EACZ,cAAc,EACd,mBAAmB,EACnB,eAAe,EACf,oBAAoB,GACrB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACzF,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACzE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAC/E,YAAY,EACV,qBAAqB,EACrB,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAChB,cAAc,EACd,iBAAiB,EACjB,UAAU,EACV,aAAa,EACb,aAAa,EACb,SAAS,EACT,0BAA0B,EAC1B,sBAAsB,GACvB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC7F,YAAY,EACV,uBAAuB,EACvB,wBAAwB,EACxB,4BAA4B,EAC5B,6BAA6B,EAC7B,kBAAkB,GACnB,MAAM,cAAc,CAAC;AACtB,cAAc,WAAW,CAAC"}
@@ -0,0 +1,11 @@
1
+ export { requestContext, requestIdentity, userId } from "../auth/identity/index.js";
2
+ export { requireFeatureCircuit } from "../core/circuits/index.js";
3
+ export { Event, emitEvent } from "../core/events/index.js";
4
+ export { json, readJson, readJsonClone, requireAdmin, requireUser, sameOrigin, secureJson, secureText } from "../core/security/index.js";
5
+ export { defineRepository, createRepositories, RepositoryError } from "../repository.js";
6
+ export { defineRoute, matchRoute, dispatchRoutes } from "./contracts.js";
7
+ export { ApiError, apiFetch, apiJson, isJsonErrorEnvelope } from "./client.js";
8
+ export { defineApp } from "../app.js";
9
+ export { SECURITY_HEADER_NAMES, assertSecurityHeaders, assertJsonError } from "./testing.js";
10
+ export * from "./http.js";
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AACpF,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,aAAa,EAAE,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AASzI,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACzF,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACzE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAe/E,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAQ7F,cAAc,WAAW,CAAC"}
@@ -0,0 +1,10 @@
1
+ import type { JsonErrorEnvelope } from "./client.js";
2
+ export declare const SECURITY_HEADER_NAMES: readonly ["Content-Security-Policy", "X-Content-Type-Options", "X-Frame-Options", "Referrer-Policy", "Permissions-Policy", "Strict-Transport-Security"];
3
+ export type SecurityHeaderName = (typeof SECURITY_HEADER_NAMES)[number];
4
+ export type SecurityHeaderAssertionInput = Pick<Response, "headers">;
5
+ export type SecurityHeaderAssertionResult<ResponseType extends SecurityHeaderAssertionInput> = ResponseType;
6
+ export type JsonErrorAssertionInput = readonly [response: Response, status: number];
7
+ export type JsonErrorAssertionResult = JsonErrorEnvelope;
8
+ export declare function assertSecurityHeaders<ResponseType extends SecurityHeaderAssertionInput>(response: ResponseType): SecurityHeaderAssertionResult<ResponseType>;
9
+ export declare function assertJsonError(...[response, status]: JsonErrorAssertionInput): Promise<JsonErrorAssertionResult>;
10
+ //# sourceMappingURL=testing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"testing.d.ts","sourceRoot":"","sources":["../../src/api/testing.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAErD,eAAO,MAAM,qBAAqB,YAChC,yBAAyB,EACzB,wBAAwB,EACxB,iBAAiB,EACjB,iBAAiB,EACjB,oBAAoB,EACpB,2BAA2B,CACnB,CAAC;AAEX,MAAM,MAAM,kBAAkB,GAAG,CAAC,OAAO,qBAAqB,CAAC,CAAC,MAAM,CAAC,CAAC;AACxE,MAAM,MAAM,4BAA4B,GAAG,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;AACrE,MAAM,MAAM,6BAA6B,CAAC,YAAY,SAAS,4BAA4B,IACzF,YAAY,CAAC;AAEf,MAAM,MAAM,uBAAuB,GAAG,SAAS,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAEpF,MAAM,MAAM,wBAAwB,GAAG,iBAAiB,CAAC;AAEzD,wBAAgB,qBAAqB,CAAC,YAAY,SAAS,4BAA4B,EACrF,QAAQ,EAAE,YAAY,GACrB,6BAA6B,CAAC,YAAY,CAAC,CAK7C;AAED,wBAAsB,eAAe,CACnC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,uBAAuB,GAC7C,OAAO,CAAC,wBAAwB,CAAC,CAOnC"}
@@ -0,0 +1,26 @@
1
+ import { isJsonErrorEnvelope } from "./client.js";
2
+ export const SECURITY_HEADER_NAMES = [
3
+ "Content-Security-Policy",
4
+ "X-Content-Type-Options",
5
+ "X-Frame-Options",
6
+ "Referrer-Policy",
7
+ "Permissions-Policy",
8
+ "Strict-Transport-Security",
9
+ ];
10
+ export function assertSecurityHeaders(response) {
11
+ for (const header of SECURITY_HEADER_NAMES) {
12
+ if (!response?.headers?.get(header))
13
+ throw new Error(`Missing security header: ${header}`);
14
+ }
15
+ return response;
16
+ }
17
+ export async function assertJsonError(...[response, status]) {
18
+ if (response.status !== status) {
19
+ throw new Error(`Expected ${status}, received ${response.status}`);
20
+ }
21
+ const payload = await response.clone().json().catch(() => null);
22
+ if (!isJsonErrorEnvelope(payload))
23
+ throw new Error("Expected a JSON error envelope");
24
+ return payload;
25
+ }
26
+ //# sourceMappingURL=testing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"testing.js","sourceRoot":"","sources":["../../src/api/testing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAGlD,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,yBAAyB;IACzB,wBAAwB;IACxB,iBAAiB;IACjB,iBAAiB;IACjB,oBAAoB;IACpB,2BAA2B;CACnB,CAAC;AAWX,MAAM,UAAU,qBAAqB,CACnC,QAAsB;IAEtB,KAAK,MAAM,MAAM,IAAI,qBAAqB,EAAE,CAAC;QAC3C,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,MAAM,EAAE,CAAC,CAAC;IAC7F,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAA0B;IAE9C,IAAI,QAAQ,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CAAC,YAAY,MAAM,cAAc,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IACrE,CAAC;IACD,MAAM,OAAO,GAAY,MAAM,QAAQ,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;IACzE,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;IACrF,OAAO,OAAO,CAAC;AACjB,CAAC"}
package/dist/app.d.ts ADDED
@@ -0,0 +1,21 @@
1
+ import type { AppDomain } from "./domain/index.js";
2
+ export type AnyAppDomain = AppDomain<unknown, unknown, unknown>;
3
+ export interface AppDefinitionInput<Feature = unknown, Domain extends AnyAppDomain = AnyAppDomain> {
4
+ name: string;
5
+ ui?: boolean;
6
+ api?: boolean;
7
+ admin?: boolean;
8
+ features?: readonly Feature[];
9
+ domains?: readonly Domain[];
10
+ }
11
+ export interface AppDefinition<Feature = unknown, Domain extends AnyAppDomain = AnyAppDomain> {
12
+ readonly name: string;
13
+ readonly ui: boolean;
14
+ readonly api: boolean;
15
+ readonly admin: boolean;
16
+ readonly features: readonly Feature[];
17
+ readonly domains: readonly Domain[];
18
+ }
19
+ /** Register all application-owned capabilities in one deployable manifest. */
20
+ export declare function defineApp<const Feature = unknown, const Domain extends AnyAppDomain = AnyAppDomain>(input: AppDefinitionInput<Feature, Domain>): Readonly<AppDefinition<Feature, Domain>>;
21
+ //# sourceMappingURL=app.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEnD,MAAM,MAAM,YAAY,GAAG,SAAS,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AAEhE,MAAM,WAAW,kBAAkB,CACjC,OAAO,GAAG,OAAO,EACjB,MAAM,SAAS,YAAY,GAAG,YAAY;IAE1C,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,CAAC,EAAE,OAAO,CAAC;IACb,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,SAAS,OAAO,EAAE,CAAC;IAC9B,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,aAAa,CAC5B,OAAO,GAAG,OAAO,EACjB,MAAM,SAAS,YAAY,GAAG,YAAY;IAE1C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,SAAS,OAAO,EAAE,CAAC;IACtC,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;CACrC;AAED,8EAA8E;AAC9E,wBAAgB,SAAS,CACvB,KAAK,CAAC,OAAO,GAAG,OAAO,EACvB,KAAK,CAAC,MAAM,SAAS,YAAY,GAAG,YAAY,EAChD,KAAK,EAAE,kBAAkB,CAAC,OAAO,EAAE,MAAM,CAAC,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAiBtF"}
package/dist/app.js ADDED
@@ -0,0 +1,23 @@
1
+ /** Register all application-owned capabilities in one deployable manifest. */
2
+ export function defineApp(input) {
3
+ if ("repositories" in input) {
4
+ throw new TypeError("Repositories belong to an AppDomain, not directly to an app");
5
+ }
6
+ const { name, ui = true, api = true, admin = true, features = [], domains = [] } = input;
7
+ if (!/^[a-z][a-z0-9-]*$/.test(String(name || "")))
8
+ throw new TypeError("Apps require a safe name");
9
+ if (!ui && !api)
10
+ throw new TypeError("An app must expose ui or api");
11
+ const names = domains.map((domain) => domain.name);
12
+ if (new Set(names).size !== names.length)
13
+ throw new TypeError("Apps cannot register a domain twice");
14
+ return Object.freeze({
15
+ name: String(name),
16
+ ui: Boolean(ui),
17
+ api: Boolean(api),
18
+ admin: Boolean(admin),
19
+ features: Object.freeze([...features]),
20
+ domains: Object.freeze([...domains]),
21
+ });
22
+ }
23
+ //# sourceMappingURL=app.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app.js","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"AA4BA,8EAA8E;AAC9E,MAAM,UAAU,SAAS,CAGvB,KAA0C;IAC1C,IAAI,cAAc,IAAI,KAAK,EAAE,CAAC;QAC5B,MAAM,IAAI,SAAS,CAAC,6DAA6D,CAAC,CAAC;IACrF,CAAC;IACD,MAAM,EAAE,IAAI,EAAE,EAAE,GAAG,IAAI,EAAE,GAAG,GAAG,IAAI,EAAE,KAAK,GAAG,IAAI,EAAE,QAAQ,GAAG,EAAE,EAAE,OAAO,GAAG,EAAE,EAAE,GAAG,KAAK,CAAC;IACzF,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;QAAE,MAAM,IAAI,SAAS,CAAC,0BAA0B,CAAC,CAAC;IACnG,IAAI,CAAC,EAAE,IAAI,CAAC,GAAG;QAAE,MAAM,IAAI,SAAS,CAAC,8BAA8B,CAAC,CAAC;IACrE,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACnD,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,MAAM;QAAE,MAAM,IAAI,SAAS,CAAC,qCAAqC,CAAC,CAAC;IACrG,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC;QAClB,EAAE,EAAE,OAAO,CAAC,EAAE,CAAC;QACf,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC;QACjB,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC;QACrB,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC;QACtC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC;KACrC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,9 @@
1
+ export declare const AUTH_USER_TABLE = "auth_users";
2
+ export declare const AUTH_SCOPE_TABLE = "auth_scopes";
3
+ export declare const AUTH_GRANT_TABLE = "auth_user_scopes";
4
+ export declare const DEFAULT_TENANT_ID = "easley-family";
5
+ export declare const DEFAULT_TENANT_NAME = "Easley Family";
6
+ export declare class SubscriptionError extends Error {
7
+ constructor(message: string);
8
+ }
9
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/auth/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,eAAe,eAAe,CAAC;AAC5C,eAAO,MAAM,gBAAgB,gBAAgB,CAAC;AAC9C,eAAO,MAAM,gBAAgB,qBAAqB,CAAC;AACnD,eAAO,MAAM,iBAAiB,kBAAkB,CAAC;AACjD,eAAO,MAAM,mBAAmB,kBAAkB,CAAC;AAEnD,qBAAa,iBAAkB,SAAQ,KAAK;IAC1C,YAAY,OAAO,EAAE,MAAM,EAAsD;CAClF"}