primitive-admin 1.1.0-alpha.9 → 1.1.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 (591) hide show
  1. package/README.md +523 -109
  2. package/assets/skill/skills/primitive-platform/SKILL.md +289 -0
  3. package/dist/bin/primitive.d.ts +2 -0
  4. package/dist/bin/primitive.js +372 -21
  5. package/dist/bin/primitive.js.map +1 -1
  6. package/dist/src/commands/admins.d.ts +2 -0
  7. package/dist/src/commands/admins.js +136 -30
  8. package/dist/src/commands/admins.js.map +1 -1
  9. package/dist/src/commands/analytics.d.ts +2 -0
  10. package/dist/src/commands/analytics.js +713 -55
  11. package/dist/src/commands/analytics.js.map +1 -1
  12. package/dist/src/commands/apps.d.ts +2 -0
  13. package/dist/src/commands/apps.js +65 -100
  14. package/dist/src/commands/apps.js.map +1 -1
  15. package/dist/src/commands/auth-sessions.d.ts +7 -0
  16. package/dist/src/commands/auth-sessions.js +144 -0
  17. package/dist/src/commands/auth-sessions.js.map +1 -0
  18. package/dist/src/commands/auth.d.ts +2 -0
  19. package/dist/src/commands/auth.js +238 -108
  20. package/dist/src/commands/auth.js.map +1 -1
  21. package/dist/src/commands/blob-buckets.d.ts +2 -0
  22. package/dist/src/commands/blob-buckets.js +331 -0
  23. package/dist/src/commands/blob-buckets.js.map +1 -0
  24. package/dist/src/commands/catalog.d.ts +2 -0
  25. package/dist/src/commands/catalog.js +63 -48
  26. package/dist/src/commands/catalog.js.map +1 -1
  27. package/dist/src/commands/collection-type-configs.d.ts +2 -0
  28. package/dist/src/commands/collection-type-configs.js +85 -0
  29. package/dist/src/commands/collection-type-configs.js.map +1 -0
  30. package/dist/src/commands/collections.d.ts +2 -0
  31. package/dist/src/commands/collections.js +1282 -0
  32. package/dist/src/commands/collections.js.map +1 -0
  33. package/dist/src/commands/comparisons.d.ts +2 -0
  34. package/dist/src/commands/comparisons.js +6 -6
  35. package/dist/src/commands/comparisons.js.map +1 -1
  36. package/dist/src/commands/config.d.ts +46 -0
  37. package/dist/src/commands/config.js +465 -0
  38. package/dist/src/commands/config.js.map +1 -0
  39. package/dist/src/commands/connections.d.ts +2 -0
  40. package/dist/src/commands/connections.js +99 -0
  41. package/dist/src/commands/connections.js.map +1 -0
  42. package/dist/src/commands/cron-triggers.d.ts +2 -0
  43. package/dist/src/commands/cron-triggers.js +266 -0
  44. package/dist/src/commands/cron-triggers.js.map +1 -0
  45. package/dist/src/commands/database-type-configs.d.ts +2 -0
  46. package/dist/src/commands/database-type-configs.js +164 -0
  47. package/dist/src/commands/database-type-configs.js.map +1 -0
  48. package/dist/src/commands/database-types.d.ts +2 -0
  49. package/dist/src/commands/database-types.js +471 -0
  50. package/dist/src/commands/database-types.js.map +1 -0
  51. package/dist/src/commands/databases.d.ts +65 -0
  52. package/dist/src/commands/databases.js +1887 -243
  53. package/dist/src/commands/databases.js.map +1 -1
  54. package/dist/src/commands/documents.d.ts +60 -0
  55. package/dist/src/commands/documents.js +2888 -22
  56. package/dist/src/commands/documents.js.map +1 -1
  57. package/dist/src/commands/email-templates.d.ts +2 -0
  58. package/dist/src/commands/email-templates.js +175 -0
  59. package/dist/src/commands/email-templates.js.map +1 -0
  60. package/dist/src/commands/env.d.ts +23 -0
  61. package/dist/src/commands/env.js +395 -0
  62. package/dist/src/commands/env.js.map +1 -0
  63. package/dist/src/commands/feature-flags.d.ts +14 -0
  64. package/dist/src/commands/feature-flags.js +117 -0
  65. package/dist/src/commands/feature-flags.js.map +1 -0
  66. package/dist/src/commands/functions.d.ts +20 -0
  67. package/dist/src/commands/functions.js +1630 -0
  68. package/dist/src/commands/functions.js.map +1 -0
  69. package/dist/src/commands/group-type-configs.d.ts +2 -0
  70. package/dist/src/commands/group-type-configs.js +87 -0
  71. package/dist/src/commands/group-type-configs.js.map +1 -0
  72. package/dist/src/commands/groups.d.ts +2 -0
  73. package/dist/src/commands/groups.js +65 -113
  74. package/dist/src/commands/groups.js.map +1 -1
  75. package/dist/src/commands/guides.d.ts +223 -0
  76. package/dist/src/commands/guides.js +627 -69
  77. package/dist/src/commands/guides.js.map +1 -1
  78. package/dist/src/commands/init.d.ts +37 -0
  79. package/dist/src/commands/init.js +1693 -208
  80. package/dist/src/commands/init.js.map +1 -1
  81. package/dist/src/commands/integrations.d.ts +2 -0
  82. package/dist/src/commands/integrations.js +428 -187
  83. package/dist/src/commands/integrations.js.map +1 -1
  84. package/dist/src/commands/llm.d.ts +2 -0
  85. package/dist/src/commands/llm.js +4 -2
  86. package/dist/src/commands/llm.js.map +1 -1
  87. package/dist/src/commands/locks.d.ts +8 -0
  88. package/dist/src/commands/locks.js +175 -0
  89. package/dist/src/commands/locks.js.map +1 -0
  90. package/dist/src/commands/metadata-category-configs.d.ts +12 -0
  91. package/dist/src/commands/metadata-category-configs.js +113 -0
  92. package/dist/src/commands/metadata-category-configs.js.map +1 -0
  93. package/dist/src/commands/metadata.d.ts +2 -0
  94. package/dist/src/commands/metadata.js +288 -0
  95. package/dist/src/commands/metadata.js.map +1 -0
  96. package/dist/src/commands/prompts.d.ts +2 -0
  97. package/dist/src/commands/prompts.js +322 -634
  98. package/dist/src/commands/prompts.js.map +1 -1
  99. package/dist/src/commands/rule-sets.d.ts +3 -0
  100. package/dist/src/commands/rule-sets.js +139 -148
  101. package/dist/src/commands/rule-sets.js.map +1 -1
  102. package/dist/src/commands/scripts.d.ts +30 -0
  103. package/dist/src/commands/scripts.js +688 -0
  104. package/dist/src/commands/scripts.js.map +1 -0
  105. package/dist/src/commands/secrets.d.ts +2 -0
  106. package/dist/src/commands/secrets.js +109 -0
  107. package/dist/src/commands/secrets.js.map +1 -0
  108. package/dist/src/commands/sessions.d.ts +2 -0
  109. package/dist/src/commands/sessions.js +76 -0
  110. package/dist/src/commands/sessions.js.map +1 -0
  111. package/dist/src/commands/skill.d.ts +2 -0
  112. package/dist/src/commands/skill.js +29 -0
  113. package/dist/src/commands/skill.js.map +1 -0
  114. package/dist/src/commands/sync-app-settings.d.ts +158 -0
  115. package/dist/src/commands/sync-app-settings.js +328 -0
  116. package/dist/src/commands/sync-app-settings.js.map +1 -0
  117. package/dist/src/commands/sync.d.ts +2670 -0
  118. package/dist/src/commands/sync.js +17144 -834
  119. package/dist/src/commands/sync.js.map +1 -1
  120. package/dist/src/commands/tokens.d.ts +2 -0
  121. package/dist/src/commands/tokens.js +132 -22
  122. package/dist/src/commands/tokens.js.map +1 -1
  123. package/dist/src/commands/users.d.ts +2 -0
  124. package/dist/src/commands/users.js +542 -24
  125. package/dist/src/commands/users.js.map +1 -1
  126. package/dist/src/commands/vars.d.ts +8 -0
  127. package/dist/src/commands/vars.js +97 -0
  128. package/dist/src/commands/vars.js.map +1 -0
  129. package/dist/src/commands/waitlist.d.ts +2 -0
  130. package/dist/src/commands/waitlist.js +12 -11
  131. package/dist/src/commands/waitlist.js.map +1 -1
  132. package/dist/src/commands/webhooks.d.ts +31 -0
  133. package/dist/src/commands/webhooks.js +633 -0
  134. package/dist/src/commands/webhooks.js.map +1 -0
  135. package/dist/src/commands/workflows.d.ts +88 -0
  136. package/dist/src/commands/workflows.js +1568 -742
  137. package/dist/src/commands/workflows.js.map +1 -1
  138. package/dist/src/lib/access-rule-display.d.ts +21 -0
  139. package/dist/src/lib/access-rule-display.js +34 -0
  140. package/dist/src/lib/access-rule-display.js.map +1 -0
  141. package/dist/src/lib/api-client.d.ts +2550 -0
  142. package/dist/src/lib/api-client.js +2503 -160
  143. package/dist/src/lib/api-client.js.map +1 -1
  144. package/dist/src/lib/app-settings-descriptor.d.ts +263 -0
  145. package/dist/src/lib/app-settings-descriptor.js +583 -0
  146. package/dist/src/lib/app-settings-descriptor.js.map +1 -0
  147. package/dist/src/lib/auth-flow.d.ts +8 -0
  148. package/dist/src/lib/batch.d.ts +26 -0
  149. package/dist/src/lib/batch.js +32 -0
  150. package/dist/src/lib/batch.js.map +1 -0
  151. package/dist/src/lib/block-layout.d.ts +160 -0
  152. package/dist/src/lib/block-layout.js +451 -0
  153. package/dist/src/lib/block-layout.js.map +1 -0
  154. package/dist/src/lib/block-selector.d.ts +58 -0
  155. package/dist/src/lib/block-selector.js +92 -0
  156. package/dist/src/lib/block-selector.js.map +1 -0
  157. package/dist/src/lib/canonical-json.d.ts +12 -0
  158. package/dist/src/lib/canonical-json.js +35 -0
  159. package/dist/src/lib/canonical-json.js.map +1 -0
  160. package/dist/src/lib/channel.d.ts +30 -0
  161. package/dist/src/lib/channel.js +68 -0
  162. package/dist/src/lib/channel.js.map +1 -0
  163. package/dist/src/lib/cli-manifest.d.ts +68 -0
  164. package/dist/src/lib/cli-manifest.js +71 -0
  165. package/dist/src/lib/cli-manifest.js.map +1 -0
  166. package/dist/src/lib/codegen-shared/generatedFiles.d.ts +101 -0
  167. package/dist/src/lib/codegen-shared/generatedFiles.js +191 -0
  168. package/dist/src/lib/codegen-shared/generatedFiles.js.map +1 -0
  169. package/dist/src/lib/codegen-shared/prettierStable.d.ts +262 -0
  170. package/dist/src/lib/codegen-shared/prettierStable.js +610 -0
  171. package/dist/src/lib/codegen-shared/prettierStable.js.map +1 -0
  172. package/dist/src/lib/codegen-shared/resolveCodegenSourceDir.d.ts +38 -0
  173. package/dist/src/lib/codegen-shared/resolveCodegenSourceDir.js +46 -0
  174. package/dist/src/lib/codegen-shared/resolveCodegenSourceDir.js.map +1 -0
  175. package/dist/src/lib/collection-export.d.ts +184 -0
  176. package/dist/src/lib/collection-export.js +252 -0
  177. package/dist/src/lib/collection-export.js.map +1 -0
  178. package/dist/src/lib/config-json-field.d.ts +28 -0
  179. package/dist/src/lib/config-json-field.js +56 -0
  180. package/dist/src/lib/config-json-field.js.map +1 -0
  181. package/dist/src/lib/config-object-descriptor.d.ts +127 -0
  182. package/dist/src/lib/config-object-descriptor.js +740 -0
  183. package/dist/src/lib/config-object-descriptor.js.map +1 -0
  184. package/dist/src/lib/config-payload.d.ts +92 -0
  185. package/dist/src/lib/config-payload.js +161 -0
  186. package/dist/src/lib/config-payload.js.map +1 -0
  187. package/dist/src/lib/config-surface.d.ts +141 -0
  188. package/dist/src/lib/config-surface.js +368 -0
  189. package/dist/src/lib/config-surface.js.map +1 -0
  190. package/dist/src/lib/config-toml.d.ts +10 -0
  191. package/dist/src/lib/config-toml.js +42 -0
  192. package/dist/src/lib/config-toml.js.map +1 -0
  193. package/dist/src/lib/config.d.ts +71 -0
  194. package/dist/src/lib/config.js +71 -68
  195. package/dist/src/lib/config.js.map +1 -1
  196. package/dist/src/lib/confirm-prompt.d.ts +83 -0
  197. package/dist/src/lib/confirm-prompt.js +110 -0
  198. package/dist/src/lib/confirm-prompt.js.map +1 -0
  199. package/dist/src/lib/constants.d.ts +11 -0
  200. package/dist/src/lib/constants.js +12 -0
  201. package/dist/src/lib/constants.js.map +1 -0
  202. package/dist/src/lib/crash-handlers.d.ts +20 -0
  203. package/dist/src/lib/crash-handlers.js +49 -0
  204. package/dist/src/lib/crash-handlers.js.map +1 -0
  205. package/dist/src/lib/credentials-store.d.ts +104 -0
  206. package/dist/src/lib/credentials-store.js +336 -0
  207. package/dist/src/lib/credentials-store.js.map +1 -0
  208. package/dist/src/lib/csv.d.ts +47 -0
  209. package/dist/src/lib/csv.js +172 -0
  210. package/dist/src/lib/csv.js.map +1 -0
  211. package/dist/src/lib/data-input.d.ts +23 -0
  212. package/dist/src/lib/data-input.js +50 -0
  213. package/dist/src/lib/data-input.js.map +1 -0
  214. package/dist/src/lib/db-codegen/dbFingerprint.d.ts +10 -0
  215. package/dist/src/lib/db-codegen/dbFingerprint.js +17 -0
  216. package/dist/src/lib/db-codegen/dbFingerprint.js.map +1 -0
  217. package/dist/src/lib/db-codegen/dbGenerator.d.ts +67 -0
  218. package/dist/src/lib/db-codegen/dbGenerator.js +170 -0
  219. package/dist/src/lib/db-codegen/dbGenerator.js.map +1 -0
  220. package/dist/src/lib/db-codegen/dbNaming.d.ts +87 -0
  221. package/dist/src/lib/db-codegen/dbNaming.js +180 -0
  222. package/dist/src/lib/db-codegen/dbNaming.js.map +1 -0
  223. package/dist/src/lib/db-codegen/dbTemplates.d.ts +272 -0
  224. package/dist/src/lib/db-codegen/dbTemplates.js +480 -0
  225. package/dist/src/lib/db-codegen/dbTemplates.js.map +1 -0
  226. package/dist/src/lib/db-codegen/dbTsTypes.d.ts +73 -0
  227. package/dist/src/lib/db-codegen/dbTsTypes.js +139 -0
  228. package/dist/src/lib/db-codegen/dbTsTypes.js.map +1 -0
  229. package/dist/src/lib/db-codegen/dbTypeIR.d.ts +146 -0
  230. package/dist/src/lib/db-codegen/dbTypeIR.js +525 -0
  231. package/dist/src/lib/db-codegen/dbTypeIR.js.map +1 -0
  232. package/dist/src/lib/db-codegen/generated-operation-def-descriptor.d.ts +112 -0
  233. package/dist/src/lib/db-codegen/generated-operation-def-descriptor.js +211 -0
  234. package/dist/src/lib/db-codegen/generated-operation-def-descriptor.js.map +1 -0
  235. package/dist/src/lib/deprecation.d.ts +22 -0
  236. package/dist/src/lib/deprecation.js +43 -0
  237. package/dist/src/lib/deprecation.js.map +1 -0
  238. package/dist/src/lib/document-export-permissions.d.ts +30 -0
  239. package/dist/src/lib/document-export-permissions.js +54 -0
  240. package/dist/src/lib/document-export-permissions.js.map +1 -0
  241. package/dist/src/lib/document-ingest-artifact.d.ts +120 -0
  242. package/dist/src/lib/document-ingest-artifact.js +505 -0
  243. package/dist/src/lib/document-ingest-artifact.js.map +1 -0
  244. package/dist/src/lib/document-ingest-input.d.ts +51 -0
  245. package/dist/src/lib/document-ingest-input.js +132 -0
  246. package/dist/src/lib/document-ingest-input.js.map +1 -0
  247. package/dist/src/lib/document-ingest-rows.d.ts +137 -0
  248. package/dist/src/lib/document-ingest-rows.js +181 -0
  249. package/dist/src/lib/document-ingest-rows.js.map +1 -0
  250. package/dist/src/lib/document-ingest.d.ts +101 -0
  251. package/dist/src/lib/document-ingest.js +384 -0
  252. package/dist/src/lib/document-ingest.js.map +1 -0
  253. package/dist/src/lib/env-resolver-core.d.ts +258 -0
  254. package/dist/src/lib/env-resolver-core.js +447 -0
  255. package/dist/src/lib/env-resolver-core.js.map +1 -0
  256. package/dist/src/lib/env-resolver.d.ts +99 -0
  257. package/dist/src/lib/env-resolver.js +153 -0
  258. package/dist/src/lib/env-resolver.js.map +1 -0
  259. package/dist/src/lib/fetch.d.ts +5 -0
  260. package/dist/src/lib/function-bundle.d.ts +147 -0
  261. package/dist/src/lib/function-bundle.js +341 -0
  262. package/dist/src/lib/function-bundle.js.map +1 -0
  263. package/dist/src/lib/function-collect.d.ts +123 -0
  264. package/dist/src/lib/function-collect.js +610 -0
  265. package/dist/src/lib/function-collect.js.map +1 -0
  266. package/dist/src/lib/function-db-types.d.ts +202 -0
  267. package/dist/src/lib/function-db-types.js +870 -0
  268. package/dist/src/lib/function-db-types.js.map +1 -0
  269. package/dist/src/lib/function-document-types.d.ts +144 -0
  270. package/dist/src/lib/function-document-types.js +370 -0
  271. package/dist/src/lib/function-document-types.js.map +1 -0
  272. package/dist/src/lib/function-grants-preflight.d.ts +64 -0
  273. package/dist/src/lib/function-grants-preflight.js +105 -0
  274. package/dist/src/lib/function-grants-preflight.js.map +1 -0
  275. package/dist/src/lib/function-log-lines.d.ts +76 -0
  276. package/dist/src/lib/function-log-lines.js +160 -0
  277. package/dist/src/lib/function-log-lines.js.map +1 -0
  278. package/dist/src/lib/function-log-row.d.ts +29 -0
  279. package/dist/src/lib/function-log-row.js +73 -0
  280. package/dist/src/lib/function-log-row.js.map +1 -0
  281. package/dist/src/lib/function-log-tail.d.ts +132 -0
  282. package/dist/src/lib/function-log-tail.js +262 -0
  283. package/dist/src/lib/function-log-tail.js.map +1 -0
  284. package/dist/src/lib/function-run.d.ts +289 -0
  285. package/dist/src/lib/function-run.js +389 -0
  286. package/dist/src/lib/function-run.js.map +1 -0
  287. package/dist/src/lib/function-schema-codegen.d.ts +143 -0
  288. package/dist/src/lib/function-schema-codegen.js +420 -0
  289. package/dist/src/lib/function-schema-codegen.js.map +1 -0
  290. package/dist/src/lib/function-sync.d.ts +459 -0
  291. package/dist/src/lib/function-sync.js +1258 -0
  292. package/dist/src/lib/function-sync.js.map +1 -0
  293. package/dist/src/lib/function-trigger-listing.d.ts +27 -0
  294. package/dist/src/lib/function-trigger-listing.js +70 -0
  295. package/dist/src/lib/function-trigger-listing.js.map +1 -0
  296. package/dist/src/lib/function-typecheck.d.ts +86 -0
  297. package/dist/src/lib/function-typecheck.js +370 -0
  298. package/dist/src/lib/function-typecheck.js.map +1 -0
  299. package/dist/src/lib/function-versions.d.ts +122 -0
  300. package/dist/src/lib/function-versions.js +182 -0
  301. package/dist/src/lib/function-versions.js.map +1 -0
  302. package/dist/src/lib/generated-allowlist.d.ts +28 -0
  303. package/dist/src/lib/generated-allowlist.js +281 -0
  304. package/dist/src/lib/generated-allowlist.js.map +1 -0
  305. package/dist/src/lib/generated-config-surfaces.d.ts +2936 -0
  306. package/dist/src/lib/generated-config-surfaces.js +10569 -0
  307. package/dist/src/lib/generated-config-surfaces.js.map +1 -0
  308. package/dist/src/lib/generated-sdk-types.d.ts +12 -0
  309. package/dist/src/lib/generated-sdk-types.js +13 -0
  310. package/dist/src/lib/generated-sdk-types.js.map +1 -0
  311. package/dist/src/lib/generated-template-lint.d.ts +212 -0
  312. package/dist/src/lib/generated-template-lint.js +624 -0
  313. package/dist/src/lib/generated-template-lint.js.map +1 -0
  314. package/dist/src/lib/init-adopt.d.ts +16 -0
  315. package/dist/src/lib/init-adopt.js +34 -0
  316. package/dist/src/lib/init-adopt.js.map +1 -0
  317. package/dist/src/lib/init-assets.d.ts +39 -0
  318. package/dist/src/lib/init-assets.js +97 -0
  319. package/dist/src/lib/init-assets.js.map +1 -0
  320. package/dist/src/lib/init-client-platforms.d.ts +14 -0
  321. package/dist/src/lib/init-client-platforms.js +71 -0
  322. package/dist/src/lib/init-client-platforms.js.map +1 -0
  323. package/dist/src/lib/init-config.d.ts +98 -0
  324. package/dist/src/lib/init-config.js +186 -0
  325. package/dist/src/lib/init-config.js.map +1 -0
  326. package/dist/src/lib/init-email-redirect-uris.d.ts +37 -0
  327. package/dist/src/lib/init-email-redirect-uris.js +46 -0
  328. package/dist/src/lib/init-email-redirect-uris.js.map +1 -0
  329. package/dist/src/lib/init-ios-links.d.ts +91 -0
  330. package/dist/src/lib/init-ios-links.js +219 -0
  331. package/dist/src/lib/init-ios-links.js.map +1 -0
  332. package/dist/src/lib/init-plan.d.ts +80 -0
  333. package/dist/src/lib/init-plan.js +95 -0
  334. package/dist/src/lib/init-plan.js.map +1 -0
  335. package/dist/src/lib/init-production-env.d.ts +48 -0
  336. package/dist/src/lib/init-production-env.js +59 -0
  337. package/dist/src/lib/init-production-env.js.map +1 -0
  338. package/dist/src/lib/init-schema.d.ts +74 -0
  339. package/dist/src/lib/init-schema.js +358 -0
  340. package/dist/src/lib/init-schema.js.map +1 -0
  341. package/dist/src/lib/init-xcode.d.ts +34 -0
  342. package/dist/src/lib/init-xcode.js +138 -0
  343. package/dist/src/lib/init-xcode.js.map +1 -0
  344. package/dist/src/lib/integration-request-config.d.ts +30 -0
  345. package/dist/src/lib/integration-request-config.js +145 -0
  346. package/dist/src/lib/integration-request-config.js.map +1 -0
  347. package/dist/src/lib/integration-selector.d.ts +42 -0
  348. package/dist/src/lib/integration-selector.js +46 -0
  349. package/dist/src/lib/integration-selector.js.map +1 -0
  350. package/dist/src/lib/ios-app-id.d.ts +34 -0
  351. package/dist/src/lib/ios-app-id.js +69 -0
  352. package/dist/src/lib/ios-app-id.js.map +1 -0
  353. package/dist/src/lib/list-options.d.ts +68 -0
  354. package/dist/src/lib/list-options.js +89 -0
  355. package/dist/src/lib/list-options.js.map +1 -0
  356. package/dist/src/lib/local-state.d.ts +55 -0
  357. package/dist/src/lib/local-state.js +167 -0
  358. package/dist/src/lib/local-state.js.map +1 -0
  359. package/dist/src/lib/local-test-cases.d.ts +63 -0
  360. package/dist/src/lib/local-test-cases.js +136 -0
  361. package/dist/src/lib/local-test-cases.js.map +1 -0
  362. package/dist/src/lib/log-inspection.d.ts +715 -0
  363. package/dist/src/lib/log-inspection.js +816 -0
  364. package/dist/src/lib/log-inspection.js.map +1 -0
  365. package/dist/src/lib/logout-admin-session.d.ts +33 -0
  366. package/dist/src/lib/logout-admin-session.js +70 -0
  367. package/dist/src/lib/logout-admin-session.js.map +1 -0
  368. package/dist/src/lib/migration-nag.d.ts +49 -0
  369. package/dist/src/lib/migration-nag.js +163 -0
  370. package/dist/src/lib/migration-nag.js.map +1 -0
  371. package/dist/src/lib/object-status-filter.d.ts +22 -0
  372. package/dist/src/lib/object-status-filter.js +45 -0
  373. package/dist/src/lib/object-status-filter.js.map +1 -0
  374. package/dist/src/lib/output.d.ts +124 -0
  375. package/dist/src/lib/output.js +219 -8
  376. package/dist/src/lib/output.js.map +1 -1
  377. package/dist/src/lib/package-manager.d.ts +140 -0
  378. package/dist/src/lib/package-manager.js +305 -0
  379. package/dist/src/lib/package-manager.js.map +1 -0
  380. package/dist/src/lib/paginate.d.ts +98 -0
  381. package/dist/src/lib/paginate.js +112 -0
  382. package/dist/src/lib/paginate.js.map +1 -0
  383. package/dist/src/lib/platform-owned.d.ts +63 -0
  384. package/dist/src/lib/platform-owned.js +85 -0
  385. package/dist/src/lib/platform-owned.js.map +1 -0
  386. package/dist/src/lib/project-config.d.ts +122 -0
  387. package/dist/src/lib/project-config.js +244 -0
  388. package/dist/src/lib/project-config.js.map +1 -0
  389. package/dist/src/lib/prompt-cost-format.d.ts +11 -0
  390. package/dist/src/lib/prompt-cost-format.js +41 -0
  391. package/dist/src/lib/prompt-cost-format.js.map +1 -0
  392. package/dist/src/lib/prompt-schema-codegen.d.ts +147 -0
  393. package/dist/src/lib/prompt-schema-codegen.js +462 -0
  394. package/dist/src/lib/prompt-schema-codegen.js.map +1 -0
  395. package/dist/src/lib/query-operators.d.ts +43 -0
  396. package/dist/src/lib/query-operators.js +80 -0
  397. package/dist/src/lib/query-operators.js.map +1 -0
  398. package/dist/src/lib/record-filter.d.ts +18 -0
  399. package/dist/src/lib/record-filter.js +55 -0
  400. package/dist/src/lib/record-filter.js.map +1 -0
  401. package/dist/src/lib/refresh-admin-credentials.d.ts +73 -0
  402. package/dist/src/lib/refresh-admin-credentials.js +123 -0
  403. package/dist/src/lib/refresh-admin-credentials.js.map +1 -0
  404. package/dist/src/lib/resolve-init-dev-port.d.ts +56 -0
  405. package/dist/src/lib/resolve-init-dev-port.js +55 -0
  406. package/dist/src/lib/resolve-init-dev-port.js.map +1 -0
  407. package/dist/src/lib/resolve-init-server.d.ts +64 -0
  408. package/dist/src/lib/resolve-init-server.js +77 -0
  409. package/dist/src/lib/resolve-init-server.js.map +1 -0
  410. package/dist/src/lib/resolve-owner.d.ts +19 -0
  411. package/dist/src/lib/resolve-owner.js +20 -0
  412. package/dist/src/lib/resolve-owner.js.map +1 -0
  413. package/dist/src/lib/resolve-platform.d.ts +74 -0
  414. package/dist/src/lib/resolve-platform.js +105 -0
  415. package/dist/src/lib/resolve-platform.js.map +1 -0
  416. package/dist/src/lib/run-status.d.ts +19 -0
  417. package/dist/src/lib/run-status.generated.d.ts +39 -0
  418. package/dist/src/lib/run-status.generated.js +66 -0
  419. package/dist/src/lib/run-status.generated.js.map +1 -0
  420. package/dist/src/lib/run-status.js +19 -0
  421. package/dist/src/lib/run-status.js.map +1 -0
  422. package/dist/src/lib/server-text-normalization.d.ts +51 -0
  423. package/dist/src/lib/server-text-normalization.js +90 -0
  424. package/dist/src/lib/server-text-normalization.js.map +1 -0
  425. package/dist/src/lib/server-url.d.ts +22 -0
  426. package/dist/src/lib/server-url.js +33 -0
  427. package/dist/src/lib/server-url.js.map +1 -0
  428. package/dist/src/lib/signing-secret-status.d.ts +81 -0
  429. package/dist/src/lib/signing-secret-status.js +116 -0
  430. package/dist/src/lib/signing-secret-status.js.map +1 -0
  431. package/dist/src/lib/skill-installer.d.ts +71 -0
  432. package/dist/src/lib/skill-installer.js +441 -0
  433. package/dist/src/lib/skill-installer.js.map +1 -0
  434. package/dist/src/lib/snapshot-audit-source.d.ts +45 -0
  435. package/dist/src/lib/snapshot-audit-source.js +58 -0
  436. package/dist/src/lib/snapshot-audit-source.js.map +1 -0
  437. package/dist/src/lib/snapshot-audit-store.d.ts +52 -0
  438. package/dist/src/lib/snapshot-audit-store.js +196 -0
  439. package/dist/src/lib/snapshot-audit-store.js.map +1 -0
  440. package/dist/src/lib/snapshot-audit.d.ts +207 -0
  441. package/dist/src/lib/snapshot-audit.js +431 -0
  442. package/dist/src/lib/snapshot-audit.js.map +1 -0
  443. package/dist/src/lib/snapshot-build-rows.d.ts +60 -0
  444. package/dist/src/lib/snapshot-build-rows.js +87 -0
  445. package/dist/src/lib/snapshot-build-rows.js.map +1 -0
  446. package/dist/src/lib/snapshot-build.d.ts +50 -0
  447. package/dist/src/lib/snapshot-build.js +111 -0
  448. package/dist/src/lib/snapshot-build.js.map +1 -0
  449. package/dist/src/lib/snapshot-manifest-layout.d.ts +61 -0
  450. package/dist/src/lib/snapshot-manifest-layout.js +70 -0
  451. package/dist/src/lib/snapshot-manifest-layout.js.map +1 -0
  452. package/dist/src/lib/snapshots.d.ts +98 -0
  453. package/dist/src/lib/snapshots.js +294 -0
  454. package/dist/src/lib/snapshots.js.map +1 -0
  455. package/dist/src/lib/step-run-table.d.ts +43 -0
  456. package/dist/src/lib/step-run-table.js +129 -0
  457. package/dist/src/lib/step-run-table.js.map +1 -0
  458. package/dist/src/lib/storage-pending-retry.d.ts +26 -0
  459. package/dist/src/lib/storage-pending-retry.js +42 -0
  460. package/dist/src/lib/storage-pending-retry.js.map +1 -0
  461. package/dist/src/lib/swift-codegen/agentGenerator.d.ts +42 -0
  462. package/dist/src/lib/swift-codegen/agentGenerator.js +118 -0
  463. package/dist/src/lib/swift-codegen/agentGenerator.js.map +1 -0
  464. package/dist/src/lib/swift-codegen/banners.d.ts +24 -0
  465. package/dist/src/lib/swift-codegen/banners.js +25 -0
  466. package/dist/src/lib/swift-codegen/banners.js.map +1 -0
  467. package/dist/src/lib/swift-codegen/dbGenerator.d.ts +113 -0
  468. package/dist/src/lib/swift-codegen/dbGenerator.js +926 -0
  469. package/dist/src/lib/swift-codegen/dbGenerator.js.map +1 -0
  470. package/dist/src/lib/swift-codegen/dbSwiftTypes.d.ts +42 -0
  471. package/dist/src/lib/swift-codegen/dbSwiftTypes.js +100 -0
  472. package/dist/src/lib/swift-codegen/dbSwiftTypes.js.map +1 -0
  473. package/dist/src/lib/swift-codegen/functionGenerator.d.ts +139 -0
  474. package/dist/src/lib/swift-codegen/functionGenerator.js +462 -0
  475. package/dist/src/lib/swift-codegen/functionGenerator.js.map +1 -0
  476. package/dist/src/lib/swift-codegen/generator.d.ts +100 -0
  477. package/dist/src/lib/swift-codegen/generator.js +457 -0
  478. package/dist/src/lib/swift-codegen/generator.js.map +1 -0
  479. package/dist/src/lib/swift-codegen/schemaToSwift.d.ts +87 -0
  480. package/dist/src/lib/swift-codegen/schemaToSwift.js +661 -0
  481. package/dist/src/lib/swift-codegen/schemaToSwift.js.map +1 -0
  482. package/dist/src/lib/swift-codegen/siblingSymbols.d.ts +94 -0
  483. package/dist/src/lib/swift-codegen/siblingSymbols.js +155 -0
  484. package/dist/src/lib/swift-codegen/siblingSymbols.js.map +1 -0
  485. package/dist/src/lib/swift-codegen/swiftNaming.d.ts +85 -0
  486. package/dist/src/lib/swift-codegen/swiftNaming.js +198 -0
  487. package/dist/src/lib/swift-codegen/swiftNaming.js.map +1 -0
  488. package/dist/src/lib/sync-dir-selector.d.ts +21 -0
  489. package/dist/src/lib/sync-dir-selector.js +30 -0
  490. package/dist/src/lib/sync-dir-selector.js.map +1 -0
  491. package/dist/src/lib/sync-paths.d.ts +128 -0
  492. package/dist/src/lib/sync-paths.js +195 -0
  493. package/dist/src/lib/sync-paths.js.map +1 -0
  494. package/dist/src/lib/sync-resource-types.d.ts +563 -0
  495. package/dist/src/lib/sync-resource-types.js +1073 -0
  496. package/dist/src/lib/sync-resource-types.js.map +1 -0
  497. package/dist/src/lib/sync-selectors.d.ts +138 -0
  498. package/dist/src/lib/sync-selectors.js +289 -0
  499. package/dist/src/lib/sync-selectors.js.map +1 -0
  500. package/dist/src/lib/template.d.ts +170 -0
  501. package/dist/src/lib/template.js +484 -68
  502. package/dist/src/lib/template.js.map +1 -1
  503. package/dist/src/lib/test-case-file-names.d.ts +40 -0
  504. package/dist/src/lib/test-case-file-names.js +91 -0
  505. package/dist/src/lib/test-case-file-names.js.map +1 -0
  506. package/dist/src/lib/test-case-keys.d.ts +29 -0
  507. package/dist/src/lib/test-case-keys.js +55 -0
  508. package/dist/src/lib/test-case-keys.js.map +1 -0
  509. package/dist/src/lib/test-case-variables.d.ts +29 -0
  510. package/dist/src/lib/test-case-variables.js +71 -0
  511. package/dist/src/lib/test-case-variables.js.map +1 -0
  512. package/dist/src/lib/token-inject.d.ts +56 -0
  513. package/dist/src/lib/token-inject.js +204 -0
  514. package/dist/src/lib/token-inject.js.map +1 -0
  515. package/dist/src/lib/toml-database-config.d.ts +123 -0
  516. package/dist/src/lib/toml-database-config.js +544 -0
  517. package/dist/src/lib/toml-database-config.js.map +1 -0
  518. package/dist/src/lib/toml-metadata-config.d.ts +151 -0
  519. package/dist/src/lib/toml-metadata-config.js +476 -0
  520. package/dist/src/lib/toml-metadata-config.js.map +1 -0
  521. package/dist/src/lib/toml-native-form.d.ts +46 -0
  522. package/dist/src/lib/toml-native-form.js +78 -0
  523. package/dist/src/lib/toml-native-form.js.map +1 -0
  524. package/dist/src/lib/toml-params-validator.d.ts +129 -0
  525. package/dist/src/lib/toml-params-validator.js +298 -0
  526. package/dist/src/lib/toml-params-validator.js.map +1 -0
  527. package/dist/src/lib/toml-scalar-edit.d.ts +43 -0
  528. package/dist/src/lib/toml-scalar-edit.js +283 -0
  529. package/dist/src/lib/toml-scalar-edit.js.map +1 -0
  530. package/dist/src/lib/user-selector.d.ts +24 -0
  531. package/dist/src/lib/user-selector.js +33 -0
  532. package/dist/src/lib/user-selector.js.map +1 -0
  533. package/dist/src/lib/version-check.d.ts +35 -0
  534. package/dist/src/lib/version-check.js +241 -0
  535. package/dist/src/lib/version-check.js.map +1 -0
  536. package/dist/src/lib/watch.d.ts +121 -0
  537. package/dist/src/lib/watch.js +169 -0
  538. package/dist/src/lib/watch.js.map +1 -0
  539. package/dist/src/lib/web-url.d.ts +40 -0
  540. package/dist/src/lib/web-url.js +76 -0
  541. package/dist/src/lib/web-url.js.map +1 -0
  542. package/dist/src/lib/webhook-deliver.d.ts +209 -0
  543. package/dist/src/lib/webhook-deliver.js +519 -0
  544. package/dist/src/lib/webhook-deliver.js.map +1 -0
  545. package/dist/src/lib/workflow-apply.d.ts +110 -0
  546. package/dist/src/lib/workflow-apply.js +164 -0
  547. package/dist/src/lib/workflow-apply.js.map +1 -0
  548. package/dist/src/lib/workflow-codegen/generated-schema-descriptor.d.ts +129 -0
  549. package/dist/src/lib/workflow-codegen/generated-schema-descriptor.js +269 -0
  550. package/dist/src/lib/workflow-codegen/generated-schema-descriptor.js.map +1 -0
  551. package/dist/src/lib/workflow-codegen/generator.d.ts +96 -0
  552. package/dist/src/lib/workflow-codegen/generator.js +361 -0
  553. package/dist/src/lib/workflow-codegen/generator.js.map +1 -0
  554. package/dist/src/lib/workflow-codegen/invokerIR.d.ts +94 -0
  555. package/dist/src/lib/workflow-codegen/invokerIR.js +76 -0
  556. package/dist/src/lib/workflow-codegen/invokerIR.js.map +1 -0
  557. package/dist/src/lib/workflow-codegen/naming.d.ts +33 -0
  558. package/dist/src/lib/workflow-codegen/naming.js +81 -0
  559. package/dist/src/lib/workflow-codegen/naming.js.map +1 -0
  560. package/dist/src/lib/workflow-codegen/schemaToTs.d.ts +80 -0
  561. package/dist/src/lib/workflow-codegen/schemaToTs.js +303 -0
  562. package/dist/src/lib/workflow-codegen/schemaToTs.js.map +1 -0
  563. package/dist/src/lib/workflow-config-apply.d.ts +70 -0
  564. package/dist/src/lib/workflow-config-apply.js +137 -0
  565. package/dist/src/lib/workflow-config-apply.js.map +1 -0
  566. package/dist/src/lib/workflow-config-sidecar.d.ts +63 -0
  567. package/dist/src/lib/workflow-config-sidecar.js +96 -0
  568. package/dist/src/lib/workflow-config-sidecar.js.map +1 -0
  569. package/dist/src/lib/workflow-defaults.d.ts +29 -0
  570. package/dist/src/lib/workflow-defaults.js +41 -0
  571. package/dist/src/lib/workflow-defaults.js.map +1 -0
  572. package/dist/src/lib/workflow-fragments.d.ts +64 -0
  573. package/dist/src/lib/workflow-fragments.js +342 -0
  574. package/dist/src/lib/workflow-fragments.js.map +1 -0
  575. package/dist/src/lib/workflow-include-preserve.d.ts +76 -0
  576. package/dist/src/lib/workflow-include-preserve.js +286 -0
  577. package/dist/src/lib/workflow-include-preserve.js.map +1 -0
  578. package/dist/src/lib/workflow-payload.d.ts +98 -0
  579. package/dist/src/lib/workflow-payload.js +178 -0
  580. package/dist/src/lib/workflow-payload.js.map +1 -0
  581. package/dist/src/lib/workflow-toml-validator.d.ts +211 -0
  582. package/dist/src/lib/workflow-toml-validator.js +770 -0
  583. package/dist/src/lib/workflow-toml-validator.js.map +1 -0
  584. package/dist/src/lib/workflow-usage.d.ts +196 -0
  585. package/dist/src/lib/workflow-usage.js +310 -0
  586. package/dist/src/lib/workflow-usage.js.map +1 -0
  587. package/dist/src/types/index.d.ts +591 -0
  588. package/dist/src/validators.d.ts +65 -0
  589. package/dist/src/validators.js +64 -0
  590. package/dist/src/validators.js.map +1 -0
  591. package/package.json +34 -9
@@ -0,0 +1,121 @@
1
+ /**
2
+ * Shared poll-based tailing helpers for `--watch` / `--follow` (#1969).
3
+ *
4
+ * Two render modes over one abortable poll loop:
5
+ * - `--watch` → periodic full-snapshot redraw (a repeated `list`/`get`).
6
+ * - `--follow` → append-only tail: fetch rows after an opaque server-owned
7
+ * `resumeAfter` checkpoint each tick.
8
+ *
9
+ * The loop is endpoint-agnostic. `--follow` consumers supply a {@link FollowSource}
10
+ * that knows how to fetch the page after a checkpoint; `--watch` consumers supply
11
+ * a `snapshot()` and a renderer. The renderer is injected (there is no `json`
12
+ * flag in the options) so this file never decides output shape or clears the
13
+ * terminal — that is entirely the caller's renderer.
14
+ *
15
+ * `--follow` is near-lossless observed-version tailing: it re-emits a row when a
16
+ * newer version is observed, holds no per-item dedup state, and asserts only
17
+ * forward progress — never a total-order or exactly-once property (the
18
+ * underlying GSI sorts by `modifiedAt` alone and is eventually consistent). See
19
+ * the design in #1969.
20
+ *
21
+ * Unit-tested against fake sources (the `cli/src/lib/paginate.ts` pattern) with
22
+ * no server.
23
+ */
24
+ /** Interval floor: reject anything below this (prevents a request storm). */
25
+ export declare const MIN_INTERVAL_SECONDS = 1;
26
+ /** Default poll interval when `--interval` is omitted. */
27
+ export declare const DEFAULT_INTERVAL_SECONDS = 2;
28
+ /**
29
+ * Default cap on how many pages `followLoop` drains within a single tick when a
30
+ * burst is larger than one page. Bounds the within-tick work and, with the
31
+ * non-advancing-checkpoint guard, prevents an infinite drain.
32
+ */
33
+ export declare const DEFAULT_MAX_PAGES_PER_TICK = 20;
34
+ /**
35
+ * Validate an `--interval` value (in seconds). Returns the interval in seconds,
36
+ * or throws with a clear message for a missing/NaN/sub-floor value. Command
37
+ * handlers call this and surface the error; the library loops take a validated
38
+ * `intervalMs`.
39
+ */
40
+ export declare function parseIntervalSeconds(raw: string | undefined): number;
41
+ /**
42
+ * Sleep for `ms`, resolving early (never rejecting) if `signal` aborts. The
43
+ * timer and abort listener are always cleaned up, so a resolved delay leaves no
44
+ * dangling timer. Used by every poll loop so Ctrl-C stops promptly between
45
+ * ticks.
46
+ */
47
+ export declare function delay(ms: number, signal?: AbortSignal): Promise<void>;
48
+ /** Error policy for the poll loops: keep polling, or throw out of the loop. */
49
+ export type PollErrorPolicy = "continue" | "throw";
50
+ export interface PollUntilOptions<T> {
51
+ /** Validated poll interval in milliseconds. */
52
+ intervalMs: number;
53
+ /** Abort signal (Ctrl-C at the command level). */
54
+ signal: AbortSignal;
55
+ /** What to do when `probe` throws. Default `"throw"`. */
56
+ onError?: PollErrorPolicy;
57
+ /** Called with each probed value (e.g. to report progress). */
58
+ onValue?: (value: T) => void;
59
+ }
60
+ /**
61
+ * Delay-then-probe until `done(value)` is true or the signal aborts. Returns
62
+ * the last probed value. Delay-first (not probe-first) so a caller that already
63
+ * holds a fresh value — the batch-status loops — keeps its "poll every N
64
+ * seconds" cadence with no extra immediate request.
65
+ */
66
+ export declare function pollUntil<T>(probe: () => Promise<T>, done: (value: T) => boolean, options: PollUntilOptions<T>): Promise<T>;
67
+ /** One page of follow results, carrying the opaque next checkpoint. */
68
+ export interface FollowPage<T> {
69
+ items: T[];
70
+ /** More rows remain past this page right now (drives the within-tick drain). */
71
+ hasMore: boolean;
72
+ /** Opaque server-owned checkpoint; always present, even on an empty page. */
73
+ resumeAfter: string;
74
+ }
75
+ /**
76
+ * A source of follow pages. `fetchAfter(undefined)` is the bootstrap poll — it
77
+ * establishes the baseline checkpoint and its items are NOT emitted (tail
78
+ * semantics: "show me what happens from now"). `fetchAfter(<token>)` returns the
79
+ * bounded page after that checkpoint.
80
+ */
81
+ export interface FollowSource<T> {
82
+ fetchAfter: (resumeAfter: string | undefined) => Promise<FollowPage<T>>;
83
+ /**
84
+ * Max pages to drain within one tick when a burst exceeds one page. Defaults
85
+ * to {@link DEFAULT_MAX_PAGES_PER_TICK}. The drain also stops early if the
86
+ * checkpoint fails to advance (non-advancing-checkpoint guard).
87
+ */
88
+ maxPagesPerTick?: number;
89
+ }
90
+ export interface FollowOptions<T> {
91
+ intervalMs: number;
92
+ signal: AbortSignal;
93
+ /** What to do when a poll throws. Default `"continue"` (keep tailing). */
94
+ onError?: PollErrorPolicy;
95
+ /** Render newly-observed rows (server-ascending; no client sort). */
96
+ render: (items: T[]) => void;
97
+ }
98
+ export interface WatchOptions<T> {
99
+ intervalMs: number;
100
+ signal: AbortSignal;
101
+ /** What to do when a poll throws. Default `"continue"`. */
102
+ onError?: PollErrorPolicy;
103
+ /**
104
+ * Render the full snapshot. The renderer owns any clearing/redraw — the loop
105
+ * never clears the terminal itself.
106
+ */
107
+ render: (items: T[]) => void;
108
+ }
109
+ /**
110
+ * Append-only tail. Bootstraps the baseline checkpoint (emitting nothing), then
111
+ * each tick drains forward while `hasMore` (bounded by `maxPagesPerTick`,
112
+ * stopping if the checkpoint fails to advance), rendering rows server-ascending.
113
+ * Holds no per-item state — the only carried state is the single opaque
114
+ * `resumeAfter` string.
115
+ */
116
+ export declare function followLoop<T>(source: FollowSource<T>, options: FollowOptions<T>): Promise<void>;
117
+ /**
118
+ * Snapshot redraw. Each tick fetches the full current snapshot and hands it to
119
+ * the renderer, which owns any clearing/redraw. No checkpoint, no dedup.
120
+ */
121
+ export declare function watchLoop<T>(snapshot: () => Promise<T[]>, options: WatchOptions<T>): Promise<void>;
@@ -0,0 +1,169 @@
1
+ /**
2
+ * Shared poll-based tailing helpers for `--watch` / `--follow` (#1969).
3
+ *
4
+ * Two render modes over one abortable poll loop:
5
+ * - `--watch` → periodic full-snapshot redraw (a repeated `list`/`get`).
6
+ * - `--follow` → append-only tail: fetch rows after an opaque server-owned
7
+ * `resumeAfter` checkpoint each tick.
8
+ *
9
+ * The loop is endpoint-agnostic. `--follow` consumers supply a {@link FollowSource}
10
+ * that knows how to fetch the page after a checkpoint; `--watch` consumers supply
11
+ * a `snapshot()` and a renderer. The renderer is injected (there is no `json`
12
+ * flag in the options) so this file never decides output shape or clears the
13
+ * terminal — that is entirely the caller's renderer.
14
+ *
15
+ * `--follow` is near-lossless observed-version tailing: it re-emits a row when a
16
+ * newer version is observed, holds no per-item dedup state, and asserts only
17
+ * forward progress — never a total-order or exactly-once property (the
18
+ * underlying GSI sorts by `modifiedAt` alone and is eventually consistent). See
19
+ * the design in #1969.
20
+ *
21
+ * Unit-tested against fake sources (the `cli/src/lib/paginate.ts` pattern) with
22
+ * no server.
23
+ */
24
+ /** Interval floor: reject anything below this (prevents a request storm). */
25
+ export const MIN_INTERVAL_SECONDS = 1;
26
+ /** Default poll interval when `--interval` is omitted. */
27
+ export const DEFAULT_INTERVAL_SECONDS = 2;
28
+ /**
29
+ * Default cap on how many pages `followLoop` drains within a single tick when a
30
+ * burst is larger than one page. Bounds the within-tick work and, with the
31
+ * non-advancing-checkpoint guard, prevents an infinite drain.
32
+ */
33
+ export const DEFAULT_MAX_PAGES_PER_TICK = 20;
34
+ /**
35
+ * Validate an `--interval` value (in seconds). Returns the interval in seconds,
36
+ * or throws with a clear message for a missing/NaN/sub-floor value. Command
37
+ * handlers call this and surface the error; the library loops take a validated
38
+ * `intervalMs`.
39
+ */
40
+ export function parseIntervalSeconds(raw) {
41
+ if (raw === undefined)
42
+ return DEFAULT_INTERVAL_SECONDS;
43
+ const n = Number(raw);
44
+ if (!Number.isFinite(n) || n < MIN_INTERVAL_SECONDS) {
45
+ throw new Error(`--interval must be a number of seconds >= ${MIN_INTERVAL_SECONDS}`);
46
+ }
47
+ return n;
48
+ }
49
+ /**
50
+ * Sleep for `ms`, resolving early (never rejecting) if `signal` aborts. The
51
+ * timer and abort listener are always cleaned up, so a resolved delay leaves no
52
+ * dangling timer. Used by every poll loop so Ctrl-C stops promptly between
53
+ * ticks.
54
+ */
55
+ export function delay(ms, signal) {
56
+ return new Promise((resolve) => {
57
+ if (signal?.aborted) {
58
+ resolve();
59
+ return;
60
+ }
61
+ const timer = setTimeout(() => {
62
+ cleanup();
63
+ resolve();
64
+ }, ms);
65
+ const onAbort = () => {
66
+ clearTimeout(timer);
67
+ cleanup();
68
+ resolve();
69
+ };
70
+ const cleanup = () => signal?.removeEventListener("abort", onAbort);
71
+ signal?.addEventListener("abort", onAbort, { once: true });
72
+ });
73
+ }
74
+ /**
75
+ * Delay-then-probe until `done(value)` is true or the signal aborts. Returns
76
+ * the last probed value. Delay-first (not probe-first) so a caller that already
77
+ * holds a fresh value — the batch-status loops — keeps its "poll every N
78
+ * seconds" cadence with no extra immediate request.
79
+ */
80
+ export async function pollUntil(probe, done, options) {
81
+ const onError = options.onError ?? "throw";
82
+ let last;
83
+ let haveValue = false;
84
+ while (!options.signal.aborted) {
85
+ await delay(options.intervalMs, options.signal);
86
+ if (options.signal.aborted)
87
+ break;
88
+ try {
89
+ last = await probe();
90
+ haveValue = true;
91
+ }
92
+ catch (err) {
93
+ if (onError === "continue")
94
+ continue;
95
+ throw err;
96
+ }
97
+ options.onValue?.(last);
98
+ if (done(last))
99
+ return last;
100
+ }
101
+ // Aborted before `done`: return the last probed value (probe once if we never
102
+ // got one, so the return type holds).
103
+ if (!haveValue)
104
+ last = await probe();
105
+ return last;
106
+ }
107
+ /**
108
+ * Append-only tail. Bootstraps the baseline checkpoint (emitting nothing), then
109
+ * each tick drains forward while `hasMore` (bounded by `maxPagesPerTick`,
110
+ * stopping if the checkpoint fails to advance), rendering rows server-ascending.
111
+ * Holds no per-item state — the only carried state is the single opaque
112
+ * `resumeAfter` string.
113
+ */
114
+ export async function followLoop(source, options) {
115
+ const onError = options.onError ?? "continue";
116
+ const maxPages = source.maxPagesPerTick ?? DEFAULT_MAX_PAGES_PER_TICK;
117
+ // Bootstrap: establish the baseline; do not emit its rows.
118
+ let resumeAfter;
119
+ try {
120
+ resumeAfter = (await source.fetchAfter(undefined)).resumeAfter;
121
+ }
122
+ catch (err) {
123
+ if (onError !== "continue")
124
+ throw err;
125
+ resumeAfter = ""; // fall through to polling; the next tick retries
126
+ }
127
+ while (!options.signal.aborted) {
128
+ try {
129
+ let pages = 0;
130
+ while (pages < maxPages && !options.signal.aborted) {
131
+ const page = await source.fetchAfter(resumeAfter || undefined);
132
+ if (page.items.length > 0)
133
+ options.render(page.items);
134
+ const advanced = page.resumeAfter !== resumeAfter;
135
+ resumeAfter = page.resumeAfter;
136
+ pages++;
137
+ // Stop the within-tick drain when the burst is drained, or if the
138
+ // checkpoint didn't advance (guards against an endless drain).
139
+ if (!page.hasMore || !advanced)
140
+ break;
141
+ }
142
+ }
143
+ catch (err) {
144
+ if (onError !== "continue")
145
+ throw err;
146
+ // continue: swallow and retry next tick
147
+ }
148
+ await delay(options.intervalMs, options.signal);
149
+ }
150
+ }
151
+ /**
152
+ * Snapshot redraw. Each tick fetches the full current snapshot and hands it to
153
+ * the renderer, which owns any clearing/redraw. No checkpoint, no dedup.
154
+ */
155
+ export async function watchLoop(snapshot, options) {
156
+ const onError = options.onError ?? "continue";
157
+ while (!options.signal.aborted) {
158
+ try {
159
+ const items = await snapshot();
160
+ options.render(items);
161
+ }
162
+ catch (err) {
163
+ if (onError !== "continue")
164
+ throw err;
165
+ }
166
+ await delay(options.intervalMs, options.signal);
167
+ }
168
+ }
169
+ //# sourceMappingURL=watch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watch.js","sourceRoot":"","sources":["../../../src/lib/watch.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * The app's web counterpart, as a normalized web origin (#2982).
3
+ *
4
+ * One environment value with two jobs on the iOS side: the emailed sign-in
5
+ * link points at `<webUrl>/oauth/callback`, and the same origin is what an
6
+ * incoming universal link is trusted from. Both jobs need an ORIGIN, not just
7
+ * a URL that parses:
8
+ *
9
+ * - https except loopback, the same rule the server applies to every
10
+ * redirect URI (`src/auth/redirect-uri.ts`) — an origin that cannot be
11
+ * allow-listed turns every sign-in request into a 400;
12
+ * - no path, query or fragment: the web client derives its callback from its
13
+ * own origin plus `/oauth/callback` and has no base-path mode, and the
14
+ * `apple-app-site-association` component matches that exact path;
15
+ * - no credentials, which have no business in a link that goes out by email.
16
+ *
17
+ * Returns the `string | true` shape `@inquirer/prompts` expects, like
18
+ * `validateServerUrl`, so the same function backs the flag check, the project
19
+ * config's field validation and any future prompt.
20
+ *
21
+ * This is the surface that EXPLAINS a rejection. The same rule is applied
22
+ * silently — value or nothing — by every reader that feeds `primitive.json`
23
+ * without going through the CLI: `normalizeWebOrigin` in `env-resolver-core.ts`
24
+ * (which cannot import this file; it is copied verbatim into a package that
25
+ * must not depend on the CLI), its bash/python3 port in the Swift template's
26
+ * `resolve-primitive-config.sh`, and `PrimitiveAppState.linksBaseURL` as the
27
+ * app's own floor. `web-url-parity` in the project-config tests pins that the
28
+ * two TypeScript halves accept and normalize exactly the same values.
29
+ */
30
+ /**
31
+ * Validates a web origin. Returns `true` when valid, otherwise the message to
32
+ * show the user.
33
+ */
34
+ export declare function validateWebUrl(value: string): string | true;
35
+ /**
36
+ * The origin form of an already-validated web URL: lowercased host, explicit
37
+ * port kept, no trailing slash — so `https://app.example.com/` and
38
+ * `https://app.example.com` are stored, compared and joined identically.
39
+ */
40
+ export declare function normalizeWebUrl(value: string): string;
@@ -0,0 +1,76 @@
1
+ /**
2
+ * The app's web counterpart, as a normalized web origin (#2982).
3
+ *
4
+ * One environment value with two jobs on the iOS side: the emailed sign-in
5
+ * link points at `<webUrl>/oauth/callback`, and the same origin is what an
6
+ * incoming universal link is trusted from. Both jobs need an ORIGIN, not just
7
+ * a URL that parses:
8
+ *
9
+ * - https except loopback, the same rule the server applies to every
10
+ * redirect URI (`src/auth/redirect-uri.ts`) — an origin that cannot be
11
+ * allow-listed turns every sign-in request into a 400;
12
+ * - no path, query or fragment: the web client derives its callback from its
13
+ * own origin plus `/oauth/callback` and has no base-path mode, and the
14
+ * `apple-app-site-association` component matches that exact path;
15
+ * - no credentials, which have no business in a link that goes out by email.
16
+ *
17
+ * Returns the `string | true` shape `@inquirer/prompts` expects, like
18
+ * `validateServerUrl`, so the same function backs the flag check, the project
19
+ * config's field validation and any future prompt.
20
+ *
21
+ * This is the surface that EXPLAINS a rejection. The same rule is applied
22
+ * silently — value or nothing — by every reader that feeds `primitive.json`
23
+ * without going through the CLI: `normalizeWebOrigin` in `env-resolver-core.ts`
24
+ * (which cannot import this file; it is copied verbatim into a package that
25
+ * must not depend on the CLI), its bash/python3 port in the Swift template's
26
+ * `resolve-primitive-config.sh`, and `PrimitiveAppState.linksBaseURL` as the
27
+ * app's own floor. `web-url-parity` in the project-config tests pins that the
28
+ * two TypeScript halves accept and normalize exactly the same values.
29
+ */
30
+ const LOOPBACK_HOSTS = new Set(["localhost", "127.0.0.1"]);
31
+ /** The example every message ends with, so a rejection is actionable. */
32
+ const SHAPE = "e.g. https://app.example.com (or http://localhost:5173 in dev)";
33
+ /**
34
+ * Validates a web origin. Returns `true` when valid, otherwise the message to
35
+ * show the user.
36
+ */
37
+ export function validateWebUrl(value) {
38
+ if (typeof value !== "string" || !value.trim()) {
39
+ return `Web URL cannot be empty — ${SHAPE}`;
40
+ }
41
+ let url;
42
+ try {
43
+ url = new URL(value);
44
+ }
45
+ catch {
46
+ return `Please enter an absolute URL — ${SHAPE}`;
47
+ }
48
+ if (url.protocol !== "https:" && url.protocol !== "http:") {
49
+ return `Web URL must be http(s) — ${SHAPE}`;
50
+ }
51
+ if (url.protocol === "http:" && !LOOPBACK_HOSTS.has(url.hostname)) {
52
+ return `Web URL must use https outside localhost — the server refuses a non-loopback http redirect URI (${SHAPE})`;
53
+ }
54
+ if (url.username || url.password) {
55
+ return `Web URL must not carry credentials — ${SHAPE}`;
56
+ }
57
+ if (url.pathname !== "/" && url.pathname !== "") {
58
+ return `Web URL must be an origin with no path — the web app serves its sign-in callback on its own origin (${SHAPE})`;
59
+ }
60
+ if (url.search) {
61
+ return `Web URL must not carry a query — ${SHAPE}`;
62
+ }
63
+ if (url.hash) {
64
+ return `Web URL must not carry a fragment — ${SHAPE}`;
65
+ }
66
+ return true;
67
+ }
68
+ /**
69
+ * The origin form of an already-validated web URL: lowercased host, explicit
70
+ * port kept, no trailing slash — so `https://app.example.com/` and
71
+ * `https://app.example.com` are stored, compared and joined identically.
72
+ */
73
+ export function normalizeWebUrl(value) {
74
+ return new URL(value).origin;
75
+ }
76
+ //# sourceMappingURL=web-url.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web-url.js","sourceRoot":"","sources":["../../../src/lib/web-url.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC;AAE3D,yEAAyE;AACzE,MAAM,KAAK,GAAG,gEAAgE,CAAC;AAE/E;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,KAAa;IAC1C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;QAC/C,OAAO,6BAA6B,KAAK,EAAE,CAAC;IAC9C,CAAC;IACD,IAAI,GAAQ,CAAC;IACb,IAAI,CAAC;QACH,GAAG,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,kCAAkC,KAAK,EAAE,CAAC;IACnD,CAAC;IACD,IAAI,GAAG,CAAC,QAAQ,KAAK,QAAQ,IAAI,GAAG,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QAC1D,OAAO,6BAA6B,KAAK,EAAE,CAAC;IAC9C,CAAC;IACD,IAAI,GAAG,CAAC,QAAQ,KAAK,OAAO,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QAClE,OAAO,mGAAmG,KAAK,GAAG,CAAC;IACrH,CAAC;IACD,IAAI,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;QACjC,OAAO,wCAAwC,KAAK,EAAE,CAAC;IACzD,CAAC;IACD,IAAI,GAAG,CAAC,QAAQ,KAAK,GAAG,IAAI,GAAG,CAAC,QAAQ,KAAK,EAAE,EAAE,CAAC;QAChD,OAAO,uGAAuG,KAAK,GAAG,CAAC;IACzH,CAAC;IACD,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;QACf,OAAO,oCAAoC,KAAK,EAAE,CAAC;IACrD,CAAC;IACD,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;QACb,OAAO,uCAAuC,KAAK,EAAE,CAAC;IACxD,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,KAAa;IAC3C,OAAO,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC;AAC/B,CAAC"}
@@ -0,0 +1,209 @@
1
+ /**
2
+ * Deliver a signed preview through a webhook's real receive path (#3321).
3
+ *
4
+ * `primitive webhooks test --deliver` adds no server dispatch surface. It
5
+ * composes two capabilities that already exist:
6
+ *
7
+ * 1. the admin-gated preview `POST /admin/api/apps/{appId}/webhooks/{id}/test`,
8
+ * which signs a payload with the same rule the receiver verifies with, and
9
+ * 2. the public receive endpoint `POST /app/{appId}/webhook/{webhookKey}`,
10
+ * the unauthenticated path a provider posts to.
11
+ *
12
+ * So the delivery is a real delivery: the body cap, the availability check, the
13
+ * IP allowlist, signature verification, handshake rules, deduplication, the run
14
+ * row and the delivery log all run exactly as they do for a provider. Nobody
15
+ * gains authority they did not have — only someone who can already administer
16
+ * the app can obtain a signature — and nothing bypasses verification, because
17
+ * the signature is checked for real at the receive endpoint.
18
+ *
19
+ * ── What this module owes the caller ──────────────────────────────────────
20
+ *
21
+ * An honest report. The receive endpoint answers `{received: true}` and
22
+ * discloses nothing else (it must not: it is unauthenticated), so "did the
23
+ * function actually run?" is answered from the delivery log and the runs
24
+ * surface, and only positive evidence may be reported as a dispatch:
25
+ *
26
+ * - **Correlation is one rule.** A delivery-log row NEWER than a baseline
27
+ * snapshot taken before the POST, whose `dedupKey` equals the one the
28
+ * preview returned. That key hashes the whole signed payload including its
29
+ * timestamp prefix, so it is unique to this request rather than a
30
+ * heuristic; the baseline is what keeps a replay of the same signed bytes
31
+ * from being attributed here. There is no body-hash fallback: identical
32
+ * bodies collide, and attributing another request's row is worse than
33
+ * declining to.
34
+ * - **The key names dispatched deliveries only.** The receiver writes
35
+ * `dedupKey` on an `accepted` row that really dispatched and OMITS it
36
+ * everywhere else — on a handshake row, a duplicate, a rejection, a 202
37
+ * non-dispatch, and on the `accepted` row of a delivery whose target was
38
+ * not found (`webhook-receiver.ts`, `logEvent`). That omission is what
39
+ * keeps the `eventsByDedupKey` index holding exactly the deliveries that
40
+ * may suppress a later one, so it is load-bearing, not incidental. The
41
+ * consequence here: a delivery the receiver did not dispatch has no row
42
+ * this correlator can reach, and is reported as unconfirmed — with what
43
+ * the absence of the key means — rather than named from a row.
44
+ * - **A run is confirmed, not assumed.** An `accepted` row names a run id
45
+ * before the run finishes, and the legacy workflow branch keeps its
46
+ * `accepted` row and its HTTP 200 even when the launch is skipped or
47
+ * throws. So the named run is looked up on the authenticated runs surface
48
+ * before dispatch is claimed.
49
+ * - **Everything else is named for what it was** — a suppressed replay, a
50
+ * 410/403/401 refusal, each of which the receive endpoint reports for
51
+ * itself — or reported as "dispatch unconfirmed", which is where a
52
+ * handshake short-circuit (it can legally answer 200 `{received:true}`
53
+ * before any dispatch) and a 202 non-dispatch land, since neither records
54
+ * a correlatable row. Only a confirmed dispatch exits `0`.
55
+ */
56
+ export type DeliverOutcome = "dispatched" | "refused" | "unconfirmed";
57
+ export interface WebhookPreview {
58
+ success?: boolean;
59
+ payload?: unknown;
60
+ rawBody: string;
61
+ signatureHeaders: Record<string, string>;
62
+ verificationScheme: string;
63
+ timestamp?: number;
64
+ /** #3321 — the receive path's key; absent on a pre-upgrade server. */
65
+ webhookKey?: string | null;
66
+ /** #3321 — the owning server function, or null for a standalone webhook. */
67
+ functionId?: string | null;
68
+ /** #3321 — the correlator; null for scheme `none`. */
69
+ dedupKey?: string | null;
70
+ }
71
+ export interface WebhookEventRow {
72
+ eventId: string;
73
+ status?: string | null;
74
+ httpStatus?: number | null;
75
+ rejectionReason?: string | null;
76
+ dedupKey?: string | null;
77
+ workflowRunId?: string | null;
78
+ workflowRunKey?: string | null;
79
+ createdAt?: string | null;
80
+ [key: string]: unknown;
81
+ }
82
+ export interface EventPage {
83
+ items: WebhookEventRow[];
84
+ nextCursor?: string | null;
85
+ }
86
+ export interface RunPage {
87
+ items: any[];
88
+ nextCursor?: string | null;
89
+ }
90
+ /**
91
+ * The admin reads and the one admin write this flow needs.
92
+ *
93
+ * `ApiClient` satisfies it as written; the live api test implements the same
94
+ * five methods over the test context's authenticated client, which is what lets
95
+ * this module be proven end to end against a real server.
96
+ */
97
+ export interface WebhookDeliverClient {
98
+ testWebhook(appId: string, webhookId: string, payload?: any): Promise<any>;
99
+ listWebhookEvents(appId: string, webhookId: string, params?: {
100
+ limit?: number;
101
+ cursor?: string;
102
+ }): Promise<EventPage>;
103
+ getWebhook(appId: string, webhookId: string): Promise<any>;
104
+ listFunctionRuns(appId: string, functionId: string, params?: {
105
+ limit?: number;
106
+ cursor?: string;
107
+ }): Promise<RunPage>;
108
+ listWorkflowRuns(appId: string, workflowId: string, params?: {
109
+ limit?: number;
110
+ cursor?: string;
111
+ }): Promise<RunPage>;
112
+ }
113
+ export type FetchLike = (url: string, init: any) => Promise<any>;
114
+ export interface DeliverInput {
115
+ appId: string;
116
+ webhookId: string;
117
+ /** The payload to sign, passed to the preview endpoint unchanged. */
118
+ payload?: any;
119
+ /** The API base URL — the receive endpoint lives under it. */
120
+ serverUrl: string;
121
+ }
122
+ export interface DeliverDeps {
123
+ client: WebhookDeliverClient;
124
+ fetchImpl?: FetchLike;
125
+ sleep?: (ms: number) => Promise<void>;
126
+ /** Called with the side-effect notice, before anything is delivered. */
127
+ onBeforeDeliver?: (notice: string[]) => void;
128
+ /** Bounds, overridable for tests. */
129
+ pollAttempts?: number;
130
+ pollIntervalMs?: number;
131
+ pageCap?: number;
132
+ pageLimit?: number;
133
+ runPageCap?: number;
134
+ runPageLimit?: number;
135
+ timeoutMs?: number;
136
+ }
137
+ export interface DeliveryAttempt {
138
+ url: string;
139
+ /** True once the request left the CLI, whatever came back. */
140
+ sent: boolean;
141
+ status: number | null;
142
+ body: any;
143
+ duplicate: boolean;
144
+ /** Why no response was observed, when none was. */
145
+ error: string | null;
146
+ }
147
+ export interface RunConfirmation {
148
+ runId: string | null;
149
+ confirmed: boolean;
150
+ surface: "function" | "workflow" | null;
151
+ reason: string | null;
152
+ }
153
+ export interface DeliverResult {
154
+ outcome: DeliverOutcome;
155
+ /** One sentence naming what happened. */
156
+ headline: string;
157
+ /** Further lines worth printing — remediation, inspection hints. */
158
+ details: string[];
159
+ /** The side-effect announcement, printed before the delivery. */
160
+ notice: string[];
161
+ preview: WebhookPreview | null;
162
+ refusal: {
163
+ message: string;
164
+ code: string | null;
165
+ } | null;
166
+ delivery: DeliveryAttempt | null;
167
+ event: WebhookEventRow | null;
168
+ run: RunConfirmation | null;
169
+ }
170
+ /** ~5 attempts over ~4 s: the accepted row is written before execution ends. */
171
+ export declare const DELIVER_POLL_ATTEMPTS = 5;
172
+ export declare const DELIVER_POLL_INTERVAL_MS = 800;
173
+ /** Cursor pages walked per attempt, so a busy log cannot outrun the poll. */
174
+ export declare const DELIVER_PAGE_CAP = 10;
175
+ export declare const DELIVER_PAGE_LIMIT = 25;
176
+ /** The same bound on the runs surface, where runs start while this one waits. */
177
+ export declare const DELIVER_RUN_PAGE_CAP = 5;
178
+ export declare const DELIVER_RUN_PAGE_LIMIT = 50;
179
+ /** Comfortably above the sync-function ceiling. */
180
+ export declare const DELIVER_TIMEOUT_MS = 60000;
181
+ /**
182
+ * What the user is told before a delivery happens, in the terminal rather than
183
+ * only in the guide: a diagnostic that mutates the app has to say so where the
184
+ * user is looking (criterion 4).
185
+ */
186
+ export declare function deliveryNotice(scheme: string): string[];
187
+ /**
188
+ * The one correlation rule: the newest row above `baselineEventId` whose
189
+ * `dedupKey` equals this preview's.
190
+ *
191
+ * The walk is newest-first and follows `nextCursor`, stopping at the baseline
192
+ * row (every row below it predates this delivery) or at `pageCap`. A null
193
+ * baseline means the log was empty when the snapshot was taken, so every row
194
+ * walked is a candidate.
195
+ */
196
+ export declare function findDeliveryEvent(input: {
197
+ client: WebhookDeliverClient;
198
+ appId: string;
199
+ webhookId: string;
200
+ dedupKey: string;
201
+ baselineEventId: string | null;
202
+ pageCap?: number;
203
+ pageLimit?: number;
204
+ }): Promise<WebhookEventRow | null>;
205
+ /**
206
+ * Preview, deliver, correlate, confirm — the whole flow, as one result a caller
207
+ * renders however it likes.
208
+ */
209
+ export declare function deliverWebhookTest(input: DeliverInput, deps: DeliverDeps): Promise<DeliverResult>;