@corgelabs/corge 0.0.1 → 1.0.1

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 (341) hide show
  1. package/dist/ai/index.d.ts +3 -0
  2. package/dist/ai/index.d.ts.map +1 -0
  3. package/dist/ai/index.js +3 -0
  4. package/dist/ai/index.js.map +1 -0
  5. package/dist/ai/schema.d.ts +83 -0
  6. package/dist/ai/schema.d.ts.map +1 -0
  7. package/dist/ai/schema.js +19 -0
  8. package/dist/ai/schema.js.map +1 -0
  9. package/dist/ai/service.d.ts +14 -0
  10. package/dist/ai/service.d.ts.map +1 -0
  11. package/dist/ai/service.js +266 -0
  12. package/dist/ai/service.js.map +1 -0
  13. package/dist/ai/utils.d.ts +10 -0
  14. package/dist/ai/utils.d.ts.map +1 -0
  15. package/dist/ai/utils.js +27 -0
  16. package/dist/ai/utils.js.map +1 -0
  17. package/dist/attachments/index.d.ts +4 -0
  18. package/dist/attachments/index.d.ts.map +1 -0
  19. package/dist/attachments/index.js +4 -0
  20. package/dist/attachments/index.js.map +1 -0
  21. package/dist/attachments/routes.d.ts +75 -0
  22. package/dist/attachments/routes.d.ts.map +1 -0
  23. package/dist/attachments/routes.js +18 -0
  24. package/dist/attachments/routes.js.map +1 -0
  25. package/dist/attachments/schema.d.ts +61 -0
  26. package/dist/attachments/schema.d.ts.map +1 -0
  27. package/dist/attachments/schema.js +30 -0
  28. package/dist/attachments/schema.js.map +1 -0
  29. package/dist/attachments/service.d.ts +27 -0
  30. package/dist/attachments/service.d.ts.map +1 -0
  31. package/dist/attachments/service.js +224 -0
  32. package/dist/attachments/service.js.map +1 -0
  33. package/dist/attachments/utils.d.ts +9 -0
  34. package/dist/attachments/utils.d.ts.map +1 -0
  35. package/dist/attachments/utils.js +80 -0
  36. package/dist/attachments/utils.js.map +1 -0
  37. package/dist/auth/index.d.ts +4 -0
  38. package/dist/auth/index.d.ts.map +1 -0
  39. package/dist/auth/index.js +4 -0
  40. package/dist/auth/index.js.map +1 -0
  41. package/dist/auth/oidc.d.ts +25 -0
  42. package/dist/auth/oidc.d.ts.map +1 -0
  43. package/dist/auth/oidc.js +298 -0
  44. package/dist/auth/oidc.js.map +1 -0
  45. package/dist/auth/recovery.d.ts +41 -0
  46. package/dist/auth/recovery.d.ts.map +1 -0
  47. package/dist/auth/recovery.js +250 -0
  48. package/dist/auth/recovery.js.map +1 -0
  49. package/dist/auth/routes.d.ts +226 -0
  50. package/dist/auth/routes.d.ts.map +1 -0
  51. package/dist/auth/routes.js +96 -0
  52. package/dist/auth/routes.js.map +1 -0
  53. package/dist/auth/schema.d.ts +158 -0
  54. package/dist/auth/schema.d.ts.map +1 -0
  55. package/dist/auth/schema.js +82 -0
  56. package/dist/auth/schema.js.map +1 -0
  57. package/dist/auth/service.d.ts +96 -0
  58. package/dist/auth/service.d.ts.map +1 -0
  59. package/dist/auth/service.js +129 -0
  60. package/dist/auth/service.js.map +1 -0
  61. package/dist/auth/session.d.ts +51 -0
  62. package/dist/auth/session.d.ts.map +1 -0
  63. package/dist/auth/session.js +344 -0
  64. package/dist/auth/session.js.map +1 -0
  65. package/dist/auth/utils.d.ts +17 -0
  66. package/dist/auth/utils.d.ts.map +1 -0
  67. package/dist/auth/utils.js +96 -0
  68. package/dist/auth/utils.js.map +1 -0
  69. package/dist/bin/corge.js +542 -0
  70. package/dist/chat/context.d.ts +10 -0
  71. package/dist/chat/context.d.ts.map +1 -0
  72. package/dist/chat/context.js +221 -0
  73. package/dist/chat/context.js.map +1 -0
  74. package/dist/chat/index.d.ts +4 -0
  75. package/dist/chat/index.d.ts.map +1 -0
  76. package/dist/chat/index.js +4 -0
  77. package/dist/chat/index.js.map +1 -0
  78. package/dist/chat/routes.d.ts +160 -0
  79. package/dist/chat/routes.d.ts.map +1 -0
  80. package/dist/chat/routes.js +210 -0
  81. package/dist/chat/routes.js.map +1 -0
  82. package/dist/chat/schema.d.ts +285 -0
  83. package/dist/chat/schema.d.ts.map +1 -0
  84. package/dist/chat/schema.js +74 -0
  85. package/dist/chat/schema.js.map +1 -0
  86. package/dist/chat/service.d.ts +64 -0
  87. package/dist/chat/service.d.ts.map +1 -0
  88. package/dist/chat/service.js +279 -0
  89. package/dist/chat/service.js.map +1 -0
  90. package/dist/chat/stream.d.ts +53 -0
  91. package/dist/chat/stream.d.ts.map +1 -0
  92. package/dist/chat/stream.js +339 -0
  93. package/dist/chat/stream.js.map +1 -0
  94. package/dist/chat/utils.d.ts +61 -0
  95. package/dist/chat/utils.d.ts.map +1 -0
  96. package/dist/chat/utils.js +285 -0
  97. package/dist/chat/utils.js.map +1 -0
  98. package/dist/cli/builder.d.ts +6 -0
  99. package/dist/cli/builder.d.ts.map +1 -0
  100. package/dist/cli/builder.js +91 -0
  101. package/dist/cli/builder.js.map +1 -0
  102. package/dist/cli/deployer.d.ts +2 -0
  103. package/dist/cli/deployer.d.ts.map +1 -0
  104. package/dist/cli/deployer.js +152 -0
  105. package/dist/cli/deployer.js.map +1 -0
  106. package/dist/cli/dev-server.d.ts +2 -0
  107. package/dist/cli/dev-server.d.ts.map +1 -0
  108. package/dist/cli/dev-server.js +70 -0
  109. package/dist/cli/dev-server.js.map +1 -0
  110. package/dist/cli/env.d.ts +4 -0
  111. package/dist/cli/env.d.ts.map +1 -0
  112. package/dist/cli/env.js +68 -0
  113. package/dist/cli/env.js.map +1 -0
  114. package/dist/cli/init.d.ts +6 -0
  115. package/dist/cli/init.d.ts.map +1 -0
  116. package/dist/cli/init.js +97 -0
  117. package/dist/cli/init.js.map +1 -0
  118. package/dist/config.d.ts +262 -0
  119. package/dist/config.d.ts.map +1 -0
  120. package/dist/config.js +212 -0
  121. package/dist/config.js.map +1 -0
  122. package/dist/db/index.d.ts +3 -0
  123. package/dist/db/index.d.ts.map +1 -0
  124. package/dist/db/index.js +3 -0
  125. package/dist/db/index.js.map +1 -0
  126. package/dist/db/schema.d.ts +410 -0
  127. package/dist/db/schema.d.ts.map +1 -0
  128. package/dist/db/schema.js +294 -0
  129. package/dist/db/schema.js.map +1 -0
  130. package/dist/db/service.d.ts +42 -0
  131. package/dist/db/service.d.ts.map +1 -0
  132. package/dist/db/service.js +372 -0
  133. package/dist/db/service.js.map +1 -0
  134. package/dist/db/utils.d.ts +25 -0
  135. package/dist/db/utils.d.ts.map +1 -0
  136. package/dist/db/utils.js +188 -0
  137. package/dist/db/utils.js.map +1 -0
  138. package/dist/emails/index.d.ts +4 -0
  139. package/dist/emails/index.d.ts.map +1 -0
  140. package/dist/emails/index.js +4 -0
  141. package/dist/emails/index.js.map +1 -0
  142. package/dist/emails/routes.d.ts +191 -0
  143. package/dist/emails/routes.d.ts.map +1 -0
  144. package/dist/emails/routes.js +39 -0
  145. package/dist/emails/routes.js.map +1 -0
  146. package/dist/emails/schema.d.ts +237 -0
  147. package/dist/emails/schema.d.ts.map +1 -0
  148. package/dist/emails/schema.js +98 -0
  149. package/dist/emails/schema.js.map +1 -0
  150. package/dist/emails/service.d.ts +22 -0
  151. package/dist/emails/service.d.ts.map +1 -0
  152. package/dist/emails/service.js +337 -0
  153. package/dist/emails/service.js.map +1 -0
  154. package/dist/emails/utils.d.ts +49 -0
  155. package/dist/emails/utils.d.ts.map +1 -0
  156. package/dist/emails/utils.js +341 -0
  157. package/dist/emails/utils.js.map +1 -0
  158. package/dist/files/index.d.ts +4 -0
  159. package/dist/files/index.d.ts.map +1 -0
  160. package/dist/files/index.js +4 -0
  161. package/dist/files/index.js.map +1 -0
  162. package/dist/files/routes.d.ts +72 -0
  163. package/dist/files/routes.d.ts.map +1 -0
  164. package/dist/files/routes.js +38 -0
  165. package/dist/files/routes.js.map +1 -0
  166. package/dist/files/schema.d.ts +57 -0
  167. package/dist/files/schema.d.ts.map +1 -0
  168. package/dist/files/schema.js +39 -0
  169. package/dist/files/schema.js.map +1 -0
  170. package/dist/files/service.d.ts +27 -0
  171. package/dist/files/service.d.ts.map +1 -0
  172. package/dist/files/service.js +175 -0
  173. package/dist/files/service.js.map +1 -0
  174. package/dist/files/utils.d.ts +3 -0
  175. package/dist/files/utils.d.ts.map +1 -0
  176. package/dist/files/utils.js +63 -0
  177. package/dist/files/utils.js.map +1 -0
  178. package/dist/index.d.ts +875 -0
  179. package/dist/index.d.ts.map +1 -0
  180. package/dist/index.js +9919 -0
  181. package/dist/index.js.map +7 -0
  182. package/dist/payments/billing.d.ts +29 -0
  183. package/dist/payments/billing.d.ts.map +1 -0
  184. package/dist/payments/billing.js +378 -0
  185. package/dist/payments/billing.js.map +1 -0
  186. package/dist/payments/index.d.ts +4 -0
  187. package/dist/payments/index.d.ts.map +1 -0
  188. package/dist/payments/index.js +4 -0
  189. package/dist/payments/index.js.map +1 -0
  190. package/dist/payments/routes.d.ts +340 -0
  191. package/dist/payments/routes.d.ts.map +1 -0
  192. package/dist/payments/routes.js +56 -0
  193. package/dist/payments/routes.js.map +1 -0
  194. package/dist/payments/schema.d.ts +412 -0
  195. package/dist/payments/schema.d.ts.map +1 -0
  196. package/dist/payments/schema.js +260 -0
  197. package/dist/payments/schema.js.map +1 -0
  198. package/dist/payments/service.d.ts +31 -0
  199. package/dist/payments/service.d.ts.map +1 -0
  200. package/dist/payments/service.js +322 -0
  201. package/dist/payments/service.js.map +1 -0
  202. package/dist/payments/utils.d.ts +61 -0
  203. package/dist/payments/utils.d.ts.map +1 -0
  204. package/dist/payments/utils.js +369 -0
  205. package/dist/payments/utils.js.map +1 -0
  206. package/dist/router/guard.d.ts +19 -0
  207. package/dist/router/guard.d.ts.map +1 -0
  208. package/dist/router/guard.js +243 -0
  209. package/dist/router/guard.js.map +1 -0
  210. package/dist/router/index.d.ts +3 -0
  211. package/dist/router/index.d.ts.map +1 -0
  212. package/dist/router/index.js +3 -0
  213. package/dist/router/index.js.map +1 -0
  214. package/dist/router/schema.d.ts +103 -0
  215. package/dist/router/schema.d.ts.map +1 -0
  216. package/dist/router/schema.js +282 -0
  217. package/dist/router/schema.js.map +1 -0
  218. package/dist/router/service.d.ts +25 -0
  219. package/dist/router/service.d.ts.map +1 -0
  220. package/dist/router/service.js +339 -0
  221. package/dist/router/service.js.map +1 -0
  222. package/dist/tasks/index.d.ts +4 -0
  223. package/dist/tasks/index.d.ts.map +1 -0
  224. package/dist/tasks/index.js +4 -0
  225. package/dist/tasks/index.js.map +1 -0
  226. package/dist/tasks/routes.d.ts +54 -0
  227. package/dist/tasks/routes.d.ts.map +1 -0
  228. package/dist/tasks/routes.js +195 -0
  229. package/dist/tasks/routes.js.map +1 -0
  230. package/dist/tasks/schema.d.ts +261 -0
  231. package/dist/tasks/schema.d.ts.map +1 -0
  232. package/dist/tasks/schema.js +35 -0
  233. package/dist/tasks/schema.js.map +1 -0
  234. package/dist/tasks/service.d.ts +32 -0
  235. package/dist/tasks/service.d.ts.map +1 -0
  236. package/dist/tasks/service.js +201 -0
  237. package/dist/tasks/service.js.map +1 -0
  238. package/dist/tasks/steps.d.ts +18 -0
  239. package/dist/tasks/steps.d.ts.map +1 -0
  240. package/dist/tasks/steps.js +365 -0
  241. package/dist/tasks/steps.js.map +1 -0
  242. package/dist/tasks/utils.d.ts +75 -0
  243. package/dist/tasks/utils.d.ts.map +1 -0
  244. package/dist/tasks/utils.js +311 -0
  245. package/dist/tasks/utils.js.map +1 -0
  246. package/dist/tasks/watcher.d.ts +13 -0
  247. package/dist/tasks/watcher.d.ts.map +1 -0
  248. package/dist/tasks/watcher.js +255 -0
  249. package/dist/tasks/watcher.js.map +1 -0
  250. package/dist/tasks/worker.d.ts +28 -0
  251. package/dist/tasks/worker.d.ts.map +1 -0
  252. package/dist/tasks/worker.js +326 -0
  253. package/dist/tasks/worker.js.map +1 -0
  254. package/dist/utils/index.d.ts +3 -0
  255. package/dist/utils/index.d.ts.map +1 -0
  256. package/dist/utils/index.js +3 -0
  257. package/dist/utils/index.js.map +1 -0
  258. package/dist/utils/schema.d.ts +79 -0
  259. package/dist/utils/schema.d.ts.map +1 -0
  260. package/dist/utils/schema.js +41 -0
  261. package/dist/utils/schema.js.map +1 -0
  262. package/dist/utils/service.d.ts +32 -0
  263. package/dist/utils/service.d.ts.map +1 -0
  264. package/dist/utils/service.js +384 -0
  265. package/dist/utils/service.js.map +1 -0
  266. package/docs/SDK_SPEC.md +1645 -0
  267. package/infra/firestore.base.indexes.json +138 -0
  268. package/infra/firestore.base.rules +152 -0
  269. package/infra/storage.base.rules +8 -0
  270. package/package.json +58 -13
  271. package/src/ai/index.ts +2 -0
  272. package/src/ai/schema.ts +64 -0
  273. package/src/ai/service.ts +317 -0
  274. package/src/ai/utils.ts +38 -0
  275. package/src/attachments/index.ts +3 -0
  276. package/src/attachments/routes.ts +28 -0
  277. package/src/attachments/schema.ts +45 -0
  278. package/src/attachments/service.ts +315 -0
  279. package/src/attachments/utils.ts +115 -0
  280. package/src/auth/index.ts +3 -0
  281. package/src/auth/oidc.ts +419 -0
  282. package/src/auth/recovery.ts +365 -0
  283. package/src/auth/routes.ts +142 -0
  284. package/src/auth/schema.ts +181 -0
  285. package/src/auth/service.ts +183 -0
  286. package/src/auth/session.ts +414 -0
  287. package/src/auth/utils.ts +106 -0
  288. package/src/chat/context.ts +310 -0
  289. package/src/chat/index.ts +3 -0
  290. package/src/chat/routes.ts +264 -0
  291. package/src/chat/schema.ts +295 -0
  292. package/src/chat/service.ts +360 -0
  293. package/src/chat/stream.ts +481 -0
  294. package/src/chat/utils.ts +370 -0
  295. package/src/cli/builder.ts +93 -0
  296. package/src/cli/deployer.ts +184 -0
  297. package/src/cli/dev-server.ts +77 -0
  298. package/src/cli/env.ts +89 -0
  299. package/src/cli/init.ts +121 -0
  300. package/src/config.ts +447 -0
  301. package/src/db/index.ts +2 -0
  302. package/src/db/schema.ts +409 -0
  303. package/src/db/service.ts +477 -0
  304. package/src/db/utils.ts +250 -0
  305. package/src/emails/index.ts +3 -0
  306. package/src/emails/routes.ts +64 -0
  307. package/src/emails/schema.ts +239 -0
  308. package/src/emails/service.ts +488 -0
  309. package/src/emails/utils.ts +449 -0
  310. package/src/files/index.ts +3 -0
  311. package/src/files/routes.ts +44 -0
  312. package/src/files/schema.ts +76 -0
  313. package/src/files/service.ts +238 -0
  314. package/src/files/utils.ts +77 -0
  315. package/src/index.ts +425 -0
  316. package/src/payments/billing.ts +488 -0
  317. package/src/payments/index.ts +3 -0
  318. package/src/payments/routes.ts +92 -0
  319. package/src/payments/schema.ts +401 -0
  320. package/src/payments/service.ts +445 -0
  321. package/src/payments/utils.ts +472 -0
  322. package/src/router/guard.ts +319 -0
  323. package/src/router/index.ts +2 -0
  324. package/src/router/schema.ts +458 -0
  325. package/src/router/service.ts +453 -0
  326. package/src/tasks/index.ts +11 -0
  327. package/src/tasks/routes.ts +230 -0
  328. package/src/tasks/schema.ts +310 -0
  329. package/src/tasks/service.ts +254 -0
  330. package/src/tasks/steps.ts +472 -0
  331. package/src/tasks/utils.ts +445 -0
  332. package/src/tasks/watcher.ts +307 -0
  333. package/src/tasks/worker.ts +461 -0
  334. package/src/utils/index.ts +2 -0
  335. package/src/utils/schema.ts +69 -0
  336. package/src/utils/service.ts +461 -0
  337. package/tests/e2e.test.ts +2531 -0
  338. package/tsconfig.base.json +12 -0
  339. package/README.md +0 -2
  340. package/index.d.ts +0 -1
  341. package/index.js +0 -1
@@ -0,0 +1,339 @@
1
+ import { getRequestListener } from '@hono/node-server';
2
+ import { defineSecret } from 'firebase-functions/params';
3
+ import { onRequest } from 'firebase-functions/v2/https';
4
+ import { onTaskDispatched } from 'firebase-functions/v2/tasks';
5
+ import { Hono } from 'hono';
6
+ import { bodyLimit } from 'hono/body-limit';
7
+ import { cors } from 'hono/cors';
8
+ import { z } from 'zod';
9
+ import { coreAttachmentsRoutes, getRegisteredAttachmentTypes, registerAttachmentTypes } from '../attachments';
10
+ import { coreAuthRoutes } from '../auth';
11
+ import { coreChatRoutes, mcpRoute } from '../chat';
12
+ import { CORE_CONFIG, SECRET_NAMES } from '../config';
13
+ import { registerCollections } from '../db';
14
+ import { coreEmailRoutes, registerEmailTemplates } from '../emails';
15
+ import { coreFilesRoutes } from '../files';
16
+ import { Core } from '../index';
17
+ import { corePaymentRoutes, registerPlans, registerProducts } from '../payments';
18
+ import { buildHealthRoute, buildRoutesListRoute, buildTaskCancelRoute, buildTaskSignalRoute, buildTaskStatusRoute, TaskWaitDetachedSignal } from '../tasks';
19
+ import { isRespondAsyncPreferred, mergeCoreAndDomainRoutes, RouterGuardEngine } from './guard';
20
+ export class RouterService {
21
+ #core;
22
+ #guard;
23
+ constructor(coreClient) {
24
+ this.#core = coreClient;
25
+ this.#guard = new RouterGuardEngine(coreClient);
26
+ }
27
+ applyRateLimit = (...args) => this.#guard.applyRateLimit(...args);
28
+ authenticateRequest = (...args) => this.#guard.authenticateRequest(...args);
29
+ #createCloudFunctions = (app, devApp, workflowRegistry) => {
30
+ const emailProvider = CORE_CONFIG.emails.provider;
31
+ const paymentProvider = CORE_CONFIG.payments.provider;
32
+ const emailSecrets = [
33
+ ...(emailProvider === 'resend' ? ['RESEND_API_KEY', 'EMAIL_WEBHOOK_SECRET'] : []),
34
+ ...(emailProvider === 'sendgrid' ? ['SENDGRID_API_KEY', 'EMAIL_WEBHOOK_SECRET'] : [])
35
+ ];
36
+ const paymentSecrets = [
37
+ ...(paymentProvider === 'stripe' ? ['STRIPE_API_KEY', 'STRIPE_WEBHOOK_SECRET', 'STRIPE_SANDBOX_API_KEY', 'STRIPE_SANDBOX_WEBHOOK_SECRET'] : []),
38
+ ...(paymentProvider === 'dodo' ? ['DODO_API_KEY', 'DODO_WEBHOOK_SECRET', 'DODO_SANDBOX_API_KEY', 'DODO_SANDBOX_WEBHOOK_SECRET'] : [])
39
+ ];
40
+ const secretNames = [...new Set([...SECRET_NAMES, ...emailSecrets, ...paymentSecrets, ...CORE_CONFIG.secrets])];
41
+ const sharedOpts = {
42
+ region: CORE_CONFIG.region,
43
+ memory: CORE_CONFIG.cloudRun.memory,
44
+ cpu: CORE_CONFIG.cloudRun.cpu,
45
+ secrets: secretNames.map((name) => defineSecret(name))
46
+ };
47
+ const httpOpts = { ...sharedOpts, ...CORE_CONFIG.cloudRun.http };
48
+ const workerOpts = { ...sharedOpts, ...CORE_CONFIG.cloudRun.worker };
49
+ const httpHandler = onRequest(httpOpts, getRequestListener((req) => app.fetch(req)));
50
+ const devHttpHandler = onRequest(httpOpts, getRequestListener((req) => devApp.fetch(req)));
51
+ const workerConfig = {
52
+ ...workerOpts,
53
+ invoker: [CORE_CONFIG.serviceAccount, CORE_CONFIG.computeAccount],
54
+ retryConfig: { maxAttempts: CORE_CONFIG.tasks.maxAttempts, minBackoffSeconds: 2, maxBackoffSeconds: 20 },
55
+ rateLimits: { maxConcurrentDispatches: 1000, maxDispatchesPerSecond: 500 }
56
+ };
57
+ const tasksHandler = onTaskDispatched(workerConfig, async (req) => {
58
+ try {
59
+ await this.#core.internals.workflows.execute({ ...req.data, isDev: false }, workflowRegistry);
60
+ }
61
+ catch (err) {
62
+ if (!this.#core.errors.isStaleWorkerEpochError(err))
63
+ throw err;
64
+ }
65
+ });
66
+ const devTasksHandler = onTaskDispatched(workerConfig, async (req) => {
67
+ try {
68
+ await this.#core.internals.workflows.execute({ ...req.data, isDev: true }, workflowRegistry);
69
+ }
70
+ catch (err) {
71
+ if (!this.#core.errors.isStaleWorkerEpochError(err))
72
+ throw err;
73
+ }
74
+ });
75
+ const fnName = CORE_CONFIG.gcpProject;
76
+ const functions = {
77
+ [fnName]: httpHandler,
78
+ [`${fnName}-dev`]: devHttpHandler,
79
+ [`${fnName}-tasks`]: tasksHandler,
80
+ [`${fnName}-tasks-dev`]: devTasksHandler
81
+ };
82
+ return { httpHandler, devHttpHandler, tasksHandler, devTasksHandler, functions };
83
+ };
84
+ #makeCtx = (env, userId, role, mode, input, step = this.#core.internals.workflows.createStepRunner('rest'), c, params, query, rawBody) => ({
85
+ core: new Core({ env, userId, role, step }),
86
+ c: c,
87
+ env,
88
+ userId,
89
+ role,
90
+ mode,
91
+ step,
92
+ allWithRollback: this.#core.internals.workflows.allWithRollback,
93
+ input,
94
+ params: (params ?? (c ? c.req.param() : {})),
95
+ query: (query ?? (c ? c.req.query() : {})),
96
+ ...(rawBody !== undefined ? { rawBody } : {})
97
+ });
98
+ #respondAsync202 = (c, taskId) => {
99
+ if (c) {
100
+ c.header('Preference-Applied', 'respond-async');
101
+ c.header('Location', `/api/tasks/${taskId}`);
102
+ return c.json({ taskId, status: 'running', pollUrl: `/api/tasks/${taskId}` }, 202);
103
+ }
104
+ return { taskId, status: 'running', pollUrl: `/api/tasks/${taskId}` };
105
+ };
106
+ #executeRouteCore = async (opts) => {
107
+ const { key, wfName, cfg, mode, runTask, parseOut, env, userId, role, parsed, parsedParams, parsedQuery, rawBody, c, wait } = opts;
108
+ await this.#guard.enforceGuard(c, cfg, userId, parsed, role);
109
+ const dedupeKey = (cfg.idempotencyKey ? cfg.idempotencyKey(parsed, { userId }) : undefined) ??
110
+ (c?.req.header('idempotency-key')?.trim() || undefined);
111
+ const runWithStep = (m, fn) => {
112
+ const step = this.#core.internals.workflows.createStepRunner(m);
113
+ return this.#core.internals.context.run({ env, userId, role, step }, async () => fn(this.#makeCtx(env, userId, role, m, parsed, step, c, parsedParams, parsedQuery, rawBody)));
114
+ };
115
+ if (mode === 'rest') {
116
+ const executeRest = () => runWithStep('rest', cfg.handler);
117
+ const out = dedupeKey
118
+ ? await this.#guard.withHttpIdempotency(key, dedupeKey, userId, Boolean(env.isDev), executeRest)
119
+ : await executeRest();
120
+ return parseOut(out);
121
+ }
122
+ const cached = cfg.shortCircuit ? await runWithStep('workflow', cfg.shortCircuit) : undefined;
123
+ if (cached !== undefined && cached !== null)
124
+ return parseOut(cached);
125
+ try {
126
+ const dispatched = await this.#core.internals.workflows.dispatch(wfName, runTask, parsed, {
127
+ mode: 'workflow',
128
+ ...(cfg.timeout !== undefined ? { timeout: cfg.timeout } : {}),
129
+ ...(dedupeKey ? { dedupeKey } : {}),
130
+ wait,
131
+ ...(wait && c ? { maxWaitMs: CORE_CONFIG.limits.maxWaitMs, signal: c.req.raw?.signal } : {}),
132
+ userId,
133
+ userRole: role
134
+ });
135
+ return !wait ? this.#respondAsync202(c, dispatched.taskId) : parseOut(dispatched);
136
+ }
137
+ catch (err) {
138
+ if (err instanceof TaskWaitDetachedSignal)
139
+ return this.#respondAsync202(c, err.taskId);
140
+ throw err;
141
+ }
142
+ };
143
+ #registerRouteSpecAndTools = (key, wfName, mode, cfg, description, inputSchema, runTask, invoke, workflowRegistry, routeRegistryItems) => {
144
+ const method = (cfg.method ?? 'POST').toUpperCase();
145
+ const path = cfg.path ?? `/${key}`;
146
+ const deadlineSeconds = cfg.timeout
147
+ ? Math.max(15, Math.ceil(this.#core.errors.parseDuration(cfg.timeout, 540_000) / 1000))
148
+ : undefined;
149
+ routeRegistryItems.push({
150
+ id: key,
151
+ mode,
152
+ method,
153
+ path,
154
+ ...(mode === 'workflow' || cfg.workflowName ? { workflowName: wfName } : {}),
155
+ auth: cfg.auth ?? 'user',
156
+ description,
157
+ mcp: cfg.mcp === true,
158
+ tool: cfg.tool !== false,
159
+ ...(cfg.input ? { input: cfg.input } : {}),
160
+ ...(cfg.output ? { output: cfg.output } : {}),
161
+ ...(cfg.guard ? { guard: cfg.guard } : {})
162
+ });
163
+ if (mode === 'workflow' || cfg.workflowName) {
164
+ workflowRegistry[wfName] = {
165
+ name: wfName,
166
+ description,
167
+ input: inputSchema,
168
+ output: cfg.output,
169
+ mode,
170
+ ...(deadlineSeconds !== undefined ? { deadlineSeconds } : {}),
171
+ guard: cfg.guard,
172
+ runTask,
173
+ invoke
174
+ };
175
+ }
176
+ if (cfg.tool !== false || cfg.mcp === true || mode === 'workflow' || cfg.workflowName) {
177
+ const registerToolUnder = (toolName, mcp, tool) => this.#core.internals.registry.registerWorkflowTool(toolName, {
178
+ description,
179
+ input: inputSchema,
180
+ mcp,
181
+ tool,
182
+ execute: (inp, u) => invoke(inp, u)
183
+ });
184
+ registerToolUnder(wfName, cfg.mcp === true, cfg.tool !== false);
185
+ if (key !== wfName && cfg.tool !== false)
186
+ registerToolUnder(key, false, true);
187
+ }
188
+ };
189
+ #buildRouteInvoker = (key, cfg, workflowRegistry, routeRegistryItems) => {
190
+ const mode = cfg.mode ?? 'rest';
191
+ const wfName = cfg.workflowName ?? key;
192
+ const inputSchema = (cfg.input ?? z.object({}));
193
+ const description = cfg.description ?? wfName;
194
+ const parseOut = (out) => (out instanceof Response ? out : cfg.output ? cfg.output.parse(out) : out);
195
+ const runTask = async (taskInput, step) => {
196
+ const current = new Core();
197
+ const uid = current.userId || CORE_CONFIG.auth.adminUserId;
198
+ return cfg.handler(this.#makeCtx(current.env, uid, current.role, mode, taskInput, step));
199
+ };
200
+ const invoke = async (rawInput, userId, c, explicitRole, opts) => {
201
+ const env = c?.env ?? this.#core.env;
202
+ const authLevel = cfg.auth ?? 'user';
203
+ const role = this.#core.internals.auth.resolveUserRole(userId, explicitRole ?? c?.get('userRole'));
204
+ if (authLevel !== 'public' && authLevel !== 'none' && authLevel !== false && !userId) {
205
+ return this.#core.errors.httpError(401, 'Unauthorized', 'UNAUTHORIZED');
206
+ }
207
+ if ((authLevel === 'admin' || authLevel === 'api-key') && role !== 'admin' && userId !== CORE_CONFIG.auth.adminUserId) {
208
+ return this.#core.errors.httpError(403, 'Forbidden', 'FORBIDDEN');
209
+ }
210
+ const parsedParams = cfg.params && c ? cfg.params.parse(c.req.param()) : c?.req.param() ?? {};
211
+ const parsedQuery = cfg.query && c ? cfg.query.parse(c.req.query()) : c?.req.query() ?? {};
212
+ const parsed = cfg.input ? cfg.input.parse(rawInput ?? {}) : rawInput;
213
+ return this.#core.internals.context.run({ env, userId, role }, () => this.#executeRouteCore({ key, wfName, cfg, mode, runTask, parseOut, env, userId, role, parsed, parsedParams, parsedQuery, rawBody: opts?.rawBody, c, wait: opts?.wait !== false }));
214
+ };
215
+ this.#registerRouteSpecAndTools(key, wfName, mode, cfg, description, inputSchema, runTask, invoke, workflowRegistry, routeRegistryItems);
216
+ return invoke;
217
+ };
218
+ #mountRoute = (app, cfg, invoke) => {
219
+ const method = (cfg.method ?? 'POST').toLowerCase();
220
+ const routePath = cfg.path ?? '/';
221
+ app[method](routePath, async (c) => {
222
+ const userId = await this.authenticateRequest(c, cfg);
223
+ const role = this.#core.internals.auth.resolveUserRole(userId, c.get('userRole'));
224
+ let rawInput;
225
+ let rawText;
226
+ if (cfg.rawBody && method !== 'get') {
227
+ rawText = await c.req.text().catch(() => '');
228
+ if (cfg.input) {
229
+ try {
230
+ rawInput = rawText ? JSON.parse(rawText) : {};
231
+ }
232
+ catch {
233
+ rawInput = {};
234
+ }
235
+ }
236
+ else {
237
+ rawInput = rawText;
238
+ }
239
+ }
240
+ else if (cfg.input && method !== 'get') {
241
+ rawInput = await c.req.json().catch(() => ({}));
242
+ }
243
+ const wait = !(cfg.mode === 'workflow' && isRespondAsyncPreferred(c));
244
+ const out = await invoke(rawInput, userId, c, role, {
245
+ wait,
246
+ ...(rawText !== undefined ? { rawBody: rawText } : {})
247
+ });
248
+ return out instanceof Response ? out : c.json(out);
249
+ });
250
+ };
251
+ #createHonoApp = (isDev, allRoutes, routeInvokers) => {
252
+ const app = new Hono().basePath('/api');
253
+ app.use('*', cors({
254
+ origin: (origin, c) => {
255
+ if (!origin)
256
+ return undefined;
257
+ if (CORE_CONFIG.auth.allowedOrigins.some((p) => typeof p === 'string' ? p === origin : p.test(origin))) {
258
+ return origin;
259
+ }
260
+ try {
261
+ if (origin === new URL(c.req.url).origin)
262
+ return origin;
263
+ }
264
+ catch { }
265
+ return null;
266
+ },
267
+ credentials: true
268
+ }));
269
+ app.use('*', bodyLimit({
270
+ maxSize: CORE_CONFIG.limits.maxBodyBytes,
271
+ onError: () => this.#core.errors.httpError(413, 'Payload too large (max 25MiB)', 'PAYLOAD_TOO_LARGE')
272
+ }));
273
+ app.onError((err) => this.#core.errors.toHttpError(err).getResponse());
274
+ app.use('*', async (c, next) => {
275
+ const env = { ...this.#core.env, ...(c.env ?? {}), isDev };
276
+ c.env = env;
277
+ await this.#core.internals.context.run({ env, userId: CORE_CONFIG.auth.adminUserId, role: 'admin' }, () => next());
278
+ });
279
+ for (const r of Object.values(allRoutes))
280
+ this.#mountRoute(app, r, routeInvokers.get(r));
281
+ app.all('/mcp', async (c) => {
282
+ const userId = await this.authenticateRequest(c, { path: '/mcp', auth: 'user' });
283
+ return mcpRoute(c.req.raw, userId, this.#core.internals.context.getMcpTools());
284
+ });
285
+ return app;
286
+ };
287
+ createApp = (init = {}) => {
288
+ if (init.emailTemplates)
289
+ registerEmailTemplates(init.emailTemplates, true);
290
+ if (init.plans)
291
+ registerPlans(init.plans, true);
292
+ if (init.products)
293
+ registerProducts(init.products, true);
294
+ registerCollections(init.collections ?? {}, true);
295
+ this.#core.internals.registry.registerAgents(init.agents ?? {}, true);
296
+ if (init.attachmentTypes)
297
+ registerAttachmentTypes(init.attachmentTypes);
298
+ this.#core.internals.registry.registerContextCatalog(init.context ?? [], true);
299
+ this.#core.internals.registry.clearWorkflowTools();
300
+ const overrides = init.coreRouteOverrides ?? {};
301
+ const workflowRegistry = {};
302
+ const routeRegistryItems = [];
303
+ const attachmentTypesDesc = Object.entries(getRegisteredAttachmentTypes())
304
+ .map(([k, v]) => `${k} (${v.description})`)
305
+ .join('; ');
306
+ const rawCoreRoutes = {
307
+ health: buildHealthRoute(),
308
+ ...coreAuthRoutes,
309
+ ...coreFilesRoutes,
310
+ ...coreChatRoutes,
311
+ ...coreAttachmentsRoutes,
312
+ ...coreEmailRoutes,
313
+ ...corePaymentRoutes,
314
+ 'routes.list': buildRoutesListRoute(() => routeRegistryItems),
315
+ 'tasks.status': buildTaskStatusRoute(),
316
+ 'tasks.signal': buildTaskSignalRoute(),
317
+ 'tasks.cancel': buildTaskCancelRoute()
318
+ };
319
+ const allRoutes = mergeCoreAndDomainRoutes(rawCoreRoutes, overrides, attachmentTypesDesc, init.routes ?? {});
320
+ const routeInvokers = new Map();
321
+ for (const [id, r] of Object.entries(allRoutes)) {
322
+ routeInvokers.set(r, this.#buildRouteInvoker(id, r, workflowRegistry, routeRegistryItems));
323
+ }
324
+ this.#core.internals.workflows.registerRuntime(workflowRegistry);
325
+ const createApp = (isDev = false) => this.#createHonoApp(isDev, allRoutes, routeInvokers);
326
+ const app = createApp(false);
327
+ const devApp = createApp(true);
328
+ const cloudFunctions = this.#createCloudFunctions(app, devApp, workflowRegistry);
329
+ return {
330
+ createApp,
331
+ app,
332
+ devApp,
333
+ workflowRegistry,
334
+ agents: this.#core.internals.registry.getRegisteredAgents(),
335
+ ...cloudFunctions
336
+ };
337
+ };
338
+ }
339
+ //# sourceMappingURL=service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/router/service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export * from './schema';
2
+ export { TasksService } from './service';
3
+ export { buildHealthRoute, buildRoutesIntrospection, buildRoutesListRoute, buildTaskCancelRoute, buildTaskSignalRoute, buildTaskStatusRoute, renderApiContractMarkdown } from './routes';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tasks/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAA;AACxB,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AACxC,OAAO,EACL,gBAAgB,EAChB,wBAAwB,EACxB,oBAAoB,EACpB,oBAAoB,EACpB,oBAAoB,EACpB,oBAAoB,EACpB,yBAAyB,EAC1B,MAAM,UAAU,CAAA"}
@@ -0,0 +1,4 @@
1
+ export * from './schema';
2
+ export { TasksService } from './service';
3
+ export { buildHealthRoute, buildRoutesIntrospection, buildRoutesListRoute, buildTaskCancelRoute, buildTaskSignalRoute, buildTaskStatusRoute, renderApiContractMarkdown } from './routes';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tasks/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAA;AACxB,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AACxC,OAAO,EACL,gBAAgB,EAChB,wBAAwB,EACxB,oBAAoB,EACpB,oBAAoB,EACpB,oBAAoB,EACpB,oBAAoB,EACpB,yBAAyB,EAC1B,MAAM,UAAU,CAAA"}
@@ -0,0 +1,54 @@
1
+ import type { Context } from 'hono';
2
+ import type { z } from 'zod';
3
+ import { type AppEnv } from '../config';
4
+ import { signalTaskBody, type RouteIntrospectionItem, type RouteRegistryItem, type RoutesIntrospectionResponse } from './schema';
5
+ import { zodToJsonSchemaSafe } from './utils';
6
+ export { signalTaskBody, zodToJsonSchemaSafe, type RouteIntrospectionItem, type RouteRegistryItem, type RoutesIntrospectionResponse };
7
+ export declare const buildRoutesIntrospection: (routeItems: RouteRegistryItem[], scope?: 'all' | 'custom' | 'core') => RoutesIntrospectionResponse;
8
+ export declare const renderApiContractMarkdown: (meta: RoutesIntrospectionResponse) => string;
9
+ export declare const buildHealthRoute: () => {
10
+ mode: 'rest';
11
+ handler: () => Promise<{
12
+ ok: boolean;
13
+ status: 'healthy';
14
+ service: string;
15
+ env: "dev" | "prod";
16
+ timestamp: string;
17
+ }>;
18
+ };
19
+ export declare const buildRoutesListRoute: (routeItems: () => RouteRegistryItem[]) => {
20
+ mode: 'rest';
21
+ handler: ({ c }: {
22
+ c: Context<AppEnv>;
23
+ }) => Promise<Response | RoutesIntrospectionResponse>;
24
+ };
25
+ export declare const buildTaskStatusRoute: () => {
26
+ mode: 'rest';
27
+ handler: ({ c }: {
28
+ c: Context<AppEnv>;
29
+ }) => Promise<unknown>;
30
+ };
31
+ export declare const buildTaskSignalRoute: () => {
32
+ mode: 'rest';
33
+ input: z.ZodObject<{
34
+ signal: z.ZodString;
35
+ payload: z.ZodOptional<z.ZodUnknown>;
36
+ }, z.core.$strip>;
37
+ handler: ({ c, input }: {
38
+ c: Context<AppEnv>;
39
+ input: z.infer<typeof signalTaskBody>;
40
+ }) => Promise<{
41
+ taskId: string;
42
+ signaled: true;
43
+ }>;
44
+ };
45
+ export declare const buildTaskCancelRoute: () => {
46
+ mode: 'rest';
47
+ handler: ({ c }: {
48
+ c: Context<AppEnv>;
49
+ }) => Promise<{
50
+ taskId: string;
51
+ status: 'cancelled';
52
+ }>;
53
+ };
54
+ //# sourceMappingURL=routes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../src/tasks/routes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AACnC,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAC5B,OAAO,EAAe,KAAK,MAAM,EAAE,MAAM,WAAW,CAAA;AAIpD,OAAO,EACL,cAAc,EACd,KAAK,sBAAsB,EAC3B,KAAK,iBAAiB,EACtB,KAAK,2BAA2B,EACjC,MAAM,UAAU,CAAA;AACjB,OAAO,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAA;AAE7C,OAAO,EACL,cAAc,EACd,mBAAmB,EACnB,KAAK,sBAAsB,EAC3B,KAAK,iBAAiB,EACtB,KAAK,2BAA2B,EACjC,CAAA;AAeD,eAAO,MAAM,wBAAwB,eACvB,iBAAiB,EAAE,UACxB,KAAK,GAAG,QAAQ,GAAG,MAAM,KAC/B,2BAsCF,CAAA;AAED,eAAO,MAAM,yBAAyB,SAAU,2BAA2B,KAAG,MAqE7E,CAAA;AAED,eAAO,MAAM,gBAAgB;IAC3B,IAAI,EAAE,MAAM;IACZ,OAAO;;gBAEG,SAAS;;;;;CAKnB,CAAA;AAEF,eAAO,MAAM,oBAAoB,eAAgB,MAAM,iBAAiB,EAAE;IACxE,IAAI,EAAE,MAAM;IACZ,OAAO,UAAgB;QAAE,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAA;KAAE;CAgB7C,CAAA;AAEF,eAAO,MAAM,oBAAoB;IAC/B,IAAI,EAAE,MAAM;IACZ,OAAO,UAAgB;QAAE,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAA;KAAE;CA8B7C,CAAA;AAEF,eAAO,MAAM,oBAAoB;IAC/B,IAAI,EAAE,MAAM;IACZ,KAAK;;;;IACL,OAAO,iBAAuB;QAAE,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAA;KAAE;;;;CAI3F,CAAA;AAEF,eAAO,MAAM,oBAAoB;IAC/B,IAAI,EAAE,MAAM;IACZ,OAAO,UAAgB;QAAE,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAA;KAAE;;;;CAI7C,CAAA"}
@@ -0,0 +1,195 @@
1
+ import { CORE_CONFIG } from '../config';
2
+ import { collectionRegistry, getEffectiveRbac } from '../db';
3
+ import { core } from '../index';
4
+ import { CORE_ROUTE_DEFAULTS } from '../router';
5
+ import { signalTaskBody } from './schema';
6
+ import { zodToJsonSchemaSafe } from './utils';
7
+ export { signalTaskBody, zodToJsonSchemaSafe };
8
+ const summarizeGuards = (g) => {
9
+ if (!g)
10
+ return [];
11
+ const guards = [];
12
+ if (g.checkFileRef)
13
+ guards.push('checkFileRef');
14
+ if (g.checkUserId)
15
+ guards.push('checkUserId');
16
+ if (g.checkCollectionField) {
17
+ guards.push(`checkCollectionField:${g.checkCollectionField.collection}.${g.checkCollectionField.param}`);
18
+ }
19
+ if (g.requireEmailVerified)
20
+ guards.push('requireEmailVerified');
21
+ if (g.custom)
22
+ guards.push('custom');
23
+ return guards;
24
+ };
25
+ export const buildRoutesIntrospection = (routeItems, scope = 'all') => {
26
+ const filtered = routeItems.filter((r) => {
27
+ const isCore = r.id in CORE_ROUTE_DEFAULTS;
28
+ if (scope === 'core')
29
+ return isCore;
30
+ if (scope === 'custom')
31
+ return !isCore;
32
+ return true;
33
+ });
34
+ const routes = filtered.map((r) => ({
35
+ id: r.id,
36
+ method: r.method,
37
+ path: `/api${r.path}`,
38
+ mode: r.mode,
39
+ ...(r.workflowName ? { workflowName: r.workflowName } : {}),
40
+ auth: r.auth ?? 'user',
41
+ description: r.description,
42
+ mcp: Boolean(r.mcp),
43
+ tool: r.tool !== false,
44
+ guards: summarizeGuards(r.guard),
45
+ inputSchema: zodToJsonSchemaSafe(r.input),
46
+ outputSchema: zodToJsonSchemaSafe(r.output)
47
+ }));
48
+ const collections = {};
49
+ for (const [name, def] of collectionRegistry) {
50
+ collections[name] = {
51
+ relationType: def.userRelation?.type ?? '1:N',
52
+ rbac: getEffectiveRbac(name),
53
+ schema: zodToJsonSchemaSafe(def.schema)
54
+ };
55
+ }
56
+ return {
57
+ appName: CORE_CONFIG.appName,
58
+ generatedAt: new Date().toISOString(),
59
+ routes,
60
+ collections
61
+ };
62
+ };
63
+ export const renderApiContractMarkdown = (meta) => {
64
+ const coreRoutes = meta.routes.filter((r) => r.id in CORE_ROUTE_DEFAULTS);
65
+ const domainRoutes = meta.routes.filter((r) => !(r.id in CORE_ROUTE_DEFAULTS));
66
+ const renderRouteBlock = (r) => {
67
+ const lines = [
68
+ `### ${r.method} ${r.path}`,
69
+ `- **ID:** \`${r.id}\`${r.workflowName ? ` (Workflow: \`${r.workflowName}\`)` : ''}`,
70
+ `- **Mode:** \`${r.mode}\` | **Auth:** \`${String(r.auth)}\` | **Guards:** \`${r.guards.join(', ') || 'none'}\` | **MCP:** \`${r.mcp}\` | **Tool:** \`${r.tool}\``,
71
+ `- **Description:** ${r.description}`
72
+ ];
73
+ if (r.inputSchema) {
74
+ lines.push('', '**Input JSON Schema:**', '```json', JSON.stringify(r.inputSchema, null, 2), '```');
75
+ }
76
+ if (r.outputSchema) {
77
+ lines.push('', '**Output JSON Schema:**', '```json', JSON.stringify(r.outputSchema, null, 2), '```');
78
+ }
79
+ return lines.join('\n');
80
+ };
81
+ const collectionLines = [];
82
+ for (const [name, col] of Object.entries(meta.collections ?? {})) {
83
+ collectionLines.push(`### Collection: \`${name}\``, `- **User Relation:** \`${col.relationType}\``, `- **RBAC Matrix:** \`${JSON.stringify(col.rbac ?? {})}\``, ...(col.schema ? ['', '```json', JSON.stringify(col.schema, null, 2), '```'] : []));
84
+ }
85
+ return [
86
+ `# API Contract & Schema Reference — ${meta.appName}`,
87
+ '',
88
+ `> **Generated At:** \`${meta.generatedAt}\``,
89
+ '> **Agent Instruction:** This document is deterministically generated from runtime Zod schemas and route definitions. Treat it as the single source of truth for all HTTP endpoints, payloads, authentication levels, and Firestore collection models.',
90
+ '',
91
+ '## 1. Core Protocol & Architecture Conventions',
92
+ '',
93
+ '### 1.1. Authentication & Sessions (`auth`)',
94
+ '- **`public` / `none` / `false`**: No authentication required.',
95
+ '- **`user`**: Requires `Authorization: Bearer <idToken | SDK_API_KEY>` or HTTP-only `session` cookie.',
96
+ '- **`strict`**: Requires revocation-checked session verification (`verifySessionCookie(..., true)` / `_system/auth_revocations`).',
97
+ '- **`admin`**: Requires admin role (`SDK_API_KEY` or admin user claim).',
98
+ '- **Social OAuth & Account Recovery**: Use `POST /api/auth/sign-in/social` (`google` | `apple`), `POST /api/auth/email/send-verification`, `POST /api/auth/email/verify`, `POST /api/auth/password/forgot`, `POST /api/auth/password/reset`, `POST /api/auth/recovery-email/set`, `POST /api/auth/recovery-email/verify`, `POST /api/auth/account-recovery/initiate`, and `POST /api/auth/account-recovery/complete`.',
99
+ '',
100
+ '### 1.2. Content-Addressed Files (`FileRef`)',
101
+ '- All uploaded files use content-addressed IDs formatted as `<userId>_<sha256_24>` matching `/^[A-Za-z0-9_-]{1,128}_[a-f0-9]{24}$/`.',
102
+ '- Upload files via `POST /api/files` (`multipart/form-data` field `file`) before passing `ref` or `refs` to downstream endpoints.',
103
+ '',
104
+ '### 1.3. Execution Modes (`mode: "rest"` vs `mode: "workflow"`)',
105
+ '- **`mode: "rest"`**: Synchronous `200 OK` JSON response.',
106
+ '- **`mode: "workflow"`**: Durable Cloud Tasks workflow. May return `200 OK` directly (if resolved via `shortCircuit` cache or within wait budget) **OR** `202 Accepted` (`{ taskId, status: "running", pollUrl: "/api/tasks/<taskId>" }`) when `Prefer: respond-async` / `?wait=false` is passed.',
107
+ '- Poll task progress via `GET /api/tasks/:taskId`, send signals via `POST /api/tasks/:taskId/signal`, or cancel via `DELETE /api/tasks/:taskId`.',
108
+ '',
109
+ '### 1.4. Thin-Client AI Chat Streaming (`POST /api/chats/:chatId`)',
110
+ '- Send `{ message: { id?, role: "user", content, parts?, attachments? }, agentId?, model? }` to stream SSE responses and cancel active streams via `POST /api/chats/:chatId/cancel`.',
111
+ '',
112
+ '## 2. Core Endpoints Catalog',
113
+ '',
114
+ ...coreRoutes.map(renderRouteBlock),
115
+ '',
116
+ '## 3. Domain Endpoints Catalog',
117
+ '',
118
+ ...(domainRoutes.length > 0 ? domainRoutes.map(renderRouteBlock) : ['_No custom domain routes registered._']),
119
+ '',
120
+ '## 4. Registered Firestore Collections Catalog',
121
+ '',
122
+ ...collectionLines
123
+ ].join('\n');
124
+ };
125
+ export const buildHealthRoute = () => ({
126
+ mode: 'rest',
127
+ handler: async () => ({
128
+ ok: true,
129
+ status: 'healthy',
130
+ service: CORE_CONFIG.appName,
131
+ env: core.env.isDev ? 'dev' : 'prod',
132
+ timestamp: new Date().toISOString()
133
+ })
134
+ });
135
+ export const buildRoutesListRoute = (routeItems) => ({
136
+ mode: 'rest',
137
+ handler: async ({ c }) => {
138
+ const rawScope = c?.req.query('scope');
139
+ const scope = rawScope === 'custom' || rawScope === 'core' ? rawScope : 'all';
140
+ const format = c?.req.query('format');
141
+ const accept = c?.req.header('accept') ?? '';
142
+ const meta = buildRoutesIntrospection(routeItems(), scope);
143
+ if (format === 'md' || accept.includes('text/markdown')) {
144
+ return new Response(renderApiContractMarkdown(meta), {
145
+ status: 200,
146
+ headers: { 'content-type': 'text/markdown; charset=utf-8' }
147
+ });
148
+ }
149
+ return meta;
150
+ }
151
+ });
152
+ export const buildTaskStatusRoute = () => ({
153
+ mode: 'rest',
154
+ handler: async ({ c }) => {
155
+ const taskId = c.req.param('taskId') ?? '';
156
+ const status = await core.tasks.status(taskId);
157
+ if (status.status === 'running' ||
158
+ status.status === 'sleeping' ||
159
+ status.status === 'waiting_signal' ||
160
+ status.status === 'compensating') {
161
+ return c.json({
162
+ taskId,
163
+ status: status.status,
164
+ ...(status.progress ? { progress: status.progress } : {}),
165
+ pollUrl: `/api/tasks/${taskId}`
166
+ }, 202);
167
+ }
168
+ if (status.status === 'errored') {
169
+ return core.errors.httpError(502, status.error ?? 'Workflow task failed', 'WORKFLOW_ERROR');
170
+ }
171
+ if (status.status === 'cancelled') {
172
+ return core.errors.httpError(409, status.error ?? 'Workflow task cancelled', 'TASK_CANCELLED');
173
+ }
174
+ if (c.req.query('envelope') === 'true') {
175
+ return status;
176
+ }
177
+ return status.response;
178
+ }
179
+ });
180
+ export const buildTaskSignalRoute = () => ({
181
+ mode: 'rest',
182
+ input: signalTaskBody,
183
+ handler: async ({ c, input }) => {
184
+ const taskId = c.req.param('taskId') ?? '';
185
+ return core.tasks.signal(taskId, input.signal, input.payload);
186
+ }
187
+ });
188
+ export const buildTaskCancelRoute = () => ({
189
+ mode: 'rest',
190
+ handler: async ({ c }) => {
191
+ const taskId = c.req.param('taskId') ?? '';
192
+ return core.tasks.cancel(taskId);
193
+ }
194
+ });
195
+ //# sourceMappingURL=routes.js.map