@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.
- package/LICENSE +201 -0
- package/README.md +1 -2
- package/dist/accessTokens.d.ts +37 -0
- package/dist/accessTokens.d.ts.map +1 -0
- package/dist/accessTokens.js +74 -0
- package/dist/accessTokens.js.map +1 -0
- package/dist/basin.d.ts +26 -0
- package/dist/basin.d.ts.map +1 -0
- package/dist/basin.js +34 -0
- package/dist/basin.js.map +1 -0
- package/dist/basins.d.ts +53 -0
- package/dist/basins.d.ts.map +1 -0
- package/dist/basins.js +115 -0
- package/dist/basins.js.map +1 -0
- package/dist/common.d.ts +44 -0
- package/dist/common.d.ts.map +1 -0
- package/dist/common.js +2 -0
- package/dist/common.js.map +1 -0
- package/dist/error.d.ts +28 -0
- package/dist/error.d.ts.map +1 -0
- package/dist/error.js +43 -0
- package/dist/error.js.map +1 -0
- package/dist/generated/client/client.gen.d.ts +3 -0
- package/dist/generated/client/client.gen.d.ts.map +1 -0
- package/dist/generated/client/client.gen.js +205 -0
- package/dist/generated/client/client.gen.js.map +1 -0
- package/dist/generated/client/index.d.ts +9 -0
- package/dist/generated/client/index.d.ts.map +1 -0
- package/dist/generated/client/index.js +7 -0
- package/dist/generated/client/index.js.map +1 -0
- package/dist/generated/client/types.gen.d.ts +125 -0
- package/dist/generated/client/types.gen.d.ts.map +1 -0
- package/dist/generated/client/types.gen.js +3 -0
- package/dist/generated/client/types.gen.js.map +1 -0
- package/dist/generated/client/utils.gen.d.ts +34 -0
- package/dist/generated/client/utils.gen.d.ts.map +1 -0
- package/dist/generated/client/utils.gen.js +231 -0
- package/dist/generated/client/utils.gen.js.map +1 -0
- package/{src/generated/client.gen.ts → dist/generated/client.gen.d.ts} +3 -8
- package/dist/generated/client.gen.d.ts.map +1 -0
- package/dist/generated/client.gen.js +6 -0
- package/dist/generated/client.gen.js.map +1 -0
- package/dist/generated/core/auth.gen.d.ts +19 -0
- package/dist/generated/core/auth.gen.d.ts.map +1 -0
- package/dist/generated/core/auth.gen.js +15 -0
- package/dist/generated/core/auth.gen.js.map +1 -0
- package/dist/generated/core/bodySerializer.gen.d.ts +18 -0
- package/dist/generated/core/bodySerializer.gen.d.ts.map +1 -0
- package/dist/generated/core/bodySerializer.gen.js +58 -0
- package/dist/generated/core/bodySerializer.gen.js.map +1 -0
- package/dist/generated/core/params.gen.d.ts +34 -0
- package/dist/generated/core/params.gen.d.ts.map +1 -0
- package/dist/generated/core/params.gen.js +89 -0
- package/dist/generated/core/params.gen.js.map +1 -0
- package/dist/generated/core/pathSerializer.gen.d.ts +34 -0
- package/dist/generated/core/pathSerializer.gen.d.ts.map +1 -0
- package/dist/generated/core/pathSerializer.gen.js +115 -0
- package/dist/generated/core/pathSerializer.gen.js.map +1 -0
- package/dist/generated/core/queryKeySerializer.gen.d.ts +19 -0
- package/dist/generated/core/queryKeySerializer.gen.d.ts.map +1 -0
- package/dist/generated/core/queryKeySerializer.gen.js +100 -0
- package/dist/generated/core/queryKeySerializer.gen.js.map +1 -0
- package/dist/generated/core/serverSentEvents.gen.d.ts +72 -0
- package/dist/generated/core/serverSentEvents.gen.d.ts.map +1 -0
- package/dist/generated/core/serverSentEvents.gen.js +136 -0
- package/dist/generated/core/serverSentEvents.gen.js.map +1 -0
- package/dist/generated/core/types.gen.d.ts +79 -0
- package/dist/generated/core/types.gen.d.ts.map +1 -0
- package/dist/generated/core/types.gen.js +3 -0
- package/dist/generated/core/types.gen.js.map +1 -0
- package/dist/generated/core/utils.gen.d.ts +20 -0
- package/dist/generated/core/utils.gen.d.ts.map +1 -0
- package/dist/generated/core/utils.gen.js +88 -0
- package/dist/generated/core/utils.gen.js.map +1 -0
- package/dist/generated/index.d.ts +3 -0
- package/dist/generated/index.d.ts.map +1 -0
- package/{src/generated/index.ts → dist/generated/index.js} +1 -2
- package/dist/generated/index.js.map +1 -0
- package/dist/generated/sdk.gen.d.ts +100 -0
- package/dist/generated/sdk.gen.d.ts.map +1 -0
- package/dist/generated/sdk.gen.js +350 -0
- package/dist/generated/sdk.gen.js.map +1 -0
- package/{src/generated/types.gen.ts → dist/generated/types.gen.d.ts} +1 -158
- package/dist/generated/types.gen.d.ts.map +1 -0
- package/dist/generated/types.gen.js +3 -0
- package/dist/generated/types.gen.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/event-stream.d.ts +26 -0
- package/dist/lib/event-stream.d.ts.map +1 -0
- package/dist/lib/event-stream.js +138 -0
- package/dist/lib/event-stream.js.map +1 -0
- package/dist/metrics.d.ts +44 -0
- package/dist/metrics.d.ts.map +1 -0
- package/dist/metrics.js +83 -0
- package/dist/metrics.js.map +1 -0
- package/dist/s2.d.ts +38 -0
- package/dist/s2.d.ts.map +1 -0
- package/dist/s2.js +56 -0
- package/dist/s2.js.map +1 -0
- package/dist/stream.d.ts +156 -0
- package/dist/stream.d.ts.map +1 -0
- package/dist/stream.js +598 -0
- package/dist/stream.js.map +1 -0
- package/dist/streams.d.ts +52 -0
- package/dist/streams.d.ts.map +1 -0
- package/dist/streams.js +114 -0
- package/dist/streams.js.map +1 -0
- package/dist/utils.d.ts +20 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +52 -0
- package/dist/utils.js.map +1 -0
- package/package.json +13 -4
- package/.changeset/README.md +0 -8
- package/.changeset/config.json +0 -11
- package/.claude/settings.local.json +0 -9
- package/.github/workflows/ci.yml +0 -59
- package/.github/workflows/publish.yml +0 -35
- package/CHANGELOG.md +0 -7
- package/biome.json +0 -30
- package/bun.lock +0 -598
- package/examples/append.ts +0 -84
- package/examples/kitchen-sink.ts +0 -73
- package/examples/read.ts +0 -30
- package/openapi-ts.config.ts +0 -7
- package/src/accessTokens.ts +0 -100
- package/src/basin.ts +0 -43
- package/src/basins.ts +0 -154
- package/src/common.ts +0 -45
- package/src/error.ts +0 -58
- package/src/generated/client/client.gen.ts +0 -268
- package/src/generated/client/index.ts +0 -26
- package/src/generated/client/types.gen.ts +0 -268
- package/src/generated/client/utils.gen.ts +0 -331
- package/src/generated/core/auth.gen.ts +0 -42
- package/src/generated/core/bodySerializer.gen.ts +0 -92
- package/src/generated/core/params.gen.ts +0 -153
- package/src/generated/core/pathSerializer.gen.ts +0 -181
- package/src/generated/core/queryKeySerializer.gen.ts +0 -136
- package/src/generated/core/serverSentEvents.gen.ts +0 -264
- package/src/generated/core/types.gen.ts +0 -118
- package/src/generated/core/utils.gen.ts +0 -143
- package/src/generated/sdk.gen.ts +0 -387
- package/src/index.ts +0 -66
- package/src/lib/event-stream.ts +0 -167
- package/src/metrics.ts +0 -106
- package/src/s2.ts +0 -65
- package/src/stream.ts +0 -791
- package/src/streams.ts +0 -156
- package/src/tests/appendSession.test.ts +0 -149
- package/src/tests/batcher-session.integration.test.ts +0 -80
- package/src/tests/batcher.test.ts +0 -216
- package/src/tests/index.test.ts +0 -7
- package/src/utils.ts +0 -80
- package/tsconfig.build.json +0 -10
- package/tsconfig.json +0 -31
package/src/lib/event-stream.ts
DELETED
|
@@ -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
|
-
}
|