@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
@@ -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
- }