@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,321 @@
1
+ /**
2
+ * Field builders for schema definitions. Each helper — {@link field}.string(),
3
+ * .number(), .enum(), and so on — returns an ordinary Zod schema with a little
4
+ * sync-engine metadata attached (its type tag and whether it is indexed) plus a
5
+ * couple of chainable methods. The metadata is tucked into the schema's description
6
+ * as a JSON string so it survives `.optional()`, `.nullable()`, and `.default()`
7
+ * chaining, and {@link resolveFieldMeta} reads it back out as a {@link FieldMeta}.
8
+ *
9
+ * Usage:
10
+ * import { field } from '@abloatai/transaction/schema';
11
+ *
12
+ * const tasks = model({
13
+ * title: field.string(),
14
+ * projectId: field.string().indexed(), // fluent chain
15
+ * priority: field.number().optional(),
16
+ * status: field.enum(['todo', 'doing', 'done']),
17
+ * });
18
+ *
19
+ * Or use Zod directly (no metadata, but still works):
20
+ * import { z } from 'zod';
21
+ *
22
+ * const tasks = model({
23
+ * title: z.string(),
24
+ * });
25
+ */
26
+
27
+ import { z } from 'zod';
28
+ import { AbloValidationError } from '../errors.js';
29
+
30
+ // ── Helpers ───────────────────────────────────────────────────────────────
31
+
32
+ /** Distinguish a Zod schema from a plain object shape (ZodRawShape). */
33
+ function isZodSchema(value: unknown): value is z.ZodType {
34
+ return (
35
+ typeof value === 'object' &&
36
+ value !== null &&
37
+ '_def' in value &&
38
+ typeof (value as Record<string, unknown>)._def === 'object'
39
+ );
40
+ }
41
+
42
+ // ── Metadata types ────────────────────────────────────────────────────────
43
+
44
+ /**
45
+ * The sync-engine metadata describing one field, available at runtime through a
46
+ * model's `fields` map. The {@link field} builders attach it, and the migration
47
+ * planner, type generator, and OpenAPI generator all read it.
48
+ *
49
+ * Declared in `wire/modelShape.ts` and inferred here, not restated: this record
50
+ * crosses the wire twice — serialized into the pushed artifact, and reported
51
+ * back by `GET /api/schema` — so a second declaration would be a copy that
52
+ * drifts in whichever direction nobody is looking.
53
+ */
54
+ export type { FieldMeta } from '../wire/modelShape.js';
55
+ import type { FieldMeta } from '../wire/modelShape.js';
56
+
57
+ // ── Metadata encoding ─────────────────────────────────────────────────────
58
+ //
59
+ // We stash metadata in `.describe('__sync:{json}')` so it rides along with
60
+ // the Zod schema through `.optional()`, `.nullable()`, etc. At schema-build
61
+ // time we parse it back out into structured FieldMeta.
62
+
63
+ const META_PREFIX = '__sync:';
64
+
65
+ function encodeMeta(meta: Omit<FieldMeta, 'isOptional'>): string {
66
+ return META_PREFIX + JSON.stringify(meta);
67
+ }
68
+
69
+ function decodeMeta(description: string | undefined): Omit<FieldMeta, 'isOptional'> | null {
70
+ if (!description?.startsWith(META_PREFIX)) return null;
71
+ try {
72
+ return JSON.parse(description.slice(META_PREFIX.length));
73
+ } catch {
74
+ return null;
75
+ }
76
+ }
77
+
78
+ /**
79
+ * Extract FieldMeta from a Zod schema. Returns null if no sync-engine
80
+ * metadata is attached (e.g., raw `z.string()` usage).
81
+ *
82
+ * Walks through `.optional()` and `.nullable()` wrappers to find the
83
+ * underlying description.
84
+ */
85
+ export function getFieldMeta(schema: z.ZodType): FieldMeta | null {
86
+ let current: z.ZodType = schema;
87
+ let isOptional = false;
88
+
89
+ // Unwrap optional / nullable / default to reach the inner type
90
+ // (these are the wrappers that preserve .describe() but may hide it).
91
+ // `instanceof` keeps the narrowing typed; no `_def` digging.
92
+ const MAX_UNWRAP = 5;
93
+ for (let i = 0; i < MAX_UNWRAP; i++) {
94
+ if (current instanceof z.ZodOptional) {
95
+ isOptional = true;
96
+ current = current.unwrap() as z.ZodType;
97
+ continue;
98
+ }
99
+ if (current instanceof z.ZodNullable) {
100
+ isOptional = true;
101
+ current = current.unwrap() as z.ZodType;
102
+ continue;
103
+ }
104
+ if (current instanceof z.ZodDefault) {
105
+ // .removeDefault() — v4 deprecates in favor of .unwrap() but
106
+ // the installed @types only expose removeDefault on ZodDefault.
107
+ current = current.unwrap() as z.ZodType;
108
+ continue;
109
+ }
110
+ break;
111
+ }
112
+
113
+ // The description lives on the innermost schema we reached.
114
+ const description = current.description ?? schema.description;
115
+ const base = decodeMeta(description);
116
+ if (!base) return null;
117
+
118
+ return { ...base, isOptional };
119
+ }
120
+
121
+ /**
122
+ * Infers a {@link FieldMeta} from a plain Zod schema that carries no field-builder
123
+ * metadata — for example a bare `z.string()`. It unwraps `.optional()`,
124
+ * `.nullable()`, and `.default()` to reach the inner type, then maps that Zod type
125
+ * to a sync-engine type tag. Most callers should use {@link resolveFieldMeta}
126
+ * instead, which tries the attached metadata first and falls back to this.
127
+ */
128
+ export function inferFieldMetaFromZod(schema: z.ZodType): FieldMeta {
129
+ let current: z.ZodType = schema;
130
+ let isOptional = false;
131
+
132
+ const MAX_UNWRAP = 5;
133
+ for (let i = 0; i < MAX_UNWRAP; i++) {
134
+ if (current instanceof z.ZodOptional || current instanceof z.ZodNullable) {
135
+ isOptional = true;
136
+ current = current.unwrap() as z.ZodType;
137
+ continue;
138
+ }
139
+ if (current instanceof z.ZodDefault) {
140
+ current = current.unwrap() as z.ZodType;
141
+ continue;
142
+ }
143
+ break;
144
+ }
145
+
146
+ let type: FieldMeta['type'] = 'string';
147
+ let enumValues: readonly string[] | undefined;
148
+ if (current instanceof z.ZodString) {
149
+ type = 'string';
150
+ } else if (current instanceof z.ZodNumber) {
151
+ type = 'number';
152
+ } else if (current instanceof z.ZodBoolean) {
153
+ type = 'boolean';
154
+ } else if (current instanceof z.ZodDate) {
155
+ type = 'date';
156
+ } else if (current instanceof z.ZodEnum) {
157
+ type = 'enum';
158
+ // ZodEnum.options is the public v4 accessor for enum values.
159
+ enumValues = current.options as readonly string[];
160
+ } else if (
161
+ current instanceof z.ZodObject ||
162
+ current instanceof z.ZodArray ||
163
+ current instanceof z.ZodRecord ||
164
+ current instanceof z.ZodUnion ||
165
+ current instanceof z.ZodUnknown ||
166
+ // `z.custom<T>()` is opaque — its shape cannot be inspected — so it is treated
167
+ // as a JSON blob rather than falling through to the `'string'` default. The type
168
+ // tag drives how the runtime observes the field, and an opaque custom value
169
+ // should be tracked by reference rather than deeply.
170
+ current instanceof z.ZodCustom
171
+ ) {
172
+ type = 'json';
173
+ }
174
+
175
+ return { type, isOptional, isIndexed: false, enumValues };
176
+ }
177
+
178
+ /**
179
+ * Resolves a {@link FieldMeta} for any Zod schema, whether it was built with a
180
+ * {@link field} builder (which attaches metadata) or with plain Zod (which needs
181
+ * inference). This is the single entry point for "given a Zod field, tell me its
182
+ * sync-engine type tag and whether it is optional"; the model and query builders use
183
+ * it to populate their field maps, and the serializer reads those maps.
184
+ *
185
+ * It always returns a value and never returns null. A Zod type it does not recognize
186
+ * falls through to the `string` tag by design.
187
+ */
188
+ export function resolveFieldMeta(schema: z.ZodType): FieldMeta {
189
+ const attached = getFieldMeta(schema);
190
+ if (attached) return attached;
191
+ return inferFieldMetaFromZod(schema);
192
+ }
193
+
194
+ // ── Chainable field builders ──────────────────────────────────────────────
195
+ //
196
+ // Each builder returns the underlying Zod schema (so `z.object(shape)` still
197
+ // works) with `.indexed()` added as a chainable method. `.optional()` and
198
+ // `.nullable()` still come from Zod itself and preserve the description.
199
+
200
+ /** A Zod schema returned by a {@link field} builder — the underlying Zod type plus
201
+ * two chainable methods: `indexed()` marks the field for a database index, and
202
+ * `from(column)` overrides the physical column name it maps to. */
203
+ export type FieldBuilder<T extends z.ZodType> = T & {
204
+ indexed(): FieldBuilder<T>;
205
+ from(column: string): FieldBuilder<T>;
206
+ };
207
+
208
+ function assertColumnName(column: string): void {
209
+ if (!/^[a-zA-Z_][a-zA-Z0-9_]{0,62}$/.test(column)) {
210
+ throw new AbloValidationError(`field.from(): invalid column identifier ${JSON.stringify(column)}`, { code: 'schema_definition_invalid' });
211
+ }
212
+ }
213
+
214
+ /** Add sync-engine chain methods to a Zod schema without disturbing its type. */
215
+ function withFieldMethods<T extends z.ZodType>(
216
+ schema: T,
217
+ meta: Omit<FieldMeta, 'isOptional'>,
218
+ ): FieldBuilder<T> {
219
+ const described = schema.describe(encodeMeta(meta)) as FieldBuilder<T>;
220
+ described.indexed = () => withFieldMethods(schema, { ...meta, isIndexed: true });
221
+ described.from = (column: string) => {
222
+ assertColumnName(column);
223
+ return withFieldMethods(schema, { ...meta, column });
224
+ };
225
+ return described;
226
+ }
227
+
228
+ function buildField<T extends z.ZodType>(
229
+ schema: T,
230
+ baseMeta: Omit<FieldMeta, 'isOptional' | 'isIndexed'>,
231
+ ): FieldBuilder<T> {
232
+ return withFieldMethods(schema, { ...baseMeta, isIndexed: false });
233
+ }
234
+
235
+ export const field = {
236
+ /** Defines a text field. */
237
+ string() {
238
+ return buildField(z.string(), { type: 'string' });
239
+ },
240
+
241
+ /** Defines a numeric field. */
242
+ number() {
243
+ return buildField(z.number(), { type: 'number' });
244
+ },
245
+
246
+ /** Defines a true/false field. */
247
+ boolean() {
248
+ return buildField(z.boolean(), { type: 'boolean' });
249
+ },
250
+
251
+ /** Defines a timestamp field, represented as a JavaScript `Date`. */
252
+ date() {
253
+ return buildField(z.date(), { type: 'date' });
254
+ },
255
+
256
+ /** Defines a field constrained to a fixed set of string values. */
257
+ enum<const T extends readonly [string, ...string[]]>(values: T) {
258
+ return buildField(z.enum(values), { type: 'enum', enumValues: values });
259
+ },
260
+
261
+ /**
262
+ * Defines a JSON field, with three call shapes:
263
+ *
264
+ * ```ts
265
+ * field.json() // unknown JSON blob
266
+ * field.json(z.array(z.string())) // typed JSON with Zod schema
267
+ * field.json({ icon: z.string().default('default') }) // typed sub-properties with defaults
268
+ * ```
269
+ *
270
+ * The third form is especially handy for metadata fields. It wraps the plain
271
+ * object in `z.object()` automatically, and the model runtime adds a
272
+ * `${field}Json` getter that parses the JSON string on read, applies the Zod
273
+ * defaults, and caches the result.
274
+ *
275
+ * Example:
276
+ * ```ts
277
+ * const reports = model({
278
+ * metadata: field.json({
279
+ * icon: z.string().default('report'),
280
+ * color: z.string().default('#F59E0B'),
281
+ * summary: z.string().optional(),
282
+ * }),
283
+ * });
284
+ *
285
+ * // At runtime:
286
+ * report.metadata // raw JSON string (unchanged)
287
+ * report.metadataJson // { icon: 'report', color: '#F59E0B', summary: undefined }
288
+ * report.metadataJson.icon // 'report' (typed, with default)
289
+ * ```
290
+ */
291
+ json<T extends z.ZodType = z.ZodUnknown>(schemaOrShape?: T | z.ZodRawShape) {
292
+ let inner: z.ZodType;
293
+ if (!schemaOrShape) {
294
+ inner = z.unknown();
295
+ } else if (isZodSchema(schemaOrShape)) {
296
+ inner = schemaOrShape;
297
+ } else {
298
+ // Plain object shape → wrap in z.object() for the sub-property pattern
299
+ inner = z.object(schemaOrShape);
300
+ }
301
+ return buildField(inner, { type: 'json' });
302
+ },
303
+
304
+ /** Defines an indexed text field — shorthand for `field.string().indexed()`. */
305
+ id() {
306
+ return field.string().indexed();
307
+ },
308
+ } as const;
309
+
310
+ // ── Function form ────────────────────────────────────────────────────────
311
+
312
+ /** Marks a Zod schema as indexed so lookups on it use a database index. This is the
313
+ * standalone-function form of the `.indexed()` chain method. */
314
+ export function indexed<T extends z.ZodType>(schema: T): T {
315
+ // Try to preserve existing metadata type tag if present.
316
+ const meta = decodeMeta(schema.description);
317
+ const newMeta: Omit<FieldMeta, 'isOptional'> = meta
318
+ ? { ...meta, isIndexed: true }
319
+ : { type: 'string', isIndexed: true };
320
+ return schema.describe(encodeMeta(newMeta));
321
+ }
@@ -0,0 +1,88 @@
1
+ /**
2
+ * A reference to one field of one model — the field as a value rather than as
3
+ * a quoted name.
4
+ *
5
+ * A model is declared as Zod schemas keyed by name, so a field's name lives on
6
+ * the object key and never on the value: `model({ status: z.enum([...]) })`
7
+ * gives you nothing to point at, and every surface that needs to name a field
8
+ * has had to quote it. `fields: ['titel']` then compiles, is granted, excludes
9
+ * nobody, and leaves the write of `title` unguarded — the conflict rule
10
+ * compares names as opaque strings, so an invented one matches no other claim
11
+ * and nothing reports it.
12
+ *
13
+ * {@link Schema.fields} carries one of these per field, stamped from the key
14
+ * `defineSchema` is already holding. Referencing a field that does not exist
15
+ * stops compiling, and renaming one is a compile error at every use rather than
16
+ * a claim that quietly stops matching.
17
+ *
18
+ * An object rather than a branded string, for the reason `ClaimPart` is one: a
19
+ * brand makes a concrete schema's claim params mutually unassignable with the
20
+ * erased `SchemaRecord` view, and the react context boundary erases and
21
+ * restores exactly that way. Objects stay pairwise comparable across it, which
22
+ * a union of literal keys does not — function parameters are contravariant, so
23
+ * a claim accepting `'title' | 'status'` is not assignable to one accepting
24
+ * `string`.
25
+ *
26
+ * `model` rides along so a reference carries where it came from. Claiming
27
+ * `users.email` through `ablo.tasks` is a mistake nothing can currently see.
28
+ */
29
+ export interface FieldRef<
30
+ Model extends string = string,
31
+ Field extends string = string,
32
+ > {
33
+ /** The schema key of the model this field belongs to. */
34
+ readonly model: Model;
35
+ /** The field's own name — the key it was declared under. */
36
+ readonly field: Field;
37
+ }
38
+
39
+ /** Whether a value is a {@link FieldRef}. */
40
+ export function isFieldRef(value: unknown): value is FieldRef {
41
+ return (
42
+ typeof value === 'object' &&
43
+ value !== null &&
44
+ typeof (value as FieldRef).field === 'string' &&
45
+ typeof (value as FieldRef).model === 'string'
46
+ );
47
+ }
48
+
49
+ /** Build the reference for one declared field. */
50
+ export function fieldRef<
51
+ const Model extends string,
52
+ const Field extends string,
53
+ >(model: Model, field: Field): FieldRef<Model, Field> {
54
+ return { model, field };
55
+ }
56
+
57
+ /** The fields of one model as selectable values. */
58
+ export type FieldSelection<T> = {
59
+ readonly [K in Extract<keyof T, string>]: FieldRef<string, K>;
60
+ };
61
+
62
+ /**
63
+ * A model-bound field selector. The callback receives only the fields inferred
64
+ * from that model's Zod shape, so selection is property access rather than a
65
+ * quoted name.
66
+ */
67
+ export type FieldSelector<T> = (
68
+ fields: FieldSelection<T>,
69
+ ) =>
70
+ | FieldRef<string, Extract<keyof T, string>>
71
+ | readonly [
72
+ FieldRef<string, Extract<keyof T, string>>,
73
+ ...FieldRef<string, Extract<keyof T, string>>[],
74
+ ];
75
+
76
+ /**
77
+ * Build the lazy selector object used by model operations. A Proxy avoids
78
+ * materializing another field registry in each client; runtime authority still
79
+ * validates the selected names against the active Zod-derived model map.
80
+ */
81
+ export function fieldSelection<T>(model: string): FieldSelection<T> {
82
+ return new Proxy(Object.create(null) as FieldSelection<T>, {
83
+ get: (_target, property) => {
84
+ if (typeof property !== 'string') return undefined;
85
+ return fieldRef(model, property);
86
+ },
87
+ });
88
+ }
@@ -0,0 +1,95 @@
1
+ /**
2
+ * Generates TypeScript types from a serialized schema. Given the schema, it produces
3
+ * the source text of a `.ts` module containing one row interface per model plus an
4
+ * `AbloSchema` map, so an app is typed against the same schema the database and sync
5
+ * layer enforce. This function is pure and returns the source as a string; the
6
+ * command-line tool writes it to disk.
7
+ *
8
+ * It is the counterpart to the migration planner in {@link diffSchema}: you write one
9
+ * schema definition, push it (which migrates the database), and generate types from
10
+ * that same schema, so the types you code against, the rows the database stores, and
11
+ * the entities the sync layer moves all describe the same thing.
12
+ *
13
+ * The generated interface covers the base columns plus each declared field, with
14
+ * enums emitted as string-literal unions. Relations are not expanded here — the
15
+ * runtime SDK resolves those through its typed accessors.
16
+ */
17
+
18
+ import type { FieldMeta } from './field.js';
19
+ import { BASE_FIELDS } from './schema.js';
20
+ import type { SchemaJSON, ModelJSON } from './serialize.js';
21
+
22
+ function tsType(meta: FieldMeta): string {
23
+ switch (meta.type) {
24
+ case 'string':
25
+ return 'string';
26
+ case 'number':
27
+ return 'number';
28
+ case 'boolean':
29
+ return 'boolean';
30
+ case 'date':
31
+ // `baseFieldsSchema` uses `z.date()` and the driver hydrates timestamptz
32
+ // to Date — declared date fields match.
33
+ return 'Date';
34
+ case 'json':
35
+ return 'unknown';
36
+ case 'enum':
37
+ return meta.enumValues && meta.enumValues.length > 0
38
+ ? meta.enumValues.map((v) => `'${v.replace(/'/g, "\\'")}'`).join(' | ')
39
+ : 'string';
40
+ default:
41
+ return 'unknown';
42
+ }
43
+ }
44
+
45
+ /** A valid PascalCase TS identifier from a model's typename (or its key). */
46
+ function interfaceName(model: ModelJSON, key: string): string {
47
+ const raw = model.typename && model.typename.trim() ? model.typename : key;
48
+ const id = raw
49
+ .replace(/[^A-Za-z0-9]+/g, ' ')
50
+ .trim()
51
+ .split(/\s+/)
52
+ .map((p) => p.charAt(0).toUpperCase() + p.slice(1))
53
+ .join('');
54
+ return /^[A-Za-z_]/.test(id) ? id : `Model${id}`;
55
+ }
56
+
57
+ /** Emit a TypeScript module of row interfaces + the `AbloSchema` map. */
58
+ export function generateTypes(schema: SchemaJSON): string {
59
+ const lines: string[] = [
60
+ '// Generated by `ablo generate` — do not edit by hand.',
61
+ '// Re-run `ablo generate` after pushing a schema change.',
62
+ '',
63
+ ];
64
+
65
+ const nameByKey = new Map<string, string>();
66
+ for (const [key, model] of Object.entries(schema.models)) {
67
+ nameByKey.set(key, interfaceName(model, key));
68
+ }
69
+
70
+ for (const [key, model] of Object.entries(schema.models)) {
71
+ lines.push(`export interface ${nameByKey.get(key)!} {`);
72
+ lines.push(' id: string;');
73
+ lines.push(' createdAt: Date;');
74
+ lines.push(' updatedAt: Date;');
75
+ lines.push(' organizationId?: string;');
76
+ lines.push(' createdBy?: string;');
77
+ for (const [fieldName, meta] of Object.entries(model.fields)) {
78
+ // A model that redeclares a base column doesn't double-emit it.
79
+ if ((BASE_FIELDS as readonly string[]).includes(fieldName)) continue;
80
+ lines.push(` ${fieldName}${meta.isOptional ? '?' : ''}: ${tsType(meta)};`);
81
+ }
82
+ lines.push('}');
83
+ lines.push('');
84
+ }
85
+
86
+ // The model map — parameterize the Ablo client with this for typed access.
87
+ lines.push('export interface AbloSchema {');
88
+ for (const key of Object.keys(schema.models)) {
89
+ lines.push(` ${JSON.stringify(key)}: ${nameByKey.get(key)!};`);
90
+ }
91
+ lines.push('}');
92
+ lines.push('');
93
+
94
+ return lines.join('\n');
95
+ }