@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,444 @@
1
+ /**
2
+ * The request contract for `ablo.<model>` — the option and parameter shapes a
3
+ * caller passes to a read, a write, or a claim.
4
+ *
5
+ * These types describe the *change or the query being requested*, never a local
6
+ * copy of the rows it touches, so they sit in the settlement core and are shared
7
+ * by every transport and every caller (ADR 0013 §4, ADR 0016). The factory that
8
+ * binds them to reactive model instances — `createModelProxy` — stays with the
9
+ * reactive consumer, along with `ModelOperations` and `ModelCollaboration`,
10
+ * which reference the live participant handle.
11
+ */
12
+
13
+ import type { ModelScope } from '../types/index.js';
14
+ import type { ResolveClaimMeta } from '../types/global.js';
15
+ import type { AbloClaimedError } from '../errors.js';
16
+ import type { StaleNotification, TrackDependency } from '../coordination/schema.js';
17
+ import type { FieldRef, FieldSelector } from '../schema/fieldRef.js';
18
+ import type { BaseModelFields } from '../schema/schema.js';
19
+ import type { ClaimHeartbeatPlan } from '../coordination/claimHeartbeatLoop.js';
20
+ import type { Duration } from '../utils/duration.js';
21
+ import type {
22
+ Claim,
23
+ ClaimHeartbeat,
24
+ ClaimHeartbeatOptions,
25
+ HeldClaim,
26
+ HeldLease,
27
+ Peer,
28
+ } from '../types/streams.js';
29
+ import type { MutationOptions } from './mutationOptions.js';
30
+ import type { LoadWhere } from './where.js';
31
+
32
+ /**
33
+ * A lifecycle filter, accepted either as the enum or as its bare string. The
34
+ * string arm is a template projection of the enum rather than a second list, so
35
+ * a scope added to {@link ModelScope} is spellable both ways at once.
36
+ */
37
+ export type ModelListScope = ModelScope | `${ModelScope}`;
38
+
39
+ /**
40
+ * Options for `track({ id })` — register a durable premise on a row.
41
+ *
42
+ * Derived from the wire's row-form {@link TrackDependency} rather than restated
43
+ * beside it: the caller names the row and, optionally, the watermark it is
44
+ * premised on, while `model` comes from the proxy the call was made on. Adding
45
+ * a field to the dependency therefore reaches this surface automatically, and
46
+ * removing one stops the callers compiling.
47
+ *
48
+ * On `readAt`: omit it to baseline at the current head — "tell me about
49
+ * anything from here on". Pass a known watermark (the one you read the row at)
50
+ * to also catch a change that landed between that read and this call.
51
+ */
52
+ export type ModelTrackParams = Omit<
53
+ Extract<TrackDependency, { model: string }>,
54
+ 'model'
55
+ >;
56
+
57
+ /** The result of `track({ id })`. */
58
+ export interface ModelTrackResult {
59
+ /**
60
+ * Tracks that had ALREADY fired at registration time — a change matching an
61
+ * open track that landed before this call. Present only when something was
62
+ * already stale; the ongoing signal arrives on the receipts of later commits.
63
+ */
64
+ notifications?: StaleNotification[];
65
+ }
66
+
67
+ /** Options for the synchronous local-graph reads `local.list` and `onChange` —
68
+ * a JavaScript `filter`, an equality `where`, and a lifecycle `state`. This is
69
+ * the local, reactive axis; contrast {@link ServerReadOptions}, the
70
+ * asynchronous server axis. */
71
+ export interface LocalReadOptions<T> {
72
+ where?: Partial<T>;
73
+ /** Arbitrary local predicate. Applied after `where`. */
74
+ filter?: (entity: T) => boolean;
75
+ orderBy?: { [K in keyof T]?: 'asc' | 'desc' };
76
+ limit?: number;
77
+ offset?: number;
78
+ /** Lifecycle filter — `live` (the default), `archived`, or `all`. Named
79
+ * `state` so it does not collide with the sync-group `scope`. */
80
+ state?: ModelListScope;
81
+ }
82
+
83
+ export type LocalCountOptions<T> = Pick<
84
+ LocalReadOptions<T>,
85
+ 'where' | 'filter' | 'state'
86
+ >;
87
+
88
+ /** Options for the asynchronous server reads `get` and `list` — the
89
+ * operator `where` filter, `type`, and `expand`. This is the server axis;
90
+ * contrast {@link LocalReadOptions}, the local, reactive axis. */
91
+ export interface ServerReadOptions<T> {
92
+ /**
93
+ * Filter for the lookup. Accepts two forms:
94
+ * - object form — `{ name: 'foo' }`: equality, where an array value means `IN`
95
+ * - tuple form — `[['name', 'ILIKE', '%Goldman%']]`: explicit operators
96
+ *
97
+ * See {@link LoadWhere} for the full grammar. The wire protocol matches on AND
98
+ * only; for OR semantics, run two `list()` calls and union the results.
99
+ */
100
+ where?: LoadWhere<T>;
101
+ orderBy?: { [K in keyof T]?: 'asc' | 'desc' };
102
+ limit?: number;
103
+ /**
104
+ * `complete` waits for the server. `unknown` returns whatever is local
105
+ * immediately and refreshes in the background.
106
+ */
107
+ type?: 'complete' | 'unknown';
108
+ /**
109
+ * Schema-declared relation names to hydrate alongside the primary
110
+ * rows. The server's compiler resolves each name via the schema's
111
+ * relation metadata (`relation.belongsTo` / `relation.hasMany`)
112
+ * and emits the JOIN.
113
+ */
114
+ expand?: readonly string[];
115
+ }
116
+
117
+ /** Options for the single-row async server read `get({ id })`. A subset of
118
+ * {@link ServerReadOptions} — `where`/`limit`/`orderBy` are fixed by the id. */
119
+ export type ServerRetrieveOptions = Pick<ServerReadOptions<unknown>, 'type' | 'expand'>;
120
+ /** Canonical point-lookup options; retained separately for compatibility naming. */
121
+ export type ServerGetOptions = ServerRetrieveOptions;
122
+ /**
123
+ * A claimable part of a row is a field declared by that model's Zod shape.
124
+ *
125
+ * There is deliberately no `string` escape hatch here. A claim participates in
126
+ * write safety, so an invented field would create a lease that guards nothing.
127
+ * Custom coordination parts remain available on the low-level coordination
128
+ * API through {@link ClaimPart}; the model resource is the schema-bound surface
129
+ * and therefore accepts only schema fields.
130
+ */
131
+ export type ClaimableFields<T> = Omit<T, keyof BaseModelFields>;
132
+
133
+ export type ClaimField<T> = FieldRef<
134
+ string,
135
+ Extract<keyof ClaimableFields<T>, string>
136
+ >;
137
+
138
+ /**
139
+ * The options on a claim, in four axes — each answers one question, and no
140
+ * member sits in two:
141
+ *
142
+ * - **what you claim** — `fields`, selected from the model's Zod shape;
143
+ * narrowed below the row;
144
+ * - **what others see** — `description` / `meta`, the presence half;
145
+ * - **how you wait** — `queue` / `maxQueueDepth` / `waitTimeoutMs` /
146
+ * `signal`, admission to the line;
147
+ * - **how long you hold** — `ttl` / `heartbeat`, the lease.
148
+ */
149
+ export interface ClaimTargetOptions<T = Record<string, unknown>> {
150
+ // ── What you claim — the target, narrowed below the row ────────────────
151
+
152
+ /**
153
+ * Narrow the claim to Zod-declared fields of the row. Return one field
154
+ * directly or an array for several: `fields: (task) => task.status`.
155
+ *
156
+ * Exclusion follows the target: claims on the same row conflict only where
157
+ * their sets intersect, so a holder on `['title']` and a holder on
158
+ * `['status']` proceed concurrently, while a whole-row claim (no target)
159
+ * conflicts with both. The per-field claimed-state badge is a consequence of
160
+ * the narrower lease, not its purpose.
161
+ */
162
+ fields?: FieldSelector<ClaimableFields<T>>;
163
+
164
+ // ── What others see — the presence half ────────────────────────────────
165
+
166
+ /** Peer-visible description of the work being performed — the sentence a
167
+ * contending participant reads to decide whether to wait, work elsewhere, or
168
+ * move on. Defaults to `'editing'`. The same field on every claim surface. */
169
+ description?: string;
170
+ /**
171
+ * App-defined structured metadata, carried verbatim to every participant
172
+ * that observes the claim. Declare its shape once, on `Register`'s
173
+ * `ClaimMeta` slot, and what you write here is what every reader is typed to
174
+ * find — the write side and the read side are the same declaration.
175
+ */
176
+ meta?: ResolveClaimMeta;
177
+
178
+ // ── How you wait — admission to the line ───────────────────────────────
179
+
180
+ /**
181
+ * Behavior under contention. `true` (the default) queues behind the current
182
+ * holder and resolves once the row is yours. `false` is fail-fast: if another
183
+ * participant already holds the row, it rejects immediately with
184
+ * {@link AbloClaimedError} instead of waiting. Use `false` to deduplicate
185
+ * distributed work ("if someone else has this job, skip it"), where waiting
186
+ * would mean double-processing.
187
+ */
188
+ queue?: boolean;
189
+ /**
190
+ * Backpressure: queue, but not behind too many others. If the server reports a
191
+ * position at or beyond `maxQueueDepth` when the client joins the line, it
192
+ * rejects with {@link AbloClaimedError} (`queue_too_deep`) instead of waiting.
193
+ * Omit to wait however deep the queue is.
194
+ */
195
+ maxQueueDepth?: number;
196
+ /**
197
+ * Cap on how long a queued claim waits for its grant before rejecting with
198
+ * {@link AbloClaimedError} (`grant_timeout`). Omit to wait as long as the
199
+ * line takes. Same meaning on both transports; on the stateless HTTP client
200
+ * a timed-out wait also leaves the line, so the slot is not left to expire.
201
+ */
202
+ waitTimeoutMs?: number;
203
+ /**
204
+ * Abort a pending wait from outside — the same signal that cancels
205
+ * everything else in the program, so a cancelled agent task or an unmounted
206
+ * component takes its queued claim with it. Rejects with
207
+ * {@link AbloClaimedError} (`claim_wait_aborted`); over HTTP the abort also
208
+ * leaves the line. Ignored once the grant has arrived — a held lease is
209
+ * never torn down by a late abort; release it instead.
210
+ */
211
+ signal?: AbortSignal;
212
+
213
+ // ── How long you hold — the lease ──────────────────────────────────────
214
+
215
+ /** Crash-cleanup TTL — the claim auto-releases if the holder dies. */
216
+ ttl?: Duration;
217
+ /**
218
+ * Keep the lease alive for the duration of real work by beating on a
219
+ * cadence — the pattern for background workers whose task outlives the
220
+ * crash-cleanup TTL. `true` beats every third of the TTL (so two beats can
221
+ * fail before the lease is at risk, and a crashed worker's lease still
222
+ * lapses within one beat window); a duration such as `'2m'` sets the
223
+ * cadence explicitly; the structured {@link ClaimHeartbeatPlan} carries the
224
+ * cadence and both callbacks in one place —
225
+ * `heartbeat: { every: '2m', onBeat, onLost }`. The loop stops on release.
226
+ * You can also beat manually with `held.heartbeat()`.
227
+ */
228
+ heartbeat?: true | Duration | ClaimHeartbeatPlan;
229
+ }
230
+
231
+ /** Options for `claim({ id, ... })`. */
232
+ export interface ClaimParams<T = Record<string, unknown>>
233
+ extends ClaimTargetOptions<T> {
234
+ readonly id: string;
235
+ }
236
+
237
+ export interface ClaimLookupParams<T = Record<string, unknown>> {
238
+ readonly id: string;
239
+ }
240
+
241
+ export interface ClaimReorderParams<T = Record<string, unknown>>
242
+ extends ClaimLookupParams<T> {
243
+ readonly order: readonly Claim[];
244
+ }
245
+
246
+ /**
247
+ * A claim handle: the held entity data plus an explicit release hook.
248
+ *
249
+ * ```ts
250
+ * const claim = await ablo.weatherReports.claim({
251
+ * id: 'report_stockholm',
252
+ * description: 'Fetching current weather before writing the forecast.',
253
+ * });
254
+ * try {
255
+ * await ablo.weatherReports.update({
256
+ * id: claim.target.id,
257
+ * data: { status: 'ready' },
258
+ * claim,
259
+ * });
260
+ * } finally {
261
+ * await claim.release();
262
+ * }
263
+ * ```
264
+ *
265
+ * `data` is a snapshot taken after the lease is held. Write through the flat
266
+ * `ablo.<model>.update({ id, data, claim })` verb — the handle carries the
267
+ * lease id and snapshot watermark for attribution and stale-write protection.
268
+ */
269
+ // The canonical claim handle types live in `../types/streams`. They are
270
+ // re-exported here so existing import paths keep working.
271
+ export type { Claim, ClaimHeartbeat, ClaimHeartbeatOptions, HeldClaim, HeldLease };
272
+
273
+ export type ClaimOptions<T = Record<string, unknown>> = ClaimTargetOptions<T>;
274
+
275
+ /**
276
+ * The coordination surface for a model, exposed as a callable namespace.
277
+ *
278
+ * Most callers do not need this namespace directly. Put `claim: { ... }` on a
279
+ * write and the SDK acquires/releases around that one mutation:
280
+ *
281
+ * ```ts
282
+ * await ablo.tasks.update({
283
+ * id,
284
+ * data: { title },
285
+ * claim: {
286
+ * fields: (task) => task.title,
287
+ * description: 'Renaming the task to match the project brief.',
288
+ * },
289
+ * });
290
+ * ```
291
+ *
292
+ * Use `claim({ id, ... })` when a tool spans multiple writes and needs one
293
+ * handle. `state`, `queue`, and `reorder` are coordination reads/scheduler
294
+ * controls for UI and operators.
295
+ */
296
+ /**
297
+ * The coordination reads and scheduler controls on a claim namespace, in their
298
+ * reactive (synchronous) form: `state`, `queue`, and `reorder` resolve against
299
+ * the local pool with no round-trip, which is what lets a reactive selector read
300
+ * coordination state inside a React render.
301
+ *
302
+ * This is the single source of truth for the claim read surface. The stateless
303
+ * HTTP client exposes the awaited projection of exactly these methods (derived
304
+ * via {@link AwaitedClaimMethod}), so the two transports cannot drift — change a
305
+ * signature here and the HTTP surface follows.
306
+ */
307
+ export interface ClaimReadApi<T = Record<string, unknown>> {
308
+ /**
309
+ * Current holder for a row, or `null` when free. Use this for UI badges and
310
+ * preflight checks, not for the normal write path.
311
+ *
312
+ * `target.meta` reads as the shape declared on `Register`'s `ClaimMeta`
313
+ * slot, so no read of it needs a guard. Pass `M` only to override that
314
+ * declaration for one call — `state<OtherMeta>({ id })` — which a program
315
+ * carrying more than one meta shape occasionally needs.
316
+ */
317
+ state<M = ResolveClaimMeta>(
318
+ params: ClaimLookupParams<T>,
319
+ ): Claim<Record<string, unknown>, M> | null;
320
+
321
+ /**
322
+ * Every holder of a row, not just one.
323
+ *
324
+ * A claim that names a narrower target — a `path`, a `range`, a `field` or
325
+ * `fields` — excludes only what it overlaps, so several participants hold
326
+ * disjoint parts of one row at the same time and
327
+ * {@link ClaimReadApi.state} answers with one of them. This is the read
328
+ * behind a per-region UI: a rail for each claimed block, a chip for each
329
+ * participant. Synchronous and reactive off the same snapshot as `state`,
330
+ * so a render reads it inline.
331
+ *
332
+ * Own claim first when this client holds one, then peers. Takes the same
333
+ * `meta` parameter as {@link ClaimReadApi.state}.
334
+ */
335
+ list<M = ResolveClaimMeta>(
336
+ params: ClaimLookupParams<T>,
337
+ ): {
338
+ readonly object: 'list';
339
+ readonly data: readonly Claim<Record<string, unknown>, M>[];
340
+ };
341
+
342
+ /**
343
+ * FIFO wait line behind the current holder. Advanced: useful for operator
344
+ * UIs and schedulers. Takes the same `meta` parameter as
345
+ * {@link ClaimReadApi.state}.
346
+ */
347
+ queue<M = ResolveClaimMeta>(
348
+ params: ClaimLookupParams<T>,
349
+ ): {
350
+ readonly object: 'list';
351
+ readonly data: readonly Claim<Record<string, unknown>, M>[];
352
+ };
353
+
354
+ /**
355
+ * Re-rank the wait line. Advanced and permission-gated.
356
+ */
357
+ reorder(params: ClaimReorderParams<T>): void;
358
+
359
+ /** Release a manual claim handle early. Single-write claims auto-release. */
360
+ release(params: ClaimLookupParams<T> | Claim<T>): Promise<void>;
361
+ }
362
+
363
+ /**
364
+ * The awaited form of a claim method: a synchronous return becomes a `Promise`,
365
+ * an already-async one (`release`) is left untouched. Used to derive the
366
+ * stateless HTTP claim surface from the reactive {@link ClaimReadApi}.
367
+ */
368
+ export type AwaitedClaimMethod<F> = F extends (...args: infer A) => infer R
369
+ ? R extends Promise<unknown>
370
+ ? (...args: A) => R
371
+ : (...args: A) => Promise<R>
372
+ : F;
373
+
374
+ export interface ClaimApi<
375
+ T,
376
+ Fields = T,
377
+ > extends ClaimReadApi<T> {
378
+ /**
379
+ * The try-claim: `queue: false` treats a held target as an expected outcome,
380
+ * not an error — it resolves `null`, so claim-or-skip dedup reads
381
+ * `if (!claim) return` with no try/catch. Who holds it, and why, stays
382
+ * readable through `claim.state({ id })`. (A write to a row someone else
383
+ * holds still rejects with `entity_claimed` — a failed write is an error;
384
+ * a declined try is not.)
385
+ */
386
+ (params: ClaimParams<Fields> & { queue: false }): Promise<HeldClaim<T> | null>;
387
+ /**
388
+ * Takes a claim and returns an explicit held-work handle — a {@link HeldClaim}.
389
+ * `data`, `release`, `revoke`, and the async disposer are always present (this
390
+ * call re-reads the row under the lease), so callers can use `handle.data`
391
+ * directly and `await using` works without a guard.
392
+ */
393
+ (params: ClaimParams<Fields>): Promise<HeldClaim<T>>;
394
+ /** The row-free try-claim — `null` when the key is already held. */
395
+ (id: string, opts: ClaimOptions<Fields> & { queue: false }): Promise<HeldLease | null>;
396
+ /**
397
+ * Takes a claim by id alone, for a row that lives only in the customer's own
398
+ * database — Ablo has never seen it, so there is nothing to re-read. Returns a
399
+ * {@link HeldLease}: the same lease controls as {@link HeldClaim}
400
+ * (`release`, `revoke`, `heartbeat`, `await using`) but no `.data`. Locking a
401
+ * key you know by id is exactly this — serialize writers without first
402
+ * syncing the row into Ablo.
403
+ */
404
+ (id: string, opts?: ClaimOptions<Fields>): Promise<HeldLease>;
405
+ }
406
+
407
+ export interface ModelRetrieveParams extends ServerRetrieveOptions {
408
+ readonly id: string;
409
+ }
410
+
411
+ export interface ModelCreateParams<T, CreateInput>
412
+ extends MutationOptions {
413
+ readonly data: CreateInput;
414
+ readonly id?: string | null;
415
+ readonly claim?: Claim<T> | ClaimTargetOptions<CreateInput> | null;
416
+ }
417
+
418
+ export interface ModelUpdateParams<T, Fields = T>
419
+ extends MutationOptions {
420
+ readonly id: string;
421
+ /**
422
+ * Patch only fields declared by the model's Zod input shape. Hydrated rows
423
+ * also carry framework fields, relations, methods, and computed values; none
424
+ * of those are writable data.
425
+ */
426
+ readonly data: Partial<ClaimableFields<Fields>>;
427
+ readonly claim?: Claim<T> | ClaimTargetOptions<Fields> | null;
428
+ }
429
+
430
+ export interface ModelDeleteParams<T, Fields = T>
431
+ extends MutationOptions {
432
+ readonly id: string;
433
+ readonly claim?: Claim<T> | ClaimTargetOptions<Fields> | null;
434
+ }
435
+
436
+ /** Options for the WebSocket-only `ablo.<model>.join(ids, options?)`. */
437
+ export interface JoinOptions {
438
+ /**
439
+ * Lease TTL for the underlying presence claim — the participant
440
+ * auto-releases after this if the holder dies. Compact duration string
441
+ * (`'5m'`) or ms number, mirroring the claim `ttl`.
442
+ */
443
+ ttl?: Duration;
444
+ }
@@ -0,0 +1,66 @@
1
+ /**
2
+ * Per-call options accepted by any mutation.
3
+ *
4
+ * Every field here defines, orders, settles, or authorises *the change itself*
5
+ * — request identity, commit disposition, fencing, and the premise it rests on.
6
+ * None of it touches a local copy of rows, so it belongs with the settlement
7
+ * core rather than the reactive consumer (ADR 0013 §4, ADR 0016).
8
+ */
9
+
10
+ import type { CommitWait } from '../wire/commit.js';
11
+ import type { OnStaleMode, ReadDependency, TrackDependency } from '../coordination/schema.js';
12
+
13
+ /**
14
+ * Per-call options accepted by any mutation, passed as the last argument.
15
+ * Every field is optional; omitted fields fall back to sensible defaults.
16
+ *
17
+ * - `idempotencyKey` — when set, the server caches the response for 24 hours and
18
+ * returns the cached result on any retry using the same key. When omitted, the
19
+ * SDK generates a fresh UUID per mutation, so every call is retry-safe by
20
+ * default. `null` is retained for source compatibility and is treated like
21
+ * omission; write retries never opt out of request identity.
22
+ * - `label` — a human-readable tag recorded with the mutation for debugging, such
23
+ * as "nightly cleanup" or "user click".
24
+ */
25
+ export interface MutationOptions {
26
+ idempotencyKey?: string | null;
27
+ label?: string;
28
+ wait?: CommitWait;
29
+ readAt?: number | null;
30
+ onStale?: OnStaleMode | null;
31
+ /**
32
+ * The fencing token (Option B) of the held claim this write belongs to. The
33
+ * server validates it against the entity's persisted high-water and rejects a
34
+ * stale token. Sourced from the claim handle, never set by hand.
35
+ */
36
+ fenceToken?: number | null;
37
+ /** The id (or `{ id }`) of the claim this write belongs to. This is the
38
+ * low-level reference the commit carries so the write is attributed to a claim
39
+ * and can pass the holder's own lock. It is distinct from the `claim` handle on
40
+ * the model write parameters, which is the higher-level object you usually pass. */
41
+ claimRef?: string | { readonly id: string } | null;
42
+ /**
43
+ * The batch premise — the answer to "did anything I looked at change?" Each
44
+ * entry is a row (`{ model, id, readAt, fields? }`) or a sync group
45
+ * (`{ group, readAt }`) that this write was premised on. The server checks
46
+ * that none of them moved since their `readAt` and applies the entry's
47
+ * `onStale` behavior to the whole batch. This is distinct from the per-operation
48
+ * `readAt`, which guards only the row being written.
49
+ *
50
+ * See `packages/ablo/docs/concurrency-convention.md` (§3 the two
51
+ * premises, §4 the batch premise) for the governing convention.
52
+ */
53
+ reads?: ReadDependency[] | null;
54
+ /**
55
+ * Durable premises — what this write (or the record it produces) should
56
+ * keep watching. Unlike `reads`, which is checked once at commit and discarded,
57
+ * each `track` entry is persisted and re-checked against every future delta; a
58
+ * later matching change opens a `StaleNotification` for the tracking participant,
59
+ * delivered at their next commit or live to a held claim. Each entry is a row
60
+ * (`{ model, id }`) or a sync group (`{ group }`), optionally pinned to a `readAt`
61
+ * baseline (defaults to this commit's watermark).
62
+ *
63
+ * See `packages/ablo/docs/groups.md` for how `track` drives propagation.
64
+ */
65
+ track?: TrackDependency[] | null;
66
+ }
@@ -0,0 +1,160 @@
1
+ /**
2
+ * The where-clause grammar carried by a filtered read.
3
+ *
4
+ * A `where` is a flat list of `[column, operator, value]` conditions combined
5
+ * with AND. The protocol carries no model-specific logic: the server compiles a
6
+ * condition against your schema, so adding a model or relation is a schema
7
+ * change rather than a server change.
8
+ *
9
+ * The `IN` operator lets you batch a read by any column, including a foreign
10
+ * key — for example, fetching every block whose `sectionId` falls in a set of ids.
11
+ *
12
+ * These types describe the *request*, not any local copy of the rows it returns,
13
+ * so they live with the settlement core rather than the reactive consumer.
14
+ */
15
+
16
+ import { z } from 'zod';
17
+
18
+ import { AbloValidationError } from '../errors.js';
19
+
20
+ /** Primitive operand types allowed in a where clause. */
21
+ export type WherePrimitive = string | number | boolean | null;
22
+
23
+ /**
24
+ * The comparison operators a {@link WhereClause} may use: equality and
25
+ * inequality, ordering, set membership (`IN` / `NOT IN`), null checks
26
+ * (`IS` / `IS NOT`), and case-sensitive or case-insensitive pattern
27
+ * matching (`LIKE`, `ILIKE`, and their negations).
28
+ */
29
+ export const whereOpSchema = z.enum([
30
+ '=',
31
+ '!=',
32
+ '<',
33
+ '<=',
34
+ '>',
35
+ '>=',
36
+ 'IN',
37
+ 'NOT IN',
38
+ 'IS',
39
+ 'IS NOT',
40
+ 'LIKE',
41
+ 'NOT LIKE',
42
+ 'ILIKE',
43
+ 'NOT ILIKE',
44
+ ]);
45
+ export type WhereOp = z.infer<typeof whereOpSchema>;
46
+
47
+ /**
48
+ * How each operator binds its operand — the classification a compiler needs
49
+ * before it can render or evaluate a condition: a scalar on the right, an array
50
+ * to expand, or a null check with no operand at all. `LIKE_OPS` is the subset
51
+ * whose operand is a pattern and therefore needs pattern validation.
52
+ *
53
+ * These live here, beside the operators, because every consumer of the grammar
54
+ * needs the same split and there is more than one consumer: a where clause is
55
+ * compiled to SQL on a hosted plane and evaluated in memory against the log on
56
+ * a source plane. Two hand-maintained copies of this split meant the same
57
+ * request could be accepted by one plane and rejected by the other — and the
58
+ * pattern-safety set existed on only one of them.
59
+ */
60
+ export const WHERE_SCALAR_OPS: ReadonlySet<WhereOp> = new Set<WhereOp>([
61
+ '=',
62
+ '!=',
63
+ '<',
64
+ '<=',
65
+ '>',
66
+ '>=',
67
+ 'LIKE',
68
+ 'NOT LIKE',
69
+ 'ILIKE',
70
+ 'NOT ILIKE',
71
+ ]);
72
+ export const WHERE_ARRAY_OPS: ReadonlySet<WhereOp> = new Set<WhereOp>(['IN', 'NOT IN']);
73
+ export const WHERE_NULL_OPS: ReadonlySet<WhereOp> = new Set<WhereOp>(['IS', 'IS NOT']);
74
+ export const WHERE_LIKE_OPS: ReadonlySet<WhereOp> = new Set<WhereOp>([
75
+ 'LIKE',
76
+ 'NOT LIKE',
77
+ 'ILIKE',
78
+ 'NOT ILIKE',
79
+ ]);
80
+
81
+ /**
82
+ * Does this operator accept this operand? The rule the sets above imply, stated
83
+ * once and thrown once.
84
+ *
85
+ * The sets were collapsed here because two copies of the split let one plane
86
+ * accept a request the other refused. The check that consumes them stayed
87
+ * duplicated — the SQL compiler and the log-plane evaluator each carried their
88
+ * own arity tests and their own wording — which leaves the same gap one step
89
+ * further along: relax `IN` in one evaluator and a request succeeds against a
90
+ * hosted plane and fails against a connected one, with no test in a position to
91
+ * notice.
92
+ *
93
+ * Returns the classification the caller needs next, so the check and the branch
94
+ * are the same statement rather than two that can disagree.
95
+ */
96
+ export function classifyWhereOperand(
97
+ op: WhereOp,
98
+ value: unknown,
99
+ ): 'null' | 'array' | 'scalar' {
100
+ if (WHERE_NULL_OPS.has(op)) {
101
+ if (value !== null) {
102
+ throw new AbloValidationError(`${op} only supports null RHS`, {
103
+ code: 'query_unsupported_operator',
104
+ });
105
+ }
106
+ return 'null';
107
+ }
108
+ if (WHERE_ARRAY_OPS.has(op)) {
109
+ if (!Array.isArray(value)) {
110
+ throw new AbloValidationError(`${op} requires an array RHS`, {
111
+ code: 'query_unsupported_operator',
112
+ });
113
+ }
114
+ return 'array';
115
+ }
116
+ if (WHERE_SCALAR_OPS.has(op)) {
117
+ if (Array.isArray(value)) {
118
+ throw new AbloValidationError(`${op} requires a scalar RHS`, {
119
+ code: 'query_unsupported_operator',
120
+ });
121
+ }
122
+ return 'scalar';
123
+ }
124
+ throw new AbloValidationError(`unsupported operator: ${op}`, {
125
+ code: 'query_unsupported_operator',
126
+ });
127
+ }
128
+
129
+ /**
130
+ * A single condition. Two supported shapes:
131
+ *
132
+ * - `[col, value]` — shortcut for `[col, '=', value]`
133
+ * - `[col, op, value]` — explicit operator
134
+ *
135
+ * The value is a single primitive for scalar operators and an array of
136
+ * primitives for IN/NOT IN.
137
+ */
138
+ export type WhereClause =
139
+ | readonly [col: string, value: WherePrimitive]
140
+ | readonly [col: string, op: WhereOp, value: WherePrimitive | readonly WherePrimitive[]];
141
+
142
+ /**
143
+ * Client-facing where shape for `load({where})` and `deleteMany({where})`.
144
+ *
145
+ * Two shapes accepted, both AND-combined:
146
+ *
147
+ * - Object form: `{ name: 'foo', orgId: '1' }` — each entry is an `=`
148
+ * clause; array values become `IN`. Ergonomic for the common case.
149
+ * - Tuple form: `[['name', 'ILIKE', '%Goldman%'], ['orgId', '1']]` —
150
+ * explicit operators (LIKE/ILIKE/<=/etc.). Matches the wire
151
+ * `WhereClause[]` 1:1, so no translation layer.
152
+ *
153
+ * The two forms compose: pass tuple form when you need an operator,
154
+ * object form otherwise. For OR semantics, run two `load()` calls and
155
+ * union client-side — keeps the protocol AND-only.
156
+ */
157
+ export type LoadWhere<T> =
158
+ | Partial<T>
159
+ | { [K in keyof T]?: T[K] | readonly T[K][] }
160
+ | readonly WhereClause[];