@s2-dev/streamstore 0.3.17 → 0.5.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 (219) hide show
  1. package/README.md +53 -1
  2. package/bin/mcp-server.js +43469 -0
  3. package/bin/mcp-server.js.map +358 -0
  4. package/funcs/accountCreateBasin.d.ts +2 -1
  5. package/funcs/accountCreateBasin.d.ts.map +1 -1
  6. package/funcs/accountCreateBasin.js +11 -6
  7. package/funcs/accountCreateBasin.js.map +1 -1
  8. package/funcs/accountDeleteBasin.d.ts +2 -1
  9. package/funcs/accountDeleteBasin.d.ts.map +1 -1
  10. package/funcs/accountDeleteBasin.js +11 -6
  11. package/funcs/accountDeleteBasin.js.map +1 -1
  12. package/funcs/accountGetBasinConfig.d.ts +2 -1
  13. package/funcs/accountGetBasinConfig.d.ts.map +1 -1
  14. package/funcs/accountGetBasinConfig.js +11 -6
  15. package/funcs/accountGetBasinConfig.js.map +1 -1
  16. package/funcs/accountListBasins.d.ts +2 -1
  17. package/funcs/accountListBasins.d.ts.map +1 -1
  18. package/funcs/accountListBasins.js +22 -12
  19. package/funcs/accountListBasins.js.map +1 -1
  20. package/funcs/accountReconfigureBasin.d.ts +2 -1
  21. package/funcs/accountReconfigureBasin.d.ts.map +1 -1
  22. package/funcs/accountReconfigureBasin.js +11 -6
  23. package/funcs/accountReconfigureBasin.js.map +1 -1
  24. package/funcs/basinCreateStream.d.ts +2 -1
  25. package/funcs/basinCreateStream.d.ts.map +1 -1
  26. package/funcs/basinCreateStream.js +11 -6
  27. package/funcs/basinCreateStream.js.map +1 -1
  28. package/funcs/basinDeleteStream.d.ts +2 -1
  29. package/funcs/basinDeleteStream.d.ts.map +1 -1
  30. package/funcs/basinDeleteStream.js +11 -6
  31. package/funcs/basinDeleteStream.js.map +1 -1
  32. package/funcs/basinGetStreamConfig.d.ts +2 -1
  33. package/funcs/basinGetStreamConfig.d.ts.map +1 -1
  34. package/funcs/basinGetStreamConfig.js +11 -6
  35. package/funcs/basinGetStreamConfig.js.map +1 -1
  36. package/funcs/basinListStreams.d.ts +2 -1
  37. package/funcs/basinListStreams.d.ts.map +1 -1
  38. package/funcs/basinListStreams.js +22 -12
  39. package/funcs/basinListStreams.js.map +1 -1
  40. package/funcs/basinReconfigureStream.d.ts +2 -1
  41. package/funcs/basinReconfigureStream.d.ts.map +1 -1
  42. package/funcs/basinReconfigureStream.js +11 -6
  43. package/funcs/basinReconfigureStream.js.map +1 -1
  44. package/funcs/streamAppend.d.ts +2 -1
  45. package/funcs/streamAppend.d.ts.map +1 -1
  46. package/funcs/streamAppend.js +11 -6
  47. package/funcs/streamAppend.js.map +1 -1
  48. package/funcs/streamCheckTail.d.ts +2 -1
  49. package/funcs/streamCheckTail.d.ts.map +1 -1
  50. package/funcs/streamCheckTail.js +11 -6
  51. package/funcs/streamCheckTail.js.map +1 -1
  52. package/funcs/streamRead.d.ts +2 -1
  53. package/funcs/streamRead.d.ts.map +1 -1
  54. package/funcs/streamRead.js +11 -6
  55. package/funcs/streamRead.js.map +1 -1
  56. package/hooks/types.d.ts +1 -0
  57. package/hooks/types.d.ts.map +1 -1
  58. package/jsr.json +1 -1
  59. package/lib/config.d.ts +6 -6
  60. package/lib/config.d.ts.map +1 -1
  61. package/lib/config.js +3 -3
  62. package/lib/config.js.map +1 -1
  63. package/lib/files.js.map +1 -1
  64. package/lib/primitives.d.ts +3 -0
  65. package/lib/primitives.d.ts.map +1 -1
  66. package/lib/primitives.js +7 -0
  67. package/lib/primitives.js.map +1 -1
  68. package/lib/sdks.d.ts +1 -1
  69. package/lib/sdks.d.ts.map +1 -1
  70. package/lib/security.d.ts.map +1 -1
  71. package/lib/security.js.map +1 -1
  72. package/mcp-server/build.d.mts.map +1 -0
  73. package/mcp-server/build.mjs +14 -0
  74. package/mcp-server/build.mjs.map +1 -0
  75. package/mcp-server/cli/start/command.d.ts +2 -0
  76. package/mcp-server/cli/start/command.d.ts.map +1 -0
  77. package/mcp-server/cli/start/command.js +129 -0
  78. package/mcp-server/cli/start/command.js.map +1 -0
  79. package/mcp-server/cli/start/impl.d.ts +17 -0
  80. package/mcp-server/cli/start/impl.d.ts.map +1 -0
  81. package/mcp-server/cli/start/impl.js +102 -0
  82. package/mcp-server/cli/start/impl.js.map +1 -0
  83. package/mcp-server/cli.d.ts +6 -0
  84. package/mcp-server/cli.d.ts.map +1 -0
  85. package/mcp-server/cli.js +10 -0
  86. package/mcp-server/cli.js.map +1 -0
  87. package/mcp-server/console-logger.d.ts +7 -0
  88. package/mcp-server/console-logger.d.ts.map +1 -0
  89. package/mcp-server/console-logger.js +59 -0
  90. package/mcp-server/console-logger.js.map +1 -0
  91. package/mcp-server/mcp-server.d.ts +2 -0
  92. package/mcp-server/mcp-server.d.ts.map +1 -0
  93. package/mcp-server/mcp-server.js +29 -0
  94. package/mcp-server/mcp-server.js.map +1 -0
  95. package/mcp-server/resources.d.ts +27 -0
  96. package/mcp-server/resources.d.ts.map +1 -0
  97. package/mcp-server/resources.js +51 -0
  98. package/mcp-server/resources.js.map +1 -0
  99. package/mcp-server/scopes.d.ts +3 -0
  100. package/mcp-server/scopes.d.ts.map +1 -0
  101. package/mcp-server/scopes.js +11 -0
  102. package/mcp-server/scopes.js.map +1 -0
  103. package/mcp-server/server.d.ts +12 -0
  104. package/mcp-server/server.d.ts.map +1 -0
  105. package/mcp-server/server.js +51 -0
  106. package/mcp-server/server.js.map +1 -0
  107. package/mcp-server/shared.d.ts +7 -0
  108. package/mcp-server/shared.d.ts.map +1 -0
  109. package/mcp-server/shared.js +98 -0
  110. package/mcp-server/shared.js.map +1 -0
  111. package/mcp-server/tools/accountCreateBasin.d.ts +8 -0
  112. package/mcp-server/tools/accountCreateBasin.d.ts.map +1 -0
  113. package/mcp-server/tools/accountCreateBasin.js +63 -0
  114. package/mcp-server/tools/accountCreateBasin.js.map +1 -0
  115. package/mcp-server/tools/accountDeleteBasin.d.ts +8 -0
  116. package/mcp-server/tools/accountDeleteBasin.d.ts.map +1 -0
  117. package/mcp-server/tools/accountDeleteBasin.js +62 -0
  118. package/mcp-server/tools/accountDeleteBasin.js.map +1 -0
  119. package/mcp-server/tools/accountGetBasinConfig.d.ts +8 -0
  120. package/mcp-server/tools/accountGetBasinConfig.d.ts.map +1 -0
  121. package/mcp-server/tools/accountGetBasinConfig.js +63 -0
  122. package/mcp-server/tools/accountGetBasinConfig.js.map +1 -0
  123. package/mcp-server/tools/accountListBasins.d.ts +8 -0
  124. package/mcp-server/tools/accountListBasins.d.ts.map +1 -0
  125. package/mcp-server/tools/accountListBasins.js +63 -0
  126. package/mcp-server/tools/accountListBasins.js.map +1 -0
  127. package/mcp-server/tools/accountReconfigureBasin.d.ts +8 -0
  128. package/mcp-server/tools/accountReconfigureBasin.d.ts.map +1 -0
  129. package/mcp-server/tools/accountReconfigureBasin.js +63 -0
  130. package/mcp-server/tools/accountReconfigureBasin.js.map +1 -0
  131. package/mcp-server/tools/basinCreateStream.d.ts +8 -0
  132. package/mcp-server/tools/basinCreateStream.d.ts.map +1 -0
  133. package/mcp-server/tools/basinCreateStream.js +63 -0
  134. package/mcp-server/tools/basinCreateStream.js.map +1 -0
  135. package/mcp-server/tools/basinDeleteStream.d.ts +8 -0
  136. package/mcp-server/tools/basinDeleteStream.d.ts.map +1 -0
  137. package/mcp-server/tools/basinDeleteStream.js +62 -0
  138. package/mcp-server/tools/basinDeleteStream.js.map +1 -0
  139. package/mcp-server/tools/basinGetStreamConfig.d.ts +8 -0
  140. package/mcp-server/tools/basinGetStreamConfig.d.ts.map +1 -0
  141. package/mcp-server/tools/basinGetStreamConfig.js +63 -0
  142. package/mcp-server/tools/basinGetStreamConfig.js.map +1 -0
  143. package/mcp-server/tools/basinListStreams.d.ts +8 -0
  144. package/mcp-server/tools/basinListStreams.d.ts.map +1 -0
  145. package/mcp-server/tools/basinListStreams.js +63 -0
  146. package/mcp-server/tools/basinListStreams.js.map +1 -0
  147. package/mcp-server/tools/basinReconfigureStream.d.ts +8 -0
  148. package/mcp-server/tools/basinReconfigureStream.d.ts.map +1 -0
  149. package/mcp-server/tools/basinReconfigureStream.js +63 -0
  150. package/mcp-server/tools/basinReconfigureStream.js.map +1 -0
  151. package/mcp-server/tools/streamAppend.d.ts +8 -0
  152. package/mcp-server/tools/streamAppend.d.ts.map +1 -0
  153. package/mcp-server/tools/streamAppend.js +65 -0
  154. package/mcp-server/tools/streamAppend.js.map +1 -0
  155. package/mcp-server/tools/streamCheckTail.d.ts +8 -0
  156. package/mcp-server/tools/streamCheckTail.d.ts.map +1 -0
  157. package/mcp-server/tools/streamCheckTail.js +65 -0
  158. package/mcp-server/tools/streamCheckTail.js.map +1 -0
  159. package/mcp-server/tools/streamRead.d.ts +8 -0
  160. package/mcp-server/tools/streamRead.d.ts.map +1 -0
  161. package/mcp-server/tools/streamRead.js +65 -0
  162. package/mcp-server/tools/streamRead.js.map +1 -0
  163. package/mcp-server/tools.d.ts +25 -0
  164. package/mcp-server/tools.d.ts.map +1 -0
  165. package/mcp-server/tools.js +74 -0
  166. package/mcp-server/tools.js.map +1 -0
  167. package/models/components/endpoints.d.ts +67 -0
  168. package/models/components/endpoints.d.ts.map +1 -0
  169. package/models/components/endpoints.js +126 -0
  170. package/models/components/endpoints.js.map +1 -0
  171. package/package.json +17 -4
  172. package/src/funcs/accountCreateBasin.ts +38 -7
  173. package/src/funcs/accountDeleteBasin.ts +39 -7
  174. package/src/funcs/accountGetBasinConfig.ts +38 -7
  175. package/src/funcs/accountListBasins.ts +53 -10
  176. package/src/funcs/accountReconfigureBasin.ts +38 -7
  177. package/src/funcs/basinCreateStream.ts +38 -7
  178. package/src/funcs/basinDeleteStream.ts +39 -7
  179. package/src/funcs/basinGetStreamConfig.ts +38 -7
  180. package/src/funcs/basinListStreams.ts +53 -10
  181. package/src/funcs/basinReconfigureStream.ts +38 -7
  182. package/src/funcs/streamAppend.ts +38 -7
  183. package/src/funcs/streamCheckTail.ts +38 -7
  184. package/src/funcs/streamRead.ts +38 -7
  185. package/src/hooks/types.ts +1 -0
  186. package/src/lib/config.ts +6 -7
  187. package/src/lib/files.ts +1 -1
  188. package/src/lib/primitives.ts +14 -0
  189. package/src/lib/sdks.ts +1 -1
  190. package/src/lib/security.ts +0 -1
  191. package/src/mcp-server/cli/start/command.ts +98 -0
  192. package/src/mcp-server/cli/start/impl.ts +131 -0
  193. package/src/mcp-server/cli.ts +13 -0
  194. package/src/mcp-server/console-logger.ts +71 -0
  195. package/src/mcp-server/mcp-server.ts +26 -0
  196. package/src/mcp-server/resources.ts +96 -0
  197. package/src/mcp-server/scopes.ts +10 -0
  198. package/src/mcp-server/server.ts +60 -0
  199. package/src/mcp-server/shared.ts +75 -0
  200. package/src/mcp-server/tools/accountCreateBasin.ts +36 -0
  201. package/src/mcp-server/tools/accountDeleteBasin.ts +34 -0
  202. package/src/mcp-server/tools/accountGetBasinConfig.ts +36 -0
  203. package/src/mcp-server/tools/accountListBasins.ts +36 -0
  204. package/src/mcp-server/tools/accountReconfigureBasin.ts +36 -0
  205. package/src/mcp-server/tools/basinCreateStream.ts +36 -0
  206. package/src/mcp-server/tools/basinDeleteStream.ts +34 -0
  207. package/src/mcp-server/tools/basinGetStreamConfig.ts +36 -0
  208. package/src/mcp-server/tools/basinListStreams.ts +36 -0
  209. package/src/mcp-server/tools/basinReconfigureStream.ts +36 -0
  210. package/src/mcp-server/tools/streamAppend.ts +38 -0
  211. package/src/mcp-server/tools/streamCheckTail.ts +38 -0
  212. package/src/mcp-server/tools/streamRead.ts +38 -0
  213. package/src/mcp-server/tools.ts +116 -0
  214. package/src/models/components/endpoints.ts +159 -0
  215. package/src/types/async.ts +68 -0
  216. package/types/async.d.ts +23 -0
  217. package/types/async.d.ts.map +1 -0
  218. package/types/async.js +44 -0
  219. package/types/async.js.map +1 -0
@@ -0,0 +1,71 @@
1
+ /*
2
+ * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
3
+ */
4
+
5
+ export const consoleLoggerLevels = [
6
+ "debug",
7
+ "warning",
8
+ "info",
9
+ "error",
10
+ ] as const;
11
+
12
+ export type ConsoleLoggerLevel = (typeof consoleLoggerLevels)[number];
13
+
14
+ export type ConsoleLogger = {
15
+ [key in ConsoleLoggerLevel]: (
16
+ message: string,
17
+ data?: Record<string, unknown>,
18
+ ) => void;
19
+ };
20
+
21
+ export function createConsoleLogger(level: ConsoleLoggerLevel): ConsoleLogger {
22
+ const min = consoleLoggerLevels.indexOf(level);
23
+ const noop = () => {};
24
+
25
+ const logger: ConsoleLogger = {
26
+ debug: noop,
27
+ warning: noop,
28
+ info: noop,
29
+ error: noop,
30
+ };
31
+
32
+ return consoleLoggerLevels.reduce((logger, level, i) => {
33
+ if (i < min) {
34
+ return logger;
35
+ }
36
+
37
+ logger[level] = log.bind(null, level);
38
+
39
+ return logger;
40
+ }, logger);
41
+ }
42
+
43
+ function log(
44
+ level: ConsoleLoggerLevel,
45
+ message: string,
46
+ data?: Record<string, unknown>,
47
+ ) {
48
+ let line = "";
49
+ const allData = [{ msg: message, l: level }, data];
50
+
51
+ for (const ctx of allData) {
52
+ for (const [key, value] of Object.entries(ctx || {})) {
53
+ if (value == null) {
54
+ line += ` ${key}=<${value}>`;
55
+ } else if (typeof value === "function") {
56
+ line += ` ${key}=<function>`;
57
+ } else if (typeof value === "symbol") {
58
+ line += ` ${key}=${value.toString()}`;
59
+ } else if (typeof value === "string") {
60
+ const v = value.search(/\s/g) >= 0 ? JSON.stringify(value) : value;
61
+ line += ` ${key}=${v}`;
62
+ } else if (typeof value !== "object") {
63
+ line += ` ${key}=${value}`;
64
+ } else {
65
+ line += ` ${key}="${JSON.stringify(value)}"`;
66
+ }
67
+ }
68
+ }
69
+
70
+ console.error(line);
71
+ }
@@ -0,0 +1,26 @@
1
+ /*
2
+ * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
3
+ */
4
+
5
+ import { buildApplication, buildRouteMap, run } from "@stricli/core";
6
+ import process from "node:process";
7
+ import { buildContext } from "./cli.js";
8
+ import { startCommand } from "./cli/start/command.js";
9
+
10
+ const routes = buildRouteMap({
11
+ routes: {
12
+ start: startCommand,
13
+ },
14
+ docs: {
15
+ brief: "MCP server CLI",
16
+ },
17
+ });
18
+
19
+ export const app = buildApplication(routes, {
20
+ name: "mcp",
21
+ versionInfo: {
22
+ currentVersion: "0.5.0",
23
+ },
24
+ });
25
+
26
+ run(app, process.argv.slice(2), buildContext(process));
@@ -0,0 +1,96 @@
1
+ /*
2
+ * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
3
+ */
4
+
5
+ import { ResourceTemplate } from "@modelcontextprotocol/sdk/server/mcp.js";
6
+ import { RequestHandlerExtra } from "@modelcontextprotocol/sdk/shared/protocol.js";
7
+ import { Variables } from "@modelcontextprotocol/sdk/shared/uriTemplate.js";
8
+ import { ReadResourceResult } from "@modelcontextprotocol/sdk/types.js";
9
+ import { S2Core } from "../core.js";
10
+ import { Result } from "../types/fp.js";
11
+ import { MCPScope } from "./scopes.js";
12
+ import { isAsyncIterable, isBinaryData, valueToBase64 } from "./shared.js";
13
+
14
+ export type ReadResourceCallback = (
15
+ client: S2Core,
16
+ uri: URL,
17
+ extra: RequestHandlerExtra,
18
+ ) => ReadResourceResult | Promise<ReadResourceResult>;
19
+
20
+ export type ResourceDefinition = {
21
+ name: string;
22
+ description: string;
23
+ scopes?: MCPScope[];
24
+ resource: string;
25
+ read: ReadResourceCallback;
26
+ };
27
+
28
+ export type ReadResourceTemplateCallback = (
29
+ client: S2Core,
30
+ uri: URL,
31
+ vars: Variables,
32
+ extra: RequestHandlerExtra,
33
+ ) => ReadResourceResult | Promise<ReadResourceResult>;
34
+
35
+ export type ResourceTemplateDefinition = {
36
+ name: string;
37
+ description: string;
38
+ scopes?: MCPScope[];
39
+ resource: ResourceTemplate;
40
+ read: ReadResourceTemplateCallback;
41
+ };
42
+
43
+ export async function formatResult(
44
+ result: Result<unknown, Error>,
45
+ uri: URL,
46
+ init: { response?: Response | undefined },
47
+ ): Promise<ReadResourceResult> {
48
+ if (!result.ok) {
49
+ throw result.error;
50
+ }
51
+
52
+ const { value } = result;
53
+ if (typeof value === "undefined") {
54
+ return { contents: [] };
55
+ }
56
+
57
+ const { response } = init;
58
+ const mimeType = response?.headers.get("content-type") ?? "";
59
+ let contents: ReadResourceResult["contents"] = [];
60
+
61
+ if (mimeType.search(/\bjson\b/g)) {
62
+ contents = [{ uri: uri.toString(), mimeType, text: JSON.stringify(value) }];
63
+ } else if (
64
+ mimeType.startsWith("text/event-stream")
65
+ && isAsyncIterable(value)
66
+ ) {
67
+ contents = [
68
+ {
69
+ uri: uri.toString(),
70
+ mimeType: "application/json",
71
+ text: await stringifySSEToJSON(value),
72
+ },
73
+ ];
74
+ } else if (mimeType.startsWith("text/") && typeof value === "string") {
75
+ contents = [{ uri: uri.toString(), mimeType, text: value }];
76
+ } else if (isBinaryData(value)) {
77
+ const blob = await valueToBase64(value);
78
+ contents = blob == null ? [] : [{ uri: uri.toString(), blob, mimeType }];
79
+ } else {
80
+ throw new Error(`Unsupported content type: "${mimeType}"`);
81
+ }
82
+
83
+ return { contents };
84
+ }
85
+
86
+ async function stringifySSEToJSON(
87
+ value: AsyncIterable<unknown>,
88
+ ): Promise<string> {
89
+ const payloads = [];
90
+
91
+ for await (const chunk of value) {
92
+ payloads.push(chunk);
93
+ }
94
+
95
+ return JSON.stringify(payloads);
96
+ }
@@ -0,0 +1,10 @@
1
+ /*
2
+ * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
3
+ */
4
+
5
+ export const mcpScopes = [
6
+ "read",
7
+ "write",
8
+ ] as const;
9
+
10
+ export type MCPScope = (typeof mcpScopes)[number];
@@ -0,0 +1,60 @@
1
+ /*
2
+ * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
3
+ */
4
+
5
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
6
+ import { S2Core } from "../core.js";
7
+ import { SDKOptions } from "../lib/config.js";
8
+ import type { ConsoleLogger } from "./console-logger.js";
9
+ import { MCPScope, mcpScopes } from "./scopes.js";
10
+ import { createRegisterTool } from "./tools.js";
11
+ import { tool$accountCreateBasin } from "./tools/accountCreateBasin.js";
12
+ import { tool$accountDeleteBasin } from "./tools/accountDeleteBasin.js";
13
+ import { tool$accountGetBasinConfig } from "./tools/accountGetBasinConfig.js";
14
+ import { tool$accountListBasins } from "./tools/accountListBasins.js";
15
+ import { tool$accountReconfigureBasin } from "./tools/accountReconfigureBasin.js";
16
+ import { tool$basinCreateStream } from "./tools/basinCreateStream.js";
17
+ import { tool$basinDeleteStream } from "./tools/basinDeleteStream.js";
18
+ import { tool$basinGetStreamConfig } from "./tools/basinGetStreamConfig.js";
19
+ import { tool$basinListStreams } from "./tools/basinListStreams.js";
20
+ import { tool$basinReconfigureStream } from "./tools/basinReconfigureStream.js";
21
+ import { tool$streamAppend } from "./tools/streamAppend.js";
22
+ import { tool$streamCheckTail } from "./tools/streamCheckTail.js";
23
+ import { tool$streamRead } from "./tools/streamRead.js";
24
+
25
+ export function createMCPServer(deps: {
26
+ logger: ConsoleLogger;
27
+ scopes?: MCPScope[] | undefined;
28
+ serverURL?: string | undefined;
29
+ bearerAuth?: SDKOptions["bearerAuth"] | undefined;
30
+ serverIdx?: SDKOptions["serverIdx"] | undefined;
31
+ }) {
32
+ const server = new McpServer({
33
+ name: "S2",
34
+ version: "0.5.0",
35
+ });
36
+
37
+ const client = new S2Core({
38
+ bearerAuth: deps.bearerAuth,
39
+ serverURL: deps.serverURL,
40
+ serverIdx: deps.serverIdx,
41
+ });
42
+ const scopes = new Set(deps.scopes ?? mcpScopes);
43
+ const tool = createRegisterTool(deps.logger, server, client, scopes);
44
+
45
+ tool(tool$accountListBasins);
46
+ tool(tool$accountGetBasinConfig);
47
+ tool(tool$accountCreateBasin);
48
+ tool(tool$accountDeleteBasin);
49
+ tool(tool$accountReconfigureBasin);
50
+ tool(tool$basinListStreams);
51
+ tool(tool$basinGetStreamConfig);
52
+ tool(tool$basinCreateStream);
53
+ tool(tool$basinDeleteStream);
54
+ tool(tool$basinReconfigureStream);
55
+ tool(tool$streamRead);
56
+ tool(tool$streamAppend);
57
+ tool(tool$streamCheckTail);
58
+
59
+ return server;
60
+ }
@@ -0,0 +1,75 @@
1
+ /*
2
+ * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
3
+ */
4
+
5
+ import * as z from "zod";
6
+ import { bytesToBase64 } from "../lib/base64.js";
7
+
8
+ type BinaryData =
9
+ | Uint8Array
10
+ | ArrayBuffer
11
+ | Blob
12
+ | ReadableStream
13
+ | Response
14
+ | string;
15
+
16
+ export async function consumeStream(
17
+ stream: ReadableStream<Uint8Array>,
18
+ ): Promise<Uint8Array> {
19
+ const reader = stream.getReader();
20
+ const chunks: Uint8Array[] = [];
21
+
22
+ try {
23
+ while (true) {
24
+ const { done, value } = await reader.read();
25
+ if (value != null) chunks.push(value);
26
+ if (done) break;
27
+ }
28
+ } finally {
29
+ reader.releaseLock();
30
+ }
31
+
32
+ return new Uint8Array(await new Blob(chunks).arrayBuffer());
33
+ }
34
+
35
+ export function isAsyncIterable(
36
+ value: unknown,
37
+ ): value is AsyncIterable<string> {
38
+ return (
39
+ typeof value === "object" && value != null && Symbol.asyncIterator in value
40
+ );
41
+ }
42
+
43
+ export function isBinaryData(value: unknown): value is BinaryData {
44
+ return (
45
+ value instanceof Uint8Array
46
+ || value instanceof ArrayBuffer
47
+ || value instanceof Blob
48
+ || value instanceof ReadableStream
49
+ || value instanceof Response
50
+ || typeof value === "string"
51
+ );
52
+ }
53
+
54
+ const base64Schema = z.string().base64();
55
+
56
+ export async function valueToBase64(
57
+ value: BinaryData | null | undefined,
58
+ ): Promise<string | null> {
59
+ if (value == null) {
60
+ return null;
61
+ } else if (value instanceof Uint8Array) {
62
+ return bytesToBase64(value);
63
+ } else if (value instanceof ArrayBuffer) {
64
+ return bytesToBase64(new Uint8Array(value));
65
+ } else if (value instanceof Response || value instanceof Blob) {
66
+ return bytesToBase64(new Uint8Array(await value.arrayBuffer()));
67
+ } else if (value instanceof ReadableStream) {
68
+ return bytesToBase64(await consumeStream(value));
69
+ } else if (typeof value === "string") {
70
+ return base64Schema.parse(value);
71
+ } else {
72
+ value satisfies never;
73
+ throw new Error(`Unsupported image value type: ${typeof value}`);
74
+ }
75
+ }
@@ -0,0 +1,36 @@
1
+ /*
2
+ * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
3
+ */
4
+
5
+ import { accountCreateBasin } from "../../funcs/accountCreateBasin.js";
6
+ import * as operations from "../../models/operations/index.js";
7
+ import { formatResult, ToolDefinition } from "../tools.js";
8
+
9
+ const args = {
10
+ request: operations.CreateBasinRequest$inboundSchema,
11
+ };
12
+
13
+ export const tool$accountCreateBasin: ToolDefinition<typeof args> = {
14
+ name: "account_create-basin",
15
+ description: `Create a new basin.`,
16
+ scopes: ["write"],
17
+ args,
18
+ tool: async (client, args, ctx) => {
19
+ const [result, apiCall] = await accountCreateBasin(
20
+ client,
21
+ args.request,
22
+ { fetchOptions: { signal: ctx.signal } },
23
+ ).$inspect();
24
+
25
+ if (!result.ok) {
26
+ return {
27
+ content: [{ type: "text", text: result.error.message }],
28
+ isError: true,
29
+ };
30
+ }
31
+
32
+ const value = result.value;
33
+
34
+ return formatResult(value, apiCall);
35
+ },
36
+ };
@@ -0,0 +1,34 @@
1
+ /*
2
+ * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
3
+ */
4
+
5
+ import { accountDeleteBasin } from "../../funcs/accountDeleteBasin.js";
6
+ import * as operations from "../../models/operations/index.js";
7
+ import { formatResult, ToolDefinition } from "../tools.js";
8
+
9
+ const args = {
10
+ request: operations.DeleteBasinRequest$inboundSchema,
11
+ };
12
+
13
+ export const tool$accountDeleteBasin: ToolDefinition<typeof args> = {
14
+ name: "account_delete-basin",
15
+ description: `Delete a basin.`,
16
+ scopes: ["write"],
17
+ args,
18
+ tool: async (client, args, ctx) => {
19
+ const [result, apiCall] = await accountDeleteBasin(
20
+ client,
21
+ args.request,
22
+ { fetchOptions: { signal: ctx.signal } },
23
+ ).$inspect();
24
+
25
+ if (!result.ok) {
26
+ return {
27
+ content: [{ type: "text", text: result.error.message }],
28
+ isError: true,
29
+ };
30
+ }
31
+
32
+ return formatResult(void 0, apiCall);
33
+ },
34
+ };
@@ -0,0 +1,36 @@
1
+ /*
2
+ * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
3
+ */
4
+
5
+ import { accountGetBasinConfig } from "../../funcs/accountGetBasinConfig.js";
6
+ import * as operations from "../../models/operations/index.js";
7
+ import { formatResult, ToolDefinition } from "../tools.js";
8
+
9
+ const args = {
10
+ request: operations.GetBasinConfigRequest$inboundSchema,
11
+ };
12
+
13
+ export const tool$accountGetBasinConfig: ToolDefinition<typeof args> = {
14
+ name: "account_get-basin-config",
15
+ description: `Get basin configuration.`,
16
+ scopes: ["read"],
17
+ args,
18
+ tool: async (client, args, ctx) => {
19
+ const [result, apiCall] = await accountGetBasinConfig(
20
+ client,
21
+ args.request,
22
+ { fetchOptions: { signal: ctx.signal } },
23
+ ).$inspect();
24
+
25
+ if (!result.ok) {
26
+ return {
27
+ content: [{ type: "text", text: result.error.message }],
28
+ isError: true,
29
+ };
30
+ }
31
+
32
+ const value = result.value;
33
+
34
+ return formatResult(value, apiCall);
35
+ },
36
+ };
@@ -0,0 +1,36 @@
1
+ /*
2
+ * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
3
+ */
4
+
5
+ import { accountListBasins } from "../../funcs/accountListBasins.js";
6
+ import * as operations from "../../models/operations/index.js";
7
+ import { formatResult, ToolDefinition } from "../tools.js";
8
+
9
+ const args = {
10
+ request: operations.ListBasinsRequest$inboundSchema,
11
+ };
12
+
13
+ export const tool$accountListBasins: ToolDefinition<typeof args> = {
14
+ name: "account_list-basins",
15
+ description: `List basins.`,
16
+ scopes: ["read"],
17
+ args,
18
+ tool: async (client, args, ctx) => {
19
+ const [result, apiCall] = await accountListBasins(
20
+ client,
21
+ args.request,
22
+ { fetchOptions: { signal: ctx.signal } },
23
+ ).$inspect();
24
+
25
+ if (!result.ok) {
26
+ return {
27
+ content: [{ type: "text", text: result.error.message }],
28
+ isError: true,
29
+ };
30
+ }
31
+
32
+ const value = result.value.result;
33
+
34
+ return formatResult(value, apiCall);
35
+ },
36
+ };
@@ -0,0 +1,36 @@
1
+ /*
2
+ * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
3
+ */
4
+
5
+ import { accountReconfigureBasin } from "../../funcs/accountReconfigureBasin.js";
6
+ import * as operations from "../../models/operations/index.js";
7
+ import { formatResult, ToolDefinition } from "../tools.js";
8
+
9
+ const args = {
10
+ request: operations.ReconfigureBasinRequest$inboundSchema,
11
+ };
12
+
13
+ export const tool$accountReconfigureBasin: ToolDefinition<typeof args> = {
14
+ name: "account_reconfigure-basin",
15
+ description: `Update basin configuration.`,
16
+ scopes: ["write"],
17
+ args,
18
+ tool: async (client, args, ctx) => {
19
+ const [result, apiCall] = await accountReconfigureBasin(
20
+ client,
21
+ args.request,
22
+ { fetchOptions: { signal: ctx.signal } },
23
+ ).$inspect();
24
+
25
+ if (!result.ok) {
26
+ return {
27
+ content: [{ type: "text", text: result.error.message }],
28
+ isError: true,
29
+ };
30
+ }
31
+
32
+ const value = result.value;
33
+
34
+ return formatResult(value, apiCall);
35
+ },
36
+ };
@@ -0,0 +1,36 @@
1
+ /*
2
+ * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
3
+ */
4
+
5
+ import { basinCreateStream } from "../../funcs/basinCreateStream.js";
6
+ import * as operations from "../../models/operations/index.js";
7
+ import { formatResult, ToolDefinition } from "../tools.js";
8
+
9
+ const args = {
10
+ request: operations.CreateStreamRequest$inboundSchema,
11
+ };
12
+
13
+ export const tool$basinCreateStream: ToolDefinition<typeof args> = {
14
+ name: "basin_create-stream",
15
+ description: `Create a stream.`,
16
+ scopes: ["write"],
17
+ args,
18
+ tool: async (client, args, ctx) => {
19
+ const [result, apiCall] = await basinCreateStream(
20
+ client,
21
+ args.request,
22
+ { fetchOptions: { signal: ctx.signal } },
23
+ ).$inspect();
24
+
25
+ if (!result.ok) {
26
+ return {
27
+ content: [{ type: "text", text: result.error.message }],
28
+ isError: true,
29
+ };
30
+ }
31
+
32
+ const value = result.value;
33
+
34
+ return formatResult(value, apiCall);
35
+ },
36
+ };
@@ -0,0 +1,34 @@
1
+ /*
2
+ * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
3
+ */
4
+
5
+ import { basinDeleteStream } from "../../funcs/basinDeleteStream.js";
6
+ import * as operations from "../../models/operations/index.js";
7
+ import { formatResult, ToolDefinition } from "../tools.js";
8
+
9
+ const args = {
10
+ request: operations.DeleteStreamRequest$inboundSchema,
11
+ };
12
+
13
+ export const tool$basinDeleteStream: ToolDefinition<typeof args> = {
14
+ name: "basin_delete-stream",
15
+ description: `Delete a stream.`,
16
+ scopes: ["write"],
17
+ args,
18
+ tool: async (client, args, ctx) => {
19
+ const [result, apiCall] = await basinDeleteStream(
20
+ client,
21
+ args.request,
22
+ { fetchOptions: { signal: ctx.signal } },
23
+ ).$inspect();
24
+
25
+ if (!result.ok) {
26
+ return {
27
+ content: [{ type: "text", text: result.error.message }],
28
+ isError: true,
29
+ };
30
+ }
31
+
32
+ return formatResult(void 0, apiCall);
33
+ },
34
+ };
@@ -0,0 +1,36 @@
1
+ /*
2
+ * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
3
+ */
4
+
5
+ import { basinGetStreamConfig } from "../../funcs/basinGetStreamConfig.js";
6
+ import * as operations from "../../models/operations/index.js";
7
+ import { formatResult, ToolDefinition } from "../tools.js";
8
+
9
+ const args = {
10
+ request: operations.GetStreamConfigRequest$inboundSchema,
11
+ };
12
+
13
+ export const tool$basinGetStreamConfig: ToolDefinition<typeof args> = {
14
+ name: "basin_get-stream-config",
15
+ description: `Get stream configuration.`,
16
+ scopes: ["read"],
17
+ args,
18
+ tool: async (client, args, ctx) => {
19
+ const [result, apiCall] = await basinGetStreamConfig(
20
+ client,
21
+ args.request,
22
+ { fetchOptions: { signal: ctx.signal } },
23
+ ).$inspect();
24
+
25
+ if (!result.ok) {
26
+ return {
27
+ content: [{ type: "text", text: result.error.message }],
28
+ isError: true,
29
+ };
30
+ }
31
+
32
+ const value = result.value;
33
+
34
+ return formatResult(value, apiCall);
35
+ },
36
+ };
@@ -0,0 +1,36 @@
1
+ /*
2
+ * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
3
+ */
4
+
5
+ import { basinListStreams } from "../../funcs/basinListStreams.js";
6
+ import * as operations from "../../models/operations/index.js";
7
+ import { formatResult, ToolDefinition } from "../tools.js";
8
+
9
+ const args = {
10
+ request: operations.ListStreamsRequest$inboundSchema,
11
+ };
12
+
13
+ export const tool$basinListStreams: ToolDefinition<typeof args> = {
14
+ name: "basin_list-streams",
15
+ description: `List Streams.`,
16
+ scopes: ["read"],
17
+ args,
18
+ tool: async (client, args, ctx) => {
19
+ const [result, apiCall] = await basinListStreams(
20
+ client,
21
+ args.request,
22
+ { fetchOptions: { signal: ctx.signal } },
23
+ ).$inspect();
24
+
25
+ if (!result.ok) {
26
+ return {
27
+ content: [{ type: "text", text: result.error.message }],
28
+ isError: true,
29
+ };
30
+ }
31
+
32
+ const value = result.value.result;
33
+
34
+ return formatResult(value, apiCall);
35
+ },
36
+ };