@s2-dev/streamstore 0.8.2 → 0.9.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 (110) hide show
  1. package/README.md +40 -7
  2. package/bin/mcp-server.js +50 -12
  3. package/bin/mcp-server.js.map +16 -15
  4. package/dist/commonjs/hooks/types.d.ts +1 -1
  5. package/dist/commonjs/hooks/types.d.ts.map +1 -1
  6. package/dist/commonjs/lib/config.d.ts +3 -3
  7. package/dist/commonjs/lib/config.js +3 -3
  8. package/dist/commonjs/lib/security.d.ts +4 -3
  9. package/dist/commonjs/lib/security.d.ts.map +1 -1
  10. package/dist/commonjs/lib/security.js +6 -1
  11. package/dist/commonjs/lib/security.js.map +1 -1
  12. package/dist/commonjs/mcp-server/extensions.d.ts +2 -0
  13. package/dist/commonjs/mcp-server/extensions.d.ts.map +1 -1
  14. package/dist/commonjs/mcp-server/mcp-server.js +1 -1
  15. package/dist/commonjs/mcp-server/prompts.d.ts +26 -0
  16. package/dist/commonjs/mcp-server/prompts.d.ts.map +1 -0
  17. package/dist/commonjs/mcp-server/prompts.js +47 -0
  18. package/dist/commonjs/mcp-server/prompts.js.map +1 -0
  19. package/dist/commonjs/mcp-server/resources.d.ts.map +1 -1
  20. package/dist/commonjs/mcp-server/resources.js +1 -0
  21. package/dist/commonjs/mcp-server/resources.js.map +1 -1
  22. package/dist/commonjs/mcp-server/server.d.ts.map +1 -1
  23. package/dist/commonjs/mcp-server/server.js +4 -2
  24. package/dist/commonjs/mcp-server/server.js.map +1 -1
  25. package/dist/commonjs/mcp-server/tools.d.ts.map +1 -1
  26. package/dist/commonjs/mcp-server/tools.js +1 -0
  27. package/dist/commonjs/mcp-server/tools.js.map +1 -1
  28. package/dist/commonjs/models/components/appendrecord.d.ts +10 -0
  29. package/dist/commonjs/models/components/appendrecord.d.ts.map +1 -1
  30. package/dist/commonjs/models/components/appendrecord.js +2 -0
  31. package/dist/commonjs/models/components/appendrecord.js.map +1 -1
  32. package/dist/commonjs/models/components/output.d.ts +18 -13
  33. package/dist/commonjs/models/components/output.d.ts.map +1 -1
  34. package/dist/commonjs/models/components/output.js.map +1 -1
  35. package/dist/commonjs/models/components/readresponse.d.ts +4 -1
  36. package/dist/commonjs/models/components/readresponse.d.ts.map +1 -1
  37. package/dist/commonjs/models/components/readresponse.js.map +1 -1
  38. package/dist/commonjs/models/components/sequencedrecord.d.ts +6 -1
  39. package/dist/commonjs/models/components/sequencedrecord.d.ts.map +1 -1
  40. package/dist/commonjs/models/components/sequencedrecord.js +2 -0
  41. package/dist/commonjs/models/components/sequencedrecord.js.map +1 -1
  42. package/dist/commonjs/models/components/streamconfig.d.ts +9 -0
  43. package/dist/commonjs/models/components/streamconfig.d.ts.map +1 -1
  44. package/dist/commonjs/models/components/streamconfig.js +4 -0
  45. package/dist/commonjs/models/components/streamconfig.js.map +1 -1
  46. package/dist/commonjs/models/operations/read.d.ts +10 -2
  47. package/dist/commonjs/models/operations/read.d.ts.map +1 -1
  48. package/dist/commonjs/models/operations/read.js.map +1 -1
  49. package/dist/esm/hooks/types.d.ts +1 -1
  50. package/dist/esm/hooks/types.d.ts.map +1 -1
  51. package/dist/esm/lib/config.d.ts +3 -3
  52. package/dist/esm/lib/config.js +3 -3
  53. package/dist/esm/lib/security.d.ts +4 -3
  54. package/dist/esm/lib/security.d.ts.map +1 -1
  55. package/dist/esm/lib/security.js +6 -1
  56. package/dist/esm/lib/security.js.map +1 -1
  57. package/dist/esm/mcp-server/extensions.d.ts +2 -0
  58. package/dist/esm/mcp-server/extensions.d.ts.map +1 -1
  59. package/dist/esm/mcp-server/mcp-server.js +1 -1
  60. package/dist/esm/mcp-server/prompts.d.ts +26 -0
  61. package/dist/esm/mcp-server/prompts.d.ts.map +1 -0
  62. package/dist/esm/mcp-server/prompts.js +43 -0
  63. package/dist/esm/mcp-server/prompts.js.map +1 -0
  64. package/dist/esm/mcp-server/resources.d.ts.map +1 -1
  65. package/dist/esm/mcp-server/resources.js +1 -0
  66. package/dist/esm/mcp-server/resources.js.map +1 -1
  67. package/dist/esm/mcp-server/server.d.ts.map +1 -1
  68. package/dist/esm/mcp-server/server.js +4 -2
  69. package/dist/esm/mcp-server/server.js.map +1 -1
  70. package/dist/esm/mcp-server/tools.d.ts.map +1 -1
  71. package/dist/esm/mcp-server/tools.js +1 -0
  72. package/dist/esm/mcp-server/tools.js.map +1 -1
  73. package/dist/esm/models/components/appendrecord.d.ts +10 -0
  74. package/dist/esm/models/components/appendrecord.d.ts.map +1 -1
  75. package/dist/esm/models/components/appendrecord.js +2 -0
  76. package/dist/esm/models/components/appendrecord.js.map +1 -1
  77. package/dist/esm/models/components/output.d.ts +18 -13
  78. package/dist/esm/models/components/output.d.ts.map +1 -1
  79. package/dist/esm/models/components/output.js.map +1 -1
  80. package/dist/esm/models/components/readresponse.d.ts +4 -1
  81. package/dist/esm/models/components/readresponse.d.ts.map +1 -1
  82. package/dist/esm/models/components/readresponse.js.map +1 -1
  83. package/dist/esm/models/components/sequencedrecord.d.ts +6 -1
  84. package/dist/esm/models/components/sequencedrecord.d.ts.map +1 -1
  85. package/dist/esm/models/components/sequencedrecord.js +2 -0
  86. package/dist/esm/models/components/sequencedrecord.js.map +1 -1
  87. package/dist/esm/models/components/streamconfig.d.ts +9 -0
  88. package/dist/esm/models/components/streamconfig.d.ts.map +1 -1
  89. package/dist/esm/models/components/streamconfig.js +4 -0
  90. package/dist/esm/models/components/streamconfig.js.map +1 -1
  91. package/dist/esm/models/operations/read.d.ts +10 -2
  92. package/dist/esm/models/operations/read.d.ts.map +1 -1
  93. package/dist/esm/models/operations/read.js.map +1 -1
  94. package/jsr.json +1 -1
  95. package/package.json +1 -1
  96. package/src/hooks/types.ts +1 -1
  97. package/src/lib/config.ts +3 -3
  98. package/src/lib/security.ts +11 -3
  99. package/src/mcp-server/extensions.ts +4 -0
  100. package/src/mcp-server/mcp-server.ts +1 -1
  101. package/src/mcp-server/prompts.ts +110 -0
  102. package/src/mcp-server/resources.ts +1 -0
  103. package/src/mcp-server/server.ts +4 -2
  104. package/src/mcp-server/tools.ts +1 -0
  105. package/src/models/components/appendrecord.ts +12 -0
  106. package/src/models/components/output.ts +18 -13
  107. package/src/models/components/readresponse.ts +4 -1
  108. package/src/models/components/sequencedrecord.ts +8 -1
  109. package/src/models/components/streamconfig.ts +13 -0
  110. package/src/models/operations/read.ts +10 -2
package/README.md CHANGED
@@ -82,7 +82,7 @@ yarn add @s2-dev/streamstore zod
82
82
  This SDK is also an installable MCP server where the various SDK methods are
83
83
  exposed as tools that can be invoked by AI applications.
84
84
 
85
- > Node.js v20 or greater is required to run the MCP server.
85
+ > Node.js v20 or greater is required to run the MCP server from npm.
86
86
 
87
87
  <details>
88
88
  <summary>Claude installation steps</summary>
@@ -110,17 +110,50 @@ Add the following server definition to your `claude_desktop_config.json` file:
110
110
  <details>
111
111
  <summary>Cursor installation steps</summary>
112
112
 
113
- Go to `Cursor Settings > Features > MCP Servers > Add new MCP server` and use the following settings:
113
+ Create a `.cursor/mcp.json` file in your project root with the following content:
114
114
 
115
- - Name: S2
116
- - Type: `command`
117
- - Command:
118
- ```sh
119
- npx -y --package @s2-dev/streamstore -- mcp start --bearer-auth ...
115
+ ```json
116
+ {
117
+ "mcpServers": {
118
+ "S2": {
119
+ "command": "npx",
120
+ "args": [
121
+ "-y", "--package", "@s2-dev/streamstore",
122
+ "--",
123
+ "mcp", "start",
124
+ "--bearer-auth", "..."
125
+ ]
126
+ }
127
+ }
128
+ }
120
129
  ```
121
130
 
122
131
  </details>
123
132
 
133
+ You can also run MCP servers as a standalone binary with no additional dependencies. You must pull these binaries from available Github releases:
134
+
135
+ ```bash
136
+ curl -L -o mcp-server \
137
+ https://github.com/{org}/{repo}/releases/download/{tag}/mcp-server-bun-darwin-arm64 && \
138
+ chmod +x mcp-server
139
+ ```
140
+
141
+ If the repo is a private repo you must add your Github PAT to download a release `-H "Authorization: Bearer {GITHUB_PAT}"`.
142
+
143
+
144
+ ```json
145
+ {
146
+ "mcpServers": {
147
+ "Todos": {
148
+ "command": "./DOWNLOAD/PATH/mcp-server",
149
+ "args": [
150
+ "start"
151
+ ]
152
+ }
153
+ }
154
+ }
155
+ ```
156
+
124
157
  For a full list of server arguments, run:
125
158
 
126
159
  ```sh
package/bin/mcp-server.js CHANGED
@@ -34182,9 +34182,9 @@ var init_config = __esm(() => {
34182
34182
  SDK_METADATA = {
34183
34183
  language: "typescript",
34184
34184
  openapiDocVersion: "1.0.0",
34185
- sdkVersion: "0.8.2",
34186
- genVersion: "2.548.6",
34187
- userAgent: "speakeasy-sdk/typescript 0.8.2 2.548.6 1.0.0 @s2-dev/streamstore"
34185
+ sdkVersion: "0.9.0",
34186
+ genVersion: "2.563.0",
34187
+ userAgent: "speakeasy-sdk/typescript 0.9.0 2.563.0 1.0.0 @s2-dev/streamstore"
34188
34188
  };
34189
34189
  });
34190
34190
 
@@ -34985,6 +34985,30 @@ var init_core = __esm(() => {
34985
34985
  };
34986
34986
  });
34987
34987
 
34988
+ // src/mcp-server/prompts.ts
34989
+ function createRegisterPrompt(logger, server, sdk, allowedScopes) {
34990
+ return (prompt) => {
34991
+ const scopes = prompt.scopes ?? [];
34992
+ if (!scopes.every((s) => allowedScopes.has(s))) {
34993
+ return;
34994
+ }
34995
+ if (prompt.args) {
34996
+ if (prompt.description) {
34997
+ server.prompt(prompt.name, prompt.description, prompt.args, async (args, ctx) => prompt.prompt(sdk, args, ctx));
34998
+ } else {
34999
+ server.prompt(prompt.name, prompt.args, async (args, ctx) => prompt.prompt(sdk, args, ctx));
35000
+ }
35001
+ } else {
35002
+ if (prompt.description) {
35003
+ server.prompt(prompt.name, prompt.description, async (ctx) => prompt.prompt(sdk, ctx));
35004
+ } else {
35005
+ server.prompt(prompt.name, async (ctx) => prompt.prompt(sdk, ctx));
35006
+ }
35007
+ }
35008
+ logger.debug("Registered prompt", { name: prompt.name });
35009
+ };
35010
+ }
35011
+
34988
35012
  // src/mcp-server/shared.ts
34989
35013
  async function consumeStream(stream) {
34990
35014
  const reader = stream.getReader();
@@ -35636,6 +35660,9 @@ function resolveSecurity(...options) {
35636
35660
  } else if (o.type === "oauth2:password") {
35637
35661
  return typeof o.value === "string" && !!o.value;
35638
35662
  } else if (o.type === "oauth2:client_credentials") {
35663
+ if (typeof o.value == "string") {
35664
+ return !!o.value;
35665
+ }
35639
35666
  return o.value.clientID != null || o.value.clientSecret != null;
35640
35667
  } else if (typeof o.value === "string") {
35641
35668
  return !!o.value;
@@ -35701,7 +35728,9 @@ function applyBearer(state, spec) {
35701
35728
  if (value.slice(0, 7).toLowerCase() !== "bearer ") {
35702
35729
  value = `Bearer ${value}`;
35703
35730
  }
35704
- state.headers[spec.fieldName] = value;
35731
+ if (spec.fieldName !== undefined) {
35732
+ state.headers[spec.fieldName] = value;
35733
+ }
35705
35734
  }
35706
35735
  function resolveGlobalSecurity(security) {
35707
35736
  return resolveSecurity([
@@ -35743,11 +35772,13 @@ var init_appendrecord = __esm(() => {
35743
35772
  init_lib();
35744
35773
  AppendRecord$inboundSchema = objectType({
35745
35774
  body: stringType(),
35746
- headers: arrayType(arrayType(stringType())).optional()
35775
+ headers: arrayType(arrayType(stringType())).optional(),
35776
+ timestamp: nullableType(numberType().int()).optional()
35747
35777
  });
35748
35778
  AppendRecord$outboundSchema = objectType({
35749
35779
  body: stringType(),
35750
- headers: arrayType(arrayType(stringType())).optional()
35780
+ headers: arrayType(arrayType(stringType())).optional(),
35781
+ timestamp: nullableType(numberType().int()).optional()
35751
35782
  });
35752
35783
  ((AppendRecord$) => {
35753
35784
  AppendRecord$.inboundSchema = AppendRecord$inboundSchema;
@@ -35867,19 +35898,23 @@ var init_streamconfig = __esm(() => {
35867
35898
  init_retentionpolicy();
35868
35899
  init_storageclass();
35869
35900
  StreamConfig$inboundSchema = objectType({
35901
+ require_client_timestamps: nullableType(booleanType()).optional(),
35870
35902
  retention_policy: nullableType(RetentionPolicy$inboundSchema).optional(),
35871
35903
  storage_class: StorageClass$inboundSchema.optional()
35872
35904
  }).transform((v2) => {
35873
35905
  return remap(v2, {
35906
+ require_client_timestamps: "requireClientTimestamps",
35874
35907
  retention_policy: "retentionPolicy",
35875
35908
  storage_class: "storageClass"
35876
35909
  });
35877
35910
  });
35878
35911
  StreamConfig$outboundSchema = objectType({
35912
+ requireClientTimestamps: nullableType(booleanType()).optional(),
35879
35913
  retentionPolicy: nullableType(RetentionPolicy$outboundSchema).optional(),
35880
35914
  storageClass: StorageClass$outboundSchema.optional()
35881
35915
  }).transform((v2) => {
35882
35916
  return remap(v2, {
35917
+ requireClientTimestamps: "require_client_timestamps",
35883
35918
  retentionPolicy: "retention_policy",
35884
35919
  storageClass: "storage_class"
35885
35920
  });
@@ -36168,7 +36203,8 @@ var init_sequencedrecord = __esm(() => {
36168
36203
  SequencedRecord$inboundSchema = objectType({
36169
36204
  body: stringType(),
36170
36205
  headers: arrayType(Header$inboundSchema),
36171
- seq_num: numberType().int()
36206
+ seq_num: numberType().int(),
36207
+ timestamp: numberType().int()
36172
36208
  }).transform((v2) => {
36173
36209
  return remap(v2, {
36174
36210
  seq_num: "seqNum"
@@ -36177,7 +36213,8 @@ var init_sequencedrecord = __esm(() => {
36177
36213
  SequencedRecord$outboundSchema = objectType({
36178
36214
  body: stringType(),
36179
36215
  headers: arrayType(Header$outboundSchema),
36180
- seqNum: numberType().int()
36216
+ seqNum: numberType().int(),
36217
+ timestamp: numberType().int()
36181
36218
  }).transform((v2) => {
36182
36219
  return remap(v2, {
36183
36220
  seqNum: "seq_num"
@@ -42294,7 +42331,7 @@ Retrieve a batch of records, or set \`Accept: text/event-stream\` to stream usin
42294
42331
  function createMCPServer(deps) {
42295
42332
  const server = new McpServer({
42296
42333
  name: "S2",
42297
- version: "0.8.2"
42334
+ version: "0.9.0"
42298
42335
  });
42299
42336
  const client = new S2Core({
42300
42337
  bearerAuth: deps.bearerAuth,
@@ -42306,7 +42343,8 @@ function createMCPServer(deps) {
42306
42343
  const tool = createRegisterTool(deps.logger, server, client, scopes, allowedTools);
42307
42344
  const resource = createRegisterResource(deps.logger, server, client, scopes);
42308
42345
  const resourceTemplate = createRegisterResourceTemplate(deps.logger, server, client, scopes);
42309
- const register = { tool, resource, resourceTemplate };
42346
+ const prompt = createRegisterPrompt(deps.logger, server, client, scopes);
42347
+ const register = { tool, resource, resourceTemplate, prompt };
42310
42348
  tool(tool$accountListBasins);
42311
42349
  tool(tool$accountGetBasinConfig);
42312
42350
  tool(tool$accountCreateBasin);
@@ -43530,7 +43568,7 @@ var routes = rn({
43530
43568
  var app = Ve(routes, {
43531
43569
  name: "mcp",
43532
43570
  versionInfo: {
43533
- currentVersion: "0.8.2"
43571
+ currentVersion: "0.9.0"
43534
43572
  }
43535
43573
  });
43536
43574
  _t(app, process3.argv.slice(2), buildContext(process3));
@@ -43538,5 +43576,5 @@ export {
43538
43576
  app
43539
43577
  };
43540
43578
 
43541
- //# debugId=D484A0BC1834A41864756E2164756E21
43579
+ //# debugId=FBBEE11F84D3BD4364756E2164756E21
43542
43580
  //# sourceMappingURL=mcp-server.js.map