@s2-dev/streamstore 0.16.12 → 0.17.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 (109) hide show
  1. package/dist/cjs/basin.d.ts +6 -2
  2. package/dist/cjs/basin.d.ts.map +1 -1
  3. package/dist/cjs/basin.js +11 -5
  4. package/dist/cjs/basin.js.map +1 -1
  5. package/dist/cjs/batch-transform.d.ts +64 -0
  6. package/dist/cjs/batch-transform.d.ts.map +1 -0
  7. package/dist/cjs/batch-transform.js +144 -0
  8. package/dist/cjs/batch-transform.js.map +1 -0
  9. package/dist/cjs/generated/proto/s2.d.ts.map +1 -0
  10. package/dist/cjs/generated/proto/s2.js.map +1 -0
  11. package/dist/cjs/index.d.ts +4 -2
  12. package/dist/cjs/index.d.ts.map +1 -1
  13. package/dist/cjs/index.js +5 -1
  14. package/dist/cjs/index.js.map +1 -1
  15. package/dist/cjs/lib/stream/factory.d.ts +15 -0
  16. package/dist/cjs/lib/stream/factory.d.ts.map +1 -0
  17. package/dist/cjs/lib/stream/factory.js +36 -0
  18. package/dist/cjs/lib/stream/factory.js.map +1 -0
  19. package/dist/cjs/lib/stream/runtime.d.ts +13 -0
  20. package/dist/cjs/lib/stream/runtime.d.ts.map +1 -0
  21. package/dist/cjs/lib/stream/runtime.js +50 -0
  22. package/dist/cjs/lib/stream/runtime.js.map +1 -0
  23. package/dist/cjs/lib/stream/transport/fetch/index.d.ts +79 -0
  24. package/dist/cjs/lib/stream/transport/fetch/index.d.ts.map +1 -0
  25. package/dist/cjs/lib/stream/transport/fetch/index.js +382 -0
  26. package/dist/cjs/lib/stream/transport/fetch/index.js.map +1 -0
  27. package/dist/cjs/lib/stream/transport/fetch/shared.d.ts +7 -0
  28. package/dist/cjs/lib/stream/transport/fetch/shared.d.ts.map +1 -0
  29. package/dist/cjs/lib/stream/transport/fetch/shared.js +170 -0
  30. package/dist/cjs/lib/stream/transport/fetch/shared.js.map +1 -0
  31. package/dist/cjs/lib/stream/transport/s2s/framing.d.ts +47 -0
  32. package/dist/cjs/lib/stream/transport/s2s/framing.d.ts.map +1 -0
  33. package/dist/cjs/lib/stream/transport/s2s/framing.js +123 -0
  34. package/dist/cjs/lib/stream/transport/s2s/framing.js.map +1 -0
  35. package/dist/cjs/lib/stream/transport/s2s/index.d.ts +23 -0
  36. package/dist/cjs/lib/stream/transport/s2s/index.d.ts.map +1 -0
  37. package/dist/cjs/lib/stream/transport/s2s/index.js +785 -0
  38. package/dist/cjs/lib/stream/transport/s2s/index.js.map +1 -0
  39. package/dist/cjs/lib/stream/types.d.ts +53 -0
  40. package/dist/cjs/lib/stream/types.d.ts.map +1 -0
  41. package/dist/cjs/lib/stream/types.js +3 -0
  42. package/dist/cjs/lib/stream/types.js.map +1 -0
  43. package/dist/cjs/stream.d.ts +22 -116
  44. package/dist/cjs/stream.d.ts.map +1 -1
  45. package/dist/cjs/stream.js +35 -551
  46. package/dist/cjs/stream.js.map +1 -1
  47. package/dist/cjs/utils.d.ts +32 -6
  48. package/dist/cjs/utils.d.ts.map +1 -1
  49. package/dist/cjs/utils.js +129 -34
  50. package/dist/cjs/utils.js.map +1 -1
  51. package/dist/esm/basin.d.ts +6 -2
  52. package/dist/esm/basin.d.ts.map +1 -1
  53. package/dist/esm/basin.js +11 -5
  54. package/dist/esm/basin.js.map +1 -1
  55. package/dist/esm/batch-transform.d.ts +64 -0
  56. package/dist/esm/batch-transform.d.ts.map +1 -0
  57. package/dist/esm/batch-transform.js +140 -0
  58. package/dist/esm/batch-transform.js.map +1 -0
  59. package/dist/esm/generated/proto/s2.d.ts.map +1 -0
  60. package/dist/esm/generated/proto/s2.js.map +1 -0
  61. package/dist/esm/index.d.ts +4 -2
  62. package/dist/esm/index.d.ts.map +1 -1
  63. package/dist/esm/index.js +2 -1
  64. package/dist/esm/index.js.map +1 -1
  65. package/dist/esm/lib/stream/factory.d.ts +15 -0
  66. package/dist/esm/lib/stream/factory.d.ts.map +1 -0
  67. package/dist/esm/lib/stream/factory.js +33 -0
  68. package/dist/esm/lib/stream/factory.js.map +1 -0
  69. package/dist/esm/lib/stream/runtime.d.ts +13 -0
  70. package/dist/esm/lib/stream/runtime.d.ts.map +1 -0
  71. package/dist/esm/lib/stream/runtime.js +46 -0
  72. package/dist/esm/lib/stream/runtime.js.map +1 -0
  73. package/dist/esm/lib/stream/transport/fetch/index.d.ts +79 -0
  74. package/dist/esm/lib/stream/transport/fetch/index.d.ts.map +1 -0
  75. package/dist/esm/lib/stream/transport/fetch/index.js +376 -0
  76. package/dist/esm/lib/stream/transport/fetch/index.js.map +1 -0
  77. package/dist/esm/lib/stream/transport/fetch/shared.d.ts +7 -0
  78. package/dist/esm/lib/stream/transport/fetch/shared.d.ts.map +1 -0
  79. package/dist/esm/lib/stream/transport/fetch/shared.js +166 -0
  80. package/dist/esm/lib/stream/transport/fetch/shared.js.map +1 -0
  81. package/dist/esm/lib/stream/transport/s2s/framing.d.ts +47 -0
  82. package/dist/esm/lib/stream/transport/s2s/framing.d.ts.map +1 -0
  83. package/dist/esm/lib/stream/transport/s2s/framing.js +118 -0
  84. package/dist/esm/lib/stream/transport/s2s/framing.js.map +1 -0
  85. package/dist/esm/lib/stream/transport/s2s/index.d.ts +23 -0
  86. package/dist/esm/lib/stream/transport/s2s/index.d.ts.map +1 -0
  87. package/dist/esm/lib/stream/transport/s2s/index.js +781 -0
  88. package/dist/esm/lib/stream/transport/s2s/index.js.map +1 -0
  89. package/dist/esm/lib/stream/types.d.ts +53 -0
  90. package/dist/esm/lib/stream/types.d.ts.map +1 -0
  91. package/dist/esm/lib/stream/types.js +2 -0
  92. package/dist/esm/lib/stream/types.js.map +1 -0
  93. package/dist/esm/stream.d.ts +22 -116
  94. package/dist/esm/stream.d.ts.map +1 -1
  95. package/dist/esm/stream.js +36 -551
  96. package/dist/esm/stream.js.map +1 -1
  97. package/dist/esm/utils.d.ts +32 -6
  98. package/dist/esm/utils.d.ts.map +1 -1
  99. package/dist/esm/utils.js +126 -34
  100. package/dist/esm/utils.js.map +1 -1
  101. package/package.json +2 -2
  102. package/dist/cjs/generated/proto/s2/v1/s2.d.ts.map +0 -1
  103. package/dist/cjs/generated/proto/s2/v1/s2.js.map +0 -1
  104. package/dist/esm/generated/proto/s2/v1/s2.d.ts.map +0 -1
  105. package/dist/esm/generated/proto/s2/v1/s2.js.map +0 -1
  106. /package/dist/cjs/generated/proto/{s2/v1/s2.d.ts → s2.d.ts} +0 -0
  107. /package/dist/cjs/generated/proto/{s2/v1/s2.js → s2.js} +0 -0
  108. /package/dist/esm/generated/proto/{s2/v1/s2.d.ts → s2.d.ts} +0 -0
  109. /package/dist/esm/generated/proto/{s2/v1/s2.js → s2.js} +0 -0
@@ -1,13 +1,25 @@
1
- import { FencingTokenMismatchError, RangeNotSatisfiableError, S2Error, SeqNumMismatchError, } from "./error.js";
2
- import { append, checkTail, read, } from "./generated/index.js";
3
- import { decodeFromBase64, encodeToBase64 } from "./lib/base64.js";
4
- import { EventStream } from "./lib/event-stream.js";
1
+ import { S2Error } from "./error.js";
2
+ import { checkTail } from "./generated/index.js";
3
+ import { createSessionTransport } from "./lib/stream/factory.js";
4
+ import { streamAppend, streamRead, } from "./lib/stream/transport/fetch/shared.js";
5
5
  export class S2Stream {
6
6
  client;
7
+ transportConfig;
8
+ _transport;
7
9
  name;
8
- constructor(name, client) {
10
+ constructor(name, client, transportConfig) {
9
11
  this.name = name;
10
12
  this.client = client;
13
+ this.transportConfig = transportConfig;
14
+ }
15
+ /**
16
+ * Get or create the transport instance
17
+ */
18
+ async getTransport() {
19
+ if (!this._transport) {
20
+ this._transport = await createSessionTransport(this.transportConfig);
21
+ }
22
+ return this._transport;
11
23
  }
12
24
  /**
13
25
  * Check the tail of the stream.
@@ -40,138 +52,24 @@ export class S2Stream {
40
52
  * - Use `readSession` for streaming reads
41
53
  */
42
54
  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 RangeNotSatisfiableError({
66
- status: response.response.status,
67
- });
68
- }
69
- }
70
- if (args?.as === "bytes") {
71
- const res = {
72
- ...response.data,
73
- records: response.data.records?.map((record) => ({
74
- ...record,
75
- body: record.body ? decodeFromBase64(record.body) : undefined,
76
- headers: record.headers?.map((header) => header.map((h) => decodeFromBase64(h))),
77
- })),
78
- };
79
- return res;
80
- }
81
- else {
82
- const res = response.data;
83
- return res;
84
- }
55
+ return await streamRead(this.name, this.client, args, options);
85
56
  }
86
57
  /**
87
58
  * Append one or more records to the stream.
88
59
  *
89
- * - Automatically base64-encodes when any body or header is a `Uint8Array`.
60
+ * - Automatically base64-encodes when format is "bytes".
90
61
  * - Supports conditional appends via `fencing_token` and `match_seq_num`.
91
62
  * - Returns the acknowledged range and the stream tail after the append.
63
+ *
64
+ * All records in a single append call must use the same format (either all string or all bytes).
65
+ * For high-throughput sequential appends, use `appendSession()` instead.
66
+ *
67
+ * @param records The record(s) to append
68
+ * @param args Optional append arguments (fencing_token, match_seq_num)
69
+ * @param options Optional request options
92
70
  */
93
71
  async append(records, args, options) {
94
- const recordsArray = Array.isArray(records) ? records : [records];
95
- const normalizeHeaders = (headers) => {
96
- if (headers === undefined) {
97
- return undefined;
98
- }
99
- else if (Array.isArray(headers)) {
100
- return headers;
101
- }
102
- else {
103
- return Object.entries(headers).map(([key, value]) => [key, value]);
104
- }
105
- };
106
- const recordsWithNormalizedHeaders = recordsArray.map((record) => ({
107
- ...record,
108
- headers: normalizeHeaders(record.headers),
109
- }));
110
- const hasBytes = recordsWithNormalizedHeaders.some((record) => record.body instanceof Uint8Array) ||
111
- recordsWithNormalizedHeaders.some((record) => record.headers?.some((header) => header[0] instanceof Uint8Array || header[1] instanceof Uint8Array));
112
- const encodedRecords = recordsWithNormalizedHeaders.map((record) => ({
113
- ...record,
114
- body: record.body instanceof Uint8Array
115
- ? encodeToBase64(record.body)
116
- : hasBytes && record.body
117
- ? encodeToBase64(new TextEncoder().encode(record.body))
118
- : record.body,
119
- headers: record.headers?.map((header) => header.map((h) => h instanceof Uint8Array
120
- ? encodeToBase64(h)
121
- : hasBytes
122
- ? encodeToBase64(new TextEncoder().encode(h))
123
- : h)),
124
- }));
125
- const response = await append({
126
- client: this.client,
127
- path: {
128
- stream: this.name,
129
- },
130
- body: {
131
- ...args,
132
- records: encodedRecords,
133
- },
134
- headers: {
135
- ...(hasBytes ? { "s2-format": "base64" } : {}),
136
- },
137
- ...options,
138
- });
139
- if (response.error) {
140
- if ("message" in response.error) {
141
- throw new S2Error({
142
- message: response.error.message,
143
- code: response.error.code ?? undefined,
144
- status: response.response.status,
145
- });
146
- }
147
- else {
148
- // special case for 412 - append condition failed
149
- if ("seq_num_mismatch" in response.error) {
150
- throw new SeqNumMismatchError({
151
- message: "Append condition failed: sequence number mismatch",
152
- code: "APPEND_CONDITION_FAILED",
153
- status: response.response.status,
154
- expectedSeqNum: response.error.seq_num_mismatch,
155
- });
156
- }
157
- else if ("fencing_token_mismatch" in response.error) {
158
- throw new FencingTokenMismatchError({
159
- message: "Append condition failed: fencing token mismatch",
160
- code: "APPEND_CONDITION_FAILED",
161
- status: response.response.status,
162
- expectedFencingToken: response.error.fencing_token_mismatch,
163
- });
164
- }
165
- else {
166
- // fallback for unknown 412 error format
167
- throw new S2Error({
168
- message: "Append condition failed",
169
- status: response.response.status,
170
- });
171
- }
172
- }
173
- }
174
- return response.data;
72
+ return await streamAppend(this.name, this.client, records, args, options);
175
73
  }
176
74
  /**
177
75
  * Open a streaming read session
@@ -180,433 +78,20 @@ export class S2Stream {
180
78
  * When `as: "bytes"` is provided, bodies and headers are decoded to `Uint8Array`.
181
79
  */
182
80
  async readSession(args, options) {
183
- return await ReadSession.create(this.client, this.name, args, options);
81
+ const transport = await this.getTransport();
82
+ return await transport.makeReadSession(this.name, args, options);
184
83
  }
185
84
  /**
186
- * Create an append session that guaranteeds ordering of submissions.
85
+ * Create an append session that guarantees ordering of submissions.
187
86
  *
188
87
  * Use this to coordinate high-throughput, sequential appends with backpressure.
88
+ * Records can be either string or bytes format - the format is specified in each record.
89
+ *
90
+ * @param options Optional request options
189
91
  */
190
- async appendSession(options) {
191
- return await AppendSession.create(this, options);
192
- }
193
- }
194
- export class ReadSession extends EventStream {
195
- static async create(client, name, args, options) {
196
- const { as, ...queryParams } = args ?? {};
197
- const response = await read({
198
- client,
199
- path: {
200
- stream: name,
201
- },
202
- headers: {
203
- accept: "text/event-stream",
204
- ...(as === "bytes" ? { "s2-format": "base64" } : {}),
205
- },
206
- query: queryParams,
207
- parseAs: "stream",
208
- ...options,
209
- });
210
- if (response.error) {
211
- if ("message" in response.error) {
212
- throw new S2Error({
213
- message: response.error.message,
214
- code: response.error.code ?? undefined,
215
- status: response.response.status,
216
- });
217
- }
218
- else {
219
- // special case for 416 - Range Not Satisfiable
220
- throw new RangeNotSatisfiableError({
221
- status: response.response.status,
222
- });
223
- }
224
- }
225
- if (!response.response.body) {
226
- throw new S2Error({
227
- message: "No body in SSE response",
228
- });
229
- }
230
- return new ReadSession(response.response.body, args?.as ?? "string");
231
- }
232
- _streamPosition = undefined;
233
- constructor(stream, format) {
234
- super(stream, (msg) => {
235
- // Parse SSE events according to the S2 protocol
236
- if (msg.event === "batch" && msg.data) {
237
- const batch = JSON.parse(msg.data);
238
- // If format is bytes, decode base64 to Uint8Array
239
- if (format === "bytes") {
240
- for (const record of batch.records ?? []) {
241
- if (record.body && typeof record.body === "string") {
242
- record.body = decodeFromBase64(record.body);
243
- }
244
- if (record.headers) {
245
- record.headers = record.headers.map((header) => header.map((h) => typeof h === "string" ? decodeFromBase64(h) : h));
246
- }
247
- }
248
- }
249
- if (batch.tail) {
250
- this._streamPosition = batch.tail;
251
- }
252
- return { done: false, batch: true, value: batch.records ?? [] };
253
- }
254
- if (msg.event === "error") {
255
- // Handle error events
256
- throw new S2Error({ message: msg.data ?? "Unknown error" });
257
- }
258
- // Skip ping events and other events
259
- return { done: false };
260
- });
261
- }
262
- get streamPosition() {
263
- return this._streamPosition;
264
- }
265
- }
266
- class AcksStream extends ReadableStream {
267
- constructor(setController) {
268
- super({
269
- start: (controller) => {
270
- setController(controller);
271
- },
272
- });
273
- }
274
- async [Symbol.asyncDispose]() {
275
- await this.cancel("disposed");
276
- }
277
- // Polyfill for older browsers
278
- [Symbol.asyncIterator]() {
279
- const fn = ReadableStream.prototype[Symbol.asyncIterator];
280
- if (typeof fn === "function")
281
- return fn.call(this);
282
- const reader = this.getReader();
283
- return {
284
- next: async () => {
285
- const r = await reader.read();
286
- if (r.done) {
287
- reader.releaseLock();
288
- return { done: true, value: undefined };
289
- }
290
- return { done: false, value: r.value };
291
- },
292
- throw: async (e) => {
293
- await reader.cancel(e);
294
- reader.releaseLock();
295
- return { done: true, value: undefined };
296
- },
297
- return: async () => {
298
- await reader.cancel("done");
299
- reader.releaseLock();
300
- return { done: true, value: undefined };
301
- },
302
- [Symbol.asyncIterator]() {
303
- return this;
304
- },
305
- };
306
- }
307
- }
308
- /**
309
- * Batches individual records and submits them to an AppendSession.
310
- * Handles linger duration, batch size limits, and auto-incrementing match_seq_num.
311
- */
312
- class Batcher extends WritableStream {
313
- session;
314
- currentBatch = [];
315
- currentBatchResolvers = [];
316
- lingerTimer = null;
317
- closed = false;
318
- maxBatchSize;
319
- lingerDuration;
320
- fencing_token;
321
- next_match_seq_num;
322
- constructor(session, args) {
323
- let writableController;
324
- super({
325
- start: (controller) => {
326
- writableController = controller;
327
- },
328
- write: (chunk) => {
329
- const records = Array.isArray(chunk) ? chunk : [chunk];
330
- this.submit(records);
331
- },
332
- close: () => {
333
- this.closed = true;
334
- this.flush();
335
- this.cleanup();
336
- },
337
- abort: (reason) => {
338
- this.closed = true;
339
- // Reject all pending promises in the current batch
340
- const error = new S2Error({
341
- message: `Batcher was aborted: ${reason}`,
342
- });
343
- for (const resolver of this.currentBatchResolvers) {
344
- resolver.reject(error);
345
- }
346
- this.currentBatch = [];
347
- this.currentBatchResolvers = [];
348
- this.cleanup();
349
- },
350
- });
351
- this.session = session;
352
- this.maxBatchSize = args?.maxBatchSize ?? 1000;
353
- this.lingerDuration = args?.lingerDuration ?? 5;
354
- this.fencing_token = args?.fencing_token;
355
- this.next_match_seq_num = args?.match_seq_num;
356
- }
357
- async [Symbol.asyncDispose]() {
358
- await this.close();
359
- }
360
- /**
361
- * Submit one or more records to be batched.
362
- * For array submits, the entire array is treated as an atomic unit and will never be split across batches.
363
- * If it doesn't fit in the current batch, the current batch is flushed and the array is queued in the next batch.
364
- * Returns a promise that resolves when the batch containing these records is acknowledged.
365
- */
366
- submit(records) {
367
- if (this.closed) {
368
- return Promise.reject(new S2Error({ message: "Batcher is closed" }));
369
- }
370
- return new Promise((resolve, reject) => {
371
- const recordsArray = Array.isArray(records) ? records : [records];
372
- const isArraySubmit = Array.isArray(records) && records.length > 1;
373
- // Start linger timer on first record added to an empty batch
374
- if (this.currentBatch.length === 0 && this.lingerDuration > 0) {
375
- this.startLingerTimer();
376
- }
377
- if (isArraySubmit) {
378
- // Treat the entire array as atomic: if it doesn't fit, flush current batch first
379
- if (this.currentBatch.length > 0 &&
380
- this.currentBatch.length + recordsArray.length > this.maxBatchSize) {
381
- this.flush();
382
- // After flush, if linger is enabled, restart the timer for the new batch
383
- if (this.lingerDuration > 0) {
384
- this.startLingerTimer();
385
- }
386
- }
387
- // Add the entire array (even if it exceeds maxBatchSize) as a single batch unit
388
- this.currentBatch.push(...recordsArray);
389
- this.currentBatchResolvers.push({ resolve, reject });
390
- // Do not auto-flush here; allow linger timer or explicit flush to send the batch
391
- }
392
- else {
393
- // Single record submit — normal behavior
394
- if (this.currentBatch.length >= this.maxBatchSize) {
395
- this.flush();
396
- if (this.lingerDuration > 0) {
397
- this.startLingerTimer();
398
- }
399
- }
400
- this.currentBatch.push(recordsArray[0]);
401
- this.currentBatchResolvers.push({ resolve, reject });
402
- if (this.currentBatch.length >= this.maxBatchSize) {
403
- this.flush();
404
- }
405
- }
406
- });
407
- }
408
- /**
409
- * Flush the current batch to the session.
410
- */
411
- flush() {
412
- this.cancelLingerTimer();
413
- if (this.currentBatch.length === 0) {
414
- return;
415
- }
416
- const args = {
417
- records: this.currentBatch,
418
- fencing_token: this.fencing_token,
419
- match_seq_num: this.next_match_seq_num,
420
- };
421
- // Auto-increment match_seq_num for next batch
422
- if (this.next_match_seq_num !== undefined) {
423
- this.next_match_seq_num += this.currentBatch.length;
424
- }
425
- // Capture resolvers for this batch
426
- const batchResolvers = this.currentBatchResolvers;
427
- this.currentBatchResolvers = [];
428
- this.currentBatch = [];
429
- // Submit to session and handle promise
430
- const promise = this.session.submit(args.records, {
431
- fencing_token: args.fencing_token,
432
- match_seq_num: args.match_seq_num,
433
- });
434
- // Resolve/reject all resolvers for this batch when the ack comes back
435
- promise.then((ack) => {
436
- for (const resolver of batchResolvers) {
437
- resolver.resolve(ack);
438
- }
439
- }, (error) => {
440
- for (const resolver of batchResolvers) {
441
- resolver.reject(error);
442
- }
443
- });
444
- }
445
- startLingerTimer() {
446
- this.cancelLingerTimer();
447
- this.lingerTimer = setTimeout(() => {
448
- this.lingerTimer = null;
449
- if (!this.closed && this.currentBatch.length > 0) {
450
- this.flush();
451
- }
452
- }, this.lingerDuration);
453
- }
454
- cancelLingerTimer() {
455
- if (this.lingerTimer) {
456
- clearTimeout(this.lingerTimer);
457
- this.lingerTimer = null;
458
- }
459
- }
460
- cleanup() {
461
- this.cancelLingerTimer();
462
- }
463
- }
464
- /**
465
- * Session for appending records to a stream.
466
- * Queues append requests and ensures only one is in-flight at a time.
467
- */
468
- class AppendSession extends WritableStream {
469
- _lastSeenPosition = undefined;
470
- queue = [];
471
- pendingResolvers = [];
472
- inFlight = false;
473
- options;
474
- stream;
475
- acksController;
476
- _acksStream;
477
- closed = false;
478
- processingPromise = null;
479
- static async create(stream, options) {
480
- return new AppendSession(stream, options);
481
- }
482
- constructor(stream, options) {
483
- let writableController;
484
- super({
485
- start: (controller) => {
486
- writableController = controller;
487
- },
488
- write: (chunk) => {
489
- this.submit(chunk.records, {
490
- fencing_token: chunk.fencing_token,
491
- match_seq_num: chunk.match_seq_num,
492
- });
493
- },
494
- close: async () => {
495
- this.closed = true;
496
- await this.waitForDrain();
497
- },
498
- abort: async (reason) => {
499
- this.closed = true;
500
- this.queue = [];
501
- // Reject all pending promises
502
- const error = new S2Error({
503
- message: `AppendSession was aborted: ${reason}`,
504
- });
505
- for (const resolver of this.pendingResolvers) {
506
- resolver.reject(error);
507
- }
508
- this.pendingResolvers = [];
509
- },
510
- });
511
- this.options = options;
512
- this.stream = stream;
513
- }
514
- async [Symbol.asyncDispose]() {
515
- await this.close();
516
- }
517
- /**
518
- * Create a batcher that batches individual records and submits them to this session.
519
- */
520
- makeBatcher(args) {
521
- return new Batcher(this, args);
522
- }
523
- /**
524
- * Get a stream of acknowledgements for appends.
525
- */
526
- acks() {
527
- if (!this._acksStream) {
528
- this._acksStream = new AcksStream((controller) => {
529
- this.acksController = controller;
530
- });
531
- }
532
- return this._acksStream;
533
- }
534
- /**
535
- * Submit an append request to the session.
536
- * The request will be queued and sent when no other request is in-flight.
537
- * Returns a promise that resolves when the append is acknowledged or rejects on error.
538
- */
539
- submit(records, args) {
540
- if (this.closed) {
541
- return Promise.reject(new S2Error({ message: "AppendSession is closed" }));
542
- }
543
- return new Promise((resolve, reject) => {
544
- this.queue.push({
545
- records: Array.isArray(records) ? records : [records],
546
- ...args,
547
- });
548
- this.pendingResolvers.push({ resolve, reject });
549
- // Start processing if not already running
550
- if (!this.processingPromise) {
551
- this.processingPromise = this.processLoop();
552
- }
553
- });
554
- }
555
- /**
556
- * Main processing loop that sends queued requests one at a time.
557
- */
558
- async processLoop() {
559
- while (this.queue.length > 0) {
560
- this.inFlight = true;
561
- const args = this.queue.shift();
562
- const resolver = this.pendingResolvers.shift();
563
- try {
564
- const ack = await this.stream.append(args.records, {
565
- fencing_token: args.fencing_token,
566
- match_seq_num: args.match_seq_num,
567
- }, this.options);
568
- this._lastSeenPosition = ack;
569
- // Emit ack to the acks stream if it exists
570
- if (this.acksController) {
571
- this.acksController.enqueue(ack);
572
- }
573
- // Resolve the promise for this request
574
- resolver.resolve(ack);
575
- }
576
- catch (error) {
577
- this.inFlight = false;
578
- this.processingPromise = null;
579
- // Reject the promise for this request
580
- resolver.reject(error);
581
- // Reject all remaining pending promises
582
- for (const pendingResolver of this.pendingResolvers) {
583
- pendingResolver.reject(error);
584
- }
585
- this.pendingResolvers = [];
586
- // Clear the queue
587
- this.queue = [];
588
- // Do not rethrow here to avoid unhandled rejection; callers already received rejection
589
- }
590
- this.inFlight = false;
591
- }
592
- this.processingPromise = null;
593
- }
594
- async waitForDrain() {
595
- // Wait for processing to complete
596
- if (this.processingPromise) {
597
- await this.processingPromise;
598
- }
599
- // Wait until queue is empty and nothing is in flight
600
- while (this.queue.length > 0 || this.inFlight) {
601
- await new Promise((resolve) => setTimeout(resolve, 10));
602
- }
603
- // Close the acks stream if it exists
604
- if (this.acksController) {
605
- this.acksController.close();
606
- }
607
- }
608
- get lastSeenPosition() {
609
- return this._lastSeenPosition;
92
+ async appendSession(sessionOptions, requestOptions) {
93
+ const transport = await this.getTransport();
94
+ return await transport.makeAppendSession(this.name, sessionOptions, requestOptions);
610
95
  }
611
96
  }
612
97
  //# sourceMappingURL=stream.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"stream.js","sourceRoot":"","sources":["../../src/stream.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"stream.js","sourceRoot":"","sources":["../../src/stream.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAErC,OAAO,EAAkB,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EACN,YAAY,EACZ,UAAU,GACV,MAAM,wCAAwC,CAAC;AAahD,MAAM,OAAO,QAAQ;IACH,MAAM,CAAS;IACf,eAAe,CAAkB;IAC1C,UAAU,CAAoB;IAEtB,IAAI,CAAS;IAE7B,YAAY,IAAY,EAAE,MAAc,EAAE,eAAgC;QACzE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;IACxC,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,YAAY;QACzB,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACtB,IAAI,CAAC,UAAU,GAAG,MAAM,sBAAsB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QACtE,CAAC;QACD,OAAO,IAAI,CAAC,UAAU,CAAC;IACxB,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,SAAS,CAAC,OAA0B;QAChD,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC;YAChC,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,IAAI,EAAE;gBACL,MAAM,EAAE,IAAI,CAAC,IAAI;aACjB;YACD,GAAG,OAAO;SACV,CAAC,CAAC;QAEH,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;YACpB,MAAM,IAAI,OAAO,CAAC;gBACjB,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC,OAAO;gBAC/B,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,IAAI,IAAI,SAAS;gBACtC,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,MAAM;aAChC,CAAC,CAAC;QACJ,CAAC;QAED,OAAO,QAAQ,CAAC,IAAI,CAAC;IACtB,CAAC;IAED;;;;;;;OAOG;IACI,KAAK,CAAC,IAAI,CAChB,IAAuB,EACvB,OAA0B;QAE1B,OAAO,MAAM,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAChE,CAAC;IACD;;;;;;;;;;;;;OAaG;IACI,KAAK,CAAC,MAAM,CAClB,OAAsC,EACtC,IAAkC,EAClC,OAA0B;QAE1B,OAAO,MAAM,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAC3E,CAAC;IACD;;;;;OAKG;IACI,KAAK,CAAC,WAAW,CACvB,IAAuB,EACvB,OAA0B;QAE1B,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;QAC5C,OAAO,MAAM,SAAS,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAClE,CAAC;IACD;;;;;;;OAOG;IACI,KAAK,CAAC,aAAa,CACzB,cAAqC,EACrC,cAAiC;QAEjC,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;QAC5C,OAAO,MAAM,SAAS,CAAC,iBAAiB,CACvC,IAAI,CAAC,IAAI,EACT,cAAc,EACd,cAAc,CACd,CAAC;IACH,CAAC;CACD"}