@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 @@
1
+ {"version":3,"file":"connectionManager.js","sourceRoot":"","sources":["../../src/transport/connectionManager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,178 @@
1
+ /**
2
+ * Keeps the short-lived access credential fresh. It owns the re-mint hook, a
3
+ * single-flight guard that stops concurrent triggers from minting more than
4
+ * once, and a browser-only proactive refresh — a timer plus an OS-wake listener
5
+ * — that renews the credential ahead of expiry. It reaches the rest of the
6
+ * client only through the small {@link CredentialLifecycleContext} interface,
7
+ * so the two can reference each other without an import cycle.
8
+ */
9
+ import type { RecoveryClass } from '../errorCodes.js';
10
+ import { type Logger } from '../logger.js';
11
+ import { type CredentialProvider, type CredentialProviderResult } from '../auth/credentialResult.js';
12
+ /**
13
+ * Tri-state outcome of a credential re-mint, mirroring the `getToken`
14
+ * contract (see {@link CredentialLifecycle.refresh}).
15
+ */
16
+ export type CredentialRefreshOutcome = 'refreshed' | 'session_error' | 'network_error';
17
+ /**
18
+ * What an auth-rejected transport should do after recovery has run. `'retry'`
19
+ * means a fresh credential is now in place — replay the request once. `'stop'`
20
+ * means don't replay: either the session is gone for good, the rejection is one
21
+ * a re-mint can't cure, or the mint failed transiently and the caller's own
22
+ * retry path will recover later.
23
+ */
24
+ export type CredentialRecoveryOutcome = 'retry' | 'stop';
25
+ /**
26
+ * What a credential refresher may resolve with. The plain-string form returns
27
+ * just the token. The object form also carries the mint response's `expiresAt`
28
+ * (an ISO string, epoch milliseconds, or a `Date`), which lets the proactive
29
+ * pre-roll schedule against the credential's real lifetime rather than assume
30
+ * the server's default expiry.
31
+ */
32
+ export type CredentialRefreshResult = CredentialProviderResult;
33
+ /** A credential re-mint hook. `Promise<string | null>` resolvers remain
34
+ * assignable — the widened result type is a superset. */
35
+ export type CredentialRefresher = CredentialProvider;
36
+ /** The fallback pre-roll interval, and also its ceiling: 10 minutes, which sits
37
+ * comfortably inside the server's 15-minute default credential lifetime. Used
38
+ * as-is when the refresher reports no expiry. */
39
+ export declare const DEFAULT_PREROLL_INTERVAL_MS: number;
40
+ /** Floor so a very short (or already-elapsed) TTL can't hot-loop the mint. */
41
+ export declare const MIN_PREROLL_DELAY_MS: number;
42
+ /**
43
+ * Computes how long to wait before pre-rolling a credential that expires at
44
+ * `expiresAtMs`: about two-thirds of the remaining lifetime (a 15-minute
45
+ * credential yields 10 minutes), clamped to
46
+ * [{@link MIN_PREROLL_DELAY_MS}, {@link DEFAULT_PREROLL_INTERVAL_MS}]. An
47
+ * unknown expiry (`null`) falls back to the 10-minute interval. Exported for
48
+ * unit tests.
49
+ */
50
+ export declare function computePrerollDelayMs(expiresAtMs: number | null, nowMs: number): number;
51
+ /**
52
+ * The callbacks this lifecycle needs back from the surrounding client. It is
53
+ * deliberately minimal — three callbacks, each resolved lazily at call time,
54
+ * because the connection machinery behind two of them isn't constructed until
55
+ * the sync connection is set up.
56
+ */
57
+ export interface CredentialLifecycleContext {
58
+ /** Push a freshly-minted access token into the shared credential source
59
+ * (no-op when the deployment wired no credential source). */
60
+ setAuthToken(token: string): void;
61
+ /** Nudge the connection to re-probe using the credential now in place. */
62
+ nudgeReconnect(): void;
63
+ /** Report that the long-lived login is gone, so the connection can move to
64
+ * its signed-out state. */
65
+ reportSessionExpired(): void;
66
+ }
67
+ export declare class CredentialLifecycle {
68
+ private readonly ctx;
69
+ private readonly logger;
70
+ /**
71
+ * The hook that mints a fresh short-lived access credential (the `ek_`/`rk_`
72
+ * key). An integrator wires it from their own token endpoint: this lifecycle
73
+ * decides when to refresh (a stale-credential probe or an external nudge),
74
+ * and the hook decides how to mint. It follows the same contract as a
75
+ * `getToken` function — it resolves a token string on success, `null` when
76
+ * the long-lived login is gone (a terminal state), and throws on a transient
77
+ * or offline failure. Used by {@link refresh}. When it is absent there is no
78
+ * silent re-mint, as with a static `apiKey` whose credential source is
79
+ * refreshed elsewhere.
80
+ */
81
+ private credentialRefresher;
82
+ /** Single-flight guard so a wake nudge + an in-flight request + a probe don't
83
+ * all mint at once (the classic "token thrash → random logout" bug). */
84
+ private inFlightCredentialRefresh;
85
+ /** Tears down the proactive credential lifecycle (the refresh timer and the
86
+ * OS-wake listener) installed by {@link start}; cleared when the client
87
+ * disconnects. Null when no refresher is wired. */
88
+ private credentialLifecycleTeardown;
89
+ /** Epoch milliseconds at which the current credential expires, when the
90
+ * refresher reports it (the object form of {@link CredentialRefreshResult}).
91
+ * `null` for the string-form resolver, in which case the pre-roll uses its
92
+ * fixed interval. */
93
+ private credentialExpiresAtMs;
94
+ /** Re-arms the proactive pre-roll timer (set by {@link start}). Called after
95
+ * every successful mint, so a refresh triggered reactively (by a probe, an
96
+ * OS wake, or the first mint) re-anchors the schedule to the fresh
97
+ * credential's real expiry instead of a stale fixed delay. */
98
+ private prerollReschedule;
99
+ constructor(ctx: CredentialLifecycleContext, logger?: Logger);
100
+ /**
101
+ * Registers the re-mint hook for the access credential — a function that
102
+ * mints a fresh `ek_`/`rk_` key, typically the integrator's `getToken`. See
103
+ * {@link credentialRefresher}.
104
+ */
105
+ setRefresher(refresher: CredentialRefresher | null): void;
106
+ /** Seeds the first mint through the same expiry-aware path as later refreshes. */
107
+ accept(result: CredentialRefreshResult): boolean;
108
+ /**
109
+ * Re-mints the short-lived access credential, pushes it into the credential
110
+ * source, and reports a three-way outcome the connection layer acts on:
111
+ * - a token string → `'refreshed'` (the fresh key is in place; re-probe and reconnect)
112
+ * - `null` → `'session_error'` (the login itself is gone — terminal, sign out)
113
+ * - a thrown error → `'network_error'` (the mint endpoint was unreachable — transient)
114
+ *
115
+ * The call is single-flight: concurrent triggers (an OS wake, an in-flight
116
+ * request, a probe) share one in-flight promise, so the credential is never
117
+ * minted twice at once. This avoids the failure where every rejected request
118
+ * mints a new token and the resulting thrash logs the user out.
119
+ *
120
+ * With no refresher wired, it resolves `'refreshed'` as a no-op re-probe: a
121
+ * static-`apiKey` client has no session to mint from and its credential
122
+ * source is refreshed elsewhere, so it simply re-probes with what it holds.
123
+ */
124
+ refresh(): Promise<CredentialRefreshOutcome>;
125
+ /**
126
+ * Interprets a refresh outcome and drives the connection accordingly. This is
127
+ * the single place the three-way outcome is acted on, shared by the proactive
128
+ * pre-roll, the OS-wake nudge, and the HTTP auth-recovery path, so every
129
+ * trigger converges on the same behavior.
130
+ */
131
+ private routeRefreshOutcome;
132
+ /**
133
+ * The shared recovery path for a request rejected on authentication, over any
134
+ * transport. The WebSocket probe already routes its own 401s; HTTP callers
135
+ * call this instead of inventing their own handling, so every path shares one
136
+ * single-flight mint, one outcome routing, and one taxonomy. It classifies
137
+ * the same recovery codes the connection probe does:
138
+ * - `access_credential_expiry` — the routine case, an expired `ek_`/`rk_`:
139
+ * silently re-mint through the single-flight {@link refresh} and tell the
140
+ * caller to replay once on success. This never signs out on its own; the
141
+ * only terminal path is the mint resolving `null`.
142
+ * - `session_expiry` — the login is gone: report it (which drives sign-out)
143
+ * and stop, since replaying is pointless.
144
+ * - `auth_blocked`, `permission`, and everything else — re-minting would
145
+ * produce the same rejected credential, so stop and leave the connection
146
+ * alone.
147
+ */
148
+ recoverFromAuthRejection(recovery: RecoveryClass): Promise<CredentialRecoveryOutcome>;
149
+ /**
150
+ * Installs the credential lifecycle. It has two parts:
151
+ * 1. Reactive — registers `getToken` as the re-mint hook the connection
152
+ * calls when a probe finds the key stale, or on a nudge.
153
+ * 2. Proactive — keeps the short-lived key fresh ahead of expiry with a
154
+ * refresh timer inside the credential's lifetime, plus a re-mint on OS
155
+ * wake. The whole proactive block is browser-gated on `typeof window`,
156
+ * because a server render has no socket to keep warm and the resolver is
157
+ * browser-oriented; arming it under Node would fire a relative-URL fetch
158
+ * and throw. (Agents pass a static `apiKey` with no resolver, so this
159
+ * method is never called for them.)
160
+ *
161
+ * Refreshing is automatic — a consumer never calls a refresh method. The call
162
+ * is idempotent: a second call replaces the first, and it is torn down when
163
+ * the client disconnects.
164
+ *
165
+ * `opts.proactiveInNode` arms the refresh timer on a windowless host as well.
166
+ * Set it for agent or system participants — long-lived server sockets whose
167
+ * `rk_`/`ek_` must renew before the server's keepalive check closes them.
168
+ * Node timers are `unref`ed, so a finishing script is never held alive by the
169
+ * pre-roll. The OS-wake listener stays browser-only regardless, since there
170
+ * is no `window` to listen on.
171
+ */
172
+ start(getToken: CredentialRefresher, opts?: {
173
+ proactiveInNode?: boolean;
174
+ }): void;
175
+ /** Tear down the proactive credential lifecycle (idempotent). */
176
+ stop(): void;
177
+ }
178
+ //# sourceMappingURL=credentialLifecycle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credentialLifecycle.d.ts","sourceRoot":"","sources":["../../src/transport/credentialLifecycle.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAc,KAAK,MAAM,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,EAGL,KAAK,kBAAkB,EACvB,KAAK,wBAAwB,EAC9B,MAAM,6BAA6B,CAAC;AAErC;;;GAGG;AACH,MAAM,MAAM,wBAAwB,GAAG,WAAW,GAAG,eAAe,GAAG,eAAe,CAAC;AAEvF;;;;;;GAMG;AACH,MAAM,MAAM,yBAAyB,GAAG,OAAO,GAAG,MAAM,CAAC;AAEzD;;;;;;GAMG;AACH,MAAM,MAAM,uBAAuB,GAAG,wBAAwB,CAAC;AAE/D;0DAC0D;AAC1D,MAAM,MAAM,mBAAmB,GAAG,kBAAkB,CAAC;AAErD;;kDAEkD;AAClD,eAAO,MAAM,2BAA2B,QAAiB,CAAC;AAE1D,8EAA8E;AAC9E,eAAO,MAAM,oBAAoB,QAAY,CAAC;AAE9C;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAQvF;AAUD;;;;;GAKG;AACH,MAAM,WAAW,0BAA0B;IACzC;kEAC8D;IAC9D,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,0EAA0E;IAC1E,cAAc,IAAI,IAAI,CAAC;IACvB;gCAC4B;IAC5B,oBAAoB,IAAI,IAAI,CAAC;CAC9B;AAED,qBAAa,mBAAmB;IAoC5B,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,MAAM;IApCzB;;;;;;;;;;OAUG;IACH,OAAO,CAAC,mBAAmB,CAAoC;IAE/D;6EACyE;IACzE,OAAO,CAAC,yBAAyB,CAAkD;IAEnF;;wDAEoD;IACpD,OAAO,CAAC,2BAA2B,CAA6B;IAEhE;;;0BAGsB;IACtB,OAAO,CAAC,qBAAqB,CAAuB;IAEpD;;;mEAG+D;IAC/D,OAAO,CAAC,iBAAiB,CAA6B;gBAGnC,GAAG,EAAE,0BAA0B,EAC/B,MAAM,GAAE,MAAmB;IAG9C;;;;OAIG;IACH,YAAY,CAAC,SAAS,EAAE,mBAAmB,GAAG,IAAI,GAAG,IAAI;IAIzD,kFAAkF;IAClF,MAAM,CAAC,MAAM,EAAE,uBAAuB,GAAG,OAAO;IAShD;;;;;;;;;;;;;;;OAeG;IACG,OAAO,IAAI,OAAO,CAAC,wBAAwB,CAAC;IAkDlD;;;;;OAKG;IACH,OAAO,CAAC,mBAAmB;IAmB3B;;;;;;;;;;;;;;;OAeG;IACG,wBAAwB,CAAC,QAAQ,EAAE,aAAa,GAAG,OAAO,CAAC,yBAAyB,CAAC;IAY3F;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,KAAK,CAAC,QAAQ,EAAE,mBAAmB,EAAE,IAAI,CAAC,EAAE;QAAE,eAAe,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI;IAqFhF,iEAAiE;IACjE,IAAI,IAAI,IAAI;CAIb"}
@@ -0,0 +1,324 @@
1
+ /**
2
+ * Keeps the short-lived access credential fresh. It owns the re-mint hook, a
3
+ * single-flight guard that stops concurrent triggers from minting more than
4
+ * once, and a browser-only proactive refresh — a timer plus an OS-wake listener
5
+ * — that renews the credential ahead of expiry. It reaches the rest of the
6
+ * client only through the small {@link CredentialLifecycleContext} interface,
7
+ * so the two can reference each other without an import cycle.
8
+ */
9
+ import { noopLogger } from '../logger.js';
10
+ import { credentialExpiry, credentialToken, } from '../auth/credentialResult.js';
11
+ /** The fallback pre-roll interval, and also its ceiling: 10 minutes, which sits
12
+ * comfortably inside the server's 15-minute default credential lifetime. Used
13
+ * as-is when the refresher reports no expiry. */
14
+ export const DEFAULT_PREROLL_INTERVAL_MS = 10 * 60 * 1000;
15
+ /** Floor so a very short (or already-elapsed) TTL can't hot-loop the mint. */
16
+ export const MIN_PREROLL_DELAY_MS = 30 * 1000;
17
+ /**
18
+ * Computes how long to wait before pre-rolling a credential that expires at
19
+ * `expiresAtMs`: about two-thirds of the remaining lifetime (a 15-minute
20
+ * credential yields 10 minutes), clamped to
21
+ * [{@link MIN_PREROLL_DELAY_MS}, {@link DEFAULT_PREROLL_INTERVAL_MS}]. An
22
+ * unknown expiry (`null`) falls back to the 10-minute interval. Exported for
23
+ * unit tests.
24
+ */
25
+ export function computePrerollDelayMs(expiresAtMs, nowMs) {
26
+ if (expiresAtMs === null || !Number.isFinite(expiresAtMs)) {
27
+ return DEFAULT_PREROLL_INTERVAL_MS;
28
+ }
29
+ const remaining = expiresAtMs - nowMs;
30
+ if (remaining <= 0)
31
+ return MIN_PREROLL_DELAY_MS;
32
+ const twoThirds = Math.floor((remaining * 2) / 3);
33
+ return Math.min(Math.max(twoThirds, MIN_PREROLL_DELAY_MS), DEFAULT_PREROLL_INTERVAL_MS);
34
+ }
35
+ /** Narrow a refresher-supplied `expiresAt` to epoch ms, or `null` when
36
+ * absent/unparseable (→ fallback cadence, never a crash). */
37
+ function normalizeExpiresAtMs(expiresAt) {
38
+ if (expiresAt === undefined)
39
+ return null;
40
+ const ms = Date.parse(expiresAt);
41
+ return Number.isFinite(ms) ? ms : null;
42
+ }
43
+ export class CredentialLifecycle {
44
+ ctx;
45
+ logger;
46
+ /**
47
+ * The hook that mints a fresh short-lived access credential (the `ek_`/`rk_`
48
+ * key). An integrator wires it from their own token endpoint: this lifecycle
49
+ * decides when to refresh (a stale-credential probe or an external nudge),
50
+ * and the hook decides how to mint. It follows the same contract as a
51
+ * `getToken` function — it resolves a token string on success, `null` when
52
+ * the long-lived login is gone (a terminal state), and throws on a transient
53
+ * or offline failure. Used by {@link refresh}. When it is absent there is no
54
+ * silent re-mint, as with a static `apiKey` whose credential source is
55
+ * refreshed elsewhere.
56
+ */
57
+ credentialRefresher = null;
58
+ /** Single-flight guard so a wake nudge + an in-flight request + a probe don't
59
+ * all mint at once (the classic "token thrash → random logout" bug). */
60
+ inFlightCredentialRefresh = null;
61
+ /** Tears down the proactive credential lifecycle (the refresh timer and the
62
+ * OS-wake listener) installed by {@link start}; cleared when the client
63
+ * disconnects. Null when no refresher is wired. */
64
+ credentialLifecycleTeardown = null;
65
+ /** Epoch milliseconds at which the current credential expires, when the
66
+ * refresher reports it (the object form of {@link CredentialRefreshResult}).
67
+ * `null` for the string-form resolver, in which case the pre-roll uses its
68
+ * fixed interval. */
69
+ credentialExpiresAtMs = null;
70
+ /** Re-arms the proactive pre-roll timer (set by {@link start}). Called after
71
+ * every successful mint, so a refresh triggered reactively (by a probe, an
72
+ * OS wake, or the first mint) re-anchors the schedule to the fresh
73
+ * credential's real expiry instead of a stale fixed delay. */
74
+ prerollReschedule = null;
75
+ constructor(ctx, logger = noopLogger) {
76
+ this.ctx = ctx;
77
+ this.logger = logger;
78
+ }
79
+ /**
80
+ * Registers the re-mint hook for the access credential — a function that
81
+ * mints a fresh `ek_`/`rk_` key, typically the integrator's `getToken`. See
82
+ * {@link credentialRefresher}.
83
+ */
84
+ setRefresher(refresher) {
85
+ this.credentialRefresher = refresher;
86
+ }
87
+ /** Seeds the first mint through the same expiry-aware path as later refreshes. */
88
+ accept(result) {
89
+ const token = credentialToken(result);
90
+ if (!token)
91
+ return false;
92
+ this.credentialExpiresAtMs = normalizeExpiresAtMs(credentialExpiry(result));
93
+ this.ctx.setAuthToken(token);
94
+ this.prerollReschedule?.();
95
+ return true;
96
+ }
97
+ /**
98
+ * Re-mints the short-lived access credential, pushes it into the credential
99
+ * source, and reports a three-way outcome the connection layer acts on:
100
+ * - a token string → `'refreshed'` (the fresh key is in place; re-probe and reconnect)
101
+ * - `null` → `'session_error'` (the login itself is gone — terminal, sign out)
102
+ * - a thrown error → `'network_error'` (the mint endpoint was unreachable — transient)
103
+ *
104
+ * The call is single-flight: concurrent triggers (an OS wake, an in-flight
105
+ * request, a probe) share one in-flight promise, so the credential is never
106
+ * minted twice at once. This avoids the failure where every rejected request
107
+ * mints a new token and the resulting thrash logs the user out.
108
+ *
109
+ * With no refresher wired, it resolves `'refreshed'` as a no-op re-probe: a
110
+ * static-`apiKey` client has no session to mint from and its credential
111
+ * source is refreshed elsewhere, so it simply re-probes with what it holds.
112
+ */
113
+ async refresh() {
114
+ const refresher = this.credentialRefresher;
115
+ if (!refresher)
116
+ return 'refreshed';
117
+ if (this.inFlightCredentialRefresh)
118
+ return this.inFlightCredentialRefresh;
119
+ const run = (async () => {
120
+ try {
121
+ const result = await refresher();
122
+ if (!this.accept(result)) {
123
+ // null = the long-lived login is gone (the mint endpoint answered
124
+ // structured session_expired). Terminal — this routes to sign-out.
125
+ return 'session_error';
126
+ }
127
+ // Object-form resolvers carry the mint's actual expiry; remember it so
128
+ // the proactive pre-roll schedules off the real TTL (string-form
129
+ // resolvers leave it null → fixed fallback cadence).
130
+ return 'refreshed';
131
+ }
132
+ catch (error) {
133
+ // A throw = transient (offline / mint endpoint unreachable / 5xx). The
134
+ // login may be perfectly valid; never sign out for this — back off and
135
+ // retry. Mirrors the `getToken` throw-vs-null contract end-to-end.
136
+ const message = error?.message ?? String(error);
137
+ // A relative-URL resolver invoked on the server (Node's fetch has no
138
+ // origin to resolve against) throws the opaque "Failed to parse URL" or
139
+ // "Only absolute URLs are supported". Translate it into something
140
+ // actionable rather than a mystery transient blip: the proactive
141
+ // refresh is browser-only, so reaching here means the resolver fired
142
+ // from a server render or a server route.
143
+ if (typeof window === 'undefined' && /parse URL|absolute URLs?/i.test(message)) {
144
+ this.logger.warn('credential resolver ran on the server with a relative URL — Node fetch needs an absolute URL. ' +
145
+ 'Refresh the Ablo client in the browser, or build an absolute URL server-side ' +
146
+ "(e.g. new URL('/api/ablo-session', process.env.NEXT_PUBLIC_APP_URL)).", { error: message });
147
+ }
148
+ else {
149
+ this.logger.debug('access-credential re-mint failed (transient)', { error: message });
150
+ }
151
+ return 'network_error';
152
+ }
153
+ })();
154
+ this.inFlightCredentialRefresh = run;
155
+ try {
156
+ return await run;
157
+ }
158
+ finally {
159
+ this.inFlightCredentialRefresh = null;
160
+ }
161
+ }
162
+ /**
163
+ * Interprets a refresh outcome and drives the connection accordingly. This is
164
+ * the single place the three-way outcome is acted on, shared by the proactive
165
+ * pre-roll, the OS-wake nudge, and the HTTP auth-recovery path, so every
166
+ * trigger converges on the same behavior.
167
+ */
168
+ routeRefreshOutcome(outcome) {
169
+ if (outcome === 'refreshed') {
170
+ // Fresh key already pushed into the credential source by `refresh`;
171
+ // nudge a parked connection to re-probe with it.
172
+ this.ctx.nudgeReconnect();
173
+ return 'retry';
174
+ }
175
+ if (outcome === 'session_error') {
176
+ // The long-lived login is gone (the mint reported session_expired). Report it;
177
+ // this is harmless in connection states that don't accept the event,
178
+ // which converge on sign-out anyway.
179
+ this.ctx.reportSessionExpired();
180
+ return 'stop';
181
+ }
182
+ // 'network_error' → transient (offline or a mint hiccup); the next proactive
183
+ // tick or the connection's own probe retries. Never sign out, never replay now.
184
+ return 'stop';
185
+ }
186
+ /**
187
+ * The shared recovery path for a request rejected on authentication, over any
188
+ * transport. The WebSocket probe already routes its own 401s; HTTP callers
189
+ * call this instead of inventing their own handling, so every path shares one
190
+ * single-flight mint, one outcome routing, and one taxonomy. It classifies
191
+ * the same recovery codes the connection probe does:
192
+ * - `access_credential_expiry` — the routine case, an expired `ek_`/`rk_`:
193
+ * silently re-mint through the single-flight {@link refresh} and tell the
194
+ * caller to replay once on success. This never signs out on its own; the
195
+ * only terminal path is the mint resolving `null`.
196
+ * - `session_expiry` — the login is gone: report it (which drives sign-out)
197
+ * and stop, since replaying is pointless.
198
+ * - `auth_blocked`, `permission`, and everything else — re-minting would
199
+ * produce the same rejected credential, so stop and leave the connection
200
+ * alone.
201
+ */
202
+ async recoverFromAuthRejection(recovery) {
203
+ switch (recovery) {
204
+ case 'access_credential_expiry':
205
+ return this.routeRefreshOutcome(await this.refresh());
206
+ case 'session_expiry':
207
+ this.ctx.reportSessionExpired();
208
+ return 'stop';
209
+ default:
210
+ return 'stop';
211
+ }
212
+ }
213
+ /**
214
+ * Installs the credential lifecycle. It has two parts:
215
+ * 1. Reactive — registers `getToken` as the re-mint hook the connection
216
+ * calls when a probe finds the key stale, or on a nudge.
217
+ * 2. Proactive — keeps the short-lived key fresh ahead of expiry with a
218
+ * refresh timer inside the credential's lifetime, plus a re-mint on OS
219
+ * wake. The whole proactive block is browser-gated on `typeof window`,
220
+ * because a server render has no socket to keep warm and the resolver is
221
+ * browser-oriented; arming it under Node would fire a relative-URL fetch
222
+ * and throw. (Agents pass a static `apiKey` with no resolver, so this
223
+ * method is never called for them.)
224
+ *
225
+ * Refreshing is automatic — a consumer never calls a refresh method. The call
226
+ * is idempotent: a second call replaces the first, and it is torn down when
227
+ * the client disconnects.
228
+ *
229
+ * `opts.proactiveInNode` arms the refresh timer on a windowless host as well.
230
+ * Set it for agent or system participants — long-lived server sockets whose
231
+ * `rk_`/`ek_` must renew before the server's keepalive check closes them.
232
+ * Node timers are `unref`ed, so a finishing script is never held alive by the
233
+ * pre-roll. The OS-wake listener stays browser-only regardless, since there
234
+ * is no `window` to listen on.
235
+ */
236
+ start(getToken, opts) {
237
+ this.stop();
238
+ this.setRefresher(getToken);
239
+ // Re-mint through the same single-flight path the reactive probe uses
240
+ // (`refresh`) rather than calling `getToken()` directly. This gives two
241
+ // things: the mint stays single-flight, so an OS wake, an in-flight probe,
242
+ // and this proactive roll share one in-flight promise instead of thrashing;
243
+ // and the three-way outcome is honored, so a `null` result (the login is
244
+ // gone) actually drives expiry instead of being dropped, which would leave a
245
+ // zombie session that re-mints on every tab focus.
246
+ const refresh = async () => {
247
+ // Same outcome routing as every other trigger (see routeRefreshOutcome):
248
+ // refreshed → nudge, session_error → report, network_error → wait for
249
+ // the next tick / the FSM's own probe. Never sign out for a transient.
250
+ this.routeRefreshOutcome(await this.refresh());
251
+ };
252
+ const teardowns = [];
253
+ // The proactive pre-roll arms in the browser, or under Node when the host
254
+ // opts in (`proactiveInNode`, for agent or system participants). The
255
+ // default Node posture stays reactive-only, because a server render can
256
+ // construct user-kind clients whose resolver is browser-oriented (a
257
+ // relative-URL `fetch('/api/ablo-session')`); arming a timer there fires
258
+ // that resolver under Node, where fetch has no origin for a relative URL and
259
+ // throws "Failed to parse URL" on every tick. Long-lived server
260
+ // participants are the opposite case: their socket must outlive the
261
+ // credential's lifetime, so they get the timer. The reactive re-mint hook
262
+ // (`setRefresher` above) stays unconditional: it only fires on a real
263
+ // connection probe, which can't happen during a bare server-side module
264
+ // evaluation.
265
+ if (typeof window !== 'undefined' || opts?.proactiveInNode === true) {
266
+ // A missed tick (throttled in the background) is recovered by the next
267
+ // one, or by the reactive probe. This timer is the only proactive
268
+ // pre-roll — it keeps the key warm ahead of expiry even while the socket
269
+ // sits healthy and connected, a state the connection never probes. The
270
+ // delay comes from the minted credential's real `expiresAt` when the
271
+ // refresher reports one (about two-thirds of the remaining lifetime), with
272
+ // the 10-minute value as both ceiling and fallback, so a deployment that
273
+ // mints shorter-lived keys still pre-rolls in time rather than dropping to
274
+ // reactive-only recovery.
275
+ let timer = null;
276
+ const scheduleNext = () => {
277
+ if (timer !== null)
278
+ clearTimeout(timer); // idempotent re-arm
279
+ const delay = computePrerollDelayMs(this.credentialExpiresAtMs, Date.now());
280
+ timer = setTimeout(() => {
281
+ // `.finally` keeps the chain alive after a transient failure; a
282
+ // successful mint has already re-armed via `prerollReschedule` (the
283
+ // clearTimeout above makes the double-arm a no-op).
284
+ void refresh().finally(scheduleNext);
285
+ }, delay);
286
+ // Node: never keep a finishing process alive just for the pre-roll
287
+ // (browser timers have no unref — optional call is a no-op there).
288
+ timer.unref?.();
289
+ };
290
+ scheduleNext();
291
+ this.prerollReschedule = scheduleNext;
292
+ teardowns.push(() => {
293
+ if (timer !== null)
294
+ clearTimeout(timer);
295
+ timer = null;
296
+ this.prerollReschedule = null;
297
+ });
298
+ // OS-wake, on desktop only: the Electron shell bridges `powerMonitor`
299
+ // 'resume' to this DOM event. It is the one event trigger this lifecycle
300
+ // still owns, because `visibilitychange` does not fire on wake-from-sleep
301
+ // and the connection's own browser listeners don't cover wake. It is
302
+ // browser-gated separately from the timer, since a `proactiveInNode` host
303
+ // has no `window` to listen on and no OS sleep to wake from. Coming back
304
+ // online and regaining tab visibility are handled elsewhere — the
305
+ // connection already re-probes through this same credential path — so
306
+ // listening for them here too would only fire a second, redundant mint.
307
+ if (typeof window !== 'undefined') {
308
+ const onWake = () => void refresh();
309
+ window.addEventListener('ablo:wake', onWake);
310
+ teardowns.push(() => { window.removeEventListener('ablo:wake', onWake); });
311
+ }
312
+ }
313
+ this.credentialLifecycleTeardown = () => {
314
+ for (const t of teardowns)
315
+ t();
316
+ };
317
+ }
318
+ /** Tear down the proactive credential lifecycle (idempotent). */
319
+ stop() {
320
+ this.credentialLifecycleTeardown?.();
321
+ this.credentialLifecycleTeardown = null;
322
+ }
323
+ }
324
+ //# sourceMappingURL=credentialLifecycle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credentialLifecycle.js","sourceRoot":"","sources":["../../src/transport/credentialLifecycle.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,66 @@
1
+ /**
2
+ * Application-level heartbeat for the sync WebSocket.
3
+ *
4
+ * The browser WebSocket API hides RFC 6455 protocol-level ping and pong frames
5
+ * from JavaScript, so the server's keepalive cannot be observed by client
6
+ * code. That leaves the client unable to tell a healthy idle connection apart
7
+ * from a "zombie" socket whose underlying TCP connection has silently broken
8
+ * (laptop sleep, NAT timeout, mobile handoff). To close the gap, the client
9
+ * sends an application-level `{ type: 'ping' }` every 30 seconds and
10
+ * force-closes the socket if no inbound traffic arrives within 10 seconds. Any
11
+ * inbound message counts as proof the connection is alive; the explicit `pong`
12
+ * merely guarantees that something arrives even on an otherwise idle stream.
13
+ */
14
+ import { type TransportObservability } from '../observability.js';
15
+ /**
16
+ * The interval between application-level pings, shared with both sides of the
17
+ * connection: the client pings at the same {@link PING_INTERVAL_MS} the server
18
+ * uses for its own keepalive, and the claim lease window is derived from the
19
+ * same constant.
20
+ */
21
+ export declare const HEARTBEAT_INTERVAL_MS = 30000;
22
+ export declare const HEARTBEAT_TIMEOUT_MS = 10000;
23
+ /**
24
+ * The narrow slice of the socket the heartbeat depends on. Keeping it small
25
+ * lets the {@link HeartbeatController} work without depending on the full
26
+ * WebSocket transport.
27
+ */
28
+ export interface HeartbeatTransport {
29
+ /** True only while the underlying socket is open. */
30
+ isSocketOpen(): boolean;
31
+ /** Sends the `{ type: 'ping' }` frame; throws when the socket is already dead. */
32
+ sendPing(): void;
33
+ /**
34
+ * Closes the socket from the client side with a private 4xxx code, so the
35
+ * socket's close event fires and the owner's reconnect or handshake-failure
36
+ * handling runs.
37
+ */
38
+ forceClose(reason: string): void;
39
+ }
40
+ /**
41
+ * Runs the application-level heartbeat for one socket. While the socket is
42
+ * open, it sends a `{ type: 'ping' }` frame every {@link HEARTBEAT_INTERVAL_MS}
43
+ * and arms a {@link HEARTBEAT_TIMEOUT_MS} watchdog. Any inbound frame clears
44
+ * the watchdog — the owner calls {@link HeartbeatController.clearHeartbeatTimeout}
45
+ * from its message handler. If the watchdog fires first, the connection is
46
+ * treated as a zombie and force-closed, which lets the owner's reconnect path
47
+ * run.
48
+ *
49
+ * The heartbeat exists because the client cannot see the protocol-level
50
+ * keepalive: browsers answer the server's pings automatically but never expose
51
+ * those frames to JavaScript. On a half-open connection (laptop wake, NAT
52
+ * timeout, mobile handoff) the socket can report itself open for minutes
53
+ * before the operating system surfaces the break, so observable application
54
+ * traffic is the only reliable signal.
55
+ */
56
+ export declare class HeartbeatController {
57
+ private readonly transport;
58
+ private readonly observability;
59
+ private heartbeatTimer;
60
+ private heartbeatTimeoutTimer;
61
+ constructor(transport: HeartbeatTransport, observability?: TransportObservability);
62
+ start(): void;
63
+ stop(): void;
64
+ clearHeartbeatTimeout(): void;
65
+ }
66
+ //# sourceMappingURL=heartbeat.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"heartbeat.d.ts","sourceRoot":"","sources":["../../src/transport/heartbeat.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,EAEL,KAAK,sBAAsB,EAC5B,MAAM,qBAAqB,CAAC;AAE7B;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,QAAmB,CAAC;AACtD,eAAO,MAAM,oBAAoB,QAAS,CAAC;AAE3C;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IACjC,qDAAqD;IACrD,YAAY,IAAI,OAAO,CAAC;IACxB,kFAAkF;IAClF,QAAQ,IAAI,IAAI,CAAC;IACjB;;;;OAIG;IACH,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CAClC;AAED;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,mBAAmB;IAK5B,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,aAAa;IALhC,OAAO,CAAC,cAAc,CAA+C;IACrE,OAAO,CAAC,qBAAqB,CAA8C;gBAGxD,SAAS,EAAE,kBAAkB,EAC7B,aAAa,GAAE,sBAAgD;IAGlF,KAAK,IAAI,IAAI;IA+Bb,IAAI,IAAI,IAAI;IAQZ,qBAAqB,IAAI,IAAI;CAM9B"}