@s2-dev/streamstore 0.16.0 → 0.16.1

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 (156) hide show
  1. package/dist/accessTokens.d.ts +37 -0
  2. package/dist/accessTokens.d.ts.map +1 -0
  3. package/dist/accessTokens.js +74 -0
  4. package/dist/accessTokens.js.map +1 -0
  5. package/dist/basin.d.ts +26 -0
  6. package/dist/basin.d.ts.map +1 -0
  7. package/dist/basin.js +34 -0
  8. package/dist/basin.js.map +1 -0
  9. package/dist/basins.d.ts +53 -0
  10. package/dist/basins.d.ts.map +1 -0
  11. package/dist/basins.js +115 -0
  12. package/dist/basins.js.map +1 -0
  13. package/dist/common.d.ts +44 -0
  14. package/dist/common.d.ts.map +1 -0
  15. package/dist/common.js +2 -0
  16. package/dist/common.js.map +1 -0
  17. package/dist/error.d.ts +28 -0
  18. package/dist/error.d.ts.map +1 -0
  19. package/dist/error.js +43 -0
  20. package/dist/error.js.map +1 -0
  21. package/dist/generated/client/client.gen.d.ts +3 -0
  22. package/dist/generated/client/client.gen.d.ts.map +1 -0
  23. package/dist/generated/client/client.gen.js +205 -0
  24. package/dist/generated/client/client.gen.js.map +1 -0
  25. package/dist/generated/client/index.d.ts +9 -0
  26. package/dist/generated/client/index.d.ts.map +1 -0
  27. package/dist/generated/client/index.js +7 -0
  28. package/dist/generated/client/index.js.map +1 -0
  29. package/dist/generated/client/types.gen.d.ts +125 -0
  30. package/dist/generated/client/types.gen.d.ts.map +1 -0
  31. package/dist/generated/client/types.gen.js +3 -0
  32. package/dist/generated/client/types.gen.js.map +1 -0
  33. package/dist/generated/client/utils.gen.d.ts +34 -0
  34. package/dist/generated/client/utils.gen.d.ts.map +1 -0
  35. package/dist/generated/client/utils.gen.js +231 -0
  36. package/dist/generated/client/utils.gen.js.map +1 -0
  37. package/{src/generated/client.gen.ts → dist/generated/client.gen.d.ts} +3 -8
  38. package/dist/generated/client.gen.d.ts.map +1 -0
  39. package/dist/generated/client.gen.js +6 -0
  40. package/dist/generated/client.gen.js.map +1 -0
  41. package/dist/generated/core/auth.gen.d.ts +19 -0
  42. package/dist/generated/core/auth.gen.d.ts.map +1 -0
  43. package/dist/generated/core/auth.gen.js +15 -0
  44. package/dist/generated/core/auth.gen.js.map +1 -0
  45. package/dist/generated/core/bodySerializer.gen.d.ts +18 -0
  46. package/dist/generated/core/bodySerializer.gen.d.ts.map +1 -0
  47. package/dist/generated/core/bodySerializer.gen.js +58 -0
  48. package/dist/generated/core/bodySerializer.gen.js.map +1 -0
  49. package/dist/generated/core/params.gen.d.ts +34 -0
  50. package/dist/generated/core/params.gen.d.ts.map +1 -0
  51. package/dist/generated/core/params.gen.js +89 -0
  52. package/dist/generated/core/params.gen.js.map +1 -0
  53. package/dist/generated/core/pathSerializer.gen.d.ts +34 -0
  54. package/dist/generated/core/pathSerializer.gen.d.ts.map +1 -0
  55. package/dist/generated/core/pathSerializer.gen.js +115 -0
  56. package/dist/generated/core/pathSerializer.gen.js.map +1 -0
  57. package/dist/generated/core/queryKeySerializer.gen.d.ts +19 -0
  58. package/dist/generated/core/queryKeySerializer.gen.d.ts.map +1 -0
  59. package/dist/generated/core/queryKeySerializer.gen.js +100 -0
  60. package/dist/generated/core/queryKeySerializer.gen.js.map +1 -0
  61. package/dist/generated/core/serverSentEvents.gen.d.ts +72 -0
  62. package/dist/generated/core/serverSentEvents.gen.d.ts.map +1 -0
  63. package/dist/generated/core/serverSentEvents.gen.js +136 -0
  64. package/dist/generated/core/serverSentEvents.gen.js.map +1 -0
  65. package/dist/generated/core/types.gen.d.ts +79 -0
  66. package/dist/generated/core/types.gen.d.ts.map +1 -0
  67. package/dist/generated/core/types.gen.js +3 -0
  68. package/dist/generated/core/types.gen.js.map +1 -0
  69. package/dist/generated/core/utils.gen.d.ts +20 -0
  70. package/dist/generated/core/utils.gen.d.ts.map +1 -0
  71. package/dist/generated/core/utils.gen.js +88 -0
  72. package/dist/generated/core/utils.gen.js.map +1 -0
  73. package/dist/generated/index.d.ts +3 -0
  74. package/dist/generated/index.d.ts.map +1 -0
  75. package/{src/generated/index.ts → dist/generated/index.js} +1 -2
  76. package/dist/generated/index.js.map +1 -0
  77. package/dist/generated/sdk.gen.d.ts +100 -0
  78. package/dist/generated/sdk.gen.d.ts.map +1 -0
  79. package/dist/generated/sdk.gen.js +350 -0
  80. package/dist/generated/sdk.gen.js.map +1 -0
  81. package/{src/generated/types.gen.ts → dist/generated/types.gen.d.ts} +1 -158
  82. package/dist/generated/types.gen.d.ts.map +1 -0
  83. package/dist/generated/types.gen.js +3 -0
  84. package/dist/generated/types.gen.js.map +1 -0
  85. package/dist/index.d.ts +10 -0
  86. package/dist/index.d.ts.map +1 -0
  87. package/dist/index.js +4 -0
  88. package/dist/index.js.map +1 -0
  89. package/dist/lib/event-stream.d.ts +26 -0
  90. package/dist/lib/event-stream.d.ts.map +1 -0
  91. package/dist/lib/event-stream.js +138 -0
  92. package/dist/lib/event-stream.js.map +1 -0
  93. package/dist/metrics.d.ts +44 -0
  94. package/dist/metrics.d.ts.map +1 -0
  95. package/dist/metrics.js +83 -0
  96. package/dist/metrics.js.map +1 -0
  97. package/dist/s2.d.ts +38 -0
  98. package/dist/s2.d.ts.map +1 -0
  99. package/dist/s2.js +56 -0
  100. package/dist/s2.js.map +1 -0
  101. package/dist/stream.d.ts +156 -0
  102. package/dist/stream.d.ts.map +1 -0
  103. package/dist/stream.js +598 -0
  104. package/dist/stream.js.map +1 -0
  105. package/dist/streams.d.ts +52 -0
  106. package/dist/streams.d.ts.map +1 -0
  107. package/dist/streams.js +114 -0
  108. package/dist/streams.js.map +1 -0
  109. package/dist/utils.d.ts +20 -0
  110. package/dist/utils.d.ts.map +1 -0
  111. package/dist/utils.js +52 -0
  112. package/dist/utils.js.map +1 -0
  113. package/package.json +5 -1
  114. package/.changeset/README.md +0 -8
  115. package/.changeset/config.json +0 -11
  116. package/.claude/settings.local.json +0 -9
  117. package/.github/workflows/ci.yml +0 -59
  118. package/.github/workflows/publish.yml +0 -35
  119. package/CHANGELOG.md +0 -7
  120. package/biome.json +0 -30
  121. package/bun.lock +0 -598
  122. package/examples/append.ts +0 -84
  123. package/examples/kitchen-sink.ts +0 -73
  124. package/examples/read.ts +0 -30
  125. package/openapi-ts.config.ts +0 -7
  126. package/src/accessTokens.ts +0 -100
  127. package/src/basin.ts +0 -43
  128. package/src/basins.ts +0 -154
  129. package/src/common.ts +0 -45
  130. package/src/error.ts +0 -58
  131. package/src/generated/client/client.gen.ts +0 -268
  132. package/src/generated/client/index.ts +0 -26
  133. package/src/generated/client/types.gen.ts +0 -268
  134. package/src/generated/client/utils.gen.ts +0 -331
  135. package/src/generated/core/auth.gen.ts +0 -42
  136. package/src/generated/core/bodySerializer.gen.ts +0 -92
  137. package/src/generated/core/params.gen.ts +0 -153
  138. package/src/generated/core/pathSerializer.gen.ts +0 -181
  139. package/src/generated/core/queryKeySerializer.gen.ts +0 -136
  140. package/src/generated/core/serverSentEvents.gen.ts +0 -264
  141. package/src/generated/core/types.gen.ts +0 -118
  142. package/src/generated/core/utils.gen.ts +0 -143
  143. package/src/generated/sdk.gen.ts +0 -387
  144. package/src/index.ts +0 -66
  145. package/src/lib/event-stream.ts +0 -167
  146. package/src/metrics.ts +0 -106
  147. package/src/s2.ts +0 -65
  148. package/src/stream.ts +0 -791
  149. package/src/streams.ts +0 -156
  150. package/src/tests/appendSession.test.ts +0 -149
  151. package/src/tests/batcher-session.integration.test.ts +0 -80
  152. package/src/tests/batcher.test.ts +0 -216
  153. package/src/tests/index.test.ts +0 -7
  154. package/src/utils.ts +0 -80
  155. package/tsconfig.build.json +0 -10
  156. package/tsconfig.json +0 -31
package/dist/stream.js ADDED
@@ -0,0 +1,598 @@
1
+ import { Base64 } from "js-base64";
2
+ import { S2Error } from "./error";
3
+ import { append, checkTail, read, } from "./generated";
4
+ import { EventStream } from "./lib/event-stream";
5
+ export class S2Stream {
6
+ client;
7
+ name;
8
+ constructor(name, client) {
9
+ this.name = name;
10
+ this.client = client;
11
+ }
12
+ /**
13
+ * Check the tail of the stream.
14
+ *
15
+ * Returns the next sequence number and timestamp to be assigned (`tail`).
16
+ */
17
+ async checkTail(options) {
18
+ const response = await checkTail({
19
+ client: this.client,
20
+ path: {
21
+ stream: this.name,
22
+ },
23
+ ...options,
24
+ });
25
+ if (response.error) {
26
+ throw new S2Error({
27
+ message: response.error.message,
28
+ code: response.error.code ?? undefined,
29
+ status: response.response.status,
30
+ });
31
+ }
32
+ return response.data;
33
+ }
34
+ /**
35
+ * Read records from the stream.
36
+ *
37
+ * - When `as: "bytes"` is provided, bodies and headers are decoded from base64 to `Uint8Array`.
38
+ * - Supports starting position by `seq_num`, `timestamp`, or `tail_offset` and can clamp to the tail.
39
+ * - Non-streaming reads are bounded by `count` and `bytes` (defaults 1000 and 1 MiB).
40
+ * - Use `readSession` for streaming reads
41
+ */
42
+ async read(args, options) {
43
+ const { as, ...queryParams } = args ?? {};
44
+ const response = await read({
45
+ client: this.client,
46
+ path: {
47
+ stream: this.name,
48
+ },
49
+ headers: {
50
+ ...(as === "bytes" ? { "s2-format": "base64" } : {}),
51
+ },
52
+ query: queryParams,
53
+ ...options,
54
+ });
55
+ if (response.error) {
56
+ if ("message" in response.error) {
57
+ throw new S2Error({
58
+ message: response.error.message,
59
+ code: response.error.code ?? undefined,
60
+ status: response.response.status,
61
+ });
62
+ }
63
+ else {
64
+ // special case for 416 - Range Not Satisfiable
65
+ throw new S2Error({
66
+ message: "Range not satisfiable: requested position is beyond the stream tail. Use 'clamp: true' to start from the tail instead.",
67
+ status: response.response.status,
68
+ data: response.error,
69
+ });
70
+ }
71
+ }
72
+ if (args?.as === "bytes") {
73
+ const res = {
74
+ ...response.data,
75
+ records: response.data.records?.map((record) => ({
76
+ ...record,
77
+ body: record.body ? Base64.toUint8Array(record.body) : undefined,
78
+ headers: record.headers?.map((header) => header.map((h) => Base64.toUint8Array(h))),
79
+ })),
80
+ };
81
+ return res;
82
+ }
83
+ else {
84
+ const res = response.data;
85
+ return res;
86
+ }
87
+ }
88
+ /**
89
+ * Append one or more records to the stream.
90
+ *
91
+ * - Automatically base64-encodes when any body or header is a `Uint8Array`.
92
+ * - Supports conditional appends via `fencing_token` and `match_seq_num`.
93
+ * - Returns the acknowledged range and the stream tail after the append.
94
+ */
95
+ async append(records, args, options) {
96
+ const recordsArray = Array.isArray(records) ? records : [records];
97
+ const normalizeHeaders = (headers) => {
98
+ if (headers === undefined) {
99
+ return undefined;
100
+ }
101
+ else if (Array.isArray(headers)) {
102
+ return headers;
103
+ }
104
+ else {
105
+ return Object.entries(headers).map(([key, value]) => [key, value]);
106
+ }
107
+ };
108
+ const recordsWithNormalizedHeaders = recordsArray.map((record) => ({
109
+ ...record,
110
+ headers: normalizeHeaders(record.headers),
111
+ }));
112
+ const hasBytes = recordsWithNormalizedHeaders.some((record) => record.body instanceof Uint8Array) ||
113
+ recordsWithNormalizedHeaders.some((record) => record.headers?.some((header) => header[0] instanceof Uint8Array || header[1] instanceof Uint8Array));
114
+ const encodedRecords = recordsWithNormalizedHeaders.map((record) => ({
115
+ ...record,
116
+ body: record.body instanceof Uint8Array
117
+ ? Base64.fromUint8Array(record.body)
118
+ : hasBytes && record.body
119
+ ? Base64.fromUint8Array(new TextEncoder().encode(record.body))
120
+ : record.body,
121
+ headers: record.headers?.map((header) => header.map((h) => h instanceof Uint8Array
122
+ ? Base64.fromUint8Array(h)
123
+ : hasBytes
124
+ ? Base64.fromUint8Array(new TextEncoder().encode(h))
125
+ : h)),
126
+ }));
127
+ const response = await append({
128
+ client: this.client,
129
+ path: {
130
+ stream: this.name,
131
+ },
132
+ body: {
133
+ ...args,
134
+ records: encodedRecords,
135
+ },
136
+ headers: {
137
+ ...(hasBytes ? { "s2-format": "base64" } : {}),
138
+ },
139
+ ...options,
140
+ });
141
+ if (response.error) {
142
+ if ("message" in response.error) {
143
+ throw new S2Error({
144
+ message: response.error.message,
145
+ code: response.error.code ?? undefined,
146
+ status: response.response.status,
147
+ });
148
+ }
149
+ else {
150
+ // special case for 412
151
+ throw new S2Error({
152
+ message: "Append condition failed",
153
+ status: response.response.status,
154
+ data: response.error,
155
+ });
156
+ }
157
+ }
158
+ return response.data;
159
+ }
160
+ /**
161
+ * Open a streaming read session
162
+ *
163
+ * Use the returned session as an async iterable or as a readable stream.
164
+ * When `as: "bytes"` is provided, bodies and headers are decoded to `Uint8Array`.
165
+ */
166
+ async readSession(args, options) {
167
+ return await ReadSession.create(this.client, this.name, args, options);
168
+ }
169
+ /**
170
+ * Create an append session that guaranteeds ordering of submissions.
171
+ *
172
+ * Use this to coordinate high-throughput, sequential appends with backpressure.
173
+ */
174
+ async appendSession(options) {
175
+ return await AppendSession.create(this, options);
176
+ }
177
+ }
178
+ class ReadSession extends EventStream {
179
+ static async create(client, name, args, options) {
180
+ const { as, ...queryParams } = args ?? {};
181
+ const response = await read({
182
+ client,
183
+ path: {
184
+ stream: name,
185
+ },
186
+ headers: {
187
+ accept: "text/event-stream",
188
+ ...(as === "bytes" ? { "s2-format": "base64" } : {}),
189
+ },
190
+ query: queryParams,
191
+ parseAs: "stream",
192
+ ...options,
193
+ });
194
+ if (response.error) {
195
+ if ("message" in response.error) {
196
+ throw new S2Error({
197
+ message: response.error.message,
198
+ code: response.error.code ?? undefined,
199
+ status: response.response.status,
200
+ });
201
+ }
202
+ else {
203
+ // special case for 416 - Range Not Satisfiable
204
+ throw new S2Error({
205
+ message: "Range not satisfiable: requested position is beyond the stream tail. Use 'clamp: true' to start from the tail instead.",
206
+ status: response.response.status,
207
+ data: response.error,
208
+ });
209
+ }
210
+ }
211
+ if (!response.response.body) {
212
+ throw new S2Error({
213
+ message: "No body in SSE response",
214
+ });
215
+ }
216
+ return new ReadSession(response.response.body, args?.as ?? "string");
217
+ }
218
+ _streamPosition = undefined;
219
+ constructor(stream, format) {
220
+ super(stream, (msg) => {
221
+ // Parse SSE events according to the S2 protocol
222
+ if (msg.event === "batch" && msg.data) {
223
+ const batch = JSON.parse(msg.data);
224
+ // If format is bytes, decode base64 to Uint8Array
225
+ if (format === "bytes") {
226
+ for (const record of batch.records ?? []) {
227
+ if (record.body && typeof record.body === "string") {
228
+ record.body = Base64.toUint8Array(record.body);
229
+ }
230
+ if (record.headers) {
231
+ record.headers = record.headers.map((header) => header.map((h) => typeof h === "string" ? Base64.toUint8Array(h) : h));
232
+ }
233
+ }
234
+ }
235
+ if (batch.tail) {
236
+ this._streamPosition = batch.tail;
237
+ }
238
+ return { done: false, batch: true, value: batch.records ?? [] };
239
+ }
240
+ if (msg.event === "error") {
241
+ // Handle error events
242
+ throw new S2Error({ message: msg.data ?? "Unknown error" });
243
+ }
244
+ // Skip ping events and other events
245
+ return { done: false };
246
+ });
247
+ }
248
+ get streamPosition() {
249
+ return this._streamPosition;
250
+ }
251
+ }
252
+ class AcksStream extends ReadableStream {
253
+ constructor(setController) {
254
+ super({
255
+ start: (controller) => {
256
+ setController(controller);
257
+ },
258
+ });
259
+ }
260
+ async [Symbol.asyncDispose]() {
261
+ await this.cancel("disposed");
262
+ }
263
+ // Polyfill for older browsers
264
+ [Symbol.asyncIterator]() {
265
+ const fn = ReadableStream.prototype[Symbol.asyncIterator];
266
+ if (typeof fn === "function")
267
+ return fn.call(this);
268
+ const reader = this.getReader();
269
+ return {
270
+ next: async () => {
271
+ const r = await reader.read();
272
+ if (r.done) {
273
+ reader.releaseLock();
274
+ return { done: true, value: undefined };
275
+ }
276
+ return { done: false, value: r.value };
277
+ },
278
+ throw: async (e) => {
279
+ await reader.cancel(e);
280
+ reader.releaseLock();
281
+ return { done: true, value: undefined };
282
+ },
283
+ return: async () => {
284
+ await reader.cancel("done");
285
+ reader.releaseLock();
286
+ return { done: true, value: undefined };
287
+ },
288
+ [Symbol.asyncIterator]() {
289
+ return this;
290
+ },
291
+ };
292
+ }
293
+ }
294
+ /**
295
+ * Batches individual records and submits them to an AppendSession.
296
+ * Handles linger duration, batch size limits, and auto-incrementing match_seq_num.
297
+ */
298
+ class Batcher extends WritableStream {
299
+ session;
300
+ currentBatch = [];
301
+ currentBatchResolvers = [];
302
+ lingerTimer = null;
303
+ closed = false;
304
+ maxBatchSize;
305
+ lingerDuration;
306
+ fencing_token;
307
+ next_match_seq_num;
308
+ constructor(session, args) {
309
+ let writableController;
310
+ super({
311
+ start: (controller) => {
312
+ writableController = controller;
313
+ },
314
+ write: (chunk) => {
315
+ const records = Array.isArray(chunk) ? chunk : [chunk];
316
+ this.submit(records);
317
+ },
318
+ close: () => {
319
+ this.closed = true;
320
+ this.flush();
321
+ this.cleanup();
322
+ },
323
+ abort: (reason) => {
324
+ this.closed = true;
325
+ // Reject all pending promises in the current batch
326
+ const error = new S2Error({
327
+ message: `Batcher was aborted: ${reason}`,
328
+ });
329
+ for (const resolver of this.currentBatchResolvers) {
330
+ resolver.reject(error);
331
+ }
332
+ this.currentBatch = [];
333
+ this.currentBatchResolvers = [];
334
+ this.cleanup();
335
+ },
336
+ });
337
+ this.session = session;
338
+ this.maxBatchSize = args?.maxBatchSize ?? 1000;
339
+ this.lingerDuration = args?.lingerDuration ?? 5;
340
+ this.fencing_token = args?.fencing_token;
341
+ this.next_match_seq_num = args?.match_seq_num;
342
+ }
343
+ async [Symbol.asyncDispose]() {
344
+ await this.close();
345
+ }
346
+ /**
347
+ * Submit one or more records to be batched.
348
+ * For array submits, the entire array is treated as an atomic unit and will never be split across batches.
349
+ * If it doesn't fit in the current batch, the current batch is flushed and the array is queued in the next batch.
350
+ * Returns a promise that resolves when the batch containing these records is acknowledged.
351
+ */
352
+ submit(records) {
353
+ if (this.closed) {
354
+ return Promise.reject(new S2Error({ message: "Batcher is closed" }));
355
+ }
356
+ return new Promise((resolve, reject) => {
357
+ const recordsArray = Array.isArray(records) ? records : [records];
358
+ const isArraySubmit = Array.isArray(records) && records.length > 1;
359
+ // Start linger timer on first record added to an empty batch
360
+ if (this.currentBatch.length === 0 && this.lingerDuration > 0) {
361
+ this.startLingerTimer();
362
+ }
363
+ if (isArraySubmit) {
364
+ // Treat the entire array as atomic: if it doesn't fit, flush current batch first
365
+ if (this.currentBatch.length > 0 &&
366
+ this.currentBatch.length + recordsArray.length > this.maxBatchSize) {
367
+ this.flush();
368
+ // After flush, if linger is enabled, restart the timer for the new batch
369
+ if (this.lingerDuration > 0) {
370
+ this.startLingerTimer();
371
+ }
372
+ }
373
+ // Add the entire array (even if it exceeds maxBatchSize) as a single batch unit
374
+ this.currentBatch.push(...recordsArray);
375
+ this.currentBatchResolvers.push({ resolve, reject });
376
+ // Do not auto-flush here; allow linger timer or explicit flush to send the batch
377
+ }
378
+ else {
379
+ // Single record submit — normal behavior
380
+ if (this.currentBatch.length >= this.maxBatchSize) {
381
+ this.flush();
382
+ if (this.lingerDuration > 0) {
383
+ this.startLingerTimer();
384
+ }
385
+ }
386
+ this.currentBatch.push(recordsArray[0]);
387
+ this.currentBatchResolvers.push({ resolve, reject });
388
+ if (this.currentBatch.length >= this.maxBatchSize) {
389
+ this.flush();
390
+ }
391
+ }
392
+ });
393
+ }
394
+ /**
395
+ * Flush the current batch to the session.
396
+ */
397
+ flush() {
398
+ this.cancelLingerTimer();
399
+ if (this.currentBatch.length === 0) {
400
+ return;
401
+ }
402
+ const args = {
403
+ records: this.currentBatch,
404
+ fencing_token: this.fencing_token,
405
+ match_seq_num: this.next_match_seq_num,
406
+ };
407
+ // Auto-increment match_seq_num for next batch
408
+ if (this.next_match_seq_num !== undefined) {
409
+ this.next_match_seq_num += this.currentBatch.length;
410
+ }
411
+ // Capture resolvers for this batch
412
+ const batchResolvers = this.currentBatchResolvers;
413
+ this.currentBatchResolvers = [];
414
+ this.currentBatch = [];
415
+ // Submit to session and handle promise
416
+ const promise = this.session.submit(args.records, {
417
+ fencing_token: args.fencing_token,
418
+ match_seq_num: args.match_seq_num,
419
+ });
420
+ // Resolve/reject all resolvers for this batch when the ack comes back
421
+ promise.then((ack) => {
422
+ for (const resolver of batchResolvers) {
423
+ resolver.resolve(ack);
424
+ }
425
+ }, (error) => {
426
+ for (const resolver of batchResolvers) {
427
+ resolver.reject(error);
428
+ }
429
+ });
430
+ }
431
+ startLingerTimer() {
432
+ this.cancelLingerTimer();
433
+ this.lingerTimer = setTimeout(() => {
434
+ this.lingerTimer = null;
435
+ if (!this.closed && this.currentBatch.length > 0) {
436
+ this.flush();
437
+ }
438
+ }, this.lingerDuration);
439
+ }
440
+ cancelLingerTimer() {
441
+ if (this.lingerTimer) {
442
+ clearTimeout(this.lingerTimer);
443
+ this.lingerTimer = null;
444
+ }
445
+ }
446
+ cleanup() {
447
+ this.cancelLingerTimer();
448
+ }
449
+ }
450
+ /**
451
+ * Session for appending records to a stream.
452
+ * Queues append requests and ensures only one is in-flight at a time.
453
+ */
454
+ class AppendSession extends WritableStream {
455
+ _lastSeenPosition = undefined;
456
+ queue = [];
457
+ pendingResolvers = [];
458
+ inFlight = false;
459
+ options;
460
+ stream;
461
+ acksController;
462
+ _acksStream;
463
+ closed = false;
464
+ processingPromise = null;
465
+ static async create(stream, options) {
466
+ return new AppendSession(stream, options);
467
+ }
468
+ constructor(stream, options) {
469
+ let writableController;
470
+ super({
471
+ start: (controller) => {
472
+ writableController = controller;
473
+ },
474
+ write: (chunk) => {
475
+ this.submit(chunk.records, {
476
+ fencing_token: chunk.fencing_token,
477
+ match_seq_num: chunk.match_seq_num,
478
+ });
479
+ },
480
+ close: async () => {
481
+ this.closed = true;
482
+ await this.waitForDrain();
483
+ },
484
+ abort: async (reason) => {
485
+ this.closed = true;
486
+ this.queue = [];
487
+ // Reject all pending promises
488
+ const error = new S2Error({
489
+ message: `AppendSession was aborted: ${reason}`,
490
+ });
491
+ for (const resolver of this.pendingResolvers) {
492
+ resolver.reject(error);
493
+ }
494
+ this.pendingResolvers = [];
495
+ },
496
+ });
497
+ this.options = options;
498
+ this.stream = stream;
499
+ }
500
+ async [Symbol.asyncDispose]() {
501
+ await this.close();
502
+ }
503
+ /**
504
+ * Create a batcher that batches individual records and submits them to this session.
505
+ */
506
+ makeBatcher(args) {
507
+ return new Batcher(this, args);
508
+ }
509
+ /**
510
+ * Get a stream of acknowledgements for appends.
511
+ */
512
+ acks() {
513
+ if (!this._acksStream) {
514
+ this._acksStream = new AcksStream((controller) => {
515
+ this.acksController = controller;
516
+ });
517
+ }
518
+ return this._acksStream;
519
+ }
520
+ /**
521
+ * Submit an append request to the session.
522
+ * The request will be queued and sent when no other request is in-flight.
523
+ * Returns a promise that resolves when the append is acknowledged or rejects on error.
524
+ */
525
+ submit(records, args) {
526
+ if (this.closed) {
527
+ return Promise.reject(new S2Error({ message: "AppendSession is closed" }));
528
+ }
529
+ return new Promise((resolve, reject) => {
530
+ this.queue.push({
531
+ records: Array.isArray(records) ? records : [records],
532
+ ...args,
533
+ });
534
+ this.pendingResolvers.push({ resolve, reject });
535
+ // Start processing if not already running
536
+ if (!this.processingPromise) {
537
+ this.processingPromise = this.processLoop();
538
+ }
539
+ });
540
+ }
541
+ /**
542
+ * Main processing loop that sends queued requests one at a time.
543
+ */
544
+ async processLoop() {
545
+ while (!this.closed && this.queue.length > 0) {
546
+ this.inFlight = true;
547
+ const args = this.queue.shift();
548
+ const resolver = this.pendingResolvers.shift();
549
+ try {
550
+ const ack = await this.stream.append(args.records, {
551
+ fencing_token: args.fencing_token,
552
+ match_seq_num: args.match_seq_num,
553
+ }, this.options);
554
+ this._lastSeenPosition = ack;
555
+ // Emit ack to the acks stream if it exists
556
+ if (this.acksController) {
557
+ this.acksController.enqueue(ack);
558
+ }
559
+ // Resolve the promise for this request
560
+ resolver.resolve(ack);
561
+ }
562
+ catch (error) {
563
+ this.inFlight = false;
564
+ this.processingPromise = null;
565
+ // Reject the promise for this request
566
+ resolver.reject(error);
567
+ // Reject all remaining pending promises
568
+ for (const pendingResolver of this.pendingResolvers) {
569
+ pendingResolver.reject(error);
570
+ }
571
+ this.pendingResolvers = [];
572
+ // Clear the queue
573
+ this.queue = [];
574
+ // Do not rethrow here to avoid unhandled rejection; callers already received rejection
575
+ }
576
+ this.inFlight = false;
577
+ }
578
+ this.processingPromise = null;
579
+ }
580
+ async waitForDrain() {
581
+ // Wait for processing to complete
582
+ if (this.processingPromise) {
583
+ await this.processingPromise;
584
+ }
585
+ // Wait until queue is empty and nothing is in flight
586
+ while (this.queue.length > 0 || this.inFlight) {
587
+ await new Promise((resolve) => setTimeout(resolve, 10));
588
+ }
589
+ // Close the acks stream if it exists
590
+ if (this.acksController) {
591
+ this.acksController.close();
592
+ }
593
+ }
594
+ get lastSeenPosition() {
595
+ return this._lastSeenPosition;
596
+ }
597
+ }
598
+ //# sourceMappingURL=stream.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stream.js","sourceRoot":"","sources":["../src/stream.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ import type { DataToObject, S2RequestOptions } from "./common";
2
+ import { type CreateStreamData, type DeleteStreamData, type GetStreamConfigData, type ListStreamsData, type ReconfigureStreamData } from "./generated";
3
+ import type { Client } from "./generated/client/types.gen";
4
+ export interface ListStreamsArgs extends DataToObject<ListStreamsData> {
5
+ }
6
+ export interface CreateStreamArgs extends DataToObject<CreateStreamData> {
7
+ }
8
+ export interface GetStreamConfigArgs extends DataToObject<GetStreamConfigData> {
9
+ }
10
+ export interface DeleteStreamArgs extends DataToObject<DeleteStreamData> {
11
+ }
12
+ export interface ReconfigureStreamArgs extends DataToObject<ReconfigureStreamData> {
13
+ }
14
+ export declare class S2Streams {
15
+ private readonly client;
16
+ constructor(client: Client);
17
+ /**
18
+ * List streams in the basin.
19
+ *
20
+ * @param args.prefix Return streams whose names start with the given prefix
21
+ * @param args.start_after Name to start after (for pagination)
22
+ * @param args.limit Max results (up to 1000)
23
+ */
24
+ list(args?: ListStreamsArgs, options?: S2RequestOptions): Promise<import("./generated").ListStreamsResponse>;
25
+ /**
26
+ * Create a stream.
27
+ *
28
+ * @param args.stream Stream name (1-512 bytes, unique within the basin)
29
+ * @param args.config Stream configuration (retention, storage class, timestamping, delete-on-empty)
30
+ */
31
+ create(args: CreateStreamArgs, options?: S2RequestOptions): Promise<import("./generated").StreamInfo>;
32
+ /**
33
+ * Get stream configuration.
34
+ *
35
+ * @param args.stream Stream name
36
+ */
37
+ getConfig(args: GetStreamConfigArgs, options?: S2RequestOptions): Promise<import("./generated").StreamConfig>;
38
+ /**
39
+ * Delete a stream.
40
+ *
41
+ * @param args.stream Stream name
42
+ */
43
+ delete(args: DeleteStreamArgs, options?: S2RequestOptions): Promise<unknown>;
44
+ /**
45
+ * Reconfigure a stream.
46
+ *
47
+ * @param args.stream Stream name
48
+ * @param args.body Configuration fields to change
49
+ */
50
+ reconfigure(args: ReconfigureStreamArgs, options?: S2RequestOptions): Promise<import("./generated").StreamConfig>;
51
+ }
52
+ //# sourceMappingURL=streams.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"streams.d.ts","sourceRoot":"","sources":["../src/streams.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAE/D,OAAO,EACN,KAAK,gBAAgB,EAErB,KAAK,gBAAgB,EAErB,KAAK,mBAAmB,EAExB,KAAK,eAAe,EAEpB,KAAK,qBAAqB,EAE1B,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAC;AAE3D,MAAM,WAAW,eAAgB,SAAQ,YAAY,CAAC,eAAe,CAAC;CAAG;AACzE,MAAM,WAAW,gBAAiB,SAAQ,YAAY,CAAC,gBAAgB,CAAC;CAAG;AAC3E,MAAM,WAAW,mBAChB,SAAQ,YAAY,CAAC,mBAAmB,CAAC;CAAG;AAC7C,MAAM,WAAW,gBAAiB,SAAQ,YAAY,CAAC,gBAAgB,CAAC;CAAG;AAC3E,MAAM,WAAW,qBAChB,SAAQ,YAAY,CAAC,qBAAqB,CAAC;CAAG;AAE/C,qBAAa,SAAS;IACrB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;gBACpB,MAAM,EAAE,MAAM;IAI1B;;;;;;OAMG;IACU,IAAI,CAAC,IAAI,CAAC,EAAE,eAAe,EAAE,OAAO,CAAC,EAAE,gBAAgB;IAkBpE;;;;;OAKG;IACU,MAAM,CAAC,IAAI,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,gBAAgB;IAkBtE;;;;OAIG;IACU,SAAS,CACrB,IAAI,EAAE,mBAAmB,EACzB,OAAO,CAAC,EAAE,gBAAgB;IAmB3B;;;;OAIG;IACU,MAAM,CAAC,IAAI,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,gBAAgB;IAkBtE;;;;;OAKG;IACU,WAAW,CACvB,IAAI,EAAE,qBAAqB,EAC3B,OAAO,CAAC,EAAE,gBAAgB;CAmB3B"}