@feltdb/core 0.13.0 → 0.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (300) hide show
  1. package/dist/agent-runtime.d.ts +64 -2
  2. package/dist/agent-runtime.d.ts.map +1 -1
  3. package/dist/agent-runtime.js +121 -11
  4. package/dist/agent-state.d.ts +68 -0
  5. package/dist/agent-state.d.ts.map +1 -1
  6. package/dist/agent-state.js +210 -12
  7. package/dist/agent.d.ts +10 -1
  8. package/dist/agent.d.ts.map +1 -1
  9. package/dist/agent.js +10 -1
  10. package/dist/build-identity.json +12 -4
  11. package/dist/cli/commands.js +214 -10
  12. package/dist/cli/publish-engine.js +116 -16
  13. package/dist/collection.d.ts +3 -1
  14. package/dist/collection.d.ts.map +1 -1
  15. package/dist/collection.js +33 -8
  16. package/dist/create/build-identity.json +12 -4
  17. package/dist/create/cli.js +1 -1
  18. package/dist/create/create.js +4 -6
  19. package/dist/create/managed-account.js +93 -35
  20. package/dist/create/package-versions.js +1 -1
  21. package/dist/create/server-source/Cargo.lock +8 -511
  22. package/dist/create/server-source/Cargo.toml +2 -13
  23. package/dist/create/server-source/crates/feltdb-client/Cargo.toml +1 -1
  24. package/dist/create/server-source/crates/feltdb-server/Cargo.toml +1 -1
  25. package/dist/create/server-source/crates/feltdb-server/README.md +6 -1
  26. package/dist/create/server-source/crates/feltdb-server/src/app_state.rs +9 -1
  27. package/dist/create/server-source/crates/feltdb-server/src/auth.rs +85 -25
  28. package/dist/create/server-source/crates/feltdb-server/src/backup.rs +4 -0
  29. package/dist/create/server-source/crates/feltdb-server/src/console_accounts.rs +1009 -0
  30. package/dist/create/server-source/crates/feltdb-server/src/control_authorization.rs +441 -0
  31. package/dist/create/server-source/crates/feltdb-server/src/identity.rs +68 -6
  32. package/dist/create/server-source/crates/feltdb-server/src/key_management.rs +355 -23
  33. package/dist/create/server-source/crates/feltdb-server/src/lib.rs +3 -0
  34. package/dist/create/server-source/crates/feltdb-server/src/main.rs +1134 -96
  35. package/dist/create/server-source/crates/feltdb-server/src/redaction.rs +208 -0
  36. package/dist/create/server-source/crates/feltdb-server/src/tenancy.rs +198 -19
  37. package/dist/create/server-source/crates/feltdb-server/tests/transaction_precondition_contract.rs +403 -0
  38. package/dist/create/server-source/crates/feltdb-wasm/Cargo.toml +1 -1
  39. package/dist/db.d.ts +75 -10
  40. package/dist/db.d.ts.map +1 -1
  41. package/dist/db.js +168 -29
  42. package/dist/deployment.d.ts +19 -0
  43. package/dist/deployment.d.ts.map +1 -1
  44. package/dist/deployment.js +38 -2
  45. package/dist/embedded-query.d.ts.map +1 -1
  46. package/dist/embedded-query.js +5 -4
  47. package/dist/embedded-transaction.d.ts +8 -4
  48. package/dist/embedded-transaction.d.ts.map +1 -1
  49. package/dist/embedded-transaction.js +55 -19
  50. package/dist/error-codes.d.ts +36 -2
  51. package/dist/error-codes.d.ts.map +1 -1
  52. package/dist/error-codes.js +50 -3
  53. package/dist/feltdb.d.ts +7 -0
  54. package/dist/feltdb.d.ts.map +1 -1
  55. package/dist/file-db.d.ts +27 -0
  56. package/dist/file-db.d.ts.map +1 -1
  57. package/dist/file-db.js +145 -7
  58. package/dist/http-client.d.ts +11 -3
  59. package/dist/http-client.d.ts.map +1 -1
  60. package/dist/http-client.js +27 -14
  61. package/dist/http-db.d.ts +43 -1
  62. package/dist/http-db.d.ts.map +1 -1
  63. package/dist/http-db.js +287 -59
  64. package/dist/index.js +1 -1
  65. package/dist/local-state-lock.d.ts +34 -0
  66. package/dist/local-state-lock.d.ts.map +1 -0
  67. package/dist/local-state-lock.js +225 -0
  68. package/dist/managed-recovery.d.ts +6 -0
  69. package/dist/managed-recovery.d.ts.map +1 -1
  70. package/dist/managed-recovery.js +9 -0
  71. package/dist/reactive-graph.d.ts +0 -3
  72. package/dist/reactive-graph.d.ts.map +1 -1
  73. package/dist/reactive-graph.js +11 -1
  74. package/dist/runtime-registry.d.ts +7 -2
  75. package/dist/runtime-registry.d.ts.map +1 -1
  76. package/dist/runtime-registry.js +2 -2
  77. package/dist/studio/components/index.js +1 -1
  78. package/dist/studio/{components-BSGmHfif.js → components-CJmzntBi.js} +2 -1
  79. package/dist/studio/index.js +1 -1
  80. package/dist/studio-app/assets/{feltdb_wasm-3hDngl1h.js → feltdb_wasm-DtybUY0q.js} +1 -1
  81. package/dist/studio-app/assets/feltdb_wasm_bg-DsgIUwaB.wasm +0 -0
  82. package/dist/studio-app/assets/index-C4OffsZl.js +37 -0
  83. package/dist/studio-app/index.html +1 -1
  84. package/dist/transaction.d.ts +27 -11
  85. package/dist/transaction.d.ts.map +1 -1
  86. package/dist/transaction.js +20 -14
  87. package/dist/wasm/feltdb_wasm_bg.wasm +0 -0
  88. package/dist/wasm/package.json +1 -1
  89. package/dist/workload.d.ts +86 -6
  90. package/dist/workload.d.ts.map +1 -1
  91. package/dist/workload.js +51 -3
  92. package/dist/workspace/workspace-connection.d.ts.map +1 -1
  93. package/dist/workspace/workspace-connection.js +14 -3
  94. package/package.json +1 -1
  95. package/dist/create/server-source/crates/feltdb/Cargo.lock +0 -175
  96. package/dist/create/server-source/crates/feltdb/Cargo.toml +0 -102
  97. package/dist/create/server-source/crates/feltdb/LICENSE +0 -21
  98. package/dist/create/server-source/crates/feltdb/README.md +0 -75
  99. package/dist/create/server-source/crates/feltdb/benches/baselines/gate-13-redux.json +0 -370
  100. package/dist/create/server-source/crates/feltdb/benches/gate13_baseline.rs +0 -589
  101. package/dist/create/server-source/crates/feltdb/benches/gate13_phase_7_1_release_economics.rs +0 -247
  102. package/dist/create/server-source/crates/feltdb/benches/gate_13_redux.rs +0 -440
  103. package/dist/create/server-source/crates/feltdb/benches/gate_13_regression_runner.rs +0 -275
  104. package/dist/create/server-source/crates/feltdb/benches/gate_14a_concurrent_writer_scaling.rs +0 -381
  105. package/dist/create/server-source/crates/feltdb/benches/gate_14a_production_admission_revalidation.rs +0 -467
  106. package/dist/create/server-source/crates/feltdb/benches/gate_14a_rc2_admission_contract.rs +0 -489
  107. package/dist/create/server-source/crates/feltdb/benches/gate_14a_rc_root_cause.rs +0 -281
  108. package/dist/create/server-source/crates/feltdb/benches/gate_14a_sync1_queued_prototype.rs +0 -606
  109. package/dist/create/server-source/crates/feltdb/benches/gate_14a_sync_economics.rs +0 -531
  110. package/dist/create/server-source/crates/feltdb/benches/gate_14b_causal_backlog_scaling.rs +0 -462
  111. package/dist/create/server-source/crates/feltdb/benches/gate_14c_replication_contract_test.rs +0 -505
  112. package/dist/create/server-source/crates/feltdb/benches/gate_14c_replication_scaling.rs +0 -484
  113. package/dist/create/server-source/crates/feltdb/benches/gate_14d_combined_dimension_scaling.rs +0 -758
  114. package/dist/create/server-source/crates/feltdb/benches/phase_7_1_2_optimization_benchmark.rs +0 -421
  115. package/dist/create/server-source/crates/feltdb/benches/phase_7_1_3_crossover_analysis.rs +0 -329
  116. package/dist/create/server-source/crates/feltdb/src/acceptance_tests.rs +0 -1705
  117. package/dist/create/server-source/crates/feltdb/src/acquisition.rs +0 -286
  118. package/dist/create/server-source/crates/feltdb/src/admission.rs +0 -185
  119. package/dist/create/server-source/crates/feltdb/src/admission_contract_tests.rs +0 -507
  120. package/dist/create/server-source/crates/feltdb/src/adversarial_transport.rs +0 -539
  121. package/dist/create/server-source/crates/feltdb/src/agent_state.rs +0 -320
  122. package/dist/create/server-source/crates/feltdb/src/agent_transition_contract.rs +0 -1545
  123. package/dist/create/server-source/crates/feltdb/src/analytics.rs +0 -521
  124. package/dist/create/server-source/crates/feltdb/src/application.rs +0 -2674
  125. package/dist/create/server-source/crates/feltdb/src/application_runtime.rs +0 -1070
  126. package/dist/create/server-source/crates/feltdb/src/authority.rs +0 -479
  127. package/dist/create/server-source/crates/feltdb/src/authority_failover.rs +0 -847
  128. package/dist/create/server-source/crates/feltdb/src/authorization.rs +0 -1030
  129. package/dist/create/server-source/crates/feltdb/src/authorization_security_tests.rs +0 -1122
  130. package/dist/create/server-source/crates/feltdb/src/bin/feltdb-authority-client.rs +0 -32
  131. package/dist/create/server-source/crates/feltdb/src/bin/feltdb-authority.rs +0 -19
  132. package/dist/create/server-source/crates/feltdb/src/bin/feltdb_node.rs +0 -1474
  133. package/dist/create/server-source/crates/feltdb/src/capabilities/mod.rs +0 -8
  134. package/dist/create/server-source/crates/feltdb/src/capabilities/search.rs +0 -418
  135. package/dist/create/server-source/crates/feltdb/src/capabilities/vector.rs +0 -482
  136. package/dist/create/server-source/crates/feltdb/src/capability.rs +0 -903
  137. package/dist/create/server-source/crates/feltdb/src/cardinality_diagnostics.rs +0 -263
  138. package/dist/create/server-source/crates/feltdb/src/cardinality_endpoint.rs +0 -77
  139. package/dist/create/server-source/crates/feltdb/src/causal_backlog_bound.rs +0 -496
  140. package/dist/create/server-source/crates/feltdb/src/causal_dependency_barrier.rs +0 -2574
  141. package/dist/create/server-source/crates/feltdb/src/causal_dependency_barrier_phase_7_1.rs +0 -212
  142. package/dist/create/server-source/crates/feltdb/src/concurrency_fuzzing.rs +0 -422
  143. package/dist/create/server-source/crates/feltdb/src/consistency_contract.rs +0 -445
  144. package/dist/create/server-source/crates/feltdb/src/content_distribution.rs +0 -465
  145. package/dist/create/server-source/crates/feltdb/src/convergence.rs +0 -634
  146. package/dist/create/server-source/crates/feltdb/src/crash_atomic_boundary.rs +0 -427
  147. package/dist/create/server-source/crates/feltdb/src/crash_injection.rs +0 -376
  148. package/dist/create/server-source/crates/feltdb/src/crash_recovery_tests.rs +0 -365
  149. package/dist/create/server-source/crates/feltdb/src/cron.rs +0 -294
  150. package/dist/create/server-source/crates/feltdb/src/dedup_bound_investigation.rs +0 -483
  151. package/dist/create/server-source/crates/feltdb/src/distributed_indexing.rs +0 -477
  152. package/dist/create/server-source/crates/feltdb/src/distributed_tests.rs +0 -1003
  153. package/dist/create/server-source/crates/feltdb/src/distributed_transactions.rs +0 -1334
  154. package/dist/create/server-source/crates/feltdb/src/durability_guarantees.rs +0 -368
  155. package/dist/create/server-source/crates/feltdb/src/durable_dedup_set.rs +0 -231
  156. package/dist/create/server-source/crates/feltdb/src/durable_operation_identity.rs +0 -482
  157. package/dist/create/server-source/crates/feltdb/src/durable_operation_log.rs +0 -203
  158. package/dist/create/server-source/crates/feltdb/src/durable_sync.rs +0 -317
  159. package/dist/create/server-source/crates/feltdb/src/equality_index.rs +0 -595
  160. package/dist/create/server-source/crates/feltdb/src/execution.rs +0 -426
  161. package/dist/create/server-source/crates/feltdb/src/in_process_transport.rs +0 -214
  162. package/dist/create/server-source/crates/feltdb/src/indexing.rs +0 -776
  163. package/dist/create/server-source/crates/feltdb/src/lib.rs +0 -7274
  164. package/dist/create/server-source/crates/feltdb/src/managed_cas_tests.rs +0 -234
  165. package/dist/create/server-source/crates/feltdb/src/materialization.rs +0 -184
  166. package/dist/create/server-source/crates/feltdb/src/metrics.rs +0 -266
  167. package/dist/create/server-source/crates/feltdb/src/multi_node_convergence.rs +0 -310
  168. package/dist/create/server-source/crates/feltdb/src/multi_operation_transaction.rs +0 -736
  169. package/dist/create/server-source/crates/feltdb/src/observability.rs +0 -379
  170. package/dist/create/server-source/crates/feltdb/src/operation.rs +0 -290
  171. package/dist/create/server-source/crates/feltdb/src/operation_algebra.rs +0 -439
  172. package/dist/create/server-source/crates/feltdb/src/operation_log.rs +0 -349
  173. package/dist/create/server-source/crates/feltdb/src/p1_application_atomicity.rs +0 -332
  174. package/dist/create/server-source/crates/feltdb/src/p1_atomicity_acceptance.rs +0 -718
  175. package/dist/create/server-source/crates/feltdb/src/partition_reconciliation.rs +0 -487
  176. package/dist/create/server-source/crates/feltdb/src/peer_registry.rs +0 -166
  177. package/dist/create/server-source/crates/feltdb/src/permutation_scheduler.rs +0 -289
  178. package/dist/create/server-source/crates/feltdb/src/persistence_reality.rs +0 -566
  179. package/dist/create/server-source/crates/feltdb/src/phase1b_acceptance.rs +0 -3391
  180. package/dist/create/server-source/crates/feltdb/src/phase1c1_acceptance.rs +0 -203
  181. package/dist/create/server-source/crates/feltdb/src/phase1c2_acceptance.rs +0 -261
  182. package/dist/create/server-source/crates/feltdb/src/phase1c3_acceptance.rs +0 -502
  183. package/dist/create/server-source/crates/feltdb/src/phase1c_atomicity_proof.rs +0 -216
  184. package/dist/create/server-source/crates/feltdb/src/phase5_integration.rs +0 -303
  185. package/dist/create/server-source/crates/feltdb/src/phase5_scenarios.rs +0 -323
  186. package/dist/create/server-source/crates/feltdb/src/phase6_adversarial_scenarios.rs +0 -531
  187. package/dist/create/server-source/crates/feltdb/src/phase6_convergence_validator.rs +0 -406
  188. package/dist/create/server-source/crates/feltdb/src/phase6_persistence.rs +0 -436
  189. package/dist/create/server-source/crates/feltdb/src/phase_1c_real_tcp.rs +0 -387
  190. package/dist/create/server-source/crates/feltdb/src/phase_2a_failures.rs +0 -378
  191. package/dist/create/server-source/crates/feltdb/src/phase_2b_network.rs +0 -359
  192. package/dist/create/server-source/crates/feltdb/src/phase_2c_cascading.rs +0 -372
  193. package/dist/create/server-source/crates/feltdb/src/phase_3_durability.rs +0 -404
  194. package/dist/create/server-source/crates/feltdb/src/phase_4_baseline.rs +0 -376
  195. package/dist/create/server-source/crates/feltdb/src/phase_5_soak.rs +0 -461
  196. package/dist/create/server-source/crates/feltdb/src/policy_evaluation.rs +0 -2125
  197. package/dist/create/server-source/crates/feltdb/src/production_api.rs +0 -418
  198. package/dist/create/server-source/crates/feltdb/src/provenance.rs +0 -207
  199. package/dist/create/server-source/crates/feltdb/src/query_execution_diagnostics.rs +0 -126
  200. package/dist/create/server-source/crates/feltdb/src/query_performance.rs +0 -218
  201. package/dist/create/server-source/crates/feltdb/src/read_basis.rs +0 -257
  202. package/dist/create/server-source/crates/feltdb/src/references.rs +0 -404
  203. package/dist/create/server-source/crates/feltdb/src/replay_fuzzing.rs +0 -401
  204. package/dist/create/server-source/crates/feltdb/src/replica_acknowledgements.rs +0 -501
  205. package/dist/create/server-source/crates/feltdb/src/replica_membership.rs +0 -680
  206. package/dist/create/server-source/crates/feltdb/src/replication_manager.rs +0 -163
  207. package/dist/create/server-source/crates/feltdb/src/replication_protocol.rs +0 -133
  208. package/dist/create/server-source/crates/feltdb/src/routing.rs +0 -409
  209. package/dist/create/server-source/crates/feltdb/src/semantic_decision.rs +0 -2029
  210. package/dist/create/server-source/crates/feltdb/src/semantic_query.rs +0 -599
  211. package/dist/create/server-source/crates/feltdb/src/sharding.rs +0 -549
  212. package/dist/create/server-source/crates/feltdb/src/state_conflict_contract.rs +0 -516
  213. package/dist/create/server-source/crates/feltdb/src/state_contract.rs +0 -5894
  214. package/dist/create/server-source/crates/feltdb/src/state_diff_contract.rs +0 -222
  215. package/dist/create/server-source/crates/feltdb/src/state_facade.rs +0 -320
  216. package/dist/create/server-source/crates/feltdb/src/state_hash.rs +0 -291
  217. package/dist/create/server-source/crates/feltdb/src/state_model.rs +0 -4158
  218. package/dist/create/server-source/crates/feltdb/src/state_transition_store.rs +0 -379
  219. package/dist/create/server-source/crates/feltdb/src/state_trigger.rs +0 -673
  220. package/dist/create/server-source/crates/feltdb/src/storage.rs +0 -273
  221. package/dist/create/server-source/crates/feltdb/src/submission.rs +0 -471
  222. package/dist/create/server-source/crates/feltdb/src/sync.rs +0 -495
  223. package/dist/create/server-source/crates/feltdb/src/sync_contract.rs +0 -822
  224. package/dist/create/server-source/crates/feltdb/src/tcp_transport.rs +0 -433
  225. package/dist/create/server-source/crates/feltdb/src/transaction_api.rs +0 -462
  226. package/dist/create/server-source/crates/feltdb/src/transaction_invariants.rs +0 -965
  227. package/dist/create/server-source/crates/feltdb/src/transaction_preconditions.rs +0 -1120
  228. package/dist/create/server-source/crates/feltdb/src/transactions.rs +0 -643
  229. package/dist/create/server-source/crates/feltdb/src/trigger.rs +0 -390
  230. package/dist/create/server-source/crates/feltdb/src/trigger_contract.rs +0 -749
  231. package/dist/create/server-source/crates/feltdb/src/versioned_object_substrate.rs +0 -708
  232. package/dist/create/server-source/crates/feltdb/src/worker_mesh.rs +0 -1133
  233. package/dist/create/server-source/crates/feltdb/src/workflow.rs +0 -713
  234. package/dist/create/server-source/crates/feltdb/src/workflow_acceptance_tests.rs +0 -510
  235. package/dist/create/server-source/crates/feltdb/src/workflow_integration.rs +0 -354
  236. package/dist/create/server-source/crates/feltdb/src/workflow_runtime.rs +0 -594
  237. package/dist/create/server-source/crates/feltdb/src/workload.rs +0 -2886
  238. package/dist/create/server-source/crates/feltdb/src/workload_diagnostics.rs +0 -456
  239. package/dist/create/server-source/crates/feltdb/tests/agent_state_native.rs +0 -1188
  240. package/dist/create/server-source/crates/feltdb/tests/agent_transition_contract_conformance.rs +0 -2884
  241. package/dist/create/server-source/crates/feltdb/tests/authority_process.rs +0 -297
  242. package/dist/create/server-source/crates/feltdb/tests/authority_transaction_identity.rs +0 -534
  243. package/dist/create/server-source/crates/feltdb/tests/bounded_read_contract.rs +0 -132
  244. package/dist/create/server-source/crates/feltdb/tests/branching_evidence.rs +0 -299
  245. package/dist/create/server-source/crates/feltdb/tests/common/mod.rs +0 -96
  246. package/dist/create/server-source/crates/feltdb/tests/compaction_stall_contract.rs +0 -272
  247. package/dist/create/server-source/crates/feltdb/tests/crash_durability_contract.rs +0 -467
  248. package/dist/create/server-source/crates/feltdb/tests/current_revision_authority_evidence.rs +0 -309
  249. package/dist/create/server-source/crates/feltdb/tests/durable_backup_contract.rs +0 -445
  250. package/dist/create/server-source/crates/feltdb/tests/durable_corruption_contract.rs +0 -518
  251. package/dist/create/server-source/crates/feltdb/tests/durable_format_compatibility.rs +0 -392
  252. package/dist/create/server-source/crates/feltdb/tests/feltdb_state_boundary_tests.rs +0 -850
  253. package/dist/create/server-source/crates/feltdb/tests/fixtures/agent_transition_corpus.json +0 -23340
  254. package/dist/create/server-source/crates/feltdb/tests/fixtures/state_conflict_contract_corpus.json +0 -1916
  255. package/dist/create/server-source/crates/feltdb/tests/fixtures/state_diff_contract_corpus.json +0 -1878
  256. package/dist/create/server-source/crates/feltdb/tests/fixtures/trigger_contract_corpus.json +0 -1862
  257. package/dist/create/server-source/crates/feltdb/tests/generalized_version_control_evidence.rs +0 -123
  258. package/dist/create/server-source/crates/feltdb/tests/generalized_version_control_substrate_completion.rs +0 -299
  259. package/dist/create/server-source/crates/feltdb/tests/local_process_ownership.rs +0 -69
  260. package/dist/create/server-source/crates/feltdb/tests/managed_incident_regression.rs +0 -191
  261. package/dist/create/server-source/crates/feltdb/tests/operational_health_contract.rs +0 -278
  262. package/dist/create/server-source/crates/feltdb/tests/pr34_query_collection.rs +0 -234
  263. package/dist/create/server-source/crates/feltdb/tests/pr35_equality_index.rs +0 -947
  264. package/dist/create/server-source/crates/feltdb/tests/pr7_self_authorization_proof.rs +0 -404
  265. package/dist/create/server-source/crates/feltdb/tests/pr8_vocabulary_assessment.rs +0 -916
  266. package/dist/create/server-source/crates/feltdb/tests/pr9_phase2_boundary_tests.rs +0 -1045
  267. package/dist/create/server-source/crates/feltdb/tests/pr9_phase3a_path_a_tests.rs +0 -347
  268. package/dist/create/server-source/crates/feltdb/tests/pr9_phase3c_authorized_mutations.rs +0 -361
  269. package/dist/create/server-source/crates/feltdb/tests/pr9_phase3c_role_based_authorization.rs +0 -330
  270. package/dist/create/server-source/crates/feltdb/tests/pr9_phase3c_simple_auth_delete.rs +0 -93
  271. package/dist/create/server-source/crates/feltdb/tests/pr9_phase3c_team_delete_role_authorization.rs +0 -622
  272. package/dist/create/server-source/crates/feltdb/tests/pr9_teams_role_based_access.rs +0 -517
  273. package/dist/create/server-source/crates/feltdb/tests/production_certification.rs +0 -1153
  274. package/dist/create/server-source/crates/feltdb/tests/production_contract.rs +0 -771
  275. package/dist/create/server-source/crates/feltdb/tests/production_readiness_contract.rs +0 -1383
  276. package/dist/create/server-source/crates/feltdb/tests/reconciliation_application.rs +0 -868
  277. package/dist/create/server-source/crates/feltdb/tests/reconciliation_wire_format_evidence.rs +0 -221
  278. package/dist/create/server-source/crates/feltdb/tests/replicated_history_contract.rs +0 -417
  279. package/dist/create/server-source/crates/feltdb/tests/resource_scoped_revisions.rs +0 -338
  280. package/dist/create/server-source/crates/feltdb/tests/revision_identity_contract.rs +0 -1039
  281. package/dist/create/server-source/crates/feltdb/tests/revision_model_decision.rs +0 -739
  282. package/dist/create/server-source/crates/feltdb/tests/revision_retention_boundary_evidence.rs +0 -452
  283. package/dist/create/server-source/crates/feltdb/tests/saas_authorization_integration.rs +0 -81
  284. package/dist/create/server-source/crates/feltdb/tests/saas_invitation_lifecycle.rs +0 -438
  285. package/dist/create/server-source/crates/feltdb/tests/semantic_decision.rs +0 -1165
  286. package/dist/create/server-source/crates/feltdb/tests/semantic_query.rs +0 -767
  287. package/dist/create/server-source/crates/feltdb/tests/semantic_query_contract.rs +0 -363
  288. package/dist/create/server-source/crates/feltdb/tests/state_conflict_contract_conformance.rs +0 -1799
  289. package/dist/create/server-source/crates/feltdb/tests/state_diff_contract_conformance.rs +0 -1316
  290. package/dist/create/server-source/crates/feltdb/tests/state_model_integration.rs +0 -358
  291. package/dist/create/server-source/crates/feltdb/tests/state_persistence_integration.rs +0 -365
  292. package/dist/create/server-source/crates/feltdb/tests/state_ref_authority.rs +0 -918
  293. package/dist/create/server-source/crates/feltdb/tests/state_store_boundary_evidence.rs +0 -299
  294. package/dist/create/server-source/crates/feltdb/tests/storage_independent_versioned_object_substrate.rs +0 -328
  295. package/dist/create/server-source/crates/feltdb/tests/sync_divergence_evidence.rs +0 -255
  296. package/dist/create/server-source/crates/feltdb/tests/three_way_input_boundary_evidence.rs +0 -249
  297. package/dist/create/server-source/crates/feltdb/tests/trigger_contract_conformance.rs +0 -994
  298. package/dist/create/server-source/crates/feltdb/tests/workload_envelope_contract.rs +0 -484
  299. package/dist/studio-app/assets/feltdb_wasm_bg-CFQT4gCy.wasm +0 -0
  300. package/dist/studio-app/assets/index-Dql1hS5m.js +0 -30
@@ -17,14 +17,14 @@ import { applicationIsRunning, applicationUrlCandidate, detectApplication, disco
17
17
  import { resolveApplicationLifecycle, startManagedApplication, waitForManagedApplication } from './application-lifecycle.js';
18
18
  import { createDevelopmentSession, developmentSessionEnvironment, developmentSessionSummary, developmentStudioArguments, transitionDevelopmentSession } from './development-session.js';
19
19
  import { openApplication, openStudio } from './browser-opening.js';
20
- import { publishApplication } from './publish-engine.js';
20
+ import { publishApplication, readApplicationContract } from './publish-engine.js';
21
21
  import { applyFlowProposalAtomic, assertProposalSourcePlan, describeProposal, loadLocalDevelopmentContract, repositoryContext, reviewFlowProposal, syncGeneratedSource } from './source-sync.js';
22
22
  import { configureAiModel, generateConfiguredFlowProposal, publicAiModelConfiguration } from './ai-model-config.js';
23
23
  import { proposalService } from './proposal-client.js';
24
24
  import { resolveManagedAuthorityEnvironment } from './managed-environment.js';
25
25
  import { readManagedProjectState } from './managed-project.js';
26
26
  import { resolveCanonicalStudioArtifact } from './studio-artifact.js';
27
- import { configureManagedAccount, finalizeManagedProvisioning } from '../create/index.js';
27
+ import { configureManagedAccount, createManagedKey, finalizeManagedProvisioning, listManagedKeys, resolveManagedScopes, revokeManagedKey, setEnvironmentValue, signInManagedAccount } from '../create/index.js';
28
28
  function loadProjectEnvironment(file = path.resolve('.env.local')) {
29
29
  if (!fs.existsSync(file))
30
30
  return;
@@ -40,6 +40,27 @@ function loadProjectEnvironment(file = path.resolve('.env.local')) {
40
40
  if (!(key in process.env))
41
41
  process.env[key] = value;
42
42
  }
43
+ warnBrowserExposedCredentials();
44
+ }
45
+ /**
46
+ * Credentials under a `VITE_` name are inlined into the application's browser
47
+ * bundle by Vite, so they are no longer read as credentials anywhere. Say so,
48
+ * rather than silently dropping authentication a project used to have.
49
+ */
50
+ function warnBrowserExposedCredentials() {
51
+ for (const name of Object.keys(process.env)) {
52
+ if (/^VITE_[A-Z0-9_]*(?:TOKEN|API_KEY|SECRET)$/.test(name) && process.env[name]) {
53
+ console.warn(`⚠ ${name} is ignored: VITE_* variables are inlined into browser bundles. Move the credential to FELTDB_TOKEN (server-side only).`);
54
+ }
55
+ }
56
+ }
57
+ /**
58
+ * The local `feltdb dev` Studio is an operator console on localhost. It
59
+ * receives the developer's server-side key at runtime (no-store), never from a
60
+ * bundled VITE_* value.
61
+ */
62
+ function studioOperatorToken() {
63
+ return process.env.FELTDB_TOKEN || '';
43
64
  }
44
65
  async function availablePort(preferred, host = '127.0.0.1') {
45
66
  for (let port = preferred; port < preferred + 100; port += 1) {
@@ -64,6 +85,8 @@ export async function handleCommand(command, args) {
64
85
  return handleKeys(args);
65
86
  case 'init-managed':
66
87
  return handleInitManaged(args);
88
+ case 'managed':
89
+ return handleManaged(args);
67
90
  case 'connect':
68
91
  return handleConnect(args);
69
92
  case 'status':
@@ -620,6 +643,7 @@ async function handleManagedPublish(args) {
620
643
  yes: args.includes('--yes'),
621
644
  approveDestructive: args.includes('--approve-destructive-changes') || args.includes('--allow-destructive'),
622
645
  noBuild: args.includes('--no-build'),
646
+ contract: valueAfter('--contract'),
623
647
  confirm,
624
648
  });
625
649
  }
@@ -831,8 +855,8 @@ async function handleConnect(args) {
831
855
  let health;
832
856
  try {
833
857
  const response = await fetch(`${url}/health`, {
834
- headers: process.env.FELTDB_TOKEN || process.env.VITE_FELTDB_API_KEY
835
- ? { Authorization: `Bearer ${process.env.FELTDB_TOKEN || process.env.VITE_FELTDB_API_KEY}` }
858
+ headers: process.env.FELTDB_TOKEN
859
+ ? { Authorization: `Bearer ${process.env.FELTDB_TOKEN}` }
836
860
  : {},
837
861
  signal: controller.signal,
838
862
  });
@@ -855,14 +879,14 @@ async function handleConnect(args) {
855
879
  fs.writeFileSync(connFile, JSON.stringify({
856
880
  url,
857
881
  connected: new Date().toISOString(),
858
- authenticated: Boolean(process.env.FELTDB_TOKEN || process.env.VITE_FELTDB_API_KEY),
882
+ authenticated: Boolean(process.env.FELTDB_TOKEN),
859
883
  namespace: managed.namespace || project.namespace || 'default',
860
884
  runtime: project.runtime || 'self-hosted',
861
885
  }, null, 2));
862
886
  console.log('✅ Connected to FeltDB\n');
863
887
  console.log('Endpoint: ' + url);
864
888
  console.log(`Namespace: ${managed.namespace || project.namespace || 'default'}`);
865
- console.log(`Authenticated: ${process.env.FELTDB_TOKEN || process.env.VITE_FELTDB_API_KEY ? 'yes' : 'no'}`);
889
+ console.log(`Authenticated: ${process.env.FELTDB_TOKEN ? 'yes' : 'no'}`);
866
890
  console.log(`Runtime: ${project.runtime || 'self-hosted'}`);
867
891
  console.log(`Health: ${health.status || 'healthy'}\n`);
868
892
  console.log('Use: feltdb status (to check connection)\n');
@@ -926,6 +950,9 @@ export function ensureManagedProjectContract(projectDir) {
926
950
  return { ...created, configPath, flowPath };
927
951
  }
928
952
  async function handleInitManaged(args) {
953
+ const contract = flagValue(args, '--contract');
954
+ if (contract)
955
+ return initManagedWithContract(args, contract);
929
956
  loadProjectEnvironment();
930
957
  const projectDir = process.cwd();
931
958
  const initialized = ensureManagedProjectContract(projectDir);
@@ -978,10 +1005,11 @@ async function handleInitManaged(args) {
978
1005
  // Prompt for credentials
979
1006
  console.log('☁️ Setting up managed FeltDB for this project\n');
980
1007
  const prompt = await import('node:readline/promises').then(m => m.createInterface({ input: process.stdin, output: process.stdout }));
981
- const email = args[0] || await prompt.question('Email: ');
1008
+ const [emailArgument, passwordArgument] = positionalArguments(args);
1009
+ const email = emailArgument || await prompt.question('Email: ');
982
1010
  if (!email)
983
1011
  throw new Error('Email is required');
984
- const password = args[1] || await promptSecret('Password (8+ characters): ');
1012
+ const password = passwordArgument || await promptSecret('Password (8+ characters): ');
985
1013
  if (password.length < 8)
986
1014
  throw new Error('Password must be at least 8 characters');
987
1015
  prompt.close();
@@ -1041,6 +1069,169 @@ async function handleInitManaged(args) {
1041
1069
  throw error;
1042
1070
  }
1043
1071
  }
1072
+ /** The value after `--flag`, if the flag is given. */
1073
+ function flagValue(args, flag) {
1074
+ const index = args.indexOf(flag);
1075
+ if (index < 0)
1076
+ return undefined;
1077
+ const value = args[index + 1];
1078
+ if (!value || value.startsWith('--'))
1079
+ throw new Error(`${flag} needs a value`);
1080
+ return value;
1081
+ }
1082
+ const VALUE_FLAGS = new Set(['--contract', '--runtime-scopes', '--name', '--scopes', '--application', '--env-var', '--save-to', '--environment', '--message']);
1083
+ /** Arguments that are neither flags nor flag values. */
1084
+ function positionalArguments(args) {
1085
+ return args.filter((value, index) => !value.startsWith('--') && !VALUE_FLAGS.has(args[index - 1] ?? ''));
1086
+ }
1087
+ /**
1088
+ * The managed account's e-mail and password: positional arguments, else
1089
+ * FELTDB_MANAGED_EMAIL and FELTDB_MANAGED_PASSWORD (non-interactive), else a prompt
1090
+ * (the password is never echoed).
1091
+ */
1092
+ async function managedAccountCredentials(args) {
1093
+ const [emailArgument, passwordArgument] = positionalArguments(args);
1094
+ let email = emailArgument || process.env.FELTDB_MANAGED_EMAIL || '';
1095
+ if (!email && process.stdin.isTTY) {
1096
+ const prompt = (await import('node:readline/promises')).createInterface({ input: process.stdin, output: process.stdout });
1097
+ try {
1098
+ email = await prompt.question('Email: ');
1099
+ }
1100
+ finally {
1101
+ prompt.close();
1102
+ }
1103
+ }
1104
+ const password = passwordArgument || process.env.FELTDB_MANAGED_PASSWORD || await promptSecret('Password (8+ characters): ');
1105
+ if (!email || password.length < 8) {
1106
+ throw new Error('Managed sign-in needs your FeltDB account e-mail and an 8+ character password. Non-interactively, set FELTDB_MANAGED_EMAIL and FELTDB_MANAGED_PASSWORD.');
1107
+ }
1108
+ return { email, password };
1109
+ }
1110
+ /**
1111
+ * `feltdb init-managed --contract <file>`: a project whose state contract is a JSON file
1112
+ * (generated by FeltKit, for one) rather than feltdb.flow. Creates or reuses the managed
1113
+ * application named after the project, mints its control key and a runtime key with the
1114
+ * scopes asked for (`minimal` unless `--runtime-scopes` says otherwise), writes `.env.local`
1115
+ * (mode 600) and `.feltdb/managed.json`, then publishes and promotes the contract and checks
1116
+ * that the runtime key resolves it. Re-running it on a configured project publishes again.
1117
+ */
1118
+ async function initManagedWithContract(args, contractFile) {
1119
+ const projectDir = process.cwd();
1120
+ const contractPath = path.resolve(projectDir, contractFile);
1121
+ readApplicationContract(contractPath);
1122
+ const runtimeScopes = resolveManagedScopes(flagValue(args, '--runtime-scopes') ?? 'minimal');
1123
+ const existing = readManagedProjectState(projectDir);
1124
+ if (existing.applicationId) {
1125
+ console.log(`✓ Already configured for managed FeltDB: application ${existing.applicationId}, ${existing.url}`);
1126
+ console.log(' Its keys are unchanged. Publishing the contract again.\n');
1127
+ }
1128
+ else {
1129
+ if (fs.existsSync(path.join(projectDir, '.env.local'))) {
1130
+ throw new Error('.env.local exists. Managed setup writes the project\'s FeltDB settings and keys there; move it aside first, so nothing in it is replaced.');
1131
+ }
1132
+ const packageFile = path.join(projectDir, 'package.json');
1133
+ const packageName = fs.existsSync(packageFile) ? String(JSON.parse(fs.readFileSync(packageFile, 'utf8')).name ?? '') : '';
1134
+ const applicationName = flagValue(args, '--name') || packageName.replace(/^@[^/]+\//, '') || path.basename(projectDir);
1135
+ if (!/^[a-z0-9][a-z0-9-]*$/.test(applicationName))
1136
+ throw new Error(`"${applicationName}" is not an application name (lowercase letters, digits, dashes); pass --name`);
1137
+ const { email, password } = await managedAccountCredentials(args);
1138
+ console.log('\nProvisioning managed application...\n');
1139
+ const managed = await configureManagedAccount({ projectDir, applicationName, namespace: applicationName, email, password, runtimeScopes });
1140
+ console.log(`✓ Managed application: ${managed.application.name} (${managed.application.id})`);
1141
+ console.log(`✓ Runtime key scopes: ${runtimeScopes.join(', ')}`);
1142
+ console.log('✓ Settings and keys written to .env.local (mode 600) and .feltdb/managed.json. Never commit either.\n');
1143
+ }
1144
+ const result = await publishApplication({
1145
+ cwd: projectDir,
1146
+ contract: contractFile,
1147
+ yes: args.includes('--yes') || !process.stdin.isTTY,
1148
+ // A new application has no active contract to break: its first contract (policies
1149
+ // included) is approved as `feltdb init-managed` approves a first feltdb.flow. A
1150
+ // configured application's changes still need --approve-destructive-changes.
1151
+ approveDestructive: args.includes('--approve-destructive-changes') || !existing.applicationId,
1152
+ confirm: async (question) => {
1153
+ const prompt = (await import('node:readline/promises')).createInterface({ input: process.stdin, output: process.stdout });
1154
+ try {
1155
+ return !/^(n|no)$/i.test((await prompt.question(`${question} [Y/n] `)).trim());
1156
+ }
1157
+ finally {
1158
+ prompt.close();
1159
+ }
1160
+ },
1161
+ });
1162
+ if (result.status === 'published') {
1163
+ const finalized = await finalizeManagedProvisioning({ projectDir });
1164
+ console.log(`✓ Managed runtime verified at revision ${finalized.revisionId}\n`);
1165
+ }
1166
+ }
1167
+ /** `feltdb managed keys create|list|revoke`: keys of a managed application (not local `feltdb keys`). */
1168
+ async function handleManaged(args) {
1169
+ const [group, action, ...rest] = args;
1170
+ if (group !== 'keys' || !['create', 'list', 'revoke'].includes(action ?? '')) {
1171
+ console.log(`Managed FeltDB keys (an application on the managed service; local keys are \`feltdb keys\`):
1172
+
1173
+ feltdb managed keys create --name <key-id> [--scopes minimal|default|control|<scope,scope>]
1174
+ [--application <app_id>] [--env-var FELTDB_TOKEN] [--save-to .env.local | --stdout]
1175
+ feltdb managed keys list [--application <app_id>]
1176
+ feltdb managed keys revoke <key-id>
1177
+
1178
+ Sign-in: your FeltDB account (prompted; or FELTDB_MANAGED_EMAIL / FELTDB_MANAGED_PASSWORD).
1179
+ The application defaults to the one in .feltdb/managed.json (or FELTDB_APPLICATION_ID).
1180
+ A new key's secret is written to the env file (mode 600), or with --stdout printed as
1181
+ NAME=secret for a pipe into a secret manager. It is never printed to a terminal.`);
1182
+ if (group)
1183
+ process.exitCode = 1;
1184
+ return;
1185
+ }
1186
+ loadProjectEnvironment();
1187
+ const state = readManagedProjectState();
1188
+ const applicationId = flagValue(rest, '--application') || state.applicationId || process.env.FELTDB_APPLICATION_ID;
1189
+ if (!applicationId && action !== 'revoke')
1190
+ throw new Error('Which application? Pass --application <app_id>, or run this in a project set up with `feltdb init-managed`.');
1191
+ // Key ids are the positional arguments here, so credentials come from the environment or a prompt.
1192
+ const session = await signInManagedAccount(await managedAccountCredentials([]));
1193
+ if (action === 'list') {
1194
+ console.log('id\tname\tstate\tscopes');
1195
+ for (const key of await listManagedKeys(session, applicationId)) {
1196
+ const scopes = Array.isArray(key.scopes) ? key.scopes.join(',') : '';
1197
+ console.log(`${String(key.id)}\t${String(key.name ?? '')}\t${key.revoked ? 'revoked' : 'active'}\t${scopes}`);
1198
+ }
1199
+ return;
1200
+ }
1201
+ if (action === 'revoke') {
1202
+ const target = positionalArguments(rest)[0];
1203
+ if (!target)
1204
+ throw new Error('Usage: feltdb managed keys revoke <key-id|key-name>');
1205
+ // The control plane assigns key ids; the name is what `create --name` gave it.
1206
+ const keys = applicationId ? await listManagedKeys(session, applicationId) : [];
1207
+ const byName = keys.filter(key => key.name === target && !key.revoked);
1208
+ if (byName.length > 1)
1209
+ throw new Error(`${byName.length} active keys are named ${target}; revoke one by id (feltdb managed keys list)`);
1210
+ const keyId = keys.some(key => key.id === target) ? target : byName[0] ? String(byName[0].id) : target;
1211
+ await revokeManagedKey(session, keyId);
1212
+ console.log(`✓ Revoked ${target}${keyId !== target ? ` (${keyId})` : ''}. Requests carrying it are now refused with AUTHENTICATION_REQUIRED.`);
1213
+ return;
1214
+ }
1215
+ const id = flagValue(rest, '--name');
1216
+ if (!id)
1217
+ throw new Error('Name the key: --name <key-id> (for example myapp-runtime-2026-10)');
1218
+ const scopes = resolveManagedScopes(flagValue(rest, '--scopes') ?? 'minimal');
1219
+ const envVar = flagValue(rest, '--env-var') ?? (scopes.includes('application:revision:promote') ? 'FELTDB_MANAGED_CONTROL_API_KEY' : 'FELTDB_TOKEN');
1220
+ const toStdout = rest.includes('--stdout');
1221
+ if (toStdout && process.stdout.isTTY)
1222
+ throw new Error('--stdout would show the secret on this terminal. Pipe it into your secret manager instead, or write it to an env file (the default).');
1223
+ const namespace = state.namespace || process.env.FELTDB_NAMESPACE || applicationId;
1224
+ const key = await createManagedKey(session, { id, namespace, applicationId: applicationId, scopes });
1225
+ if (toStdout) {
1226
+ process.stdout.write(`${envVar}=${key.secret}\n`);
1227
+ console.error(`✓ Created ${id} (key id ${key.id}) for ${applicationId}: ${key.scopes.join(', ')}; written to stdout as ${envVar}.`);
1228
+ return;
1229
+ }
1230
+ const envFile = path.resolve(flagValue(rest, '--save-to') ?? '.env.local');
1231
+ setEnvironmentValue(envFile, envVar, key.secret);
1232
+ console.log(`✓ Created ${id} (key id ${key.id}) for ${applicationId}: ${key.scopes.join(', ')}`);
1233
+ console.log(`✓ ${envVar} written to ${path.relative(process.cwd(), envFile) || envFile} (mode 600). Never commit it.`);
1234
+ }
1044
1235
  async function handleExplain(args) {
1045
1236
  const flowRef = args[0];
1046
1237
  if (!flowRef || !flowRef.startsWith('flow://')) {
@@ -1894,7 +2085,7 @@ async function handleStudio(args, onReady) {
1894
2085
  environment: managedProject.environment || 'production',
1895
2086
  publishEndpoint: '/_feltdb/publish',
1896
2087
  } : undefined;
1897
- response.end(JSON.stringify({ token: connectUrl ? process.env.VITE_FELTDB_API_KEY || '' : '', managedPublish, session, studioQuery, sourceSync: { enabled: true, webllmEnabled, previewOnly, token: studioMutationToken, aiModel: publicAiModelConfiguration() } }));
2088
+ response.end(JSON.stringify({ token: connectUrl ? studioOperatorToken() : '', managedPublish, session, studioQuery, sourceSync: { enabled: true, webllmEnabled, previewOnly, token: studioMutationToken, aiModel: publicAiModelConfiguration() } }));
1898
2089
  return;
1899
2090
  }
1900
2091
  if (pathname === '/_feltdb/contract') {
@@ -1913,7 +2104,7 @@ async function handleStudio(args, onReady) {
1913
2104
  endpoint.searchParams.set('application_id', applicationId);
1914
2105
  endpoint.searchParams.set('environment', managedProject.environment || lastPublished?.environment || 'production');
1915
2106
  const headers = {};
1916
- const credential = process.env.FELTDB_MANAGED_CONTROL_API_KEY || process.env.VITE_FELTDB_API_KEY;
2107
+ const credential = process.env.FELTDB_MANAGED_CONTROL_API_KEY || process.env.FELTDB_TOKEN;
1917
2108
  if (credential)
1918
2109
  headers.authorization = `Bearer ${credential}`;
1919
2110
  const discovered = await fetch(endpoint, { headers });
@@ -2245,7 +2436,9 @@ Commands:
2245
2436
  diff [file] Diff FlowSpec against the last deployed model
2246
2437
  deploy [file] Validate, version, and deploy FlowSpec
2247
2438
  publish [file] Build and publish/update a managed application
2439
+ publish --contract <f> Publish and promote a JSON state contract (no feltdb.flow)
2248
2440
  init-managed Set up managed FeltDB for an existing project
2441
+ managed keys Create, list, or revoke a managed application's keys
2249
2442
  ai Open the canonical interactive local-AI workflow
2250
2443
  ai --dry-run Open an ephemeral preview-only AI session
2251
2444
  ai model show Show the selected local or user-provided model
@@ -2302,6 +2495,16 @@ Managed FeltDB Setup (Existing Projects):
2302
2495
  Prompts for email and password, provisions resources,
2303
2496
  and optionally publishes the initial revision
2304
2497
  feltdb init-managed <email> <password> Non-interactive setup with provided credentials
2498
+ feltdb init-managed --contract feltdb.contract.json [--runtime-scopes minimal] [--name <app>] [--yes]
2499
+ A project whose state contract is a JSON file
2500
+ (e.g. generated by FeltKit): provision, mint a control
2501
+ key and a least-privilege runtime key, publish, verify
2502
+
2503
+ Managed Keys (not the local keys above):
2504
+ feltdb managed keys create --name <id> [--scopes minimal|default|control|<list>]
2505
+ [--env-var FELTDB_TOKEN] [--save-to .env.local | --stdout]
2506
+ feltdb managed keys list
2507
+ feltdb managed keys revoke <id>
2305
2508
 
2306
2509
  Development:
2307
2510
  dev Start development server
@@ -2313,6 +2516,7 @@ Development:
2313
2516
 
2314
2517
  Publish:
2315
2518
  feltdb publish --dry-run Validate and preview without activation
2519
+ feltdb publish --contract feltdb.contract.json --yes Publish a JSON state contract
2316
2520
  feltdb publish --yes Publish to the configured environment
2317
2521
  feltdb publish --status Compare local and active cloud versions
2318
2522
  feltdb publish --environment staging Override the configured environment
@@ -19,25 +19,34 @@ function loadEnv(file) {
19
19
  }
20
20
  return values;
21
21
  }
22
- export function discoverPublishConfiguration(cwd = process.cwd(), environmentOverride) {
22
+ /**
23
+ * Where to publish, from the project's managed setup (`.env.local`, `.feltdb/managed.json`,
24
+ * written by `feltdb init-managed`) or the process environment (CI). A `feltdb.flow` project
25
+ * needs `feltdb.config.json`; a contract (`contract`) does not, and its tenant is the
26
+ * application's own, read from the draft.
27
+ */
28
+ export function discoverPublishConfiguration(cwd = process.cwd(), environmentOverride, options = {}) {
23
29
  const configFile = path.join(cwd, 'feltdb.config.json');
24
- if (!fs.existsSync(configFile))
30
+ if (!options.contract && !fs.existsSync(configFile))
25
31
  throw new Error('feltdb.config.json is required for publish');
26
- const project = JSON.parse(fs.readFileSync(configFile, 'utf8'));
32
+ const project = fs.existsSync(configFile) ? JSON.parse(fs.readFileSync(configFile, 'utf8')) : {};
27
33
  const file = loadEnv(path.join(cwd, '.env.local'));
28
34
  const managedFile = path.join(cwd, '.feltdb', 'managed.json');
29
35
  const managed = fs.existsSync(managedFile) ? JSON.parse(fs.readFileSync(managedFile, 'utf8')) : {};
30
36
  const value = (name) => process.env[name] || file[name];
31
37
  const configuration = {
32
- url: value('VITE_FELTDB_MANAGED_URL') || managed.url, token: value('FELTDB_MANAGED_CONTROL_API_KEY'),
33
- tenantId: managed.tenantId || value('VITE_FELTDB_MANAGED_TENANT_ID'), applicationId: value('VITE_FELTDB_MANAGED_APPLICATION_ID') || managed.applicationId,
34
- namespace: managed.namespace || value('VITE_FELTDB_MANAGED_NAMESPACE') || project.namespace,
35
- environment: environmentOverride || managed.environment || value('VITE_FELTDB_MANAGED_ENVIRONMENT') || 'production',
38
+ url: value('VITE_FELTDB_MANAGED_URL') || managed.url || value('FELTDB_URL'), token: value('FELTDB_MANAGED_CONTROL_API_KEY'),
39
+ tenantId: managed.tenantId || value('VITE_FELTDB_MANAGED_TENANT_ID') || '',
40
+ applicationId: value('VITE_FELTDB_MANAGED_APPLICATION_ID') || managed.applicationId || value('FELTDB_APPLICATION_ID'),
41
+ namespace: managed.namespace || value('VITE_FELTDB_MANAGED_NAMESPACE') || project.namespace || value('FELTDB_NAMESPACE') || (options.contract ? path.basename(cwd) : undefined),
42
+ environment: environmentOverride || managed.environment || value('VITE_FELTDB_MANAGED_ENVIRONMENT') || value('FELTDB_ENVIRONMENT') || 'production',
36
43
  };
37
- const missing = Object.entries(configuration).filter(([, value]) => !value).map(([name]) => name);
38
- if (missing.length)
39
- throw new Error(`Managed publish configuration is incomplete in .env.local: ${missing.join(', ')}`);
40
- return configuration;
44
+ const missing = Object.entries(configuration).filter(([name, value]) => !value && !(options.contract && name === 'tenantId')).map(([name]) => name);
45
+ if (missing.length) {
46
+ throw new Error(`Managed publish configuration is incomplete: ${missing.join(', ')}. Run \`feltdb init-managed\` in this project, or set FELTDB_URL, FELTDB_APPLICATION_ID and FELTDB_MANAGED_CONTROL_API_KEY.`);
47
+ }
48
+ const runtimeToken = value('FELTDB_TOKEN');
49
+ return { ...configuration, ...(runtimeToken ? { runtimeToken } : {}) };
41
50
  }
42
51
  function filesBelow(root, directory) {
43
52
  const target = path.join(root, directory);
@@ -88,6 +97,86 @@ export function buildPublishBundle(cwd, configuration) {
88
97
  manifest.metadata.labels['feltdb.source_revision'] = sourceRevision;
89
98
  return { manifest, artifacts, artifactHash, sourceRevision };
90
99
  }
100
+ const CONTRACT_KEYS = ['collections', 'indexes', 'references', 'policies'];
101
+ export function readApplicationContract(file) {
102
+ if (!fs.existsSync(file))
103
+ throw new Error(`Contract file not found: ${file}`);
104
+ let contract;
105
+ try {
106
+ contract = JSON.parse(fs.readFileSync(file, 'utf8'));
107
+ }
108
+ catch (error) {
109
+ throw new Error(`Contract file ${file} is not JSON: ${error.message}`);
110
+ }
111
+ if (!contract || typeof contract !== 'object' || Array.isArray(contract))
112
+ throw new Error(`Contract file ${file} must hold an object with collections and policies`);
113
+ const unknown = Object.keys(contract).filter(key => !CONTRACT_KEYS.includes(key));
114
+ if (unknown.length)
115
+ throw new Error(`Contract file ${file} has keys a contract cannot carry: ${unknown.join(', ')} (allowed: ${CONTRACT_KEYS.join(', ')})`);
116
+ if (!Array.isArray(contract.collections) || !contract.collections.length)
117
+ throw new Error(`Contract file ${file} declares no collections`);
118
+ for (const collection of contract.collections) {
119
+ if (!collection || typeof collection.name !== 'string' || !Array.isArray(collection.fields))
120
+ throw new Error(`Contract file ${file}: every collection needs a name and a fields array`);
121
+ }
122
+ if (!Array.isArray(contract.policies))
123
+ throw new Error(`Contract file ${file} declares no policies; without one per collection the authority refuses every read and write`);
124
+ for (const key of ['indexes', 'references'])
125
+ if (contract[key] !== undefined && !Array.isArray(contract[key]))
126
+ throw new Error(`Contract file ${file}: ${key} must be an array`);
127
+ return contract;
128
+ }
129
+ export function buildContractBundle(cwd, configuration, contractFile) {
130
+ const absolute = path.resolve(cwd, contractFile);
131
+ const contract = readApplicationContract(absolute);
132
+ const relative = path.relative(cwd, absolute).split(path.sep).join('/');
133
+ if (relative.startsWith('../'))
134
+ throw new Error(`The contract file must be inside the project: ${contractFile}`);
135
+ const content = Buffer.from(fs.readFileSync(absolute));
136
+ const artifact = { path: relative, hash: `sha256:${sha256(content)}`, bytes: content.byteLength, mediaType: 'application/json', content: content.toString('base64') };
137
+ const artifactHash = `sha256:${sha256(`${artifact.path}\0${artifact.hash}`)}`;
138
+ // The manifest defaults (environments, runtime bounds, UI) are the ones every published
139
+ // application carries; only the state contract comes from the file.
140
+ const manifest = flowSpecToManifest({ version: 1, app: configuration.namespace, collections: [], capabilities: [], agents: [], workflows: [], triggers: [], policies: [], schedules: [], modules: [] }, configuration.tenantId, configuration.applicationId);
141
+ manifest.collections = contract.collections;
142
+ manifest.indexes = contract.indexes ?? [];
143
+ manifest.references = contract.references ?? [];
144
+ manifest.policies = contract.policies;
145
+ const contractHash = (value) => `sha256:${sha256(Buffer.from(canonicalApplicationBytes(value)))}`;
146
+ manifest.metadata.labels = {
147
+ 'feltdb.model_hash': contractHash({ collections: manifest.collections, indexes: manifest.indexes, references: manifest.references }),
148
+ 'feltdb.authorization_hash': contractHash(manifest.policies),
149
+ 'feltdb.contract_hash': contractHash({ contract }),
150
+ 'feltdb.contract_file': relative,
151
+ 'feltdb.artifact_hash': artifactHash,
152
+ 'feltdb.namespace': configuration.namespace,
153
+ };
154
+ manifest.artifacts = [{ name: relative, uri: `artifact://${artifact.hash}`, media_type: artifact.mediaType, content: artifact.content }];
155
+ const git = spawnSync('git', ['rev-parse', 'HEAD'], { cwd, encoding: 'utf8', stdio: ['ignore', 'pipe', 'ignore'] });
156
+ const sourceRevision = git.status === 0 ? git.stdout.trim() : undefined;
157
+ if (sourceRevision)
158
+ manifest.metadata.labels['feltdb.source_revision'] = sourceRevision;
159
+ return { manifest, artifacts: [artifact], artifactHash, sourceRevision };
160
+ }
161
+ /**
162
+ * The runtime (data) key resolves the revision just promoted: URL, key, application and
163
+ * environment agree. Without the key here (CI holding only the control key) it is not checked.
164
+ */
165
+ async function verifyRuntimeKey(configuration, revisionId, log) {
166
+ if (!configuration.runtimeToken) {
167
+ log('• Runtime key (FELTDB_TOKEN) not available here; the application\'s own check is its health endpoint.');
168
+ return false;
169
+ }
170
+ const url = `${configuration.url.replace(/\/$/, '')}/v1/application?application_id=${encodeURIComponent(configuration.applicationId)}&environment=${encodeURIComponent(configuration.environment)}`;
171
+ const response = await fetch(url, { headers: { authorization: `Bearer ${configuration.runtimeToken}`, accept: 'application/json' } });
172
+ const body = await response.json().catch(() => ({}));
173
+ if (!response.ok)
174
+ throw new Error(`The runtime key (FELTDB_TOKEN) is refused for application ${configuration.applicationId} in ${configuration.environment}: HTTP ${response.status} ${String(body.code ?? '')} ${String(body.message ?? '')}`.trim());
175
+ if (body.revision_id !== revisionId)
176
+ throw new Error(`The runtime key resolves revision ${String(body.revision_id)}, not the promoted ${revisionId}`);
177
+ log('✓ The runtime key (FELTDB_TOKEN) resolves the promoted revision');
178
+ return true;
179
+ }
91
180
  function sameDefinition(left, right) {
92
181
  return left.metadata.labels?.['feltdb.artifact_hash'] === right.metadata.labels?.['feltdb.artifact_hash'];
93
182
  }
@@ -105,8 +194,8 @@ function describeChanges(current, bundle) {
105
194
  export async function publishApplication(options = {}) {
106
195
  const cwd = options.cwd || process.cwd();
107
196
  const log = options.log || console.log;
108
- const configuration = discoverPublishConfiguration(cwd, options.environment);
109
- const bundle = buildPublishBundle(cwd, configuration);
197
+ const configuration = discoverPublishConfiguration(cwd, options.environment, { contract: Boolean(options.contract) });
198
+ const bundle = options.contract ? buildContractBundle(cwd, configuration, options.contract) : buildPublishBundle(cwd, configuration);
110
199
  const client = new ApplicationManifestClient(configuration.url.replace(/\/$/, ''), configuration.token);
111
200
  const cloud = await client.revisions(configuration.applicationId);
112
201
  const current = activeRevision(cloud.revisions, cloud.environment_pointers, configuration.environment);
@@ -128,7 +217,8 @@ export async function publishApplication(options = {}) {
128
217
  }
129
218
  log('Changes:');
130
219
  changes.forEach(value => log(` ${value}`));
131
- if (!options.noBuild) {
220
+ // A contract is the artifact itself; the application is built and deployed on its own.
221
+ if (!options.noBuild && !options.contract) {
132
222
  const packageFile = path.join(cwd, 'package.json');
133
223
  const packageManifest = JSON.parse(fs.readFileSync(packageFile, 'utf8'));
134
224
  if (!packageManifest.scripts?.build)
@@ -140,6 +230,15 @@ export async function publishApplication(options = {}) {
140
230
  throw new Error(`Application build failed with exit code ${result.status}`);
141
231
  }
142
232
  const draft = await client.createDraft(configuration.applicationId, current?.revision_id);
233
+ if (options.contract) {
234
+ // The authority requires state_schema_version to increase whenever the state schema
235
+ // changes; an unchanged schema keeps the active one.
236
+ const model = (manifest) => canonicalApplicationBytes({ collections: manifest.collections, indexes: manifest.indexes ?? [], references: manifest.references ?? [] }).toString();
237
+ const previous = current?.manifest.state_schema_version ?? 0;
238
+ bundle.manifest.state_schema_version = current && model(current.manifest) === model(bundle.manifest) ? previous : previous + 1;
239
+ bundle.manifest.tenant_id = draft.tenant_id;
240
+ bundle.manifest.metadata.name = draft.manifest?.metadata?.name || bundle.manifest.metadata.name;
241
+ }
143
242
  const updated = await client.updateDraft(configuration.applicationId, draft, bundle.manifest);
144
243
  const validation = await client.validateDraft(configuration.applicationId, updated.draft_id);
145
244
  if (!validation.valid)
@@ -158,8 +257,9 @@ export async function publishApplication(options = {}) {
158
257
  }
159
258
  const promoted = await client.promoteEnvironment(configuration.applicationId, configuration.environment, revision.revision_id, current?.revision_id, options.message || 'Published from feltdb CLI', Boolean(options.approveDestructive));
160
259
  fs.mkdirSync(path.join(cwd, '.feltdb'), { recursive: true });
161
- fs.writeFileSync(path.join(cwd, '.feltdb', 'last-published.json'), `${JSON.stringify({ applicationId: configuration.applicationId, tenantId: configuration.tenantId, namespace: configuration.namespace, environment: configuration.environment, version: revision.revision_number, revisionId: revision.revision_id, contractHash: bundle.manifest.metadata.labels?.['feltdb.contract_hash'], artifactHash: bundle.artifactHash, sourceRevision: bundle.sourceRevision, publishedAt: new Date().toISOString() }, null, 2)}\n`, { mode: 0o600 });
260
+ fs.writeFileSync(path.join(cwd, '.feltdb', 'last-published.json'), `${JSON.stringify({ applicationId: configuration.applicationId, tenantId: bundle.manifest.tenant_id || configuration.tenantId, namespace: configuration.namespace, environment: configuration.environment, version: revision.revision_number, revisionId: revision.revision_id, contractHash: bundle.manifest.metadata.labels?.['feltdb.contract_hash'], artifactHash: bundle.artifactHash, sourceRevision: bundle.sourceRevision, publishedAt: new Date().toISOString() }, null, 2)}\n`, { mode: 0o600 });
162
261
  log(`✓ Published immutable version ${revision.revision_number}`);
163
262
  log(`✓ Activated in ${configuration.environment}`);
164
- return { status: 'published', current, bundle, revision, diff, promoted };
263
+ const verified = options.contract ? await verifyRuntimeKey(configuration, revision.revision_id, log) : undefined;
264
+ return { status: 'published', current, bundle, revision, diff, promoted, verified };
165
265
  }
@@ -359,7 +359,9 @@ export declare class Collection<T> {
359
359
  /**
360
360
  * Refresh data from the database and notify subscribers.
361
361
  */
362
- refresh(): Promise<void>;
362
+ refresh(options?: {
363
+ strict?: boolean;
364
+ }): Promise<void>;
363
365
  }
364
366
  /**
365
367
  * Relationship helper for loading related data.
@@ -1 +1 @@
1
- {"version":3,"file":"collection.d.ts","sourceRoot":"","sources":["../src/collection.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAIL,KAAK,mBAAmB,EACxB,KAAK,QAAQ,EACd,MAAM,gBAAgB,CAAC;AAMxB,OAAO,KAAK,EAAE,WAAW,EAAc,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAErF,6CAA6C;AAC7C,MAAM,WAAW,aAAa;IAC5B;;;;;OAKG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAKD,MAAM,MAAM,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC;AAChD,MAAM,MAAM,UAAU,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC;AAEjD,MAAM,WAAW,qBAAqB;IACpC,OAAO,CAAC,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,KAAK,GAAG,MAAM,CAAA;KAAE,CAAC,CAAC;IAC9D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAqCD;;;;;;GAMG;AACH,MAAM,WAAW,cAAc;IAC7B,gGAAgG;IAChG,UAAU,EAAE,UAAU,GAAG,SAAS,CAAC;IACnC,4EAA4E;IAC5E,eAAe,EAAE,OAAO,CAAC;IACzB,oEAAoE;IACpE,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,mCAAmC;IACnC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;GAGG;AACH,MAAM,WAAW,qBAAqB,CAAC,CAAC;IACtC,mCAAmC;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,iEAAiE;IACjE,IAAI,CAAC,EAAE,CAAC,GAAG;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IACjC,+DAA+D;IAC/D,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,wDAAwD;IACxD,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;;;GAKG;AACH,qBAAa,UAAU,CAAC,CAAC;IACvB,OAAO,CAAC,EAAE,CAAO;IACjB,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,SAAS,CAA6B;IAC9C,OAAO,CAAC,KAAK,CAAW;IACxB,OAAO,CAAC,WAAW,CAAiC;IACpD,OAAO,CAAC,MAAM,CAA8B;IAC5C,OAAO,CAAC,QAAQ,CAAuB;IACvC,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,oBAAoB,CAA8B;IAC1D,OAAO,CAAC,gBAAgB,CAA6B;IACrD,OAAO,CAAC,kBAAkB,CAA6B;IACvD,OAAO,CAAC,YAAY,CAAoC;IACxD,iGAAiG;IACjG,OAAO,CAAC,eAAe,CAAkC;IACzD,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,aAAa,CAAS;IAC9B,mFAAmF;IACnF,OAAO,CAAC,eAAe,CAAK;IAC5B,gFAAgF;IAChF,OAAO,CAAC,iBAAiB,CAAM;IAC/B,OAAO,CAAC,QAAQ,CAAoC;IACpD,oEAAoE;IACpE,OAAO,CAAC,WAAW,CAA+B;IAClD,kFAAkF;IAClF,OAAO,CAAC,eAAe,CAAuB;IAC9C;;;;;;;OAOG;IACH,OAAO,CAAC,cAAc,CAAyB;IAC/C,yEAAyE;IACzE,OAAO,CAAC,aAAa,CAA+B;gBAExC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,WAAW,UAAO;IAoBxG;;OAEG;YACW,oBAAoB;IAelC;;;OAGG;IACG,GAAG,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC;IAKzB,qEAAqE;IAC/D,IAAI,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC;IAI1B;;;;;;;;;;;;;OAaG;IACG,IAAI,CAAC,KAAK,GAAE,OAAO,CAAC,CAAC,CAAM,EAAE,OAAO,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAuFjF,6EAA6E;IACvE,KAAK,CAAC,KAAK,GAAE,OAAO,CAAC,CAAC,CAAM,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAIjD;;;;;OAKG;IACH,aAAa,IAAI,mBAAmB,GAAG,IAAI;IAI3C,wEAAwE;IACxE,OAAO,CAAC,QAAQ;IAWhB;;;;;;OAMG;IACH,OAAO,CAAC,eAAe;IAiBvB;;;;;;OAMG;IACH,OAAO,CAAC,wBAAwB;IA0BhC;;;;;OAKG;IACH,WAAW,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI;IAatC;;OAEG;IACH,WAAW,IAAI,WAAW,EAAE;IAI5B;;;OAGG;IACG,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IAgBrC;;OAEG;IACG,eAAe,IAAI,OAAO,CAAC,OAAO,CAAC;IAazC;;OAEG;IACG,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAYjD;;;OAGG;IACH,KAAK,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC;IAO7C;;;;;;;;;;;;;;;OAeG;IACG,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,MAAM,CAAC;IAmDlG,qEAAqE;IAC/D,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAIlE;;;;;;;;;;;OAWG;IACG,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAsBrE,8EAA8E;YAChE,cAAc;IAc5B,wGAAwG;IACxG,OAAO,CAAC,gBAAgB;IAMxB,4EAA4E;YAC9D,OAAO;IAYrB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAgCG;IACG,eAAe,CACnB,EAAE,EAAE,MAAM,GAAG,MAAM,EACnB,eAAe,EAAE,MAAM,EACvB,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,EACnB,aAAa,CAAC,EAAE,MAAM,EACtB,eAAe,CAAC,EAAE,MAAM,EACxB,gBAAgB,CAAC,EAAE,OAAO,EAC1B,YAAY,CAAC,EAAE,CAAC,GACf,OAAO,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;IA6EpC;;OAEG;IACG,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA8BhD;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC;IAK9B;;OAEG;IACG,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAKnD;;;;;;OAMG;IACH,OAAO,CAAC,SAAS;IAKjB;;;;;;;;OAQG;YACW,6BAA6B;IAkC3C;;;;;OAKG;YACW,iCAAiC;IAyE/C;;;;;;;;;;;;;OAaG;IACG,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC;QAAE,QAAQ,EAAE,OAAO,CAAC;QAAC,KAAK,EAAE,CAAC,CAAA;KAAE,CAAC;IAsClG;;;OAGG;IACH,SAAS,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,IAAI;IA6CxE,mEAAmE;IACnE,KAAK,IAAI,IAAI;IASb;;;;;;;;;;;OAWG;IACH,SAAS,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAIzC;;;;;;OAMG;IACH,kBAAkB,IAAI,cAAc,GAAG,IAAI;IAI3C;;;;;;;;;OASG;YACW,eAAe;IAQ7B;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CA2E/B;AAED;;GAEG;AACH,qBAAa,YAAY,CAAC,MAAM,EAAE,KAAK;IACrC,OAAO,CAAC,QAAQ,CAAO;IACvB,OAAO,CAAC,OAAO,CAAO;IACtB,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,UAAU,CAAoC;gBAGpD,QAAQ,EAAE,IAAI,EACd,OAAO,EAAE,IAAI,EACb,eAAe,EAAE,MAAM,EACvB,UAAU,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,MAAM,GAAG,MAAM;IAQ/C;;OAEG;IACG,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;CAoBxD"}
1
+ {"version":3,"file":"collection.d.ts","sourceRoot":"","sources":["../src/collection.ts"],"names":[],"mappings":"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"}