@abloatai/transaction 0.37.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 (723) hide show
  1. package/CONVENTIONS.md +83 -0
  2. package/README.md +48 -0
  3. package/dist/ablo.d.ts +90 -0
  4. package/dist/ablo.d.ts.map +1 -0
  5. package/dist/ablo.js +34 -0
  6. package/dist/ablo.js.map +1 -0
  7. package/dist/ai-sdk/coordinatedTool.d.ts +123 -0
  8. package/dist/ai-sdk/coordinatedTool.d.ts.map +1 -0
  9. package/dist/ai-sdk/coordinatedTool.js +135 -0
  10. package/dist/ai-sdk/coordinatedTool.js.map +1 -0
  11. package/dist/ai-sdk/index.d.ts +2 -0
  12. package/dist/ai-sdk/index.d.ts.map +1 -0
  13. package/dist/ai-sdk/index.js +2 -0
  14. package/dist/ai-sdk/index.js.map +1 -0
  15. package/dist/auth/apiKey.d.ts +154 -0
  16. package/dist/auth/apiKey.d.ts.map +1 -0
  17. package/dist/auth/apiKey.js +408 -0
  18. package/dist/auth/apiKey.js.map +1 -0
  19. package/dist/auth/bootstrapScope.d.ts +16 -0
  20. package/dist/auth/bootstrapScope.d.ts.map +1 -0
  21. package/dist/auth/bootstrapScope.js +2 -0
  22. package/dist/auth/bootstrapScope.js.map +1 -0
  23. package/dist/auth/browserCredentialSafety.d.ts +7 -0
  24. package/dist/auth/browserCredentialSafety.d.ts.map +1 -0
  25. package/dist/auth/browserCredentialSafety.js +29 -0
  26. package/dist/auth/browserCredentialSafety.js.map +1 -0
  27. package/dist/auth/capability.d.ts +241 -0
  28. package/dist/auth/capability.d.ts.map +1 -0
  29. package/dist/auth/capability.js +253 -0
  30. package/dist/auth/capability.js.map +1 -0
  31. package/dist/auth/capabilityLifecycle.d.ts +47 -0
  32. package/dist/auth/capabilityLifecycle.d.ts.map +1 -0
  33. package/dist/auth/capabilityLifecycle.js +108 -0
  34. package/dist/auth/capabilityLifecycle.js.map +1 -0
  35. package/dist/auth/credentialEndpoint.d.ts +10 -0
  36. package/dist/auth/credentialEndpoint.d.ts.map +1 -0
  37. package/dist/auth/credentialEndpoint.js +58 -0
  38. package/dist/auth/credentialEndpoint.js.map +1 -0
  39. package/dist/auth/credentialEndpointProtocol.d.ts +24 -0
  40. package/dist/auth/credentialEndpointProtocol.d.ts.map +1 -0
  41. package/dist/auth/credentialEndpointProtocol.js +34 -0
  42. package/dist/auth/credentialEndpointProtocol.js.map +1 -0
  43. package/dist/auth/credentialKind.d.ts +4 -0
  44. package/dist/auth/credentialKind.d.ts.map +1 -0
  45. package/dist/auth/credentialKind.js +15 -0
  46. package/dist/auth/credentialKind.js.map +1 -0
  47. package/dist/auth/credentialPolicy.d.ts +141 -0
  48. package/dist/auth/credentialPolicy.d.ts.map +1 -0
  49. package/dist/auth/credentialPolicy.js +113 -0
  50. package/dist/auth/credentialPolicy.js.map +1 -0
  51. package/dist/auth/credentialResult.d.ts +7 -0
  52. package/dist/auth/credentialResult.d.ts.map +1 -0
  53. package/dist/auth/credentialResult.js +9 -0
  54. package/dist/auth/credentialResult.js.map +1 -0
  55. package/dist/auth/credentialSource.d.ts +31 -0
  56. package/dist/auth/credentialSource.d.ts.map +1 -0
  57. package/dist/auth/credentialSource.js +56 -0
  58. package/dist/auth/credentialSource.js.map +1 -0
  59. package/dist/auth/hostedEndpoints.d.ts +22 -0
  60. package/dist/auth/hostedEndpoints.d.ts.map +1 -0
  61. package/dist/auth/hostedEndpoints.js +22 -0
  62. package/dist/auth/hostedEndpoints.js.map +1 -0
  63. package/dist/auth/identity.d.ts +62 -0
  64. package/dist/auth/identity.d.ts.map +1 -0
  65. package/dist/auth/identity.js +224 -0
  66. package/dist/auth/identity.js.map +1 -0
  67. package/dist/auth/index.d.ts +189 -0
  68. package/dist/auth/index.d.ts.map +1 -0
  69. package/dist/auth/index.js +312 -0
  70. package/dist/auth/index.js.map +1 -0
  71. package/dist/auth/schemas.d.ts +41 -0
  72. package/dist/auth/schemas.d.ts.map +1 -0
  73. package/dist/auth/schemas.js +69 -0
  74. package/dist/auth/schemas.js.map +1 -0
  75. package/dist/auth/sessionMint.d.ts +29 -0
  76. package/dist/auth/sessionMint.d.ts.map +1 -0
  77. package/dist/auth/sessionMint.js +92 -0
  78. package/dist/auth/sessionMint.js.map +1 -0
  79. package/dist/auth/token.d.ts +4 -0
  80. package/dist/auth/token.d.ts.map +1 -0
  81. package/dist/auth/token.js +4 -0
  82. package/dist/auth/token.js.map +1 -0
  83. package/dist/batching/index.d.ts +56 -0
  84. package/dist/batching/index.d.ts.map +1 -0
  85. package/dist/batching/index.js +148 -0
  86. package/dist/batching/index.js.map +1 -0
  87. package/dist/coordination/awaitClaimGrant.d.ts +57 -0
  88. package/dist/coordination/awaitClaimGrant.d.ts.map +1 -0
  89. package/dist/coordination/awaitClaimGrant.js +138 -0
  90. package/dist/coordination/awaitClaimGrant.js.map +1 -0
  91. package/dist/coordination/claimHeartbeatLoop.d.ts +85 -0
  92. package/dist/coordination/claimHeartbeatLoop.d.ts.map +1 -0
  93. package/dist/coordination/claimHeartbeatLoop.js +109 -0
  94. package/dist/coordination/claimHeartbeatLoop.js.map +1 -0
  95. package/dist/coordination/claimMeta.d.ts +50 -0
  96. package/dist/coordination/claimMeta.d.ts.map +1 -0
  97. package/dist/coordination/claimMeta.js +53 -0
  98. package/dist/coordination/claimMeta.js.map +1 -0
  99. package/dist/coordination/events.d.ts +75 -0
  100. package/dist/coordination/events.d.ts.map +1 -0
  101. package/dist/coordination/events.js +8 -0
  102. package/dist/coordination/events.js.map +1 -0
  103. package/dist/coordination/index.d.ts +20 -0
  104. package/dist/coordination/index.d.ts.map +1 -0
  105. package/dist/coordination/index.js +46 -0
  106. package/dist/coordination/index.js.map +1 -0
  107. package/dist/coordination/locator.d.ts +106 -0
  108. package/dist/coordination/locator.d.ts.map +1 -0
  109. package/dist/coordination/locator.js +110 -0
  110. package/dist/coordination/locator.js.map +1 -0
  111. package/dist/coordination/schema.d.ts +1332 -0
  112. package/dist/coordination/schema.d.ts.map +1 -0
  113. package/dist/coordination/schema.js +1137 -0
  114. package/dist/coordination/schema.js.map +1 -0
  115. package/dist/coordination/targetConflict.d.ts +3 -0
  116. package/dist/coordination/targetConflict.d.ts.map +1 -0
  117. package/dist/coordination/targetConflict.js +74 -0
  118. package/dist/coordination/targetConflict.js.map +1 -0
  119. package/dist/coordination/trace.d.ts +79 -0
  120. package/dist/coordination/trace.d.ts.map +1 -0
  121. package/dist/coordination/trace.js +139 -0
  122. package/dist/coordination/trace.js.map +1 -0
  123. package/dist/docs/catalog.d.ts +73 -0
  124. package/dist/docs/catalog.d.ts.map +1 -0
  125. package/dist/docs/catalog.js +231 -0
  126. package/dist/docs/catalog.js.map +1 -0
  127. package/dist/docs/index.d.ts +11 -0
  128. package/dist/docs/index.d.ts.map +1 -0
  129. package/dist/docs/index.js +11 -0
  130. package/dist/docs/index.js.map +1 -0
  131. package/dist/durableWrites.d.ts +63 -0
  132. package/dist/durableWrites.d.ts.map +1 -0
  133. package/dist/durableWrites.js +72 -0
  134. package/dist/durableWrites.js.map +1 -0
  135. package/dist/environment.d.ts +106 -0
  136. package/dist/environment.d.ts.map +1 -0
  137. package/dist/environment.js +109 -0
  138. package/dist/environment.js.map +1 -0
  139. package/dist/errorCodes.d.ts +411 -0
  140. package/dist/errorCodes.d.ts.map +1 -0
  141. package/dist/errorCodes.js +500 -0
  142. package/dist/errorCodes.js.map +1 -0
  143. package/dist/errors.d.ts +429 -0
  144. package/dist/errors.d.ts.map +1 -0
  145. package/dist/errors.js +687 -0
  146. package/dist/errors.js.map +1 -0
  147. package/dist/footprint.d.ts +112 -0
  148. package/dist/footprint.d.ts.map +1 -0
  149. package/dist/footprint.js +0 -0
  150. package/dist/footprint.js.map +1 -0
  151. package/dist/headlessClient.d.ts +10 -0
  152. package/dist/headlessClient.d.ts.map +1 -0
  153. package/dist/headlessClient.js +114 -0
  154. package/dist/headlessClient.js.map +1 -0
  155. package/dist/index.d.ts +21 -0
  156. package/dist/index.d.ts.map +1 -0
  157. package/dist/index.js +21 -0
  158. package/dist/index.js.map +1 -0
  159. package/dist/keys/index.d.ts +88 -0
  160. package/dist/keys/index.d.ts.map +1 -0
  161. package/dist/keys/index.js +208 -0
  162. package/dist/keys/index.js.map +1 -0
  163. package/dist/log/syncDeltaRow.d.ts +159 -0
  164. package/dist/log/syncDeltaRow.d.ts.map +1 -0
  165. package/dist/log/syncDeltaRow.js +96 -0
  166. package/dist/log/syncDeltaRow.js.map +1 -0
  167. package/dist/logger.d.ts +17 -0
  168. package/dist/logger.d.ts.map +1 -0
  169. package/dist/logger.js +8 -0
  170. package/dist/logger.js.map +1 -0
  171. package/dist/observability.d.ts +54 -0
  172. package/dist/observability.d.ts.map +1 -0
  173. package/dist/observability.js +20 -0
  174. package/dist/observability.js.map +1 -0
  175. package/dist/policy/types.d.ts +218 -0
  176. package/dist/policy/types.d.ts.map +1 -0
  177. package/dist/policy/types.js +127 -0
  178. package/dist/policy/types.js.map +1 -0
  179. package/dist/resources/functionalUpdate.d.ts +80 -0
  180. package/dist/resources/functionalUpdate.d.ts.map +1 -0
  181. package/dist/resources/functionalUpdate.js +88 -0
  182. package/dist/resources/functionalUpdate.js.map +1 -0
  183. package/dist/resources/httpResources.d.ts +449 -0
  184. package/dist/resources/httpResources.d.ts.map +1 -0
  185. package/dist/resources/httpResources.js +8 -0
  186. package/dist/resources/httpResources.js.map +1 -0
  187. package/dist/resources/modelOperations.d.ts +380 -0
  188. package/dist/resources/modelOperations.d.ts.map +1 -0
  189. package/dist/resources/modelOperations.js +13 -0
  190. package/dist/resources/modelOperations.js.map +1 -0
  191. package/dist/resources/mutationOptions.d.ts +67 -0
  192. package/dist/resources/mutationOptions.d.ts.map +1 -0
  193. package/dist/resources/mutationOptions.js +10 -0
  194. package/dist/resources/mutationOptions.js.map +1 -0
  195. package/dist/resources/where.d.ts +102 -0
  196. package/dist/resources/where.d.ts.map +1 -0
  197. package/dist/resources/where.js +116 -0
  198. package/dist/resources/where.js.map +1 -0
  199. package/dist/resources/writeOptionsSchema.d.ts +48 -0
  200. package/dist/resources/writeOptionsSchema.d.ts.map +1 -0
  201. package/dist/resources/writeOptionsSchema.js +74 -0
  202. package/dist/resources/writeOptionsSchema.js.map +1 -0
  203. package/dist/schema/coordination.d.ts +113 -0
  204. package/dist/schema/coordination.d.ts.map +1 -0
  205. package/dist/schema/coordination.js +134 -0
  206. package/dist/schema/coordination.js.map +1 -0
  207. package/dist/schema/ddl.d.ts +98 -0
  208. package/dist/schema/ddl.d.ts.map +1 -0
  209. package/dist/schema/ddl.js +492 -0
  210. package/dist/schema/ddl.js.map +1 -0
  211. package/dist/schema/ddlLock.d.ts +36 -0
  212. package/dist/schema/ddlLock.d.ts.map +1 -0
  213. package/dist/schema/ddlLock.js +47 -0
  214. package/dist/schema/ddlLock.js.map +1 -0
  215. package/dist/schema/diff.d.ts +226 -0
  216. package/dist/schema/diff.d.ts.map +1 -0
  217. package/dist/schema/diff.js +290 -0
  218. package/dist/schema/diff.js.map +1 -0
  219. package/dist/schema/field.d.ts +121 -0
  220. package/dist/schema/field.d.ts.map +1 -0
  221. package/dist/schema/field.js +266 -0
  222. package/dist/schema/field.js.map +1 -0
  223. package/dist/schema/fieldRef.d.ts +58 -0
  224. package/dist/schema/fieldRef.d.ts.map +1 -0
  225. package/dist/schema/fieldRef.js +26 -0
  226. package/dist/schema/fieldRef.js.map +1 -0
  227. package/dist/schema/generate.d.ts +20 -0
  228. package/dist/schema/generate.d.ts.map +1 -0
  229. package/dist/schema/generate.js +87 -0
  230. package/dist/schema/generate.js.map +1 -0
  231. package/dist/schema/index.d.ts +43 -0
  232. package/dist/schema/index.d.ts.map +1 -0
  233. package/dist/schema/index.js +81 -0
  234. package/dist/schema/index.js.map +1 -0
  235. package/dist/schema/loadStrategy.d.ts +46 -0
  236. package/dist/schema/loadStrategy.d.ts.map +1 -0
  237. package/dist/schema/loadStrategy.js +47 -0
  238. package/dist/schema/loadStrategy.js.map +1 -0
  239. package/dist/schema/model.d.ts +380 -0
  240. package/dist/schema/model.d.ts.map +1 -0
  241. package/dist/schema/model.js +124 -0
  242. package/dist/schema/model.js.map +1 -0
  243. package/dist/schema/openapi.d.ts +59 -0
  244. package/dist/schema/openapi.d.ts.map +1 -0
  245. package/dist/schema/openapi.js +508 -0
  246. package/dist/schema/openapi.js.map +1 -0
  247. package/dist/schema/queries.d.ts +202 -0
  248. package/dist/schema/queries.d.ts.map +1 -0
  249. package/dist/schema/queries.js +144 -0
  250. package/dist/schema/queries.js.map +1 -0
  251. package/dist/schema/relation.d.ts +205 -0
  252. package/dist/schema/relation.d.ts.map +1 -0
  253. package/dist/schema/relation.js +105 -0
  254. package/dist/schema/relation.js.map +1 -0
  255. package/dist/schema/residency.d.ts +30 -0
  256. package/dist/schema/residency.d.ts.map +1 -0
  257. package/dist/schema/residency.js +26 -0
  258. package/dist/schema/residency.js.map +1 -0
  259. package/dist/schema/roles.d.ts +250 -0
  260. package/dist/schema/roles.d.ts.map +1 -0
  261. package/dist/schema/roles.js +231 -0
  262. package/dist/schema/roles.js.map +1 -0
  263. package/dist/schema/schema.d.ts +352 -0
  264. package/dist/schema/schema.d.ts.map +1 -0
  265. package/dist/schema/schema.js +326 -0
  266. package/dist/schema/schema.js.map +1 -0
  267. package/dist/schema/select.d.ts +41 -0
  268. package/dist/schema/select.d.ts.map +1 -0
  269. package/dist/schema/select.js +91 -0
  270. package/dist/schema/select.js.map +1 -0
  271. package/dist/schema/serialize.d.ts +116 -0
  272. package/dist/schema/serialize.d.ts.map +1 -0
  273. package/dist/schema/serialize.js +278 -0
  274. package/dist/schema/serialize.js.map +1 -0
  275. package/dist/schema/sugar.d.ts +110 -0
  276. package/dist/schema/sugar.d.ts.map +1 -0
  277. package/dist/schema/sugar.js +84 -0
  278. package/dist/schema/sugar.js.map +1 -0
  279. package/dist/schema/tenancy.d.ts +140 -0
  280. package/dist/schema/tenancy.d.ts.map +1 -0
  281. package/dist/schema/tenancy.js +191 -0
  282. package/dist/schema/tenancy.js.map +1 -0
  283. package/dist/server/adapter.d.ts +174 -0
  284. package/dist/server/adapter.d.ts.map +1 -0
  285. package/dist/server/adapter.js +19 -0
  286. package/dist/server/adapter.js.map +1 -0
  287. package/dist/server/commit.d.ts +108 -0
  288. package/dist/server/commit.d.ts.map +1 -0
  289. package/dist/server/commit.js +2 -0
  290. package/dist/server/commit.js.map +1 -0
  291. package/dist/server/index.d.ts +15 -0
  292. package/dist/server/index.d.ts.map +1 -0
  293. package/dist/server/index.js +3 -0
  294. package/dist/server/index.js.map +1 -0
  295. package/dist/server/readConfig.d.ts +81 -0
  296. package/dist/server/readConfig.d.ts.map +1 -0
  297. package/dist/server/readConfig.js +9 -0
  298. package/dist/server/readConfig.js.map +1 -0
  299. package/dist/server/storageMode.d.ts +24 -0
  300. package/dist/server/storageMode.d.ts.map +1 -0
  301. package/dist/server/storageMode.js +18 -0
  302. package/dist/server/storageMode.js.map +1 -0
  303. package/dist/source/adapter.d.ts +84 -0
  304. package/dist/source/adapter.d.ts.map +1 -0
  305. package/dist/source/adapter.js +25 -0
  306. package/dist/source/adapter.js.map +1 -0
  307. package/dist/source/adapters/drizzle.d.ts +49 -0
  308. package/dist/source/adapters/drizzle.d.ts.map +1 -0
  309. package/dist/source/adapters/drizzle.js +220 -0
  310. package/dist/source/adapters/drizzle.js.map +1 -0
  311. package/dist/source/adapters/kysely.d.ts +43 -0
  312. package/dist/source/adapters/kysely.d.ts.map +1 -0
  313. package/dist/source/adapters/kysely.js +206 -0
  314. package/dist/source/adapters/kysely.js.map +1 -0
  315. package/dist/source/adapters/kyselyMutationCore.d.ts +77 -0
  316. package/dist/source/adapters/kyselyMutationCore.d.ts.map +1 -0
  317. package/dist/source/adapters/kyselyMutationCore.js +126 -0
  318. package/dist/source/adapters/kyselyMutationCore.js.map +1 -0
  319. package/dist/source/adapters/memory.d.ts +14 -0
  320. package/dist/source/adapters/memory.d.ts.map +1 -0
  321. package/dist/source/adapters/memory.js +131 -0
  322. package/dist/source/adapters/memory.js.map +1 -0
  323. package/dist/source/adapters/prisma.d.ts +64 -0
  324. package/dist/source/adapters/prisma.d.ts.map +1 -0
  325. package/dist/source/adapters/prisma.js +203 -0
  326. package/dist/source/adapters/prisma.js.map +1 -0
  327. package/dist/source/conformance.d.ts +38 -0
  328. package/dist/source/conformance.d.ts.map +1 -0
  329. package/dist/source/conformance.js +216 -0
  330. package/dist/source/conformance.js.map +1 -0
  331. package/dist/source/connector.d.ts +96 -0
  332. package/dist/source/connector.d.ts.map +1 -0
  333. package/dist/source/connector.js +267 -0
  334. package/dist/source/connector.js.map +1 -0
  335. package/dist/source/connectorProtocol.d.ts +155 -0
  336. package/dist/source/connectorProtocol.d.ts.map +1 -0
  337. package/dist/source/connectorProtocol.js +164 -0
  338. package/dist/source/connectorProtocol.js.map +1 -0
  339. package/dist/source/contract.d.ts +196 -0
  340. package/dist/source/contract.d.ts.map +1 -0
  341. package/dist/source/contract.js +165 -0
  342. package/dist/source/contract.js.map +1 -0
  343. package/dist/source/drizzle.d.ts +2 -0
  344. package/dist/source/drizzle.d.ts.map +1 -0
  345. package/dist/source/drizzle.js +2 -0
  346. package/dist/source/drizzle.js.map +1 -0
  347. package/dist/source/factory.d.ts +93 -0
  348. package/dist/source/factory.d.ts.map +1 -0
  349. package/dist/source/factory.js +287 -0
  350. package/dist/source/factory.js.map +1 -0
  351. package/dist/source/idempotency.d.ts +62 -0
  352. package/dist/source/idempotency.d.ts.map +1 -0
  353. package/dist/source/idempotency.js +145 -0
  354. package/dist/source/idempotency.js.map +1 -0
  355. package/dist/source/index.d.ts +24 -0
  356. package/dist/source/index.d.ts.map +1 -0
  357. package/dist/source/index.js +29 -0
  358. package/dist/source/index.js.map +1 -0
  359. package/dist/source/kysely.d.ts +3 -0
  360. package/dist/source/kysely.d.ts.map +1 -0
  361. package/dist/source/kysely.js +3 -0
  362. package/dist/source/kysely.js.map +1 -0
  363. package/dist/source/migrations.d.ts +22 -0
  364. package/dist/source/migrations.d.ts.map +1 -0
  365. package/dist/source/migrations.js +104 -0
  366. package/dist/source/migrations.js.map +1 -0
  367. package/dist/source/next.d.ts +33 -0
  368. package/dist/source/next.d.ts.map +1 -0
  369. package/dist/source/next.js +26 -0
  370. package/dist/source/next.js.map +1 -0
  371. package/dist/source/pushQueue.d.ts +135 -0
  372. package/dist/source/pushQueue.d.ts.map +1 -0
  373. package/dist/source/pushQueue.js +257 -0
  374. package/dist/source/pushQueue.js.map +1 -0
  375. package/dist/source/signing.d.ts +93 -0
  376. package/dist/source/signing.d.ts.map +1 -0
  377. package/dist/source/signing.js +163 -0
  378. package/dist/source/signing.js.map +1 -0
  379. package/dist/source/types.d.ts +402 -0
  380. package/dist/source/types.d.ts.map +1 -0
  381. package/dist/source/types.js +60 -0
  382. package/dist/source/types.js.map +1 -0
  383. package/dist/syncLog/contract.d.ts +21 -0
  384. package/dist/syncLog/contract.d.ts.map +1 -0
  385. package/dist/syncLog/contract.js +20 -0
  386. package/dist/syncLog/contract.js.map +1 -0
  387. package/dist/syncLog/index.d.ts +2 -0
  388. package/dist/syncLog/index.d.ts.map +1 -0
  389. package/dist/syncLog/index.js +2 -0
  390. package/dist/syncLog/index.js.map +1 -0
  391. package/dist/testing/fixtures/httpResponses.d.ts +74 -0
  392. package/dist/testing/fixtures/httpResponses.d.ts.map +1 -0
  393. package/dist/testing/fixtures/httpResponses.js +102 -0
  394. package/dist/testing/fixtures/httpResponses.js.map +1 -0
  395. package/dist/transactionLayer.d.ts +110 -0
  396. package/dist/transactionLayer.d.ts.map +1 -0
  397. package/dist/transactionLayer.js +25 -0
  398. package/dist/transactionLayer.js.map +1 -0
  399. package/dist/transactions/settlement/commitEnvelope.d.ts +144 -0
  400. package/dist/transactions/settlement/commitEnvelope.d.ts.map +1 -0
  401. package/dist/transactions/settlement/commitEnvelope.js +162 -0
  402. package/dist/transactions/settlement/commitEnvelope.js.map +1 -0
  403. package/dist/transactions/settlement/httpCommitEnvelope.d.ts +54 -0
  404. package/dist/transactions/settlement/httpCommitEnvelope.d.ts.map +1 -0
  405. package/dist/transactions/settlement/httpCommitEnvelope.js +208 -0
  406. package/dist/transactions/settlement/httpCommitEnvelope.js.map +1 -0
  407. package/dist/transactions/settlement/idempotencyKey.d.ts +11 -0
  408. package/dist/transactions/settlement/idempotencyKey.d.ts.map +1 -0
  409. package/dist/transactions/settlement/idempotencyKey.js +10 -0
  410. package/dist/transactions/settlement/idempotencyKey.js.map +1 -0
  411. package/dist/transactions/settlement/pendingWrite.d.ts +113 -0
  412. package/dist/transactions/settlement/pendingWrite.d.ts.map +1 -0
  413. package/dist/transactions/settlement/pendingWrite.js +21 -0
  414. package/dist/transactions/settlement/pendingWrite.js.map +1 -0
  415. package/dist/transport/commitFrames.d.ts +91 -0
  416. package/dist/transport/commitFrames.d.ts.map +1 -0
  417. package/dist/transport/commitFrames.js +135 -0
  418. package/dist/transport/commitFrames.js.map +1 -0
  419. package/dist/transport/connectionManager.d.ts +216 -0
  420. package/dist/transport/connectionManager.d.ts.map +1 -0
  421. package/dist/transport/connectionManager.js +674 -0
  422. package/dist/transport/connectionManager.js.map +1 -0
  423. package/dist/transport/credentialLifecycle.d.ts +178 -0
  424. package/dist/transport/credentialLifecycle.d.ts.map +1 -0
  425. package/dist/transport/credentialLifecycle.js +324 -0
  426. package/dist/transport/credentialLifecycle.js.map +1 -0
  427. package/dist/transport/heartbeat.d.ts +66 -0
  428. package/dist/transport/heartbeat.d.ts.map +1 -0
  429. package/dist/transport/heartbeat.js +94 -0
  430. package/dist/transport/heartbeat.js.map +1 -0
  431. package/dist/transport/httpClient.d.ts +143 -0
  432. package/dist/transport/httpClient.d.ts.map +1 -0
  433. package/dist/transport/httpClient.js +150 -0
  434. package/dist/transport/httpClient.js.map +1 -0
  435. package/dist/transport/httpFeed.d.ts +4 -0
  436. package/dist/transport/httpFeed.d.ts.map +1 -0
  437. package/dist/transport/httpFeed.js +94 -0
  438. package/dist/transport/httpFeed.js.map +1 -0
  439. package/dist/transport/httpOptions.d.ts +34 -0
  440. package/dist/transport/httpOptions.d.ts.map +1 -0
  441. package/dist/transport/httpOptions.js +13 -0
  442. package/dist/transport/httpOptions.js.map +1 -0
  443. package/dist/transport/httpTransport.d.ts +68 -0
  444. package/dist/transport/httpTransport.d.ts.map +1 -0
  445. package/dist/transport/httpTransport.js +1433 -0
  446. package/dist/transport/httpTransport.js.map +1 -0
  447. package/dist/transport/networkProbe.d.ts +85 -0
  448. package/dist/transport/networkProbe.d.ts.map +1 -0
  449. package/dist/transport/networkProbe.js +208 -0
  450. package/dist/transport/networkProbe.js.map +1 -0
  451. package/dist/transport/wsFrameHandlers.d.ts +129 -0
  452. package/dist/transport/wsFrameHandlers.d.ts.map +1 -0
  453. package/dist/transport/wsFrameHandlers.js +429 -0
  454. package/dist/transport/wsFrameHandlers.js.map +1 -0
  455. package/dist/transport/wsTransport.d.ts +575 -0
  456. package/dist/transport/wsTransport.d.ts.map +1 -0
  457. package/dist/transport/wsTransport.js +1024 -0
  458. package/dist/transport/wsTransport.js.map +1 -0
  459. package/dist/types/assertExact.d.ts +18 -0
  460. package/dist/types/assertExact.d.ts.map +1 -0
  461. package/dist/types/assertExact.js +2 -0
  462. package/dist/types/assertExact.js.map +1 -0
  463. package/dist/types/global.d.ts +108 -0
  464. package/dist/types/global.d.ts.map +1 -0
  465. package/dist/types/global.js +41 -0
  466. package/dist/types/global.js.map +1 -0
  467. package/dist/types/index.d.ts +206 -0
  468. package/dist/types/index.d.ts.map +1 -0
  469. package/dist/types/index.js +57 -0
  470. package/dist/types/index.js.map +1 -0
  471. package/dist/types/modelData.d.ts +11 -0
  472. package/dist/types/modelData.d.ts.map +1 -0
  473. package/dist/types/modelData.js +10 -0
  474. package/dist/types/modelData.js.map +1 -0
  475. package/dist/types/participant.d.ts +21 -0
  476. package/dist/types/participant.d.ts.map +1 -0
  477. package/dist/types/participant.js +11 -0
  478. package/dist/types/participant.js.map +1 -0
  479. package/dist/types/streams.d.ts +545 -0
  480. package/dist/types/streams.d.ts.map +1 -0
  481. package/dist/types/streams.js +12 -0
  482. package/dist/types/streams.js.map +1 -0
  483. package/dist/utils/asyncIterator.d.ts +35 -0
  484. package/dist/utils/asyncIterator.d.ts.map +1 -0
  485. package/dist/utils/asyncIterator.js +136 -0
  486. package/dist/utils/asyncIterator.js.map +1 -0
  487. package/dist/utils/duration.d.ts +51 -0
  488. package/dist/utils/duration.d.ts.map +1 -0
  489. package/dist/utils/duration.js +78 -0
  490. package/dist/utils/duration.js.map +1 -0
  491. package/dist/utils/json.d.ts +58 -0
  492. package/dist/utils/json.d.ts.map +1 -0
  493. package/dist/utils/json.js +277 -0
  494. package/dist/utils/json.js.map +1 -0
  495. package/dist/webhooks/events.d.ts +44 -0
  496. package/dist/webhooks/events.d.ts.map +1 -0
  497. package/dist/webhooks/events.js +43 -0
  498. package/dist/webhooks/events.js.map +1 -0
  499. package/dist/webhooks/index.d.ts +9 -0
  500. package/dist/webhooks/index.d.ts.map +1 -0
  501. package/dist/webhooks/index.js +9 -0
  502. package/dist/webhooks/index.js.map +1 -0
  503. package/dist/wire/accountResponses.d.ts +463 -0
  504. package/dist/wire/accountResponses.d.ts.map +1 -0
  505. package/dist/wire/accountResponses.js +294 -0
  506. package/dist/wire/accountResponses.js.map +1 -0
  507. package/dist/wire/auth.d.ts +57 -0
  508. package/dist/wire/auth.d.ts.map +1 -0
  509. package/dist/wire/auth.js +71 -0
  510. package/dist/wire/auth.js.map +1 -0
  511. package/dist/wire/bootstrapReason.d.ts +10 -0
  512. package/dist/wire/bootstrapReason.d.ts.map +1 -0
  513. package/dist/wire/bootstrapReason.js +9 -0
  514. package/dist/wire/bootstrapReason.js.map +1 -0
  515. package/dist/wire/claimEvent.d.ts +70 -0
  516. package/dist/wire/claimEvent.d.ts.map +1 -0
  517. package/dist/wire/claimEvent.js +74 -0
  518. package/dist/wire/claimEvent.js.map +1 -0
  519. package/dist/wire/claims.d.ts +475 -0
  520. package/dist/wire/claims.d.ts.map +1 -0
  521. package/dist/wire/claims.js +326 -0
  522. package/dist/wire/claims.js.map +1 -0
  523. package/dist/wire/commit.d.ts +604 -0
  524. package/dist/wire/commit.d.ts.map +1 -0
  525. package/dist/wire/commit.js +322 -0
  526. package/dist/wire/commit.js.map +1 -0
  527. package/dist/wire/delta.d.ts +251 -0
  528. package/dist/wire/delta.d.ts.map +1 -0
  529. package/dist/wire/delta.js +148 -0
  530. package/dist/wire/delta.js.map +1 -0
  531. package/dist/wire/errorEnvelope.d.ts +73 -0
  532. package/dist/wire/errorEnvelope.d.ts.map +1 -0
  533. package/dist/wire/errorEnvelope.js +124 -0
  534. package/dist/wire/errorEnvelope.js.map +1 -0
  535. package/dist/wire/feedCursor.d.ts +61 -0
  536. package/dist/wire/feedCursor.d.ts.map +1 -0
  537. package/dist/wire/feedCursor.js +83 -0
  538. package/dist/wire/feedCursor.js.map +1 -0
  539. package/dist/wire/feedEvent.d.ts +264 -0
  540. package/dist/wire/feedEvent.d.ts.map +1 -0
  541. package/dist/wire/feedEvent.js +66 -0
  542. package/dist/wire/feedEvent.js.map +1 -0
  543. package/dist/wire/frames.d.ts +195 -0
  544. package/dist/wire/frames.d.ts.map +1 -0
  545. package/dist/wire/frames.js +51 -0
  546. package/dist/wire/frames.js.map +1 -0
  547. package/dist/wire/inboundFrames.d.ts +490 -0
  548. package/dist/wire/inboundFrames.d.ts.map +1 -0
  549. package/dist/wire/inboundFrames.js +117 -0
  550. package/dist/wire/inboundFrames.js.map +1 -0
  551. package/dist/wire/index.d.ts +55 -0
  552. package/dist/wire/index.d.ts.map +1 -0
  553. package/dist/wire/index.js +84 -0
  554. package/dist/wire/index.js.map +1 -0
  555. package/dist/wire/listEnvelope.d.ts +38 -0
  556. package/dist/wire/listEnvelope.d.ts.map +1 -0
  557. package/dist/wire/listEnvelope.js +43 -0
  558. package/dist/wire/listEnvelope.js.map +1 -0
  559. package/dist/wire/modelMutations.d.ts +32 -0
  560. package/dist/wire/modelMutations.d.ts.map +1 -0
  561. package/dist/wire/modelMutations.js +53 -0
  562. package/dist/wire/modelMutations.js.map +1 -0
  563. package/dist/wire/modelResponses.d.ts +79 -0
  564. package/dist/wire/modelResponses.d.ts.map +1 -0
  565. package/dist/wire/modelResponses.js +44 -0
  566. package/dist/wire/modelResponses.js.map +1 -0
  567. package/dist/wire/modelShape.d.ts +79 -0
  568. package/dist/wire/modelShape.d.ts.map +1 -0
  569. package/dist/wire/modelShape.js +75 -0
  570. package/dist/wire/modelShape.js.map +1 -0
  571. package/dist/wire/protocol.d.ts +39 -0
  572. package/dist/wire/protocol.d.ts.map +1 -0
  573. package/dist/wire/protocol.js +39 -0
  574. package/dist/wire/protocol.js.map +1 -0
  575. package/dist/wire/protocolVersion.d.ts +74 -0
  576. package/dist/wire/protocolVersion.d.ts.map +1 -0
  577. package/dist/wire/protocolVersion.js +84 -0
  578. package/dist/wire/protocolVersion.js.map +1 -0
  579. package/package.json +187 -0
  580. package/src/ablo.ts +139 -0
  581. package/src/ai-sdk/coordinatedTool.ts +214 -0
  582. package/src/ai-sdk/index.ts +7 -0
  583. package/src/auth/apiKey.ts +540 -0
  584. package/src/auth/bootstrapScope.ts +15 -0
  585. package/src/auth/browserCredentialSafety.ts +48 -0
  586. package/src/auth/capability.ts +326 -0
  587. package/src/auth/capabilityLifecycle.ts +174 -0
  588. package/src/auth/credentialEndpoint.ts +79 -0
  589. package/src/auth/credentialEndpointProtocol.ts +51 -0
  590. package/src/auth/credentialKind.ts +20 -0
  591. package/src/auth/credentialPolicy.ts +244 -0
  592. package/src/auth/credentialResult.ts +23 -0
  593. package/src/auth/credentialSource.ts +99 -0
  594. package/src/auth/hostedEndpoints.ts +24 -0
  595. package/src/auth/identity.ts +330 -0
  596. package/src/auth/index.ts +592 -0
  597. package/src/auth/schemas.ts +94 -0
  598. package/src/auth/sessionMint.ts +126 -0
  599. package/src/auth/token.ts +4 -0
  600. package/src/batching/index.ts +200 -0
  601. package/src/coordination/awaitClaimGrant.ts +243 -0
  602. package/src/coordination/claimHeartbeatLoop.ts +165 -0
  603. package/src/coordination/claimMeta.ts +56 -0
  604. package/src/coordination/events.ts +86 -0
  605. package/src/coordination/index.ts +181 -0
  606. package/src/coordination/locator.ts +200 -0
  607. package/src/coordination/schema.ts +1346 -0
  608. package/src/coordination/targetConflict.ts +85 -0
  609. package/src/coordination/trace.ts +173 -0
  610. package/src/docs/catalog.ts +274 -0
  611. package/src/docs/index.ts +18 -0
  612. package/src/durableWrites.ts +134 -0
  613. package/src/environment.ts +132 -0
  614. package/src/errorCodes.ts +1591 -0
  615. package/src/errors.ts +918 -0
  616. package/src/footprint.ts +0 -0
  617. package/src/headlessClient.ts +161 -0
  618. package/src/index.ts +52 -0
  619. package/src/keys/index.ts +254 -0
  620. package/src/log/syncDeltaRow.ts +119 -0
  621. package/src/logger.ts +22 -0
  622. package/src/observability.ts +85 -0
  623. package/src/policy/types.ts +292 -0
  624. package/src/resources/functionalUpdate.ts +151 -0
  625. package/src/resources/httpResources.ts +520 -0
  626. package/src/resources/modelOperations.ts +444 -0
  627. package/src/resources/mutationOptions.ts +66 -0
  628. package/src/resources/where.ts +160 -0
  629. package/src/resources/writeOptionsSchema.ts +91 -0
  630. package/src/schema/coordination.ts +161 -0
  631. package/src/schema/ddl.ts +593 -0
  632. package/src/schema/ddlLock.ts +53 -0
  633. package/src/schema/diff.ts +489 -0
  634. package/src/schema/field.ts +321 -0
  635. package/src/schema/fieldRef.ts +88 -0
  636. package/src/schema/generate.ts +95 -0
  637. package/src/schema/index.ts +278 -0
  638. package/src/schema/loadStrategy.ts +52 -0
  639. package/src/schema/model.ts +476 -0
  640. package/src/schema/openapi.ts +658 -0
  641. package/src/schema/queries.ts +273 -0
  642. package/src/schema/relation.ts +291 -0
  643. package/src/schema/residency.ts +30 -0
  644. package/src/schema/roles.ts +325 -0
  645. package/src/schema/schema.ts +825 -0
  646. package/src/schema/select.ts +115 -0
  647. package/src/schema/serialize.ts +373 -0
  648. package/src/schema/sugar.ts +194 -0
  649. package/src/schema/tenancy.ts +221 -0
  650. package/src/server/adapter.ts +203 -0
  651. package/src/server/commit.ts +109 -0
  652. package/src/server/index.ts +26 -0
  653. package/src/server/readConfig.ts +82 -0
  654. package/src/server/storageMode.ts +20 -0
  655. package/src/source/adapter.ts +85 -0
  656. package/src/source/adapters/drizzle.ts +291 -0
  657. package/src/source/adapters/kysely.ts +346 -0
  658. package/src/source/adapters/kyselyMutationCore.ts +220 -0
  659. package/src/source/adapters/memory.ts +154 -0
  660. package/src/source/adapters/prisma.ts +282 -0
  661. package/src/source/conformance.ts +287 -0
  662. package/src/source/connector.ts +394 -0
  663. package/src/source/connectorProtocol.ts +189 -0
  664. package/src/source/contract.ts +221 -0
  665. package/src/source/drizzle.ts +1 -0
  666. package/src/source/factory.ts +444 -0
  667. package/src/source/idempotency.ts +189 -0
  668. package/src/source/index.ts +182 -0
  669. package/src/source/kysely.ts +2 -0
  670. package/src/source/migrations.ts +109 -0
  671. package/src/source/next.ts +38 -0
  672. package/src/source/pushQueue.ts +368 -0
  673. package/src/source/signing.ts +279 -0
  674. package/src/source/types.ts +502 -0
  675. package/src/syncLog/contract.ts +32 -0
  676. package/src/syncLog/index.ts +1 -0
  677. package/src/testing/fixtures/httpResponses.ts +155 -0
  678. package/src/transactionLayer.ts +122 -0
  679. package/src/transactions/settlement/commitEnvelope.ts +192 -0
  680. package/src/transactions/settlement/httpCommitEnvelope.ts +250 -0
  681. package/src/transactions/settlement/idempotencyKey.ts +11 -0
  682. package/src/transactions/settlement/pendingWrite.ts +24 -0
  683. package/src/transport/commitFrames.ts +225 -0
  684. package/src/transport/connectionManager.ts +856 -0
  685. package/src/transport/credentialLifecycle.ts +389 -0
  686. package/src/transport/heartbeat.ts +118 -0
  687. package/src/transport/httpClient.ts +354 -0
  688. package/src/transport/httpFeed.ts +111 -0
  689. package/src/transport/httpOptions.ts +41 -0
  690. package/src/transport/httpTransport.ts +1976 -0
  691. package/src/transport/networkProbe.ts +249 -0
  692. package/src/transport/wsFrameHandlers.ts +619 -0
  693. package/src/transport/wsTransport.ts +1491 -0
  694. package/src/types/assertExact.ts +17 -0
  695. package/src/types/global.ts +123 -0
  696. package/src/types/index.ts +270 -0
  697. package/src/types/modelData.ts +11 -0
  698. package/src/types/participant.ts +22 -0
  699. package/src/types/streams.ts +702 -0
  700. package/src/utils/asyncIterator.ts +141 -0
  701. package/src/utils/duration.ts +88 -0
  702. package/src/utils/json.ts +281 -0
  703. package/src/webhooks/events.ts +96 -0
  704. package/src/webhooks/index.ts +12 -0
  705. package/src/wire/accountResponses.ts +328 -0
  706. package/src/wire/auth.ts +86 -0
  707. package/src/wire/bootstrapReason.ts +10 -0
  708. package/src/wire/claimEvent.ts +85 -0
  709. package/src/wire/claims.ts +370 -0
  710. package/src/wire/commit.ts +379 -0
  711. package/src/wire/delta.ts +173 -0
  712. package/src/wire/errorEnvelope.ts +133 -0
  713. package/src/wire/feedCursor.ts +91 -0
  714. package/src/wire/feedEvent.ts +74 -0
  715. package/src/wire/frames.ts +77 -0
  716. package/src/wire/inboundFrames.ts +182 -0
  717. package/src/wire/index.ts +328 -0
  718. package/src/wire/listEnvelope.ts +51 -0
  719. package/src/wire/modelMutations.ts +55 -0
  720. package/src/wire/modelResponses.ts +48 -0
  721. package/src/wire/modelShape.ts +83 -0
  722. package/src/wire/protocol.ts +39 -0
  723. package/src/wire/protocolVersion.ts +97 -0
@@ -0,0 +1,326 @@
1
+ /**
2
+ * Schema Definition + Type Inference
3
+ *
4
+ * defineSchema() wraps your models. Types are inferred via Zod — no custom type system.
5
+ *
6
+ * Usage:
7
+ * import { z } from 'zod';
8
+ * import { defineSchema, model, relation } from '@abloatai/transaction/schema';
9
+ *
10
+ * const schema = defineSchema({
11
+ * tasks: model({
12
+ * title: z.string(),
13
+ * status: z.enum(['todo', 'doing', 'done']).default('todo'),
14
+ * projectId: z.string().optional(),
15
+ * }, {
16
+ * project: relation.belongsTo('projects', 'projectId'),
17
+ * }),
18
+ * });
19
+ *
20
+ * type Task = InferModel<typeof schema, 'tasks'>;
21
+ */
22
+ import { z } from 'zod';
23
+ import { AbloValidationError } from '../errors.js';
24
+ import { fieldRef } from './fieldRef.js';
25
+ import { scopeSchema, grantsRefSchema } from './roles.js';
26
+ // Sync-group roles (identity and entity) are defined in `./roles.js` and
27
+ // re-exported here so they can also be imported from this module. See
28
+ // `./roles.js` for the full vocabulary.
29
+ export { identityRole, entityRole, extractIdentityIds, extractEntityIds, composeIdentitySyncGroups, composeEntitySyncGroups, intersectRequestedWithAllowed, syncGroup, syncGroupSchema, syncGroupInputSchema, isSyncGroupInput, identityRoleSchema, entityRoleSchema, roleSchema, roleSourceSchema, scopeSchema, grantsRefSchema, groupsInputSchema, } from './roles.js';
30
+ function resolveCasing(fn) {
31
+ if (fn === undefined)
32
+ return (x) => x;
33
+ if (typeof fn === 'function')
34
+ return fn;
35
+ switch (fn) {
36
+ case 'snake_case':
37
+ return camelToSnake;
38
+ case 'camelCase':
39
+ return (x) => x;
40
+ }
41
+ }
42
+ /** Converts a camelCase identifier to snake_case. Kept local so the package
43
+ * carries no database-driver dependency, and so consumers on any stack get the
44
+ * same result. */
45
+ function camelToSnake(identifier) {
46
+ return identifier.replace(/[A-Z]/g, (ch) => `_${ch.toLowerCase()}`);
47
+ }
48
+ /**
49
+ * Session settings Ablo already sets on its direct-write connection. A
50
+ * `sessionSettings` entry FORWARDS Ablo's trusted context into a setting the
51
+ * customer's own policies read — it may never reassign one of these, which would
52
+ * let a schema push relax the engine's own scoping, timeouts, or `row_security`.
53
+ * Shared with the engine's direct-write seam so authoring-time validation and
54
+ * the runtime guard read one list. See ADR 0011.
55
+ */
56
+ export const RESERVED_SESSION_SETTINGS = [
57
+ 'statement_timeout',
58
+ 'lock_timeout',
59
+ 'row_security',
60
+ 'search_path',
61
+ 'app.current_org_id',
62
+ 'app.current_project_id',
63
+ 'app.current_environment',
64
+ 'app.current_sandbox_id',
65
+ 'app.current_participant_id',
66
+ 'app.current_participant_kind',
67
+ 'app.current_user_id',
68
+ ];
69
+ /**
70
+ * Base fields every synced model gets automatically.
71
+ *
72
+ * Exported (internal) so `parseSchema` can rebuild a model's validator the
73
+ * same way `defineSchema` does — `baseFieldsSchema.merge(modelSchema)` — when
74
+ * reconstructing a `Schema` from its JSON form.
75
+ */
76
+ export const baseFieldsSchema = z.object({
77
+ id: z.string(),
78
+ createdAt: z.date(),
79
+ updatedAt: z.date(),
80
+ organizationId: z.string().optional(),
81
+ createdBy: z.string().optional(),
82
+ });
83
+ /**
84
+ * The base-column names every model carries automatically — the keys of
85
+ * {@link baseFieldsSchema}, kept here as the single source of truth. Code
86
+ * generation reads it to avoid emitting a base column twice, and
87
+ * {@link defineSchema} uses it to reject a model that redeclares one, since
88
+ * merging the user's field over the base field would produce a `string & Date`
89
+ * type and break the build.
90
+ */
91
+ export const BASE_FIELDS = [
92
+ 'id',
93
+ 'createdAt',
94
+ 'updatedAt',
95
+ 'organizationId',
96
+ 'createdBy',
97
+ ];
98
+ // ── Factory ───────────────────────────────────────────────────────────────
99
+ /**
100
+ * Define a sync engine schema.
101
+ *
102
+ * ```ts
103
+ * const schema = defineSchema({
104
+ * tasks: model({ title: z.string(), status: z.string().default('todo') }),
105
+ * projects: model({ name: z.string() }),
106
+ * });
107
+ * ```
108
+ */
109
+ /**
110
+ * Rejects field names that will not survive the sync driver's snake_case ↔
111
+ * camelCase round-trip. The driver maps identifiers like this:
112
+ *
113
+ * `content_json` → `contentJson` (snake → camel)
114
+ * `contentJson` → `content_json` (camel → snake)
115
+ * `contentJSON` → `content_j_s_o_n` (does not round-trip)
116
+ *
117
+ * A name that does not round-trip through this pair of transforms will silently
118
+ * fail to populate on the client: the wire delivers one casing, the model reads
119
+ * another, and the field lands as `undefined`. Catching it here surfaces the
120
+ * problem when the schema is defined rather than at runtime.
121
+ *
122
+ * The rule: a standard camelCase identifier has runs of a single uppercase
123
+ * letter followed by lowercase letters, never two uppercase letters in a row.
124
+ * `contentJSON` has `JSON` in all caps, so it is rejected.
125
+ */
126
+ function assertRoundTrippableCamelCase(modelName, fieldName) {
127
+ // Base fields merged in by defineSchema are already validated; skip.
128
+ if (fieldName === 'id')
129
+ return;
130
+ // Leading-lowercase constraint: fields must be camelCase, not PascalCase.
131
+ // PascalCase is reserved for typenames.
132
+ const first = fieldName.charAt(0);
133
+ if (first >= 'A' && first <= 'Z') {
134
+ throw new AbloValidationError(`[defineSchema] ${modelName}.${fieldName}: field names must start lowercase ` +
135
+ `(camelCase). Use "${first.toLowerCase()}${fieldName.slice(1)}" instead.`, { code: 'schema_field_not_camelcase' });
136
+ }
137
+ // Two-consecutive-uppercase check. The classic failure mode is
138
+ // `contentJSON`, `contentHTML`, `myURLParam`, etc. These don't round-trip
139
+ // through `postgres.camel` — the snake_case intermediate would be
140
+ // `content_j_s_o_n`, which is not a column that exists.
141
+ for (let i = 0; i < fieldName.length - 1; i++) {
142
+ const a = fieldName.charAt(i);
143
+ const b = fieldName.charAt(i + 1);
144
+ const aUpper = a >= 'A' && a <= 'Z';
145
+ const bUpper = b >= 'A' && b <= 'Z';
146
+ if (aUpper && bUpper) {
147
+ throw new AbloValidationError(`[defineSchema] ${modelName}.${fieldName}: two consecutive uppercase ` +
148
+ `letters ("${a}${b}") will not round-trip through the ` +
149
+ `snake_case ↔ camelCase transform used by the sync driver. ` +
150
+ `The wire delivers camelCase (lowercase after the first letter of ` +
151
+ `each word); a field named "${fieldName}" would never receive its ` +
152
+ `value and read as undefined on the client. Use standard ` +
153
+ `camelCase (e.g. "contentJson" instead of "contentJSON").`, { code: 'schema_field_consecutive_caps' });
154
+ }
155
+ }
156
+ }
157
+ /**
158
+ * One {@link FieldRef} per declared field, keyed by model then field.
159
+ *
160
+ * Every construction of a {@link Schema} goes through here — `defineSchema`,
161
+ * the `selectModels`/`omitModels` projections, and the deserializer — so a
162
+ * projection carries references for exactly the models it kept and a schema
163
+ * rebuilt from JSON carries them at all.
164
+ */
165
+ export function buildFieldRefs(models) {
166
+ const refs = {};
167
+ for (const [model, def] of Object.entries(models)) {
168
+ const perField = {};
169
+ for (const field of Object.keys(def.shape))
170
+ perField[field] = fieldRef(model, field);
171
+ refs[model] = perField;
172
+ }
173
+ return refs;
174
+ }
175
+ export function defineSchema(models, options) {
176
+ // Build validators with base fields merged in, and resolve defaults for
177
+ // `typename` and `persist.store` so downstream code (the loader and the
178
+ // hydration pipeline) can rely on these fields being set without re-deriving
179
+ // them at every call site.
180
+ //
181
+ // Defaults:
182
+ // typename ← schema key (e.g. `block` → `'block'`)
183
+ // persist.store ← typename (only resolved when `persist` was provided)
184
+ //
185
+ // A consumer that passes `typename: 'Block'` explicitly (common when
186
+ // the wire shape uses PascalCase while the schema key is camelCase) keeps
187
+ // that value — the fallback only fires when the field is unset.
188
+ //
189
+ // The models record is rebuilt rather than mutated in place because
190
+ // `ModelDef`'s fields are `readonly`. The rebuild is a shallow spread per
191
+ // entry, so the inferred shape/relations/fields metadata references are
192
+ // preserved (no type inference regression at consumer call sites).
193
+ const validators = {};
194
+ const resolvedModels = {};
195
+ const casing = resolveCasing(options?.casing);
196
+ for (const [name, def] of Object.entries(models)) {
197
+ // Catch round-trip-hostile field names at definition time. Deferring
198
+ // this check to runtime means every affected field silently reads
199
+ // `undefined` on the client — and the author only notices when a UI
200
+ // that depends on the field goes blank. Throwing here makes the
201
+ // failure immediate and unambiguous.
202
+ for (const fieldName of Object.keys(def.shape)) {
203
+ assertRoundTrippableCamelCase(name, fieldName);
204
+ // Reserved base columns are merged in below via `baseFieldsSchema.merge`,
205
+ // and Zod `.merge` silently OVERWRITES the base field with the user's —
206
+ // e.g. a model declaring `createdAt: z.string()` ends up with a field
207
+ // typed `string & Date`, which breaks the build. Reject the collision at
208
+ // definition time so the author sees an unambiguous error instead.
209
+ if (BASE_FIELDS.includes(fieldName)) {
210
+ throw new AbloValidationError(`[defineSchema] ${name}.${fieldName}: field \`${fieldName}\` collides with a ` +
211
+ `reserved field that the SDK provides automatically ` +
212
+ `(${BASE_FIELDS.join(', ')}). Remove it from your model — redeclaring it ` +
213
+ `produces a \`string & Date\` type and breaks the build.`, { code: 'schema_reserved_field', param: `${name}.${fieldName}` });
214
+ }
215
+ }
216
+ validators[name] = baseFieldsSchema.merge(def.schema);
217
+ // Resolve every relation's `foreignKeyColumn` once, now. The builder
218
+ // constructs each RelationDef with `foreignKeyColumn = foreignKey`
219
+ // (identity) so this is a no-op when `casing` is unset — existing
220
+ // consumers get the same behavior they had before the option landed.
221
+ // When `casing: 'snake_case'` is set, every FK flips to its
222
+ // snake_case DB column name here and nowhere else. A field-level
223
+ // `.from(column)` override wins over the convention, so legacy
224
+ // columns stay declared in the artifact instead of rediscovered by
225
+ // SQL compilers. Server-side SQL compilers read the resolved value
226
+ // directly.
227
+ for (const rel of Object.values(def.relations)) {
228
+ const fieldColumn = def.fields[rel.foreignKey]?.column;
229
+ rel.foreignKeyColumn = fieldColumn ?? casing(rel.foreignKey);
230
+ }
231
+ const typename = def.typename ?? name;
232
+ const persist = def.persist
233
+ ? { ...def.persist, store: def.persist.store ?? typename }
234
+ : undefined;
235
+ // Physical table defaults to the schema key — the SAME rule the
236
+ // provisioner/planner use (`tableName ?? key`), resolved here once so the
237
+ // serialized artifact always carries it. Required now that models are
238
+ // mutable by default: the server's `buildModelMap` rejects a mutable
239
+ // model with no `tableName`, which would otherwise break every commit.
240
+ const tableName = def.tableName ?? name;
241
+ resolvedModels[name] = { ...def, typename, tableName, persist };
242
+ }
243
+ validateSyncGroupSchema(resolvedModels);
244
+ validateSessionSettings(options?.sessionSettings ?? {});
245
+ return {
246
+ // Cast back to S: we only added values to optional fields that were
247
+ // already part of ModelDef, so the shape is structurally unchanged.
248
+ models: resolvedModels,
249
+ validators: validators,
250
+ fields: buildFieldRefs(resolvedModels),
251
+ identityRoles: options?.identityRoles ?? [],
252
+ sessionSettings: options?.sessionSettings ?? {},
253
+ };
254
+ }
255
+ /**
256
+ * Reject session-setting mappings that couldn't do what the author intends —
257
+ * caught here at definition time rather than silently dropped on the write path.
258
+ * Each key must name a non-empty setting the customer's policies read, and must
259
+ * not reassign one Ablo already manages. Uniqueness needs no check: the map is
260
+ * keyed by the setting name, so a duplicate is unrepresentable.
261
+ */
262
+ function validateSessionSettings(settings) {
263
+ for (const setting of Object.keys(settings)) {
264
+ const name = setting.trim();
265
+ if (name === '') {
266
+ throw new AbloValidationError(`[defineSchema] sessionSettings: a key is empty. Name the Postgres ` +
267
+ `setting your row-level-security policies read, e.g. ` +
268
+ `\`{ 'app.current_org': 'orgId' }\`.`, { code: 'schema_definition_invalid', param: 'sessionSettings' });
269
+ }
270
+ if (RESERVED_SESSION_SETTINGS.includes(name)) {
271
+ throw new AbloValidationError(`[defineSchema] sessionSettings: \`${name}\` is a setting Ablo already ` +
272
+ `manages on its write connection, so a mapping can't reassign it — ` +
273
+ `that would let a schema relax the engine's own scoping. Point your ` +
274
+ `policies at a setting your app owns (e.g. \`app.current_org\`) and ` +
275
+ `map Ablo's trusted identity into that instead. Reserved: ` +
276
+ `${RESERVED_SESSION_SETTINGS.join(', ')}.`, { code: 'schema_definition_invalid', param: `sessionSettings.${name}` });
277
+ }
278
+ }
279
+ }
280
+ /**
281
+ * Validates the relation-driven sync-group declarations (`scope` and `grants`)
282
+ * at schema-build time, so a mistyped membership edge fails here — with a
283
+ * structured error (`code`, `param`, `doc_url`) pointing at the exact
284
+ * declaration — rather than silently mis-routing changes at runtime.
285
+ */
286
+ function validateSyncGroupSchema(models) {
287
+ for (const [name, def] of Object.entries(models)) {
288
+ // Shape-validate the `scope` declaration via the shared Zod schema.
289
+ if (def.scope !== undefined && !scopeSchema.safeParse(def.scope).success) {
290
+ throw new AbloValidationError(`Model "${name}": scope kind "${String(def.scope)}" must be a lowercase identifier (e.g. 'workspace').`, { code: 'schema_scope_kind_invalid', param: `${name}.scope` });
291
+ }
292
+ if (!def.grants)
293
+ continue;
294
+ // Shape-validate the `grants` edge via the shared Zod schema before the
295
+ // cross-field (relation-exists / belongsTo) checks below.
296
+ if (!grantsRefSchema.safeParse(def.grants).success) {
297
+ throw new AbloValidationError(`Model "${name}": grants must be { subject, scope } naming two relations on this model.`, { code: 'schema_grants_shape_invalid', param: `${name}.grants` });
298
+ }
299
+ const relations = def.relations;
300
+ for (const role of ['subject', 'scope']) {
301
+ const relName = def.grants[role];
302
+ const rel = relations?.[relName];
303
+ if (!rel) {
304
+ throw new AbloValidationError(`Model "${name}": grants.${role} "${relName}" is not a relation on this model. ` +
305
+ `Declare a \`belongsTo\` relation named "${relName}" first.`, { code: 'schema_grants_relation_missing', param: `${name}.grants.${role}` });
306
+ }
307
+ if (rel.type !== 'belongsTo') {
308
+ throw new AbloValidationError(`Model "${name}": grants.${role} "${relName}" must be a \`belongsTo\` relation ` +
309
+ `(got "${rel.type}"). A membership edge points at a single subject/scope row.`, { code: 'schema_grants_relation_kind', param: `${name}.grants.${role}` });
310
+ }
311
+ }
312
+ // The scope edge must target a model that is actually a scope root —
313
+ // otherwise the resolved `<kind>:<id>` group is one nothing fans into.
314
+ const scopeRel = relations[def.grants.scope];
315
+ // Unreachable: the role loop above already threw if the scope relation
316
+ // is missing — this narrows the indexed access for the checks below.
317
+ if (!scopeRel)
318
+ continue;
319
+ const target = models[scopeRel.target];
320
+ if (target && !target.scope) {
321
+ throw new AbloValidationError(`Model "${name}": grants.scope "${def.grants.scope}" targets "${scopeRel.target}", ` +
322
+ `which is not a scope root. Add \`scope: true\` to the "${scopeRel.target}" model.`, { code: 'schema_grants_target_not_scope_root', param: `${scopeRel.target}.scope` });
323
+ }
324
+ }
325
+ }
326
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/schema/schema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * `selectModels` projects a schema down to a subset of its models.
3
+ *
4
+ * It lets one canonical schema serve several apps, each subscribing only to the
5
+ * models it needs. Rather than re-declare a model's fields in a second schema —
6
+ * which you would then have to keep identical by hand — an app selects the
7
+ * models it wants from the canonical schema. Field shapes, resolved foreign-key
8
+ * columns, computed getters, typenames, and identity roles all come from the
9
+ * source, so a subset cannot drift from the canonical definition.
10
+ *
11
+ * ```ts
12
+ * import { schema as full } from './schema';
13
+ * import { selectModels } from '@abloatai/transaction/schema';
14
+ *
15
+ * // Subscribe to identity and document content only.
16
+ * export const schema = selectModels(full, ['users', 'organizations', 'workspaces', 'folders', 'files']);
17
+ * ```
18
+ *
19
+ * Relations whose target falls outside the selected set are dropped, so the
20
+ * subset sees only its own models. Dropping a relation that carries `parent`
21
+ * scope-inheritance throws instead, because silently losing it would mis-route
22
+ * a record's fan-out — the selected set must be closed under `parent` edges.
23
+ */
24
+ import type { Schema, SchemaRecord } from './schema.js';
25
+ export declare function selectModels<S extends SchemaRecord, K extends keyof S & string>(schema: Schema<S>, keys: readonly K[]): Schema<Pick<S, K>>;
26
+ /**
27
+ * `omitModels` is `selectModels` from the other side: keep every model EXCEPT
28
+ * the named ones. Use it when an app is the general case and a separate app
29
+ * owns the omitted models — the suite shell drops a specialized store that the
30
+ * standalone app selects for itself:
31
+ *
32
+ * ```ts
33
+ * export const schema = omitModels(full, ['reports', 'reportSections']);
34
+ * ```
35
+ *
36
+ * Same validation as `selectModels`: relations into the omitted set are
37
+ * dropped, and a dropped `parent` edge throws — so a model whose scope routes
38
+ * through an omitted parent cannot be silently kept.
39
+ */
40
+ export declare function omitModels<S extends SchemaRecord, K extends keyof S & string>(schema: Schema<S>, keys: readonly K[]): Schema<Omit<S, K>>;
41
+ //# sourceMappingURL=select.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"select.d.ts","sourceRoot":"","sources":["../../src/schema/select.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAOxD,wBAAgB,YAAY,CAAC,CAAC,SAAS,YAAY,EAAE,CAAC,SAAS,MAAM,CAAC,GAAG,MAAM,EAC7E,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,EACjB,IAAI,EAAE,SAAS,CAAC,EAAE,GACjB,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAiDpB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,UAAU,CAAC,CAAC,SAAS,YAAY,EAAE,CAAC,SAAS,MAAM,CAAC,GAAG,MAAM,EAC3E,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,EACjB,IAAI,EAAE,SAAS,CAAC,EAAE,GACjB,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAYpB"}
@@ -0,0 +1,91 @@
1
+ /**
2
+ * `selectModels` projects a schema down to a subset of its models.
3
+ *
4
+ * It lets one canonical schema serve several apps, each subscribing only to the
5
+ * models it needs. Rather than re-declare a model's fields in a second schema —
6
+ * which you would then have to keep identical by hand — an app selects the
7
+ * models it wants from the canonical schema. Field shapes, resolved foreign-key
8
+ * columns, computed getters, typenames, and identity roles all come from the
9
+ * source, so a subset cannot drift from the canonical definition.
10
+ *
11
+ * ```ts
12
+ * import { schema as full } from './schema';
13
+ * import { selectModels } from '@abloatai/transaction/schema';
14
+ *
15
+ * // Subscribe to identity and document content only.
16
+ * export const schema = selectModels(full, ['users', 'organizations', 'workspaces', 'folders', 'files']);
17
+ * ```
18
+ *
19
+ * Relations whose target falls outside the selected set are dropped, so the
20
+ * subset sees only its own models. Dropping a relation that carries `parent`
21
+ * scope-inheritance throws instead, because silently losing it would mis-route
22
+ * a record's fan-out — the selected set must be closed under `parent` edges.
23
+ */
24
+ import { buildFieldRefs } from './schema.js';
25
+ import { AbloValidationError } from '../errors.js';
26
+ import { schemaHash } from './serialize.js';
27
+ export function selectModels(schema, keys) {
28
+ const keep = new Set(keys);
29
+ const models = {};
30
+ const validators = {};
31
+ for (const key of keys) {
32
+ const def = schema.models[key];
33
+ if (!def) {
34
+ throw new AbloValidationError(`selectModels: "${key}" is not a model in the source schema`, { code: 'invalid_schema', param: key });
35
+ }
36
+ // Prune relations whose target isn't in the selected set. A pruned
37
+ // `parent` edge is a routing error, not a silent drop.
38
+ const relations = {};
39
+ for (const [relName, rel] of Object.entries(def.relations)) {
40
+ if (keep.has(rel.target)) {
41
+ relations[relName] = rel;
42
+ continue;
43
+ }
44
+ if (rel.options?.parent) {
45
+ throw new AbloValidationError(`selectModels: model "${key}" has a parent relation "${relName}" → "${rel.target}", ` +
46
+ `which is not in the selected set. Include "${rel.target}" so scope inheritance still routes.`, { code: 'invalid_schema', param: `${key}.${relName}` });
47
+ }
48
+ }
49
+ models[key] = { ...def, relations };
50
+ validators[key] = schema.validators[key];
51
+ }
52
+ return {
53
+ models: models,
54
+ // References for exactly the models this projection kept.
55
+ fields: buildFieldRefs(models),
56
+ validators: validators,
57
+ identityRoles: schema.identityRoles,
58
+ sessionSettings: schema.sessionSettings,
59
+ // Record the full source's hash so the drift check can recognize this subset
60
+ // as current against a server running that full schema. Prefer the source's
61
+ // OWN `sourceSchemaHash` when it is itself a projection, so a subset-of-a-
62
+ // subset still points at the original full schema rather than an intermediate
63
+ // one. `schemaHash` ignores this field, so re-projecting stays deterministic.
64
+ sourceSchemaHash: schema.sourceSchemaHash ?? schemaHash(schema),
65
+ };
66
+ }
67
+ /**
68
+ * `omitModels` is `selectModels` from the other side: keep every model EXCEPT
69
+ * the named ones. Use it when an app is the general case and a separate app
70
+ * owns the omitted models — the suite shell drops a specialized store that the
71
+ * standalone app selects for itself:
72
+ *
73
+ * ```ts
74
+ * export const schema = omitModels(full, ['reports', 'reportSections']);
75
+ * ```
76
+ *
77
+ * Same validation as `selectModels`: relations into the omitted set are
78
+ * dropped, and a dropped `parent` edge throws — so a model whose scope routes
79
+ * through an omitted parent cannot be silently kept.
80
+ */
81
+ export function omitModels(schema, keys) {
82
+ const drop = new Set(keys);
83
+ for (const key of keys) {
84
+ if (!schema.models[key]) {
85
+ throw new AbloValidationError(`omitModels: "${key}" is not a model in the source schema`, { code: 'invalid_schema', param: key });
86
+ }
87
+ }
88
+ const kept = Object.keys(schema.models).filter((k) => !drop.has(k));
89
+ return selectModels(schema, kept);
90
+ }
91
+ //# sourceMappingURL=select.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"select.js","sourceRoot":"","sources":["../../src/schema/select.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,116 @@
1
+ /**
2
+ * Schema ⇄ JSON.
3
+ *
4
+ * A `Schema` is fully serializable apart from its client-only closures — the
5
+ * Zod validators and computed getters. {@link serializeSchema} emits the
6
+ * plain-data JSON form and {@link parseSchema} reconstructs a working `Schema`
7
+ * from it: one `Schema` type with two representations.
8
+ *
9
+ * A hosted, multi-tenant server loads a tenant's schema with `parseSchema(json)`
10
+ * rather than importing it in process. The JSON is what `ablo push` sends and
11
+ * what the server stores per tenant and version.
12
+ *
13
+ * What round-trips:
14
+ * - all model routing and scoping metadata: typename, tableName, load,
15
+ * mutable, the `tenancy` descriptor, bootstrap hints, scope, grants,
16
+ * entityRoles, the `conflict` disposition map, persist, autoFill,
17
+ * requiredFields, and lazyObservable. The authoring shorthands (`policy`
18
+ * and `groups`) are normalized into these canonical fields when the model
19
+ * is built, so only the canonical fields cross here.
20
+ * - relations, including the resolved `foreignKeyColumn`
21
+ * - field metadata (names and type tags), from which validators are rebuilt
22
+ * - identity roles
23
+ *
24
+ * What does not round-trip, because the server never needs it:
25
+ * - computed getters, which are closures and are dropped
26
+ * - exact Zod refinements, which are rebuilt as permissive validators from
27
+ * {@link FieldMeta}; the server does no field-shape validation
28
+ */
29
+ import type { FieldMeta } from './field.js';
30
+ import type { Tenancy } from './tenancy.js';
31
+ import type { ModelResidency } from './residency.js';
32
+ import type { GrantsRef, LoadStrategy, PersistOptions, AutoFillRule, ConflictAxis } from './model.js';
33
+ import { type RelationType } from './relation.js';
34
+ import { type Schema, type IdentityRole, type EntityRole, type SessionSettings } from './schema.js';
35
+ /** Current schema-JSON envelope version. Bump this on a breaking change to the
36
+ * JSON shape itself — not to a user's schema. */
37
+ declare const SCHEMA_JSON_VERSION: 3;
38
+ /** A relation in JSON form. Mirrors the serializable members of {@link RelationDef}. */
39
+ export interface RelationJSON {
40
+ readonly type: RelationType;
41
+ readonly target: string;
42
+ readonly foreignKey: string;
43
+ readonly foreignKeyColumn: string;
44
+ readonly options?: Record<string, boolean>;
45
+ readonly orderBy?: string;
46
+ }
47
+ /** A model in JSON form. Everything on {@link ModelDef} except closures. */
48
+ export interface ModelJSON {
49
+ readonly fields: Record<string, FieldMeta>;
50
+ readonly relations: Record<string, RelationJSON>;
51
+ readonly load: LoadStrategy;
52
+ readonly typename: string;
53
+ readonly tableName?: string;
54
+ readonly tenancy: Tenancy;
55
+ /** The database plane the model's rows live in. Optional for backward
56
+ * compatibility: when absent (an artifact written before this field existed)
57
+ * it reads as `tenant`, the default. See {@link ModelResidency}. */
58
+ readonly plane?: ModelResidency;
59
+ readonly scope?: boolean | string;
60
+ readonly grants?: GrantsRef;
61
+ readonly entityRoles?: readonly EntityRole[];
62
+ /** The declared write-conflict disposition per committer kind. When absent,
63
+ * the engine falls back to its default. */
64
+ readonly conflict?: ConflictAxis;
65
+ readonly bootstrapLimit?: number;
66
+ readonly bootstrapOrderBy?: string;
67
+ readonly mutable?: boolean;
68
+ readonly lazyObservable?: boolean;
69
+ readonly persist?: PersistOptions;
70
+ readonly autoFill?: readonly AutoFillRule[];
71
+ readonly requiredFields?: readonly string[];
72
+ }
73
+ /** The JSON form of a {@link Schema}. The `ablo push` payload. */
74
+ export interface SchemaJSON {
75
+ readonly v: typeof SCHEMA_JSON_VERSION;
76
+ readonly models: Record<string, ModelJSON>;
77
+ readonly identityRoles: readonly IdentityRole[];
78
+ /** Optional so schemas pushed before ADR 0011 still parse (defaults to `{}`). */
79
+ readonly sessionSettings?: SessionSettings;
80
+ }
81
+ /**
82
+ * Project a `Schema` to its JSON form. Drops the client-only closures
83
+ * (validators, `computed`); keeps everything the server and a faithful
84
+ * rebuild need. The result is plain data — `JSON.stringify`-safe.
85
+ */
86
+ export declare function toSchemaJSON(schema: Schema): SchemaJSON;
87
+ /** Serialize a `Schema` to a JSON string (the `ablo push` payload). */
88
+ export declare function serializeSchema(schema: Schema): string;
89
+ /**
90
+ * Reconstruct a working `Schema` from its JSON form. Validators are rebuilt
91
+ * permissively from field metadata (the server never validates field shapes);
92
+ * `computed` getters are absent. Everything the server reads — routing,
93
+ * scoping, relations, identity roles — is restored exactly.
94
+ */
95
+ export declare function fromSchemaJSON(json: SchemaJSON): Schema;
96
+ /** Parse a `Schema` from a JSON string (inverse of {@link serializeSchema}). */
97
+ export declare function parseSchema(json: string): Schema;
98
+ /**
99
+ * Stable content hash of a `Schema`'s JSON form. FNV-1a over a canonical
100
+ * (sorted-key) encoding — deterministic across runs and order-invariant, no
101
+ * `crypto` dependency. Used for connect-time version gating: the client sends
102
+ * the hash it was built against, the server compares it to the tenant's
103
+ * active schema hash. Not a security primitive.
104
+ */
105
+ export declare function schemaHash(schema: Schema): string;
106
+ /**
107
+ * Content hash of ONE serialized model — the unit of the semantic drift check.
108
+ * Two schemas agree on a model exactly when these match, which is what lets a
109
+ * client compare only the models it declares instead of welding itself to the
110
+ * whole-schema hash (where any additive push reads as drift). Computed over the
111
+ * model's `SchemaJSON` entry with the same canonicalization and hash as
112
+ * {@link schemaHash}, on both the client and the server's `GET /api/schema`.
113
+ */
114
+ export declare function modelHash(modelJson: unknown): string;
115
+ export {};
116
+ //# sourceMappingURL=serialize.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serialize.d.ts","sourceRoot":"","sources":["../../src/schema/serialize.ts"],"names":[],"mappings":"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"}