@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,104 @@
1
+ /**
2
+ * The canonical table-creation SQL every ORM adapter ships for its own infrastructure
3
+ * tables: `ablo_idempotency`, whose legacy-named `client_tx_id` column stores the
4
+ * scoped server correlation, and (for endpoint wrappers only) `ablo_outbox`, the
5
+ * transactional outbox the `events()` feed reads. Direct wrappers install only
6
+ * the ledger migration because WAL is their authoritative feed.
7
+ *
8
+ * These are infrastructure tables, not model tables, and they exist only on your
9
+ * own database when you run a Data Source. Ablo's hosted storage does not use them;
10
+ * it records changes in its own `sync_deltas` log instead.
11
+ */
12
+ /**
13
+ * Add a column to `ablo_idempotency` only when it is genuinely missing.
14
+ *
15
+ * `ADD COLUMN IF NOT EXISTS` performs its ownership check before the existence
16
+ * short-circuit, so on a ledger owned by another role the no-op re-run still
17
+ * errors "must be owner of table ablo_idempotency" — the setup's re-run promise
18
+ * breaks. `pg_attribute` is readable regardless of table ownership, so this DO
19
+ * block resolves the ledger through the search path and runs the `ALTER` only
20
+ * when the column is absent — a true no-op on a table that already has it.
21
+ */
22
+ function addColumnIfAbsent(column, definition) {
23
+ return `DO $$
24
+ DECLARE ledger regclass := to_regclass('ablo_idempotency');
25
+ BEGIN
26
+ IF ledger IS NOT NULL AND NOT EXISTS (
27
+ SELECT 1 FROM pg_attribute
28
+ WHERE attrelid = ledger AND attname = '${column}' AND attnum > 0 AND NOT attisdropped
29
+ ) THEN
30
+ ALTER TABLE ablo_idempotency ADD COLUMN ${column} ${definition};
31
+ END IF;
32
+ END $$;`;
33
+ }
34
+ /** The idempotency ledger shared by direct and endpoint mutation wrappers. New
35
+ * rows carry a bounded `expires_at` (set by the adapter at write time) so the
36
+ * customer can prune them; the `infinity` column default is only a fallback for
37
+ * a row inserted without one. */
38
+ export function idempotencyLedgerMigrations() {
39
+ return [
40
+ {
41
+ name: 'ablo_idempotency',
42
+ up: `CREATE TABLE IF NOT EXISTS ablo_idempotency (
43
+ client_tx_id TEXT PRIMARY KEY,
44
+ response JSONB NOT NULL,
45
+ request_hash TEXT,
46
+ expires_at TIMESTAMPTZ NOT NULL DEFAULT 'infinity',
47
+ created_at TIMESTAMPTZ NOT NULL DEFAULT now()
48
+ );`,
49
+ },
50
+ {
51
+ name: 'ablo_idempotency_request_hash',
52
+ // Nullable only for rows created by older adapter versions. New writes
53
+ // always populate it; replaying a legacy NULL row fails closed because
54
+ // the adapter cannot prove that the intent matches.
55
+ //
56
+ // The column already exists on any current table (the CREATE above
57
+ // includes it), so this only matters when upgrading a pre-existing
58
+ // ledger. `ALTER TABLE ... ADD COLUMN IF NOT EXISTS` checks ownership
59
+ // BEFORE it evaluates IF NOT EXISTS, so on a ledger that predates the
60
+ // setup — owned by another role — the no-op still errors "must be owner".
61
+ // Guard on the catalog (readable regardless of ownership) so the ALTER
62
+ // runs only when the column is genuinely absent, keeping re-runs safe.
63
+ up: addColumnIfAbsent('request_hash', 'TEXT'),
64
+ },
65
+ {
66
+ name: 'ablo_idempotency_permanent_retention',
67
+ up: addColumnIfAbsent('expires_at', `TIMESTAMPTZ NOT NULL DEFAULT 'infinity'`),
68
+ },
69
+ ];
70
+ }
71
+ /** Endpoint-only transactional outbox and its correlation columns. */
72
+ export function endpointOutboxMigrations() {
73
+ return [
74
+ {
75
+ name: 'ablo_outbox',
76
+ up: `CREATE TABLE IF NOT EXISTS ablo_outbox (
77
+ cursor BIGSERIAL PRIMARY KEY,
78
+ id TEXT NOT NULL UNIQUE,
79
+ model TEXT NOT NULL,
80
+ entity_id TEXT NOT NULL,
81
+ type TEXT NOT NULL,
82
+ data JSONB,
83
+ organization_id TEXT,
84
+ client_tx_id TEXT,
85
+ correlation_id TEXT,
86
+ transaction_id TEXT,
87
+ occurred_at BIGINT,
88
+ created_at TIMESTAMPTZ NOT NULL DEFAULT now()
89
+ );`,
90
+ },
91
+ {
92
+ name: 'ablo_outbox_correlation',
93
+ up: `ALTER TABLE ablo_outbox
94
+ ADD COLUMN IF NOT EXISTS correlation_id TEXT;
95
+ ALTER TABLE ablo_outbox
96
+ ADD COLUMN IF NOT EXISTS transaction_id TEXT;`,
97
+ },
98
+ ];
99
+ }
100
+ /** Full endpoint adapter migrations (ledger + outbox). */
101
+ export function adapterTableMigrations() {
102
+ return [...idempotencyLedgerMigrations(), ...endpointOutboxMigrations()];
103
+ }
104
+ //# sourceMappingURL=migrations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrations.js","sourceRoot":"","sources":["../../src/source/migrations.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH;;;;;;;;;GASG;AACH,SAAS,iBAAiB,CAAC,MAAc,EAAE,UAAkB;IAC3D,OAAO;;;;;6CAKoC,MAAM;;8CAEL,MAAM,IAAI,UAAU;;QAE1D,CAAC;AACT,CAAC;AAED;;;kCAGkC;AAClC,MAAM,UAAU,2BAA2B;IACzC,OAAO;QACL;YACE,IAAI,EAAE,kBAAkB;YACxB,EAAE,EAAE;;;;;;GAMP;SACE;QACD;YACE,IAAI,EAAE,+BAA+B;YACrC,uEAAuE;YACvE,uEAAuE;YACvE,oDAAoD;YACpD,EAAE;YACF,mEAAmE;YACnE,mEAAmE;YACnE,sEAAsE;YACtE,sEAAsE;YACtE,0EAA0E;YAC1E,uEAAuE;YACvE,uEAAuE;YACvE,EAAE,EAAE,iBAAiB,CAAC,cAAc,EAAE,MAAM,CAAC;SAC9C;QACD;YACE,IAAI,EAAE,sCAAsC;YAC5C,EAAE,EAAE,iBAAiB,CAAC,YAAY,EAAE,yCAAyC,CAAC;SAC/E;KACF,CAAC;AACJ,CAAC;AAED,sEAAsE;AACtE,MAAM,UAAU,wBAAwB;IACtC,OAAO;QACL;YACE,IAAI,EAAE,aAAa;YACnB,EAAE,EAAE;;;;;;;;;;;;;GAaP;SACE;QACD;YACE,IAAI,EAAE,yBAAyB;YAC/B,EAAE,EAAE;;;gDAGsC;SAC3C;KACF,CAAC;AACJ,CAAC;AAED,0DAA0D;AAC1D,MAAM,UAAU,sBAAsB;IACpC,OAAO,CAAC,GAAG,2BAA2B,EAAE,EAAE,GAAG,wBAAwB,EAAE,CAAC,CAAC;AAC3E,CAAC"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * A thin Next.js App Router wrapper for a Data Source. The core `dataSource()`
3
+ * already returns a standard `(Request) => Promise<Response>`, which the App Router
4
+ * accepts directly, so this helper adds only convenience: it names the handler
5
+ * `POST` so your route file can export it in one line.
6
+ *
7
+ * // app/api/ablo/source/route.ts
8
+ * import { dataSourceNext } from '@abloatai/transaction/source/next';
9
+ * import { prismaDataSource } from '@abloatai/transaction/source';
10
+ * import { schema } from '@/ablo/schema';
11
+ * import { prisma } from '@/lib/prisma';
12
+ *
13
+ * export const { POST } = dataSourceNext({
14
+ * schema,
15
+ * apiKey: process.env.ABLO_API_KEY!,
16
+ * adapter: prismaDataSource(prisma, schema),
17
+ * });
18
+ *
19
+ * For hand-written handlers, or another framework, call the core `dataSource()`
20
+ * directly and export its result however that framework expects.
21
+ */
22
+ import type { SchemaRecord } from '../schema/schema.js';
23
+ import { type DataSourceOptions } from './factory.js';
24
+ /**
25
+ * The options for `dataSourceNext`, which are exactly the core
26
+ * `DataSourceOptions`. Pass `{ schema, apiKey, adapter }`, the same shape
27
+ * `dataSource()` takes.
28
+ */
29
+ export type DataSourceNextOptions<S extends SchemaRecord, TAuth = unknown> = DataSourceOptions<S, TAuth>;
30
+ export declare function dataSourceNext<const S extends SchemaRecord, TAuth = unknown>(options: DataSourceNextOptions<S, TAuth>): {
31
+ readonly POST: (request: Request) => Promise<Response>;
32
+ };
33
+ //# sourceMappingURL=next.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"next.d.ts","sourceRoot":"","sources":["../../src/source/next.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAc,KAAK,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAElE;;;;GAIG;AACH,MAAM,MAAM,qBAAqB,CAAC,CAAC,SAAS,YAAY,EAAE,KAAK,GAAG,OAAO,IACvE,iBAAiB,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AAE9B,wBAAgB,cAAc,CAAC,KAAK,CAAC,CAAC,SAAS,YAAY,EAAE,KAAK,GAAG,OAAO,EAC1E,OAAO,EAAE,qBAAqB,CAAC,CAAC,EAAE,KAAK,CAAC,GACvC;IAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAA;CAAE,CAE5D"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * A thin Next.js App Router wrapper for a Data Source. The core `dataSource()`
3
+ * already returns a standard `(Request) => Promise<Response>`, which the App Router
4
+ * accepts directly, so this helper adds only convenience: it names the handler
5
+ * `POST` so your route file can export it in one line.
6
+ *
7
+ * // app/api/ablo/source/route.ts
8
+ * import { dataSourceNext } from '@abloatai/transaction/source/next';
9
+ * import { prismaDataSource } from '@abloatai/transaction/source';
10
+ * import { schema } from '@/ablo/schema';
11
+ * import { prisma } from '@/lib/prisma';
12
+ *
13
+ * export const { POST } = dataSourceNext({
14
+ * schema,
15
+ * apiKey: process.env.ABLO_API_KEY!,
16
+ * adapter: prismaDataSource(prisma, schema),
17
+ * });
18
+ *
19
+ * For hand-written handlers, or another framework, call the core `dataSource()`
20
+ * directly and export its result however that framework expects.
21
+ */
22
+ import { dataSource } from './factory.js';
23
+ export function dataSourceNext(options) {
24
+ return { POST: dataSource(options) };
25
+ }
26
+ //# sourceMappingURL=next.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"next.js","sourceRoot":"","sources":["../../src/source/next.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAGH,OAAO,EAAE,UAAU,EAA0B,MAAM,cAAc,CAAC;AAUlE,MAAM,UAAU,cAAc,CAC5B,OAAwC;IAExC,OAAO,EAAE,IAAI,EAAE,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;AACvC,CAAC"}
@@ -0,0 +1,135 @@
1
+ /**
2
+ * The durable retry queue for delivering source events to the server.
3
+ *
4
+ * When your application changes a row, it can push the resulting event to
5
+ * the server, which acknowledges delivery synchronously. If your process
6
+ * crashes mid-call, the network drops, or the server returns a 5xx, that
7
+ * event would be lost without a safety net. This queue is the safety net:
8
+ * it persists each event first, then delivers it from a background worker
9
+ * with automatic retries. (Polling the change feed is the slower fallback
10
+ * for anything the queue never manages to deliver.)
11
+ *
12
+ * The queue follows a familiar enqueue-and-worker shape:
13
+ *
14
+ * - `enqueue(events)` returns as soon as the events are persisted.
15
+ * - A background worker delivers them and retries on failure, following
16
+ * the Standard Webhooks schedule (0, 5s, 5m, 30m, 2h, 5h, 10h, 14h,
17
+ * 20h, 24h — roughly three days in total).
18
+ * - Items that exhaust every retry move to a dead-letter queue you can
19
+ * monitor.
20
+ *
21
+ * Persistence is pluggable through {@link PushQueueStorage}. Use
22
+ * {@link InMemoryPushQueueStorage} for a single process, or implement that
23
+ * interface against your own outbox table for production durability.
24
+ */
25
+ import type { SourceEvent } from './types.js';
26
+ /** One queued delivery: a batch of source events plus its retry bookkeeping. */
27
+ export interface PushQueueItem {
28
+ readonly id: string;
29
+ readonly events: readonly SourceEvent[];
30
+ readonly attempts: number;
31
+ /** When the next attempt is due, in epoch milliseconds. The worker skips items due later. */
32
+ readonly nextAttemptAt: number;
33
+ /** The most recent error message, set once an attempt has failed. */
34
+ readonly lastError?: string;
35
+ /** `pending` while awaiting delivery, `delivered` on success, `dlq` once retries are exhausted. */
36
+ readonly status: 'pending' | 'delivered' | 'dlq';
37
+ }
38
+ /**
39
+ * The persistence behind a {@link PushQueue}. Implement it against your own
40
+ * durable table (or use {@link InMemoryPushQueueStorage}) so queued events
41
+ * survive a process restart. The queue calls these methods; you decide where
42
+ * the rows actually live.
43
+ */
44
+ export interface PushQueueStorage {
45
+ /**
46
+ * Append a new item and return the persisted record. Generate a stable id
47
+ * — it doubles as the `webhook-id` on the delivered request — and set
48
+ * `nextAttemptAt` to the current time so the item is due immediately.
49
+ */
50
+ enqueue(events: readonly SourceEvent[]): Promise<PushQueueItem>;
51
+ /** Return pending items whose `nextAttemptAt` is at or before `now`, up to `limit`. */
52
+ due(now: number, limit: number): Promise<readonly PushQueueItem[]>;
53
+ /** Increase the attempt count and set the next attempt time after a failed delivery. */
54
+ reschedule(id: string, nextAttemptAt: number, lastError: string): Promise<void>;
55
+ /** Mark the item delivered so no further attempts are made. */
56
+ markDelivered(id: string): Promise<void>;
57
+ /** Move the item to the dead-letter queue after its retries are exhausted. */
58
+ markDlq(id: string, lastError: string): Promise<void>;
59
+ /** Read the dead-letter queue. Your monitoring reads this to surface deliveries that never succeeded. */
60
+ listDlq(): Promise<readonly PushQueueItem[]>;
61
+ }
62
+ /**
63
+ * The default retry schedule, taken from the Standard Webhooks
64
+ * specification. The index is the attempt number and the value is the delay
65
+ * in milliseconds after the previous attempt failed. Once an item runs off
66
+ * the end of this array, it moves to the dead-letter queue.
67
+ *
68
+ * See https://www.standardwebhooks.com/.
69
+ */
70
+ export declare const STANDARD_WEBHOOKS_RETRY_SCHEDULE: readonly number[];
71
+ /** Configuration for {@link createPushQueue}. */
72
+ export interface PushQueueOptions {
73
+ /** The URL the worker delivers events to. */
74
+ readonly endpoint: string;
75
+ /** The API key used to sign each delivery. */
76
+ readonly apiKey: string;
77
+ /** Where queued items are persisted. */
78
+ readonly storage: PushQueueStorage;
79
+ /**
80
+ * Override the retry delays. Defaults to {@link STANDARD_WEBHOOKS_RETRY_SCHEDULE}.
81
+ * The number of attempts equals the array length, and the i-th entry is the
82
+ * delay after attempt `i` failed.
83
+ */
84
+ readonly retrySchedule?: readonly number[];
85
+ /** How often the worker checks for due items, in milliseconds. Defaults to 1000. */
86
+ readonly tickIntervalMs?: number;
87
+ /** The most items the worker delivers per tick. Defaults to 50. */
88
+ readonly batchSize?: number;
89
+ /** A custom fetch implementation, for tests or runtimes without a global `fetch`. */
90
+ readonly fetch?: typeof fetch;
91
+ /** A custom clock source, mainly for tests. Defaults to `Date.now`. */
92
+ readonly now?: () => number;
93
+ /** Random jitter applied to each retry delay, as a fraction. Defaults to ±10%; set 0 to disable. */
94
+ readonly jitter?: number;
95
+ /** Called when an item is dead-lettered or the worker loop hits an error. */
96
+ readonly onError?: (item: PushQueueItem, err: unknown) => void;
97
+ }
98
+ /** A running push queue: persist events, deliver them, and recover dead-lettered ones. */
99
+ export interface PushQueue {
100
+ /** Persist a batch of events for delivery and return the queued item. */
101
+ enqueue(events: readonly SourceEvent[]): Promise<PushQueueItem>;
102
+ /** Run the delivery worker until `signal` aborts. */
103
+ run(signal: AbortSignal): Promise<void>;
104
+ /**
105
+ * Re-enqueue every dead-lettered item for another round of delivery. Call
106
+ * this yourself once you have fixed whatever caused the failures. Returns
107
+ * the number of items re-enqueued.
108
+ */
109
+ redriveDlq(): Promise<number>;
110
+ }
111
+ /** Create a {@link PushQueue} from the given {@link PushQueueOptions}. */
112
+ export declare function createPushQueue(options: PushQueueOptions): PushQueue;
113
+ /**
114
+ * A {@link PushQueueStorage} that keeps items in memory. It is not durable —
115
+ * items are lost when the process restarts — so it suits development and
116
+ * low-volume use. For production, implement {@link PushQueueStorage} against
117
+ * your own table.
118
+ */
119
+ export declare class InMemoryPushQueueStorage implements PushQueueStorage {
120
+ private items;
121
+ private nextId;
122
+ private readonly now;
123
+ constructor(options?: {
124
+ now?: () => number;
125
+ });
126
+ enqueue(events: readonly SourceEvent[]): Promise<PushQueueItem>;
127
+ due(now: number, limit: number): Promise<readonly PushQueueItem[]>;
128
+ reschedule(id: string, nextAttemptAt: number, lastError: string): Promise<void>;
129
+ markDelivered(id: string): Promise<void>;
130
+ markDlq(id: string, lastError: string): Promise<void>;
131
+ listDlq(): Promise<readonly PushQueueItem[]>;
132
+ /** Test helper — read all items regardless of status. */
133
+ snapshot(): readonly PushQueueItem[];
134
+ }
135
+ //# sourceMappingURL=pushQueue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pushQueue.d.ts","sourceRoot":"","sources":["../../src/source/pushQueue.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,257 @@
1
+ /**
2
+ * The durable retry queue for delivering source events to the server.
3
+ *
4
+ * When your application changes a row, it can push the resulting event to
5
+ * the server, which acknowledges delivery synchronously. If your process
6
+ * crashes mid-call, the network drops, or the server returns a 5xx, that
7
+ * event would be lost without a safety net. This queue is the safety net:
8
+ * it persists each event first, then delivers it from a background worker
9
+ * with automatic retries. (Polling the change feed is the slower fallback
10
+ * for anything the queue never manages to deliver.)
11
+ *
12
+ * The queue follows a familiar enqueue-and-worker shape:
13
+ *
14
+ * - `enqueue(events)` returns as soon as the events are persisted.
15
+ * - A background worker delivers them and retries on failure, following
16
+ * the Standard Webhooks schedule (0, 5s, 5m, 30m, 2h, 5h, 10h, 14h,
17
+ * 20h, 24h — roughly three days in total).
18
+ * - Items that exhaust every retry move to a dead-letter queue you can
19
+ * monitor.
20
+ *
21
+ * Persistence is pluggable through {@link PushQueueStorage}. Use
22
+ * {@link InMemoryPushQueueStorage} for a single process, or implement that
23
+ * interface against your own outbox table for production durability.
24
+ */
25
+ import { ABLO_SOURCE_HEADERS, signAbloSourceRequest } from './signing.js';
26
+ /**
27
+ * The default retry schedule, taken from the Standard Webhooks
28
+ * specification. The index is the attempt number and the value is the delay
29
+ * in milliseconds after the previous attempt failed. Once an item runs off
30
+ * the end of this array, it moves to the dead-letter queue.
31
+ *
32
+ * See https://www.standardwebhooks.com/.
33
+ */
34
+ export const STANDARD_WEBHOOKS_RETRY_SCHEDULE = [
35
+ 0, // immediate
36
+ 5_000, // 5s
37
+ 5 * 60_000, // 5m
38
+ 30 * 60_000, // 30m
39
+ 2 * 60 * 60_000, // 2h
40
+ 5 * 60 * 60_000, // 5h
41
+ 10 * 60 * 60_000, // 10h
42
+ 14 * 60 * 60_000, // 14h
43
+ 20 * 60 * 60_000, // 20h
44
+ 24 * 60 * 60_000, // 24h
45
+ ];
46
+ /** Create a {@link PushQueue} from the given {@link PushQueueOptions}. */
47
+ export function createPushQueue(options) {
48
+ const tickIntervalMs = options.tickIntervalMs ?? 1000;
49
+ const batchSize = options.batchSize ?? 50;
50
+ const fetchImpl = options.fetch ?? fetch;
51
+ const now = options.now ?? Date.now;
52
+ const schedule = options.retrySchedule ?? STANDARD_WEBHOOKS_RETRY_SCHEDULE;
53
+ const jitter = options.jitter ?? 0.1;
54
+ return {
55
+ async enqueue(events) {
56
+ return options.storage.enqueue(events);
57
+ },
58
+ async run(signal) {
59
+ while (!signal.aborted) {
60
+ try {
61
+ const due = await options.storage.due(now(), batchSize);
62
+ for (const item of due) {
63
+ if (signal.aborted)
64
+ return;
65
+ await deliver(item);
66
+ }
67
+ }
68
+ catch (err) {
69
+ // Storage failures shouldn't kill the loop; surface and
70
+ // back off the tick interval.
71
+ options.onError?.({ id: 'storage', events: [], attempts: 0, nextAttemptAt: 0, status: 'pending' }, err);
72
+ }
73
+ await sleep(tickIntervalMs, signal);
74
+ }
75
+ },
76
+ async redriveDlq() {
77
+ const items = await options.storage.listDlq();
78
+ let redriven = 0;
79
+ for (const item of items) {
80
+ await options.storage.enqueue(item.events);
81
+ redriven++;
82
+ }
83
+ return redriven;
84
+ },
85
+ };
86
+ async function deliver(item) {
87
+ const rawBody = JSON.stringify({ events: item.events });
88
+ let signed;
89
+ try {
90
+ signed = await signAbloSourceRequest({
91
+ apiKey: options.apiKey,
92
+ body: rawBody,
93
+ timestamp: Math.floor(now() / 1000),
94
+ // Reuse the queue id as the webhook-id across all retry
95
+ // attempts so the receiver can dedupe replays per spec.
96
+ messageId: item.id,
97
+ });
98
+ }
99
+ catch (err) {
100
+ // Signing should not fail in practice (no network, just HMAC).
101
+ // If it does, treat as a permanent failure.
102
+ await options.storage.markDlq(item.id, formatError(err));
103
+ options.onError?.(item, err);
104
+ return;
105
+ }
106
+ let response;
107
+ try {
108
+ response = await fetchImpl(options.endpoint, {
109
+ method: 'POST',
110
+ headers: {
111
+ 'Content-Type': 'application/json',
112
+ ...signed.headers,
113
+ [ABLO_SOURCE_HEADERS.idempotencyKey]: item.id,
114
+ },
115
+ body: rawBody,
116
+ });
117
+ }
118
+ catch (err) {
119
+ await reschedule(item, formatError(err));
120
+ return;
121
+ }
122
+ if (response.ok) {
123
+ await options.storage.markDelivered(item.id);
124
+ return;
125
+ }
126
+ // 4xx other than 408/429 are unrecoverable — don't retry. Move
127
+ // straight to DLQ so the customer's monitoring catches the bad
128
+ // request shape early instead of waiting 3 days for retries.
129
+ if (response.status >= 400 &&
130
+ response.status < 500 &&
131
+ response.status !== 408 &&
132
+ response.status !== 429) {
133
+ await options.storage.markDlq(item.id, `HTTP ${response.status}`);
134
+ return;
135
+ }
136
+ await reschedule(item, `HTTP ${response.status}`);
137
+ }
138
+ async function reschedule(item, error) {
139
+ const nextAttempt = item.attempts + 1;
140
+ // Past the end of the backoff schedule: no attempts left, so dead-letter
141
+ // the item.
142
+ const backoff = schedule[nextAttempt];
143
+ if (backoff === undefined) {
144
+ await options.storage.markDlq(item.id, error);
145
+ options.onError?.(item, new Error(error));
146
+ return;
147
+ }
148
+ const delay = applyJitter(backoff, jitter);
149
+ await options.storage.reschedule(item.id, now() + delay, error);
150
+ }
151
+ }
152
+ /**
153
+ * A {@link PushQueueStorage} that keeps items in memory. It is not durable —
154
+ * items are lost when the process restarts — so it suits development and
155
+ * low-volume use. For production, implement {@link PushQueueStorage} against
156
+ * your own table.
157
+ */
158
+ export class InMemoryPushQueueStorage {
159
+ items = new Map();
160
+ nextId = 0;
161
+ now;
162
+ constructor(options = {}) {
163
+ this.now = options.now ?? Date.now;
164
+ }
165
+ async enqueue(events) {
166
+ const id = `q_${(++this.nextId).toString(36)}_${Math.random()
167
+ .toString(36)
168
+ .slice(2, 8)}`;
169
+ const item = {
170
+ id,
171
+ events,
172
+ attempts: 0,
173
+ nextAttemptAt: this.now(),
174
+ status: 'pending',
175
+ };
176
+ this.items.set(id, item);
177
+ return item;
178
+ }
179
+ async due(now, limit) {
180
+ const out = [];
181
+ for (const item of this.items.values()) {
182
+ if (out.length >= limit)
183
+ break;
184
+ if (item.status !== 'pending')
185
+ continue;
186
+ if (item.nextAttemptAt > now)
187
+ continue;
188
+ out.push(item);
189
+ }
190
+ return out;
191
+ }
192
+ async reschedule(id, nextAttemptAt, lastError) {
193
+ const item = this.items.get(id);
194
+ if (!item)
195
+ return;
196
+ this.items.set(id, {
197
+ ...item,
198
+ attempts: item.attempts + 1,
199
+ nextAttemptAt,
200
+ lastError,
201
+ });
202
+ }
203
+ async markDelivered(id) {
204
+ const item = this.items.get(id);
205
+ if (!item)
206
+ return;
207
+ this.items.set(id, { ...item, status: 'delivered' });
208
+ }
209
+ async markDlq(id, lastError) {
210
+ const item = this.items.get(id);
211
+ if (!item)
212
+ return;
213
+ this.items.set(id, {
214
+ ...item,
215
+ attempts: item.attempts + 1,
216
+ status: 'dlq',
217
+ lastError,
218
+ });
219
+ }
220
+ async listDlq() {
221
+ return Array.from(this.items.values()).filter((i) => i.status === 'dlq');
222
+ }
223
+ /** Test helper — read all items regardless of status. */
224
+ snapshot() {
225
+ return Array.from(this.items.values());
226
+ }
227
+ }
228
+ function applyJitter(delayMs, factor) {
229
+ if (factor <= 0 || delayMs === 0)
230
+ return delayMs;
231
+ const swing = delayMs * factor;
232
+ return Math.max(0, delayMs + (Math.random() * 2 - 1) * swing);
233
+ }
234
+ function formatError(err) {
235
+ if (err instanceof Error)
236
+ return err.message;
237
+ return String(err);
238
+ }
239
+ function sleep(ms, signal) {
240
+ return new Promise((resolve) => {
241
+ if (signal.aborted) {
242
+ resolve();
243
+ return;
244
+ }
245
+ const timer = setTimeout(() => {
246
+ signal.removeEventListener('abort', onAbort);
247
+ resolve();
248
+ }, ms);
249
+ const onAbort = () => {
250
+ clearTimeout(timer);
251
+ signal.removeEventListener('abort', onAbort);
252
+ resolve();
253
+ };
254
+ signal.addEventListener('abort', onAbort, { once: true });
255
+ });
256
+ }
257
+ //# sourceMappingURL=pushQueue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pushQueue.js","sourceRoot":"","sources":["../../src/source/pushQueue.ts"],"names":[],"mappings":"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"}