primitive-admin 1.2.0-alpha.1 → 1.2.0-alpha.10

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 (410) hide show
  1. package/README.md +105 -134
  2. package/assets/skill/skills/primitive-platform/SKILL.md +37 -4
  3. package/dist/bin/primitive.js +30 -35
  4. package/dist/bin/primitive.js.map +1 -1
  5. package/dist/src/commands/agent-sessions.d.ts +133 -0
  6. package/dist/src/commands/agent-sessions.js +792 -0
  7. package/dist/src/commands/agent-sessions.js.map +1 -0
  8. package/dist/src/commands/analytics.js +0 -148
  9. package/dist/src/commands/analytics.js.map +1 -1
  10. package/dist/src/commands/apps-children.d.ts +54 -0
  11. package/dist/src/commands/apps-children.js +631 -0
  12. package/dist/src/commands/apps-children.js.map +1 -0
  13. package/dist/src/commands/apps.d.ts +6 -0
  14. package/dist/src/commands/apps.js +131 -9
  15. package/dist/src/commands/apps.js.map +1 -1
  16. package/dist/src/commands/auth-sessions.d.ts +3 -3
  17. package/dist/src/commands/auth-sessions.js +117 -23
  18. package/dist/src/commands/auth-sessions.js.map +1 -1
  19. package/dist/src/commands/auth.js +460 -36
  20. package/dist/src/commands/auth.js.map +1 -1
  21. package/dist/src/commands/collections.js +316 -256
  22. package/dist/src/commands/collections.js.map +1 -1
  23. package/dist/src/commands/config.d.ts +1 -1
  24. package/dist/src/commands/config.js +60 -28
  25. package/dist/src/commands/config.js.map +1 -1
  26. package/dist/src/commands/connections.js +11 -12
  27. package/dist/src/commands/connections.js.map +1 -1
  28. package/dist/src/commands/database-type-configs.js +2 -76
  29. package/dist/src/commands/database-type-configs.js.map +1 -1
  30. package/dist/src/commands/databases.d.ts +9 -0
  31. package/dist/src/commands/databases.js +221 -457
  32. package/dist/src/commands/databases.js.map +1 -1
  33. package/dist/src/commands/db3-types.d.ts +15 -0
  34. package/dist/src/commands/db3-types.js +157 -0
  35. package/dist/src/commands/db3-types.js.map +1 -0
  36. package/dist/src/commands/db3.d.ts +12 -0
  37. package/dist/src/commands/db3.js +1052 -0
  38. package/dist/src/commands/db3.js.map +1 -0
  39. package/dist/src/commands/documents.d.ts +121 -2
  40. package/dist/src/commands/documents.js +1601 -1251
  41. package/dist/src/commands/documents.js.map +1 -1
  42. package/dist/src/commands/env.d.ts +9 -1
  43. package/dist/src/commands/env.js +164 -49
  44. package/dist/src/commands/env.js.map +1 -1
  45. package/dist/src/commands/function-trigger-commands.d.ts +28 -0
  46. package/dist/src/commands/function-trigger-commands.js +341 -0
  47. package/dist/src/commands/function-trigger-commands.js.map +1 -0
  48. package/dist/src/commands/functions.js +297 -24
  49. package/dist/src/commands/functions.js.map +1 -1
  50. package/dist/src/commands/groups.js +150 -49
  51. package/dist/src/commands/groups.js.map +1 -1
  52. package/dist/src/commands/guides.js +5 -5
  53. package/dist/src/commands/init.d.ts +7 -0
  54. package/dist/src/commands/init.js +23 -5
  55. package/dist/src/commands/init.js.map +1 -1
  56. package/dist/src/commands/integrations.js +14 -8
  57. package/dist/src/commands/integrations.js.map +1 -1
  58. package/dist/src/commands/metadata-category-configs.d.ts +2 -2
  59. package/dist/src/commands/metadata-category-configs.js +2 -2
  60. package/dist/src/commands/prompts.d.ts +7 -0
  61. package/dist/src/commands/prompts.js +48 -5
  62. package/dist/src/commands/prompts.js.map +1 -1
  63. package/dist/src/commands/scripts.d.ts +9 -17
  64. package/dist/src/commands/scripts.js +24 -479
  65. package/dist/src/commands/scripts.js.map +1 -1
  66. package/dist/src/commands/sync-app-settings.d.ts +36 -8
  67. package/dist/src/commands/sync-app-settings.js +109 -23
  68. package/dist/src/commands/sync-app-settings.js.map +1 -1
  69. package/dist/src/commands/sync.d.ts +360 -610
  70. package/dist/src/commands/sync.js +3151 -6697
  71. package/dist/src/commands/sync.js.map +1 -1
  72. package/dist/src/commands/tokens.js +3 -3
  73. package/dist/src/commands/tokens.js.map +1 -1
  74. package/dist/src/commands/users.js +77 -2
  75. package/dist/src/commands/users.js.map +1 -1
  76. package/dist/src/commands/workflows.d.ts +5 -83
  77. package/dist/src/commands/workflows.js +57 -2282
  78. package/dist/src/commands/workflows.js.map +1 -1
  79. package/dist/src/lib/aggregate-output.d.ts +25 -0
  80. package/dist/src/lib/aggregate-output.js +53 -0
  81. package/dist/src/lib/aggregate-output.js.map +1 -0
  82. package/dist/src/lib/api-client.d.ts +681 -551
  83. package/dist/src/lib/api-client.js +880 -814
  84. package/dist/src/lib/api-client.js.map +1 -1
  85. package/dist/src/lib/app-settings-descriptor.d.ts +47 -1
  86. package/dist/src/lib/app-settings-descriptor.js +114 -10
  87. package/dist/src/lib/app-settings-descriptor.js.map +1 -1
  88. package/dist/src/lib/auth-fixtures.d.ts +44 -0
  89. package/dist/src/lib/auth-fixtures.js +61 -0
  90. package/dist/src/lib/auth-fixtures.js.map +1 -0
  91. package/dist/src/lib/auth-flow.d.ts +41 -1
  92. package/dist/src/lib/auth-flow.js +70 -16
  93. package/dist/src/lib/auth-flow.js.map +1 -1
  94. package/dist/src/lib/block-layout.d.ts +12 -23
  95. package/dist/src/lib/block-layout.js +26 -92
  96. package/dist/src/lib/block-layout.js.map +1 -1
  97. package/dist/src/lib/block-selector.d.ts +2 -2
  98. package/dist/src/lib/block-selector.js +2 -2
  99. package/dist/src/lib/child-apps-local.d.ts +164 -0
  100. package/dist/src/lib/child-apps-local.js +258 -0
  101. package/dist/src/lib/child-apps-local.js.map +1 -0
  102. package/dist/src/lib/ci-session-request.d.ts +22 -0
  103. package/dist/src/lib/ci-session-request.js +51 -0
  104. package/dist/src/lib/ci-session-request.js.map +1 -0
  105. package/dist/src/lib/codegen-shared/generatedFiles.d.ts +10 -8
  106. package/dist/src/lib/codegen-shared/generatedFiles.js +21 -15
  107. package/dist/src/lib/codegen-shared/generatedFiles.js.map +1 -1
  108. package/dist/src/lib/codegen-shared/prettierStable.d.ts +1 -1
  109. package/dist/src/lib/codegen-shared/prettierStable.js +1 -1
  110. package/dist/src/lib/codegen-shared/resolveCodegenSourceDir.d.ts +2 -2
  111. package/dist/src/lib/codegen-shared/resolveCodegenSourceDir.js +2 -2
  112. package/dist/src/lib/collection-export.d.ts +76 -15
  113. package/dist/src/lib/collection-export.js +116 -23
  114. package/dist/src/lib/collection-export.js.map +1 -1
  115. package/dist/src/lib/collection-principal.d.ts +22 -0
  116. package/dist/src/lib/collection-principal.js +35 -0
  117. package/dist/src/lib/collection-principal.js.map +1 -0
  118. package/dist/src/lib/config-object-descriptor.d.ts +3 -22
  119. package/dist/src/lib/config-object-descriptor.js +56 -290
  120. package/dist/src/lib/config-object-descriptor.js.map +1 -1
  121. package/dist/src/lib/config-payload.js +2 -3
  122. package/dist/src/lib/config-payload.js.map +1 -1
  123. package/dist/src/lib/config-surface.d.ts +5 -7
  124. package/dist/src/lib/config-surface.js +18 -40
  125. package/dist/src/lib/config-surface.js.map +1 -1
  126. package/dist/src/lib/connections-list.d.ts +10 -0
  127. package/dist/src/lib/connections-list.js +18 -0
  128. package/dist/src/lib/connections-list.js.map +1 -0
  129. package/dist/src/lib/credentials-home.d.ts +58 -0
  130. package/dist/src/lib/credentials-home.js +204 -0
  131. package/dist/src/lib/credentials-home.js.map +1 -0
  132. package/dist/src/lib/credentials-lock.d.ts +88 -0
  133. package/dist/src/lib/credentials-lock.js +302 -0
  134. package/dist/src/lib/credentials-lock.js.map +1 -0
  135. package/dist/src/lib/credentials-store.d.ts +179 -24
  136. package/dist/src/lib/credentials-store.js +712 -77
  137. package/dist/src/lib/credentials-store.js.map +1 -1
  138. package/dist/src/lib/csv.d.ts +8 -9
  139. package/dist/src/lib/csv.js +3 -4
  140. package/dist/src/lib/csv.js.map +1 -1
  141. package/dist/src/lib/custodian.d.ts +8 -0
  142. package/dist/src/lib/custodian.js +18 -0
  143. package/dist/src/lib/custodian.js.map +1 -0
  144. package/dist/src/lib/db-codegen/dbGenerator.js +5 -16
  145. package/dist/src/lib/db-codegen/dbGenerator.js.map +1 -1
  146. package/dist/src/lib/db-codegen/dbNaming.d.ts +5 -13
  147. package/dist/src/lib/db-codegen/dbNaming.js +5 -17
  148. package/dist/src/lib/db-codegen/dbNaming.js.map +1 -1
  149. package/dist/src/lib/db-codegen/dbTemplates.d.ts +7 -56
  150. package/dist/src/lib/db-codegen/dbTemplates.js +25 -125
  151. package/dist/src/lib/db-codegen/dbTemplates.js.map +1 -1
  152. package/dist/src/lib/db-codegen/dbTsTypes.d.ts +2 -2
  153. package/dist/src/lib/db-codegen/dbTsTypes.js +2 -2
  154. package/dist/src/lib/db-codegen/dbTypeIR.d.ts +67 -2
  155. package/dist/src/lib/db-codegen/dbTypeIR.js +13 -2
  156. package/dist/src/lib/db-codegen/dbTypeIR.js.map +1 -1
  157. package/dist/src/lib/db3-export.d.ts +231 -0
  158. package/dist/src/lib/db3-export.js +510 -0
  159. package/dist/src/lib/db3-export.js.map +1 -0
  160. package/dist/src/lib/db3-index-output.d.ts +27 -0
  161. package/dist/src/lib/db3-index-output.js +49 -0
  162. package/dist/src/lib/db3-index-output.js.map +1 -0
  163. package/dist/src/lib/document-export-lookups.d.ts +31 -0
  164. package/dist/src/lib/document-export-lookups.js +53 -0
  165. package/dist/src/lib/document-export-lookups.js.map +1 -0
  166. package/dist/src/lib/document-export-permissions.d.ts +7 -5
  167. package/dist/src/lib/document-export-permissions.js +7 -5
  168. package/dist/src/lib/document-export-permissions.js.map +1 -1
  169. package/dist/src/lib/document-export-record-log.d.ts +57 -0
  170. package/dist/src/lib/document-export-record-log.js +215 -0
  171. package/dist/src/lib/document-export-record-log.js.map +1 -0
  172. package/dist/src/lib/document-ingest-artifact.d.ts +26 -2
  173. package/dist/src/lib/document-ingest-artifact.js +42 -8
  174. package/dist/src/lib/document-ingest-artifact.js.map +1 -1
  175. package/dist/src/lib/document-ingest-format2.d.ts +36 -0
  176. package/dist/src/lib/document-ingest-format2.js +78 -0
  177. package/dist/src/lib/document-ingest-format2.js.map +1 -0
  178. package/dist/src/lib/document-ingest-input.d.ts +9 -0
  179. package/dist/src/lib/document-ingest-input.js +28 -1
  180. package/dist/src/lib/document-ingest-input.js.map +1 -1
  181. package/dist/src/lib/document-ingest-rows.d.ts +16 -0
  182. package/dist/src/lib/document-ingest-rows.js +17 -0
  183. package/dist/src/lib/document-ingest-rows.js.map +1 -1
  184. package/dist/src/lib/document-ingest.d.ts +33 -1
  185. package/dist/src/lib/document-ingest.js +49 -0
  186. package/dist/src/lib/document-ingest.js.map +1 -1
  187. package/dist/src/lib/document-schema-rows.d.ts +42 -0
  188. package/dist/src/lib/document-schema-rows.js +53 -0
  189. package/dist/src/lib/document-schema-rows.js.map +1 -0
  190. package/dist/src/lib/env-resolver-core.d.ts +70 -2
  191. package/dist/src/lib/env-resolver-core.js +137 -20
  192. package/dist/src/lib/env-resolver-core.js.map +1 -1
  193. package/dist/src/lib/env-resolver.d.ts +14 -2
  194. package/dist/src/lib/env-resolver.js +32 -10
  195. package/dist/src/lib/env-resolver.js.map +1 -1
  196. package/dist/src/lib/function-authorize-check.d.ts +142 -0
  197. package/dist/src/lib/function-authorize-check.js +310 -0
  198. package/dist/src/lib/function-authorize-check.js.map +1 -0
  199. package/dist/src/lib/function-authorize-view.d.ts +15 -0
  200. package/dist/src/lib/function-authorize-view.js +50 -0
  201. package/dist/src/lib/function-authorize-view.js.map +1 -0
  202. package/dist/src/lib/function-bundle.d.ts +38 -18
  203. package/dist/src/lib/function-bundle.js +96 -35
  204. package/dist/src/lib/function-bundle.js.map +1 -1
  205. package/dist/src/lib/function-collect.d.ts +75 -12
  206. package/dist/src/lib/function-collect.js +427 -12
  207. package/dist/src/lib/function-collect.js.map +1 -1
  208. package/dist/src/lib/function-db-types.d.ts +29 -0
  209. package/dist/src/lib/function-db-types.js +117 -7
  210. package/dist/src/lib/function-db-types.js.map +1 -1
  211. package/dist/src/lib/function-document-types.d.ts +5 -3
  212. package/dist/src/lib/function-document-types.js +10 -14
  213. package/dist/src/lib/function-document-types.js.map +1 -1
  214. package/dist/src/lib/function-lint.d.ts +34 -0
  215. package/dist/src/lib/function-lint.js +112 -0
  216. package/dist/src/lib/function-lint.js.map +1 -0
  217. package/dist/src/lib/function-log-row.js +21 -2
  218. package/dist/src/lib/function-log-row.js.map +1 -1
  219. package/dist/src/lib/function-run.d.ts +16 -21
  220. package/dist/src/lib/function-run.js +37 -30
  221. package/dist/src/lib/function-run.js.map +1 -1
  222. package/dist/src/lib/function-schema-codegen.d.ts +1 -1
  223. package/dist/src/lib/function-schema-codegen.js +5 -5
  224. package/dist/src/lib/function-schema-codegen.js.map +1 -1
  225. package/dist/src/lib/function-source-roots.d.ts +67 -0
  226. package/dist/src/lib/function-source-roots.js +148 -0
  227. package/dist/src/lib/function-source-roots.js.map +1 -0
  228. package/dist/src/lib/function-sync.d.ts +108 -22
  229. package/dist/src/lib/function-sync.js +127 -39
  230. package/dist/src/lib/function-sync.js.map +1 -1
  231. package/dist/src/lib/function-trigger-listing.d.ts +11 -6
  232. package/dist/src/lib/function-trigger-listing.js +32 -11
  233. package/dist/src/lib/function-trigger-listing.js.map +1 -1
  234. package/dist/src/lib/function-typecheck.d.ts +37 -2
  235. package/dist/src/lib/function-typecheck.js +210 -28
  236. package/dist/src/lib/function-typecheck.js.map +1 -1
  237. package/dist/src/lib/function-versions.d.ts +2 -0
  238. package/dist/src/lib/function-versions.js +1 -0
  239. package/dist/src/lib/function-versions.js.map +1 -1
  240. package/dist/src/lib/generated-allowlist.js +0 -20
  241. package/dist/src/lib/generated-allowlist.js.map +1 -1
  242. package/dist/src/lib/generated-config-surfaces.d.ts +703 -203
  243. package/dist/src/lib/generated-config-surfaces.js +2270 -2014
  244. package/dist/src/lib/generated-config-surfaces.js.map +1 -1
  245. package/dist/src/lib/generated-sdk-types.d.ts +1 -1
  246. package/dist/src/lib/generated-sdk-types.js +1 -1
  247. package/dist/src/lib/generated-sdk-types.js.map +1 -1
  248. package/dist/src/lib/init-adopt.js +12 -3
  249. package/dist/src/lib/init-adopt.js.map +1 -1
  250. package/dist/src/lib/init-login-note.d.ts +13 -0
  251. package/dist/src/lib/init-login-note.js +22 -0
  252. package/dist/src/lib/init-login-note.js.map +1 -0
  253. package/dist/src/lib/json-value.d.ts +6 -0
  254. package/dist/src/lib/json-value.js +13 -0
  255. package/dist/src/lib/json-value.js.map +1 -0
  256. package/dist/src/lib/load-routes.d.ts +33 -0
  257. package/dist/src/lib/load-routes.js +35 -0
  258. package/dist/src/lib/load-routes.js.map +1 -0
  259. package/dist/src/lib/local-state.d.ts +38 -7
  260. package/dist/src/lib/local-state.js +172 -49
  261. package/dist/src/lib/local-state.js.map +1 -1
  262. package/dist/src/lib/local-test-cases.d.ts +5 -2
  263. package/dist/src/lib/local-test-cases.js +7 -4
  264. package/dist/src/lib/local-test-cases.js.map +1 -1
  265. package/dist/src/lib/log-inspection.d.ts +42 -4
  266. package/dist/src/lib/log-inspection.js +37 -5
  267. package/dist/src/lib/log-inspection.js.map +1 -1
  268. package/dist/src/lib/login-exchange-check.d.ts +18 -0
  269. package/dist/src/lib/login-exchange-check.js +27 -0
  270. package/dist/src/lib/login-exchange-check.js.map +1 -0
  271. package/dist/src/lib/login-scope-lines.d.ts +25 -0
  272. package/dist/src/lib/login-scope-lines.js +45 -0
  273. package/dist/src/lib/login-scope-lines.js.map +1 -0
  274. package/dist/src/lib/logout-admin-session.d.ts +2 -1
  275. package/dist/src/lib/logout-admin-session.js +7 -1
  276. package/dist/src/lib/logout-admin-session.js.map +1 -1
  277. package/dist/src/lib/object-status-filter.d.ts +9 -1
  278. package/dist/src/lib/object-status-filter.js +9 -1
  279. package/dist/src/lib/object-status-filter.js.map +1 -1
  280. package/dist/src/lib/output.js +2 -0
  281. package/dist/src/lib/output.js.map +1 -1
  282. package/dist/src/lib/paginate.d.ts +0 -5
  283. package/dist/src/lib/paginate.js +0 -5
  284. package/dist/src/lib/paginate.js.map +1 -1
  285. package/dist/src/lib/pin-refusal-hint.d.ts +12 -0
  286. package/dist/src/lib/pin-refusal-hint.js +35 -0
  287. package/dist/src/lib/pin-refusal-hint.js.map +1 -0
  288. package/dist/src/lib/primitive-env-plugin.d.ts +99 -0
  289. package/dist/src/lib/primitive-env-plugin.js +408 -0
  290. package/dist/src/lib/primitive-env-plugin.js.map +1 -0
  291. package/dist/src/lib/project-config.d.ts +7 -0
  292. package/dist/src/lib/project-config.js +22 -1
  293. package/dist/src/lib/project-config.js.map +1 -1
  294. package/dist/src/lib/project-login-apps.d.ts +8 -0
  295. package/dist/src/lib/project-login-apps.js +27 -0
  296. package/dist/src/lib/project-login-apps.js.map +1 -0
  297. package/dist/src/lib/prompt-schema-codegen.d.ts +10 -3
  298. package/dist/src/lib/prompt-schema-codegen.js +52 -11
  299. package/dist/src/lib/prompt-schema-codegen.js.map +1 -1
  300. package/dist/src/lib/pull-write.d.ts +31 -0
  301. package/dist/src/lib/pull-write.js +49 -0
  302. package/dist/src/lib/pull-write.js.map +1 -0
  303. package/dist/src/lib/push-failure-report.d.ts +45 -0
  304. package/dist/src/lib/push-failure-report.js +57 -0
  305. package/dist/src/lib/push-failure-report.js.map +1 -0
  306. package/dist/src/lib/records-verbs.d.ts +69 -0
  307. package/dist/src/lib/records-verbs.js +40 -0
  308. package/dist/src/lib/records-verbs.js.map +1 -0
  309. package/dist/src/lib/refresh-admin-credentials.d.ts +7 -0
  310. package/dist/src/lib/refresh-admin-credentials.js +16 -4
  311. package/dist/src/lib/refresh-admin-credentials.js.map +1 -1
  312. package/dist/src/lib/root-import-decision.d.ts +65 -0
  313. package/dist/src/lib/root-import-decision.js +109 -0
  314. package/dist/src/lib/root-import-decision.js.map +1 -0
  315. package/dist/src/lib/run-status.d.ts +1 -1
  316. package/dist/src/lib/run-status.generated.d.ts +2 -2
  317. package/dist/src/lib/run-status.generated.js +3 -1
  318. package/dist/src/lib/run-status.generated.js.map +1 -1
  319. package/dist/src/lib/run-status.js +1 -1
  320. package/dist/src/lib/schema-codegen/generated-schema-descriptor.d.ts +129 -0
  321. package/dist/src/lib/schema-codegen/generated-schema-descriptor.js +269 -0
  322. package/dist/src/lib/schema-codegen/generated-schema-descriptor.js.map +1 -0
  323. package/dist/src/lib/schema-codegen/naming.d.ts +35 -0
  324. package/dist/src/lib/schema-codegen/naming.js +83 -0
  325. package/dist/src/lib/schema-codegen/naming.js.map +1 -0
  326. package/dist/src/lib/schema-codegen/schemaToTs.d.ts +82 -0
  327. package/dist/src/lib/schema-codegen/schemaToTs.js +305 -0
  328. package/dist/src/lib/schema-codegen/schemaToTs.js.map +1 -0
  329. package/dist/src/lib/scope-request.d.ts +84 -0
  330. package/dist/src/lib/scope-request.js +235 -0
  331. package/dist/src/lib/scope-request.js.map +1 -0
  332. package/dist/src/lib/session-id.d.ts +9 -0
  333. package/dist/src/lib/session-id.js +28 -0
  334. package/dist/src/lib/session-id.js.map +1 -0
  335. package/dist/src/lib/snapshot-build-rows.d.ts +21 -0
  336. package/dist/src/lib/snapshot-build-rows.js +22 -0
  337. package/dist/src/lib/snapshot-build-rows.js.map +1 -1
  338. package/dist/src/lib/snapshot-build.js +8 -3
  339. package/dist/src/lib/snapshot-build.js.map +1 -1
  340. package/dist/src/lib/snapshots.d.ts +17 -1
  341. package/dist/src/lib/snapshots.js +50 -2
  342. package/dist/src/lib/snapshots.js.map +1 -1
  343. package/dist/src/lib/swift-codegen/agentGenerator.d.ts +6 -2
  344. package/dist/src/lib/swift-codegen/agentGenerator.js +57 -5
  345. package/dist/src/lib/swift-codegen/agentGenerator.js.map +1 -1
  346. package/dist/src/lib/swift-codegen/banners.d.ts +34 -7
  347. package/dist/src/lib/swift-codegen/banners.js +37 -7
  348. package/dist/src/lib/swift-codegen/banners.js.map +1 -1
  349. package/dist/src/lib/swift-codegen/dbGenerator.d.ts +4 -3
  350. package/dist/src/lib/swift-codegen/dbGenerator.js +14 -117
  351. package/dist/src/lib/swift-codegen/dbGenerator.js.map +1 -1
  352. package/dist/src/lib/swift-codegen/functionGenerator.d.ts +3 -3
  353. package/dist/src/lib/swift-codegen/functionGenerator.js +23 -18
  354. package/dist/src/lib/swift-codegen/functionGenerator.js.map +1 -1
  355. package/dist/src/lib/swift-codegen/generator.d.ts +5 -5
  356. package/dist/src/lib/swift-codegen/generator.js +35 -40
  357. package/dist/src/lib/swift-codegen/generator.js.map +1 -1
  358. package/dist/src/lib/swift-codegen/schemaToSwift.d.ts +3 -3
  359. package/dist/src/lib/swift-codegen/schemaToSwift.js +4 -4
  360. package/dist/src/lib/swift-codegen/schemaToSwift.js.map +1 -1
  361. package/dist/src/lib/swift-codegen/swiftKeys.d.ts +19 -0
  362. package/dist/src/lib/swift-codegen/swiftKeys.js +31 -0
  363. package/dist/src/lib/swift-codegen/swiftKeys.js.map +1 -0
  364. package/dist/src/lib/sync-paths.d.ts +35 -0
  365. package/dist/src/lib/sync-paths.js +57 -5
  366. package/dist/src/lib/sync-paths.js.map +1 -1
  367. package/dist/src/lib/sync-resource-types.d.ts +26 -26
  368. package/dist/src/lib/sync-resource-types.js +61 -189
  369. package/dist/src/lib/sync-resource-types.js.map +1 -1
  370. package/dist/src/lib/sync-selectors.d.ts +5 -1
  371. package/dist/src/lib/sync-selectors.js +23 -13
  372. package/dist/src/lib/sync-selectors.js.map +1 -1
  373. package/dist/src/lib/test-case-file-names.d.ts +3 -5
  374. package/dist/src/lib/test-case-file-names.js +3 -5
  375. package/dist/src/lib/test-case-file-names.js.map +1 -1
  376. package/dist/src/lib/toml-database-config.d.ts +15 -75
  377. package/dist/src/lib/toml-database-config.js +17 -306
  378. package/dist/src/lib/toml-database-config.js.map +1 -1
  379. package/dist/src/lib/transient-retry.d.ts +43 -0
  380. package/dist/src/lib/transient-retry.js +94 -0
  381. package/dist/src/lib/transient-retry.js.map +1 -0
  382. package/dist/src/lib/vars-override.d.ts +105 -0
  383. package/dist/src/lib/vars-override.js +143 -0
  384. package/dist/src/lib/vars-override.js.map +1 -0
  385. package/dist/src/lib/webhook-capture.d.ts +43 -0
  386. package/dist/src/lib/webhook-capture.js +91 -0
  387. package/dist/src/lib/webhook-capture.js.map +1 -0
  388. package/dist/src/lib/webhook-deliver.d.ts +18 -20
  389. package/dist/src/lib/webhook-deliver.js +34 -89
  390. package/dist/src/lib/webhook-deliver.js.map +1 -1
  391. package/dist/src/lib/webhook-test-run.d.ts +32 -0
  392. package/dist/src/lib/webhook-test-run.js +108 -0
  393. package/dist/src/lib/webhook-test-run.js.map +1 -0
  394. package/dist/src/lib/workflow-codegen/generator.d.ts +7 -7
  395. package/dist/src/lib/workflow-codegen/generator.js +16 -23
  396. package/dist/src/lib/workflow-codegen/generator.js.map +1 -1
  397. package/dist/src/lib/workflow-codegen/invokerIR.d.ts +6 -12
  398. package/dist/src/lib/workflow-codegen/invokerIR.js +4 -5
  399. package/dist/src/lib/workflow-codegen/invokerIR.js.map +1 -1
  400. package/dist/src/lib/workflow-toml-validator.d.ts +2 -0
  401. package/dist/src/lib/workflow-toml-validator.js +28 -1
  402. package/dist/src/lib/workflow-toml-validator.js.map +1 -1
  403. package/dist/src/types/index.d.ts +30 -37
  404. package/dist/src/validators.d.ts +7 -55
  405. package/dist/src/validators.js +7 -53
  406. package/dist/src/validators.js.map +1 -1
  407. package/dist/src/vite.d.ts +17 -0
  408. package/dist/src/vite.js +18 -0
  409. package/dist/src/vite.js.map +1 -0
  410. package/package.json +20 -12
@@ -0,0 +1,510 @@
1
+ /**
2
+ * `primitive db3 export` and `primitive db3 import` (#4889): a db3 written
3
+ * to a directory, and a directory loaded into a db3.
4
+ *
5
+ * An export is a directory holding `db3.json` (the manifest: the db3's id,
6
+ * title and tags, its type by name and revision, its declaration as
7
+ * `GET db3/:id/schema` answers it, the indexes registered through the index
8
+ * routes, the log number the rows are at), the rows under `snapshot/` and
9
+ * `chain.json` as `documents export` writes a record-log document's, and
10
+ * the blobs under `blobs/`. It carries no grant, custody, sync state or alias:
11
+ * those belong to the app the db3 lives in.
12
+ *
13
+ * An import does every check before any write: the manifest's type must be
14
+ * one the app has, with an equal declaration (or `--untyped`); a `--into`
15
+ * target must be of the manifest's type and declare its models alike; and
16
+ * blobs are imported under their ids, so the source db3 must be gone from the
17
+ * app first. Then it creates the db3 (or confirms `--into`), registers the
18
+ * indexes an untyped target needs before any row, loads the rows through the
19
+ * db3's bulk-load session and uploads the blobs.
20
+ *
21
+ * The planner (`planDb3Import`) and the comparison (`compareDeclarations`)
22
+ * are pure; the verbs in `../commands/db3.ts` read what they need and drive
23
+ * the steps.
24
+ */
25
+ import fs from "fs";
26
+ import path from "path";
27
+ import { loadSchemaFromTomlString } from "js-bao";
28
+ import { exportRecordLogDocument } from "./document-export-record-log.js";
29
+ import { discoverIngestInput } from "./document-ingest-input.js";
30
+ import { buildIngestArtifact, ingestSchemaFromIntrospection } from "./document-ingest-artifact.js";
31
+ import { driveDocumentIngest } from "./document-ingest.js";
32
+ /** The manifest file an export writes and an import reads. */
33
+ export const DB3_MANIFEST = "db3.json";
34
+ /** A model's declaration out of a schema answer's model: its fields and constraints, without `observed`. */
35
+ function modelDeclaration(model) {
36
+ const fields = {};
37
+ for (const [name, options] of Object.entries(model?.fields ?? {}))
38
+ fields[name] = { ...(options ?? {}) };
39
+ const constraints = {};
40
+ for (const [name, c] of Object.entries(model?.constraints ?? {})) {
41
+ if (c && Array.isArray(c.fields))
42
+ constraints[name] = { type: "unique", fields: [...c.fields] };
43
+ }
44
+ return { fields, ...(Object.keys(constraints).length ? { constraints } : {}) };
45
+ }
46
+ /**
47
+ * The declaration `GET db3/:id/schema` answers. The answer gives a declared
48
+ * model with no fields and a live undeclared model alike, `{ fields: {} }`,
49
+ * so such a model is kept only when `declaredModels` names it: the models a
50
+ * typed db3's type declares ({@link declaredModelNames}). A type that
51
+ * declares no models holds any model undeclared, and an untyped db3
52
+ * declares none.
53
+ */
54
+ export function declarationOfSchemaAnswer(answer, options = {}) {
55
+ const declaredModels = new Set(options.declaredModels ?? []);
56
+ const models = {};
57
+ for (const [name, model] of Object.entries(answer?.schema?.models ?? {})) {
58
+ const declaration = modelDeclaration(model);
59
+ const declared = declaredModels.has(name) && model && typeof model === "object" && "fields" in model;
60
+ if (declared || Object.keys(declaration.fields).length || declaration.constraints)
61
+ models[name] = declaration;
62
+ }
63
+ return { models };
64
+ }
65
+ /** The models a db3 type's schema TOML declares, by name. */
66
+ export function declaredModelNames(schema) {
67
+ return Object.keys(declarationOfTypeSchema(schema).models);
68
+ }
69
+ /** The declaration a db3 type's schema TOML installs (`GET db3-types/:name`'s `schema`). */
70
+ export function declarationOfTypeSchema(schema) {
71
+ if (typeof schema !== "string" || !schema.trim())
72
+ return { models: {} };
73
+ const defined = loadSchemaFromTomlString(schema, { strict: false, rejectUniqueStringset: false });
74
+ const models = {};
75
+ for (const model of defined) {
76
+ const fields = {};
77
+ for (const [field, options] of Object.entries(model.fields ?? {})) {
78
+ const kept = {};
79
+ for (const [key, value] of Object.entries(options ?? {})) {
80
+ if (value !== undefined && typeof value !== "function")
81
+ kept[key] = value;
82
+ }
83
+ fields[field] = kept;
84
+ }
85
+ const constraints = {};
86
+ for (const c of model.options?.uniqueConstraints ?? [])
87
+ constraints[c.name] = { type: "unique", fields: [...c.fields] };
88
+ models[model.name] = { fields, ...(Object.keys(constraints).length ? { constraints } : {}) };
89
+ }
90
+ return { models };
91
+ }
92
+ /** What a field's declaration is compared by: its kind and its two index flags. */
93
+ function fieldShape(options) {
94
+ return JSON.stringify({ type: options?.type ?? null, indexed: options?.indexed === true, unique: options?.unique === true });
95
+ }
96
+ /** A model's compound constraints, compared by their fields in any order. */
97
+ function constraintKeys(model) {
98
+ return Object.values(model?.constraints ?? {})
99
+ .map((c) => `unique(${[...c.fields].sort().join(", ")})`)
100
+ .sort();
101
+ }
102
+ /**
103
+ * The differences between the declaration an export holds and the one a
104
+ * type or a target installs, one line per model, field or constraint; none
105
+ * when they are equal. Order is ignored: of models, fields, constraints and
106
+ * a constraint's fields. A field compares by its kind and its `indexed` and
107
+ * `unique` flags. With `only: "installed"`, only the models `installed`
108
+ * declares are compared (an `--untyped` import into a target that already
109
+ * declares some of them).
110
+ */
111
+ export function compareDeclarations(exported, installed, options = {}) {
112
+ const where = options.installedName ?? "the target";
113
+ const lines = [];
114
+ const models = new Set([...Object.keys(installed.models), ...(options.only === "installed" ? [] : Object.keys(exported.models))]);
115
+ for (const name of [...models].sort()) {
116
+ const mine = exported.models[name];
117
+ const theirs = installed.models[name];
118
+ if (!theirs) {
119
+ lines.push(`model ${name}: declared by the export, not by ${where}`);
120
+ continue;
121
+ }
122
+ if (!mine) {
123
+ lines.push(`model ${name}: declared by ${where}, not by the export`);
124
+ continue;
125
+ }
126
+ const fields = new Set([...Object.keys(mine.fields), ...Object.keys(theirs.fields)]);
127
+ for (const field of [...fields].sort()) {
128
+ if (!(field in theirs.fields))
129
+ lines.push(`model ${name} field ${field}: declared by the export, not by ${where}`);
130
+ else if (!(field in mine.fields))
131
+ lines.push(`model ${name} field ${field}: declared by ${where}, not by the export`);
132
+ else if (fieldShape(mine.fields[field]) !== fieldShape(theirs.fields[field])) {
133
+ lines.push(`model ${name} field ${field}: the export has ${fieldShape(mine.fields[field])}, ${where} has ${fieldShape(theirs.fields[field])}`);
134
+ }
135
+ }
136
+ const a = constraintKeys(mine);
137
+ const b = constraintKeys(theirs);
138
+ for (const key of a)
139
+ if (!b.includes(key))
140
+ lines.push(`model ${name} constraint ${key}: declared by the export, not by ${where}`);
141
+ for (const key of b)
142
+ if (!a.includes(key))
143
+ lines.push(`model ${name} constraint ${key}: declared by ${where}, not by the export`);
144
+ }
145
+ return lines;
146
+ }
147
+ /**
148
+ * The index registrations that install `declaration`'s indexes and uniques,
149
+ * and `indexes`, on an untyped db3: one per model and set of fields, unique
150
+ * when either source holds it unique (a registration over the same fields
151
+ * replaces the earlier one's uniqueness, so a later non-unique one would
152
+ * lift it), each compound name a valid identifier no other of the model's
153
+ * registrations takes.
154
+ */
155
+ export function registrationsFor(declaration, indexes = []) {
156
+ const out = [];
157
+ const byFields = new Map();
158
+ const names = new Map();
159
+ const add = (registration) => {
160
+ const key = JSON.stringify([registration.model, [...fieldsOf(registration)].sort()]);
161
+ const at = byFields.get(key);
162
+ if (at !== undefined) {
163
+ const held = out[at];
164
+ if (registration.unique === true && held.unique !== true && "field" in held)
165
+ out[at] = { ...held, unique: true };
166
+ return;
167
+ }
168
+ if ("name" in registration) {
169
+ const taken = names.get(registration.model) ?? new Set();
170
+ names.set(registration.model, taken);
171
+ // The physical name lower-cases the registration's, so two names a case apart would collide.
172
+ let name = registration.name;
173
+ for (let n = 2; taken.has(name.toLowerCase()); n++)
174
+ name = `${registration.name}_${n}`;
175
+ taken.add(name.toLowerCase());
176
+ registration = { ...registration, name };
177
+ }
178
+ byFields.set(key, out.length);
179
+ out.push(registration);
180
+ };
181
+ for (const model of Object.keys(declaration.models).sort()) {
182
+ const declared = declaration.models[model];
183
+ for (const field of Object.keys(declared.fields).sort()) {
184
+ const options = declared.fields[field];
185
+ // The primary key serves `id`, and a string set's members are indexed already: the room refuses both.
186
+ if (field === "id" || options.type === "stringset")
187
+ continue;
188
+ if (options.unique === true)
189
+ add({ model, field, unique: true });
190
+ else if (options.indexed === true)
191
+ add({ model, field });
192
+ }
193
+ for (const name of Object.keys(declared.constraints ?? {}).sort()) {
194
+ const fields = declared.constraints[name].fields;
195
+ if (fields.length === 1 && fields[0] === "id")
196
+ continue;
197
+ if (fields.length === 1)
198
+ add({ model, field: fields[0], unique: true });
199
+ else
200
+ add({ model, fields: [...fields], name: registrationName(model, name), unique: true });
201
+ }
202
+ }
203
+ for (const index of indexes) {
204
+ if (index.fields.length === 1)
205
+ add(index.unique ? { model: index.model, field: index.fields[0], unique: true } : { model: index.model, field: index.fields[0] });
206
+ else
207
+ add({ model: index.model, fields: [...index.fields], name: registrationName(index.model, index.name), unique: true });
208
+ }
209
+ return out;
210
+ }
211
+ /** The physical name a registration named `name` on `model` gets (`idx_named_<model>_<name>`, lower-cased). */
212
+ const namedIndexPrefix = (model) => `idx_named_${model.toLowerCase()}_`;
213
+ /**
214
+ * The name to register an index under: the name it was registered with,
215
+ * read back out of the physical name the index list answers; a constraint's
216
+ * own name with the characters an index name cannot hold replaced, and
217
+ * `c_` before one that would not start with a letter or `_` (as the room
218
+ * names a constraint's own index).
219
+ */
220
+ function registrationName(model, name) {
221
+ const prefix = namedIndexPrefix(model);
222
+ const bare = name.startsWith(prefix) && name.length > prefix.length ? name.slice(prefix.length) : name;
223
+ const replaced = bare.replace(/[^A-Za-z0-9_]/g, "_");
224
+ return /^[A-Za-z_]/.test(replaced) ? replaced : `c_${replaced}`;
225
+ }
226
+ const fieldsOf = (registration) => ("fields" in registration ? registration.fields : [registration.field]);
227
+ const sameFields = (a, b) => a.length === b.length && [...a].sort().join("\0") === [...b].sort().join("\0");
228
+ /**
229
+ * `register` against the indexes a target already has: a registration an
230
+ * index over the same fields already serves, as unique or more, is left out
231
+ * (so an existing unique index is never registered again without `unique`,
232
+ * which would lift it, and a constraint the target holds is not registered
233
+ * a second time under another name); a named registration whose name the
234
+ * target gives an index over other fields is a conflict.
235
+ */
236
+ export function pendingRegistrations(register, existing) {
237
+ const out = [];
238
+ const kept = [];
239
+ const conflicts = [];
240
+ for (const registration of register) {
241
+ const fields = fieldsOf(registration);
242
+ const wanted = registration.unique === true;
243
+ const holder = existing.find((index) => index.model === registration.model && sameFields(index.fields, fields));
244
+ if (holder && (holder.unique || !wanted)) {
245
+ kept.push(`${registration.model} (${fields.join(", ")}): the target's ${holder.name} already ` +
246
+ `${holder.unique ? "enforces it as unique" : "indexes it"}; not registered again.`);
247
+ continue;
248
+ }
249
+ if ("name" in registration) {
250
+ const physical = `${namedIndexPrefix(registration.model)}${registration.name.toLowerCase()}`;
251
+ const taken = existing.find((index) => index.model === registration.model && index.name === physical && !sameFields(index.fields, fields));
252
+ if (taken) {
253
+ conflicts.push(`${registration.model} index ${registration.name}: the export's is over (${fields.join(", ")}), ` +
254
+ `the target's over (${taken.fields.join(", ")})`);
255
+ continue;
256
+ }
257
+ }
258
+ out.push(registration);
259
+ }
260
+ return { register: out, kept, conflicts };
261
+ }
262
+ /** The type name an import resolves: `--type`, else the manifest's; none under `--untyped` without one. */
263
+ export function resolvedTypeName(manifest, flags) {
264
+ return flags.type ?? manifest.type?.name ?? null;
265
+ }
266
+ /**
267
+ * Decide an import from what was read, before any write: a refusal naming
268
+ * what to do, or the steps.
269
+ */
270
+ export function planDb3Import(manifest, flags, facts) {
271
+ const named = resolvedTypeName(manifest, flags);
272
+ const typeName = flags.untyped && !flags.into ? null : named;
273
+ const notes = [];
274
+ if (flags.keepId && flags.into) {
275
+ return {
276
+ ok: false,
277
+ refusal: "--keep-id creates a db3 under the export's id, and --into loads into one that exists: pass one of them. Nothing was written.",
278
+ };
279
+ }
280
+ if (flags.keepId && facts.sourceExists) {
281
+ return {
282
+ ok: false,
283
+ refusal: `This app already holds a db3 with the export's id ${manifest.id}. Delete it first, import into another app, ` +
284
+ "or import without --keep-id to create it under a new id. Nothing was written.",
285
+ };
286
+ }
287
+ if (named && !flags.untyped) {
288
+ if (!facts.type) {
289
+ return {
290
+ ok: false,
291
+ refusal: `This app has no db3 type ${JSON.stringify(named)}. Push it first (primitive db3-types push), ` +
292
+ "or import the rows into an untyped db3 with --untyped. Nothing was written.",
293
+ };
294
+ }
295
+ const exportedHash = manifest.type?.revision?.hash;
296
+ const currentHash = facts.type.revision?.hash;
297
+ if (exportedHash && currentHash && exportedHash !== currentHash) {
298
+ notes.push(`The export was taken at type revision ${exportedHash}; the app's ${named} is at ${currentHash}.`);
299
+ }
300
+ if (!flags.into) {
301
+ const lines = compareDeclarations(manifest.declaration, declarationOfTypeSchema(facts.type.schema), {
302
+ installedName: `type ${named}`,
303
+ });
304
+ if (lines.length) {
305
+ return {
306
+ ok: false,
307
+ refusal: `The export's declaration differs from type ${named}'s. Nothing was written; ` +
308
+ "re-run with --untyped to load the rows into an untyped db3.",
309
+ lines,
310
+ };
311
+ }
312
+ }
313
+ }
314
+ if (flags.into) {
315
+ const target = facts.target;
316
+ if (!target)
317
+ return { ok: false, refusal: `The target db3 ${flags.into} could not be read. Nothing was written.` };
318
+ if (!flags.untyped) {
319
+ const theirs = target.row?.type ?? null;
320
+ if (theirs !== (named ?? null)) {
321
+ return {
322
+ ok: false,
323
+ refusal: `The target db3 ${flags.into} is ${theirs ? `of type ${theirs}` : "untyped"}; the export is ` +
324
+ `${named ? `of type ${named}` : "untyped"}. Nothing was written.`,
325
+ };
326
+ }
327
+ }
328
+ const lines = compareDeclarations(manifest.declaration, target.declaration, {
329
+ ...(flags.untyped ? { only: "installed" } : {}),
330
+ installedName: `db3 ${flags.into}`,
331
+ });
332
+ if (lines.length) {
333
+ return { ok: false, refusal: `The export's declaration differs from db3 ${flags.into}'s. Nothing was written.`, lines };
334
+ }
335
+ }
336
+ const blobs = !flags.noBlobs && facts.blobCount > 0;
337
+ if (blobs && facts.sourceExists) {
338
+ return {
339
+ ok: false,
340
+ refusal: `The export's db3 ${manifest.id} is still in this app, and its blobs would collide with theirs under their ids. ` +
341
+ "Delete it first, import into another app, or re-run with --no-blobs. Nothing was written.",
342
+ };
343
+ }
344
+ const untypedTarget = flags.into ? !(facts.target?.row?.type) : !typeName;
345
+ let register = untypedTarget
346
+ ? registrationsFor(manifest.declaration, manifest.indexes ?? [])
347
+ : registrationsFor({ models: {} }, manifest.indexes ?? []);
348
+ if (flags.into && facts.target?.indexes) {
349
+ const pending = pendingRegistrations(register, facts.target.indexes);
350
+ if (pending.conflicts.length) {
351
+ return {
352
+ ok: false,
353
+ refusal: `The export's indexes clash with db3 ${flags.into}'s by name. Nothing was written.`,
354
+ lines: pending.conflicts,
355
+ };
356
+ }
357
+ register = pending.register;
358
+ notes.push(...pending.kept);
359
+ }
360
+ return {
361
+ ok: true,
362
+ typeName,
363
+ ...(flags.into
364
+ ? { into: flags.into }
365
+ : {
366
+ create: {
367
+ title: flags.title ?? manifest.title ?? "Imported db3",
368
+ ...(typeName ? { type: typeName } : {}),
369
+ tags: [...(manifest.tags ?? [])],
370
+ ...(flags.keepId ? { id: manifest.id } : {}),
371
+ },
372
+ }),
373
+ register,
374
+ blobs,
375
+ notes,
376
+ };
377
+ }
378
+ /** Read `<dir>/db3.json`, or `null` when the directory has none. */
379
+ export function readDb3Manifest(dir) {
380
+ const file = path.join(dir, DB3_MANIFEST);
381
+ if (!fs.existsSync(file))
382
+ return null;
383
+ const manifest = JSON.parse(fs.readFileSync(file, "utf8"));
384
+ if (manifest?.kind !== "db3-export")
385
+ throw new Error(`${file} is not a db3 export's manifest (kind ${JSON.stringify(manifest?.kind)}).`);
386
+ return manifest;
387
+ }
388
+ /** The blobs `<dir>/blobs/index.json` lists; none without one. */
389
+ export function readExportedBlobs(dir) {
390
+ const file = path.join(dir, "blobs", "index.json");
391
+ if (!fs.existsSync(file))
392
+ return [];
393
+ const listed = JSON.parse(fs.readFileSync(file, "utf8"));
394
+ return Array.isArray(listed) ? listed : [];
395
+ }
396
+ /** Every blob of a db3, page by page. */
397
+ async function listAllDb3Blobs(client, appId, db3Id) {
398
+ const blobs = [];
399
+ const seen = new Set();
400
+ let cursor;
401
+ for (;;) {
402
+ const page = await client.listDb3Blobs(appId, db3Id, cursor ? { cursor } : undefined);
403
+ if (Array.isArray(page))
404
+ return [...blobs, ...page];
405
+ blobs.push(...(page?.items ?? page?.blobs ?? []));
406
+ if (!page?.hasMore)
407
+ return blobs;
408
+ cursor = page?.nextCursor || undefined;
409
+ if (!cursor || seen.has(cursor))
410
+ throw new Error(`db3 ${db3Id}: its blob list said more follow but gave no new cursor; nothing was exported.`);
411
+ seen.add(cursor);
412
+ }
413
+ }
414
+ /**
415
+ * Write db3 `db3Id` to `dir`: the rows (a segment export, as `documents
416
+ * export` writes a record-log document's), `chain.json`, the blobs unless
417
+ * `blobs` is false, and `db3.json` last, so a directory with a manifest is a
418
+ * finished export.
419
+ */
420
+ export async function exportDb3(client, appId, db3Id, dir, options) {
421
+ fs.mkdirSync(dir, { recursive: true });
422
+ fs.rmSync(path.join(dir, DB3_MANIFEST), { force: true });
423
+ const row = await client.getDb3(appId, db3Id);
424
+ const type = await client.getDb3Type(appId, db3Id);
425
+ const declaredModels = type?.type ? declaredModelNames((await client.getDb3TypeConfig(appId, String(type.type)))?.schema) : [];
426
+ const declaration = declarationOfSchemaAnswer(await client.getDb3Schema(appId, db3Id), { declaredModels });
427
+ const listed = await client.listDb3Indexes(appId, db3Id);
428
+ // The registered origin's own uniqueness: a declaration's unique on the same index is the declaration's.
429
+ const indexes = (listed?.indexes ?? []).flatMap((index) => {
430
+ const named = (index.origins ?? []).find((origin) => origin?.kind === "named");
431
+ return named ? [{ name: index.name, model: index.model, fields: [...index.fields], unique: named.unique === true }] : [];
432
+ });
433
+ const exported = await exportRecordLogDocument({
434
+ client: {
435
+ requestSegment: () => client.requestDb3Snapshot(appId, db3Id),
436
+ getSegment: (segmentId) => client.getDb3Snapshot(appId, db3Id, segmentId),
437
+ listSegments: () => client.listDb3Snapshots(appId, db3Id, { limit: 100 }),
438
+ exportChain: () => client.exportDb3Chain(appId, db3Id),
439
+ download: (artifactPath) => client.downloadDocumentArtifact(appId, artifactPath),
440
+ },
441
+ documentId: db3Id,
442
+ docDir: dir,
443
+ onProgress: options.onProgress,
444
+ });
445
+ let blobCount = 0;
446
+ fs.rmSync(path.join(dir, "blobs"), { recursive: true, force: true });
447
+ if (options.blobs) {
448
+ const blobs = await listAllDb3Blobs(client, appId, db3Id);
449
+ const blobsDir = path.join(dir, "blobs");
450
+ fs.mkdirSync(blobsDir, { recursive: true });
451
+ const index = blobs.map((b) => ({
452
+ blobId: b.blobId,
453
+ filename: b.filename,
454
+ contentType: b.contentType,
455
+ sha256: b.sha256,
456
+ numBytes: b.numBytes,
457
+ }));
458
+ fs.writeFileSync(path.join(blobsDir, "index.json"), JSON.stringify(index, null, 2));
459
+ for (const blob of index) {
460
+ fs.writeFileSync(path.join(blobsDir, `${blob.blobId}.bin`), await client.downloadDb3Blob(appId, db3Id, blob.blobId));
461
+ }
462
+ blobCount = index.length;
463
+ }
464
+ const manifest = {
465
+ kind: "db3-export",
466
+ version: 1,
467
+ id: row.id ?? db3Id,
468
+ title: row.title ?? null,
469
+ tags: Array.isArray(row.tags) ? row.tags : [],
470
+ type: type?.type ? { name: String(type.type), revision: type.revision ?? null } : null,
471
+ declaration,
472
+ indexes,
473
+ lsn: exported.lsn,
474
+ exportedAt: new Date().toISOString(),
475
+ };
476
+ fs.writeFileSync(path.join(dir, DB3_MANIFEST), JSON.stringify(manifest, null, 2));
477
+ return { manifest, dir, rows: exported.segment.rows, blobs: blobCount };
478
+ }
479
+ /**
480
+ * Load an export's rows into `db3Id` through its bulk-load session (merge,
481
+ * the epoch reserved at open), waited to a terminal state. Answers the
482
+ * session's outcome, or `null` when the export holds no rows.
483
+ */
484
+ export async function loadDb3Rows(client, appId, db3Id, dir, onProgress) {
485
+ const input = discoverIngestInput(dir, db3Id);
486
+ const schema = ingestSchemaFromIntrospection(await client.getDb3Schema(appId, db3Id));
487
+ const plan = await buildIngestArtifact({ input, schema, open: true });
488
+ try {
489
+ if (plan.rows === 0)
490
+ return null;
491
+ return await driveDocumentIngest({
492
+ client: {
493
+ createIngest: (id) => client.createDb3Ingest(appId, id, {}),
494
+ uploadIngestChunk: (id, sessionId, chunk) => client.uploadDb3IngestChunk(appId, id, sessionId, chunk),
495
+ commitIngest: (id, sessionId) => client.commitDb3Ingest(appId, id, sessionId),
496
+ abortIngest: (id, sessionId) => client.abortDb3Ingest(appId, id, sessionId),
497
+ getIngest: (id, sessionId) => client.getDb3Ingest(appId, id, sessionId),
498
+ },
499
+ documentId: db3Id,
500
+ plan,
501
+ wait: true,
502
+ timeoutMs: null,
503
+ onProgress,
504
+ });
505
+ }
506
+ finally {
507
+ await plan.cleanup().catch(() => undefined);
508
+ }
509
+ }
510
+ //# sourceMappingURL=db3-export.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db3-export.js","sourceRoot":"","sources":["../../../src/lib/db3-export.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * What `primitive db3 indexes` prints (#4696): the table rows of a db3's
3
+ * index registry, and the lines a refused registration or drop adds under
4
+ * its `message [CODE] (status)` line. Pure, so each is checked without a
5
+ * server holding a registry in the right state.
6
+ */
7
+ import type { Db3IndexRow } from "./api-client.js";
8
+ /** One index as the `indexes list` table prints it. */
9
+ export interface Db3IndexTableRow {
10
+ name: string;
11
+ model: string;
12
+ fields: string;
13
+ unique: string;
14
+ origins: string;
15
+ }
16
+ /** The `indexes list` table's rows, in the route's order. */
17
+ export declare function db3IndexTableRows(indexes: readonly Db3IndexRow[]): Db3IndexTableRow[];
18
+ /**
19
+ * The lines a refusal's `details` add, by its code: each duplicate key and
20
+ * how many records share it, each origin still keeping the index, the index
21
+ * a name or field already belongs to, the set field, the stored format.
22
+ * Nothing for a code that names nothing.
23
+ */
24
+ export declare function db3IndexRefusalLines(err: {
25
+ code?: unknown;
26
+ details?: unknown;
27
+ }): string[];
@@ -0,0 +1,49 @@
1
+ /**
2
+ * What `primitive db3 indexes` prints (#4696): the table rows of a db3's
3
+ * index registry, and the lines a refused registration or drop adds under
4
+ * its `message [CODE] (status)` line. Pure, so each is checked without a
5
+ * server holding a registry in the right state.
6
+ */
7
+ /** An origin as one word: its kind, `(unique)` appended when it asks for uniqueness. */
8
+ function originText(origin) {
9
+ return origin.unique ? `${origin.kind} (unique)` : origin.kind;
10
+ }
11
+ /** The `indexes list` table's rows, in the route's order. */
12
+ export function db3IndexTableRows(indexes) {
13
+ return indexes.map((index) => ({
14
+ name: index.name,
15
+ model: index.model,
16
+ fields: index.fields.join(", "),
17
+ unique: index.unique ? "Yes" : "No",
18
+ origins: index.origins.map(originText).join(", "),
19
+ }));
20
+ }
21
+ /** A key value as an operator reads it: a string as written, anything else as JSON. */
22
+ function valueText(value) {
23
+ return typeof value === "string" ? value : JSON.stringify(value);
24
+ }
25
+ /**
26
+ * The lines a refusal's `details` add, by its code: each duplicate key and
27
+ * how many records share it, each origin still keeping the index, the index
28
+ * a name or field already belongs to, the set field, the stored format.
29
+ * Nothing for a code that names nothing.
30
+ */
31
+ export function db3IndexRefusalLines(err) {
32
+ const details = (err?.details ?? {});
33
+ switch (err?.code) {
34
+ case "DB3_INDEX_NOT_UNIQUE":
35
+ return (Array.isArray(details.duplicates) ? details.duplicates : []).map((duplicate) => `Duplicate key ${(duplicate.values ?? []).map(valueText).join(", ")}: ${duplicate.count} records`);
36
+ case "DB3_INDEX_IN_USE":
37
+ return (Array.isArray(details.origins) ? details.origins : []).map((origin) => `Kept by: ${originText(origin)}`);
38
+ case "DB3_INDEX_EXISTS":
39
+ case "DB3_INDEX_NAME_TAKEN":
40
+ return typeof details.index === "string" ? [`Index: ${details.index}`] : [];
41
+ case "DB3_INDEX_SET_FIELD":
42
+ return typeof details.field === "string" ? [`Field: ${details.field}`] : [];
43
+ case "NOT_A_DB3":
44
+ return details.documentFormat !== undefined ? [`Stored format: ${details.documentFormat}`] : [];
45
+ default:
46
+ return [];
47
+ }
48
+ }
49
+ //# sourceMappingURL=db3-index-output.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db3-index-output.js","sourceRoot":"","sources":["../../../src/lib/db3-index-output.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAaH,wFAAwF;AACxF,SAAS,UAAU,CAAC,MAAyC;IAC3D,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC;AACjE,CAAC;AAED,6DAA6D;AAC7D,MAAM,UAAU,iBAAiB,CAAC,OAA+B;IAC/D,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAC7B,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;QAC/B,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI;QACnC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;KAClD,CAAC,CAAC,CAAC;AACN,CAAC;AAED,uFAAuF;AACvF,SAAS,SAAS,CAAC,KAAc;IAC/B,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AACnE,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAAC,GAA0C;IAC7E,MAAM,OAAO,GAAG,CAAC,GAAG,EAAE,OAAO,IAAI,EAAE,CAAwB,CAAC;IAC5D,QAAQ,GAAG,EAAE,IAAI,EAAE,CAAC;QAClB,KAAK,sBAAsB;YACzB,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CACtE,CAAC,SAAiD,EAAE,EAAE,CACpD,iBAAiB,CAAC,SAAS,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,SAAS,CAAC,KAAK,UAAU,CACpG,CAAC;QACJ,KAAK,kBAAkB;YACrB,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAChE,CAAC,MAAyC,EAAE,EAAE,CAAC,YAAY,UAAU,CAAC,MAAM,CAAC,EAAE,CAChF,CAAC;QACJ,KAAK,kBAAkB,CAAC;QACxB,KAAK,sBAAsB;YACzB,OAAO,OAAO,OAAO,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,UAAU,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9E,KAAK,qBAAqB;YACxB,OAAO,OAAO,OAAO,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,UAAU,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9E,KAAK,WAAW;YACd,OAAO,OAAO,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,kBAAkB,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAClG;YACE,OAAO,EAAE,CAAC;IACd,CAAC;AACH,CAAC"}