@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,273 @@
1
+ /**
2
+ * Query definitions for a schema.
3
+ *
4
+ * A query pairs a Zod input schema with the name of the model it returns.
5
+ * Input types flow through `z.infer` and result types through `InferModel`,
6
+ * the same inference path `model` and `relation` use, so there is no separate
7
+ * type system to learn.
8
+ *
9
+ * Usage:
10
+ * import { z } from 'zod';
11
+ * import {
12
+ * defineSchema, defineQueries, model, query, relation,
13
+ * } from '@abloatai/transaction/schema';
14
+ *
15
+ * const schema = defineSchema({
16
+ * block: model(
17
+ * { sectionId: z.string(), type: z.string() },
18
+ * { section: relation.belongsTo('sections', 'sectionId') },
19
+ * { load: 'lazy', typename: 'Block', persist: {} },
20
+ * ),
21
+ * });
22
+ *
23
+ * const queries = defineQueries(schema, {
24
+ * blocksByReport: query({
25
+ * input: z.object({ reportId: z.string() }),
26
+ * returns: 'block', // ← type-checked against schema.models
27
+ * }),
28
+ * });
29
+ *
30
+ * type Input = InferQueryInput<typeof queries.queries.blocksByReport>;
31
+ * // ^? { reportId: string }
32
+ * type Result = InferQueryResult<
33
+ * typeof schema,
34
+ * typeof queries.queries.blocksByReport
35
+ * >;
36
+ * // ^? Array<Block>
37
+ *
38
+ * Design notes:
39
+ *
40
+ * - `query()` accepts any string for `returns`. The check that the string
41
+ * names a real model runs when the query passes through
42
+ * `defineQueries(schema, ...)`, the same way
43
+ * `relation.belongsTo('projects', 'projectId')` takes a plain string at
44
+ * the factory and defers the cross-reference check to schema assembly.
45
+ *
46
+ * - A query carries no `name` until `defineQueries()` assigns one from its
47
+ * record key — the same pattern `defineSchema({ tasks: model(...) })`
48
+ * uses, where the model's name is the record key rather than a field on
49
+ * the factory.
50
+ *
51
+ * - Every query returns an array of a single model type. To fetch several
52
+ * model types at once, run several queries in one batch rather than
53
+ * declaring a combined shape. Each `QueryDef` therefore points at exactly
54
+ * one model, and the loader hydrates results through a single
55
+ * `schema.models[queryDef.returns]` lookup.
56
+ */
57
+
58
+ import { z } from 'zod';
59
+ import type { Schema, InferModel, InferModelNames } from './schema.js';
60
+ import { AbloValidationError } from '../errors.js';
61
+
62
+ // ── Query definition types ────────────────────────────────────────────────
63
+
64
+ /**
65
+ * A single query definition: a zod input shape, the schema key of the
66
+ * model it returns, and (after assembly) the name it was registered
67
+ * under.
68
+ *
69
+ * `name` is filled in by `defineQueries()` from the record key. It is
70
+ * optional on the type so `query()` can return a value without one —
71
+ * downstream code should only read `name` after the query has been
72
+ * passed through `defineQueries()`.
73
+ */
74
+ export interface QueryDef<
75
+ TInput extends z.ZodType = z.ZodType,
76
+ TReturns extends string = string,
77
+ > {
78
+ /** Zod schema for the query's input arguments. */
79
+ readonly input: TInput;
80
+ /**
81
+ * The schema key of the model this query returns. Narrowed by
82
+ * `defineQueries()` to `InferModelNames<S>` via the `Q` generic, so
83
+ * a query whose `returns` does not match a known model fails at
84
+ * compile time.
85
+ */
86
+ readonly returns: TReturns;
87
+ /**
88
+ * The name under which the query is registered. {@link defineQueries}
89
+ * fills this in from the record key; you do not set it directly. It lives
90
+ * on the definition itself so dispatch and lookup code can read the name
91
+ * straight off a {@link QueryDef} without carrying the surrounding
92
+ * {@link Queries} object.
93
+ */
94
+ readonly name?: string;
95
+ }
96
+
97
+ /**
98
+ * The raw spec accepted by `query()`. Internal type — consumers never
99
+ * reference this directly, they call `query({ input, returns })`.
100
+ */
101
+ interface QuerySpec<
102
+ TInput extends z.ZodType,
103
+ TReturns extends string,
104
+ > {
105
+ readonly input: TInput;
106
+ readonly returns: TReturns;
107
+ }
108
+
109
+ // ── query() factory ───────────────────────────────────────────────────────
110
+
111
+ /**
112
+ * Define a query.
113
+ *
114
+ * `TReturns` is a `const` generic so TypeScript preserves the literal
115
+ * type of the `returns` value at call time (e.g., `'block'`
116
+ * instead of widening to `string`). This is what lets `defineQueries`
117
+ * type-check `returns` against the schema's model keys without
118
+ * requiring the consumer to write `as const` manually.
119
+ *
120
+ * ```ts
121
+ * const blocksByReport = query({
122
+ * input: z.object({ reportId: z.string() }),
123
+ * returns: 'block',
124
+ * });
125
+ * ```
126
+ */
127
+ export function query<
128
+ TInput extends z.ZodType,
129
+ const TReturns extends string,
130
+ >(spec: QuerySpec<TInput, TReturns>): QueryDef<TInput, TReturns> {
131
+ return {
132
+ input: spec.input,
133
+ returns: spec.returns,
134
+ };
135
+ }
136
+
137
+ // ── Queries record + type inference ───────────────────────────────────────
138
+
139
+ /**
140
+ * A record of query names → query definitions, parameterized by a
141
+ * schema so each query's `returns` must reference a known model.
142
+ *
143
+ * This is the constraint type used by `defineQueries()` — it's what
144
+ * turns "any string" into "a model in this schema" without touching
145
+ * the `query()` factory itself.
146
+ */
147
+ export type QueryRecord<S extends Schema> = Record<
148
+ string,
149
+ QueryDef<z.ZodType, InferModelNames<S>>
150
+ >;
151
+
152
+ /**
153
+ * The object returned by `defineQueries()`. Holds a reference back to
154
+ * the schema (so the loader can resolve `queryDef.returns` to
155
+ * a `ModelDef` at runtime via `schema.models[def.returns]`) and the
156
+ * resolved record of queries, each with its `name` field filled in.
157
+ */
158
+ export interface Queries<
159
+ S extends Schema,
160
+ Q extends QueryRecord<S>,
161
+ > {
162
+ readonly schema: S;
163
+ readonly queries: Q;
164
+ }
165
+
166
+ /**
167
+ * Infer the input type of a query from its zod schema.
168
+ *
169
+ * ```ts
170
+ * type Input = InferQueryInput<typeof queries.queries.blocksByReport>;
171
+ * // { reportId: string }
172
+ * ```
173
+ */
174
+ export type InferQueryInput<Q extends QueryDef> = z.infer<Q['input']>;
175
+
176
+ /**
177
+ * Infer the result type of a query by looking up its `returns` model
178
+ * in the schema.
179
+ *
180
+ * Returns `Array<InferModel<S, returns>>` — all queries return a
181
+ * collection at this layer. Single-entity fetches use
182
+ * `ids: [singleId]` and the caller picks `result[0]`; this avoids a
183
+ * second `scope: 'single'` shape in the DSL for a case that can be
184
+ * expressed with the collection form.
185
+ *
186
+ * ```ts
187
+ * type Result = InferQueryResult<
188
+ * typeof schema,
189
+ * typeof queries.queries.blocksByReport
190
+ * >;
191
+ * // Array<Block>
192
+ * ```
193
+ */
194
+ export type InferQueryResult<
195
+ S extends Schema,
196
+ Q extends QueryDef,
197
+ > = Q extends QueryDef<z.ZodType, infer R>
198
+ ? R extends InferModelNames<S>
199
+ ? InferModel<S, R>[]
200
+ : never
201
+ : never;
202
+
203
+ // ── defineQueries() factory ───────────────────────────────────────────────
204
+
205
+ /**
206
+ * Define a typed query set against a schema.
207
+ *
208
+ * Each entry's `returns` field is constrained to the schema's model
209
+ * names at compile time via the `Q` generic bound to `QueryRecord<S>`.
210
+ * A query whose `returns` does not match a known model will fail at
211
+ * the `defineQueries` call site with a TypeScript error, not at
212
+ * runtime.
213
+ *
214
+ * The factory also performs a runtime validation of the same
215
+ * invariant. This catches the edge case where the schema and the
216
+ * queries live in separate modules that drift out of sync — for
217
+ * example, when a developer removes a model from the schema without
218
+ * updating the queries that referenced it. The runtime error points
219
+ * at the specific offending query and lists the available models,
220
+ * which is a nicer failure mode than a generic "property does not
221
+ * exist" error deep inside the loader.
222
+ *
223
+ * Each resolved query gets its `name` populated from the record key:
224
+ * `queries.blocksByReport.name === 'blocksByReport'`. Dispatch and
225
+ * lookup code read `queryDef.name` directly rather than re-deriving it from
226
+ * the surrounding record.
227
+ *
228
+ * ```ts
229
+ * const schema = defineSchema({
230
+ * block: model(
231
+ * { sectionId: z.string() },
232
+ * {},
233
+ * { load: 'lazy', typename: 'Block', persist: {} },
234
+ * ),
235
+ * });
236
+ *
237
+ * const queries = defineQueries(schema, {
238
+ * blocksByReport: query({
239
+ * input: z.object({ reportId: z.string() }),
240
+ * returns: 'block', // ← type-checked
241
+ * }),
242
+ * });
243
+ * ```
244
+ */
245
+ export function defineQueries<
246
+ S extends Schema,
247
+ const Q extends QueryRecord<S>,
248
+ >(schema: S, queries: Q): Queries<S, Q> {
249
+ // Rebuild the queries record with `name` populated per entry. Same
250
+ // shallow-spread strategy `defineSchema` uses for `typename` / `persist`
251
+ // defaults — preserves input references, avoids mutating `readonly`
252
+ // fields in place, and keeps each resolved `QueryDef` immutable from
253
+ // construction onward.
254
+ const resolvedQueries: Record<string, QueryDef> = {};
255
+ for (const [name, def] of Object.entries(queries)) {
256
+ if (!(def.returns in schema.models)) {
257
+ throw new AbloValidationError(
258
+ `defineQueries: query "${name}" declares returns: "${def.returns}", ` +
259
+ `which is not a model in the schema. ` +
260
+ `Available models: ${Object.keys(schema.models).join(', ') || '(none)'}`,
261
+ { code: 'query_returns_unknown_model' },
262
+ );
263
+ }
264
+ resolvedQueries[name] = { ...def, name };
265
+ }
266
+
267
+ return {
268
+ schema,
269
+ // Cast back to Q: the rebuild only added `name` (already optional on
270
+ // QueryDef) to each entry, so the shape is structurally unchanged.
271
+ queries: resolvedQueries as unknown as Q,
272
+ };
273
+ }
@@ -0,0 +1,291 @@
1
+ /**
2
+ * Declarative relations between your models — the edges that turn a flat set
3
+ * of models into a graph. You attach relations to a model with the
4
+ * {@link relation} factories; the engine reads them to index foreign keys for
5
+ * fast child lookups, to order inserts so a parent row lands before the rows
6
+ * that reference it, and to generate the accessor properties that let you read
7
+ * `task.project` or `project.tasks` directly.
8
+ *
9
+ * Usage:
10
+ * import { relation } from '@abloatai/transaction/schema';
11
+ *
12
+ * const taskRelations = {
13
+ * project: relation.belongsTo('projects', 'projectId'),
14
+ * assignee: relation.belongsTo('users', 'assigneeId'),
15
+ * comments: relation.hasMany('comments', 'taskId'),
16
+ * };
17
+ */
18
+
19
+ // ── Relation options ──────────────────────────────────────────────────────
20
+
21
+ /**
22
+ * Options for `relation.belongsTo`. Each defaults to `false`, so every
23
+ * behavior below is opt-in per relation.
24
+ *
25
+ * `index: true` registers a foreign-key index for the child model when the
26
+ * engine starts, turning "every child that points at this parent" from a full
27
+ * scan into a constant-time lookup. Reach for it on relations you query this
28
+ * way often, such as a block's `sectionId`.
29
+ *
30
+ * `enrich: true` auto-populates the parent reference on an incoming change
31
+ * before the child data lands. A change to `Task { teamId: 't1' }` picks up the
32
+ * already-loaded `teams:t1` record and attaches it as `data.team`, so you can
33
+ * read `task.team` without a second lookup. Enrichment is best-effort: if the
34
+ * parent has not loaded yet it quietly does nothing, and the child data still
35
+ * applies.
36
+ *
37
+ * `defer: true` tells the engine to ignore this edge when it works out the
38
+ * order in which to insert rows. Use it on the soft side of a genuine reference
39
+ * cycle — the side where you are willing to insert the child first with the
40
+ * foreign key left null and fill it in with a later update. The other side of
41
+ * the cycle then becomes a strict predecessor, so the child is ordered after
42
+ * the parent rather than tied with it.
43
+ *
44
+ * `defer` changes only that ordering, not what the engine sends on the wire; it
45
+ * does not rewrite an insert into an insert-then-update. Pair it with a Postgres
46
+ * `DEFERRABLE INITIALLY DEFERRED` constraint when you also want the database to
47
+ * relax the foreign-key check itself. For example:
48
+ *
49
+ * ```ts
50
+ * layouts: model({ reportId: z.string().nullish() }, {
51
+ * // The report-owns-layout link is nullable and the layout is always
52
+ * // created first; marking it `defer` lets the report commit ahead of the
53
+ * // layout instead of sharing its insert-order slot.
54
+ * report: relation.belongsTo('reports', 'reportId', { defer: true }),
55
+ * }),
56
+ * ```
57
+ */
58
+ export interface BelongsToOptions {
59
+ readonly index?: boolean;
60
+ readonly enrich?: boolean;
61
+ readonly defer?: boolean;
62
+ /**
63
+ * Marks the relation's target as this record's parent: the entity the record
64
+ * lives inside and inherits its access scope from. When a record is written,
65
+ * the engine routes it into its parent's sync group — following a chain of
66
+ * `parent` edges all the way up — so the change reaches everyone subscribed to
67
+ * the owning entity. This is the familiar rule that access flows down from a
68
+ * container to the things it holds, as a folder does to its files.
69
+ *
70
+ * Do not set `parent` on a reference that merely points at another record for
71
+ * provenance or as a template, such as `sourceSectionId` or `templateId`; doing
72
+ * so would leak the record into an unrelated scope. The engine also cannot
73
+ * infer the parent from whether a field is optional — many real parent keys
74
+ * are optional, like a root folder or an inbox task — so you must declare the
75
+ * parent edge explicitly.
76
+ *
77
+ * It reads naturally at the call site:
78
+ * `belongsTo('report', 'reportId', { parent: true })` — the report is the parent.
79
+ */
80
+ readonly parent?: boolean;
81
+
82
+ /**
83
+ * Emit a real Postgres foreign-key constraint for this relation when the
84
+ * engine provisions tables in a customer-owned database. This is independent
85
+ * of `parent`: `parent` decides which subscribers a change reaches, while
86
+ * `fk` decides whether the database enforces referential integrity. A relation
87
+ * may set either, both, or neither.
88
+ *
89
+ * Set `fk: true` only when the target row lives in the same database and is
90
+ * written in the same commit as this row, and points at a strong, contained
91
+ * entity. Leave it off provenance or template pointers (`sourceSectionId`,
92
+ * `templateId`), cross-tenant references, or anything that may be written in a
93
+ * different transaction than its target — a hard constraint there would reject
94
+ * the write and break out-of-order sync. The constraint is emitted as
95
+ * `DEFERRABLE INITIALLY DEFERRED, ON DELETE NO ACTION`: a plain integrity
96
+ * guard, leaving any cascade or null-on-delete behavior to the application.
97
+ */
98
+ readonly fk?: boolean;
99
+ }
100
+
101
+ // ── Relation type brands ──────────────────────────────────────────────────
102
+
103
+ declare const __relationType: unique symbol;
104
+ declare const __relationTarget: unique symbol;
105
+ declare const __relationField: unique symbol;
106
+
107
+ /**
108
+ * The three edges the engine resolves. Inferred from `wire/modelShape.ts`
109
+ * rather than restated: the set is reported to callers by `GET /api/schema`,
110
+ * so it is protocol, and protocol has one definition.
111
+ */
112
+ export type { RelationType } from '../wire/modelShape.js';
113
+ // `export type { X } from` does NOT bind X in this module — the uses below need
114
+ // their own import.
115
+ import type { RelationType } from '../wire/modelShape.js';
116
+
117
+ /**
118
+ * A relation definition, carrying its type information at both the type and
119
+ * runtime level.
120
+ *
121
+ * The `Options` generic captures a relation's options in the type system; only
122
+ * `belongsTo` uses it, while `hasMany` and `hasOne` leave it empty. The `const`
123
+ * modifier on the `belongsTo` factory preserves literal inference, so
124
+ * `{ enrich: true }` is remembered as `true` rather than widened to `boolean`,
125
+ * letting type-level features read the exact option value.
126
+ *
127
+ * `options` is always present at runtime: the factory substitutes an empty
128
+ * object when you omit it, so reading `options.index` or `options.enrich` needs
129
+ * no null check.
130
+ */
131
+ export interface RelationDef<
132
+ Type extends RelationType = RelationType,
133
+ Target extends string = string,
134
+ Field extends string = string,
135
+ Options extends BelongsToOptions = BelongsToOptions,
136
+ > {
137
+ readonly [__relationType]: Type;
138
+ readonly [__relationTarget]: Target;
139
+ readonly [__relationField]: Field;
140
+
141
+ /** Runtime metadata */
142
+ readonly type: Type;
143
+ readonly target: Target;
144
+ /**
145
+ * The field on the child model that holds the parent's id, as a camelCase
146
+ * schema field name. The engine reads `model[foreignKey]` to resolve the
147
+ * relation and to build client-side index keys; it is never interpolated into
148
+ * raw SQL — that is what {@link foreignKeyColumn} is for.
149
+ */
150
+ readonly foreignKey: Field;
151
+ /**
152
+ * The same foreign key expressed as a database column identifier.
153
+ * {@link foreignKey} is translated into this when you configure a `casing`
154
+ * option on `defineSchema` — for example `'snake_case'` turns `messageId`
155
+ * into `message_id`. The server interpolates this column name into SQL
156
+ * directly, because a driver's automatic camelCase-to-snake_case mapping does
157
+ * not reach identifiers embedded in raw SQL; resolving the name once at
158
+ * schema-build time is what makes it available there.
159
+ *
160
+ * Defaults to {@link foreignKey} when no `casing` option is set, so consumers
161
+ * whose database columns already match their field names need no
162
+ * configuration.
163
+ */
164
+ readonly foreignKeyColumn: string;
165
+ readonly options: Options;
166
+ /**
167
+ * Optional sort field for `hasMany` relations. When set, the
168
+ * generated relation getter sorts results by this field. Populated
169
+ * by `relation.hasMany(target, fk, { orderBy: 'fieldName' })`.
170
+ */
171
+ readonly _orderBy?: string;
172
+ }
173
+
174
+ // ── Internal relation builder ─────────────────────────────────────────────
175
+
176
+ class RelationBuilder<
177
+ Type extends RelationType,
178
+ Target extends string,
179
+ Field extends string,
180
+ Options extends BelongsToOptions = BelongsToOptions,
181
+ > implements RelationDef<Type, Target, Field, Options>
182
+ {
183
+ declare readonly [__relationType]: Type;
184
+ declare readonly [__relationTarget]: Target;
185
+ declare readonly [__relationField]: Field;
186
+
187
+ readonly type: Type;
188
+ readonly target: Target;
189
+ readonly foreignKey: Field;
190
+ /**
191
+ * Starts out identical to {@link foreignKey}. `defineSchema` overwrites
192
+ * this when a `casing` option is set — it's declared as a mutable
193
+ * (non-readonly on the implementation side) so the schema builder can
194
+ * resolve it once at build time without allocating a new object per
195
+ * relation. Consumers see it typed as `readonly` on {@link RelationDef}.
196
+ */
197
+ foreignKeyColumn: string;
198
+ readonly options: Options;
199
+ /**
200
+ * Stashed by `hasMany` when the caller provides `{ orderBy }`. Read
201
+ * back in `createSyncEngine` to install the sort comparator on the
202
+ * generated relation getter. Declared on the builder so both writer
203
+ * and reader stay type-safe — no double-cast smuggle through `Record<...>`.
204
+ */
205
+ _orderBy?: string;
206
+
207
+ constructor(type: Type, target: Target, foreignKey: Field, options?: Options) {
208
+ this.type = type;
209
+ this.target = target;
210
+ this.foreignKey = foreignKey;
211
+ this.foreignKeyColumn = foreignKey;
212
+ this.options = (options ?? ({} as Options));
213
+ }
214
+ }
215
+
216
+ // ── Public relation factories ─────────────────────────────────────────────
217
+
218
+ export const relation = {
219
+ /**
220
+ * This model belongs to another model via a foreign key.
221
+ * e.g., Task belongs to Project via projectId
222
+ *
223
+ * ```ts
224
+ * // Simple reference (no options)
225
+ * project: relation.belongsTo('projects', 'projectId'),
226
+ *
227
+ * // Register an FK index for O(1) child lookups
228
+ * section: relation.belongsTo('sections', 'sectionId', { index: true }),
229
+ *
230
+ * // Auto-populate the parent on delta arrival
231
+ * team: relation.belongsTo('teams', 'teamId', { enrich: true }),
232
+ *
233
+ * // Both
234
+ * parent: relation.belongsTo('threads', 'parentId', { index: true, enrich: true }),
235
+ *
236
+ * // Mark the soft side of a cycle so the priority computer breaks
237
+ * // the cycle deterministically instead of tying the two models.
238
+ * report: relation.belongsTo('reports', 'reportId', { defer: true }),
239
+ * ```
240
+ */
241
+ belongsTo<
242
+ Target extends string,
243
+ Field extends string,
244
+ const Opts extends BelongsToOptions = Record<string, never>,
245
+ >(
246
+ target: Target,
247
+ foreignKey: Field,
248
+ options?: Opts
249
+ ): RelationDef<'belongsTo', Target, Field, Opts> {
250
+ return new RelationBuilder('belongsTo', target, foreignKey, options ?? ({} as Opts));
251
+ },
252
+
253
+ /**
254
+ * This model has many of another model — for example, a project has many
255
+ * tasks via `Task.projectId`.
256
+ *
257
+ * At runtime the engine adds a getter to the parent model that returns every
258
+ * child whose foreign key matches, and registers the foreign-key index on the
259
+ * child model automatically.
260
+ *
261
+ * ```ts
262
+ * blocks: relation.hasMany('blocks', 'sectionId'),
263
+ * // → section.blocks returns all Block[] where sectionId === section.id
264
+ *
265
+ * blocks: relation.hasMany('blocks', 'sectionId', { orderBy: 'zIndex' }),
266
+ * // → section.blocks returns Block[] sorted by zIndex ascending
267
+ * ```
268
+ */
269
+ hasMany<Target extends string, Field extends string>(
270
+ target: Target,
271
+ foreignKey: Field,
272
+ options?: { orderBy?: string },
273
+ ): RelationDef<'hasMany', Target, Field> {
274
+ const builder = new RelationBuilder('hasMany', target, foreignKey);
275
+ if (options?.orderBy) {
276
+ builder._orderBy = options.orderBy;
277
+ }
278
+ return builder;
279
+ },
280
+
281
+ /**
282
+ * This model has one of another model — for example, a user has one profile
283
+ * via `Profile.userId`.
284
+ */
285
+ hasOne<Target extends string, Field extends string>(
286
+ target: Target,
287
+ foreignKey: Field
288
+ ): RelationDef<'hasOne', Target, Field> {
289
+ return new RelationBuilder('hasOne', target, foreignKey);
290
+ },
291
+ } as const;
@@ -0,0 +1,30 @@
1
+ /**
2
+ * A model's residency: which database its rows live in. This is a sibling axis
3
+ * to `tenancy`, which instead describes how rows are isolated within a single
4
+ * database.
5
+ *
6
+ * - `tenant` — the tenant data plane. For a customer-connected database this
7
+ * is the customer's own database, and provisioning creates these
8
+ * tables there.
9
+ * - `control` — the coordination plane the engine owns: the change log,
10
+ * attribution, audit, and the like. These tables are never
11
+ * created in a customer's database.
12
+ *
13
+ * The name is `residency` rather than `plane` because "plane" already refers to
14
+ * the server's tenancy scope — organization, environment, and optionally
15
+ * project and sandbox. On the wire the serialized option is still keyed as
16
+ * `plane`, a frozen part of the wire format; only the TypeScript name differs.
17
+ *
18
+ * Declaring this boundary lets provisioning derive what a customer's database
19
+ * receives — the models whose residency is `tenant` — rather than hand-coding
20
+ * that list. Defaults to `tenant`.
21
+ */
22
+
23
+ import { z } from 'zod';
24
+
25
+ export const residencySchema = z.enum(['tenant', 'control']);
26
+ export type ModelResidency = z.infer<typeof residencySchema>;
27
+
28
+ /** Default residency for a model that doesn't declare one — the tenant data plane. */
29
+ export const DEFAULT_RESIDENCY: ModelResidency = 'tenant';
30
+