@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,278 @@
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 { z } from 'zod';
30
+ import { AbloValidationError } from '../errors.js';
31
+ import { buildFieldRefs } from './schema.js';
32
+ import { relation, } from './relation.js';
33
+ import { baseFieldsSchema, } from './schema.js';
34
+ /** Current schema-JSON envelope version. Bump this on a breaking change to the
35
+ * JSON shape itself — not to a user's schema. */
36
+ const SCHEMA_JSON_VERSION = 3;
37
+ // ── Serialize ────────────────────────────────────────────────────────────────
38
+ function relationToJSON(rel) {
39
+ const options = rel.options;
40
+ return {
41
+ type: rel.type,
42
+ target: rel.target,
43
+ foreignKey: rel.foreignKey,
44
+ foreignKeyColumn: rel.foreignKeyColumn,
45
+ options: options && Object.keys(options).length > 0 ? { ...options } : undefined,
46
+ orderBy: rel._orderBy,
47
+ };
48
+ }
49
+ function modelToJSON(def) {
50
+ const relations = {};
51
+ for (const [name, rel] of Object.entries(def.relations)) {
52
+ relations[name] = relationToJSON(rel);
53
+ }
54
+ return {
55
+ fields: def.fields,
56
+ relations,
57
+ load: def.load,
58
+ // `defineSchema` always resolves `typename` to the schema key when unset,
59
+ // so it is present on a built ModelDef; fall back defensively anyway.
60
+ typename: def.typename ?? '',
61
+ tableName: def.tableName,
62
+ tenancy: def.tenancy,
63
+ plane: def.plane,
64
+ scope: def.scope,
65
+ grants: def.grants,
66
+ entityRoles: def.entityRoles,
67
+ conflict: def.conflict,
68
+ bootstrapLimit: def.bootstrapLimit,
69
+ bootstrapOrderBy: def.bootstrapOrderBy,
70
+ mutable: def.mutable,
71
+ lazyObservable: def.lazyObservable,
72
+ persist: def.persist,
73
+ autoFill: def.autoFill,
74
+ requiredFields: def.requiredFields,
75
+ };
76
+ }
77
+ /**
78
+ * Project a `Schema` to its JSON form. Drops the client-only closures
79
+ * (validators, `computed`); keeps everything the server and a faithful
80
+ * rebuild need. The result is plain data — `JSON.stringify`-safe.
81
+ */
82
+ export function toSchemaJSON(schema) {
83
+ const models = {};
84
+ for (const [key, def] of Object.entries(schema.models)) {
85
+ if (def.typename === '' || def.typename === undefined) {
86
+ // typename '' only happens for a malformed def; surface it loudly
87
+ // rather than ship a model the server can't route.
88
+ models[key] = { ...modelToJSON(def), typename: key };
89
+ }
90
+ else {
91
+ models[key] = modelToJSON(def);
92
+ }
93
+ }
94
+ return {
95
+ v: SCHEMA_JSON_VERSION,
96
+ models,
97
+ identityRoles: schema.identityRoles,
98
+ ...(Object.keys(schema.sessionSettings).length > 0
99
+ ? { sessionSettings: schema.sessionSettings }
100
+ : {}),
101
+ };
102
+ }
103
+ /** Serialize a `Schema` to a JSON string (the `ablo push` payload). */
104
+ export function serializeSchema(schema) {
105
+ return JSON.stringify(toSchemaJSON(schema));
106
+ }
107
+ // ── Parse ──────────────────────────────────────────────────────────────────
108
+ /** Rebuild a Zod validator for a field from its metadata. Permissive by
109
+ * design — the server does no field-shape validation; this exists so a
110
+ * parsed `Schema` is structurally a real `Schema`. */
111
+ function zodForField(meta) {
112
+ let base;
113
+ switch (meta.type) {
114
+ case 'string':
115
+ base = z.string();
116
+ break;
117
+ case 'number':
118
+ base = z.number();
119
+ break;
120
+ case 'boolean':
121
+ base = z.boolean();
122
+ break;
123
+ case 'date':
124
+ base = z.date();
125
+ break;
126
+ case 'enum':
127
+ base =
128
+ meta.enumValues && meta.enumValues.length > 0
129
+ ? z.enum(meta.enumValues)
130
+ : z.string();
131
+ break;
132
+ case 'json':
133
+ default:
134
+ base = z.unknown();
135
+ break;
136
+ }
137
+ return meta.isOptional ? base.optional() : base;
138
+ }
139
+ function relationFromJSON(rel) {
140
+ const setColumn = (definition) => {
141
+ // The builder normally derives this from schema casing. Serialized schemas
142
+ // already carry the resolved database column, so restore that runtime field.
143
+ Reflect.set(definition, 'foreignKeyColumn', rel.foreignKeyColumn);
144
+ return definition;
145
+ };
146
+ switch (rel.type) {
147
+ case 'belongsTo': {
148
+ const options = rel.options;
149
+ return setColumn(relation.belongsTo(rel.target, rel.foreignKey, {
150
+ ...(options?.index === undefined ? {} : { index: options.index }),
151
+ ...(options?.enrich === undefined ? {} : { enrich: options.enrich }),
152
+ ...(options?.defer === undefined ? {} : { defer: options.defer }),
153
+ ...(options?.parent === undefined ? {} : { parent: options.parent }),
154
+ ...(options?.fk === undefined ? {} : { fk: options.fk }),
155
+ }));
156
+ }
157
+ case 'hasMany':
158
+ return setColumn(relation.hasMany(rel.target, rel.foreignKey, rel.orderBy === undefined ? undefined : { orderBy: rel.orderBy }));
159
+ case 'hasOne':
160
+ return setColumn(relation.hasOne(rel.target, rel.foreignKey));
161
+ }
162
+ }
163
+ function modelFromJSON(json) {
164
+ // `z.ZodRawShape` is a readonly index signature in Zod v4, so build a
165
+ // mutable record and cast once when handing it to `z.object`/`ModelDef`.
166
+ const shapeMut = {};
167
+ for (const [name, meta] of Object.entries(json.fields)) {
168
+ shapeMut[name] = zodForField(meta);
169
+ }
170
+ const shape = shapeMut;
171
+ const relations = {};
172
+ for (const [name, rel] of Object.entries(json.relations)) {
173
+ relations[name] = relationFromJSON(rel);
174
+ }
175
+ return {
176
+ schema: z.object(shape),
177
+ shape,
178
+ fields: json.fields,
179
+ relations,
180
+ load: json.load,
181
+ bootstrapLimit: json.bootstrapLimit,
182
+ bootstrapOrderBy: json.bootstrapOrderBy,
183
+ typename: json.typename,
184
+ persist: json.persist,
185
+ tableName: json.tableName,
186
+ tenancy: json.tenancy,
187
+ // Absent in older artifacts → default `tenant`, matching the model builder
188
+ // and provisioning defaults so the round-trip stays stable.
189
+ plane: json.plane ?? 'tenant',
190
+ scope: json.scope,
191
+ grants: json.grants,
192
+ entityRoles: json.entityRoles,
193
+ // Absent in older artifacts → undefined, so the commit path falls through to
194
+ // the function registry or the engine default.
195
+ conflict: json.conflict,
196
+ mutable: json.mutable,
197
+ lazyObservable: json.lazyObservable,
198
+ // computed getters are closures and intentionally not serialized; a
199
+ // parsed schema (server-side) has none.
200
+ computed: undefined,
201
+ autoFill: json.autoFill,
202
+ requiredFields: json.requiredFields,
203
+ };
204
+ }
205
+ /**
206
+ * Reconstruct a working `Schema` from its JSON form. Validators are rebuilt
207
+ * permissively from field metadata (the server never validates field shapes);
208
+ * `computed` getters are absent. Everything the server reads — routing,
209
+ * scoping, relations, identity roles — is restored exactly.
210
+ */
211
+ export function fromSchemaJSON(json) {
212
+ const models = {};
213
+ const validators = {};
214
+ for (const [key, modelJson] of Object.entries(json.models)) {
215
+ const def = modelFromJSON(modelJson);
216
+ models[key] = def;
217
+ validators[key] = baseFieldsSchema.merge(def.schema);
218
+ }
219
+ return {
220
+ models: models,
221
+ // A schema rebuilt from JSON carries references too — the shapes are here.
222
+ fields: buildFieldRefs(models),
223
+ validators: validators,
224
+ identityRoles: json.identityRoles,
225
+ sessionSettings: json.sessionSettings ?? {},
226
+ };
227
+ }
228
+ /** Parse a `Schema` from a JSON string (inverse of {@link serializeSchema}). */
229
+ export function parseSchema(json) {
230
+ const parsed = JSON.parse(json);
231
+ if (parsed.v !== SCHEMA_JSON_VERSION) {
232
+ throw new AbloValidationError(`parseSchema: unsupported schema-JSON version ${parsed.v} (expected ${SCHEMA_JSON_VERSION})`, { code: 'schema_definition_invalid' });
233
+ }
234
+ return fromSchemaJSON(parsed);
235
+ }
236
+ // ── Hash ─────────────────────────────────────────────────────────────────────
237
+ /**
238
+ * Stable content hash of a `Schema`'s JSON form. FNV-1a over a canonical
239
+ * (sorted-key) encoding — deterministic across runs and order-invariant, no
240
+ * `crypto` dependency. Used for connect-time version gating: the client sends
241
+ * the hash it was built against, the server compares it to the tenant's
242
+ * active schema hash. Not a security primitive.
243
+ */
244
+ export function schemaHash(schema) {
245
+ return fnv1a(canonicalJson(toSchemaJSON(schema)));
246
+ }
247
+ /**
248
+ * Content hash of ONE serialized model — the unit of the semantic drift check.
249
+ * Two schemas agree on a model exactly when these match, which is what lets a
250
+ * client compare only the models it declares instead of welding itself to the
251
+ * whole-schema hash (where any additive push reads as drift). Computed over the
252
+ * model's `SchemaJSON` entry with the same canonicalization and hash as
253
+ * {@link schemaHash}, on both the client and the server's `GET /api/schema`.
254
+ */
255
+ export function modelHash(modelJson) {
256
+ return fnv1a(canonicalJson(modelJson));
257
+ }
258
+ /** FNV-1a over an already-canonical string — shared by both hashes above. */
259
+ function fnv1a(canonical) {
260
+ let h = 0x811c9dc5;
261
+ for (let i = 0; i < canonical.length; i++) {
262
+ h ^= canonical.charCodeAt(i);
263
+ h = Math.imul(h, 0x01000193);
264
+ }
265
+ return (h >>> 0).toString(16).padStart(8, '0');
266
+ }
267
+ /** Stable JSON: object keys sorted recursively, `undefined` dropped. */
268
+ function canonicalJson(value) {
269
+ if (value === null || typeof value !== 'object')
270
+ return JSON.stringify(value) ?? 'null';
271
+ if (Array.isArray(value))
272
+ return `[${value.map(canonicalJson).join(',')}]`;
273
+ const entries = Object.entries(value)
274
+ .filter(([, v]) => v !== undefined)
275
+ .sort(([a], [b]) => (a < b ? -1 : a > b ? 1 : 0));
276
+ return `{${entries.map(([k, v]) => `${JSON.stringify(k)}:${canonicalJson(v)}`).join(',')}}`;
277
+ }
278
+ //# sourceMappingURL=serialize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serialize.js","sourceRoot":"","sources":["../../src/schema/serialize.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,110 @@
1
+ /**
2
+ * A concise, claim-first way to declare a model. Each verb is shorthand for a
3
+ * {@link model} call with two decisions already made, so a reader learns the two
4
+ * facts that matter most about an entity before scanning its fields:
5
+ *
6
+ * - Writability: `mutable.*` lets clients send create, update, and delete
7
+ * operations over the commit protocol. `readOnly.*` means the server owns the
8
+ * model — its changes stream to clients as deltas, but clients cannot mutate it.
9
+ * - Load strategy: `.instant` loads the model at bootstrap, `.lazy` loads it on
10
+ * first access, and `.manual` loads it only when you query it explicitly.
11
+ *
12
+ * The two-token form (`mutable.lazy({...})`) states the safety claim in the first
13
+ * token and the load shape in the second. The plain {@link model} factory remains
14
+ * available; these verbs are a convenience layered over it.
15
+ *
16
+ * @example
17
+ * ```ts
18
+ * tasks: mutable.lazy({ title: z.string() }, {
19
+ * typename: 'Task', tableName: 'tasks',
20
+ * relations: { ... },
21
+ * computed: tasksComputed,
22
+ * }),
23
+ * ```
24
+ */
25
+ import type { z } from 'zod';
26
+ import { type ModelDef, type ModelOptions, type ComputedRecord, type RelationRecord } from './model.js';
27
+ /**
28
+ * Options accepted by every sugar verb. A strict subset of
29
+ * {@link ModelOptions} — anything the verb infers (`mutable`, `load`,
30
+ * `lazyObservable`) is deliberately absent so the call site can't
31
+ * contradict its verb.
32
+ */
33
+ export interface SugarOptions<R extends RelationRecord = RelationRecord, C extends ComputedRecord = ComputedRecord> {
34
+ /** Relations to other models. Same shape as `model()`'s second arg. */
35
+ relations?: R;
36
+ /** Computed getters installed on the model class prototype. */
37
+ computed?: C;
38
+ /**
39
+ * Wire `__typename` (PascalCase, e.g. `'Task'`). Defaults to the schema
40
+ * key via `defineSchema` — override when the wire shape differs from
41
+ * the camelCase schema key.
42
+ */
43
+ typename?: string;
44
+ /**
45
+ * The physical table name. Override it when the table name differs from the
46
+ * snake_case of the typename — for example, a `Member` type stored in a table
47
+ * named `'member'` rather than `'members'`.
48
+ */
49
+ tableName?: string;
50
+ /**
51
+ * The row-access policy for tenant isolation — the rule deciding who may read a
52
+ * row. A discriminated union on `by` (`column`, `parent`, or `none`). See
53
+ * {@link ModelOptions.policy}.
54
+ */
55
+ policy?: ModelOptions['policy'];
56
+ /**
57
+ * Sync-group routing — which delta *channels* a row fans into
58
+ * (`root` / `grants` / `roles`). See {@link ModelOptions.groups}.
59
+ */
60
+ groups?: ModelOptions['groups'];
61
+ /** Max rows loaded during bootstrap. Only applies to `.instant`. */
62
+ bootstrapLimit?: number;
63
+ /** Bootstrap sort order (e.g. `'created_at DESC'`). */
64
+ bootstrapOrderBy?: string;
65
+ /** IndexedDB persistence hints — see {@link ModelOptions.persist}. */
66
+ persist?: ModelOptions['persist'];
67
+ /**
68
+ * Defer MobX observability to first access. Override the verb's
69
+ * default when a `.lazy` model is small enough that eager MobX setup
70
+ * is fine, or a `.instant` model is hot enough to justify deferral.
71
+ */
72
+ lazyObservable?: boolean;
73
+ }
74
+ /**
75
+ * Client-writable entities. `mutable.*` is the opt-in signal for wire
76
+ * mutations via `commit` — equivalent to setting
77
+ * `{ mutable: true, load: X }` on `model()`.
78
+ *
79
+ * Pick the load suffix by data-access pattern:
80
+ * - `.instant` — small, always-needed (Theme, Layout, StatusGroup)
81
+ * - `.lazy` — large collections fetched on first query
82
+ * (Block, Message, Task)
83
+ */
84
+ export declare const mutable: {
85
+ instant: <Shape extends z.ZodRawShape, R extends RelationRecord = Record<string, never>, C extends ComputedRecord = Record<string, never>>(shape: Shape, opts?: SugarOptions<R, C>) => ModelDef<Shape, R, C>;
86
+ lazy: <Shape extends z.ZodRawShape, R extends RelationRecord = Record<string, never>, C extends ComputedRecord = Record<string, never>>(shape: Shape, opts?: SugarOptions<R, C>) => ModelDef<Shape, R, C>;
87
+ };
88
+ /**
89
+ * Server-managed entities. `readOnly.*` means clients subscribe to
90
+ * deltas but cannot emit mutations — any `commit` op for this model
91
+ * is rejected at the server with "Unknown model."
92
+ *
93
+ * Use for:
94
+ * - Server-written state: `sync_deltas`, `presence`, version vectors
95
+ * - Ingestion pipelines: digest entries, filing jobs
96
+ * - Audit surfaces: anything where clients watch but only the server
97
+ * writes
98
+ */
99
+ export declare const readOnly: {
100
+ instant: <Shape extends z.ZodRawShape, R extends RelationRecord = Record<string, never>, C extends ComputedRecord = Record<string, never>>(shape: Shape, opts?: SugarOptions<R, C>) => ModelDef<Shape, R, C>;
101
+ lazy: <Shape extends z.ZodRawShape, R extends RelationRecord = Record<string, never>, C extends ComputedRecord = Record<string, never>>(shape: Shape, opts?: SugarOptions<R, C>) => ModelDef<Shape, R, C>;
102
+ /**
103
+ * Internal-only: kept out of bootstrap and never written by clients. The
104
+ * strongest safety posture — use for tables the SDK must know about (for type
105
+ * inference) but that no client should be able to write. Rows still reach a
106
+ * client that reads the model, so this is a write boundary, not a read one.
107
+ */
108
+ internal: <Shape extends z.ZodRawShape, R extends RelationRecord = Record<string, never>, C extends ComputedRecord = Record<string, never>>(shape: Shape, opts?: SugarOptions<R, C>) => ModelDef<Shape, R, C>;
109
+ };
110
+ //# sourceMappingURL=sugar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sugar.d.ts","sourceRoot":"","sources":["../../src/schema/sugar.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,EAEL,KAAK,QAAQ,EACb,KAAK,YAAY,EACjB,KAAK,cAAc,EACnB,KAAK,cAAc,EACpB,MAAM,YAAY,CAAC;AAEpB;;;;;GAKG;AACH,MAAM,WAAW,YAAY,CAC3B,CAAC,SAAS,cAAc,GAAG,cAAc,EACzC,CAAC,SAAS,cAAc,GAAG,cAAc;IAEzC,uEAAuE;IACvE,SAAS,CAAC,EAAE,CAAC,CAAC;IACd,+DAA+D;IAC/D,QAAQ,CAAC,EAAE,CAAC,CAAC;IACb;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,MAAM,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,CAAC;IAChC;;;OAGG;IACH,MAAM,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,CAAC;IAChC,oEAAoE;IACpE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,uDAAuD;IACvD,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,sEAAsE;IACtE,OAAO,CAAC,EAAE,YAAY,CAAC,SAAS,CAAC,CAAC;IAClC;;;;OAIG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAyBD;;;;;;;;;GASG;AACH,eAAO,MAAM,OAAO;cAEhB,KAAK,SAAS,CAAC,CAAC,WAAW,EAC3B,CAAC,SAAS,cAAc,0BACxB,CAAC,SAAS,cAAc,iCAEjB,KAAK,SACL,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,KACxB,QAAQ,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;WAMtB,KAAK,SAAS,CAAC,CAAC,WAAW,EAC3B,CAAC,SAAS,cAAc,0BACxB,CAAC,SAAS,cAAc,iCAEjB,KAAK,SACL,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,KACxB,QAAQ,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;CAEzB,CAAC;AAEF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,QAAQ;cAEjB,KAAK,SAAS,CAAC,CAAC,WAAW,EAC3B,CAAC,SAAS,cAAc,0BACxB,CAAC,SAAS,cAAc,iCAEjB,KAAK,SACL,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,KACxB,QAAQ,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;WAQtB,KAAK,SAAS,CAAC,CAAC,WAAW,EAC3B,CAAC,SAAS,cAAc,0BACxB,CAAC,SAAS,cAAc,iCAEjB,KAAK,SACL,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,KACxB,QAAQ,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;IAGxB;;;;;OAKG;eAED,KAAK,SAAS,CAAC,CAAC,WAAW,EAC3B,CAAC,SAAS,cAAc,0BACxB,CAAC,SAAS,cAAc,iCAEjB,KAAK,SACL,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,KACxB,QAAQ,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;CAEzB,CAAC"}
@@ -0,0 +1,84 @@
1
+ /**
2
+ * A concise, claim-first way to declare a model. Each verb is shorthand for a
3
+ * {@link model} call with two decisions already made, so a reader learns the two
4
+ * facts that matter most about an entity before scanning its fields:
5
+ *
6
+ * - Writability: `mutable.*` lets clients send create, update, and delete
7
+ * operations over the commit protocol. `readOnly.*` means the server owns the
8
+ * model — its changes stream to clients as deltas, but clients cannot mutate it.
9
+ * - Load strategy: `.instant` loads the model at bootstrap, `.lazy` loads it on
10
+ * first access, and `.manual` loads it only when you query it explicitly.
11
+ *
12
+ * The two-token form (`mutable.lazy({...})`) states the safety claim in the first
13
+ * token and the load shape in the second. The plain {@link model} factory remains
14
+ * available; these verbs are a convenience layered over it.
15
+ *
16
+ * @example
17
+ * ```ts
18
+ * tasks: mutable.lazy({ title: z.string() }, {
19
+ * typename: 'Task', tableName: 'tasks',
20
+ * relations: { ... },
21
+ * computed: tasksComputed,
22
+ * }),
23
+ * ```
24
+ */
25
+ import { model, } from './model.js';
26
+ /** Internal helper — builds a ModelDef with baseline safety+load flags applied. */
27
+ function build(shape, opts, baseline) {
28
+ return model(shape, { relations: (opts?.relations ?? {}), mutable: baseline.mutable,
29
+ load: baseline.load,
30
+ lazyObservable: opts?.lazyObservable ?? baseline.lazyObservable,
31
+ typename: opts?.typename,
32
+ tableName: opts?.tableName,
33
+ policy: opts?.policy,
34
+ groups: opts?.groups,
35
+ bootstrapLimit: opts?.bootstrapLimit,
36
+ bootstrapOrderBy: opts?.bootstrapOrderBy,
37
+ persist: opts?.persist,
38
+ computed: opts?.computed, });
39
+ }
40
+ /**
41
+ * Client-writable entities. `mutable.*` is the opt-in signal for wire
42
+ * mutations via `commit` — equivalent to setting
43
+ * `{ mutable: true, load: X }` on `model()`.
44
+ *
45
+ * Pick the load suffix by data-access pattern:
46
+ * - `.instant` — small, always-needed (Theme, Layout, StatusGroup)
47
+ * - `.lazy` — large collections fetched on first query
48
+ * (Block, Message, Task)
49
+ */
50
+ export const mutable = {
51
+ instant: (shape, opts) =>
52
+ // Reactive by default (see readonly.instant note): opt out with
53
+ // `lazyObservable: false` only for very large read-only list models.
54
+ build(shape, opts, { mutable: true, load: 'instant', lazyObservable: true }),
55
+ lazy: (shape, opts) => build(shape, opts, { mutable: true, load: 'lazy', lazyObservable: true }),
56
+ };
57
+ /**
58
+ * Server-managed entities. `readOnly.*` means clients subscribe to
59
+ * deltas but cannot emit mutations — any `commit` op for this model
60
+ * is rejected at the server with "Unknown model."
61
+ *
62
+ * Use for:
63
+ * - Server-written state: `sync_deltas`, `presence`, version vectors
64
+ * - Ingestion pipelines: digest entries, filing jobs
65
+ * - Audit surfaces: anything where clients watch but only the server
66
+ * writes
67
+ */
68
+ export const readOnly = {
69
+ instant: (shape, opts) =>
70
+ // Reactive by default, like every variant: a remote delta that mutates a row
71
+ // in place must re-render reactive reads. Opt out per-model with
72
+ // `lazyObservable: false` for very large read-only lists where per-field
73
+ // atoms cost more than the QueryView's entry-replaced reactivity.
74
+ build(shape, opts, { mutable: false, load: 'instant', lazyObservable: true }),
75
+ lazy: (shape, opts) => build(shape, opts, { mutable: false, load: 'lazy', lazyObservable: true }),
76
+ /**
77
+ * Internal-only: kept out of bootstrap and never written by clients. The
78
+ * strongest safety posture — use for tables the SDK must know about (for type
79
+ * inference) but that no client should be able to write. Rows still reach a
80
+ * client that reads the model, so this is a write boundary, not a read one.
81
+ */
82
+ internal: (shape, opts) => build(shape, opts, { mutable: false, load: 'lazy', lazyObservable: true }),
83
+ };
84
+ //# sourceMappingURL=sugar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sugar.js","sourceRoot":"","sources":["../../src/schema/sugar.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAGH,OAAO,EACL,KAAK,GAKN,MAAM,YAAY,CAAC;AAqDpB,mFAAmF;AACnF,SAAS,KAAK,CAKZ,KAAY,EACZ,IAAoC,EACpC,QAAmE;IAEnE,OAAO,KAAK,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,CAAC,IAAI,EAAE,SAAS,IAAI,EAAE,CAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO;QACtF,IAAI,EAAE,QAAQ,CAAC,IAAI;QACnB,cAAc,EAAE,IAAI,EAAE,cAAc,IAAI,QAAQ,CAAC,cAAc;QAC/D,QAAQ,EAAE,IAAI,EAAE,QAAQ;QACxB,SAAS,EAAE,IAAI,EAAE,SAAS;QAC1B,MAAM,EAAE,IAAI,EAAE,MAAM;QACpB,MAAM,EAAE,IAAI,EAAE,MAAM;QACpB,cAAc,EAAE,IAAI,EAAE,cAAc;QACpC,gBAAgB,EAAE,IAAI,EAAE,gBAAgB;QACxC,OAAO,EAAE,IAAI,EAAE,OAAO;QACtB,QAAQ,EAAE,IAAI,EAAE,QAAQ,GAAG,CAAC,CAAC;AACjC,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG;IACrB,OAAO,EAAE,CAKP,KAAY,EACZ,IAAyB,EACF,EAAE;IACzB,gEAAgE;IAChE,qEAAqE;IACrE,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC;IAE9E,IAAI,EAAE,CAKJ,KAAY,EACZ,IAAyB,EACF,EAAE,CACzB,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC;CAC5E,CAAC;AAEF;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,OAAO,EAAE,CAKP,KAAY,EACZ,IAAyB,EACF,EAAE;IACzB,6EAA6E;IAC7E,iEAAiE;IACjE,yEAAyE;IACzE,kEAAkE;IAClE,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC;IAE/E,IAAI,EAAE,CAKJ,KAAY,EACZ,IAAyB,EACF,EAAE,CACzB,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC;IAE5E;;;;;OAKG;IACH,QAAQ,EAAE,CAKR,KAAY,EACZ,IAAyB,EACF,EAAE,CACzB,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC;CAC7E,CAAC"}
@@ -0,0 +1,140 @@
1
+ /**
2
+ * Defines how a model's rows are scoped to a tenant. Two forms live here, and the
3
+ * separation between them is deliberate:
4
+ *
5
+ * 1. The canonical form, {@link Tenancy} — a discriminated union that every
6
+ * consumer reads (provisioning and row-level security, introspection, the
7
+ * runtime, and the CLI) and the shape that crosses the wire in `ModelJSON`.
8
+ * One exhaustively switchable shape, so the type system enforces the isolation
9
+ * boundary.
10
+ * 2. The authoring form, {@link PolicyInput} — the `policy: { by }` option a
11
+ * schema author writes. The name follows SQL row-level security, where a
12
+ * policy is the rule that decides which rows a tenant may read.
13
+ * {@link resolvePolicy} converts it to the canonical {@link Tenancy} when the
14
+ * model is built, so the authoring vocabulary never reaches the wire or any
15
+ * consumer.
16
+ *
17
+ * The canonical form is an exhaustively switchable discriminated union, so the type
18
+ * system enforces the isolation boundary at every consumer. The authoring form is a
19
+ * flat object whose `by` names the choice and whose per-branch rules are checked by a
20
+ * refinement — the opt-out from tenant scoping (`{ by: 'none' }`) and the
21
+ * source-derived case (`{ by: 'source' }`) are explicit, named values rather than
22
+ * falsy flags, important because `none` makes an entire table readable across tenants.
23
+ */
24
+ import { z } from 'zod';
25
+ /** The default physical tenancy column. This is the single canonical definition of that column name. */
26
+ export declare const DEFAULT_ORG_COLUMN = "organization_id";
27
+ /**
28
+ * Scopes a table's rows through a parent table, for rows that carry no tenancy
29
+ * column of their own (for example, blocks scoped through their section, report,
30
+ * and organization). This is the canonical `parent` payload; authors write the
31
+ * friendlier {@link PolicyInput} `{ by: 'parent', fk, parent }` form, which
32
+ * {@link resolvePolicy} normalizes into this.
33
+ */
34
+ export declare const scopedViaRefSchema: z.ZodObject<{
35
+ localKey: z.ZodString;
36
+ parentTable: z.ZodString;
37
+ parentKey: z.ZodOptional<z.ZodString>;
38
+ parentOrgColumn: z.ZodOptional<z.ZodString>;
39
+ }, z.core.$strip>;
40
+ export type ScopedViaRef = z.infer<typeof scopedViaRefSchema>;
41
+ /** How a model's rows are scoped to a tenant — the canonical, wire-facing form. */
42
+ export declare const tenancySchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
43
+ kind: z.ZodLiteral<"column">;
44
+ column: z.ZodString;
45
+ }, z.core.$strip>, z.ZodObject<{
46
+ kind: z.ZodLiteral<"parent">;
47
+ via: z.ZodObject<{
48
+ localKey: z.ZodString;
49
+ parentTable: z.ZodString;
50
+ parentKey: z.ZodOptional<z.ZodString>;
51
+ parentOrgColumn: z.ZodOptional<z.ZodString>;
52
+ }, z.core.$strip>;
53
+ }, z.core.$strip>, z.ZodObject<{
54
+ kind: z.ZodLiteral<"none">;
55
+ }, z.core.$strip>, z.ZodObject<{
56
+ kind: z.ZodLiteral<"source">;
57
+ }, z.core.$strip>], "kind">;
58
+ export type Tenancy = z.infer<typeof tenancySchema>;
59
+ /**
60
+ * The authoring form of tenancy — what a schema author writes as the model's
61
+ * `policy` option. The name follows SQL row-level security, where a policy is the
62
+ * rule that decides which rows a tenant may read.
63
+ *
64
+ * The four choices `by` can take:
65
+ *
66
+ * - `{ by: 'column' }` — a row-local tenancy column (the default). `column`
67
+ * overrides the name (default {@link DEFAULT_ORG_COLUMN}).
68
+ * - `{ by: 'parent', fk, parent }` — inherit tenancy through a foreign key when
69
+ * this table has no tenancy column of its own. `parentKey` (default `'id'`) and
70
+ * `parentTenantColumn` (default {@link DEFAULT_ORG_COLUMN}) are optional overrides.
71
+ * - `{ by: 'source' }` — derive the organization from the connected source that
72
+ * registered the model, for a single-tenant connected database that carries no
73
+ * `organization_id` column. The registration is the tenant boundary.
74
+ * - `{ by: 'none' }` — genuinely global or reference data. This makes the whole
75
+ * table readable across tenants, so it is correct only for tables that have no tenant.
76
+ *
77
+ * The runtime schema is one flat object rather than a discriminated union: `by`
78
+ * selects the branch, and the {@link https://zod.dev | superRefine} pass enforces
79
+ * the per-branch field rules (`parent` requires `fk` and `parent`; the other three
80
+ * take no branch fields). The exported {@link PolicyInput} type is hand-written as a
81
+ * precise union so the compiler still requires the right fields per `by` — the flat
82
+ * schema validates at runtime, the union guides at author time, and the type guard
83
+ * below keeps the two from drifting.
84
+ */
85
+ export declare const policyInputSchema: z.ZodObject<{
86
+ by: z.ZodEnum<{
87
+ none: "none";
88
+ source: "source";
89
+ column: "column";
90
+ parent: "parent";
91
+ }>;
92
+ column: z.ZodOptional<z.ZodString>;
93
+ fk: z.ZodOptional<z.ZodString>;
94
+ parent: z.ZodOptional<z.ZodString>;
95
+ parentKey: z.ZodOptional<z.ZodString>;
96
+ parentTenantColumn: z.ZodOptional<z.ZodString>;
97
+ }, z.core.$strip>;
98
+ /**
99
+ * The precise authoring type. Hand-written rather than inferred from
100
+ * {@link policyInputSchema} so the compiler enforces the per-branch fields the flat
101
+ * runtime schema can only check at parse time — an author writing `{ by: 'parent' }`
102
+ * gets a type error for the missing `fk`/`parent`, not a runtime one.
103
+ */
104
+ export type PolicyInput = {
105
+ by: 'column';
106
+ column?: string;
107
+ } | {
108
+ by: 'parent';
109
+ fk: string;
110
+ parent: string;
111
+ parentKey?: string;
112
+ parentTenantColumn?: string;
113
+ } | {
114
+ by: 'source';
115
+ } | {
116
+ by: 'none';
117
+ };
118
+ /**
119
+ * Normalizes the authoring {@link PolicyInput} into the canonical {@link Tenancy}.
120
+ * Called once, when the model is built, so that `ModelDef`, `ModelJSON`, and every
121
+ * consumer see only the canonical union. Omitting `policy` defaults to a row-local
122
+ * `organization_id` column.
123
+ */
124
+ export declare function resolvePolicy(input?: PolicyInput): Tenancy;
125
+ /**
126
+ * Reads the canonical {@link Tenancy} off an already-built model definition (or a
127
+ * parsed `ModelJSON`), defaulting to a row-local `organization_id` column when it is
128
+ * absent.
129
+ *
130
+ * This is the read-side helper. Consumers — provisioning and row-level security, the
131
+ * membership resolver, DDL generation, and the CLI — call it to get a model's
132
+ * tenancy without re-deriving the default each time. It is not the authoring
133
+ * normalizer; that is {@link resolvePolicy}.
134
+ */
135
+ export declare function resolveTenancy(def: {
136
+ tenancy?: Tenancy;
137
+ }): Tenancy;
138
+ /** The physical tenancy column for a column-scoped model, else `null`. */
139
+ export declare function tenancyColumn(t: Tenancy): string | null;
140
+ //# sourceMappingURL=tenancy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tenancy.d.ts","sourceRoot":"","sources":["../../src/schema/tenancy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,wGAAwG;AACxG,eAAO,MAAM,kBAAkB,oBAAoB,CAAC;AAEpD;;;;;;GAMG;AACH,eAAO,MAAM,kBAAkB;;;;;iBAS7B,CAAC;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE9D,mFAAmF;AACnF,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;2BAgBxB,CAAC;AACH,MAAM,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AAEpD;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;iBAsD1B,CAAC;AAEL;;;;;GAKG;AACH,MAAM,MAAM,WAAW,GACnB;IAAE,EAAE,EAAE,QAAQ,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GACjC;IAAE,EAAE,EAAE,QAAQ,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,kBAAkB,CAAC,EAAE,MAAM,CAAA;CAAE,GAC7F;IAAE,EAAE,EAAE,QAAQ,CAAA;CAAE,GAChB;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,CAAC;AAenB;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,KAAK,CAAC,EAAE,WAAW,GAAG,OAAO,CAoB1D;AAED;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAElE;AAED,0EAA0E;AAC1E,wBAAgB,aAAa,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAEvD"}