@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,221 @@
1
+ /**
2
+ * Defines how a model's rows are scoped to a tenant. Two forms live here, and the
3
+ * separation between them is deliberate:
4
+ *
5
+ * 1. The canonical form, {@link Tenancy} — a discriminated union that every
6
+ * consumer reads (provisioning and row-level security, introspection, the
7
+ * runtime, and the CLI) and the shape that crosses the wire in `ModelJSON`.
8
+ * One exhaustively switchable shape, so the type system enforces the isolation
9
+ * boundary.
10
+ * 2. The authoring form, {@link PolicyInput} — the `policy: { by }` option a
11
+ * schema author writes. The name follows SQL row-level security, where a
12
+ * policy is the rule that decides which rows a tenant may read.
13
+ * {@link resolvePolicy} converts it to the canonical {@link Tenancy} when the
14
+ * model is built, so the authoring vocabulary never reaches the wire or any
15
+ * consumer.
16
+ *
17
+ * The canonical form is an exhaustively switchable discriminated union, so the type
18
+ * system enforces the isolation boundary at every consumer. The authoring form is a
19
+ * flat object whose `by` names the choice and whose per-branch rules are checked by a
20
+ * refinement — the opt-out from tenant scoping (`{ by: 'none' }`) and the
21
+ * source-derived case (`{ by: 'source' }`) are explicit, named values rather than
22
+ * falsy flags, important because `none` makes an entire table readable across tenants.
23
+ */
24
+
25
+ import { z } from 'zod';
26
+
27
+ /** The default physical tenancy column. This is the single canonical definition of that column name. */
28
+ export const DEFAULT_ORG_COLUMN = 'organization_id';
29
+
30
+ /**
31
+ * Scopes a table's rows through a parent table, for rows that carry no tenancy
32
+ * column of their own (for example, blocks scoped through their section, report,
33
+ * and organization). This is the canonical `parent` payload; authors write the
34
+ * friendlier {@link PolicyInput} `{ by: 'parent', fk, parent }` form, which
35
+ * {@link resolvePolicy} normalizes into this.
36
+ */
37
+ export const scopedViaRefSchema = z.object({
38
+ /** Column on this table that points at the parent (for example, `'team_id'`). */
39
+ localKey: z.string().min(1),
40
+ /** Parent table name (e.g. `'team'`). */
41
+ parentTable: z.string().min(1),
42
+ /** Column on the parent that `localKey` references. Default `'id'`. */
43
+ parentKey: z.string().min(1).optional(),
44
+ /** Column on the parent holding the tenant id. Default {@link DEFAULT_ORG_COLUMN}. */
45
+ parentOrgColumn: z.string().min(1).optional(),
46
+ });
47
+ export type ScopedViaRef = z.infer<typeof scopedViaRefSchema>;
48
+
49
+ /** How a model's rows are scoped to a tenant — the canonical, wire-facing form. */
50
+ export const tenancySchema = z.discriminatedUnion('kind', [
51
+ /** Row-local tenancy column (default name `organization_id`, overridable). */
52
+ z.object({ kind: z.literal('column'), column: z.string().min(1) }),
53
+ /** Scoped through a parent table's tenancy. */
54
+ z.object({ kind: z.literal('parent'), via: scopedViaRefSchema }),
55
+ /** Not tenant-scoped (global / reference data). */
56
+ z.object({ kind: z.literal('none') }),
57
+ /**
58
+ * Scoped by the data source itself: the model carries no tenancy column, and the
59
+ * owning organization is derived from the connected source that registered it — the
60
+ * registration is the tenant boundary. This is the natural default for a
61
+ * single-tenant connected database (`ablo connect`), which holds one org's rows and
62
+ * so has no per-row `organization_id` to read. Carries no payload for the same
63
+ * reason `none` does: the binding lives in the source registration, not the model.
64
+ */
65
+ z.object({ kind: z.literal('source') }),
66
+ ]);
67
+ export type Tenancy = z.infer<typeof tenancySchema>;
68
+
69
+ /**
70
+ * The authoring form of tenancy — what a schema author writes as the model's
71
+ * `policy` option. The name follows SQL row-level security, where a policy is the
72
+ * rule that decides which rows a tenant may read.
73
+ *
74
+ * The four choices `by` can take:
75
+ *
76
+ * - `{ by: 'column' }` — a row-local tenancy column (the default). `column`
77
+ * overrides the name (default {@link DEFAULT_ORG_COLUMN}).
78
+ * - `{ by: 'parent', fk, parent }` — inherit tenancy through a foreign key when
79
+ * this table has no tenancy column of its own. `parentKey` (default `'id'`) and
80
+ * `parentTenantColumn` (default {@link DEFAULT_ORG_COLUMN}) are optional overrides.
81
+ * - `{ by: 'source' }` — derive the organization from the connected source that
82
+ * registered the model, for a single-tenant connected database that carries no
83
+ * `organization_id` column. The registration is the tenant boundary.
84
+ * - `{ by: 'none' }` — genuinely global or reference data. This makes the whole
85
+ * table readable across tenants, so it is correct only for tables that have no tenant.
86
+ *
87
+ * The runtime schema is one flat object rather than a discriminated union: `by`
88
+ * selects the branch, and the {@link https://zod.dev | superRefine} pass enforces
89
+ * the per-branch field rules (`parent` requires `fk` and `parent`; the other three
90
+ * take no branch fields). The exported {@link PolicyInput} type is hand-written as a
91
+ * precise union so the compiler still requires the right fields per `by` — the flat
92
+ * schema validates at runtime, the union guides at author time, and the type guard
93
+ * below keeps the two from drifting.
94
+ */
95
+ export const policyInputSchema = z
96
+ .object({
97
+ by: z.enum(['column', 'parent', 'none', 'source']),
98
+ /** `by: 'column'` — override the physical tenancy column name. Default {@link DEFAULT_ORG_COLUMN}. */
99
+ column: z.string().min(1).optional(),
100
+ /** `by: 'parent'` — column on this table that points at the parent (for example, `'sectionId'`). */
101
+ fk: z.string().min(1).optional(),
102
+ /** `by: 'parent'` — parent table name (e.g. `'sections'`). */
103
+ parent: z.string().min(1).optional(),
104
+ /** `by: 'parent'` — column on the parent that `fk` references. Default `'id'`. */
105
+ parentKey: z.string().min(1).optional(),
106
+ /** `by: 'parent'` — column on the parent holding the tenant id. Default {@link DEFAULT_ORG_COLUMN}. */
107
+ parentTenantColumn: z.string().min(1).optional(),
108
+ })
109
+ .superRefine((policy, ctx) => {
110
+ if (policy.by === 'parent') {
111
+ if (!policy.fk) {
112
+ ctx.addIssue({
113
+ code: z.ZodIssueCode.custom,
114
+ path: ['fk'],
115
+ message:
116
+ "A `by: 'parent'` policy needs `fk` — the column on this table that points at the parent row whose tenancy it inherits.",
117
+ });
118
+ }
119
+ if (!policy.parent) {
120
+ ctx.addIssue({
121
+ code: z.ZodIssueCode.custom,
122
+ path: ['parent'],
123
+ message:
124
+ "A `by: 'parent'` policy needs `parent` — the name of the parent table this table is scoped through.",
125
+ });
126
+ }
127
+ }
128
+ // A `column` policy may carry `column`; the parent fields belong only to `parent`.
129
+ // Flag a field that landed on the wrong branch so a typo doesn't silently no-op.
130
+ const parentOnly = ['fk', 'parent', 'parentKey', 'parentTenantColumn'] as const;
131
+ if (policy.by !== 'parent') {
132
+ for (const field of parentOnly) {
133
+ if (policy[field] !== undefined) {
134
+ ctx.addIssue({
135
+ code: z.ZodIssueCode.custom,
136
+ path: [field],
137
+ message: `\`${field}\` only applies to a \`by: 'parent'\` policy; remove it or set \`by: 'parent'\`.`,
138
+ });
139
+ }
140
+ }
141
+ }
142
+ if (policy.by !== 'column' && policy.column !== undefined) {
143
+ ctx.addIssue({
144
+ code: z.ZodIssueCode.custom,
145
+ path: ['column'],
146
+ message: "`column` only applies to a `by: 'column'` policy; remove it or set `by: 'column'`.",
147
+ });
148
+ }
149
+ });
150
+
151
+ /**
152
+ * The precise authoring type. Hand-written rather than inferred from
153
+ * {@link policyInputSchema} so the compiler enforces the per-branch fields the flat
154
+ * runtime schema can only check at parse time — an author writing `{ by: 'parent' }`
155
+ * gets a type error for the missing `fk`/`parent`, not a runtime one.
156
+ */
157
+ export type PolicyInput =
158
+ | { by: 'column'; column?: string }
159
+ | { by: 'parent'; fk: string; parent: string; parentKey?: string; parentTenantColumn?: string }
160
+ | { by: 'source' }
161
+ | { by: 'none' };
162
+
163
+ // Drift guard, both directions. Assignability one way only would let the schema
164
+ // grow a fifth `by` value that no authoring branch can reach: the runtime would
165
+ // accept it while `resolvePolicy`'s switch below never saw it. Pinning the
166
+ // discriminants in both directions makes either side's addition a compile error.
167
+ type _PolicyInputMatchesSchema = PolicyInput extends z.input<typeof policyInputSchema> ? true : never;
168
+ type _SchemaByMatchesPolicyInput =
169
+ z.input<typeof policyInputSchema>['by'] extends PolicyInput['by'] ? true : never;
170
+ const _policyInputAssignable: [_PolicyInputMatchesSchema, _SchemaByMatchesPolicyInput] = [
171
+ true,
172
+ true,
173
+ ];
174
+ void _policyInputAssignable;
175
+
176
+ /**
177
+ * Normalizes the authoring {@link PolicyInput} into the canonical {@link Tenancy}.
178
+ * Called once, when the model is built, so that `ModelDef`, `ModelJSON`, and every
179
+ * consumer see only the canonical union. Omitting `policy` defaults to a row-local
180
+ * `organization_id` column.
181
+ */
182
+ export function resolvePolicy(input?: PolicyInput): Tenancy {
183
+ if (!input) return { kind: 'column', column: DEFAULT_ORG_COLUMN };
184
+ switch (input.by) {
185
+ case 'column':
186
+ return { kind: 'column', column: input.column ?? DEFAULT_ORG_COLUMN };
187
+ case 'parent':
188
+ return {
189
+ kind: 'parent',
190
+ via: {
191
+ localKey: input.fk,
192
+ parentTable: input.parent,
193
+ parentKey: input.parentKey,
194
+ parentOrgColumn: input.parentTenantColumn,
195
+ },
196
+ };
197
+ case 'source':
198
+ return { kind: 'source' };
199
+ case 'none':
200
+ return { kind: 'none' };
201
+ }
202
+ }
203
+
204
+ /**
205
+ * Reads the canonical {@link Tenancy} off an already-built model definition (or a
206
+ * parsed `ModelJSON`), defaulting to a row-local `organization_id` column when it is
207
+ * absent.
208
+ *
209
+ * This is the read-side helper. Consumers — provisioning and row-level security, the
210
+ * membership resolver, DDL generation, and the CLI — call it to get a model's
211
+ * tenancy without re-deriving the default each time. It is not the authoring
212
+ * normalizer; that is {@link resolvePolicy}.
213
+ */
214
+ export function resolveTenancy(def: { tenancy?: Tenancy }): Tenancy {
215
+ return def.tenancy ?? { kind: 'column', column: DEFAULT_ORG_COLUMN };
216
+ }
217
+
218
+ /** The physical tenancy column for a column-scoped model, else `null`. */
219
+ export function tenancyColumn(t: Tenancy): string | null {
220
+ return t.kind === 'column' ? t.column : null;
221
+ }
@@ -0,0 +1,203 @@
1
+ /**
2
+ * `@abloatai/transaction/server` — the `DataAdapter` storage contract.
3
+ *
4
+ * A `DataAdapter` is the boundary between the sync engine and a database. The
5
+ * engine asks it to do three things — `read` canonical rows, `commit` a change,
6
+ * and `sync` the change log — and expects nothing beyond that. Everything
7
+ * higher up, such as proposing a change or resolving a conflict, is handled
8
+ * before the adapter is ever called.
9
+ *
10
+ * This module declares the contract and the value types that travel through it;
11
+ * you supply the implementation for your own database. The reference Postgres
12
+ * implementation ships separately, because it carries a SQL driver and raw
13
+ * queries that have no place in this browser-safe build.
14
+ *
15
+ * Every shape here builds on {@link Row}, the single canonical form of a
16
+ * database row that the rest of the engine reads and writes.
17
+ */
18
+
19
+ import type {
20
+ SourceListQuery,
21
+ SourceOperation,
22
+ SourceRequestContext,
23
+ } from '../source/index.js';
24
+ import type { ServerSyncDelta } from '../wire/delta.js';
25
+ import type { BootstrapModel } from './readConfig.js';
26
+ import type { CommitContext, CommitExecutionResult } from './commit.js';
27
+ import type { StorageMode } from './storageMode.js';
28
+
29
+ /**
30
+ * A canonical database row: one record, keyed by column name. The value type is
31
+ * `unknown` by design, not `any` — columns arrive as JSON or in whatever form
32
+ * the driver hands back, so a caller must narrow a value before using it. Reach
33
+ * for this type wherever a row is passed around; it is the one name for that
34
+ * shape, and a later schema-typed `read<T>()` can specialize it to a concrete
35
+ * model without changing any call site.
36
+ */
37
+ export type Row = Record<string, unknown>;
38
+
39
+ // ── read results ───────────────────────────────────────────────────────────
40
+
41
+ /**
42
+ * The result of a {@link Row} read. Its two shapes mirror the two kinds of
43
+ * {@link ReadRequest}:
44
+ * - `bootstrap`: a full load, returned as a map from model name to its rows.
45
+ * - `query`: the rows of a single filtered query.
46
+ */
47
+ export type ReadResult =
48
+ | {
49
+ readonly kind: 'bootstrap';
50
+ /** model name → its rows. Empty models are omitted. */
51
+ readonly models: Record<string, Row[]>;
52
+ /** Models whose read failed (partial success), if any. */
53
+ readonly failedModels?: string[];
54
+ /**
55
+ * Present when a paged read (`ReadRequest.page`) stopped at its row
56
+ * limit with rows remaining: pass it back as the next page's cursor.
57
+ * Absent on the final page and on unpaged reads.
58
+ */
59
+ readonly nextCursor?: string;
60
+ }
61
+ | {
62
+ readonly kind: 'query';
63
+ readonly rows: readonly Row[];
64
+ };
65
+
66
+ // ── sync ─────────────────────────────────────────────────────────────────────
67
+
68
+ /**
69
+ * Where a `sync` call resumes: the client's last-seen position in the
70
+ * `sync_deltas` change log. The cursor carries only that position. Everything
71
+ * else a sync needs — the organization, the sync groups, the largest gap it
72
+ * will stream — is bound onto the adapter when it is resolved, so a client can
73
+ * never ask to read an organization other than its own. A `lastSyncId` of zero
74
+ * or less means "no position yet", which `sync` answers with `needsFullRead`.
75
+ */
76
+ export interface SyncCursor {
77
+ readonly lastSyncId: number;
78
+ }
79
+
80
+ // ── capabilities ─────────────────────────────────────────────────────────────
81
+
82
+ export interface DataAdapterCapabilities {
83
+ /** The backend can dry-run a change without committing it. */
84
+ readonly propose?: boolean;
85
+ /** `commit` is atomic (all-or-nothing) across the change's operations. */
86
+ readonly transactions?: boolean;
87
+ /** Changes fan out in real time (vs poll-only). */
88
+ readonly realtime?: boolean;
89
+ /** The backend can be introspected for its schema. */
90
+ readonly schemaIntrospection?: boolean;
91
+ }
92
+
93
+ // ── proposal (capability-gated) ───────────────────────────────────────────────
94
+
95
+ /** Result of a dry-run proposal (only adapters with `capabilities.propose`). */
96
+ export interface ProposalResult {
97
+ readonly ok: boolean;
98
+ readonly conflicts?: readonly {
99
+ readonly model: string;
100
+ readonly id: string;
101
+ readonly reason: string;
102
+ }[];
103
+ readonly rows?: readonly Row[];
104
+ }
105
+
106
+ // ── read request ───────────────────────────────────────────────────────────
107
+
108
+ /**
109
+ * A request for canonical rows, in one of two shapes:
110
+ * - `bootstrap`: the full-load reader — every enabled model's rows at once.
111
+ * - `query`: a single filtered query against one model, used by the live
112
+ * `/sync/query` path.
113
+ *
114
+ * A `query` carries its own execution as the `runHosted` closure, the same way
115
+ * a {@link ChangeSet} carries its write. This lets the adapter decide how to
116
+ * answer the request — a data source runs the customer's `list`, a hosted
117
+ * database runs the closure — without the query engine itself having to live
118
+ * inside the adapter.
119
+ */
120
+ export type ReadRequest =
121
+ | {
122
+ readonly kind: 'bootstrap';
123
+ readonly models: readonly BootstrapModel[];
124
+ readonly requestedModels?: readonly string[];
125
+ readonly scope?: SourceRequestContext;
126
+ /**
127
+ * Keyset pagination for a SINGLE-model read (`requestedModels` names
128
+ * exactly one model): return at most `limit` rows, starting after the
129
+ * row whose id equals `cursor`. The result carries `nextCursor` while
130
+ * rows remain. Ignored for multi-model reads and by adapters whose
131
+ * backend pages upstream on its own.
132
+ */
133
+ readonly page?: { readonly cursor?: string; readonly limit: number };
134
+ }
135
+ | {
136
+ readonly kind: 'query';
137
+ readonly model: string;
138
+ /** Source-side model name, when it differs from `model`. */
139
+ readonly sourceModel?: string;
140
+ /** `__typename` stamped on each returned row. */
141
+ readonly typename: string;
142
+ readonly query: SourceListQuery;
143
+ readonly scope?: SourceRequestContext;
144
+ /** Runs the query against a hosted database: compile, take the tenant pool, apply row-level security, unpack the rows. */
145
+ readonly runHosted: () => Promise<Row[]>;
146
+ };
147
+
148
+ // ── change set (commit input) ──────────────────────────────────────────────
149
+
150
+ /**
151
+ * A change to apply to the canonical store. `runHosted` holds the write already
152
+ * bound to its execution: a hosted adapter simply runs it, while a data-source
153
+ * adapter ignores it and ships the operations to the customer's own endpoint.
154
+ * The adapter therefore decides how a change is applied, while the write logic
155
+ * itself is prepared above it.
156
+ */
157
+ export interface ChangeSet {
158
+ readonly operations: readonly SourceOperation[];
159
+ readonly context: CommitContext;
160
+ readonly clientTxId: string;
161
+ readonly runHosted: () => Promise<CommitExecutionResult>;
162
+ }
163
+
164
+ // ── sync result ────────────────────────────────────────────────────────────
165
+
166
+ export interface SyncResult {
167
+ /** Deltas in `(cursor.lastSyncId, nextCursor.lastSyncId]`, scoped to syncGroups. */
168
+ readonly changes: readonly ServerSyncDelta[];
169
+ readonly nextCursor: { readonly lastSyncId: number };
170
+ /** True when the gap was too large to stream — caller must full-`read`. */
171
+ readonly needsFullRead: boolean;
172
+ }
173
+
174
+ // ── the interface ──────────────────────────────────────────────────────────
175
+
176
+ /**
177
+ * The interface every storage mode implements. The package defines the
178
+ * contract; you implement it against your own database. An adapter is
179
+ * responsible for one thing — reaching the data — and offers exactly three
180
+ * methods to do it: `read` fetches canonical rows, `commit` applies a change,
181
+ * and `sync` reads the change log. Anything above that line, such as proposing
182
+ * a change or resolving a conflict, happens before the adapter is called.
183
+ * `propose` is an optional capability, not a required method.
184
+ */
185
+ export interface DataAdapter {
186
+ /** Names the adapter's storage mode, for diagnostics. Routing is decided by
187
+ * the resolver, not by reading this field. */
188
+ readonly mode: StorageMode;
189
+ readonly capabilities: DataAdapterCapabilities;
190
+ read(req: ReadRequest): Promise<ReadResult>;
191
+ commit(change: ChangeSet): Promise<CommitExecutionResult>;
192
+ sync(cursor: SyncCursor): Promise<SyncResult>;
193
+ }
194
+
195
+ /** A `DataAdapter` whose backend can dry-run a change. Narrow to this only after confirming the `propose` capability. */
196
+ export interface ProposableDataAdapter extends DataAdapter {
197
+ propose(change: ChangeSet): Promise<ProposalResult>;
198
+ }
199
+
200
+ /** Resolves an authenticated scope to the adapter that serves it. */
201
+ export type AdapterResolver = (
202
+ scope: { readonly projectId: string; readonly accountScope?: string },
203
+ ) => Promise<DataAdapter> | DataAdapter;
@@ -0,0 +1,109 @@
1
+ /**
2
+ * The commit contract types for the sync engine's server surface.
3
+ *
4
+ * {@link CommitContext} is the attribution envelope stamped onto every delta a
5
+ * commit produces; {@link CommitExecutionResult} is the receipt returned when the commit
6
+ * finishes. Both are plain data descriptors — no database driver, no SQL, no
7
+ * functions — so they belong to this package's public contract, which your commit
8
+ * implementation reads and writes. They feed the `ChangeSet` and `DataAdapter`
9
+ * contracts defined alongside them.
10
+ *
11
+ * The attribution fields reuse the shared {@link ParticipantKind},
12
+ * {@link ConfirmationState}, and {@link ParticipantRef} types, so the shape at
13
+ * commit time and the shape of a stored or broadcast delta share one definition
14
+ * rather than being kept in step by hand.
15
+ */
16
+ import type { ParticipantKind, ConfirmationState } from '../log/syncDeltaRow.js';
17
+ import type { ParticipantRef } from '../wire/delta.js';
18
+ import type { CommitExecutionResultInput } from '../wire/commit.js';
19
+ import type { Environment } from '../environment.js';
20
+ import type { ReadDependency, TrackDependency } from '../coordination/schema.js';
21
+
22
+ export interface CommitContext {
23
+ participantId: string;
24
+ /**
25
+ * The kind of participant making the commit. Required, so that every delta carries
26
+ * structured attribution rather than a string-prefix convention.
27
+ */
28
+ participantKind: ParticipantKind;
29
+ organizationId: string;
30
+ /**
31
+ * Project scope used to route source-mode storage. When omitted, the commit
32
+ * targets the organization's default project.
33
+ */
34
+ projectId?: string;
35
+ /** Exact sandbox plane derived from the authenticated key, when present. */
36
+ sandboxId?: string;
37
+ /** Optional external account scope forwarded to storage resolvers. */
38
+ accountScope?: string;
39
+ /**
40
+ * The environment this commit runs in. Source-mode adapters forward it to the
41
+ * customer's handlers so that sandbox and production traffic can reach distinct
42
+ * customer-owned stores.
43
+ */
44
+ environment?: Environment;
45
+ /**
46
+ * The sync groups this participant subscribes to, taken from the connection
47
+ * upgrade or the capability token. Each is appended to every delta's `sync_groups`
48
+ * so that writes fan out to subscribers of entity-level groups (such as
49
+ * `report:abc`), not only the default `org:X` and `user:Y` groups. When omitted, the
50
+ * commit fans out to just the organization and user groups.
51
+ */
52
+ syncGroups?: readonly string[];
53
+ /**
54
+ * When true, the commit does not add `org:<organizationId>` to a delta's sync
55
+ * groups. Set this for sandbox writes, so that live organization subscribers do
56
+ * not receive test-environment changes.
57
+ */
58
+ omitOrgSyncGroup?: boolean;
59
+ /**
60
+ * The participant on whose authority the actor acted. For a direct human commit
61
+ * this equals the actor; for an agent commit it is the human at the root of the
62
+ * capability's delegation chain. Null for `system` principals.
63
+ */
64
+ onBehalfOf?: ParticipantRef | null;
65
+ /**
66
+ * The id of the scoped credential that authorized the commit. Non-null for agent
67
+ * and system commits when that credential is known; null for direct human commits.
68
+ */
69
+ capabilityId?: string | null;
70
+ /**
71
+ * The id of the human user at the root of the delegated-authority chain. Stored
72
+ * directly on `sync_deltas` so that audit triggers appending the hash chain never
73
+ * need to join mutable credential tables.
74
+ */
75
+ delegationChainRootUserId?: string | null;
76
+ /**
77
+ * The id of the API key row when the caller authenticated with an API key. Used by
78
+ * the idempotency cache and for usage attribution. Null for session and capability
79
+ * callers.
80
+ */
81
+ apiKeyId?: string | null;
82
+ /**
83
+ * Whether a human explicitly approved the change. Defaults to `auto` when the
84
+ * caller does not specify an approval state.
85
+ */
86
+ confirmationState?: ConfirmationState;
87
+ /**
88
+ * The premise for the whole batch. The committer declares the rows or groups
89
+ * it read to form this batch; the engine checks that none of them changed since
90
+ * each entry's `readAt` timestamp and applies that entry's `onStale` disposition
91
+ * across the batch. This differs from the per-operation `readAt` guard, which
92
+ * validates only the rows being written. Omit it to check the write targets alone.
93
+ */
94
+ reads?: ReadDependency[] | null;
95
+ /**
96
+ * Durable premises to persist for this commit's participant. Each entry is
97
+ * kept in `track_dependencies` and re-checked against every future delta; a
98
+ * later match opens a `StaleNotification` delivered out of band. Distinct
99
+ * from `reads`, which is checked once here and discarded.
100
+ */
101
+ track?: TrackDependency[] | null;
102
+ }
103
+
104
+ /**
105
+ * The server execution receipt persisted in `mutation_log`. Its runtime schema
106
+ * lives with the HTTP/WS settlement contract so queued correlation cannot drift
107
+ * between cache, transport, and client.
108
+ */
109
+ export type CommitExecutionResult = CommitExecutionResultInput;
@@ -0,0 +1,26 @@
1
+ /**
2
+ * The server-side entry point of the sync engine. It re-exports the contract types
3
+ * you implement a storage backend against: the {@link DataAdapter} and its
4
+ * vocabulary ({@link Row}, {@link ReadRequest}, {@link ChangeSet}, and the rest),
5
+ * the {@link CommitContext} and {@link CommitExecutionResult} commit types, the
6
+ * {@link StorageMode} enumeration, and the per-model read configuration
7
+ * ({@link BootstrapModel}, {@link ColumnOverride}). These are plain, driver-free
8
+ * types; you supply the database code that fulfills them.
9
+ */
10
+ export type {
11
+ Row,
12
+ ReadResult,
13
+ SyncCursor,
14
+ DataAdapterCapabilities,
15
+ ProposalResult,
16
+ ReadRequest,
17
+ ChangeSet,
18
+ SyncResult,
19
+ DataAdapter,
20
+ ProposableDataAdapter,
21
+ AdapterResolver,
22
+ } from './adapter.js';
23
+ export type { CommitContext, CommitExecutionResult } from './commit.js';
24
+ export { commitExecutionResultSchema } from '../wire/commit.js';
25
+ export { storageModeSchema, type StorageMode } from './storageMode.js';
26
+ export type { ColumnOverride, BootstrapModel } from './readConfig.js';
@@ -0,0 +1,82 @@
1
+ /**
2
+ * Canonical per-model read configuration consumed when a client bootstraps. Each
3
+ * {@link BootstrapModel} maps a model to its physical table, its tenancy column, and
4
+ * any parent scoping — plain data with no database driver. It feeds the read side of
5
+ * the data adapter contract; your query builder reads it to load a model's initial
6
+ * rows.
7
+ */
8
+
9
+ /** A mapping from a declared field to a physical column, with the alias to apply after a `SELECT *`. */
10
+ export interface ColumnOverride {
11
+ readonly field: string;
12
+ readonly column: string;
13
+ readonly alias: string;
14
+ }
15
+
16
+ /** Read configuration for one model: how to locate its rows and scope them to a tenant. */
17
+ export interface BootstrapModel {
18
+ name: string;
19
+ /**
20
+ * Extra names accepted when a request looks up or filters this model. When the
21
+ * physical table name is canonical, `name` stays that table name and the aliases
22
+ * cover generated compatibility names such as `WeatherReports` or `weatherReports`.
23
+ */
24
+ aliases?: readonly string[];
25
+ /**
26
+ * The schema key used by source endpoints. `name` stays the wire and result model
27
+ * name (usually the typename), while source handlers are keyed by the developer's
28
+ * schema key, such as `files` or `blocks`.
29
+ */
30
+ sourceModel?: string;
31
+ table: string;
32
+ syncGroups?: string[];
33
+ enabled?: boolean;
34
+ /** Max rows to return. Omit for unlimited. Maps to schema's bootstrapLimit. */
35
+ limit?: number;
36
+ /** SQL ORDER BY clause. Default: 'id'. Maps to schema's bootstrapOrderBy. */
37
+ orderBy?: string;
38
+ /** Whether the table has organization_id. Default: true. */
39
+ orgScoped?: boolean;
40
+ /**
41
+ * The model derives its tenant from the connected data source (`policy:
42
+ * { by: 'source' }`) rather than a row column. It carries no tenant predicate on a
43
+ * log plane, so it is excluded from the bootstrap set entirely until the
44
+ * write-through connect path can resolve the org from the source registration —
45
+ * serving it now would return every row to every tenant. Kept on the type as a
46
+ * defense-in-depth marker so a source-scoped model that reaches `getBootstrapData`
47
+ * fails closed rather than bootstrapping unscoped.
48
+ */
49
+ sourceScoped?: boolean;
50
+ /** Physical tenancy column (default `organization_id`, configurable per model). */
51
+ orgColumn?: string;
52
+ /**
53
+ * Parent-table scoping for rows that have no `organization_id` column, mirroring
54
+ * the schema's `scopedVia` option. When set, the bootstrap query adds:
55
+ *
56
+ * WHERE <table>.<localKey> IN
57
+ * (SELECT <parentKey> FROM <parentTable> WHERE <parentOrgColumn> = $1)
58
+ *
59
+ * This applies on top of whatever `orgScoped` dictates, so a table can carry its
60
+ * own `organization_id` and still narrow through a parent. The common case,
61
+ * though, is `orgScoped: false` together with `scopedVia` on a table that lacks the
62
+ * column.
63
+ */
64
+ scopedVia?: {
65
+ localKey: string;
66
+ parentTable: string;
67
+ parentKey?: string;
68
+ parentOrgColumn?: string;
69
+ };
70
+ /** Client-facing field name → physical DB column for declared fields. */
71
+ fieldColumns?: Record<string, string>;
72
+ /** Physical-column aliases needed after SELECT * for `.from(...)` fields. */
73
+ columnOverrides?: readonly ColumnOverride[];
74
+ /**
75
+ * Physical columns the schema declares as JSON (via `field.json()`). A JSON field
76
+ * stored in a text column comes back from `row_to_json` as a serialized string, so
77
+ * the bootstrap reparses these columns to make the wire value the canonical object
78
+ * regardless of the physical column type. A `jsonb` column already returns an
79
+ * object, so reparsing it is a no-op.
80
+ */
81
+ jsonColumns?: readonly string[];
82
+ }
@@ -0,0 +1,20 @@
1
+ /**
2
+ * The compatibility set of storage modes a `DataAdapter` can run in. An adapter carries one of
3
+ * these as a label for diagnostics; it does not decide routing, which the adapter
4
+ * resolver handles separately. The package defines the enum so that the contract
5
+ * and every adapter agree on the same closed set of values:
6
+ *
7
+ * - `hosted` — a database this engine operates on the caller's behalf.
8
+ * - `selfHosted` — the caller's own database, reached through the same execution
9
+ * path as `hosted`.
10
+ * - `source` — a caller-owned endpoint that accepts changes over HTTP without
11
+ * database credentials.
12
+ *
13
+ * These names describe where the data lives, not anything an end user sees.
14
+ */
15
+ import { z } from 'zod';
16
+
17
+ /** Runtime validator for the storage-mode values; {@link StorageMode} is its inferred type. */
18
+ export const storageModeSchema = z.enum(['hosted', 'source', 'selfHosted']);
19
+ /** The storage mode an adapter runs in — one of the values described in the module overview. */
20
+ export type StorageMode = z.infer<typeof storageModeSchema>;