@s2-dev/streamstore 0.16.0 → 0.16.2

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 (158) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +1 -2
  3. package/dist/accessTokens.d.ts +37 -0
  4. package/dist/accessTokens.d.ts.map +1 -0
  5. package/dist/accessTokens.js +74 -0
  6. package/dist/accessTokens.js.map +1 -0
  7. package/dist/basin.d.ts +26 -0
  8. package/dist/basin.d.ts.map +1 -0
  9. package/dist/basin.js +34 -0
  10. package/dist/basin.js.map +1 -0
  11. package/dist/basins.d.ts +53 -0
  12. package/dist/basins.d.ts.map +1 -0
  13. package/dist/basins.js +115 -0
  14. package/dist/basins.js.map +1 -0
  15. package/dist/common.d.ts +44 -0
  16. package/dist/common.d.ts.map +1 -0
  17. package/dist/common.js +2 -0
  18. package/dist/common.js.map +1 -0
  19. package/dist/error.d.ts +28 -0
  20. package/dist/error.d.ts.map +1 -0
  21. package/dist/error.js +43 -0
  22. package/dist/error.js.map +1 -0
  23. package/dist/generated/client/client.gen.d.ts +3 -0
  24. package/dist/generated/client/client.gen.d.ts.map +1 -0
  25. package/dist/generated/client/client.gen.js +205 -0
  26. package/dist/generated/client/client.gen.js.map +1 -0
  27. package/dist/generated/client/index.d.ts +9 -0
  28. package/dist/generated/client/index.d.ts.map +1 -0
  29. package/dist/generated/client/index.js +7 -0
  30. package/dist/generated/client/index.js.map +1 -0
  31. package/dist/generated/client/types.gen.d.ts +125 -0
  32. package/dist/generated/client/types.gen.d.ts.map +1 -0
  33. package/dist/generated/client/types.gen.js +3 -0
  34. package/dist/generated/client/types.gen.js.map +1 -0
  35. package/dist/generated/client/utils.gen.d.ts +34 -0
  36. package/dist/generated/client/utils.gen.d.ts.map +1 -0
  37. package/dist/generated/client/utils.gen.js +231 -0
  38. package/dist/generated/client/utils.gen.js.map +1 -0
  39. package/{src/generated/client.gen.ts → dist/generated/client.gen.d.ts} +3 -8
  40. package/dist/generated/client.gen.d.ts.map +1 -0
  41. package/dist/generated/client.gen.js +6 -0
  42. package/dist/generated/client.gen.js.map +1 -0
  43. package/dist/generated/core/auth.gen.d.ts +19 -0
  44. package/dist/generated/core/auth.gen.d.ts.map +1 -0
  45. package/dist/generated/core/auth.gen.js +15 -0
  46. package/dist/generated/core/auth.gen.js.map +1 -0
  47. package/dist/generated/core/bodySerializer.gen.d.ts +18 -0
  48. package/dist/generated/core/bodySerializer.gen.d.ts.map +1 -0
  49. package/dist/generated/core/bodySerializer.gen.js +58 -0
  50. package/dist/generated/core/bodySerializer.gen.js.map +1 -0
  51. package/dist/generated/core/params.gen.d.ts +34 -0
  52. package/dist/generated/core/params.gen.d.ts.map +1 -0
  53. package/dist/generated/core/params.gen.js +89 -0
  54. package/dist/generated/core/params.gen.js.map +1 -0
  55. package/dist/generated/core/pathSerializer.gen.d.ts +34 -0
  56. package/dist/generated/core/pathSerializer.gen.d.ts.map +1 -0
  57. package/dist/generated/core/pathSerializer.gen.js +115 -0
  58. package/dist/generated/core/pathSerializer.gen.js.map +1 -0
  59. package/dist/generated/core/queryKeySerializer.gen.d.ts +19 -0
  60. package/dist/generated/core/queryKeySerializer.gen.d.ts.map +1 -0
  61. package/dist/generated/core/queryKeySerializer.gen.js +100 -0
  62. package/dist/generated/core/queryKeySerializer.gen.js.map +1 -0
  63. package/dist/generated/core/serverSentEvents.gen.d.ts +72 -0
  64. package/dist/generated/core/serverSentEvents.gen.d.ts.map +1 -0
  65. package/dist/generated/core/serverSentEvents.gen.js +136 -0
  66. package/dist/generated/core/serverSentEvents.gen.js.map +1 -0
  67. package/dist/generated/core/types.gen.d.ts +79 -0
  68. package/dist/generated/core/types.gen.d.ts.map +1 -0
  69. package/dist/generated/core/types.gen.js +3 -0
  70. package/dist/generated/core/types.gen.js.map +1 -0
  71. package/dist/generated/core/utils.gen.d.ts +20 -0
  72. package/dist/generated/core/utils.gen.d.ts.map +1 -0
  73. package/dist/generated/core/utils.gen.js +88 -0
  74. package/dist/generated/core/utils.gen.js.map +1 -0
  75. package/dist/generated/index.d.ts +3 -0
  76. package/dist/generated/index.d.ts.map +1 -0
  77. package/{src/generated/index.ts → dist/generated/index.js} +1 -2
  78. package/dist/generated/index.js.map +1 -0
  79. package/dist/generated/sdk.gen.d.ts +100 -0
  80. package/dist/generated/sdk.gen.d.ts.map +1 -0
  81. package/dist/generated/sdk.gen.js +350 -0
  82. package/dist/generated/sdk.gen.js.map +1 -0
  83. package/{src/generated/types.gen.ts → dist/generated/types.gen.d.ts} +1 -158
  84. package/dist/generated/types.gen.d.ts.map +1 -0
  85. package/dist/generated/types.gen.js +3 -0
  86. package/dist/generated/types.gen.js.map +1 -0
  87. package/dist/index.d.ts +10 -0
  88. package/dist/index.d.ts.map +1 -0
  89. package/dist/index.js +4 -0
  90. package/dist/index.js.map +1 -0
  91. package/dist/lib/event-stream.d.ts +26 -0
  92. package/dist/lib/event-stream.d.ts.map +1 -0
  93. package/dist/lib/event-stream.js +138 -0
  94. package/dist/lib/event-stream.js.map +1 -0
  95. package/dist/metrics.d.ts +44 -0
  96. package/dist/metrics.d.ts.map +1 -0
  97. package/dist/metrics.js +83 -0
  98. package/dist/metrics.js.map +1 -0
  99. package/dist/s2.d.ts +38 -0
  100. package/dist/s2.d.ts.map +1 -0
  101. package/dist/s2.js +56 -0
  102. package/dist/s2.js.map +1 -0
  103. package/dist/stream.d.ts +156 -0
  104. package/dist/stream.d.ts.map +1 -0
  105. package/dist/stream.js +598 -0
  106. package/dist/stream.js.map +1 -0
  107. package/dist/streams.d.ts +52 -0
  108. package/dist/streams.d.ts.map +1 -0
  109. package/dist/streams.js +114 -0
  110. package/dist/streams.js.map +1 -0
  111. package/dist/utils.d.ts +20 -0
  112. package/dist/utils.d.ts.map +1 -0
  113. package/dist/utils.js +52 -0
  114. package/dist/utils.js.map +1 -0
  115. package/package.json +13 -4
  116. package/.changeset/README.md +0 -8
  117. package/.changeset/config.json +0 -11
  118. package/.claude/settings.local.json +0 -9
  119. package/.github/workflows/ci.yml +0 -59
  120. package/.github/workflows/publish.yml +0 -35
  121. package/CHANGELOG.md +0 -7
  122. package/biome.json +0 -30
  123. package/bun.lock +0 -598
  124. package/examples/append.ts +0 -84
  125. package/examples/kitchen-sink.ts +0 -73
  126. package/examples/read.ts +0 -30
  127. package/openapi-ts.config.ts +0 -7
  128. package/src/accessTokens.ts +0 -100
  129. package/src/basin.ts +0 -43
  130. package/src/basins.ts +0 -154
  131. package/src/common.ts +0 -45
  132. package/src/error.ts +0 -58
  133. package/src/generated/client/client.gen.ts +0 -268
  134. package/src/generated/client/index.ts +0 -26
  135. package/src/generated/client/types.gen.ts +0 -268
  136. package/src/generated/client/utils.gen.ts +0 -331
  137. package/src/generated/core/auth.gen.ts +0 -42
  138. package/src/generated/core/bodySerializer.gen.ts +0 -92
  139. package/src/generated/core/params.gen.ts +0 -153
  140. package/src/generated/core/pathSerializer.gen.ts +0 -181
  141. package/src/generated/core/queryKeySerializer.gen.ts +0 -136
  142. package/src/generated/core/serverSentEvents.gen.ts +0 -264
  143. package/src/generated/core/types.gen.ts +0 -118
  144. package/src/generated/core/utils.gen.ts +0 -143
  145. package/src/generated/sdk.gen.ts +0 -387
  146. package/src/index.ts +0 -66
  147. package/src/lib/event-stream.ts +0 -167
  148. package/src/metrics.ts +0 -106
  149. package/src/s2.ts +0 -65
  150. package/src/stream.ts +0 -791
  151. package/src/streams.ts +0 -156
  152. package/src/tests/appendSession.test.ts +0 -149
  153. package/src/tests/batcher-session.integration.test.ts +0 -80
  154. package/src/tests/batcher.test.ts +0 -216
  155. package/src/tests/index.test.ts +0 -7
  156. package/src/utils.ts +0 -80
  157. package/tsconfig.build.json +0 -10
  158. package/tsconfig.json +0 -31
@@ -1,167 +0,0 @@
1
- /*
2
- * Code from Speakeasy (https://speakeasy.com).
3
- */
4
-
5
- export type SseMessage<T> = {
6
- data?: T | undefined;
7
- event?: string | undefined;
8
- id?: string | undefined;
9
- retry?: number | undefined;
10
- };
11
-
12
- type ParseResult<T> =
13
- | {
14
- done: true;
15
- value?: undefined;
16
- batch?: undefined;
17
- }
18
- | {
19
- done: false;
20
- batch?: false;
21
- value?: T;
22
- }
23
- | {
24
- done: false;
25
- batch: true;
26
- value: T[];
27
- };
28
-
29
- export class EventStream<T>
30
- extends ReadableStream<T>
31
- implements AsyncDisposable
32
- {
33
- constructor(
34
- responseBody: ReadableStream<Uint8Array>,
35
- parse: (x: SseMessage<string>) => ParseResult<T>,
36
- ) {
37
- const upstream = responseBody.getReader();
38
- let buffer: Uint8Array = new Uint8Array();
39
- super({
40
- async pull(downstream) {
41
- try {
42
- while (true) {
43
- const match = findBoundary(buffer);
44
- if (!match) {
45
- const chunk = await upstream.read();
46
- if (chunk.done) return downstream.close();
47
- buffer = concatBuffer(buffer, chunk.value);
48
- continue;
49
- }
50
- const message = buffer.slice(0, match.index);
51
- buffer = buffer.slice(match.index + match.length);
52
- const item = parseMessage(message, parse);
53
- if (item) {
54
- if (item.batch) {
55
- for (const chunk of item.value) {
56
- downstream.enqueue(chunk);
57
- }
58
- } else if (item.value) {
59
- downstream.enqueue(item.value);
60
- } else if (item.done) {
61
- await upstream.cancel("done");
62
- downstream.close();
63
- }
64
- }
65
- }
66
- } catch (e) {
67
- downstream.error(e);
68
- await upstream.cancel(e);
69
- }
70
- },
71
- cancel: (reason) => upstream.cancel(reason),
72
- });
73
- }
74
-
75
- async [Symbol.asyncDispose]() {
76
- await this.cancel("disposed");
77
- }
78
-
79
- // Polyfill for older browsers
80
- [Symbol.asyncIterator](): AsyncIterableIterator<T> {
81
- const fn = (ReadableStream.prototype as any)[Symbol.asyncIterator];
82
- if (typeof fn === "function") return fn.call(this);
83
- const reader = this.getReader();
84
- return {
85
- next: async () => {
86
- const r = await reader.read();
87
- if (r.done) {
88
- reader.releaseLock();
89
- return { done: true, value: undefined };
90
- }
91
- return { done: false, value: r.value };
92
- },
93
- throw: async (e) => {
94
- await reader.cancel(e);
95
- reader.releaseLock();
96
- return { done: true, value: undefined };
97
- },
98
- return: async () => {
99
- await reader.cancel("done");
100
- reader.releaseLock();
101
- return { done: true, value: undefined };
102
- },
103
- [Symbol.asyncIterator]() {
104
- return this;
105
- },
106
- };
107
- }
108
- }
109
-
110
- function concatBuffer(a: Uint8Array, b: Uint8Array): Uint8Array {
111
- const c = new Uint8Array(a.length + b.length);
112
- c.set(a, 0);
113
- c.set(b, a.length);
114
- return c;
115
- }
116
-
117
- /** Finds the first (CR,LF,CR,LF) or (CR,CR) or (LF,LF) */
118
- function findBoundary(
119
- buf: Uint8Array,
120
- ): { index: number; length: number } | null {
121
- const len = buf.length;
122
- for (let i = 0; i < len; i++) {
123
- if (
124
- i <= len - 4 &&
125
- buf[i] === 13 &&
126
- buf[i + 1] === 10 &&
127
- buf[i + 2] === 13 &&
128
- buf[i + 3] === 10
129
- ) {
130
- return { index: i, length: 4 };
131
- }
132
- if (i <= len - 2 && buf[i] === 13 && buf[i + 1] === 13) {
133
- return { index: i, length: 2 };
134
- }
135
- if (i <= len - 2 && buf[i] === 10 && buf[i + 1] === 10) {
136
- return { index: i, length: 2 };
137
- }
138
- }
139
- return null;
140
- }
141
- function parseMessage<T>(
142
- chunk: Uint8Array,
143
- parse: (x: SseMessage<string>) => ParseResult<T>,
144
- ) {
145
- const text = new TextDecoder().decode(chunk);
146
- const lines = text.split(/\r\n|\r|\n/);
147
- const dataLines: string[] = [];
148
- const ret: SseMessage<string> = {};
149
- let ignore = true;
150
- for (const line of lines) {
151
- if (!line || line.startsWith(":")) continue;
152
- ignore = false;
153
- const i = line.indexOf(":");
154
- const field = line.slice(0, i);
155
- const value = line[i + 1] === " " ? line.slice(i + 2) : line.slice(i + 1);
156
- if (field === "data") dataLines.push(value);
157
- else if (field === "event") ret.event = value;
158
- else if (field === "id") ret.id = value;
159
- else if (field === "retry") {
160
- const n = Number(value);
161
- if (!isNaN(n)) ret.retry = n;
162
- }
163
- }
164
- if (ignore) return;
165
- if (dataLines.length) ret.data = dataLines.join("\n");
166
- return parse(ret);
167
- }
package/src/metrics.ts DELETED
@@ -1,106 +0,0 @@
1
- import type { DataToObject, S2RequestOptions } from "./common";
2
- import { S2Error } from "./error";
3
- import {
4
- type AccountMetricsData,
5
- accountMetrics,
6
- type BasinMetricsData,
7
- basinMetrics,
8
- type StreamMetricsData,
9
- streamMetrics,
10
- } from "./generated";
11
- import type { Client } from "./generated/client/types.gen";
12
-
13
- export interface AccountMetricsArgs extends DataToObject<AccountMetricsData> {}
14
- export interface BasinMetricsArgs extends DataToObject<BasinMetricsData> {}
15
- export interface StreamMetricsArgs extends DataToObject<StreamMetricsData> {}
16
-
17
- export class S2Metrics {
18
- readonly client: Client;
19
-
20
- constructor(client: Client) {
21
- this.client = client;
22
- }
23
-
24
- /**
25
- * Account-level metrics.
26
- *
27
- * @param args.set Metric set to return
28
- * @param args.start Optional start timestamp (Unix seconds)
29
- * @param args.end Optional end timestamp (Unix seconds)
30
- * @param args.interval Optional aggregation interval for timeseries sets
31
- */
32
- public async account(args: AccountMetricsArgs, options?: S2RequestOptions) {
33
- const response = await accountMetrics({
34
- client: this.client,
35
- query: args,
36
- ...options,
37
- });
38
-
39
- if (response.error) {
40
- throw new S2Error({
41
- message: response.error.message,
42
- code: response.error.code ?? undefined,
43
- status: response.response.status,
44
- });
45
- }
46
-
47
- return response.data;
48
- }
49
-
50
- /**
51
- * Basin-level metrics.
52
- *
53
- * @param args.basin Basin name
54
- * @param args.set Metric set to return
55
- * @param args.start Optional start timestamp (Unix seconds)
56
- * @param args.end Optional end timestamp (Unix seconds)
57
- * @param args.interval Optional aggregation interval for timeseries sets
58
- */
59
- public async basin(args: BasinMetricsArgs, options?: S2RequestOptions) {
60
- const response = await basinMetrics({
61
- client: this.client,
62
- path: args,
63
- query: args,
64
- ...options,
65
- });
66
-
67
- if (response.error) {
68
- throw new S2Error({
69
- message: response.error.message,
70
- code: response.error.code ?? undefined,
71
- status: response.response.status,
72
- });
73
- }
74
-
75
- return response.data;
76
- }
77
-
78
- /**
79
- * Stream-level metrics.
80
- *
81
- * @param args.basin Basin name
82
- * @param args.stream Stream name
83
- * @param args.set Metric set to return
84
- * @param args.start Optional start timestamp (Unix seconds)
85
- * @param args.end Optional end timestamp (Unix seconds)
86
- * @param args.interval Optional aggregation interval for timeseries sets
87
- */
88
- public async stream(args: StreamMetricsArgs, options?: S2RequestOptions) {
89
- const response = await streamMetrics({
90
- client: this.client,
91
- path: args,
92
- query: args,
93
- ...options,
94
- });
95
-
96
- if (response.error) {
97
- throw new S2Error({
98
- message: response.error.message,
99
- code: response.error.code ?? undefined,
100
- status: response.response.status,
101
- });
102
- }
103
-
104
- return response.data;
105
- }
106
- }
package/src/s2.ts DELETED
@@ -1,65 +0,0 @@
1
- import { Redacted } from "effect";
2
- import { S2AccessTokens } from "./accessTokens";
3
- import { S2Basin } from "./basin";
4
- import { S2Basins } from "./basins";
5
- import type { S2ClientOptions } from "./common";
6
- import { createClient, createConfig } from "./generated/client";
7
- import type { Client } from "./generated/client/types.gen";
8
- import { S2Metrics } from "./metrics";
9
-
10
- const defaultBaseUrl = "https://aws.s2.dev/v1";
11
- const defaultMakeBasinBaseUrl = (basin: string) =>
12
- `https://${basin}.b.aws.s2.dev/v1`;
13
-
14
- /**
15
- * Top-level S2 SDK client.
16
- *
17
- * - Authenticates with an access token and exposes account-scoped helpers for basins, streams, access tokens and metrics.
18
- */
19
- export class S2 {
20
- private readonly accessToken: Redacted.Redacted;
21
- private readonly client: Client;
22
- private readonly makeBasinBaseUrl: (basin: string) => string;
23
-
24
- /**
25
- * Account-scoped basin management operations.
26
- *
27
- * - List, create, delete and reconfigure basins.
28
- */
29
- public readonly basins: S2Basins;
30
- /** Manage access tokens for the account (list, issue, revoke). */
31
- public readonly accessTokens: S2AccessTokens;
32
- /** Account, basin and stream level metrics. */
33
- public readonly metrics: S2Metrics;
34
-
35
- /**
36
- * Create a new S2 client.
37
- *
38
- * @param options Access token configuration.
39
- */
40
- constructor(options: S2ClientOptions) {
41
- this.accessToken = Redacted.make(options.accessToken);
42
- this.client = createClient(
43
- createConfig({
44
- baseUrl: options.baseUrl ?? defaultBaseUrl,
45
- auth: () => Redacted.value(this.accessToken),
46
- }),
47
- );
48
- this.basins = new S2Basins(this.client);
49
- this.accessTokens = new S2AccessTokens(this.client);
50
- this.metrics = new S2Metrics(this.client);
51
- this.makeBasinBaseUrl = options.makeBasinBaseUrl ?? defaultMakeBasinBaseUrl;
52
- }
53
-
54
- /**
55
- * Create a basin-scoped client bound to a specific basin name.
56
- *
57
- * @param name Basin name.
58
- */
59
- public basin(name: string) {
60
- return new S2Basin(name, {
61
- accessToken: this.accessToken,
62
- baseUrl: this.makeBasinBaseUrl(name),
63
- });
64
- }
65
- }