primitive-admin 1.1.0-alpha.7 → 1.1.0-alpha.71

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 (438) hide show
  1. package/README.md +404 -80
  2. package/assets/skill/skills/primitive-platform/SKILL.md +808 -0
  3. package/dist/bin/primitive.d.ts +2 -0
  4. package/dist/bin/primitive.js +294 -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 +138 -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 +544 -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 +51 -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 +177 -7
  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 +92 -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 +479 -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 +171 -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 +471 -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 +2140 -112
  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 +1357 -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 +333 -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/group-type-configs.d.ts +2 -0
  64. package/dist/src/commands/group-type-configs.js +86 -0
  65. package/dist/src/commands/group-type-configs.js.map +1 -0
  66. package/dist/src/commands/groups.d.ts +2 -0
  67. package/dist/src/commands/groups.js +38 -99
  68. package/dist/src/commands/groups.js.map +1 -1
  69. package/dist/src/commands/guides.d.ts +223 -0
  70. package/dist/src/commands/guides.js +617 -65
  71. package/dist/src/commands/guides.js.map +1 -1
  72. package/dist/src/commands/init.d.ts +25 -0
  73. package/dist/src/commands/init.js +1605 -208
  74. package/dist/src/commands/init.js.map +1 -1
  75. package/dist/src/commands/integrations.d.ts +2 -0
  76. package/dist/src/commands/integrations.js +380 -178
  77. package/dist/src/commands/integrations.js.map +1 -1
  78. package/dist/src/commands/llm.d.ts +2 -0
  79. package/dist/src/commands/llm.js +4 -2
  80. package/dist/src/commands/llm.js.map +1 -1
  81. package/dist/src/commands/locks.d.ts +8 -0
  82. package/dist/src/commands/locks.js +160 -0
  83. package/dist/src/commands/locks.js.map +1 -0
  84. package/dist/src/commands/metadata-category-configs.d.ts +12 -0
  85. package/dist/src/commands/metadata-category-configs.js +112 -0
  86. package/dist/src/commands/metadata-category-configs.js.map +1 -0
  87. package/dist/src/commands/metadata.d.ts +2 -0
  88. package/dist/src/commands/metadata.js +281 -0
  89. package/dist/src/commands/metadata.js.map +1 -0
  90. package/dist/src/commands/prompts.d.ts +2 -0
  91. package/dist/src/commands/prompts.js +225 -584
  92. package/dist/src/commands/prompts.js.map +1 -1
  93. package/dist/src/commands/rule-sets.d.ts +3 -0
  94. package/dist/src/commands/rule-sets.js +272 -0
  95. package/dist/src/commands/rule-sets.js.map +1 -0
  96. package/dist/src/commands/scripts.d.ts +20 -0
  97. package/dist/src/commands/scripts.js +554 -0
  98. package/dist/src/commands/scripts.js.map +1 -0
  99. package/dist/src/commands/secrets.d.ts +2 -0
  100. package/dist/src/commands/secrets.js +108 -0
  101. package/dist/src/commands/secrets.js.map +1 -0
  102. package/dist/src/commands/sessions.d.ts +2 -0
  103. package/dist/src/commands/sessions.js +75 -0
  104. package/dist/src/commands/sessions.js.map +1 -0
  105. package/dist/src/commands/skill.d.ts +2 -0
  106. package/dist/src/commands/skill.js +29 -0
  107. package/dist/src/commands/skill.js.map +1 -0
  108. package/dist/src/commands/sync-app-settings.d.ts +158 -0
  109. package/dist/src/commands/sync-app-settings.js +330 -0
  110. package/dist/src/commands/sync-app-settings.js.map +1 -0
  111. package/dist/src/commands/sync.d.ts +2323 -0
  112. package/dist/src/commands/sync.js +15065 -843
  113. package/dist/src/commands/sync.js.map +1 -1
  114. package/dist/src/commands/tokens.d.ts +2 -0
  115. package/dist/src/commands/tokens.js +130 -21
  116. package/dist/src/commands/tokens.js.map +1 -1
  117. package/dist/src/commands/users.d.ts +2 -0
  118. package/dist/src/commands/users.js +532 -23
  119. package/dist/src/commands/users.js.map +1 -1
  120. package/dist/src/commands/vars.d.ts +8 -0
  121. package/dist/src/commands/vars.js +96 -0
  122. package/dist/src/commands/vars.js.map +1 -0
  123. package/dist/src/commands/waitlist.d.ts +2 -0
  124. package/dist/src/commands/waitlist.js +10 -10
  125. package/dist/src/commands/waitlist.js.map +1 -1
  126. package/dist/src/commands/webhooks.d.ts +2 -0
  127. package/dist/src/commands/webhooks.js +562 -0
  128. package/dist/src/commands/webhooks.js.map +1 -0
  129. package/dist/src/commands/workflows.d.ts +116 -0
  130. package/dist/src/commands/workflows.js +1583 -681
  131. package/dist/src/commands/workflows.js.map +1 -1
  132. package/dist/src/lib/access-rule-display.d.ts +21 -0
  133. package/dist/src/lib/access-rule-display.js +34 -0
  134. package/dist/src/lib/access-rule-display.js.map +1 -0
  135. package/dist/src/lib/api-client.d.ts +1936 -0
  136. package/dist/src/lib/api-client.js +1826 -138
  137. package/dist/src/lib/api-client.js.map +1 -1
  138. package/dist/src/lib/app-settings-descriptor.d.ts +263 -0
  139. package/dist/src/lib/app-settings-descriptor.js +575 -0
  140. package/dist/src/lib/app-settings-descriptor.js.map +1 -0
  141. package/dist/src/lib/auth-flow.d.ts +8 -0
  142. package/dist/src/lib/batch.d.ts +26 -0
  143. package/dist/src/lib/batch.js +32 -0
  144. package/dist/src/lib/batch.js.map +1 -0
  145. package/dist/src/lib/block-layout.d.ts +160 -0
  146. package/dist/src/lib/block-layout.js +451 -0
  147. package/dist/src/lib/block-layout.js.map +1 -0
  148. package/dist/src/lib/canonical-json.d.ts +12 -0
  149. package/dist/src/lib/canonical-json.js +35 -0
  150. package/dist/src/lib/canonical-json.js.map +1 -0
  151. package/dist/src/lib/channel.d.ts +30 -0
  152. package/dist/src/lib/channel.js +68 -0
  153. package/dist/src/lib/channel.js.map +1 -0
  154. package/dist/src/lib/cli-manifest.d.ts +68 -0
  155. package/dist/src/lib/cli-manifest.js +71 -0
  156. package/dist/src/lib/cli-manifest.js.map +1 -0
  157. package/dist/src/lib/codegen-shared/generatedFiles.d.ts +101 -0
  158. package/dist/src/lib/codegen-shared/generatedFiles.js +191 -0
  159. package/dist/src/lib/codegen-shared/generatedFiles.js.map +1 -0
  160. package/dist/src/lib/codegen-shared/prettierStable.d.ts +262 -0
  161. package/dist/src/lib/codegen-shared/prettierStable.js +610 -0
  162. package/dist/src/lib/codegen-shared/prettierStable.js.map +1 -0
  163. package/dist/src/lib/codegen-shared/resolveCodegenSourceDir.d.ts +68 -0
  164. package/dist/src/lib/codegen-shared/resolveCodegenSourceDir.js +168 -0
  165. package/dist/src/lib/codegen-shared/resolveCodegenSourceDir.js.map +1 -0
  166. package/dist/src/lib/config-object-descriptor.d.ts +127 -0
  167. package/dist/src/lib/config-object-descriptor.js +658 -0
  168. package/dist/src/lib/config-object-descriptor.js.map +1 -0
  169. package/dist/src/lib/config-payload.d.ts +85 -0
  170. package/dist/src/lib/config-payload.js +116 -0
  171. package/dist/src/lib/config-payload.js.map +1 -0
  172. package/dist/src/lib/config-surface.d.ts +130 -0
  173. package/dist/src/lib/config-surface.js +300 -0
  174. package/dist/src/lib/config-surface.js.map +1 -0
  175. package/dist/src/lib/config-toml.d.ts +10 -0
  176. package/dist/src/lib/config-toml.js +42 -0
  177. package/dist/src/lib/config-toml.js.map +1 -0
  178. package/dist/src/lib/config.d.ts +53 -0
  179. package/dist/src/lib/config.js +92 -53
  180. package/dist/src/lib/config.js.map +1 -1
  181. package/dist/src/lib/confirm-prompt.d.ts +83 -0
  182. package/dist/src/lib/confirm-prompt.js +110 -0
  183. package/dist/src/lib/confirm-prompt.js.map +1 -0
  184. package/dist/src/lib/constants.d.ts +11 -0
  185. package/dist/src/lib/constants.js +12 -0
  186. package/dist/src/lib/constants.js.map +1 -0
  187. package/dist/src/lib/crash-handlers.d.ts +20 -0
  188. package/dist/src/lib/crash-handlers.js +49 -0
  189. package/dist/src/lib/crash-handlers.js.map +1 -0
  190. package/dist/src/lib/credentials-store.d.ts +89 -0
  191. package/dist/src/lib/credentials-store.js +330 -0
  192. package/dist/src/lib/credentials-store.js.map +1 -0
  193. package/dist/src/lib/csv.d.ts +47 -0
  194. package/dist/src/lib/csv.js +172 -0
  195. package/dist/src/lib/csv.js.map +1 -0
  196. package/dist/src/lib/data-input.d.ts +23 -0
  197. package/dist/src/lib/data-input.js +50 -0
  198. package/dist/src/lib/data-input.js.map +1 -0
  199. package/dist/src/lib/db-codegen/dbFingerprint.d.ts +10 -0
  200. package/dist/src/lib/db-codegen/dbFingerprint.js +17 -0
  201. package/dist/src/lib/db-codegen/dbFingerprint.js.map +1 -0
  202. package/dist/src/lib/db-codegen/dbGenerator.d.ts +67 -0
  203. package/dist/src/lib/db-codegen/dbGenerator.js +170 -0
  204. package/dist/src/lib/db-codegen/dbGenerator.js.map +1 -0
  205. package/dist/src/lib/db-codegen/dbNaming.d.ts +87 -0
  206. package/dist/src/lib/db-codegen/dbNaming.js +180 -0
  207. package/dist/src/lib/db-codegen/dbNaming.js.map +1 -0
  208. package/dist/src/lib/db-codegen/dbTemplates.d.ts +272 -0
  209. package/dist/src/lib/db-codegen/dbTemplates.js +480 -0
  210. package/dist/src/lib/db-codegen/dbTemplates.js.map +1 -0
  211. package/dist/src/lib/db-codegen/dbTsTypes.d.ts +73 -0
  212. package/dist/src/lib/db-codegen/dbTsTypes.js +139 -0
  213. package/dist/src/lib/db-codegen/dbTsTypes.js.map +1 -0
  214. package/dist/src/lib/db-codegen/dbTypeIR.d.ts +146 -0
  215. package/dist/src/lib/db-codegen/dbTypeIR.js +517 -0
  216. package/dist/src/lib/db-codegen/dbTypeIR.js.map +1 -0
  217. package/dist/src/lib/db-codegen/generated-operation-def-descriptor.d.ts +112 -0
  218. package/dist/src/lib/db-codegen/generated-operation-def-descriptor.js +211 -0
  219. package/dist/src/lib/db-codegen/generated-operation-def-descriptor.js.map +1 -0
  220. package/dist/src/lib/env-resolver-core.d.ts +147 -0
  221. package/dist/src/lib/env-resolver-core.js +265 -0
  222. package/dist/src/lib/env-resolver-core.js.map +1 -0
  223. package/dist/src/lib/env-resolver.d.ts +84 -0
  224. package/dist/src/lib/env-resolver.js +133 -0
  225. package/dist/src/lib/env-resolver.js.map +1 -0
  226. package/dist/src/lib/fetch.d.ts +5 -0
  227. package/dist/src/lib/generated-allowlist.d.ts +28 -0
  228. package/dist/src/lib/generated-allowlist.js +277 -0
  229. package/dist/src/lib/generated-allowlist.js.map +1 -0
  230. package/dist/src/lib/generated-config-surfaces.d.ts +682 -0
  231. package/dist/src/lib/generated-config-surfaces.js +4058 -0
  232. package/dist/src/lib/generated-config-surfaces.js.map +1 -0
  233. package/dist/src/lib/generated-template-lint.d.ts +212 -0
  234. package/dist/src/lib/generated-template-lint.js +624 -0
  235. package/dist/src/lib/generated-template-lint.js.map +1 -0
  236. package/dist/src/lib/init-adopt.d.ts +16 -0
  237. package/dist/src/lib/init-adopt.js +34 -0
  238. package/dist/src/lib/init-adopt.js.map +1 -0
  239. package/dist/src/lib/init-assets.d.ts +39 -0
  240. package/dist/src/lib/init-assets.js +97 -0
  241. package/dist/src/lib/init-assets.js.map +1 -0
  242. package/dist/src/lib/init-config.d.ts +98 -0
  243. package/dist/src/lib/init-config.js +186 -0
  244. package/dist/src/lib/init-config.js.map +1 -0
  245. package/dist/src/lib/init-ios-links.d.ts +50 -0
  246. package/dist/src/lib/init-ios-links.js +153 -0
  247. package/dist/src/lib/init-ios-links.js.map +1 -0
  248. package/dist/src/lib/init-plan.d.ts +80 -0
  249. package/dist/src/lib/init-plan.js +95 -0
  250. package/dist/src/lib/init-plan.js.map +1 -0
  251. package/dist/src/lib/init-production-env.d.ts +48 -0
  252. package/dist/src/lib/init-production-env.js +59 -0
  253. package/dist/src/lib/init-production-env.js.map +1 -0
  254. package/dist/src/lib/init-schema.d.ts +74 -0
  255. package/dist/src/lib/init-schema.js +358 -0
  256. package/dist/src/lib/init-schema.js.map +1 -0
  257. package/dist/src/lib/init-xcode.d.ts +33 -0
  258. package/dist/src/lib/init-xcode.js +114 -0
  259. package/dist/src/lib/init-xcode.js.map +1 -0
  260. package/dist/src/lib/integration-request-config.d.ts +30 -0
  261. package/dist/src/lib/integration-request-config.js +145 -0
  262. package/dist/src/lib/integration-request-config.js.map +1 -0
  263. package/dist/src/lib/local-state.d.ts +55 -0
  264. package/dist/src/lib/local-state.js +167 -0
  265. package/dist/src/lib/local-state.js.map +1 -0
  266. package/dist/src/lib/log-inspection.d.ts +568 -0
  267. package/dist/src/lib/log-inspection.js +639 -0
  268. package/dist/src/lib/log-inspection.js.map +1 -0
  269. package/dist/src/lib/migration-nag.d.ts +49 -0
  270. package/dist/src/lib/migration-nag.js +163 -0
  271. package/dist/src/lib/migration-nag.js.map +1 -0
  272. package/dist/src/lib/object-status-filter.d.ts +22 -0
  273. package/dist/src/lib/object-status-filter.js +45 -0
  274. package/dist/src/lib/object-status-filter.js.map +1 -0
  275. package/dist/src/lib/output.d.ts +109 -0
  276. package/dist/src/lib/output.js +191 -8
  277. package/dist/src/lib/output.js.map +1 -1
  278. package/dist/src/lib/package-manager.d.ts +140 -0
  279. package/dist/src/lib/package-manager.js +305 -0
  280. package/dist/src/lib/package-manager.js.map +1 -0
  281. package/dist/src/lib/paginate.d.ts +83 -0
  282. package/dist/src/lib/paginate.js +95 -0
  283. package/dist/src/lib/paginate.js.map +1 -0
  284. package/dist/src/lib/platform-owned.d.ts +63 -0
  285. package/dist/src/lib/platform-owned.js +85 -0
  286. package/dist/src/lib/platform-owned.js.map +1 -0
  287. package/dist/src/lib/project-config.d.ts +97 -0
  288. package/dist/src/lib/project-config.js +217 -0
  289. package/dist/src/lib/project-config.js.map +1 -0
  290. package/dist/src/lib/query-operators.d.ts +43 -0
  291. package/dist/src/lib/query-operators.js +80 -0
  292. package/dist/src/lib/query-operators.js.map +1 -0
  293. package/dist/src/lib/record-filter.d.ts +18 -0
  294. package/dist/src/lib/record-filter.js +55 -0
  295. package/dist/src/lib/record-filter.js.map +1 -0
  296. package/dist/src/lib/refresh-admin-credentials.d.ts +65 -0
  297. package/dist/src/lib/refresh-admin-credentials.js +103 -0
  298. package/dist/src/lib/refresh-admin-credentials.js.map +1 -0
  299. package/dist/src/lib/resolve-init-dev-port.d.ts +56 -0
  300. package/dist/src/lib/resolve-init-dev-port.js +55 -0
  301. package/dist/src/lib/resolve-init-dev-port.js.map +1 -0
  302. package/dist/src/lib/resolve-init-server.d.ts +64 -0
  303. package/dist/src/lib/resolve-init-server.js +77 -0
  304. package/dist/src/lib/resolve-init-server.js.map +1 -0
  305. package/dist/src/lib/resolve-platform.d.ts +74 -0
  306. package/dist/src/lib/resolve-platform.js +105 -0
  307. package/dist/src/lib/resolve-platform.js.map +1 -0
  308. package/dist/src/lib/run-status.d.ts +19 -0
  309. package/dist/src/lib/run-status.generated.d.ts +39 -0
  310. package/dist/src/lib/run-status.generated.js +66 -0
  311. package/dist/src/lib/run-status.generated.js.map +1 -0
  312. package/dist/src/lib/run-status.js +19 -0
  313. package/dist/src/lib/run-status.js.map +1 -0
  314. package/dist/src/lib/server-text-normalization.d.ts +51 -0
  315. package/dist/src/lib/server-text-normalization.js +90 -0
  316. package/dist/src/lib/server-text-normalization.js.map +1 -0
  317. package/dist/src/lib/server-url.d.ts +22 -0
  318. package/dist/src/lib/server-url.js +33 -0
  319. package/dist/src/lib/server-url.js.map +1 -0
  320. package/dist/src/lib/signing-secret-status.d.ts +81 -0
  321. package/dist/src/lib/signing-secret-status.js +116 -0
  322. package/dist/src/lib/signing-secret-status.js.map +1 -0
  323. package/dist/src/lib/skill-installer.d.ts +25 -0
  324. package/dist/src/lib/skill-installer.js +266 -0
  325. package/dist/src/lib/skill-installer.js.map +1 -0
  326. package/dist/src/lib/snapshots.d.ts +99 -0
  327. package/dist/src/lib/snapshots.js +357 -0
  328. package/dist/src/lib/snapshots.js.map +1 -0
  329. package/dist/src/lib/swift-codegen/dbGenerator.d.ts +113 -0
  330. package/dist/src/lib/swift-codegen/dbGenerator.js +914 -0
  331. package/dist/src/lib/swift-codegen/dbGenerator.js.map +1 -0
  332. package/dist/src/lib/swift-codegen/dbSwiftTypes.d.ts +42 -0
  333. package/dist/src/lib/swift-codegen/dbSwiftTypes.js +100 -0
  334. package/dist/src/lib/swift-codegen/dbSwiftTypes.js.map +1 -0
  335. package/dist/src/lib/swift-codegen/generator.d.ts +94 -0
  336. package/dist/src/lib/swift-codegen/generator.js +440 -0
  337. package/dist/src/lib/swift-codegen/generator.js.map +1 -0
  338. package/dist/src/lib/swift-codegen/schemaToSwift.d.ts +72 -0
  339. package/dist/src/lib/swift-codegen/schemaToSwift.js +644 -0
  340. package/dist/src/lib/swift-codegen/schemaToSwift.js.map +1 -0
  341. package/dist/src/lib/swift-codegen/siblingSymbols.d.ts +94 -0
  342. package/dist/src/lib/swift-codegen/siblingSymbols.js +155 -0
  343. package/dist/src/lib/swift-codegen/siblingSymbols.js.map +1 -0
  344. package/dist/src/lib/swift-codegen/swiftNaming.d.ts +85 -0
  345. package/dist/src/lib/swift-codegen/swiftNaming.js +198 -0
  346. package/dist/src/lib/swift-codegen/swiftNaming.js.map +1 -0
  347. package/dist/src/lib/sync-dir-selector.d.ts +21 -0
  348. package/dist/src/lib/sync-dir-selector.js +30 -0
  349. package/dist/src/lib/sync-dir-selector.js.map +1 -0
  350. package/dist/src/lib/sync-paths.d.ts +111 -0
  351. package/dist/src/lib/sync-paths.js +198 -0
  352. package/dist/src/lib/sync-paths.js.map +1 -0
  353. package/dist/src/lib/sync-resource-types.d.ts +544 -0
  354. package/dist/src/lib/sync-resource-types.js +975 -0
  355. package/dist/src/lib/sync-resource-types.js.map +1 -0
  356. package/dist/src/lib/sync-selectors.d.ts +95 -0
  357. package/dist/src/lib/sync-selectors.js +228 -0
  358. package/dist/src/lib/sync-selectors.js.map +1 -0
  359. package/dist/src/lib/template.d.ts +170 -0
  360. package/dist/src/lib/template.js +484 -68
  361. package/dist/src/lib/template.js.map +1 -1
  362. package/dist/src/lib/test-case-keys.d.ts +29 -0
  363. package/dist/src/lib/test-case-keys.js +55 -0
  364. package/dist/src/lib/test-case-keys.js.map +1 -0
  365. package/dist/src/lib/test-case-variables.d.ts +15 -0
  366. package/dist/src/lib/test-case-variables.js +29 -0
  367. package/dist/src/lib/test-case-variables.js.map +1 -0
  368. package/dist/src/lib/token-inject.d.ts +56 -0
  369. package/dist/src/lib/token-inject.js +204 -0
  370. package/dist/src/lib/token-inject.js.map +1 -0
  371. package/dist/src/lib/toml-database-config.d.ts +123 -0
  372. package/dist/src/lib/toml-database-config.js +527 -0
  373. package/dist/src/lib/toml-database-config.js.map +1 -0
  374. package/dist/src/lib/toml-metadata-config.d.ts +151 -0
  375. package/dist/src/lib/toml-metadata-config.js +476 -0
  376. package/dist/src/lib/toml-metadata-config.js.map +1 -0
  377. package/dist/src/lib/toml-native-form.d.ts +46 -0
  378. package/dist/src/lib/toml-native-form.js +78 -0
  379. package/dist/src/lib/toml-native-form.js.map +1 -0
  380. package/dist/src/lib/toml-params-validator.d.ts +129 -0
  381. package/dist/src/lib/toml-params-validator.js +298 -0
  382. package/dist/src/lib/toml-params-validator.js.map +1 -0
  383. package/dist/src/lib/toml-scalar-edit.d.ts +43 -0
  384. package/dist/src/lib/toml-scalar-edit.js +283 -0
  385. package/dist/src/lib/toml-scalar-edit.js.map +1 -0
  386. package/dist/src/lib/user-selector.d.ts +24 -0
  387. package/dist/src/lib/user-selector.js +33 -0
  388. package/dist/src/lib/user-selector.js.map +1 -0
  389. package/dist/src/lib/version-check.d.ts +35 -0
  390. package/dist/src/lib/version-check.js +241 -0
  391. package/dist/src/lib/version-check.js.map +1 -0
  392. package/dist/src/lib/watch.d.ts +121 -0
  393. package/dist/src/lib/watch.js +169 -0
  394. package/dist/src/lib/watch.js.map +1 -0
  395. package/dist/src/lib/workflow-apply.d.ts +110 -0
  396. package/dist/src/lib/workflow-apply.js +164 -0
  397. package/dist/src/lib/workflow-apply.js.map +1 -0
  398. package/dist/src/lib/workflow-codegen/generated-schema-descriptor.d.ts +129 -0
  399. package/dist/src/lib/workflow-codegen/generated-schema-descriptor.js +269 -0
  400. package/dist/src/lib/workflow-codegen/generated-schema-descriptor.js.map +1 -0
  401. package/dist/src/lib/workflow-codegen/generator.d.ts +96 -0
  402. package/dist/src/lib/workflow-codegen/generator.js +361 -0
  403. package/dist/src/lib/workflow-codegen/generator.js.map +1 -0
  404. package/dist/src/lib/workflow-codegen/invokerIR.d.ts +94 -0
  405. package/dist/src/lib/workflow-codegen/invokerIR.js +76 -0
  406. package/dist/src/lib/workflow-codegen/invokerIR.js.map +1 -0
  407. package/dist/src/lib/workflow-codegen/naming.d.ts +33 -0
  408. package/dist/src/lib/workflow-codegen/naming.js +81 -0
  409. package/dist/src/lib/workflow-codegen/naming.js.map +1 -0
  410. package/dist/src/lib/workflow-codegen/schemaToTs.d.ts +80 -0
  411. package/dist/src/lib/workflow-codegen/schemaToTs.js +303 -0
  412. package/dist/src/lib/workflow-codegen/schemaToTs.js.map +1 -0
  413. package/dist/src/lib/workflow-config-apply.d.ts +70 -0
  414. package/dist/src/lib/workflow-config-apply.js +137 -0
  415. package/dist/src/lib/workflow-config-apply.js.map +1 -0
  416. package/dist/src/lib/workflow-config-sidecar.d.ts +63 -0
  417. package/dist/src/lib/workflow-config-sidecar.js +96 -0
  418. package/dist/src/lib/workflow-config-sidecar.js.map +1 -0
  419. package/dist/src/lib/workflow-defaults.d.ts +29 -0
  420. package/dist/src/lib/workflow-defaults.js +41 -0
  421. package/dist/src/lib/workflow-defaults.js.map +1 -0
  422. package/dist/src/lib/workflow-fragments.d.ts +64 -0
  423. package/dist/src/lib/workflow-fragments.js +342 -0
  424. package/dist/src/lib/workflow-fragments.js.map +1 -0
  425. package/dist/src/lib/workflow-include-preserve.d.ts +76 -0
  426. package/dist/src/lib/workflow-include-preserve.js +286 -0
  427. package/dist/src/lib/workflow-include-preserve.js.map +1 -0
  428. package/dist/src/lib/workflow-payload.d.ts +98 -0
  429. package/dist/src/lib/workflow-payload.js +178 -0
  430. package/dist/src/lib/workflow-payload.js.map +1 -0
  431. package/dist/src/lib/workflow-toml-validator.d.ts +202 -0
  432. package/dist/src/lib/workflow-toml-validator.js +757 -0
  433. package/dist/src/lib/workflow-toml-validator.js.map +1 -0
  434. package/dist/src/types/index.d.ts +581 -0
  435. package/dist/src/validators.d.ts +65 -0
  436. package/dist/src/validators.js +64 -0
  437. package/dist/src/validators.js.map +1 -0
  438. package/package.json +32 -8
@@ -0,0 +1,95 @@
1
+ /**
2
+ * Cursor-pagination helper used by the CLI's API client.
3
+ *
4
+ * The server exposes cursor-paginated endpoints (e.g. GET /admin/api/admins/me/apps)
5
+ * that return `{ items, nextCursor? }` pages. Callers historically only fetched
6
+ * the first page, silently truncating results (see issue #436). This helper
7
+ * walks every page and aggregates the items in order.
8
+ *
9
+ * Exported separately so the looping contract can be unit-tested without
10
+ * stubbing the full ApiClient.
11
+ */
12
+ /**
13
+ * Normalize an endpoint's list response into the CLI's own output contract.
14
+ *
15
+ * The records read paths speak two different wire shapes: js-bao's Durable
16
+ * Object envelope (`{ data, hasMore, nextCursor?, prevCursor? }`) and the
17
+ * server's unified list payload (`{ items, hasMore, nextCursor, cursor }`).
18
+ * Both are collapsed here to `{ items, hasMore, nextCursor? }` so like verbs
19
+ * print like envelopes.
20
+ *
21
+ * Accepts `items` or `data` as the array key and `nextCursor` or the
22
+ * deprecated `cursor` alias as the cursor. Throws when neither array key is
23
+ * present so an error body is never coerced into an empty result.
24
+ *
25
+ * Named `normalizeCliListEnvelope` to keep it distinct from the JS client's
26
+ * `normalizeListEnvelope` (`src/client/internal/listEnvelope.ts`), whose
27
+ * cursor contract is the opposite: it *back-fills* the deprecated `cursor`
28
+ * alias so the client keeps working against pre-#1316 servers, while this one
29
+ * drops it so CLI consumers are already off it when #1982 lands. The two are
30
+ * unrelated — the client helper is not re-exported from `src/client/index.ts`
31
+ * and the CLI does not depend on the client package.
32
+ *
33
+ * Note: the list methods in `api-client.ts` that re-emit the deprecated
34
+ * `cursor` alias are deliberately NOT routed through this helper — they must
35
+ * keep dual-emitting until #1982 closes its deprecation window, which is the
36
+ * opposite of this contract. As of this writing that is eight methods (grep
37
+ * `cursor: nextCursor` in `api-client.ts` for the current set):
38
+ * `listInvitations`, `listWebhookEvents`, `listWorkflowRuns`,
39
+ * `listUserWorkflowRuns`, `listAllAdmins`, `listGroups`, `listGroupMembers`,
40
+ * `listBucketBlobs`. The `listCollection*` methods only *read* the alias and
41
+ * emit `nextCursor` alone, so they already match this contract.
42
+ *
43
+ * `databases operations execute` routes through here too, but conditionally: a
44
+ * registered operation is only sometimes a list, so
45
+ * `normalizeDatabaseOperationResult()` (`api-client.ts`) tests the result shape
46
+ * first and calls this helper only for a Durable Object query page (#2440).
47
+ */
48
+ export function normalizeCliListEnvelope(raw) {
49
+ const page = raw;
50
+ const rawItems = page && typeof page === "object" && !Array.isArray(page)
51
+ ? (page.items ?? page.data)
52
+ : undefined;
53
+ if (!Array.isArray(rawItems)) {
54
+ throw new Error("Unexpected list response: expected an object with an `items` or `data` array.");
55
+ }
56
+ const nextCursor = page.nextCursor ?? page.cursor ?? undefined;
57
+ const envelope = {
58
+ items: rawItems,
59
+ hasMore: typeof page.hasMore === "boolean" ? page.hasMore : Boolean(nextCursor),
60
+ };
61
+ if (nextCursor)
62
+ envelope.nextCursor = nextCursor;
63
+ return envelope;
64
+ }
65
+ /**
66
+ * Walk every cursor page from `fetchPage` and return the concatenated items.
67
+ *
68
+ * Detects two failure modes that would otherwise hang the CLI:
69
+ * - A cursor that repeats (server returned the same `nextCursor` twice).
70
+ * - A cursor chain longer than `maxPages` (default 1000).
71
+ * Both throw so the caller fails loudly rather than looping forever.
72
+ */
73
+ export async function paginateAll(fetchPage, options = {}) {
74
+ const maxPages = options.maxPages ?? 1000;
75
+ const all = [];
76
+ const seenCursors = new Set();
77
+ let cursor;
78
+ for (let page = 0; page < maxPages; page++) {
79
+ const resp = await fetchPage(cursor);
80
+ if (Array.isArray(resp.items)) {
81
+ all.push(...resp.items);
82
+ }
83
+ const next = resp.nextCursor ?? undefined;
84
+ if (!next) {
85
+ return all;
86
+ }
87
+ if (seenCursors.has(next)) {
88
+ throw new Error(`Pagination cursor did not advance (cursor ${next} repeated); aborting to avoid an infinite loop.`);
89
+ }
90
+ seenCursors.add(next);
91
+ cursor = next;
92
+ }
93
+ throw new Error(`Pagination exceeded ${maxPages} pages without terminating; server cursor may not be advancing.`);
94
+ }
95
+ //# sourceMappingURL=paginate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paginate.js","sourceRoot":"","sources":["../../../src/lib/paginate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAqBH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,MAAM,UAAU,wBAAwB,CAAU,GAAY;IAC5D,MAAM,IAAI,GAAG,GAA6C,CAAC;IAC3D,MAAM,QAAQ,GACZ,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;QACtD,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC;QAC3B,CAAC,CAAC,SAAS,CAAC;IAEhB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CACb,+EAA+E,CAChF,CAAC;IACJ,CAAC;IAED,MAAM,UAAU,GAAG,IAAK,CAAC,UAAU,IAAI,IAAK,CAAC,MAAM,IAAI,SAAS,CAAC;IACjE,MAAM,QAAQ,GAAoB;QAChC,KAAK,EAAE,QAAe;QACtB,OAAO,EACL,OAAO,IAAK,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,IAAK,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC;KAC3E,CAAC;IACF,IAAI,UAAU;QAAE,QAAQ,CAAC,UAAU,GAAG,UAAU,CAAC;IACjD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAaD;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,SAAyB,EACzB,UAA2B,EAAE;IAE7B,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,IAAI,CAAC;IAC1C,MAAM,GAAG,GAAQ,EAAE,CAAC;IACpB,MAAM,WAAW,GAAG,IAAI,GAAG,EAAU,CAAC;IACtC,IAAI,MAA0B,CAAC;IAE/B,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,QAAQ,EAAE,IAAI,EAAE,EAAE,CAAC;QAC3C,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,MAAM,CAAC,CAAC;QACrC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YAC9B,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1B,CAAC;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,IAAI,SAAS,CAAC;QAC1C,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,GAAG,CAAC;QACb,CAAC;QACD,IAAI,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CACb,6CAA6C,IAAI,iDAAiD,CACnG,CAAC;QACJ,CAAC;QACD,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACtB,MAAM,GAAG,IAAI,CAAC;IAChB,CAAC;IAED,MAAM,IAAI,KAAK,CACb,uBAAuB,QAAQ,iEAAiE,CACjG,CAAC;AACJ,CAAC"}
@@ -0,0 +1,63 @@
1
+ /**
2
+ * Shared predicate for platform-owned workflows (#1660).
3
+ *
4
+ * The platform owns workflow keys in the reserved `__internal.` namespace (see
5
+ * the server's `src/workflows/reserved-workflow-keys.ts`). These rows are
6
+ * created and managed by the platform, never authored in an app's config tree:
7
+ *
8
+ * - `config pull` must not export them (they have no local TOML),
9
+ * - `config diff` must not report them (they are not app config),
10
+ * - `config push` must not upload them (the hollow export can't round-trip),
11
+ * - `workflows codegen` must not generate an invoker for them.
12
+ *
13
+ * The CLI cannot import from `src/`, so this module mirrors the server's prefix
14
+ * policy in ONE place. The codegen skip and the sync filters both call it, so
15
+ * they can never drift from each other or from the server.
16
+ *
17
+ * The generic cross-resource `isPlatformOwnedEntity` abstraction is deliberately
18
+ * NOT here — it is deferred until a second resource type has a platform-owned
19
+ * contract (human decision, 2026-07-17).
20
+ */
21
+ /** Prefix marking a platform-owned workflow key (mirrors the server). */
22
+ export declare const INTERNAL_WORKFLOW_KEY_PREFIX = "__internal.";
23
+ /**
24
+ * True when `key` is in the platform-owned `__internal.` namespace. Trims and
25
+ * lowercases first (mirrors the server's `isReservedWorkflowKey`) so a padded
26
+ * or upper-cased value such as ` __Internal.Foo ` can't slip past the filter.
27
+ */
28
+ export declare function isPlatformOwnedWorkflowKey(key: unknown): boolean;
29
+ /**
30
+ * True when a workflow list/detail item is platform-owned.
31
+ *
32
+ * Prefers the server's derived `platformOwned` flag (#1660) when present, then
33
+ * falls back to the key prefix so an older server that doesn't emit the flag is
34
+ * still filtered (edge case 1). `workflowKey` is the admin list-item field;
35
+ * `key` covers a locally-parsed `[workflow]` table.
36
+ */
37
+ export declare function isPlatformOwnedWorkflow(item: any): boolean;
38
+ /**
39
+ * Why the authoring surface refuses a platform-owned key (#2645).
40
+ *
41
+ * `config create`, `config set` and `config push --only` all name an object by
42
+ * `<type>/<key>`, and `config push` skips the reserved namespace — so scaffolding
43
+ * or selecting one produces a file that is never uploaded, or a push that
44
+ * reports success having applied nothing. With configuration authored in TOML
45
+ * only, those are the two failures the surface has to make impossible: a flag
46
+ * that was rejected was visible, a file that is silently ignored is not.
47
+ *
48
+ * Returns the operator-facing reason, or `undefined` when the key is authorable.
49
+ * Pure, so every caller can be unit-tested without a live server.
50
+ */
51
+ export declare function platformOwnedAuthoringError(type: string, key: string): string | undefined;
52
+ /**
53
+ * Why the authoring surface refuses `<type>/<key>` — or `undefined` when it
54
+ * doesn't.
55
+ *
56
+ * The same question `config create`, `config set` and `config push --only`
57
+ * each ask before touching a file, now with two answers: a platform-owned
58
+ * workflow key (#1660/#2645) and a retired email type (#2884). Both fail the
59
+ * same way if unchecked — a file that is written locally and then either
60
+ * skipped silently or refused at the far end of a push — so both are refused
61
+ * at the point the key is named, with the sentence that says what to do.
62
+ */
63
+ export declare function configAuthoringError(type: string, key: string): string | undefined;
@@ -0,0 +1,85 @@
1
+ /**
2
+ * Shared predicate for platform-owned workflows (#1660).
3
+ *
4
+ * The platform owns workflow keys in the reserved `__internal.` namespace (see
5
+ * the server's `src/workflows/reserved-workflow-keys.ts`). These rows are
6
+ * created and managed by the platform, never authored in an app's config tree:
7
+ *
8
+ * - `config pull` must not export them (they have no local TOML),
9
+ * - `config diff` must not report them (they are not app config),
10
+ * - `config push` must not upload them (the hollow export can't round-trip),
11
+ * - `workflows codegen` must not generate an invoker for them.
12
+ *
13
+ * The CLI cannot import from `src/`, so this module mirrors the server's prefix
14
+ * policy in ONE place. The codegen skip and the sync filters both call it, so
15
+ * they can never drift from each other or from the server.
16
+ *
17
+ * The generic cross-resource `isPlatformOwnedEntity` abstraction is deliberately
18
+ * NOT here — it is deferred until a second resource type has a platform-owned
19
+ * contract (human decision, 2026-07-17).
20
+ */
21
+ import { isRetiredEmailType, retiredEmailTypeGuidance, } from "./generated-config-surfaces.js";
22
+ /** Prefix marking a platform-owned workflow key (mirrors the server). */
23
+ export const INTERNAL_WORKFLOW_KEY_PREFIX = "__internal.";
24
+ /**
25
+ * True when `key` is in the platform-owned `__internal.` namespace. Trims and
26
+ * lowercases first (mirrors the server's `isReservedWorkflowKey`) so a padded
27
+ * or upper-cased value such as ` __Internal.Foo ` can't slip past the filter.
28
+ */
29
+ export function isPlatformOwnedWorkflowKey(key) {
30
+ return (typeof key === "string" &&
31
+ key.trim().toLowerCase().startsWith(INTERNAL_WORKFLOW_KEY_PREFIX));
32
+ }
33
+ /**
34
+ * True when a workflow list/detail item is platform-owned.
35
+ *
36
+ * Prefers the server's derived `platformOwned` flag (#1660) when present, then
37
+ * falls back to the key prefix so an older server that doesn't emit the flag is
38
+ * still filtered (edge case 1). `workflowKey` is the admin list-item field;
39
+ * `key` covers a locally-parsed `[workflow]` table.
40
+ */
41
+ export function isPlatformOwnedWorkflow(item) {
42
+ if (item && item.platformOwned === true)
43
+ return true;
44
+ const key = item?.workflowKey ?? item?.key;
45
+ return isPlatformOwnedWorkflowKey(key);
46
+ }
47
+ /**
48
+ * Why the authoring surface refuses a platform-owned key (#2645).
49
+ *
50
+ * `config create`, `config set` and `config push --only` all name an object by
51
+ * `<type>/<key>`, and `config push` skips the reserved namespace — so scaffolding
52
+ * or selecting one produces a file that is never uploaded, or a push that
53
+ * reports success having applied nothing. With configuration authored in TOML
54
+ * only, those are the two failures the surface has to make impossible: a flag
55
+ * that was rejected was visible, a file that is silently ignored is not.
56
+ *
57
+ * Returns the operator-facing reason, or `undefined` when the key is authorable.
58
+ * Pure, so every caller can be unit-tested without a live server.
59
+ */
60
+ export function platformOwnedAuthoringError(type, key) {
61
+ if (type !== "workflow" || !isPlatformOwnedWorkflowKey(key))
62
+ return undefined;
63
+ return `'${key}' is a platform-owned workflow — the reserved '${INTERNAL_WORKFLOW_KEY_PREFIX}' namespace is managed by the platform. 'config pull' does not export these and 'config push' skips them, so a file here would never reach the server.`;
64
+ }
65
+ /**
66
+ * Why the authoring surface refuses `<type>/<key>` — or `undefined` when it
67
+ * doesn't.
68
+ *
69
+ * The same question `config create`, `config set` and `config push --only`
70
+ * each ask before touching a file, now with two answers: a platform-owned
71
+ * workflow key (#1660/#2645) and a retired email type (#2884). Both fail the
72
+ * same way if unchecked — a file that is written locally and then either
73
+ * skipped silently or refused at the far end of a push — so both are refused
74
+ * at the point the key is named, with the sentence that says what to do.
75
+ */
76
+ export function configAuthoringError(type, key) {
77
+ const platformOwned = platformOwnedAuthoringError(type, key);
78
+ if (platformOwned)
79
+ return platformOwned;
80
+ if (type === "email-template" && isRetiredEmailType(key)) {
81
+ return retiredEmailTypeGuidance(key);
82
+ }
83
+ return undefined;
84
+ }
85
+ //# sourceMappingURL=platform-owned.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"platform-owned.js","sourceRoot":"","sources":["../../../src/lib/platform-owned.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EACL,kBAAkB,EAClB,wBAAwB,GACzB,MAAM,gCAAgC,CAAC;AAExC,yEAAyE;AACzE,MAAM,CAAC,MAAM,4BAA4B,GAAG,aAAa,CAAC;AAE1D;;;;GAIG;AACH,MAAM,UAAU,0BAA0B,CAAC,GAAY;IACrD,OAAO,CACL,OAAO,GAAG,KAAK,QAAQ;QACvB,GAAG,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,4BAA4B,CAAC,CAClE,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,uBAAuB,CAAC,IAAS;IAC/C,IAAI,IAAI,IAAI,IAAI,CAAC,aAAa,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IACrD,MAAM,GAAG,GAAG,IAAI,EAAE,WAAW,IAAI,IAAI,EAAE,GAAG,CAAC;IAC3C,OAAO,0BAA0B,CAAC,GAAG,CAAC,CAAC;AACzC,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,2BAA2B,CACzC,IAAY,EACZ,GAAW;IAEX,IAAI,IAAI,KAAK,UAAU,IAAI,CAAC,0BAA0B,CAAC,GAAG,CAAC;QAAE,OAAO,SAAS,CAAC;IAC9E,OAAO,IAAI,GAAG,kDAAkD,4BAA4B,wJAAwJ,CAAC;AACvP,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,oBAAoB,CAClC,IAAY,EACZ,GAAW;IAEX,MAAM,aAAa,GAAG,2BAA2B,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAC7D,IAAI,aAAa;QAAE,OAAO,aAAa,CAAC;IACxC,IAAI,IAAI,KAAK,gBAAgB,IAAI,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAAC;QACzD,OAAO,wBAAwB,CAAC,GAAG,CAAC,CAAC;IACvC,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC"}
@@ -0,0 +1,97 @@
1
+ /**
2
+ * Project-scoped configuration (.primitive/config.json).
3
+ *
4
+ * This module handles loading, validating, and saving the project config file
5
+ * that lives inside the .primitive/ directory at the project root. The config
6
+ * defines named environments (dev, prod, staging, etc.) with their API URLs
7
+ * and app IDs.
8
+ *
9
+ * Design:
10
+ * - Config file: .primitive/config.json (or any ancestor directory)
11
+ * - The .primitive/ directory groups the committable config and the
12
+ * gitignored local state (credentials, sync data) in one place.
13
+ * - Format: JSON
14
+ * - Schema is versioned (currently 1). Future versions use semver-ish
15
+ * caret range compatibility: we accept any config where major version
16
+ * matches CURRENT_CONFIG_VERSION.
17
+ * - Invalid configs throw — we do NOT silently ignore malformed files.
18
+ */
19
+ /**
20
+ * Current schema version. Increment the major version when making
21
+ * backward-incompatible changes. Older configs will be rejected.
22
+ */
23
+ export declare const CURRENT_CONFIG_VERSION = 1;
24
+ /**
25
+ * The config file lives inside the .primitive/ directory, not at the
26
+ * project root. This keeps the project root clean and groups all
27
+ * Primitive state (config, credentials, sync data) under one directory.
28
+ */
29
+ export declare const PROJECT_CONFIG_DIR = ".primitive";
30
+ export declare const PROJECT_CONFIG_FILENAME = "config.json";
31
+ /** Display name used in user-facing messages. */
32
+ export declare const PROJECT_CONFIG_DISPLAY_NAME = ".primitive/config.json";
33
+ export interface ProjectEnvironment {
34
+ apiUrl: string;
35
+ appId?: string;
36
+ appName?: string;
37
+ /** Optional notes about this environment. */
38
+ description?: string;
39
+ }
40
+ export interface ProjectConfig {
41
+ /** Schema version (currently 1). */
42
+ version: number;
43
+ /**
44
+ * Default environment name to use when --env is not specified and
45
+ * PRIMITIVE_ENV is unset.
46
+ */
47
+ defaultEnvironment?: string;
48
+ /**
49
+ * Named environments keyed by short name (e.g. "dev", "prod", "staging").
50
+ */
51
+ environments: Record<string, ProjectEnvironment>;
52
+ }
53
+ export declare class ProjectConfigError extends Error {
54
+ readonly path?: string;
55
+ constructor(message: string, path?: string);
56
+ }
57
+ /**
58
+ * Walks upward from `startDir` looking for a `.primitive/config.json` file.
59
+ * Returns the absolute path to the config file, or null if not found.
60
+ *
61
+ * Allows running `primitive` commands from subdirectories of a project,
62
+ * much like `git` walks up to find `.git`.
63
+ */
64
+ export declare function findProjectConfigPath(startDir?: string): string | null;
65
+ /**
66
+ * Returns the project root directory (the parent of .primitive/ that contains
67
+ * .primitive/config.json), or null if no project config is found.
68
+ *
69
+ * When the PRIMITIVE_PROJECT_CONFIG env var override is active, the config
70
+ * file may not live inside a `.primitive/` directory (e.g. in tests), so
71
+ * we simply go up one level from the file.
72
+ */
73
+ export declare function findProjectRoot(startDir?: string): string | null;
74
+ /**
75
+ * Validates a raw parsed object against the ProjectConfig schema.
76
+ * Throws ProjectConfigError with a helpful message on any problem.
77
+ */
78
+ export declare function validateProjectConfig(raw: unknown, sourcePath?: string): ProjectConfig;
79
+ /**
80
+ * Loads and validates the project config from a specific file path.
81
+ * Throws ProjectConfigError on I/O errors, JSON parse errors, or schema
82
+ * validation failures — we deliberately do NOT swallow these, because a
83
+ * broken config should be noisy so the user can fix it.
84
+ */
85
+ export declare function loadProjectConfigFromPath(path: string): ProjectConfig;
86
+ /**
87
+ * Loads the project config by searching upward from the current directory.
88
+ * Returns null (not an error) if no .primitive/config.json is found anywhere.
89
+ * Still throws ProjectConfigError if a config IS found but is invalid.
90
+ */
91
+ export declare function loadProjectConfig(startDir?: string): ProjectConfig | null;
92
+ /**
93
+ * Writes a project config to disk as pretty-printed JSON. Callers are
94
+ * responsible for ensuring the parent directory exists — this function
95
+ * does not try to be clever about location.
96
+ */
97
+ export declare function saveProjectConfig(path: string, config: ProjectConfig): void;
@@ -0,0 +1,217 @@
1
+ /**
2
+ * Project-scoped configuration (.primitive/config.json).
3
+ *
4
+ * This module handles loading, validating, and saving the project config file
5
+ * that lives inside the .primitive/ directory at the project root. The config
6
+ * defines named environments (dev, prod, staging, etc.) with their API URLs
7
+ * and app IDs.
8
+ *
9
+ * Design:
10
+ * - Config file: .primitive/config.json (or any ancestor directory)
11
+ * - The .primitive/ directory groups the committable config and the
12
+ * gitignored local state (credentials, sync data) in one place.
13
+ * - Format: JSON
14
+ * - Schema is versioned (currently 1). Future versions use semver-ish
15
+ * caret range compatibility: we accept any config where major version
16
+ * matches CURRENT_CONFIG_VERSION.
17
+ * - Invalid configs throw — we do NOT silently ignore malformed files.
18
+ */
19
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from "fs";
20
+ import { dirname, join, resolve } from "path";
21
+ import { detectInstall, installCommand, upgradeCommand, PRIMITIVE_CLI_PACKAGE, } from "./package-manager.js";
22
+ import { validateServerUrl } from "./server-url.js";
23
+ /**
24
+ * The command that upgrades the running CLI. Falls back to the first-time
25
+ * install command when the running copy can't be upgraded by a package
26
+ * manager (a source checkout).
27
+ */
28
+ function cliUpgradeCommand() {
29
+ return (upgradeCommand(detectInstall(), PRIMITIVE_CLI_PACKAGE, "latest") ??
30
+ installCommand(PRIMITIVE_CLI_PACKAGE));
31
+ }
32
+ /**
33
+ * Current schema version. Increment the major version when making
34
+ * backward-incompatible changes. Older configs will be rejected.
35
+ */
36
+ export const CURRENT_CONFIG_VERSION = 1;
37
+ /**
38
+ * The config file lives inside the .primitive/ directory, not at the
39
+ * project root. This keeps the project root clean and groups all
40
+ * Primitive state (config, credentials, sync data) under one directory.
41
+ */
42
+ export const PROJECT_CONFIG_DIR = ".primitive";
43
+ export const PROJECT_CONFIG_FILENAME = "config.json";
44
+ /** Display name used in user-facing messages. */
45
+ export const PROJECT_CONFIG_DISPLAY_NAME = ".primitive/config.json";
46
+ export class ProjectConfigError extends Error {
47
+ path;
48
+ constructor(message, path) {
49
+ super(message);
50
+ this.path = path;
51
+ this.name = "ProjectConfigError";
52
+ }
53
+ }
54
+ /**
55
+ * Walks upward from `startDir` looking for a `.primitive/config.json` file.
56
+ * Returns the absolute path to the config file, or null if not found.
57
+ *
58
+ * Allows running `primitive` commands from subdirectories of a project,
59
+ * much like `git` walks up to find `.git`.
60
+ */
61
+ export function findProjectConfigPath(startDir = process.cwd()) {
62
+ // Allow override via env var for testing / unusual setups.
63
+ if (process.env.PRIMITIVE_PROJECT_CONFIG) {
64
+ const forced = resolve(process.env.PRIMITIVE_PROJECT_CONFIG);
65
+ return existsSync(forced) ? forced : null;
66
+ }
67
+ let current = resolve(startDir);
68
+ // Walk up until we hit filesystem root.
69
+ while (true) {
70
+ const candidate = join(current, PROJECT_CONFIG_DIR, PROJECT_CONFIG_FILENAME);
71
+ if (existsSync(candidate))
72
+ return candidate;
73
+ const parent = dirname(current);
74
+ if (parent === current)
75
+ return null;
76
+ current = parent;
77
+ }
78
+ }
79
+ /**
80
+ * Returns the project root directory (the parent of .primitive/ that contains
81
+ * .primitive/config.json), or null if no project config is found.
82
+ *
83
+ * When the PRIMITIVE_PROJECT_CONFIG env var override is active, the config
84
+ * file may not live inside a `.primitive/` directory (e.g. in tests), so
85
+ * we simply go up one level from the file.
86
+ */
87
+ export function findProjectRoot(startDir = process.cwd()) {
88
+ const path = findProjectConfigPath(startDir);
89
+ if (!path)
90
+ return null;
91
+ // When using the env var override, the file could be anywhere — just go
92
+ // up one level. In the normal case the path ends with .primitive/config.json
93
+ // so dirname(dirname(path)) gives the project root.
94
+ if (process.env.PRIMITIVE_PROJECT_CONFIG) {
95
+ return dirname(path);
96
+ }
97
+ return dirname(dirname(path));
98
+ }
99
+ /**
100
+ * Validates a raw parsed object against the ProjectConfig schema.
101
+ * Throws ProjectConfigError with a helpful message on any problem.
102
+ */
103
+ export function validateProjectConfig(raw, sourcePath) {
104
+ if (!raw || typeof raw !== "object" || Array.isArray(raw)) {
105
+ throw new ProjectConfigError(`${PROJECT_CONFIG_DISPLAY_NAME} must contain a JSON object at the top level.`, sourcePath);
106
+ }
107
+ const obj = raw;
108
+ // Version is required.
109
+ if (typeof obj.version !== "number" || !Number.isInteger(obj.version)) {
110
+ throw new ProjectConfigError(`${PROJECT_CONFIG_DISPLAY_NAME} is missing required integer field "version".`, sourcePath);
111
+ }
112
+ const version = obj.version;
113
+ // Caret-range compatibility: accept any config whose major version matches.
114
+ // For version 1.x this is simply version === 1; when we ship v2 we'll
115
+ // reject v1 configs and tell the user to migrate.
116
+ if (version !== CURRENT_CONFIG_VERSION) {
117
+ if (version > CURRENT_CONFIG_VERSION) {
118
+ throw new ProjectConfigError(`${PROJECT_CONFIG_DISPLAY_NAME} has version ${version}, but this CLI only understands version ${CURRENT_CONFIG_VERSION}. Please upgrade the CLI: ${cliUpgradeCommand()}`, sourcePath);
119
+ }
120
+ throw new ProjectConfigError(`${PROJECT_CONFIG_DISPLAY_NAME} has unsupported version ${version}. This CLI expects version ${CURRENT_CONFIG_VERSION}.`, sourcePath);
121
+ }
122
+ // environments is required.
123
+ if (!obj.environments || typeof obj.environments !== "object" || Array.isArray(obj.environments)) {
124
+ throw new ProjectConfigError(`${PROJECT_CONFIG_DISPLAY_NAME} is missing required "environments" object.`, sourcePath);
125
+ }
126
+ const environments = {};
127
+ for (const [name, envRaw] of Object.entries(obj.environments)) {
128
+ if (!name.match(/^[a-zA-Z0-9][a-zA-Z0-9_-]*$/)) {
129
+ throw new ProjectConfigError(`Invalid environment name "${name}" in ${PROJECT_CONFIG_DISPLAY_NAME}. Names must be alphanumeric with optional dashes/underscores.`, sourcePath);
130
+ }
131
+ if (!envRaw || typeof envRaw !== "object" || Array.isArray(envRaw)) {
132
+ throw new ProjectConfigError(`Environment "${name}" must be an object in ${PROJECT_CONFIG_DISPLAY_NAME}.`, sourcePath);
133
+ }
134
+ const envObj = envRaw;
135
+ if (typeof envObj.apiUrl !== "string" || !envObj.apiUrl) {
136
+ throw new ProjectConfigError(`Environment "${name}" must have a non-empty "apiUrl" string in ${PROJECT_CONFIG_DISPLAY_NAME}.`, sourcePath);
137
+ }
138
+ if (validateServerUrl(envObj.apiUrl) !== true) {
139
+ throw new ProjectConfigError(`Environment "${name}" has invalid apiUrl: ${envObj.apiUrl}`, sourcePath);
140
+ }
141
+ if (envObj.appId !== undefined && typeof envObj.appId !== "string") {
142
+ throw new ProjectConfigError(`Environment "${name}": "appId" must be a string if set.`, sourcePath);
143
+ }
144
+ if (envObj.appName !== undefined && typeof envObj.appName !== "string") {
145
+ throw new ProjectConfigError(`Environment "${name}": "appName" must be a string if set.`, sourcePath);
146
+ }
147
+ if (envObj.description !== undefined && typeof envObj.description !== "string") {
148
+ throw new ProjectConfigError(`Environment "${name}": "description" must be a string if set.`, sourcePath);
149
+ }
150
+ environments[name] = {
151
+ apiUrl: envObj.apiUrl.replace(/\/$/, ""),
152
+ appId: envObj.appId,
153
+ appName: envObj.appName,
154
+ description: envObj.description,
155
+ };
156
+ }
157
+ // defaultEnvironment is optional but must refer to a real environment.
158
+ let defaultEnvironment;
159
+ if (obj.defaultEnvironment !== undefined) {
160
+ if (typeof obj.defaultEnvironment !== "string") {
161
+ throw new ProjectConfigError(`"defaultEnvironment" must be a string if set.`, sourcePath);
162
+ }
163
+ if (obj.defaultEnvironment && !environments[obj.defaultEnvironment]) {
164
+ throw new ProjectConfigError(`"defaultEnvironment" is set to "${obj.defaultEnvironment}" but no such environment is defined.`, sourcePath);
165
+ }
166
+ defaultEnvironment = obj.defaultEnvironment || undefined;
167
+ }
168
+ return { version, defaultEnvironment, environments };
169
+ }
170
+ /**
171
+ * Loads and validates the project config from a specific file path.
172
+ * Throws ProjectConfigError on I/O errors, JSON parse errors, or schema
173
+ * validation failures — we deliberately do NOT swallow these, because a
174
+ * broken config should be noisy so the user can fix it.
175
+ */
176
+ export function loadProjectConfigFromPath(path) {
177
+ let raw;
178
+ try {
179
+ raw = readFileSync(path, "utf-8");
180
+ }
181
+ catch (err) {
182
+ throw new ProjectConfigError(`Failed to read ${PROJECT_CONFIG_DISPLAY_NAME}: ${err.message}`, path);
183
+ }
184
+ let parsed;
185
+ try {
186
+ parsed = JSON.parse(raw);
187
+ }
188
+ catch (err) {
189
+ throw new ProjectConfigError(`Failed to parse ${PROJECT_CONFIG_DISPLAY_NAME}: ${err.message}`, path);
190
+ }
191
+ return validateProjectConfig(parsed, path);
192
+ }
193
+ /**
194
+ * Loads the project config by searching upward from the current directory.
195
+ * Returns null (not an error) if no .primitive/config.json is found anywhere.
196
+ * Still throws ProjectConfigError if a config IS found but is invalid.
197
+ */
198
+ export function loadProjectConfig(startDir = process.cwd()) {
199
+ const path = findProjectConfigPath(startDir);
200
+ if (!path)
201
+ return null;
202
+ return loadProjectConfigFromPath(path);
203
+ }
204
+ /**
205
+ * Writes a project config to disk as pretty-printed JSON. Callers are
206
+ * responsible for ensuring the parent directory exists — this function
207
+ * does not try to be clever about location.
208
+ */
209
+ export function saveProjectConfig(path, config) {
210
+ const dir = dirname(path);
211
+ if (!existsSync(dir)) {
212
+ mkdirSync(dir, { recursive: true });
213
+ }
214
+ const serialized = JSON.stringify(config, null, 2) + "\n";
215
+ writeFileSync(path, serialized);
216
+ }
217
+ //# sourceMappingURL=project-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-config.js","sourceRoot":"","sources":["../../../src/lib/project-config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Shared constant for the query operators an operation `filter` may use,
3
+ * plus a helper to find operator keys that aren't in the supported set.
4
+ *
5
+ * Background (issue #1255): a database-operation `filter` uses Mongo-style
6
+ * operators (`$gte`, `$in`, ...). A typo like `$gt` → `$gte` or an invented
7
+ * `$foo` silently passes `config push` (the server only validates `filter` is
8
+ * an object) and then throws `InvalidOperatorError` at *query execution*.
9
+ * The CLI can warn about unknown operators at push time so the author fixes
10
+ * it before it reaches runtime.
11
+ *
12
+ * The set mirrors the runtime translator
13
+ * (`packages/js-bao/src/query/JsonQueryTranslator.ts`): field operators
14
+ * (`translateFieldCondition` / substring ops) plus the two logical
15
+ * combinators special-cased in `translateFilter` (`$and` / `$or`).
16
+ *
17
+ * `$not` is intentionally NOT included — it is not a runtime operator; the
18
+ * translator only special-cases `$and` / `$or`, so `$not` would throw at
19
+ * execution just like any other unknown operator (codex review, #1255).
20
+ *
21
+ * This is deliberately a single source of truth so the validator and any
22
+ * future emitter/detector agree on what "known" means.
23
+ */
24
+ /** Field-level comparison / membership / string operators. */
25
+ export declare const FIELD_QUERY_OPERATORS: readonly string[];
26
+ /** Logical combinators (arrays of sub-filters). */
27
+ export declare const LOGICAL_QUERY_OPERATORS: readonly string[];
28
+ /**
29
+ * Every operator the runtime query translator accepts. Any `$`-prefixed
30
+ * *key* inside a filter that is not in this set is unknown.
31
+ */
32
+ export declare const SUPPORTED_QUERY_OPERATORS: ReadonlySet<string>;
33
+ /**
34
+ * Recursively collect the distinct `$`-prefixed *keys* used in a filter (or
35
+ * any nested value) that are not in {@link SUPPORTED_QUERY_OPERATORS}.
36
+ *
37
+ * Only object *keys* are considered operators — matching the runtime
38
+ * convention (`walk-operation.ts`: `$`-prefixed keys are operators). String
39
+ * *values* like `$params.activeSince` are substitution references, never
40
+ * operators, so they are never flagged. `$and` / `$or` values are arrays of
41
+ * sub-filter objects and are walked recursively.
42
+ */
43
+ export declare function collectUnknownOperators(value: any): string[];