@zshannon/streamstore 0.22.3

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 (444) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +93 -0
  3. package/dist/cjs/accessTokens.d.ts +51 -0
  4. package/dist/cjs/accessTokens.d.ts.map +1 -0
  5. package/dist/cjs/accessTokens.js +127 -0
  6. package/dist/cjs/accessTokens.js.map +1 -0
  7. package/dist/cjs/auth/biscuit.d.ts +42 -0
  8. package/dist/cjs/auth/biscuit.d.ts.map +1 -0
  9. package/dist/cjs/auth/biscuit.js +72 -0
  10. package/dist/cjs/auth/biscuit.js.map +1 -0
  11. package/dist/cjs/auth/index.d.ts +5 -0
  12. package/dist/cjs/auth/index.d.ts.map +1 -0
  13. package/dist/cjs/auth/index.js +14 -0
  14. package/dist/cjs/auth/index.js.map +1 -0
  15. package/dist/cjs/auth/pki-auth.d.ts +60 -0
  16. package/dist/cjs/auth/pki-auth.d.ts.map +1 -0
  17. package/dist/cjs/auth/pki-auth.js +102 -0
  18. package/dist/cjs/auth/pki-auth.js.map +1 -0
  19. package/dist/cjs/auth/sign.d.ts +39 -0
  20. package/dist/cjs/auth/sign.d.ts.map +1 -0
  21. package/dist/cjs/auth/sign.js +128 -0
  22. package/dist/cjs/auth/sign.js.map +1 -0
  23. package/dist/cjs/auth/signing-key.d.ts +42 -0
  24. package/dist/cjs/auth/signing-key.d.ts.map +1 -0
  25. package/dist/cjs/auth/signing-key.js +66 -0
  26. package/dist/cjs/auth/signing-key.js.map +1 -0
  27. package/dist/cjs/basin.d.ts +33 -0
  28. package/dist/cjs/basin.d.ts.map +1 -0
  29. package/dist/cjs/basin.js +54 -0
  30. package/dist/cjs/basin.js.map +1 -0
  31. package/dist/cjs/basins.d.ts +62 -0
  32. package/dist/cjs/basins.d.ts.map +1 -0
  33. package/dist/cjs/basins.js +201 -0
  34. package/dist/cjs/basins.js.map +1 -0
  35. package/dist/cjs/batch-transform.d.ts +60 -0
  36. package/dist/cjs/batch-transform.d.ts.map +1 -0
  37. package/dist/cjs/batch-transform.js +171 -0
  38. package/dist/cjs/batch-transform.js.map +1 -0
  39. package/dist/cjs/common.d.ts +156 -0
  40. package/dist/cjs/common.d.ts.map +1 -0
  41. package/dist/cjs/common.js +54 -0
  42. package/dist/cjs/common.js.map +1 -0
  43. package/dist/cjs/endpoints.d.ts +63 -0
  44. package/dist/cjs/endpoints.d.ts.map +1 -0
  45. package/dist/cjs/endpoints.js +120 -0
  46. package/dist/cjs/endpoints.js.map +1 -0
  47. package/dist/cjs/error.d.ts +119 -0
  48. package/dist/cjs/error.d.ts.map +1 -0
  49. package/dist/cjs/error.js +373 -0
  50. package/dist/cjs/error.js.map +1 -0
  51. package/dist/cjs/generated/client/client.gen.d.ts +3 -0
  52. package/dist/cjs/generated/client/client.gen.d.ts.map +1 -0
  53. package/dist/cjs/generated/client/client.gen.js +209 -0
  54. package/dist/cjs/generated/client/client.gen.js.map +1 -0
  55. package/dist/cjs/generated/client/index.d.ts +9 -0
  56. package/dist/cjs/generated/client/index.d.ts.map +1 -0
  57. package/dist/cjs/generated/client/index.js +18 -0
  58. package/dist/cjs/generated/client/index.js.map +1 -0
  59. package/dist/cjs/generated/client/types.gen.d.ts +125 -0
  60. package/dist/cjs/generated/client/types.gen.d.ts.map +1 -0
  61. package/dist/cjs/generated/client/types.gen.js +4 -0
  62. package/dist/cjs/generated/client/types.gen.js.map +1 -0
  63. package/dist/cjs/generated/client/utils.gen.d.ts +34 -0
  64. package/dist/cjs/generated/client/utils.gen.d.ts.map +1 -0
  65. package/dist/cjs/generated/client/utils.gen.js +243 -0
  66. package/dist/cjs/generated/client/utils.gen.js.map +1 -0
  67. package/dist/cjs/generated/client.gen.d.ts +13 -0
  68. package/dist/cjs/generated/client.gen.d.ts.map +1 -0
  69. package/dist/cjs/generated/client.gen.js +9 -0
  70. package/dist/cjs/generated/client.gen.js.map +1 -0
  71. package/dist/cjs/generated/core/auth.gen.d.ts +19 -0
  72. package/dist/cjs/generated/core/auth.gen.d.ts.map +1 -0
  73. package/dist/cjs/generated/core/auth.gen.js +19 -0
  74. package/dist/cjs/generated/core/auth.gen.js.map +1 -0
  75. package/dist/cjs/generated/core/bodySerializer.gen.d.ts +26 -0
  76. package/dist/cjs/generated/core/bodySerializer.gen.d.ts.map +1 -0
  77. package/dist/cjs/generated/core/bodySerializer.gen.js +61 -0
  78. package/dist/cjs/generated/core/bodySerializer.gen.js.map +1 -0
  79. package/dist/cjs/generated/core/params.gen.d.ts +44 -0
  80. package/dist/cjs/generated/core/params.gen.d.ts.map +1 -0
  81. package/dist/cjs/generated/core/params.gen.js +105 -0
  82. package/dist/cjs/generated/core/params.gen.js.map +1 -0
  83. package/dist/cjs/generated/core/pathSerializer.gen.d.ts +34 -0
  84. package/dist/cjs/generated/core/pathSerializer.gen.d.ts.map +1 -0
  85. package/dist/cjs/generated/core/pathSerializer.gen.js +124 -0
  86. package/dist/cjs/generated/core/pathSerializer.gen.js.map +1 -0
  87. package/dist/cjs/generated/core/queryKeySerializer.gen.d.ts +19 -0
  88. package/dist/cjs/generated/core/queryKeySerializer.gen.d.ts.map +1 -0
  89. package/dist/cjs/generated/core/queryKeySerializer.gen.js +106 -0
  90. package/dist/cjs/generated/core/queryKeySerializer.gen.js.map +1 -0
  91. package/dist/cjs/generated/core/serverSentEvents.gen.d.ts +72 -0
  92. package/dist/cjs/generated/core/serverSentEvents.gen.d.ts.map +1 -0
  93. package/dist/cjs/generated/core/serverSentEvents.gen.js +140 -0
  94. package/dist/cjs/generated/core/serverSentEvents.gen.js.map +1 -0
  95. package/dist/cjs/generated/core/types.gen.d.ts +79 -0
  96. package/dist/cjs/generated/core/types.gen.d.ts.map +1 -0
  97. package/dist/cjs/generated/core/types.gen.js +4 -0
  98. package/dist/cjs/generated/core/types.gen.js.map +1 -0
  99. package/dist/cjs/generated/core/utils.gen.d.ts +20 -0
  100. package/dist/cjs/generated/core/utils.gen.d.ts.map +1 -0
  101. package/dist/cjs/generated/core/utils.gen.js +94 -0
  102. package/dist/cjs/generated/core/utils.gen.js.map +1 -0
  103. package/dist/cjs/generated/index.d.ts +3 -0
  104. package/dist/cjs/generated/index.d.ts.map +1 -0
  105. package/dist/cjs/generated/index.js +19 -0
  106. package/dist/cjs/generated/index.js.map +1 -0
  107. package/dist/cjs/generated/proto/s2.d.ts +250 -0
  108. package/dist/cjs/generated/proto/s2.d.ts.map +1 -0
  109. package/dist/cjs/generated/proto/s2.js +426 -0
  110. package/dist/cjs/generated/proto/s2.js.map +1 -0
  111. package/dist/cjs/generated/sdk.gen.d.ts +100 -0
  112. package/dist/cjs/generated/sdk.gen.d.ts.map +1 -0
  113. package/dist/cjs/generated/sdk.gen.js +374 -0
  114. package/dist/cjs/generated/sdk.gen.js.map +1 -0
  115. package/dist/cjs/generated/types.gen.d.ts +1064 -0
  116. package/dist/cjs/generated/types.gen.d.ts.map +1 -0
  117. package/dist/cjs/generated/types.gen.js +4 -0
  118. package/dist/cjs/generated/types.gen.js.map +1 -0
  119. package/dist/cjs/index.d.ts +42 -0
  120. package/dist/cjs/index.d.ts.map +1 -0
  121. package/dist/cjs/index.js +81 -0
  122. package/dist/cjs/index.js.map +1 -0
  123. package/dist/cjs/internal/case-transform.d.ts +59 -0
  124. package/dist/cjs/internal/case-transform.d.ts.map +1 -0
  125. package/dist/cjs/internal/case-transform.js +80 -0
  126. package/dist/cjs/internal/case-transform.js.map +1 -0
  127. package/dist/cjs/internal/mappers.d.ts +51 -0
  128. package/dist/cjs/internal/mappers.d.ts.map +1 -0
  129. package/dist/cjs/internal/mappers.js +225 -0
  130. package/dist/cjs/internal/mappers.js.map +1 -0
  131. package/dist/cjs/internal/sdk-types.d.ts +127 -0
  132. package/dist/cjs/internal/sdk-types.d.ts.map +1 -0
  133. package/dist/cjs/internal/sdk-types.js +9 -0
  134. package/dist/cjs/internal/sdk-types.js.map +1 -0
  135. package/dist/cjs/lib/base64.d.ts +12 -0
  136. package/dist/cjs/lib/base64.d.ts.map +1 -0
  137. package/dist/cjs/lib/base64.js +172 -0
  138. package/dist/cjs/lib/base64.js.map +1 -0
  139. package/dist/cjs/lib/event-stream.d.ts +26 -0
  140. package/dist/cjs/lib/event-stream.d.ts.map +1 -0
  141. package/dist/cjs/lib/event-stream.js +154 -0
  142. package/dist/cjs/lib/event-stream.js.map +1 -0
  143. package/dist/cjs/lib/paginate.d.ts +61 -0
  144. package/dist/cjs/lib/paginate.d.ts.map +1 -0
  145. package/dist/cjs/lib/paginate.js +51 -0
  146. package/dist/cjs/lib/paginate.js.map +1 -0
  147. package/dist/cjs/lib/redacted.d.ts +17 -0
  148. package/dist/cjs/lib/redacted.d.ts.map +1 -0
  149. package/dist/cjs/lib/redacted.js +34 -0
  150. package/dist/cjs/lib/redacted.js.map +1 -0
  151. package/dist/cjs/lib/result.d.ts +57 -0
  152. package/dist/cjs/lib/result.d.ts.map +1 -0
  153. package/dist/cjs/lib/result.js +43 -0
  154. package/dist/cjs/lib/result.js.map +1 -0
  155. package/dist/cjs/lib/retry.d.ts +167 -0
  156. package/dist/cjs/lib/retry.d.ts.map +1 -0
  157. package/dist/cjs/lib/retry.js +1011 -0
  158. package/dist/cjs/lib/retry.js.map +1 -0
  159. package/dist/cjs/lib/stream/factory.d.ts +14 -0
  160. package/dist/cjs/lib/stream/factory.d.ts.map +1 -0
  161. package/dist/cjs/lib/stream/factory.js +35 -0
  162. package/dist/cjs/lib/stream/factory.js.map +1 -0
  163. package/dist/cjs/lib/stream/runtime.d.ts +27 -0
  164. package/dist/cjs/lib/stream/runtime.d.ts.map +1 -0
  165. package/dist/cjs/lib/stream/runtime.js +70 -0
  166. package/dist/cjs/lib/stream/runtime.js.map +1 -0
  167. package/dist/cjs/lib/stream/transport/fetch/index.d.ts +64 -0
  168. package/dist/cjs/lib/stream/transport/fetch/index.d.ts.map +1 -0
  169. package/dist/cjs/lib/stream/transport/fetch/index.js +462 -0
  170. package/dist/cjs/lib/stream/transport/fetch/index.js.map +1 -0
  171. package/dist/cjs/lib/stream/transport/fetch/shared.d.ts +11 -0
  172. package/dist/cjs/lib/stream/transport/fetch/shared.d.ts.map +1 -0
  173. package/dist/cjs/lib/stream/transport/fetch/shared.js +118 -0
  174. package/dist/cjs/lib/stream/transport/fetch/shared.js.map +1 -0
  175. package/dist/cjs/lib/stream/transport/proto.d.ts +9 -0
  176. package/dist/cjs/lib/stream/transport/proto.d.ts.map +1 -0
  177. package/dist/cjs/lib/stream/transport/proto.js +118 -0
  178. package/dist/cjs/lib/stream/transport/proto.js.map +1 -0
  179. package/dist/cjs/lib/stream/transport/s2s/framing.d.ts +47 -0
  180. package/dist/cjs/lib/stream/transport/s2s/framing.d.ts.map +1 -0
  181. package/dist/cjs/lib/stream/transport/s2s/framing.js +123 -0
  182. package/dist/cjs/lib/stream/transport/s2s/framing.js.map +1 -0
  183. package/dist/cjs/lib/stream/transport/s2s/index.d.ts +24 -0
  184. package/dist/cjs/lib/stream/transport/s2s/index.d.ts.map +1 -0
  185. package/dist/cjs/lib/stream/transport/s2s/index.js +823 -0
  186. package/dist/cjs/lib/stream/transport/s2s/index.js.map +1 -0
  187. package/dist/cjs/lib/stream/types.d.ts +199 -0
  188. package/dist/cjs/lib/stream/types.d.ts.map +1 -0
  189. package/dist/cjs/lib/stream/types.js +21 -0
  190. package/dist/cjs/lib/stream/types.js.map +1 -0
  191. package/dist/cjs/metrics.d.ts +46 -0
  192. package/dist/cjs/metrics.d.ts.map +1 -0
  193. package/dist/cjs/metrics.js +127 -0
  194. package/dist/cjs/metrics.js.map +1 -0
  195. package/dist/cjs/package.json +3 -0
  196. package/dist/cjs/producer.d.ts +82 -0
  197. package/dist/cjs/producer.d.ts.map +1 -0
  198. package/dist/cjs/producer.js +305 -0
  199. package/dist/cjs/producer.js.map +1 -0
  200. package/dist/cjs/s2.d.ts +41 -0
  201. package/dist/cjs/s2.d.ts.map +1 -0
  202. package/dist/cjs/s2.js +119 -0
  203. package/dist/cjs/s2.js.map +1 -0
  204. package/dist/cjs/stream.d.ts +78 -0
  205. package/dist/cjs/stream.d.ts.map +1 -0
  206. package/dist/cjs/stream.js +176 -0
  207. package/dist/cjs/stream.js.map +1 -0
  208. package/dist/cjs/streams.d.ts +61 -0
  209. package/dist/cjs/streams.d.ts.map +1 -0
  210. package/dist/cjs/streams.js +201 -0
  211. package/dist/cjs/streams.js.map +1 -0
  212. package/dist/cjs/types.d.ts +633 -0
  213. package/dist/cjs/types.d.ts.map +1 -0
  214. package/dist/cjs/types.js +129 -0
  215. package/dist/cjs/types.js.map +1 -0
  216. package/dist/cjs/utils.d.ts +25 -0
  217. package/dist/cjs/utils.d.ts.map +1 -0
  218. package/dist/cjs/utils.js +108 -0
  219. package/dist/cjs/utils.js.map +1 -0
  220. package/dist/cjs/version.d.ts +8 -0
  221. package/dist/cjs/version.d.ts.map +1 -0
  222. package/dist/cjs/version.js +11 -0
  223. package/dist/cjs/version.js.map +1 -0
  224. package/dist/esm/accessTokens.d.ts +51 -0
  225. package/dist/esm/accessTokens.d.ts.map +1 -0
  226. package/dist/esm/accessTokens.js +123 -0
  227. package/dist/esm/accessTokens.js.map +1 -0
  228. package/dist/esm/auth/biscuit.d.ts +42 -0
  229. package/dist/esm/auth/biscuit.d.ts.map +1 -0
  230. package/dist/esm/auth/biscuit.js +68 -0
  231. package/dist/esm/auth/biscuit.js.map +1 -0
  232. package/dist/esm/auth/index.d.ts +5 -0
  233. package/dist/esm/auth/index.d.ts.map +1 -0
  234. package/dist/esm/auth/index.js +5 -0
  235. package/dist/esm/auth/index.js.map +1 -0
  236. package/dist/esm/auth/pki-auth.d.ts +60 -0
  237. package/dist/esm/auth/pki-auth.d.ts.map +1 -0
  238. package/dist/esm/auth/pki-auth.js +99 -0
  239. package/dist/esm/auth/pki-auth.js.map +1 -0
  240. package/dist/esm/auth/sign.d.ts +39 -0
  241. package/dist/esm/auth/sign.d.ts.map +1 -0
  242. package/dist/esm/auth/sign.js +125 -0
  243. package/dist/esm/auth/sign.js.map +1 -0
  244. package/dist/esm/auth/signing-key.d.ts +42 -0
  245. package/dist/esm/auth/signing-key.d.ts.map +1 -0
  246. package/dist/esm/auth/signing-key.js +62 -0
  247. package/dist/esm/auth/signing-key.js.map +1 -0
  248. package/dist/esm/basin.d.ts +33 -0
  249. package/dist/esm/basin.d.ts.map +1 -0
  250. package/dist/esm/basin.js +50 -0
  251. package/dist/esm/basin.js.map +1 -0
  252. package/dist/esm/basins.d.ts +62 -0
  253. package/dist/esm/basins.d.ts.map +1 -0
  254. package/dist/esm/basins.js +197 -0
  255. package/dist/esm/basins.js.map +1 -0
  256. package/dist/esm/batch-transform.d.ts +60 -0
  257. package/dist/esm/batch-transform.d.ts.map +1 -0
  258. package/dist/esm/batch-transform.js +167 -0
  259. package/dist/esm/batch-transform.js.map +1 -0
  260. package/dist/esm/common.d.ts +156 -0
  261. package/dist/esm/common.d.ts.map +1 -0
  262. package/dist/esm/common.js +49 -0
  263. package/dist/esm/common.js.map +1 -0
  264. package/dist/esm/endpoints.d.ts +63 -0
  265. package/dist/esm/endpoints.d.ts.map +1 -0
  266. package/dist/esm/endpoints.js +115 -0
  267. package/dist/esm/endpoints.js.map +1 -0
  268. package/dist/esm/error.d.ts +119 -0
  269. package/dist/esm/error.d.ts.map +1 -0
  270. package/dist/esm/error.js +358 -0
  271. package/dist/esm/error.js.map +1 -0
  272. package/dist/esm/generated/client/client.gen.d.ts +3 -0
  273. package/dist/esm/generated/client/client.gen.d.ts.map +1 -0
  274. package/dist/esm/generated/client/client.gen.js +205 -0
  275. package/dist/esm/generated/client/client.gen.js.map +1 -0
  276. package/dist/esm/generated/client/index.d.ts +9 -0
  277. package/dist/esm/generated/client/index.d.ts.map +1 -0
  278. package/dist/esm/generated/client/index.js +7 -0
  279. package/dist/esm/generated/client/index.js.map +1 -0
  280. package/dist/esm/generated/client/types.gen.d.ts +125 -0
  281. package/dist/esm/generated/client/types.gen.d.ts.map +1 -0
  282. package/dist/esm/generated/client/types.gen.js +3 -0
  283. package/dist/esm/generated/client/types.gen.js.map +1 -0
  284. package/dist/esm/generated/client/utils.gen.d.ts +34 -0
  285. package/dist/esm/generated/client/utils.gen.d.ts.map +1 -0
  286. package/dist/esm/generated/client/utils.gen.js +232 -0
  287. package/dist/esm/generated/client/utils.gen.js.map +1 -0
  288. package/dist/esm/generated/client.gen.d.ts +13 -0
  289. package/dist/esm/generated/client.gen.d.ts.map +1 -0
  290. package/dist/esm/generated/client.gen.js +6 -0
  291. package/dist/esm/generated/client.gen.js.map +1 -0
  292. package/dist/esm/generated/core/auth.gen.d.ts +19 -0
  293. package/dist/esm/generated/core/auth.gen.d.ts.map +1 -0
  294. package/dist/esm/generated/core/auth.gen.js +15 -0
  295. package/dist/esm/generated/core/auth.gen.js.map +1 -0
  296. package/dist/esm/generated/core/bodySerializer.gen.d.ts +26 -0
  297. package/dist/esm/generated/core/bodySerializer.gen.d.ts.map +1 -0
  298. package/dist/esm/generated/core/bodySerializer.gen.js +58 -0
  299. package/dist/esm/generated/core/bodySerializer.gen.js.map +1 -0
  300. package/dist/esm/generated/core/params.gen.d.ts +44 -0
  301. package/dist/esm/generated/core/params.gen.d.ts.map +1 -0
  302. package/dist/esm/generated/core/params.gen.js +101 -0
  303. package/dist/esm/generated/core/params.gen.js.map +1 -0
  304. package/dist/esm/generated/core/pathSerializer.gen.d.ts +34 -0
  305. package/dist/esm/generated/core/pathSerializer.gen.d.ts.map +1 -0
  306. package/dist/esm/generated/core/pathSerializer.gen.js +115 -0
  307. package/dist/esm/generated/core/pathSerializer.gen.js.map +1 -0
  308. package/dist/esm/generated/core/queryKeySerializer.gen.d.ts +19 -0
  309. package/dist/esm/generated/core/queryKeySerializer.gen.d.ts.map +1 -0
  310. package/dist/esm/generated/core/queryKeySerializer.gen.js +100 -0
  311. package/dist/esm/generated/core/queryKeySerializer.gen.js.map +1 -0
  312. package/dist/esm/generated/core/serverSentEvents.gen.d.ts +72 -0
  313. package/dist/esm/generated/core/serverSentEvents.gen.d.ts.map +1 -0
  314. package/dist/esm/generated/core/serverSentEvents.gen.js +136 -0
  315. package/dist/esm/generated/core/serverSentEvents.gen.js.map +1 -0
  316. package/dist/esm/generated/core/types.gen.d.ts +79 -0
  317. package/dist/esm/generated/core/types.gen.d.ts.map +1 -0
  318. package/dist/esm/generated/core/types.gen.js +3 -0
  319. package/dist/esm/generated/core/types.gen.js.map +1 -0
  320. package/dist/esm/generated/core/utils.gen.d.ts +20 -0
  321. package/dist/esm/generated/core/utils.gen.d.ts.map +1 -0
  322. package/dist/esm/generated/core/utils.gen.js +88 -0
  323. package/dist/esm/generated/core/utils.gen.js.map +1 -0
  324. package/dist/esm/generated/index.d.ts +3 -0
  325. package/dist/esm/generated/index.d.ts.map +1 -0
  326. package/dist/esm/generated/index.js +3 -0
  327. package/dist/esm/generated/index.js.map +1 -0
  328. package/dist/esm/generated/proto/s2.d.ts +250 -0
  329. package/dist/esm/generated/proto/s2.d.ts.map +1 -0
  330. package/dist/esm/generated/proto/s2.js +423 -0
  331. package/dist/esm/generated/proto/s2.js.map +1 -0
  332. package/dist/esm/generated/sdk.gen.d.ts +100 -0
  333. package/dist/esm/generated/sdk.gen.d.ts.map +1 -0
  334. package/dist/esm/generated/sdk.gen.js +350 -0
  335. package/dist/esm/generated/sdk.gen.js.map +1 -0
  336. package/dist/esm/generated/types.gen.d.ts +1064 -0
  337. package/dist/esm/generated/types.gen.d.ts.map +1 -0
  338. package/dist/esm/generated/types.gen.js +3 -0
  339. package/dist/esm/generated/types.gen.js.map +1 -0
  340. package/dist/esm/index.d.ts +42 -0
  341. package/dist/esm/index.d.ts.map +1 -0
  342. package/dist/esm/index.js +47 -0
  343. package/dist/esm/index.js.map +1 -0
  344. package/dist/esm/internal/case-transform.d.ts +59 -0
  345. package/dist/esm/internal/case-transform.d.ts.map +1 -0
  346. package/dist/esm/internal/case-transform.js +76 -0
  347. package/dist/esm/internal/case-transform.js.map +1 -0
  348. package/dist/esm/internal/mappers.d.ts +51 -0
  349. package/dist/esm/internal/mappers.d.ts.map +1 -0
  350. package/dist/esm/internal/mappers.js +218 -0
  351. package/dist/esm/internal/mappers.js.map +1 -0
  352. package/dist/esm/internal/sdk-types.d.ts +127 -0
  353. package/dist/esm/internal/sdk-types.d.ts.map +1 -0
  354. package/dist/esm/internal/sdk-types.js +8 -0
  355. package/dist/esm/internal/sdk-types.js.map +1 -0
  356. package/dist/esm/lib/base64.d.ts +12 -0
  357. package/dist/esm/lib/base64.d.ts.map +1 -0
  358. package/dist/esm/lib/base64.js +165 -0
  359. package/dist/esm/lib/base64.js.map +1 -0
  360. package/dist/esm/lib/event-stream.d.ts +26 -0
  361. package/dist/esm/lib/event-stream.d.ts.map +1 -0
  362. package/dist/esm/lib/event-stream.js +150 -0
  363. package/dist/esm/lib/event-stream.js.map +1 -0
  364. package/dist/esm/lib/paginate.d.ts +61 -0
  365. package/dist/esm/lib/paginate.d.ts.map +1 -0
  366. package/dist/esm/lib/paginate.js +48 -0
  367. package/dist/esm/lib/paginate.js.map +1 -0
  368. package/dist/esm/lib/redacted.d.ts +17 -0
  369. package/dist/esm/lib/redacted.d.ts.map +1 -0
  370. package/dist/esm/lib/redacted.js +28 -0
  371. package/dist/esm/lib/redacted.js.map +1 -0
  372. package/dist/esm/lib/result.d.ts +57 -0
  373. package/dist/esm/lib/result.d.ts.map +1 -0
  374. package/dist/esm/lib/result.js +37 -0
  375. package/dist/esm/lib/result.js.map +1 -0
  376. package/dist/esm/lib/retry.d.ts +167 -0
  377. package/dist/esm/lib/retry.d.ts.map +1 -0
  378. package/dist/esm/lib/retry.js +1003 -0
  379. package/dist/esm/lib/retry.js.map +1 -0
  380. package/dist/esm/lib/stream/factory.d.ts +14 -0
  381. package/dist/esm/lib/stream/factory.d.ts.map +1 -0
  382. package/dist/esm/lib/stream/factory.js +32 -0
  383. package/dist/esm/lib/stream/factory.js.map +1 -0
  384. package/dist/esm/lib/stream/runtime.d.ts +27 -0
  385. package/dist/esm/lib/stream/runtime.d.ts.map +1 -0
  386. package/dist/esm/lib/stream/runtime.js +71 -0
  387. package/dist/esm/lib/stream/runtime.js.map +1 -0
  388. package/dist/esm/lib/stream/transport/fetch/index.d.ts +64 -0
  389. package/dist/esm/lib/stream/transport/fetch/index.d.ts.map +1 -0
  390. package/dist/esm/lib/stream/transport/fetch/index.js +456 -0
  391. package/dist/esm/lib/stream/transport/fetch/index.js.map +1 -0
  392. package/dist/esm/lib/stream/transport/fetch/shared.d.ts +11 -0
  393. package/dist/esm/lib/stream/transport/fetch/shared.d.ts.map +1 -0
  394. package/dist/esm/lib/stream/transport/fetch/shared.js +114 -0
  395. package/dist/esm/lib/stream/transport/fetch/shared.js.map +1 -0
  396. package/dist/esm/lib/stream/transport/proto.d.ts +9 -0
  397. package/dist/esm/lib/stream/transport/proto.d.ts.map +1 -0
  398. package/dist/esm/lib/stream/transport/proto.js +110 -0
  399. package/dist/esm/lib/stream/transport/proto.js.map +1 -0
  400. package/dist/esm/lib/stream/transport/s2s/framing.d.ts +47 -0
  401. package/dist/esm/lib/stream/transport/s2s/framing.d.ts.map +1 -0
  402. package/dist/esm/lib/stream/transport/s2s/framing.js +118 -0
  403. package/dist/esm/lib/stream/transport/s2s/framing.js.map +1 -0
  404. package/dist/esm/lib/stream/transport/s2s/index.d.ts +24 -0
  405. package/dist/esm/lib/stream/transport/s2s/index.d.ts.map +1 -0
  406. package/dist/esm/lib/stream/transport/s2s/index.js +819 -0
  407. package/dist/esm/lib/stream/transport/s2s/index.js.map +1 -0
  408. package/dist/esm/lib/stream/types.d.ts +199 -0
  409. package/dist/esm/lib/stream/types.d.ts.map +1 -0
  410. package/dist/esm/lib/stream/types.js +18 -0
  411. package/dist/esm/lib/stream/types.js.map +1 -0
  412. package/dist/esm/metrics.d.ts +46 -0
  413. package/dist/esm/metrics.d.ts.map +1 -0
  414. package/dist/esm/metrics.js +122 -0
  415. package/dist/esm/metrics.js.map +1 -0
  416. package/dist/esm/producer.d.ts +82 -0
  417. package/dist/esm/producer.d.ts.map +1 -0
  418. package/dist/esm/producer.js +300 -0
  419. package/dist/esm/producer.js.map +1 -0
  420. package/dist/esm/s2.d.ts +41 -0
  421. package/dist/esm/s2.d.ts.map +1 -0
  422. package/dist/esm/s2.js +115 -0
  423. package/dist/esm/s2.js.map +1 -0
  424. package/dist/esm/stream.d.ts +78 -0
  425. package/dist/esm/stream.d.ts.map +1 -0
  426. package/dist/esm/stream.js +172 -0
  427. package/dist/esm/stream.js.map +1 -0
  428. package/dist/esm/streams.d.ts +61 -0
  429. package/dist/esm/streams.d.ts.map +1 -0
  430. package/dist/esm/streams.js +197 -0
  431. package/dist/esm/streams.js.map +1 -0
  432. package/dist/esm/types.d.ts +633 -0
  433. package/dist/esm/types.d.ts.map +1 -0
  434. package/dist/esm/types.js +126 -0
  435. package/dist/esm/types.js.map +1 -0
  436. package/dist/esm/utils.d.ts +25 -0
  437. package/dist/esm/utils.d.ts.map +1 -0
  438. package/dist/esm/utils.js +103 -0
  439. package/dist/esm/utils.js.map +1 -0
  440. package/dist/esm/version.d.ts +8 -0
  441. package/dist/esm/version.d.ts.map +1 -0
  442. package/dist/esm/version.js +8 -0
  443. package/dist/esm/version.js.map +1 -0
  444. package/package.json +47 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Stream Store
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,93 @@
1
+ # @s2-dev/streamstore
2
+
3
+ TypeScript SDK for [S2](https://s2.dev), a serverless data store for streams.
4
+
5
+ This package is the core client for S2's [REST API](https://s2.dev/docs/rest/protocol), providing an ergonomic interface for appending to streams and reading data from them.
6
+
7
+ ## Installation
8
+
9
+ ```bash
10
+ npm add @s2-dev/streamstore
11
+ # or
12
+ yarn add @s2-dev/streamstore
13
+ # or
14
+ bun add @s2-dev/streamstore
15
+ ```
16
+
17
+ ## Quick start
18
+
19
+ Generate an access token from the S2 console at <https://s2.dev/dashboard>, then:
20
+
21
+ <!-- snippet:start quick-start -->
22
+ ```ts
23
+ import {
24
+ AppendAck,
25
+ AppendInput,
26
+ AppendRecord,
27
+ S2,
28
+ S2Environment,
29
+ } from "@s2-dev/streamstore";
30
+
31
+ const basinName = process.env.S2_BASIN ?? "my-existing-basin";
32
+ const streamName = process.env.S2_STREAM ?? "my-new-stream";
33
+
34
+ const s2 = new S2({
35
+ ...S2Environment.parse(),
36
+ accessToken: process.env.S2_ACCESS_TOKEN ?? "my-access-token",
37
+ });
38
+
39
+ // Create a basin (namespace) client for basin-level operations.
40
+ const basin = s2.basin(basinName);
41
+
42
+ // Make a new stream within the basin, using the default configuration.
43
+ const streamResponse = await basin.streams.create({ stream: streamName });
44
+ console.dir(streamResponse, { depth: null });
45
+
46
+ // Create a stream client on our new stream.
47
+ const stream = basin.stream(streamName);
48
+
49
+ // Make a single append call.
50
+ const append: Promise<AppendAck> = stream.append(
51
+ // `append` expects an input batch of one or many records.
52
+ AppendInput.create([
53
+ // Records can use a string encoding...
54
+ AppendRecord.string({
55
+ body: "Hello from the docs snippet!",
56
+ headers: [["content-type", "text/plain"]],
57
+ }),
58
+ // ...or contain raw binary data.
59
+ AppendRecord.bytes({
60
+ body: new TextEncoder().encode("Bytes payload"),
61
+ }),
62
+ ]),
63
+ );
64
+
65
+ // When the promise resolves, the data is fully durable and present on the stream.
66
+ const ack = await append;
67
+ console.log(
68
+ `Appended records ${ack.start.seqNum} through ${ack.end.seqNum} (exclusive).`,
69
+ );
70
+ console.dir(ack, { depth: null });
71
+
72
+ // Read the two records back as binary.
73
+ const batch = await stream.read(
74
+ {
75
+ start: { from: { seqNum: ack.start.seqNum } },
76
+ stop: { limits: { count: 2 } },
77
+ },
78
+ { as: "bytes" },
79
+ );
80
+
81
+ for (const record of batch.records) {
82
+ console.dir(record, { depth: null });
83
+ console.log("decoded body: %s", new TextDecoder().decode(record.body));
84
+ }
85
+ ```
86
+ <!-- snippet:end quick-start -->
87
+
88
+ > Tip: snippets look for `S2_ACCESS_TOKEN`, `S2_BASIN`, and `S2_STREAM` so you can run them with `npx tsx examples/<file>.ts`.
89
+
90
+ ## More documentation
91
+
92
+ - Full SDK overview and additional examples: see the root repo README at <https://github.com/s2-streamstore/s2-sdk-typescript>.
93
+ - S2 service docs: <https://s2.dev/docs>.
@@ -0,0 +1,51 @@
1
+ import type { RetryConfig, S2RequestOptions } from "./common.js";
2
+ import type { Client } from "./generated/client/types.gen.js";
3
+ import type * as Types from "./types.js";
4
+ /**
5
+ * Account-scoped helper for listing, issuing, and revoking access tokens.
6
+ *
7
+ * Acquire via {@link S2.accessTokens}. Use {@link S2AccessTokens.listAll} for async iteration.
8
+ */
9
+ export declare class S2AccessTokens {
10
+ readonly client: Client;
11
+ private readonly retryConfig?;
12
+ constructor(client: Client, retryConfig?: RetryConfig);
13
+ /**
14
+ * List access tokens.
15
+ *
16
+ * @param args.prefix Filter to IDs beginning with this prefix
17
+ * @param args.startAfter Filter to IDs lexicographically after this value
18
+ * @param args.limit Max results (up to 1000)
19
+ */
20
+ list(args?: Types.ListAccessTokensInput, options?: S2RequestOptions): Promise<Types.ListAccessTokensResponse>;
21
+ /**
22
+ * List all access tokens with automatic pagination.
23
+ * Returns a lazy async iterable that fetches pages as needed.
24
+ *
25
+ * @param args - Optional filtering options: `prefix` to filter by ID prefix, `limit` for max results per page
26
+ *
27
+ * @example
28
+ * ```ts
29
+ * for await (const token of s2.accessTokens.listAll({ prefix: "service-" })) {
30
+ * console.log(token.id);
31
+ * }
32
+ * ```
33
+ */
34
+ listAll(args?: Types.ListAllAccessTokensInput, options?: S2RequestOptions): AsyncIterable<Types.AccessTokenInfo>;
35
+ /**
36
+ * Issue a new access token.
37
+ *
38
+ * @param args.id Unique token ID (1-96 bytes)
39
+ * @param args.scope Token scope (operations and resource sets)
40
+ * @param args.autoPrefixStreams Namespace stream names by configured prefix scope
41
+ * @param args.expiresAt Expiration time (Date or RFC 3339 string); defaults to requestor's token expiry
42
+ */
43
+ issue(args: Types.IssueAccessTokenInput, options?: S2RequestOptions): Promise<Types.IssueAccessTokenResponse>;
44
+ /**
45
+ * Revoke an access token by ID.
46
+ *
47
+ * @param args.id Token ID to revoke
48
+ */
49
+ revoke(args: Types.RevokeAccessTokenInput, options?: S2RequestOptions): Promise<void>;
50
+ }
51
+ //# sourceMappingURL=accessTokens.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"accessTokens.d.ts","sourceRoot":"","sources":["../../src/accessTokens.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEjE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iCAAiC,CAAC;AAS9D,OAAO,KAAK,KAAK,KAAK,MAAM,YAAY,CAAC;AA4BzC;;;;GAIG;AACH,qBAAa,cAAc;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAc;gBAE/B,MAAM,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,WAAW;IAKrD;;;;;;OAMG;IACU,IAAI,CAChB,IAAI,CAAC,EAAE,KAAK,CAAC,qBAAqB,EAClC,OAAO,CAAC,EAAE,gBAAgB,GACxB,OAAO,CAAC,KAAK,CAAC,wBAAwB,CAAC;IAiB1C;;;;;;;;;;;;OAYG;IACI,OAAO,CACb,IAAI,CAAC,EAAE,KAAK,CAAC,wBAAwB,EACrC,OAAO,CAAC,EAAE,gBAAgB,GACxB,aAAa,CAAC,KAAK,CAAC,eAAe,CAAC;IAYvC;;;;;;;OAOG;IACU,KAAK,CACjB,IAAI,EAAE,KAAK,CAAC,qBAAqB,EACjC,OAAO,CAAC,EAAE,gBAAgB,GACxB,OAAO,CAAC,KAAK,CAAC,wBAAwB,CAAC;IAkB1C;;;;OAIG;IACU,MAAM,CAClB,IAAI,EAAE,KAAK,CAAC,sBAAsB,EAClC,OAAO,CAAC,EAAE,gBAAgB,GACxB,OAAO,CAAC,IAAI,CAAC;CAWhB"}
@@ -0,0 +1,127 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.S2AccessTokens = void 0;
4
+ const error_js_1 = require("./error.js");
5
+ const index_js_1 = require("./generated/index.js");
6
+ const case_transform_js_1 = require("./internal/case-transform.js");
7
+ const paginate_js_1 = require("./lib/paginate.js");
8
+ const retry_js_1 = require("./lib/retry.js");
9
+ /** Convert expiresAt input (Date, milliseconds, or string) to RFC 3339 string for API. */
10
+ function toISOString(value) {
11
+ if (value === null)
12
+ return null;
13
+ if (value === undefined)
14
+ return undefined;
15
+ if (value instanceof Date)
16
+ return value.toISOString();
17
+ if (typeof value === "number")
18
+ return new Date(value).toISOString();
19
+ return value;
20
+ }
21
+ /** Convert expiresAt from API (ISO string) to Date. */
22
+ function toDate(value) {
23
+ if (value === null)
24
+ return null;
25
+ if (value === undefined)
26
+ return undefined;
27
+ return new Date(value);
28
+ }
29
+ /** Transform AccessTokenInfo response: convert expiresAt to Date. */
30
+ function transformTokenInfo(token) {
31
+ return {
32
+ ...token,
33
+ expiresAt: toDate(token.expiresAt),
34
+ };
35
+ }
36
+ /**
37
+ * Account-scoped helper for listing, issuing, and revoking access tokens.
38
+ *
39
+ * Acquire via {@link S2.accessTokens}. Use {@link S2AccessTokens.listAll} for async iteration.
40
+ */
41
+ class S2AccessTokens {
42
+ client;
43
+ retryConfig;
44
+ constructor(client, retryConfig) {
45
+ this.client = client;
46
+ this.retryConfig = retryConfig;
47
+ }
48
+ /**
49
+ * List access tokens.
50
+ *
51
+ * @param args.prefix Filter to IDs beginning with this prefix
52
+ * @param args.startAfter Filter to IDs lexicographically after this value
53
+ * @param args.limit Max results (up to 1000)
54
+ */
55
+ async list(args, options) {
56
+ const response = await (0, retry_js_1.withRetries)(this.retryConfig, async () => {
57
+ return await (0, error_js_1.withS2Data)(() => (0, index_js_1.listAccessTokens)({
58
+ client: this.client,
59
+ query: (0, case_transform_js_1.toSnakeCase)(args),
60
+ ...options,
61
+ }));
62
+ });
63
+ const camelCased = (0, case_transform_js_1.toCamelCase)(response);
64
+ return {
65
+ ...camelCased,
66
+ accessTokens: camelCased.accessTokens.map(transformTokenInfo),
67
+ };
68
+ }
69
+ /**
70
+ * List all access tokens with automatic pagination.
71
+ * Returns a lazy async iterable that fetches pages as needed.
72
+ *
73
+ * @param args - Optional filtering options: `prefix` to filter by ID prefix, `limit` for max results per page
74
+ *
75
+ * @example
76
+ * ```ts
77
+ * for await (const token of s2.accessTokens.listAll({ prefix: "service-" })) {
78
+ * console.log(token.id);
79
+ * }
80
+ * ```
81
+ */
82
+ listAll(args, options) {
83
+ return (0, paginate_js_1.paginate)((a) => this.list(a, options).then((r) => ({
84
+ items: r.accessTokens,
85
+ hasMore: r.hasMore,
86
+ })), args ?? {}, (token) => token.id);
87
+ }
88
+ /**
89
+ * Issue a new access token.
90
+ *
91
+ * @param args.id Unique token ID (1-96 bytes)
92
+ * @param args.scope Token scope (operations and resource sets)
93
+ * @param args.autoPrefixStreams Namespace stream names by configured prefix scope
94
+ * @param args.expiresAt Expiration time (Date or RFC 3339 string); defaults to requestor's token expiry
95
+ */
96
+ async issue(args, options) {
97
+ // Convert Date to ISO string for API
98
+ const apiArgs = {
99
+ ...args,
100
+ expiresAt: toISOString(args.expiresAt),
101
+ };
102
+ const response = await (0, retry_js_1.withRetries)(this.retryConfig, async () => {
103
+ return await (0, error_js_1.withS2Data)(() => (0, index_js_1.issueAccessToken)({
104
+ client: this.client,
105
+ body: (0, case_transform_js_1.toSnakeCase)(apiArgs),
106
+ ...options,
107
+ }));
108
+ });
109
+ return (0, case_transform_js_1.toCamelCase)(response);
110
+ }
111
+ /**
112
+ * Revoke an access token by ID.
113
+ *
114
+ * @param args.id Token ID to revoke
115
+ */
116
+ async revoke(args, options) {
117
+ await (0, retry_js_1.withRetries)(this.retryConfig, async () => {
118
+ return await (0, error_js_1.withS2Data)(() => (0, index_js_1.revokeAccessToken)({
119
+ client: this.client,
120
+ path: args,
121
+ ...options,
122
+ }));
123
+ });
124
+ }
125
+ }
126
+ exports.S2AccessTokens = S2AccessTokens;
127
+ //# sourceMappingURL=accessTokens.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"accessTokens.js","sourceRoot":"","sources":["../../src/accessTokens.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ export type BiscuitTokenOptions = {
2
+ /** P256 private key as base58-encoded 32 bytes */
3
+ privateKey: string;
4
+ /** Public key to bind the token to (base58). If not provided, derives from privateKey. */
5
+ publicKey?: string;
6
+ /** Token expiry in seconds from now (default: 3600 = 1 hour) */
7
+ expiresIn?: number;
8
+ /** Operation groups to grant (default: all read+write) */
9
+ opGroups?: Array<{
10
+ level: string;
11
+ access: string;
12
+ }>;
13
+ /** Basin scope (default: prefix "" = all basins) */
14
+ basinScope?: {
15
+ type: "prefix" | "exact" | "none";
16
+ value: string;
17
+ };
18
+ /** Stream scope (default: prefix "" = all streams) */
19
+ streamScope?: {
20
+ type: "prefix" | "exact" | "none";
21
+ value: string;
22
+ };
23
+ /** Access token scope (default: prefix "" = all tokens) */
24
+ accessTokenScope?: {
25
+ type: "prefix" | "exact" | "none";
26
+ value: string;
27
+ };
28
+ };
29
+ /**
30
+ * Creates an admin Biscuit token from a root private key.
31
+ * This enables bootstrap mode where the admin can operate without a pre-existing token.
32
+ *
33
+ * @returns Base64-encoded Biscuit token
34
+ */
35
+ export declare function createBiscuitToken(options: BiscuitTokenOptions): Promise<string>;
36
+ /**
37
+ * Derives the public key from a private key.
38
+ * @param privateKey Base58-encoded P256 private key (32 bytes)
39
+ * @returns Base58-encoded compressed public key (33 bytes)
40
+ */
41
+ export declare function derivePublicKey(privateKey: string): string;
42
+ //# sourceMappingURL=biscuit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"biscuit.d.ts","sourceRoot":"","sources":["../../../src/auth/biscuit.ts"],"names":[],"mappings":"AAkBA,MAAM,MAAM,mBAAmB,GAAG;IACjC,kDAAkD;IAClD,UAAU,EAAE,MAAM,CAAC;IACnB,0FAA0F;IAC1F,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gEAAgE;IAChE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACpD,oDAAoD;IACpD,UAAU,CAAC,EAAE;QAAE,IAAI,EAAE,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAClE,sDAAsD;IACtD,WAAW,CAAC,EAAE;QAAE,IAAI,EAAE,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IACnE,2DAA2D;IAC3D,gBAAgB,CAAC,EAAE;QAAE,IAAI,EAAE,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;CACxE,CAAC;AAEF;;;;;GAKG;AACH,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,MAAM,CAAC,CAyDtF;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAE1D"}
@@ -0,0 +1,72 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createBiscuitToken = createBiscuitToken;
4
+ exports.derivePublicKey = derivePublicKey;
5
+ const base_1 = require("@scure/base");
6
+ const signing_key_js_1 = require("./signing-key.js");
7
+ // Dynamic import for biscuit-wasm to handle WASM initialization
8
+ let biscuitModule = null;
9
+ let initPromise = null;
10
+ async function getBiscuit() {
11
+ if (!biscuitModule) {
12
+ biscuitModule = await Promise.resolve().then(() => require("@biscuit-auth/biscuit-wasm"));
13
+ if (!initPromise) {
14
+ initPromise = Promise.resolve(biscuitModule.init());
15
+ }
16
+ await initPromise;
17
+ }
18
+ return biscuitModule;
19
+ }
20
+ /**
21
+ * Creates an admin Biscuit token from a root private key.
22
+ * This enables bootstrap mode where the admin can operate without a pre-existing token.
23
+ *
24
+ * @returns Base64-encoded Biscuit token
25
+ */
26
+ async function createBiscuitToken(options) {
27
+ const { privateKey, publicKey: providedPublicKey, expiresIn = 3600, opGroups = [
28
+ { level: "account", access: "read" },
29
+ { level: "account", access: "write" },
30
+ { level: "basin", access: "read" },
31
+ { level: "basin", access: "write" },
32
+ { level: "stream", access: "read" },
33
+ { level: "stream", access: "write" },
34
+ ], basinScope = { type: "prefix", value: "" }, streamScope = { type: "prefix", value: "" }, accessTokenScope = { type: "prefix", value: "" }, } = options;
35
+ const biscuit = await getBiscuit();
36
+ // Use SigningKey for validation and key derivation
37
+ const signingKey = signing_key_js_1.SigningKey.fromBase58(privateKey);
38
+ const privateKeyBytes = signingKey.getPrivateKeyBytes();
39
+ const publicKeyBase58 = providedPublicKey ?? signingKey.publicKeyBase58();
40
+ // Create Biscuit private key (P256 = secp256r1)
41
+ const biscuitPrivateKey = biscuit.PrivateKey.fromBytes(privateKeyBytes, biscuit.SignatureAlgorithm.Secp256r1);
42
+ // Build the token
43
+ const expiresTs = Math.floor(Date.now() / 1000) + expiresIn;
44
+ const builder = biscuit.biscuit `
45
+ public_key(${publicKeyBase58});
46
+ expires(${expiresTs});
47
+ `;
48
+ builder.merge(biscuit.block `
49
+ check if time($t), $t < ${expiresTs};
50
+ `);
51
+ for (const { level, access } of opGroups) {
52
+ builder.merge(biscuit.block `
53
+ op_group(${level}, ${access});
54
+ `);
55
+ }
56
+ builder.merge(biscuit.block `
57
+ basin_scope(${basinScope.type}, ${basinScope.value});
58
+ stream_scope(${streamScope.type}, ${streamScope.value});
59
+ access_token_scope(${accessTokenScope.type}, ${accessTokenScope.value});
60
+ `);
61
+ const token = builder.build(biscuitPrivateKey);
62
+ return base_1.base64.encode(token.toBytes());
63
+ }
64
+ /**
65
+ * Derives the public key from a private key.
66
+ * @param privateKey Base58-encoded P256 private key (32 bytes)
67
+ * @returns Base58-encoded compressed public key (33 bytes)
68
+ */
69
+ function derivePublicKey(privateKey) {
70
+ return signing_key_js_1.SigningKey.fromBase58(privateKey).publicKeyBase58();
71
+ }
72
+ //# sourceMappingURL=biscuit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"biscuit.js","sourceRoot":"","sources":["../../../src/auth/biscuit.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export { createBiscuitToken, derivePublicKey, type BiscuitTokenOptions } from "./biscuit.js";
2
+ export { signRequest, signHeaders, type SignRequestOptions, type SignHeadersOptions } from "./sign.js";
3
+ export { createPkiAuth, type PkiAuthConfig, type PkiAuthContext } from "./pki-auth.js";
4
+ export { SigningKey } from "./signing-key.js";
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/auth/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,KAAK,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAC7F,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,KAAK,kBAAkB,EAAE,KAAK,kBAAkB,EAAE,MAAM,WAAW,CAAC;AACvG,OAAO,EAAE,aAAa,EAAE,KAAK,aAAa,EAAE,KAAK,cAAc,EAAE,MAAM,eAAe,CAAC;AACvF,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SigningKey = exports.createPkiAuth = exports.signHeaders = exports.signRequest = exports.derivePublicKey = exports.createBiscuitToken = void 0;
4
+ var biscuit_js_1 = require("./biscuit.js");
5
+ Object.defineProperty(exports, "createBiscuitToken", { enumerable: true, get: function () { return biscuit_js_1.createBiscuitToken; } });
6
+ Object.defineProperty(exports, "derivePublicKey", { enumerable: true, get: function () { return biscuit_js_1.derivePublicKey; } });
7
+ var sign_js_1 = require("./sign.js");
8
+ Object.defineProperty(exports, "signRequest", { enumerable: true, get: function () { return sign_js_1.signRequest; } });
9
+ Object.defineProperty(exports, "signHeaders", { enumerable: true, get: function () { return sign_js_1.signHeaders; } });
10
+ var pki_auth_js_1 = require("./pki-auth.js");
11
+ Object.defineProperty(exports, "createPkiAuth", { enumerable: true, get: function () { return pki_auth_js_1.createPkiAuth; } });
12
+ var signing_key_js_1 = require("./signing-key.js");
13
+ Object.defineProperty(exports, "SigningKey", { enumerable: true, get: function () { return signing_key_js_1.SigningKey; } });
14
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/auth/index.ts"],"names":[],"mappings":";;;AAAA,2CAA6F;AAApF,gHAAA,kBAAkB,OAAA;AAAE,6GAAA,eAAe,OAAA;AAC5C,qCAAuG;AAA9F,sGAAA,WAAW,OAAA;AAAE,sGAAA,WAAW,OAAA;AACjC,6CAAuF;AAA9E,4GAAA,aAAa,OAAA;AACtB,mDAA8C;AAArC,4GAAA,UAAU,OAAA"}
@@ -0,0 +1,60 @@
1
+ import { SigningKey } from "./signing-key.js";
2
+ import type { SignHeadersOptions } from "./sign.js";
3
+ /**
4
+ * Configuration for PKI authentication.
5
+ *
6
+ * Two modes are supported:
7
+ *
8
+ * 1. **Token + SigningKey mode** (for regular operations): Provide `token` and `signingKey`.
9
+ * Use this for basins, streams, and other regular operations.
10
+ *
11
+ * 2. **Root key mode** (for all operations): Provide only `rootKey`.
12
+ * The SDK generates tokens locally (signed by root key, bound to a generated client key).
13
+ */
14
+ export type PkiAuthConfig = {
15
+ /** Biscuit token issued with the signing key's public key */
16
+ token?: string;
17
+ /** P256 signing key that matches the token's bound public key */
18
+ signingKey?: SigningKey;
19
+ /** P256 private key as base58-encoded 32 bytes (root key) */
20
+ rootKey?: string;
21
+ /** Token expiry in seconds (default: 3600 = 1 hour) */
22
+ tokenExpiresIn?: number;
23
+ /** Signature expiry in seconds (default: 300 = 5 minutes) */
24
+ signatureExpiresIn?: number;
25
+ };
26
+ /**
27
+ * Auth mode indicates what operations are allowed.
28
+ */
29
+ export type PkiAuthMode = "root" | "token";
30
+ export type PkiAuthContext = {
31
+ /** The auth mode */
32
+ mode: PkiAuthMode;
33
+ /** The signing key's public key (base58) */
34
+ publicKey: string;
35
+ /** Get current token */
36
+ getToken: () => Promise<string>;
37
+ /** Sign a request with RFC 9421 HTTP message signatures */
38
+ signRequest: (request: Request) => Promise<Request>;
39
+ /** Sign headers with RFC 9421 HTTP message signatures */
40
+ signHeaders: (options: Omit<SignHeadersOptions, "signingKey" | "expiresIn">) => Promise<void>;
41
+ /** The signing key (for token mode, can be used to issue sub-tokens) */
42
+ signingKey: SigningKey;
43
+ };
44
+ /**
45
+ * Creates a PKI auth context.
46
+ *
47
+ * @example Token + SigningKey mode (for regular operations)
48
+ * ```typescript
49
+ * const auth = createPkiAuth({ token: accessToken, signingKey });
50
+ * const s2 = new S2({ authContext: auth, endpoints: { ... } });
51
+ * ```
52
+ *
53
+ * @example Root key mode (for all operations)
54
+ * ```typescript
55
+ * const auth = createPkiAuth({ rootKey: "..." });
56
+ * const s2 = new S2({ authContext: auth, endpoints: { ... } });
57
+ * ```
58
+ */
59
+ export declare function createPkiAuth(config: PkiAuthConfig): PkiAuthContext;
60
+ //# sourceMappingURL=pki-auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pki-auth.d.ts","sourceRoot":"","sources":["../../../src/auth/pki-auth.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAEpD;;;;;;;;;;GAUG;AACH,MAAM,MAAM,aAAa,GAAG;IAC3B,6DAA6D;IAC7D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iEAAiE;IACjE,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,6DAA6D;IAC7D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,uDAAuD;IACvD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,6DAA6D;IAC7D,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,OAAO,CAAC;AAE3C,MAAM,MAAM,cAAc,GAAG;IAC5B,oBAAoB;IACpB,IAAI,EAAE,WAAW,CAAC;IAClB,4CAA4C;IAC5C,SAAS,EAAE,MAAM,CAAC;IAClB,wBAAwB;IACxB,QAAQ,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IAChC,2DAA2D;IAC3D,WAAW,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACpD,yDAAyD;IACzD,WAAW,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,kBAAkB,EAAE,YAAY,GAAG,WAAW,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9F,wEAAwE;IACxE,UAAU,EAAE,UAAU,CAAC;CACvB,CAAC;AAEF;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,aAAa,GAAG,cAAc,CAcnE"}
@@ -0,0 +1,102 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createPkiAuth = createPkiAuth;
4
+ const biscuit_js_1 = require("./biscuit.js");
5
+ const sign_js_1 = require("./sign.js");
6
+ const signing_key_js_1 = require("./signing-key.js");
7
+ /**
8
+ * Creates a PKI auth context.
9
+ *
10
+ * @example Token + SigningKey mode (for regular operations)
11
+ * ```typescript
12
+ * const auth = createPkiAuth({ token: accessToken, signingKey });
13
+ * const s2 = new S2({ authContext: auth, endpoints: { ... } });
14
+ * ```
15
+ *
16
+ * @example Root key mode (for all operations)
17
+ * ```typescript
18
+ * const auth = createPkiAuth({ rootKey: "..." });
19
+ * const s2 = new S2({ authContext: auth, endpoints: { ... } });
20
+ * ```
21
+ */
22
+ function createPkiAuth(config) {
23
+ const { signatureExpiresIn = 300 } = config;
24
+ if (config.token && config.signingKey) {
25
+ return createTokenAuth(config.token, config.signingKey, signatureExpiresIn);
26
+ }
27
+ else if (config.rootKey) {
28
+ return createRootKeyAuth(config.rootKey, config.tokenExpiresIn ?? 3600, signatureExpiresIn);
29
+ }
30
+ else if (config.token && !config.signingKey) {
31
+ throw new Error("PKI auth: token provided without signingKey");
32
+ }
33
+ else if (!config.token && config.signingKey) {
34
+ throw new Error("PKI auth: signingKey provided without token");
35
+ }
36
+ else {
37
+ throw new Error("PKI auth: either (token + signingKey) or rootKey required");
38
+ }
39
+ }
40
+ function createTokenAuth(token, signingKey, signatureExpiresIn) {
41
+ const publicKey = signingKey.publicKeyBase58();
42
+ function isAccessTokenEndpoint(path) {
43
+ return /^\/v\d+\/access-tokens(\/[^\/]+)?$/.test(path);
44
+ }
45
+ function extractPath(urlOrRequest) {
46
+ const url = typeof urlOrRequest === "string" ? new URL(urlOrRequest) : new URL(urlOrRequest.url);
47
+ return url.pathname;
48
+ }
49
+ return {
50
+ mode: "token",
51
+ publicKey,
52
+ signingKey,
53
+ async getToken() {
54
+ return token;
55
+ },
56
+ async signRequest(request) {
57
+ const path = extractPath(request);
58
+ if (isAccessTokenEndpoint(path)) {
59
+ throw new Error("Token mode cannot be used for access token endpoints. Use root key mode instead.");
60
+ }
61
+ return (0, sign_js_1.signRequest)({ request, signingKey, expiresIn: signatureExpiresIn });
62
+ },
63
+ async signHeaders(options) {
64
+ const path = extractPath(options.url);
65
+ if (isAccessTokenEndpoint(path)) {
66
+ throw new Error("Token mode cannot be used for access token endpoints. Use root key mode instead.");
67
+ }
68
+ return (0, sign_js_1.signHeaders)({ ...options, signingKey, expiresIn: signatureExpiresIn });
69
+ },
70
+ };
71
+ }
72
+ function createRootKeyAuth(rootKey, tokenExpiresIn, signatureExpiresIn) {
73
+ const clientKey = signing_key_js_1.SigningKey.generate();
74
+ const clientPublicKey = clientKey.publicKeyBase58();
75
+ let cachedToken = null;
76
+ let tokenExpiry = 0;
77
+ async function getToken() {
78
+ const now = Date.now();
79
+ if (!cachedToken || now >= tokenExpiry - 60000) {
80
+ cachedToken = await (0, biscuit_js_1.createBiscuitToken)({
81
+ privateKey: rootKey,
82
+ publicKey: clientPublicKey,
83
+ expiresIn: tokenExpiresIn,
84
+ });
85
+ tokenExpiry = now + tokenExpiresIn * 1000;
86
+ }
87
+ return cachedToken;
88
+ }
89
+ return {
90
+ mode: "root",
91
+ publicKey: clientPublicKey,
92
+ signingKey: clientKey,
93
+ getToken,
94
+ async signRequest(request) {
95
+ return (0, sign_js_1.signRequest)({ request, signingKey: clientKey, expiresIn: signatureExpiresIn });
96
+ },
97
+ async signHeaders(options) {
98
+ return (0, sign_js_1.signHeaders)({ ...options, signingKey: clientKey, expiresIn: signatureExpiresIn });
99
+ },
100
+ };
101
+ }
102
+ //# sourceMappingURL=pki-auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pki-auth.js","sourceRoot":"","sources":["../../../src/auth/pki-auth.ts"],"names":[],"mappings":"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"}