@polar-sh/sdk 0.29.3 → 0.30.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 (37) hide show
  1. package/bin/mcp-server.js +42 -6
  2. package/bin/mcp-server.js.map +7 -6
  3. package/dist/commonjs/lib/config.d.ts +3 -3
  4. package/dist/commonjs/lib/config.js +3 -3
  5. package/dist/commonjs/mcp-server/extensions.d.ts +9 -0
  6. package/dist/commonjs/mcp-server/extensions.d.ts.map +1 -0
  7. package/dist/commonjs/mcp-server/extensions.js +6 -0
  8. package/dist/commonjs/mcp-server/extensions.js.map +1 -0
  9. package/dist/commonjs/mcp-server/mcp-server.js +1 -1
  10. package/dist/commonjs/mcp-server/resources.d.ts +9 -4
  11. package/dist/commonjs/mcp-server/resources.d.ts.map +1 -1
  12. package/dist/commonjs/mcp-server/resources.js +36 -9
  13. package/dist/commonjs/mcp-server/resources.js.map +1 -1
  14. package/dist/commonjs/mcp-server/server.d.ts.map +1 -1
  15. package/dist/commonjs/mcp-server/server.js +6 -1
  16. package/dist/commonjs/mcp-server/server.js.map +1 -1
  17. package/dist/esm/lib/config.d.ts +3 -3
  18. package/dist/esm/lib/config.js +3 -3
  19. package/dist/esm/mcp-server/extensions.d.ts +9 -0
  20. package/dist/esm/mcp-server/extensions.d.ts.map +1 -0
  21. package/dist/esm/mcp-server/extensions.js +5 -0
  22. package/dist/esm/mcp-server/extensions.js.map +1 -0
  23. package/dist/esm/mcp-server/mcp-server.js +1 -1
  24. package/dist/esm/mcp-server/resources.d.ts +9 -4
  25. package/dist/esm/mcp-server/resources.d.ts.map +1 -1
  26. package/dist/esm/mcp-server/resources.js +34 -9
  27. package/dist/esm/mcp-server/resources.js.map +1 -1
  28. package/dist/esm/mcp-server/server.d.ts.map +1 -1
  29. package/dist/esm/mcp-server/server.js +6 -1
  30. package/dist/esm/mcp-server/server.js.map +1 -1
  31. package/jsr.json +1 -1
  32. package/package.json +1 -1
  33. package/src/lib/config.ts +3 -3
  34. package/src/mcp-server/extensions.ts +13 -0
  35. package/src/mcp-server/mcp-server.ts +1 -1
  36. package/src/mcp-server/resources.ts +75 -14
  37. package/src/mcp-server/server.ts +16 -1
@@ -2,12 +2,16 @@
2
2
  * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
3
3
  */
4
4
 
5
- import { ResourceTemplate } from "@modelcontextprotocol/sdk/server/mcp.js";
5
+ import {
6
+ McpServer,
7
+ ResourceMetadata,
8
+ ResourceTemplate,
9
+ } from "@modelcontextprotocol/sdk/server/mcp.js";
6
10
  import { RequestHandlerExtra } from "@modelcontextprotocol/sdk/shared/protocol.js";
7
11
  import { Variables } from "@modelcontextprotocol/sdk/shared/uriTemplate.js";
8
12
  import { ReadResourceResult } from "@modelcontextprotocol/sdk/types.js";
9
13
  import { PolarCore } from "../core.js";
10
- import { Result } from "../types/fp.js";
14
+ import { ConsoleLogger } from "./console-logger.js";
11
15
  import { MCPScope } from "./scopes.js";
12
16
  import { isAsyncIterable, isBinaryData, valueToBase64 } from "./shared.js";
13
17
 
@@ -19,7 +23,8 @@ export type ReadResourceCallback = (
19
23
 
20
24
  export type ResourceDefinition = {
21
25
  name: string;
22
- description: string;
26
+ description?: string;
27
+ metadata?: ResourceMetadata;
23
28
  scopes?: MCPScope[];
24
29
  resource: string;
25
30
  read: ReadResourceCallback;
@@ -35,30 +40,27 @@ export type ReadResourceTemplateCallback = (
35
40
  export type ResourceTemplateDefinition = {
36
41
  name: string;
37
42
  description: string;
43
+ metadata?: ResourceMetadata;
38
44
  scopes?: MCPScope[];
39
45
  resource: ResourceTemplate;
40
46
  read: ReadResourceTemplateCallback;
41
47
  };
42
48
 
43
49
  export async function formatResult(
44
- result: Result<unknown, Error>,
50
+ value: unknown,
45
51
  uri: URL,
46
- init: { response?: Response | undefined },
52
+ init: { mimeType?: string | undefined; response?: Response | undefined },
47
53
  ): Promise<ReadResourceResult> {
48
- if (!result.ok) {
49
- throw result.error;
50
- }
51
-
52
- const { value } = result;
53
54
  if (typeof value === "undefined") {
54
55
  return { contents: [] };
55
56
  }
56
57
 
57
- const { response } = init;
58
- const mimeType = response?.headers.get("content-type") ?? "";
59
58
  let contents: ReadResourceResult["contents"] = [];
60
59
 
61
- if (mimeType.search(/\bjson\b/g)) {
60
+ const mimeType = init.mimeType ?? init.response?.headers.get("content-type")
61
+ ?? "";
62
+
63
+ if (mimeType.search(/\bjson\b/g) !== -1) {
62
64
  contents = [{ uri: uri.toString(), mimeType, text: JSON.stringify(value) }];
63
65
  } else if (
64
66
  mimeType.startsWith("text/event-stream")
@@ -71,7 +73,10 @@ export async function formatResult(
71
73
  text: await stringifySSEToJSON(value),
72
74
  },
73
75
  ];
74
- } else if (mimeType.startsWith("text/") && typeof value === "string") {
76
+ } else if (
77
+ (mimeType.startsWith("text/") || mimeType.startsWith("application/"))
78
+ && typeof value === "string"
79
+ ) {
75
80
  contents = [{ uri: uri.toString(), mimeType, text: value }];
76
81
  } else if (isBinaryData(value)) {
77
82
  const blob = await valueToBase64(value);
@@ -94,3 +99,59 @@ async function stringifySSEToJSON(
94
99
 
95
100
  return JSON.stringify(payloads);
96
101
  }
102
+
103
+ export function createRegisterResource(
104
+ logger: ConsoleLogger,
105
+ server: McpServer,
106
+ sdk: PolarCore,
107
+ allowedScopes: Set<MCPScope>,
108
+ ): (resource: ResourceDefinition) => void {
109
+ return (resource: ResourceDefinition): void => {
110
+ const scopes = resource.scopes ?? [];
111
+ if (!scopes.every((s: MCPScope) => allowedScopes.has(s))) {
112
+ return;
113
+ }
114
+
115
+ const metadata: ResourceMetadata = {
116
+ ...resource.metadata,
117
+ description: resource.description,
118
+ };
119
+
120
+ server.resource(
121
+ resource.name,
122
+ resource.resource,
123
+ metadata,
124
+ async (uri, ctx) => resource.read(sdk, uri, ctx),
125
+ );
126
+
127
+ logger.debug("Registered resource", { name: resource.name });
128
+ };
129
+ }
130
+
131
+ export function createRegisterResourceTemplate(
132
+ logger: ConsoleLogger,
133
+ server: McpServer,
134
+ sdk: PolarCore,
135
+ allowedScopes: Set<MCPScope>,
136
+ ): (resource: ResourceTemplateDefinition) => void {
137
+ return (resource: ResourceTemplateDefinition): void => {
138
+ const scopes = resource.scopes ?? [];
139
+ if (!scopes.every((s: MCPScope) => allowedScopes.has(s))) {
140
+ return;
141
+ }
142
+
143
+ const metadata: ResourceMetadata = {
144
+ ...resource.metadata,
145
+ description: resource.description,
146
+ };
147
+
148
+ server.resource(
149
+ resource.name,
150
+ resource.resource,
151
+ metadata,
152
+ async (uri, vars, ctx) => resource.read(sdk, uri, vars, ctx),
153
+ );
154
+
155
+ logger.debug("Registered resource template", { name: resource.name });
156
+ };
157
+ }
@@ -6,6 +6,10 @@ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
6
6
  import { PolarCore } from "../core.js";
7
7
  import { SDKOptions } from "../lib/config.js";
8
8
  import type { ConsoleLogger } from "./console-logger.js";
9
+ import {
10
+ createRegisterResource,
11
+ createRegisterResourceTemplate,
12
+ } from "./resources.js";
9
13
  import { MCPScope, mcpScopes } from "./scopes.js";
10
14
  import { createRegisterTool } from "./tools.js";
11
15
  import { tool$customersCreate } from "./tools/customersCreate.js";
@@ -44,7 +48,7 @@ export function createMCPServer(deps: {
44
48
  }) {
45
49
  const server = new McpServer({
46
50
  name: "Polar",
47
- version: "0.29.3",
51
+ version: "0.30.0",
48
52
  });
49
53
 
50
54
  const client = new PolarCore({
@@ -52,7 +56,9 @@ export function createMCPServer(deps: {
52
56
  serverURL: deps.serverURL,
53
57
  server: deps.server,
54
58
  });
59
+
55
60
  const scopes = new Set(deps.scopes ?? mcpScopes);
61
+
56
62
  const allowedTools = deps.allowedTools && new Set(deps.allowedTools);
57
63
  const tool = createRegisterTool(
58
64
  deps.logger,
@@ -61,6 +67,15 @@ export function createMCPServer(deps: {
61
67
  scopes,
62
68
  allowedTools,
63
69
  );
70
+ const resource = createRegisterResource(deps.logger, server, client, scopes);
71
+ const resourceTemplate = createRegisterResourceTemplate(
72
+ deps.logger,
73
+ server,
74
+ client,
75
+ scopes,
76
+ );
77
+ const register = { tool, resource, resourceTemplate };
78
+ void register; // suppress unused warnings
64
79
 
65
80
  tool(tool$subscriptionsList);
66
81
  tool(tool$subscriptionsExport);