primitive-admin 1.1.0-alpha.8 → 1.1.0-alpha.81

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 (531) hide show
  1. package/README.md +446 -108
  2. package/assets/skill/skills/primitive-platform/SKILL.md +811 -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 +128 -19
  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 +700 -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 +54 -96
  14. package/dist/src/commands/apps.js.map +1 -1
  15. package/dist/src/commands/auth.d.ts +2 -0
  16. package/dist/src/commands/auth.js +196 -105
  17. package/dist/src/commands/auth.js.map +1 -1
  18. package/dist/src/commands/blob-buckets.d.ts +2 -0
  19. package/dist/src/commands/blob-buckets.js +330 -0
  20. package/dist/src/commands/blob-buckets.js.map +1 -0
  21. package/dist/src/commands/catalog.d.ts +2 -0
  22. package/dist/src/commands/catalog.js +37 -38
  23. package/dist/src/commands/catalog.js.map +1 -1
  24. package/dist/src/commands/collection-type-configs.d.ts +2 -0
  25. package/dist/src/commands/collection-type-configs.js +84 -0
  26. package/dist/src/commands/collection-type-configs.js.map +1 -0
  27. package/dist/src/commands/collections.d.ts +2 -0
  28. package/dist/src/commands/collections.js +565 -0
  29. package/dist/src/commands/collections.js.map +1 -0
  30. package/dist/src/commands/comparisons.d.ts +2 -0
  31. package/dist/src/commands/comparisons.js +6 -6
  32. package/dist/src/commands/comparisons.js.map +1 -1
  33. package/dist/src/commands/config.d.ts +46 -0
  34. package/dist/src/commands/config.js +465 -0
  35. package/dist/src/commands/config.js.map +1 -0
  36. package/dist/src/commands/connections.d.ts +2 -0
  37. package/dist/src/commands/connections.js +100 -0
  38. package/dist/src/commands/connections.js.map +1 -0
  39. package/dist/src/commands/cron-triggers.d.ts +2 -0
  40. package/dist/src/commands/cron-triggers.js +265 -0
  41. package/dist/src/commands/cron-triggers.js.map +1 -0
  42. package/dist/src/commands/database-type-configs.d.ts +2 -0
  43. package/dist/src/commands/database-type-configs.js +163 -0
  44. package/dist/src/commands/database-type-configs.js.map +1 -0
  45. package/dist/src/commands/database-types.d.ts +2 -0
  46. package/dist/src/commands/database-types.js +171 -0
  47. package/dist/src/commands/database-types.js.map +1 -0
  48. package/dist/src/commands/databases.d.ts +65 -0
  49. package/dist/src/commands/databases.js +1857 -238
  50. package/dist/src/commands/databases.js.map +1 -1
  51. package/dist/src/commands/documents.d.ts +2 -0
  52. package/dist/src/commands/documents.js +2062 -19
  53. package/dist/src/commands/documents.js.map +1 -1
  54. package/dist/src/commands/email-templates.d.ts +2 -0
  55. package/dist/src/commands/email-templates.js +174 -0
  56. package/dist/src/commands/email-templates.js.map +1 -0
  57. package/dist/src/commands/env.d.ts +23 -0
  58. package/dist/src/commands/env.js +385 -0
  59. package/dist/src/commands/env.js.map +1 -0
  60. package/dist/src/commands/feature-flags.d.ts +14 -0
  61. package/dist/src/commands/feature-flags.js +116 -0
  62. package/dist/src/commands/feature-flags.js.map +1 -0
  63. package/dist/src/commands/functions.d.ts +20 -0
  64. package/dist/src/commands/functions.js +765 -0
  65. package/dist/src/commands/functions.js.map +1 -0
  66. package/dist/src/commands/group-type-configs.d.ts +2 -0
  67. package/dist/src/commands/group-type-configs.js +86 -0
  68. package/dist/src/commands/group-type-configs.js.map +1 -0
  69. package/dist/src/commands/groups.d.ts +2 -0
  70. package/dist/src/commands/groups.js +39 -108
  71. package/dist/src/commands/groups.js.map +1 -1
  72. package/dist/src/commands/guides.d.ts +223 -0
  73. package/dist/src/commands/guides.js +617 -65
  74. package/dist/src/commands/guides.js.map +1 -1
  75. package/dist/src/commands/init.d.ts +37 -0
  76. package/dist/src/commands/init.js +1693 -208
  77. package/dist/src/commands/init.js.map +1 -1
  78. package/dist/src/commands/integrations.d.ts +2 -0
  79. package/dist/src/commands/integrations.js +402 -182
  80. package/dist/src/commands/integrations.js.map +1 -1
  81. package/dist/src/commands/llm.d.ts +2 -0
  82. package/dist/src/commands/llm.js +13 -8
  83. package/dist/src/commands/llm.js.map +1 -1
  84. package/dist/src/commands/locks.d.ts +8 -0
  85. package/dist/src/commands/locks.js +160 -0
  86. package/dist/src/commands/locks.js.map +1 -0
  87. package/dist/src/commands/metadata-category-configs.d.ts +12 -0
  88. package/dist/src/commands/metadata-category-configs.js +112 -0
  89. package/dist/src/commands/metadata-category-configs.js.map +1 -0
  90. package/dist/src/commands/metadata.d.ts +2 -0
  91. package/dist/src/commands/metadata.js +281 -0
  92. package/dist/src/commands/metadata.js.map +1 -0
  93. package/dist/src/commands/prompts.d.ts +2 -0
  94. package/dist/src/commands/prompts.js +275 -621
  95. package/dist/src/commands/prompts.js.map +1 -1
  96. package/dist/src/commands/rule-sets.d.ts +3 -0
  97. package/dist/src/commands/rule-sets.js +137 -147
  98. package/dist/src/commands/rule-sets.js.map +1 -1
  99. package/dist/src/commands/scripts.d.ts +30 -0
  100. package/dist/src/commands/scripts.js +679 -0
  101. package/dist/src/commands/scripts.js.map +1 -0
  102. package/dist/src/commands/secrets.d.ts +2 -0
  103. package/dist/src/commands/secrets.js +108 -0
  104. package/dist/src/commands/secrets.js.map +1 -0
  105. package/dist/src/commands/sessions.d.ts +2 -0
  106. package/dist/src/commands/sessions.js +75 -0
  107. package/dist/src/commands/sessions.js.map +1 -0
  108. package/dist/src/commands/settings.d.ts +18 -0
  109. package/dist/src/commands/settings.js +54 -0
  110. package/dist/src/commands/settings.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 +2514 -0
  118. package/dist/src/commands/sync.js +16085 -848
  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 +130 -21
  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 +532 -23
  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 +96 -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 +10 -10
  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 +626 -0
  134. package/dist/src/commands/webhooks.js.map +1 -0
  135. package/dist/src/commands/workflows.d.ts +116 -0
  136. package/dist/src/commands/workflows.js +1638 -729
  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 +2147 -0
  142. package/dist/src/lib/api-client.js +2042 -160
  143. package/dist/src/lib/api-client.js.map +1 -1
  144. package/dist/src/lib/app-match-guard.d.ts +44 -0
  145. package/dist/src/lib/app-match-guard.js +72 -0
  146. package/dist/src/lib/app-match-guard.js.map +1 -0
  147. package/dist/src/lib/app-settings-descriptor.d.ts +263 -0
  148. package/dist/src/lib/app-settings-descriptor.js +584 -0
  149. package/dist/src/lib/app-settings-descriptor.js.map +1 -0
  150. package/dist/src/lib/auth-flow.d.ts +8 -0
  151. package/dist/src/lib/batch.d.ts +26 -0
  152. package/dist/src/lib/batch.js +32 -0
  153. package/dist/src/lib/batch.js.map +1 -0
  154. package/dist/src/lib/block-layout.d.ts +160 -0
  155. package/dist/src/lib/block-layout.js +451 -0
  156. package/dist/src/lib/block-layout.js.map +1 -0
  157. package/dist/src/lib/block-selector.d.ts +58 -0
  158. package/dist/src/lib/block-selector.js +92 -0
  159. package/dist/src/lib/block-selector.js.map +1 -0
  160. package/dist/src/lib/canonical-json.d.ts +12 -0
  161. package/dist/src/lib/canonical-json.js +35 -0
  162. package/dist/src/lib/canonical-json.js.map +1 -0
  163. package/dist/src/lib/channel.d.ts +30 -0
  164. package/dist/src/lib/channel.js +68 -0
  165. package/dist/src/lib/channel.js.map +1 -0
  166. package/dist/src/lib/cli-manifest.d.ts +68 -0
  167. package/dist/src/lib/cli-manifest.js +71 -0
  168. package/dist/src/lib/cli-manifest.js.map +1 -0
  169. package/dist/src/lib/codegen-shared/generatedFiles.d.ts +101 -0
  170. package/dist/src/lib/codegen-shared/generatedFiles.js +191 -0
  171. package/dist/src/lib/codegen-shared/generatedFiles.js.map +1 -0
  172. package/dist/src/lib/codegen-shared/prettierStable.d.ts +262 -0
  173. package/dist/src/lib/codegen-shared/prettierStable.js +610 -0
  174. package/dist/src/lib/codegen-shared/prettierStable.js.map +1 -0
  175. package/dist/src/lib/codegen-shared/resolveCodegenSourceDir.d.ts +38 -0
  176. package/dist/src/lib/codegen-shared/resolveCodegenSourceDir.js +46 -0
  177. package/dist/src/lib/codegen-shared/resolveCodegenSourceDir.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 +696 -0
  183. package/dist/src/lib/config-object-descriptor.js.map +1 -0
  184. package/dist/src/lib/config-payload.d.ts +85 -0
  185. package/dist/src/lib/config-payload.js +116 -0
  186. package/dist/src/lib/config-payload.js.map +1 -0
  187. package/dist/src/lib/config-surface.d.ts +140 -0
  188. package/dist/src/lib/config-surface.js +317 -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 +517 -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/document-export-permissions.d.ts +30 -0
  236. package/dist/src/lib/document-export-permissions.js +54 -0
  237. package/dist/src/lib/document-export-permissions.js.map +1 -0
  238. package/dist/src/lib/env-resolver-core.d.ts +258 -0
  239. package/dist/src/lib/env-resolver-core.js +440 -0
  240. package/dist/src/lib/env-resolver-core.js.map +1 -0
  241. package/dist/src/lib/env-resolver.d.ts +99 -0
  242. package/dist/src/lib/env-resolver.js +153 -0
  243. package/dist/src/lib/env-resolver.js.map +1 -0
  244. package/dist/src/lib/fetch.d.ts +5 -0
  245. package/dist/src/lib/function-bundle.d.ts +141 -0
  246. package/dist/src/lib/function-bundle.js +333 -0
  247. package/dist/src/lib/function-bundle.js.map +1 -0
  248. package/dist/src/lib/function-collect.d.ts +123 -0
  249. package/dist/src/lib/function-collect.js +594 -0
  250. package/dist/src/lib/function-collect.js.map +1 -0
  251. package/dist/src/lib/function-db-types.d.ts +187 -0
  252. package/dist/src/lib/function-db-types.js +782 -0
  253. package/dist/src/lib/function-db-types.js.map +1 -0
  254. package/dist/src/lib/function-document-types.d.ts +50 -0
  255. package/dist/src/lib/function-document-types.js +163 -0
  256. package/dist/src/lib/function-document-types.js.map +1 -0
  257. package/dist/src/lib/function-grants-preflight.d.ts +64 -0
  258. package/dist/src/lib/function-grants-preflight.js +100 -0
  259. package/dist/src/lib/function-grants-preflight.js.map +1 -0
  260. package/dist/src/lib/function-log-tail.d.ts +83 -0
  261. package/dist/src/lib/function-log-tail.js +115 -0
  262. package/dist/src/lib/function-log-tail.js.map +1 -0
  263. package/dist/src/lib/function-schema-codegen.d.ts +135 -0
  264. package/dist/src/lib/function-schema-codegen.js +419 -0
  265. package/dist/src/lib/function-schema-codegen.js.map +1 -0
  266. package/dist/src/lib/function-sync.d.ts +263 -0
  267. package/dist/src/lib/function-sync.js +604 -0
  268. package/dist/src/lib/function-sync.js.map +1 -0
  269. package/dist/src/lib/function-triggers.d.ts +66 -0
  270. package/dist/src/lib/function-triggers.js +285 -0
  271. package/dist/src/lib/function-triggers.js.map +1 -0
  272. package/dist/src/lib/function-typecheck.d.ts +86 -0
  273. package/dist/src/lib/function-typecheck.js +370 -0
  274. package/dist/src/lib/function-typecheck.js.map +1 -0
  275. package/dist/src/lib/generated-allowlist.d.ts +28 -0
  276. package/dist/src/lib/generated-allowlist.js +281 -0
  277. package/dist/src/lib/generated-allowlist.js.map +1 -0
  278. package/dist/src/lib/generated-config-surfaces.d.ts +1755 -0
  279. package/dist/src/lib/generated-config-surfaces.js +6817 -0
  280. package/dist/src/lib/generated-config-surfaces.js.map +1 -0
  281. package/dist/src/lib/generated-sdk-types.d.ts +12 -0
  282. package/dist/src/lib/generated-sdk-types.js +13 -0
  283. package/dist/src/lib/generated-sdk-types.js.map +1 -0
  284. package/dist/src/lib/generated-template-lint.d.ts +212 -0
  285. package/dist/src/lib/generated-template-lint.js +624 -0
  286. package/dist/src/lib/generated-template-lint.js.map +1 -0
  287. package/dist/src/lib/generated-workflow-model-fields.d.ts +20 -0
  288. package/dist/src/lib/generated-workflow-model-fields.js +53 -0
  289. package/dist/src/lib/generated-workflow-model-fields.js.map +1 -0
  290. package/dist/src/lib/google-client-secret-status.d.ts +35 -0
  291. package/dist/src/lib/google-client-secret-status.js +56 -0
  292. package/dist/src/lib/google-client-secret-status.js.map +1 -0
  293. package/dist/src/lib/init-adopt.d.ts +16 -0
  294. package/dist/src/lib/init-adopt.js +34 -0
  295. package/dist/src/lib/init-adopt.js.map +1 -0
  296. package/dist/src/lib/init-assets.d.ts +39 -0
  297. package/dist/src/lib/init-assets.js +97 -0
  298. package/dist/src/lib/init-assets.js.map +1 -0
  299. package/dist/src/lib/init-client-platforms.d.ts +14 -0
  300. package/dist/src/lib/init-client-platforms.js +71 -0
  301. package/dist/src/lib/init-client-platforms.js.map +1 -0
  302. package/dist/src/lib/init-config.d.ts +98 -0
  303. package/dist/src/lib/init-config.js +186 -0
  304. package/dist/src/lib/init-config.js.map +1 -0
  305. package/dist/src/lib/init-email-redirect-uris.d.ts +37 -0
  306. package/dist/src/lib/init-email-redirect-uris.js +46 -0
  307. package/dist/src/lib/init-email-redirect-uris.js.map +1 -0
  308. package/dist/src/lib/init-ios-links.d.ts +91 -0
  309. package/dist/src/lib/init-ios-links.js +219 -0
  310. package/dist/src/lib/init-ios-links.js.map +1 -0
  311. package/dist/src/lib/init-plan.d.ts +80 -0
  312. package/dist/src/lib/init-plan.js +95 -0
  313. package/dist/src/lib/init-plan.js.map +1 -0
  314. package/dist/src/lib/init-production-env.d.ts +48 -0
  315. package/dist/src/lib/init-production-env.js +59 -0
  316. package/dist/src/lib/init-production-env.js.map +1 -0
  317. package/dist/src/lib/init-schema.d.ts +74 -0
  318. package/dist/src/lib/init-schema.js +358 -0
  319. package/dist/src/lib/init-schema.js.map +1 -0
  320. package/dist/src/lib/init-xcode.d.ts +34 -0
  321. package/dist/src/lib/init-xcode.js +138 -0
  322. package/dist/src/lib/init-xcode.js.map +1 -0
  323. package/dist/src/lib/integration-request-config.d.ts +30 -0
  324. package/dist/src/lib/integration-request-config.js +145 -0
  325. package/dist/src/lib/integration-request-config.js.map +1 -0
  326. package/dist/src/lib/integration-selector.d.ts +42 -0
  327. package/dist/src/lib/integration-selector.js +46 -0
  328. package/dist/src/lib/integration-selector.js.map +1 -0
  329. package/dist/src/lib/ios-app-id.d.ts +34 -0
  330. package/dist/src/lib/ios-app-id.js +69 -0
  331. package/dist/src/lib/ios-app-id.js.map +1 -0
  332. package/dist/src/lib/local-state.d.ts +55 -0
  333. package/dist/src/lib/local-state.js +167 -0
  334. package/dist/src/lib/local-state.js.map +1 -0
  335. package/dist/src/lib/local-test-cases.d.ts +63 -0
  336. package/dist/src/lib/local-test-cases.js +136 -0
  337. package/dist/src/lib/local-test-cases.js.map +1 -0
  338. package/dist/src/lib/log-inspection.d.ts +680 -0
  339. package/dist/src/lib/log-inspection.js +784 -0
  340. package/dist/src/lib/log-inspection.js.map +1 -0
  341. package/dist/src/lib/migration-nag.d.ts +49 -0
  342. package/dist/src/lib/migration-nag.js +164 -0
  343. package/dist/src/lib/migration-nag.js.map +1 -0
  344. package/dist/src/lib/object-status-filter.d.ts +22 -0
  345. package/dist/src/lib/object-status-filter.js +45 -0
  346. package/dist/src/lib/object-status-filter.js.map +1 -0
  347. package/dist/src/lib/output.d.ts +109 -0
  348. package/dist/src/lib/output.js +191 -8
  349. package/dist/src/lib/output.js.map +1 -1
  350. package/dist/src/lib/package-manager.d.ts +140 -0
  351. package/dist/src/lib/package-manager.js +305 -0
  352. package/dist/src/lib/package-manager.js.map +1 -0
  353. package/dist/src/lib/paginate.d.ts +83 -0
  354. package/dist/src/lib/paginate.js +95 -0
  355. package/dist/src/lib/paginate.js.map +1 -0
  356. package/dist/src/lib/platform-owned.d.ts +63 -0
  357. package/dist/src/lib/platform-owned.js +85 -0
  358. package/dist/src/lib/platform-owned.js.map +1 -0
  359. package/dist/src/lib/project-config.d.ts +122 -0
  360. package/dist/src/lib/project-config.js +244 -0
  361. package/dist/src/lib/project-config.js.map +1 -0
  362. package/dist/src/lib/query-operators.d.ts +43 -0
  363. package/dist/src/lib/query-operators.js +80 -0
  364. package/dist/src/lib/query-operators.js.map +1 -0
  365. package/dist/src/lib/record-filter.d.ts +18 -0
  366. package/dist/src/lib/record-filter.js +55 -0
  367. package/dist/src/lib/record-filter.js.map +1 -0
  368. package/dist/src/lib/refresh-admin-credentials.d.ts +65 -0
  369. package/dist/src/lib/refresh-admin-credentials.js +103 -0
  370. package/dist/src/lib/refresh-admin-credentials.js.map +1 -0
  371. package/dist/src/lib/resolve-init-dev-port.d.ts +56 -0
  372. package/dist/src/lib/resolve-init-dev-port.js +55 -0
  373. package/dist/src/lib/resolve-init-dev-port.js.map +1 -0
  374. package/dist/src/lib/resolve-init-server.d.ts +64 -0
  375. package/dist/src/lib/resolve-init-server.js +77 -0
  376. package/dist/src/lib/resolve-init-server.js.map +1 -0
  377. package/dist/src/lib/resolve-platform.d.ts +74 -0
  378. package/dist/src/lib/resolve-platform.js +105 -0
  379. package/dist/src/lib/resolve-platform.js.map +1 -0
  380. package/dist/src/lib/run-status.d.ts +19 -0
  381. package/dist/src/lib/run-status.generated.d.ts +39 -0
  382. package/dist/src/lib/run-status.generated.js +66 -0
  383. package/dist/src/lib/run-status.generated.js.map +1 -0
  384. package/dist/src/lib/run-status.js +19 -0
  385. package/dist/src/lib/run-status.js.map +1 -0
  386. package/dist/src/lib/server-text-normalization.d.ts +51 -0
  387. package/dist/src/lib/server-text-normalization.js +90 -0
  388. package/dist/src/lib/server-text-normalization.js.map +1 -0
  389. package/dist/src/lib/server-url.d.ts +22 -0
  390. package/dist/src/lib/server-url.js +33 -0
  391. package/dist/src/lib/server-url.js.map +1 -0
  392. package/dist/src/lib/signing-secret-status.d.ts +81 -0
  393. package/dist/src/lib/signing-secret-status.js +116 -0
  394. package/dist/src/lib/signing-secret-status.js.map +1 -0
  395. package/dist/src/lib/skill-installer.d.ts +25 -0
  396. package/dist/src/lib/skill-installer.js +266 -0
  397. package/dist/src/lib/skill-installer.js.map +1 -0
  398. package/dist/src/lib/snapshots.d.ts +98 -0
  399. package/dist/src/lib/snapshots.js +294 -0
  400. package/dist/src/lib/snapshots.js.map +1 -0
  401. package/dist/src/lib/swift-codegen/banners.d.ts +18 -0
  402. package/dist/src/lib/swift-codegen/banners.js +19 -0
  403. package/dist/src/lib/swift-codegen/banners.js.map +1 -0
  404. package/dist/src/lib/swift-codegen/dbGenerator.d.ts +113 -0
  405. package/dist/src/lib/swift-codegen/dbGenerator.js +918 -0
  406. package/dist/src/lib/swift-codegen/dbGenerator.js.map +1 -0
  407. package/dist/src/lib/swift-codegen/dbSwiftTypes.d.ts +42 -0
  408. package/dist/src/lib/swift-codegen/dbSwiftTypes.js +100 -0
  409. package/dist/src/lib/swift-codegen/dbSwiftTypes.js.map +1 -0
  410. package/dist/src/lib/swift-codegen/functionGenerator.d.ts +119 -0
  411. package/dist/src/lib/swift-codegen/functionGenerator.js +413 -0
  412. package/dist/src/lib/swift-codegen/functionGenerator.js.map +1 -0
  413. package/dist/src/lib/swift-codegen/generator.d.ts +100 -0
  414. package/dist/src/lib/swift-codegen/generator.js +451 -0
  415. package/dist/src/lib/swift-codegen/generator.js.map +1 -0
  416. package/dist/src/lib/swift-codegen/schemaToSwift.d.ts +87 -0
  417. package/dist/src/lib/swift-codegen/schemaToSwift.js +661 -0
  418. package/dist/src/lib/swift-codegen/schemaToSwift.js.map +1 -0
  419. package/dist/src/lib/swift-codegen/siblingSymbols.d.ts +94 -0
  420. package/dist/src/lib/swift-codegen/siblingSymbols.js +155 -0
  421. package/dist/src/lib/swift-codegen/siblingSymbols.js.map +1 -0
  422. package/dist/src/lib/swift-codegen/swiftNaming.d.ts +85 -0
  423. package/dist/src/lib/swift-codegen/swiftNaming.js +198 -0
  424. package/dist/src/lib/swift-codegen/swiftNaming.js.map +1 -0
  425. package/dist/src/lib/sync-dir-selector.d.ts +21 -0
  426. package/dist/src/lib/sync-dir-selector.js +30 -0
  427. package/dist/src/lib/sync-dir-selector.js.map +1 -0
  428. package/dist/src/lib/sync-paths.d.ts +128 -0
  429. package/dist/src/lib/sync-paths.js +195 -0
  430. package/dist/src/lib/sync-paths.js.map +1 -0
  431. package/dist/src/lib/sync-resource-types.d.ts +563 -0
  432. package/dist/src/lib/sync-resource-types.js +1073 -0
  433. package/dist/src/lib/sync-resource-types.js.map +1 -0
  434. package/dist/src/lib/sync-selectors.d.ts +95 -0
  435. package/dist/src/lib/sync-selectors.js +228 -0
  436. package/dist/src/lib/sync-selectors.js.map +1 -0
  437. package/dist/src/lib/template.d.ts +170 -0
  438. package/dist/src/lib/template.js +484 -68
  439. package/dist/src/lib/template.js.map +1 -1
  440. package/dist/src/lib/test-case-file-names.d.ts +40 -0
  441. package/dist/src/lib/test-case-file-names.js +91 -0
  442. package/dist/src/lib/test-case-file-names.js.map +1 -0
  443. package/dist/src/lib/test-case-keys.d.ts +29 -0
  444. package/dist/src/lib/test-case-keys.js +55 -0
  445. package/dist/src/lib/test-case-keys.js.map +1 -0
  446. package/dist/src/lib/test-case-variables.d.ts +29 -0
  447. package/dist/src/lib/test-case-variables.js +71 -0
  448. package/dist/src/lib/test-case-variables.js.map +1 -0
  449. package/dist/src/lib/token-inject.d.ts +56 -0
  450. package/dist/src/lib/token-inject.js +204 -0
  451. package/dist/src/lib/token-inject.js.map +1 -0
  452. package/dist/src/lib/toml-database-config.d.ts +123 -0
  453. package/dist/src/lib/toml-database-config.js +544 -0
  454. package/dist/src/lib/toml-database-config.js.map +1 -0
  455. package/dist/src/lib/toml-metadata-config.d.ts +151 -0
  456. package/dist/src/lib/toml-metadata-config.js +476 -0
  457. package/dist/src/lib/toml-metadata-config.js.map +1 -0
  458. package/dist/src/lib/toml-native-form.d.ts +46 -0
  459. package/dist/src/lib/toml-native-form.js +78 -0
  460. package/dist/src/lib/toml-native-form.js.map +1 -0
  461. package/dist/src/lib/toml-params-validator.d.ts +129 -0
  462. package/dist/src/lib/toml-params-validator.js +298 -0
  463. package/dist/src/lib/toml-params-validator.js.map +1 -0
  464. package/dist/src/lib/toml-scalar-edit.d.ts +43 -0
  465. package/dist/src/lib/toml-scalar-edit.js +283 -0
  466. package/dist/src/lib/toml-scalar-edit.js.map +1 -0
  467. package/dist/src/lib/user-selector.d.ts +24 -0
  468. package/dist/src/lib/user-selector.js +33 -0
  469. package/dist/src/lib/user-selector.js.map +1 -0
  470. package/dist/src/lib/version-check.d.ts +35 -0
  471. package/dist/src/lib/version-check.js +241 -0
  472. package/dist/src/lib/version-check.js.map +1 -0
  473. package/dist/src/lib/watch.d.ts +121 -0
  474. package/dist/src/lib/watch.js +169 -0
  475. package/dist/src/lib/watch.js.map +1 -0
  476. package/dist/src/lib/web-url.d.ts +40 -0
  477. package/dist/src/lib/web-url.js +76 -0
  478. package/dist/src/lib/web-url.js.map +1 -0
  479. package/dist/src/lib/webhook-deliver.d.ts +209 -0
  480. package/dist/src/lib/webhook-deliver.js +519 -0
  481. package/dist/src/lib/webhook-deliver.js.map +1 -0
  482. package/dist/src/lib/workflow-apply.d.ts +110 -0
  483. package/dist/src/lib/workflow-apply.js +164 -0
  484. package/dist/src/lib/workflow-apply.js.map +1 -0
  485. package/dist/src/lib/workflow-codegen/generated-schema-descriptor.d.ts +129 -0
  486. package/dist/src/lib/workflow-codegen/generated-schema-descriptor.js +269 -0
  487. package/dist/src/lib/workflow-codegen/generated-schema-descriptor.js.map +1 -0
  488. package/dist/src/lib/workflow-codegen/generator.d.ts +96 -0
  489. package/dist/src/lib/workflow-codegen/generator.js +361 -0
  490. package/dist/src/lib/workflow-codegen/generator.js.map +1 -0
  491. package/dist/src/lib/workflow-codegen/invokerIR.d.ts +94 -0
  492. package/dist/src/lib/workflow-codegen/invokerIR.js +76 -0
  493. package/dist/src/lib/workflow-codegen/invokerIR.js.map +1 -0
  494. package/dist/src/lib/workflow-codegen/naming.d.ts +33 -0
  495. package/dist/src/lib/workflow-codegen/naming.js +81 -0
  496. package/dist/src/lib/workflow-codegen/naming.js.map +1 -0
  497. package/dist/src/lib/workflow-codegen/schemaToTs.d.ts +80 -0
  498. package/dist/src/lib/workflow-codegen/schemaToTs.js +303 -0
  499. package/dist/src/lib/workflow-codegen/schemaToTs.js.map +1 -0
  500. package/dist/src/lib/workflow-config-apply.d.ts +70 -0
  501. package/dist/src/lib/workflow-config-apply.js +137 -0
  502. package/dist/src/lib/workflow-config-apply.js.map +1 -0
  503. package/dist/src/lib/workflow-config-sidecar.d.ts +63 -0
  504. package/dist/src/lib/workflow-config-sidecar.js +96 -0
  505. package/dist/src/lib/workflow-config-sidecar.js.map +1 -0
  506. package/dist/src/lib/workflow-defaults.d.ts +29 -0
  507. package/dist/src/lib/workflow-defaults.js +41 -0
  508. package/dist/src/lib/workflow-defaults.js.map +1 -0
  509. package/dist/src/lib/workflow-field-descriptor.d.ts +91 -0
  510. package/dist/src/lib/workflow-field-descriptor.js +153 -0
  511. package/dist/src/lib/workflow-field-descriptor.js.map +1 -0
  512. package/dist/src/lib/workflow-fragments.d.ts +64 -0
  513. package/dist/src/lib/workflow-fragments.js +342 -0
  514. package/dist/src/lib/workflow-fragments.js.map +1 -0
  515. package/dist/src/lib/workflow-include-preserve.d.ts +76 -0
  516. package/dist/src/lib/workflow-include-preserve.js +286 -0
  517. package/dist/src/lib/workflow-include-preserve.js.map +1 -0
  518. package/dist/src/lib/workflow-payload.d.ts +98 -0
  519. package/dist/src/lib/workflow-payload.js +178 -0
  520. package/dist/src/lib/workflow-payload.js.map +1 -0
  521. package/dist/src/lib/workflow-toml-validator.d.ts +207 -0
  522. package/dist/src/lib/workflow-toml-validator.js +762 -0
  523. package/dist/src/lib/workflow-toml-validator.js.map +1 -0
  524. package/dist/src/lib/workflow-usage.d.ts +198 -0
  525. package/dist/src/lib/workflow-usage.js +312 -0
  526. package/dist/src/lib/workflow-usage.js.map +1 -0
  527. package/dist/src/types/index.d.ts +591 -0
  528. package/dist/src/validators.d.ts +65 -0
  529. package/dist/src/validators.js +64 -0
  530. package/dist/src/validators.js.map +1 -0
  531. package/package.json +34 -9
@@ -0,0 +1,626 @@
1
+ import { readFileSync, statSync } from "fs";
2
+ import { ApiClient } from "../lib/api-client.js";
3
+ import { resolveAppId, getServerUrl } from "../lib/config.js";
4
+ import { deliverWebhookTest, } from "../lib/webhook-deliver.js";
5
+ import { success, error, info, keyValue, result as printResult, formatTable, formatId, formatDate, formatStatus, json, divider, dim, warn, } from "../lib/output.js";
6
+ import { assertSupportedFlags, buildWebhookEnvelope, } from "../lib/log-inspection.js";
7
+ import { confirmPrompt } from "../lib/confirm-prompt.js";
8
+ import { parseStatusFilter } from "../lib/object-status-filter.js";
9
+ import { signingSecretStatusWarning, signingSecretHealthWarning, previousSigningSecretWarning, formatGracePeriodMs, } from "../lib/signing-secret-status.js";
10
+ import { fetchAll } from "./sync.js";
11
+ /**
12
+ * Platform ceiling on a webhook body (`MAX_WEBHOOK_BODY_BYTES_LIMIT`, 25 MiB).
13
+ * A per-webhook cap can be lower — that one is the server's call and comes back
14
+ * as a `body_too_large` verdict. This bound only stops the CLI from reading and
15
+ * encoding a file no webhook could ever accept.
16
+ */
17
+ const MAX_VERIFY_BODY_BYTES = 25 * 1024 * 1024;
18
+ export function registerWebhooksCommands(program) {
19
+ const webhooks = program
20
+ .command("webhooks")
21
+ .description("Manage inbound webhooks that trigger workflows")
22
+ .addHelpText("after", `
23
+ Examples:
24
+ $ primitive webhooks list
25
+ $ primitive secrets set STRIPE_WEBHOOK_SECRET --value whsec_...
26
+ $ primitive config create webhook stripe-events # then edit webhooks/stripe-events.toml and: primitive config push
27
+ $ primitive webhooks get 01HXY...
28
+ $ primitive webhooks rotate-secret 01HXY... --secret "{{secrets.STRIPE_WEBHOOK_SECRET_NEXT}}"
29
+ $ primitive webhooks events 01HXY...
30
+ $ primitive webhooks archive 01HXY... # retire it (soft delete)
31
+ $ primitive webhooks test 01HXY... --payload '{"event":"test"}'
32
+ $ primitive webhooks verify 01HXY... --header 'Stripe-Signature: t=...,v1=...' --body-file captured.json
33
+ `);
34
+ // Server-side configuration is authored in TOML and applied with `config push`
35
+ // (issue #2645) — this group no longer carries config-setting flags.
36
+ webhooks.addHelpText("after", `
37
+ Configuration lives in webhooks/<key>.toml:
38
+ $ primitive config fields webhook # the file's keys, types and defaults
39
+ $ primitive config create webhook <key> # scaffold one locally
40
+ $ primitive config set webhook/<key> <path>=<value>
41
+ $ primitive config push --only webhook/<key>
42
+ `);
43
+ // List webhooks
44
+ webhooks
45
+ .command("list")
46
+ .description("List webhooks")
47
+ .argument("[app-id]", "App ID (uses current app if not specified)")
48
+ .option("--app <app-id>", "App ID")
49
+ .option("--status <status>", "Filter by status: active, inactive, archived")
50
+ .option("--json", "Output as JSON")
51
+ .action(async (appId, options) => {
52
+ const resolvedAppId = resolveAppId(appId, options);
53
+ const client = new ApiClient();
54
+ try {
55
+ // #2803 — `paused` is gone; refuse it by name rather than returning the
56
+ // empty list a canonical filter would produce.
57
+ const status = parseStatusFilter("webhooks", options.status, [
58
+ "active",
59
+ "inactive",
60
+ "archived",
61
+ ]);
62
+ // Drain every page (#2232). The admin list endpoint pages at 25 by
63
+ // default, so an app anywhere near the per-app webhook cap of 50 was
64
+ // silently truncated here — and this is the command an operator uses to
65
+ // find a webhook to hard-delete when a create is refused at the cap.
66
+ const items = await fetchAll((params) => client.listWebhooks(resolvedAppId, {
67
+ ...params,
68
+ status,
69
+ }));
70
+ if (options.json) {
71
+ json(items);
72
+ return;
73
+ }
74
+ if (!items || items.length === 0) {
75
+ info("No webhooks found.");
76
+ return;
77
+ }
78
+ console.log(formatTable(items, [
79
+ { header: "KEY", key: "webhookKey" },
80
+ { header: "NAME", key: "displayName" },
81
+ { header: "SCHEME", key: "verificationScheme" },
82
+ { header: "WORKFLOW", key: "workflowKey" },
83
+ { header: "STATUS", key: "status", format: formatStatus },
84
+ { header: "LAST TRIGGERED", key: "lastTriggeredAt", format: formatDate },
85
+ ]));
86
+ }
87
+ catch (err) {
88
+ error(err.message);
89
+ process.exit(1);
90
+ }
91
+ });
92
+ webhooks
93
+ .command("get")
94
+ .description("Get webhook details")
95
+ .argument("<webhook-id>", "Webhook ID")
96
+ .option("--app <app-id>", "App ID (uses current app if not specified)")
97
+ .option("--json", "Output as JSON")
98
+ .action(async (webhookId, options) => {
99
+ const resolvedAppId = resolveAppId(undefined, options);
100
+ const client = new ApiClient();
101
+ try {
102
+ const result = await client.getWebhook(resolvedAppId, webhookId);
103
+ if (options.json) {
104
+ json(result);
105
+ return;
106
+ }
107
+ printResult("Webhook ID", result.webhookId);
108
+ printResult("Key", result.webhookKey);
109
+ printResult("Name", result.displayName);
110
+ printResult("Description", result.description || "-");
111
+ printResult("Status", formatStatus(result.status));
112
+ printResult("Workflow Key", result.workflowKey);
113
+ printResult("Verification Scheme", result.verificationScheme);
114
+ printResult("Signing Secret", result.signingSecret || "-");
115
+ printResult("Previous Signing Secret", result.previousSigningSecret || "-");
116
+ // The grace slot's own status, so an operator can tell "no previous
117
+ // key" from "a raw value is still live there" — both print the previous
118
+ // secret as `-`, because a withheld value is never echoed (#2383).
119
+ printResult("Previous Signing Secret Status", result.previousSigningSecretStatus || "-");
120
+ // A stored value that is not a reference is never echoed, so say what
121
+ // it is here rather than showing an empty field: a legacy literal from
122
+ // before reference-only still verifies deliveries, a malformed
123
+ // reference does not (#2332). Same wording as `config pull`.
124
+ const signingSecretWarning = signingSecretStatusWarning(result.signingSecretStatus, {
125
+ subject: "Signing secret",
126
+ blocks: "this webhook cannot be updated or rotated",
127
+ });
128
+ if (signingSecretWarning)
129
+ warn(signingSecretWarning);
130
+ // The grace slot gets its own line: a raw value there keeps verifying
131
+ // deliveries even though the row's current slot reads as migrated
132
+ // (#2383). The lever is the grace period, not a migration.
133
+ const previousWarning = previousSigningSecretWarning(result.previousSigningSecretStatus, { subject: "Previous signing secret" });
134
+ if (previousWarning)
135
+ warn(previousWarning);
136
+ // The health axis, per slot — anything that is not `ok`.
137
+ const healthWarning = signingSecretHealthWarning(result.signingSecretHealth, { subject: "Signing secret" });
138
+ if (healthWarning)
139
+ warn(healthWarning);
140
+ const previousHealthWarning = signingSecretHealthWarning(result.previousSigningSecretHealth, { subject: "Previous signing secret" });
141
+ if (previousHealthWarning)
142
+ warn(previousHealthWarning);
143
+ divider();
144
+ info("Configuration:");
145
+ printResult(" Tolerance Seconds", String(result.toleranceSeconds ?? "-"));
146
+ printResult(" Deduplication", result.deduplicationEnabled ? "enabled" : "disabled");
147
+ printResult(" Dedup Window", result.deduplicationWindowMs ? `${result.deduplicationWindowMs}ms` : "-");
148
+ printResult(" Max Body Bytes", result.maxBodyBytes ? `${result.maxBodyBytes}` : "default (5 MiB)");
149
+ // Not a truthiness test: a stored `0` means immediate cutover, which is
150
+ // the opposite of the unset case's 24 h default (#2383).
151
+ printResult(" Grace Period", formatGracePeriodMs(result.secretGracePeriodMs));
152
+ printResult(" Allowed IPs", result.allowedIpCidrs || "-");
153
+ printResult(" Input Mapping", result.inputMapping || "-");
154
+ divider();
155
+ printResult("Last Triggered", result.lastTriggeredAt ? formatDate(result.lastTriggeredAt) : "never");
156
+ printResult("Created", formatDate(result.createdAt));
157
+ printResult("Modified", formatDate(result.modifiedAt));
158
+ }
159
+ catch (err) {
160
+ error(err.message);
161
+ process.exit(1);
162
+ }
163
+ });
164
+ // #2645 criterion 9 / #2803 — the operational verbs. They are the only
165
+ // writers of `status`, which is server-owned and no longer a `[webhook]`
166
+ // TOML key: `config push` can neither set nor clear it, so pushing a file
167
+ // pulled before a pause no longer puts the endpoint back in service.
168
+ webhooks
169
+ .command("disable")
170
+ .description("Take a webhook out of service now. Inbound deliveries are refused with a 410; the committed configuration is unchanged.")
171
+ .argument("<webhook-id>", "Webhook ID")
172
+ .option("--app <app-id>", "App ID (uses current app if not specified)")
173
+ .option("--json", "Output as JSON")
174
+ .action(async (webhookId, options) => {
175
+ const resolvedAppId = resolveAppId(undefined, options);
176
+ const client = new ApiClient();
177
+ try {
178
+ const result = await client.setWebhookAvailability(resolvedAppId, webhookId, "disable");
179
+ if (options.json) {
180
+ json(result);
181
+ return;
182
+ }
183
+ success(`Webhook disabled: ${result.webhookKey || webhookId}`);
184
+ info("Deliveries are refused with a 410 — `primitive webhooks enable` puts it back.");
185
+ }
186
+ catch (err) {
187
+ error(err.message);
188
+ process.exit(1);
189
+ }
190
+ });
191
+ webhooks
192
+ .command("enable")
193
+ .description("Put a webhook back in service.")
194
+ .argument("<webhook-id>", "Webhook ID")
195
+ .option("--app <app-id>", "App ID (uses current app if not specified)")
196
+ .option("--json", "Output as JSON")
197
+ .action(async (webhookId, options) => {
198
+ const resolvedAppId = resolveAppId(undefined, options);
199
+ const client = new ApiClient();
200
+ try {
201
+ const result = await client.setWebhookAvailability(resolvedAppId, webhookId, "enable");
202
+ if (options.json) {
203
+ json(result);
204
+ return;
205
+ }
206
+ success(`Webhook enabled: ${result.webhookKey || webhookId}`);
207
+ }
208
+ catch (err) {
209
+ error(err.message);
210
+ process.exit(1);
211
+ }
212
+ });
213
+ // #2907 — the delete flow's CLI spelling. Not a second writer of `status`:
214
+ // this is the plain `DELETE` the server has always answered by writing the
215
+ // tombstone, which until now only the admin API and the console could reach.
216
+ // Named `archive`, not `delete`, because a configuration noun gets no
217
+ // `delete` verb (docs/cli-design.md) and prune-by-push stays the only CLI
218
+ // hard-delete path.
219
+ webhooks
220
+ .command("archive")
221
+ .description("Retire a webhook (soft delete). Delete-lifecycle, not `disable`: the row is kept, keeps its key and its capped slot, and there is no un-archive.")
222
+ .argument("<webhook-id>", "Webhook ID")
223
+ .option("--app <app-id>", "App ID (uses current app if not specified)")
224
+ .option("-y, --yes", "Skip confirmation prompt")
225
+ .option("--json", "Output as JSON")
226
+ .addHelpText("after", `
227
+ What archiving a webhook costs:
228
+ Inbound deliveries are refused, as they are for a disabled webhook.
229
+ The archived row still holds its webhookKey AND its slot under the per-app
230
+ webhook cap (50) — archiving frees neither, which is why an archived row a
231
+ delivery still reaches is not free.
232
+ \`primitive webhooks enable\` refuses an archived webhook; there is no
233
+ un-archive.
234
+
235
+ Reclaiming the key and the slot means hard-deleting the row:
236
+ $ rm webhooks/<key>.toml
237
+ $ primitive config push --prune # confirmed; hard-deletes the row
238
+ # or hard-delete it in the console, then re-add the file and push.
239
+ `)
240
+ .action(async (webhookId, options) => {
241
+ const resolvedAppId = resolveAppId(undefined, options);
242
+ if (!options.yes) {
243
+ let confirmed;
244
+ try {
245
+ confirmed = await confirmPrompt(`Archive webhook ${webhookId}? Deliveries stop, the row keeps its key ` +
246
+ `and its capped slot, and there is no un-archive.`);
247
+ }
248
+ catch (err) {
249
+ error(err.message);
250
+ process.exit(1);
251
+ }
252
+ if (!confirmed) {
253
+ info("Cancelled.");
254
+ return;
255
+ }
256
+ }
257
+ const client = new ApiClient();
258
+ try {
259
+ // The soft delete: no `hard`, so the server writes the tombstone. The
260
+ // `--hard` path stays out of the CLI surface — prune-by-push owns it.
261
+ const result = await client.deleteWebhook(resolvedAppId, webhookId);
262
+ if (options.json) {
263
+ json(result);
264
+ return;
265
+ }
266
+ success(`Webhook archived: ${webhookId}`);
267
+ info("Deliveries are refused. The row still holds its key and its capped slot — reclaim both by removing its file and running a confirmed `primitive config push --prune`.");
268
+ }
269
+ catch (err) {
270
+ error(err.message);
271
+ process.exit(1);
272
+ }
273
+ });
274
+ webhooks
275
+ .command("rotate-secret")
276
+ .description("Rotate the signing secret for a webhook")
277
+ .argument("<webhook-id>", "Webhook ID")
278
+ .requiredOption("--secret <ref>", "New signing secret, as a {{secrets.KEY}} reference to an app secret")
279
+ .option("--app <app-id>", "App ID (uses current app if not specified)")
280
+ .option("--json", "Output as JSON")
281
+ .action(async (webhookId, options) => {
282
+ const resolvedAppId = resolveAppId(undefined, options);
283
+ const client = new ApiClient();
284
+ try {
285
+ const result = await client.rotateWebhookSecret(resolvedAppId, webhookId, {
286
+ signingSecret: options.secret,
287
+ });
288
+ if (options.json) {
289
+ json(result);
290
+ return;
291
+ }
292
+ // Rotation now returns the serialized webhook on both surfaces, and
293
+ // both references are plain text (the secret values live only in the
294
+ // secret store), so print them rather than a masked value.
295
+ success("Signing secret rotated.");
296
+ if (result.signingSecret) {
297
+ keyValue("Signing Secret", result.signingSecret);
298
+ }
299
+ if (result.previousSigningSecret) {
300
+ keyValue("Previous Signing Secret", result.previousSigningSecret);
301
+ }
302
+ }
303
+ catch (err) {
304
+ error(err.message);
305
+ process.exit(1);
306
+ }
307
+ });
308
+ // List webhook events
309
+ webhooks
310
+ .command("events")
311
+ .description("View webhook event history")
312
+ .argument("<webhook-id>", "Webhook ID")
313
+ .option("--app <app-id>", "App ID (uses current app if not specified)")
314
+ .option("--limit <n>", "Number of events to show", "20")
315
+ .option("--cursor <cursor>", "Pagination cursor from a previous page")
316
+ // Declared so they can be rejected with a clear message instead of being
317
+ // silently ignored — status/time filtering on webhook events is deferred to
318
+ // Phase B (issue #1967). See assertSupportedFlags below.
319
+ .option("--status <status>", "(not supported yet — deferred to Phase B)")
320
+ .option("--from <iso>", "(not supported yet — deferred to Phase B)")
321
+ .option("--to <iso>", "(not supported yet — deferred to Phase B)")
322
+ .option("--json", "Output as JSON")
323
+ .action(async (webhookId, options) => {
324
+ const resolvedAppId = resolveAppId(undefined, options);
325
+ const client = new ApiClient();
326
+ try {
327
+ // The webhook-events route serves limit + cursor only; reject the
328
+ // Phase B filters cleanly rather than dropping them silently.
329
+ assertSupportedFlags("webhook events", { status: options.status, from: options.from, to: options.to }, ["limit", "cursor"]);
330
+ const page = await client.listWebhookEvents(resolvedAppId, webhookId, {
331
+ limit: parseInt(options.limit),
332
+ ...(options.cursor && { cursor: options.cursor }),
333
+ });
334
+ if (options.json) {
335
+ json(buildWebhookEnvelope(page.items, page));
336
+ return;
337
+ }
338
+ const printCursorHint = () => {
339
+ if (!page.nextCursor)
340
+ return;
341
+ console.log();
342
+ dim(`More events. Use --cursor ${page.nextCursor} for the next page.`);
343
+ };
344
+ if (!page.items || page.items.length === 0) {
345
+ info("No events found.");
346
+ printCursorHint();
347
+ return;
348
+ }
349
+ console.log(formatTable(page.items, [
350
+ { header: "EVENT ID", key: "eventId", format: formatId },
351
+ { header: "EXTERNAL ID", key: "externalEventId" },
352
+ { header: "STATUS", key: "status", format: formatStatus },
353
+ { header: "HTTP", key: "httpStatus" },
354
+ { header: "REASON", key: "rejectionReason" },
355
+ { header: "CREATED", key: "createdAt", format: formatDate },
356
+ ]));
357
+ printCursorHint();
358
+ }
359
+ catch (err) {
360
+ error(err.message);
361
+ process.exit(1);
362
+ }
363
+ });
364
+ // Test webhook
365
+ webhooks
366
+ .command("test")
367
+ .description("Sign a test payload for a webhook (returns body + headers)")
368
+ .argument("<webhook-id>", "Webhook ID")
369
+ .option("--app <app-id>", "App ID (uses current app if not specified)")
370
+ .option("--payload <json>", "Test payload as JSON, signed verbatim. Pass the event " +
371
+ "object directly (e.g. '{\"type\":\"event\",\"data\":{…}}'); it is used " +
372
+ "as-is. Omit it to sign a canned webhook.test ping.")
373
+ .option("--deliver", "Post the signed payload to the webhook's real receive endpoint, " +
374
+ "firing the function (or workflow) for real and reporting the run")
375
+ .option("--json", "Output as JSON")
376
+ .addHelpText("after", `
377
+ By default this command only SIGNS: it prints the signature headers and the
378
+ signed body, posts nothing, and so starts no run and records no delivery.
379
+
380
+ --deliver posts that signed body to the webhook's receive endpoint,
381
+ POST /app/{appId}/webhook/{webhookKey} — the same unauthenticated path a
382
+ provider uses, so signature verification, handshake rules, deduplication and
383
+ dispatch all run for real. That is a real delivery: a real event row is written
384
+ and the signed body's dedup key is spent (permanently on the 'github' scheme).
385
+ It reports the delivery's event id and the run id, and exits non-zero unless a
386
+ dispatch was positively confirmed; --json carries an outcome of
387
+ "dispatched" | "refused" | "unconfirmed".
388
+
389
+ The value of --payload is signed exactly as given (WYSIWYG). A JSON object is
390
+ used as the test body verbatim, so a wrapped payload such as '{"payload":{…}}'
391
+ signs the literal wrapper — do not wrap the event. Omitting --payload (or
392
+ passing a non-object such as an array) signs the canned
393
+ {"type":"webhook.test", …} ping.
394
+ `)
395
+ .action(async (webhookId, options) => {
396
+ const code = await runWebhooksTest(webhookId, options);
397
+ if (code !== 0)
398
+ process.exit(code);
399
+ });
400
+ // Verify a captured delivery's signature
401
+ webhooks
402
+ .command("verify")
403
+ .description("Check whether signature headers you captured verify against a webhook")
404
+ .argument("<webhook-id>", "Webhook ID")
405
+ .option("--app <app-id>", "App ID (uses current app if not specified)")
406
+ .option("--header <name: value>", "A header from the captured delivery. Repeatable.", (value, previous) => [...(previous || []), value], [])
407
+ .option("--body <text>", "The captured delivery body, as text")
408
+ .option("--body-file <path>", "Read the captured delivery body from a file")
409
+ .option("--json", "Output as JSON")
410
+ .addHelpText("after", `
411
+ Runs the webhook's configured verifier over the body and headers you supply and
412
+ reports whether that signature checks out — the useful question when a real
413
+ delivery was rejected 401, and the only way to check a scheme the platform holds
414
+ only public key material for (discord, jwt, plaid), which \`webhooks test\`
415
+ cannot preview.
416
+
417
+ Nothing is delivered: no workflow runs, and no delivery is recorded (this check
418
+ never appears in \`primitive webhooks events\`).
419
+
420
+ It answers SIGNATURE verification only. A real delivery is also subject to the
421
+ webhook's status and IP allowlist before verification, and to handshake rules
422
+ and deduplication after it.
423
+
424
+ Exits 0 when the signature verifies and non-zero otherwise, so it composes in a
425
+ script.
426
+
427
+ $ primitive webhooks verify 01HXY... \\
428
+ --header 'Stripe-Signature: t=1754...,v1=abc...' \\
429
+ --body-file captured-delivery.json
430
+ `)
431
+ .action(async (webhookId, options) => {
432
+ const resolvedAppId = resolveAppId(undefined, options);
433
+ if (options.body !== undefined && options.bodyFile !== undefined) {
434
+ error("Pass --body or --body-file, not both.");
435
+ process.exit(1);
436
+ }
437
+ let rawBody;
438
+ let bodyBase64;
439
+ if (options.bodyFile !== undefined) {
440
+ let bytes;
441
+ try {
442
+ // Size first: a mistakenly-passed large file should be a clear CLI
443
+ // error rather than a buffer the command tries to base64 and ship.
444
+ const { size } = statSync(options.bodyFile);
445
+ if (size > MAX_VERIFY_BODY_BYTES) {
446
+ error(`--body-file is ${size} bytes, over the ${MAX_VERIFY_BODY_BYTES}-byte platform maximum for a webhook body. A delivery that large is refused before its signature is checked.`);
447
+ process.exit(1);
448
+ return;
449
+ }
450
+ bytes = readFileSync(options.bodyFile);
451
+ }
452
+ catch (err) {
453
+ error(`Could not read --body-file: ${err.message}`);
454
+ process.exit(1);
455
+ return;
456
+ }
457
+ // A signature is over BYTES. Decoding a capture that is not valid
458
+ // UTF-8 replaces each bad byte with U+FFFD, so sending it as `rawBody`
459
+ // would check the signature against bytes the provider never sent and
460
+ // report a confident `sig_invalid` — the wrong answer in exactly the
461
+ // case this command exists for. `bodyBase64` carries those bytes
462
+ // intact, so only a body that round-trips losslessly goes as text.
463
+ const asText = bytes.toString("utf-8");
464
+ if (Buffer.from(asText, "utf-8").equals(bytes)) {
465
+ rawBody = asText;
466
+ }
467
+ else {
468
+ bodyBase64 = bytes.toString("base64");
469
+ }
470
+ }
471
+ else {
472
+ // An empty body is a legitimate delivery, so an omitted --body means
473
+ // "the delivery carried no body" rather than "no body was supplied".
474
+ rawBody = options.body ?? "";
475
+ }
476
+ // Ordered pairs, not an object: a real capture can carry the same field
477
+ // name on more than one line, which an object cannot represent.
478
+ const headers = [];
479
+ for (const entry of (options.header || [])) {
480
+ const separator = entry.indexOf(":");
481
+ if (separator <= 0) {
482
+ error(`Invalid --header '${entry}'. Use 'Name: value'.`);
483
+ process.exit(1);
484
+ }
485
+ headers.push([
486
+ entry.slice(0, separator).trim(),
487
+ entry.slice(separator + 1).trim(),
488
+ ]);
489
+ }
490
+ const client = new ApiClient();
491
+ try {
492
+ const result = await client.verifyWebhook(resolvedAppId, webhookId, {
493
+ headers,
494
+ // Exactly one body form — the server refuses a request naming both.
495
+ ...(bodyBase64 !== undefined ? { bodyBase64 } : { rawBody }),
496
+ });
497
+ if (options.json) {
498
+ json(result);
499
+ }
500
+ else if (result.verified) {
501
+ success("Signature verified.");
502
+ keyValue(" Scheme", String(result.verificationScheme));
503
+ if (result.dedupKey)
504
+ keyValue(" Dedup key", String(result.dedupKey));
505
+ if (result.externalEventId) {
506
+ keyValue(" Event ID", String(result.externalEventId));
507
+ }
508
+ }
509
+ else {
510
+ error("Signature did NOT verify.");
511
+ keyValue(" Scheme", String(result.verificationScheme));
512
+ keyValue(" Reason", String(result.rejectionReason || "unknown"));
513
+ }
514
+ if (result.webhookStatus && result.webhookStatus !== "active") {
515
+ warn(`This webhook is ${result.webhookStatus} — a live delivery would be refused before its signature was checked.`);
516
+ }
517
+ if (!result.verified)
518
+ process.exit(1);
519
+ }
520
+ catch (err) {
521
+ error(err?.code ? `${err.message} (${err.code})` : err.message);
522
+ process.exit(1);
523
+ }
524
+ });
525
+ }
526
+ /**
527
+ * `primitive webhooks test [--deliver]` — the command body, exported so its
528
+ * wiring and its outcome mapping are testable without a network (#3321).
529
+ *
530
+ * Returns the process exit code rather than calling `process.exit` itself:
531
+ * `0` for a signed preview, and in delivered mode `0` only when a dispatch was
532
+ * positively confirmed.
533
+ */
534
+ export async function runWebhooksTest(webhookId, options, deps = {}) {
535
+ const resolvedAppId = resolveAppId(undefined, options);
536
+ let payload = {};
537
+ if (options.payload) {
538
+ try {
539
+ payload = JSON.parse(options.payload);
540
+ }
541
+ catch {
542
+ error("Invalid JSON in --payload");
543
+ return 1;
544
+ }
545
+ }
546
+ const client = (deps.client ?? new ApiClient());
547
+ if (options.deliver) {
548
+ const result = await deliverWebhookTest({
549
+ appId: resolvedAppId,
550
+ webhookId,
551
+ payload,
552
+ serverUrl: (deps.serverUrl ?? getServerUrl)(),
553
+ }, {
554
+ client,
555
+ ...(deps.fetchImpl ? { fetchImpl: deps.fetchImpl } : {}),
556
+ ...(deps.sleep ? { sleep: deps.sleep } : {}),
557
+ // Said before anything is delivered, and in the terminal rather than
558
+ // only in the guide: a diagnostic that mutates the app has to announce
559
+ // it where the user is looking (#3321 criterion 4). It goes to stderr,
560
+ // so `--json` keeps one clean object on stdout.
561
+ onBeforeDeliver: (notice) => notice.forEach((line) => warn(line)),
562
+ });
563
+ if (options.json) {
564
+ json(result);
565
+ }
566
+ else if (result.outcome === "dispatched") {
567
+ success(result.headline);
568
+ result.details.forEach((line) => info(line));
569
+ }
570
+ else {
571
+ // A refusal the server explained keeps the established convention: the
572
+ // prose explains, the code is what an operator searches for (#2445).
573
+ if (result.refusal) {
574
+ error(result.refusal.code
575
+ ? `${result.refusal.message} (${result.refusal.code})`
576
+ : result.refusal.message);
577
+ if (result.delivery === null)
578
+ info("Nothing was delivered.");
579
+ }
580
+ else {
581
+ error(result.headline);
582
+ }
583
+ result.details.forEach((line) => info(line));
584
+ }
585
+ return result.outcome === "dispatched" ? 0 : 1;
586
+ }
587
+ try {
588
+ const result = await client.testWebhook(resolvedAppId, webhookId, payload);
589
+ if (options.json) {
590
+ json(result);
591
+ return 0;
592
+ }
593
+ if (result.success) {
594
+ success("Test payload signed. Nothing was delivered — re-run with --deliver " +
595
+ "to post it to the receive endpoint for real, or post the signed " +
596
+ "body (--json shows the exact rawBody) with these headers yourself.");
597
+ if (result.signatureHeaders) {
598
+ divider();
599
+ info("Generated Signature Headers:");
600
+ for (const [header, value] of Object.entries(result.signatureHeaders)) {
601
+ keyValue(` ${header}`, String(value));
602
+ }
603
+ }
604
+ if (result.payload) {
605
+ divider();
606
+ info("Test Payload:");
607
+ console.log(JSON.stringify(result.payload, null, 2));
608
+ }
609
+ }
610
+ else {
611
+ error(`Test failed: ${result.message || result.errorCode || "unknown error"}`);
612
+ }
613
+ return 0;
614
+ }
615
+ catch (err) {
616
+ // The server refuses a preview it cannot sign with a coded 400 — the
617
+ // scheme holds only public key material, the row still stores a raw
618
+ // secret, the signing secret is unset or unresolvable (#2445). Print
619
+ // the machine-readable code alongside the message, the established
620
+ // convention here: the prose explains, the code is what an operator
621
+ // searches for or reports.
622
+ error(err?.code ? `${err.message} (${err.code})` : err.message);
623
+ return 1;
624
+ }
625
+ }
626
+ //# sourceMappingURL=webhooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhooks.js","sourceRoot":"","sources":["../../../src/commands/webhooks.ts"],"names":[],"mappings":"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"}