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,151 @@
1
+ /**
2
+ * CLI TOML parser / validator / serializer for resource-metadata config
3
+ * surfaces (issue #1304, P-B — CLI/TOML config-sync).
4
+ *
5
+ * Two surfaces, mirroring the "config change ships all three surfaces" rule
6
+ * (CLAUDE.md; same shape as the database type-config helpers in
7
+ * `toml-database-config.ts`):
8
+ *
9
+ * 1. `MetadataCategoryConfig` blocks — a per-`{resourceType, category}`
10
+ * typed-schema + read/write-rule definition. These round-trip through
11
+ * `primitive config push` / `pull` against the P-A REST API
12
+ * (`metadata-categories` CRUD). One file = one category, using a single
13
+ * `[metadataCategoryConfig]` section so the nested `schema.fields.*`
14
+ * tables serialize cleanly and byte-stably.
15
+ *
16
+ * 2. The declared-access manifest (`[metadata]` + `secrets` blocks) that
17
+ * lives on the owning config surfaces (`CollectionTypeConfig` /
18
+ * `DatabaseTypeConfig` / `WorkflowDefinition`). This module provides the
19
+ * TOML *structure* + *validator* + byte-stable round-trip helpers for the
20
+ * manifest so a bad value is rejected with a clear error. Wiring the
21
+ * manifest onto those config models' config push/pull (which needs a
22
+ * storage field on each model) is P-C's "persist the manifest on owning
23
+ * configs" work — this module ships the parse/validate/serialize the
24
+ * P-C eval-site folding will call, matching how earlier phases shipped a
25
+ * validated mechanism ahead of its live wiring.
26
+ *
27
+ * All functions here are pure and unit-testable (no network, no filesystem).
28
+ * `validate*` functions return an error string (or `null` when valid) rather
29
+ * than throwing, mirroring `validateCategorySchema` server-side.
30
+ */
31
+ /** The reserved projected category (computed live from a resource's columns).
32
+ * Matches the server's `RESERVED_PROJECTED_CATEGORY`. */
33
+ export declare const RESERVED_CATEGORY = "attrs";
34
+ /** The REST body shape for a category-config upsert (P-A `metadata-categories`). */
35
+ export interface MetadataCategoryConfigInput {
36
+ resourceType: string;
37
+ category: string;
38
+ schema: unknown;
39
+ readRule: string | null;
40
+ writeRule: string | null;
41
+ description: string | null;
42
+ /**
43
+ * Declared-access manifest (#1420 Phase 2) — the top-level `[metadata]` /
44
+ * `secrets` block that lets the category's `readRule`/`writeRule` reach
45
+ * `md.self.*` / `secrets.*`. Null when the config declares none.
46
+ */
47
+ metadataManifest: DeclaredAccessManifest | null;
48
+ }
49
+ /**
50
+ * Normalize a parsed `[metadataCategoryConfig]` TOML section into the REST
51
+ * upsert body. Server-managed fields (`schemaVersion`, `generation`) are never
52
+ * emitted or read here — they'd churn a round-trip.
53
+ *
54
+ * #2644 — the field list comes from the vendored definition (it used to be
55
+ * written out here, and again in `CATEGORY_SECTION_KEYS`, and again in the
56
+ * serializer), so a scalar added there is read off the file with no edit here.
57
+ */
58
+ export declare function parseMetadataCategoryToml(tomlData: any): MetadataCategoryConfigInput;
59
+ /**
60
+ * Validate a parsed category config (post-{@link parseMetadataCategoryToml}).
61
+ * Returns an error string, or `null` when valid. The server re-validates on
62
+ * write; this is the fast local check so `config push` fails with a clear
63
+ * message before hitting the network.
64
+ */
65
+ export declare function validateMetadataCategoryConfig(input: MetadataCategoryConfigInput): string | null;
66
+ /**
67
+ * Validate the `schema` block is a well-formed js-bao `FieldOptions` map:
68
+ * `{ fields: { <name>: { type, required?, maxLength?, maxCount?, enum? } } }`.
69
+ * Mirrors the server's `validateCategorySchema`.
70
+ */
71
+ export declare function validateCategorySchema(schema: unknown): string | null;
72
+ /**
73
+ * Serialize a category config (as returned by the P-A REST API — `schema` is a
74
+ * parsed object) to byte-stable TOML. Only the authored fields are emitted;
75
+ * server-managed `schemaVersion` / `generation` / `appId` / `categoryKey` are
76
+ * dropped so a pull → push → pull cycle is a no-op.
77
+ *
78
+ * Scalars are inserted before `schema` so `smol-toml` emits them ahead of
79
+ * the nested `[metadataCategoryConfig.schema.fields.*]` tables.
80
+ */
81
+ export declare function serializeMetadataCategoryConfig(config: any, logger?: (message: string) => void): string;
82
+ /** The one **server-authenticated** `rootFrom` root — the calling user's id
83
+ * (issue #1362). Unlike the {@link ROOT_CONTEXT_PREFIXES} roots (caller-supplied),
84
+ * `user.userId` binds the authenticated principal, so a rule may read the
85
+ * caller's own metadata (`md.<name>`). Mirrors the server's `CALLER_ROOTFROM`. */
86
+ export declare const CALLER_ROOTFROM = "user.userId";
87
+ /** The target `type` a {@link CALLER_ROOTFROM} path must declare. `user.userId`
88
+ * names a user, so the path must resolve `user`-typed metadata; a mismatched
89
+ * type would silently query `app#<type>#<userId>` for a resource that isn't the
90
+ * user. Mirrors the server's `CALLER_ROOTFROM_TYPE`. */
91
+ export declare const CALLER_ROOTFROM_TYPE = "user";
92
+ /**
93
+ * Validate a path's `rootFrom` value together with its declared target `type`
94
+ * (issue #1362), mirroring the server's `validateRootFromPath`
95
+ * (`src/app-api/helpers/metadata-cel-access.ts`). A `rootFrom` is sound when it
96
+ * is either:
97
+ *
98
+ * - a static dotted **caller-supplied** context path rooted at one of
99
+ * {@link ROOT_CONTEXT_PREFIXES} (`input.*`/`record.*`/`params.*`), with at
100
+ * least two segments; or
101
+ * - exactly {@link CALLER_ROOTFROM} (`user.userId`) — the one
102
+ * **server-authenticated** root — in which case the path must also declare
103
+ * `type = "user"` ({@link CALLER_ROOTFROM_TYPE}).
104
+ *
105
+ * Any other `user.*` path is rejected outright — the caller root is a single
106
+ * special case, not a blanket `user.*` namespace (Fork 1 = A). This is the fast
107
+ * local check so `config push` fails with a clear message before the network call;
108
+ * the server's `validateRootFromPath` re-validates at persist time. Returns a
109
+ * human-readable reason (worded to follow `metadata.paths."<name>" `), or null
110
+ * when sound.
111
+ */
112
+ export declare function validateRootFromPath(root: string, type: string | undefined): string | null;
113
+ export interface DeclaredAccessManifest {
114
+ self?: {
115
+ categories: string[];
116
+ };
117
+ paths?: Record<string, {
118
+ from?: string;
119
+ rootFrom?: string;
120
+ via?: string;
121
+ type?: string;
122
+ categories: string[];
123
+ }>;
124
+ secrets?: string[];
125
+ vars?: string[];
126
+ }
127
+ /**
128
+ * Read the declared-access manifest out of a parsed config TOML: the top-level
129
+ * `[metadata]` table (self + paths) and the `secrets` / `vars` arrays. Returns
130
+ * `null` when none is present (the config declares no metadata/scalar access).
131
+ */
132
+ export declare function parseDeclaredAccessManifestToml(tomlData: any): DeclaredAccessManifest | null;
133
+ /**
134
+ * Validate a declared-access manifest structurally. Returns an error string,
135
+ * or `null` when valid. This is the local surface-level check (identifier
136
+ * names, key shape, exactly-one-root per path); the server's
137
+ * `validatePathGraph` still does the deep graph validation (cycles, depth,
138
+ * schema-mismatch) at persist time.
139
+ */
140
+ export declare function validateDeclaredAccessManifest(manifest: DeclaredAccessManifest | null | undefined): string | null;
141
+ /**
142
+ * Serialize a declared-access manifest into the TOML fragment object that
143
+ * merges into an owning config's TOML data (the caller spreads the returned
144
+ * keys alongside the config's own section). Returns `{}` when empty so a
145
+ * config with no declared access emits nothing (byte-stable).
146
+ */
147
+ export declare function serializeDeclaredAccessManifest(manifest: DeclaredAccessManifest | null | undefined): {
148
+ metadata?: any;
149
+ secrets?: string[];
150
+ vars?: string[];
151
+ };
@@ -0,0 +1,476 @@
1
+ /**
2
+ * CLI TOML parser / validator / serializer for resource-metadata config
3
+ * surfaces (issue #1304, P-B — CLI/TOML config-sync).
4
+ *
5
+ * Two surfaces, mirroring the "config change ships all three surfaces" rule
6
+ * (CLAUDE.md; same shape as the database type-config helpers in
7
+ * `toml-database-config.ts`):
8
+ *
9
+ * 1. `MetadataCategoryConfig` blocks — a per-`{resourceType, category}`
10
+ * typed-schema + read/write-rule definition. These round-trip through
11
+ * `primitive config push` / `pull` against the P-A REST API
12
+ * (`metadata-categories` CRUD). One file = one category, using a single
13
+ * `[metadataCategoryConfig]` section so the nested `schema.fields.*`
14
+ * tables serialize cleanly and byte-stably.
15
+ *
16
+ * 2. The declared-access manifest (`[metadata]` + `secrets` blocks) that
17
+ * lives on the owning config surfaces (`CollectionTypeConfig` /
18
+ * `DatabaseTypeConfig` / `WorkflowDefinition`). This module provides the
19
+ * TOML *structure* + *validator* + byte-stable round-trip helpers for the
20
+ * manifest so a bad value is rejected with a clear error. Wiring the
21
+ * manifest onto those config models' config push/pull (which needs a
22
+ * storage field on each model) is P-C's "persist the manifest on owning
23
+ * configs" work — this module ships the parse/validate/serialize the
24
+ * P-C eval-site folding will call, matching how earlier phases shipped a
25
+ * validated mechanism ahead of its live wiring.
26
+ *
27
+ * All functions here are pure and unit-testable (no network, no filesystem).
28
+ * `validate*` functions return an error string (or `null` when valid) rather
29
+ * than throwing, mirroring `validateCategorySchema` server-side.
30
+ */
31
+ import { stringifyConfigToml } from "./config-toml.js";
32
+ // #2644 — the one definition for the metadata-category configuration object.
33
+ import { METADATA_CATEGORY_CONFIG_TABLE, warnUnrecognizedServerKeys, } from "./config-surface.js";
34
+ import { buildPayloadFromToml, projectRecordToToml, } from "./config-payload.js";
35
+ /** Identifier-safe name: letters, digits, underscore; not starting with a digit.
36
+ * Matches the server's `METADATA_KEY_PATTERN`. */
37
+ const IDENTIFIER_PATTERN = /^[a-zA-Z_][a-zA-Z0-9_]*$/;
38
+ /** The key format the `secrets` / `vars` services accept when a value is created
39
+ * (server's `SCALAR_KEY_RE`, secrets/vars service `KEY_REGEX`). A declared
40
+ * scalar-root key that is identifier-safe but does not match this (e.g.
41
+ * lowercase) can never be created via the API, so reject it at manifest-parse
42
+ * time on both ends (issue #1364). */
43
+ const SCALAR_KEY_PATTERN = /^[A-Z][A-Z0-9_]{0,63}$/;
44
+ /** The reserved projected category (computed live from a resource's columns).
45
+ * Matches the server's `RESERVED_PROJECTED_CATEGORY`. */
46
+ export const RESERVED_CATEGORY = "attrs";
47
+ /** The subset of js-bao `FieldOptions` field types the metadata schema accepts.
48
+ * Matches the server's `MetadataFieldType`. */
49
+ const METADATA_FIELD_TYPES = new Set([
50
+ "string",
51
+ "number",
52
+ "boolean",
53
+ "date",
54
+ "id",
55
+ "stringset",
56
+ ]);
57
+ /**
58
+ * Normalize a parsed `[metadataCategoryConfig]` TOML section into the REST
59
+ * upsert body. Server-managed fields (`schemaVersion`, `generation`) are never
60
+ * emitted or read here — they'd churn a round-trip.
61
+ *
62
+ * #2644 — the field list comes from the vendored definition (it used to be
63
+ * written out here, and again in `CATEGORY_SECTION_KEYS`, and again in the
64
+ * serializer), so a scalar added there is read off the file with no edit here.
65
+ */
66
+ export function parseMetadataCategoryToml(tomlData) {
67
+ const section = (tomlData && tomlData.metadataCategoryConfig) || {};
68
+ const nulled = (value) => value ?? null;
69
+ return {
70
+ ...buildPayloadFromToml(METADATA_CATEGORY_CONFIG_TABLE, section, {
71
+ // One upsert endpoint: every field is writable in both modes.
72
+ mode: "create",
73
+ // The file owns its rules and description — dropping a line clears the
74
+ // stored value rather than leaving it live.
75
+ values: { readRule: nulled, writeRule: nulled, description: nulled },
76
+ }),
77
+ // #1420 Phase 2: the manifest lives in the top-level `[metadata]`/`secrets`
78
+ // block (sibling to `[metadataCategoryConfig]`), reusing the shared parser.
79
+ metadataManifest: parseDeclaredAccessManifestToml(tomlData),
80
+ };
81
+ }
82
+ /**
83
+ * Validate a parsed category config (post-{@link parseMetadataCategoryToml}).
84
+ * Returns an error string, or `null` when valid. The server re-validates on
85
+ * write; this is the fast local check so `config push` fails with a clear
86
+ * message before hitting the network.
87
+ */
88
+ export function validateMetadataCategoryConfig(input) {
89
+ if (!input.resourceType || typeof input.resourceType !== "string") {
90
+ return "metadataCategoryConfig.resourceType is required and must be a string";
91
+ }
92
+ if (!IDENTIFIER_PATTERN.test(input.resourceType)) {
93
+ return `metadataCategoryConfig.resourceType "${input.resourceType}" must be identifier-safe (letters, digits, underscore; not starting with a digit)`;
94
+ }
95
+ if (!input.category || typeof input.category !== "string") {
96
+ return "metadataCategoryConfig.category is required and must be a string";
97
+ }
98
+ if (!IDENTIFIER_PATTERN.test(input.category)) {
99
+ return `metadataCategoryConfig.category "${input.category}" must be identifier-safe (letters, digits, underscore; not starting with a digit)`;
100
+ }
101
+ if (input.category === RESERVED_CATEGORY) {
102
+ return `metadataCategoryConfig.category "${RESERVED_CATEGORY}" is reserved (a projected category computed from the resource's own columns) and cannot be defined`;
103
+ }
104
+ if (input.readRule !== null &&
105
+ input.readRule !== undefined &&
106
+ typeof input.readRule !== "string") {
107
+ return "metadataCategoryConfig.readRule must be a string (a CEL expression)";
108
+ }
109
+ if (input.writeRule !== null &&
110
+ input.writeRule !== undefined &&
111
+ typeof input.writeRule !== "string") {
112
+ return "metadataCategoryConfig.writeRule must be a string (a CEL expression)";
113
+ }
114
+ if (input.description !== null &&
115
+ input.description !== undefined &&
116
+ typeof input.description !== "string") {
117
+ return "metadataCategoryConfig.description must be a string";
118
+ }
119
+ const schemaError = validateCategorySchema(input.schema);
120
+ if (schemaError)
121
+ return schemaError;
122
+ // #1420 Phase 2: local surface-level check on the declared-access manifest;
123
+ // the server re-validates the deep path graph at persist time.
124
+ return validateDeclaredAccessManifest(input.metadataManifest);
125
+ }
126
+ /**
127
+ * Validate the `schema` block is a well-formed js-bao `FieldOptions` map:
128
+ * `{ fields: { <name>: { type, required?, maxLength?, maxCount?, enum? } } }`.
129
+ * Mirrors the server's `validateCategorySchema`.
130
+ */
131
+ export function validateCategorySchema(schema) {
132
+ if (schema === null || typeof schema !== "object" || Array.isArray(schema)) {
133
+ return "metadataCategoryConfig.schema must be a table with a 'fields' map";
134
+ }
135
+ const fields = schema.fields;
136
+ if (fields === null || typeof fields !== "object" || Array.isArray(fields)) {
137
+ return "metadataCategoryConfig.schema.fields must be a table";
138
+ }
139
+ // Reject unknown top-level keys under `schema` (only `fields` is meaningful).
140
+ for (const key of Object.keys(schema)) {
141
+ if (key !== "fields") {
142
+ return `metadataCategoryConfig.schema has an unknown key "${key}" (only "fields" is allowed)`;
143
+ }
144
+ }
145
+ let uniqueCount = 0;
146
+ for (const [name, def] of Object.entries(fields)) {
147
+ if (!IDENTIFIER_PATTERN.test(name)) {
148
+ return `schema field name "${name}" must be identifier-safe`;
149
+ }
150
+ if (def === null || typeof def !== "object" || Array.isArray(def)) {
151
+ return `schema field "${name}" must be a table with a "type"`;
152
+ }
153
+ const field = def;
154
+ if (typeof field.type !== "string" || !METADATA_FIELD_TYPES.has(field.type)) {
155
+ return `schema field "${name}" has an invalid type (allowed: ${[
156
+ ...METADATA_FIELD_TYPES,
157
+ ].join(", ")})`;
158
+ }
159
+ if (field.enum !== undefined) {
160
+ if (!Array.isArray(field.enum) ||
161
+ field.enum.some((v) => typeof v !== "string")) {
162
+ return `schema field "${name}" enum must be an array of strings`;
163
+ }
164
+ if (field.type !== "string") {
165
+ return `schema field "${name}" enum is only valid on a "string" field`;
166
+ }
167
+ }
168
+ if (field.maxLength !== undefined && typeof field.maxLength !== "number") {
169
+ return `schema field "${name}" maxLength must be a number`;
170
+ }
171
+ if (field.maxCount !== undefined && typeof field.maxCount !== "number") {
172
+ return `schema field "${name}" maxCount must be a number`;
173
+ }
174
+ if (field.required !== undefined && typeof field.required !== "boolean") {
175
+ return `schema field "${name}" required must be a boolean`;
176
+ }
177
+ // Issue #1361 — the reverse-resolve `unique` flag. Mirrors the server's
178
+ // `validateCategorySchema` exactly (boolean, only on "string"/"id", at most
179
+ // one unique field per category). Parity is pinned by tests.
180
+ if (field.unique !== undefined) {
181
+ if (typeof field.unique !== "boolean") {
182
+ return `schema field "${name}" unique must be a boolean`;
183
+ }
184
+ if (field.unique) {
185
+ if (field.type !== "string" && field.type !== "id") {
186
+ return `schema field "${name}" unique is only valid on a "string" or "id" field`;
187
+ }
188
+ uniqueCount += 1;
189
+ if (uniqueCount > 1) {
190
+ return `a category may declare at most one unique field (found more than one)`;
191
+ }
192
+ }
193
+ }
194
+ }
195
+ return null;
196
+ }
197
+ /**
198
+ * Serialize a category config (as returned by the P-A REST API — `schema` is a
199
+ * parsed object) to byte-stable TOML. Only the authored fields are emitted;
200
+ * server-managed `schemaVersion` / `generation` / `appId` / `categoryKey` are
201
+ * dropped so a pull → push → pull cycle is a no-op.
202
+ *
203
+ * Scalars are inserted before `schema` so `smol-toml` emits them ahead of
204
+ * the nested `[metadataCategoryConfig.schema.fields.*]` tables.
205
+ */
206
+ export function serializeMetadataCategoryConfig(config, logger) {
207
+ // #2644 — name any server key this CLI version does not know rather than
208
+ // dropping it silently, and take the emitted key set from the definition.
209
+ warnUnrecognizedServerKeys(config, METADATA_CATEGORY_CONFIG_TABLE, `metadata-category-configs/${config?.resourceType}.${config?.category}.toml`, logger);
210
+ const section = projectRecordToToml(METADATA_CATEGORY_CONFIG_TABLE, config, {
211
+ // `schema` may arrive as a parsed object (REST) or a JSON string
212
+ // (defensive), and is always emitted — an absent one as an empty
213
+ // `{ fields: {} }`, so the file stays pushable.
214
+ schema: (record) => {
215
+ let schema = record?.schema;
216
+ if (typeof schema === "string") {
217
+ try {
218
+ schema = JSON.parse(schema);
219
+ }
220
+ catch {
221
+ schema = { fields: {} };
222
+ }
223
+ }
224
+ return schema ?? { fields: {} };
225
+ },
226
+ });
227
+ // #1420 Phase 2: emit the declared-access manifest as a top-level
228
+ // `[metadata]`/`secrets` block (sibling to `[metadataCategoryConfig]`),
229
+ // reusing the shared serializer so it round-trips byte-stable.
230
+ return stringifyConfigToml({
231
+ metadataCategoryConfig: section,
232
+ ...serializeDeclaredAccessManifest(config.metadataManifest),
233
+ });
234
+ }
235
+ // --- Declared-access manifest (`[metadata]` + `secrets` + `vars`) ----------
236
+ //
237
+ // The manifest that lives on an owning config surface. Shape mirrors the
238
+ // server's `MetadataDeclaration` (`src/app-api/helpers/metadata-cel-access.ts`):
239
+ // metadata.self.categories = ["profile"]
240
+ // [metadata.paths.<name>] from|rootFrom, via, type, categories
241
+ // secrets = ["STRIPE_KEY"]
242
+ // vars = ["ADMIN_GROUP_ID"] # non-secret twin of secrets (issue #1364)
243
+ /** Root contexts a `rootFrom` path may start at (caller-supplied subjectless
244
+ * contexts). Mirrors the server's `ROOT_CONTEXT_PREFIXES`
245
+ * (`src/app-api/helpers/metadata-cel-access.ts`). */
246
+ const ROOT_CONTEXT_PREFIXES = ["input", "record", "params"];
247
+ /** The one **server-authenticated** `rootFrom` root — the calling user's id
248
+ * (issue #1362). Unlike the {@link ROOT_CONTEXT_PREFIXES} roots (caller-supplied),
249
+ * `user.userId` binds the authenticated principal, so a rule may read the
250
+ * caller's own metadata (`md.<name>`). Mirrors the server's `CALLER_ROOTFROM`. */
251
+ export const CALLER_ROOTFROM = "user.userId";
252
+ /** The target `type` a {@link CALLER_ROOTFROM} path must declare. `user.userId`
253
+ * names a user, so the path must resolve `user`-typed metadata; a mismatched
254
+ * type would silently query `app#<type>#<userId>` for a resource that isn't the
255
+ * user. Mirrors the server's `CALLER_ROOTFROM_TYPE`. */
256
+ export const CALLER_ROOTFROM_TYPE = "user";
257
+ /**
258
+ * Validate a path's `rootFrom` value together with its declared target `type`
259
+ * (issue #1362), mirroring the server's `validateRootFromPath`
260
+ * (`src/app-api/helpers/metadata-cel-access.ts`). A `rootFrom` is sound when it
261
+ * is either:
262
+ *
263
+ * - a static dotted **caller-supplied** context path rooted at one of
264
+ * {@link ROOT_CONTEXT_PREFIXES} (`input.*`/`record.*`/`params.*`), with at
265
+ * least two segments; or
266
+ * - exactly {@link CALLER_ROOTFROM} (`user.userId`) — the one
267
+ * **server-authenticated** root — in which case the path must also declare
268
+ * `type = "user"` ({@link CALLER_ROOTFROM_TYPE}).
269
+ *
270
+ * Any other `user.*` path is rejected outright — the caller root is a single
271
+ * special case, not a blanket `user.*` namespace (Fork 1 = A). This is the fast
272
+ * local check so `config push` fails with a clear message before the network call;
273
+ * the server's `validateRootFromPath` re-validates at persist time. Returns a
274
+ * human-readable reason (worded to follow `metadata.paths."<name>" `), or null
275
+ * when sound.
276
+ */
277
+ export function validateRootFromPath(root, type) {
278
+ if (root === CALLER_ROOTFROM) {
279
+ if (type !== CALLER_ROOTFROM_TYPE) {
280
+ return `rootFrom "${CALLER_ROOTFROM}" requires type = "${CALLER_ROOTFROM_TYPE}" (got ${type ? `"${type}"` : "no type"})`;
281
+ }
282
+ return null;
283
+ }
284
+ const prefix = root.split(".")[0];
285
+ if (prefix === "user") {
286
+ return `rootFrom "${root}" is not allowed — the only server-authenticated root is "${CALLER_ROOTFROM}"`;
287
+ }
288
+ const segments = root.split(".");
289
+ const isStaticDotted = segments.length >= 1 && segments.every((s) => IDENTIFIER_PATTERN.test(s));
290
+ if (!isStaticDotted ||
291
+ segments.length < 2 ||
292
+ !ROOT_CONTEXT_PREFIXES.includes(prefix)) {
293
+ return `rootFrom "${root}" must be a static dotted context path rooted at ${ROOT_CONTEXT_PREFIXES.join("/")} or "${CALLER_ROOTFROM}"`;
294
+ }
295
+ return null;
296
+ }
297
+ const MANIFEST_KEYS = new Set(["self", "paths", "secrets", "vars"]);
298
+ const SELF_KEYS = new Set(["categories"]);
299
+ const PATH_KEYS = new Set(["from", "rootFrom", "via", "type", "categories"]);
300
+ /** The declared scalar roots: `secrets` (masked) and `vars` (non-secret). */
301
+ const SCALAR_ROOT_KEYS = [
302
+ { key: "secrets", singular: "secret" },
303
+ { key: "vars", singular: "var" },
304
+ ];
305
+ /**
306
+ * Read the declared-access manifest out of a parsed config TOML: the top-level
307
+ * `[metadata]` table (self + paths) and the `secrets` / `vars` arrays. Returns
308
+ * `null` when none is present (the config declares no metadata/scalar access).
309
+ */
310
+ export function parseDeclaredAccessManifestToml(tomlData) {
311
+ const metadata = tomlData?.metadata;
312
+ const secrets = tomlData?.secrets;
313
+ const vars = tomlData?.vars;
314
+ if (metadata === undefined && secrets === undefined && vars === undefined) {
315
+ return null;
316
+ }
317
+ const manifest = {};
318
+ if (metadata && typeof metadata === "object") {
319
+ if (metadata.self !== undefined) {
320
+ manifest.self = { categories: metadata.self?.categories };
321
+ }
322
+ if (metadata.paths !== undefined) {
323
+ manifest.paths = metadata.paths;
324
+ }
325
+ }
326
+ if (secrets !== undefined) {
327
+ manifest.secrets = secrets;
328
+ }
329
+ if (vars !== undefined) {
330
+ manifest.vars = vars;
331
+ }
332
+ return manifest;
333
+ }
334
+ /**
335
+ * Validate a declared-access manifest structurally. Returns an error string,
336
+ * or `null` when valid. This is the local surface-level check (identifier
337
+ * names, key shape, exactly-one-root per path); the server's
338
+ * `validatePathGraph` still does the deep graph validation (cycles, depth,
339
+ * schema-mismatch) at persist time.
340
+ */
341
+ export function validateDeclaredAccessManifest(manifest) {
342
+ if (manifest === null || manifest === undefined)
343
+ return null;
344
+ if (typeof manifest !== "object" || Array.isArray(manifest)) {
345
+ return "declared-access manifest must be a table";
346
+ }
347
+ // `self`
348
+ if (manifest.self !== undefined) {
349
+ const self = manifest.self;
350
+ if (self === null || typeof self !== "object" || Array.isArray(self)) {
351
+ return "metadata.self must be a table with a 'categories' array";
352
+ }
353
+ for (const key of Object.keys(self)) {
354
+ if (!SELF_KEYS.has(key)) {
355
+ return `metadata.self has an unknown key "${key}" (only "categories" is allowed)`;
356
+ }
357
+ }
358
+ const catError = validateCategoryList(self.categories, "metadata.self");
359
+ if (catError)
360
+ return catError;
361
+ }
362
+ // `paths`
363
+ if (manifest.paths !== undefined) {
364
+ const paths = manifest.paths;
365
+ if (paths === null || typeof paths !== "object" || Array.isArray(paths)) {
366
+ return "metadata.paths must be a table of named path declarations";
367
+ }
368
+ const declaredNodes = new Set(["self", ...Object.keys(paths)]);
369
+ for (const [name, raw] of Object.entries(paths)) {
370
+ if (!IDENTIFIER_PATTERN.test(name)) {
371
+ return `metadata.paths."${name}" name must be identifier-safe`;
372
+ }
373
+ if (raw === null || typeof raw !== "object" || Array.isArray(raw)) {
374
+ return `metadata.paths."${name}" must be a table`;
375
+ }
376
+ const p = raw;
377
+ for (const key of Object.keys(p)) {
378
+ if (!PATH_KEYS.has(key)) {
379
+ return `metadata.paths."${name}" has an unknown key "${key}" (allowed: ${[
380
+ ...PATH_KEYS,
381
+ ].join(", ")})`;
382
+ }
383
+ }
384
+ const hasFrom = typeof p.from === "string" && p.from !== "";
385
+ const hasRoot = typeof p.rootFrom === "string" && p.rootFrom !== "";
386
+ if (hasFrom === hasRoot) {
387
+ return `metadata.paths."${name}" must declare exactly one of "from" or "rootFrom"`;
388
+ }
389
+ if (hasFrom) {
390
+ if (!declaredNodes.has(p.from)) {
391
+ return `metadata.paths."${name}" from "${p.from}" references an undeclared node (must be "self" or another declared path)`;
392
+ }
393
+ if (typeof p.via !== "string" || !p.via.includes(".")) {
394
+ return `metadata.paths."${name}" must declare a "via" of the form "<category>.<key>"`;
395
+ }
396
+ }
397
+ else {
398
+ // rootFrom: a caller-supplied static context path
399
+ // (`input.*`/`record.*`/`params.*`) OR the server-authenticated
400
+ // `user.userId` root (which requires `type = "user"`). Mirrors the
401
+ // server's `validateRootFromPath` (issue #1362).
402
+ const rootFrom = p.rootFrom;
403
+ const type = typeof p.type === "string" ? p.type : undefined;
404
+ const rootReason = validateRootFromPath(rootFrom, type);
405
+ if (rootReason) {
406
+ return `metadata.paths."${name}" ${rootReason}`;
407
+ }
408
+ if (p.via !== undefined) {
409
+ return `metadata.paths."${name}" roots at "${rootFrom}" and must not also declare "via"`;
410
+ }
411
+ }
412
+ if (typeof p.type !== "string" || p.type === "") {
413
+ return `metadata.paths."${name}" must declare a target "type" (the resource type)`;
414
+ }
415
+ const catError = validateCategoryList(p.categories, `metadata.paths."${name}"`);
416
+ if (catError)
417
+ return catError;
418
+ }
419
+ }
420
+ // `secrets` / `vars` — the declared scalar roots share one key-list shape.
421
+ for (const { key: rootKey, singular } of SCALAR_ROOT_KEYS) {
422
+ const keys = manifest[rootKey];
423
+ if (keys === undefined)
424
+ continue;
425
+ if (!Array.isArray(keys) || keys.some((s) => typeof s !== "string")) {
426
+ return `${rootKey} must be an array of ${singular} key names (strings)`;
427
+ }
428
+ for (const key of keys) {
429
+ if (!SCALAR_KEY_PATTERN.test(key)) {
430
+ return `${rootKey} key "${key}" must match ^[A-Z][A-Z0-9_]{0,63}$ (uppercase letters, digits, underscores; must start with a letter; max 64 chars)`;
431
+ }
432
+ }
433
+ }
434
+ return null;
435
+ }
436
+ function validateCategoryList(categories, where) {
437
+ if (!Array.isArray(categories) ||
438
+ categories.some((c) => typeof c !== "string")) {
439
+ return `${where}.categories must be an array of category names (strings)`;
440
+ }
441
+ for (const cat of categories) {
442
+ if (cat !== RESERVED_CATEGORY && !IDENTIFIER_PATTERN.test(cat)) {
443
+ return `${where}.categories entry "${cat}" must be identifier-safe`;
444
+ }
445
+ }
446
+ return null;
447
+ }
448
+ /**
449
+ * Serialize a declared-access manifest into the TOML fragment object that
450
+ * merges into an owning config's TOML data (the caller spreads the returned
451
+ * keys alongside the config's own section). Returns `{}` when empty so a
452
+ * config with no declared access emits nothing (byte-stable).
453
+ */
454
+ export function serializeDeclaredAccessManifest(manifest) {
455
+ if (!manifest)
456
+ return {};
457
+ const out = {};
458
+ const metadata = {};
459
+ if (manifest.self && Array.isArray(manifest.self.categories)) {
460
+ metadata.self = { categories: manifest.self.categories };
461
+ }
462
+ if (manifest.paths && Object.keys(manifest.paths).length > 0) {
463
+ metadata.paths = manifest.paths;
464
+ }
465
+ if (Object.keys(metadata).length > 0) {
466
+ out.metadata = metadata;
467
+ }
468
+ if (Array.isArray(manifest.secrets) && manifest.secrets.length > 0) {
469
+ out.secrets = manifest.secrets;
470
+ }
471
+ if (Array.isArray(manifest.vars) && manifest.vars.length > 0) {
472
+ out.vars = manifest.vars;
473
+ }
474
+ return out;
475
+ }
476
+ //# sourceMappingURL=toml-metadata-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toml-metadata-config.js","sourceRoot":"","sources":["../../../src/lib/toml-metadata-config.ts"],"names":[],"mappings":"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"}