@nestr/mcp 0.1.8

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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flow.js","sourceRoot":"","sources":["../../src/oauth/flow.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Persistent Storage for OAuth Data
3
+ *
4
+ * Stores registered OAuth clients and pending auth requests to disk.
5
+ * Uses a simple JSON file-based storage that persists across restarts.
6
+ */
7
+ /**
8
+ * Registered OAuth Client (RFC 7591)
9
+ */
10
+ export interface RegisteredClient {
11
+ client_id: string;
12
+ client_secret?: string;
13
+ client_name?: string;
14
+ redirect_uris: string[];
15
+ grant_types: string[];
16
+ response_types: string[];
17
+ token_endpoint_auth_method: string;
18
+ scope?: string;
19
+ registered_at: number;
20
+ }
21
+ /**
22
+ * Pending OAuth authorization with PKCE
23
+ */
24
+ export interface PendingAuthWithPKCE {
25
+ state: string;
26
+ redirectUri: string;
27
+ clientId: string;
28
+ codeChallenge?: string;
29
+ codeChallengeMethod?: string;
30
+ createdAt: number;
31
+ scope?: string;
32
+ }
33
+ /**
34
+ * Register a new OAuth client
35
+ */
36
+ export declare function registerClient(client: RegisteredClient): void;
37
+ /**
38
+ * Get a registered client by ID
39
+ */
40
+ export declare function getClient(clientId: string): RegisteredClient | undefined;
41
+ /**
42
+ * Check if a client ID exists
43
+ */
44
+ export declare function clientExists(clientId: string): boolean;
45
+ /**
46
+ * Validate client credentials
47
+ */
48
+ export declare function validateClientCredentials(clientId: string, clientSecret?: string): boolean;
49
+ /**
50
+ * Validate redirect URI for a client
51
+ */
52
+ export declare function validateRedirectUri(clientId: string, redirectUri: string): boolean;
53
+ /**
54
+ * Store a pending auth request
55
+ */
56
+ export declare function storePendingAuth(pending: PendingAuthWithPKCE): void;
57
+ /**
58
+ * Get and remove a pending auth request
59
+ */
60
+ export declare function consumePendingAuth(state: string): PendingAuthWithPKCE | undefined;
61
+ /**
62
+ * Cleanup expired pending auth requests
63
+ */
64
+ export declare function cleanupExpiredPendingAuth(): void;
65
+ //# sourceMappingURL=storage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../src/oauth/storage.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAYH;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,0BAA0B,EAAE,MAAM,CAAC;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AA6GD;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI,CAK7D;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS,CAGxE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAGtD;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,MAAM,EAChB,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAST;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,GAClB,OAAO,CA0BT;AAID;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,mBAAmB,GAAG,IAAI,CAInE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,MAAM,GACZ,mBAAmB,GAAG,SAAS,CAkBjC;AAED;;GAEG;AACH,wBAAgB,yBAAyB,IAAI,IAAI,CAgBhD"}
@@ -0,0 +1,222 @@
1
+ /**
2
+ * Persistent Storage for OAuth Data
3
+ *
4
+ * Stores registered OAuth clients and pending auth requests to disk.
5
+ * Uses a simple JSON file-based storage that persists across restarts.
6
+ */
7
+ import { readFileSync, writeFileSync, existsSync, mkdirSync } from "node:fs";
8
+ import { join } from "node:path";
9
+ // Storage directory - use /data in production (mounted volume), fallback to local .data
10
+ const STORAGE_DIR = process.env.OAUTH_STORAGE_DIR ||
11
+ (process.env.NODE_ENV === "production" ? "/data" : ".data");
12
+ const CLIENTS_FILE = join(STORAGE_DIR, "oauth-clients.json");
13
+ const PENDING_AUTH_FILE = join(STORAGE_DIR, "pending-auth.json");
14
+ // In-memory cache backed by disk
15
+ let clientsCache = null;
16
+ let pendingAuthCache = null;
17
+ /**
18
+ * Ensure storage directory exists
19
+ */
20
+ function ensureStorageDir() {
21
+ if (!existsSync(STORAGE_DIR)) {
22
+ mkdirSync(STORAGE_DIR, { recursive: true });
23
+ }
24
+ }
25
+ /**
26
+ * Load registered clients from disk
27
+ */
28
+ function loadClients() {
29
+ if (clientsCache)
30
+ return clientsCache;
31
+ ensureStorageDir();
32
+ clientsCache = new Map();
33
+ if (existsSync(CLIENTS_FILE)) {
34
+ try {
35
+ const data = JSON.parse(readFileSync(CLIENTS_FILE, "utf-8"));
36
+ for (const [id, client] of Object.entries(data)) {
37
+ clientsCache.set(id, client);
38
+ }
39
+ console.log(`Loaded ${clientsCache.size} registered OAuth clients`);
40
+ }
41
+ catch (error) {
42
+ console.error("Failed to load OAuth clients:", error);
43
+ }
44
+ }
45
+ return clientsCache;
46
+ }
47
+ /**
48
+ * Save registered clients to disk
49
+ */
50
+ function saveClients() {
51
+ if (!clientsCache)
52
+ return;
53
+ ensureStorageDir();
54
+ const data = {};
55
+ for (const [id, client] of clientsCache) {
56
+ data[id] = client;
57
+ }
58
+ try {
59
+ writeFileSync(CLIENTS_FILE, JSON.stringify(data, null, 2));
60
+ }
61
+ catch (error) {
62
+ console.error("Failed to save OAuth clients:", error);
63
+ }
64
+ }
65
+ /**
66
+ * Load pending auth requests from disk
67
+ */
68
+ function loadPendingAuth() {
69
+ if (pendingAuthCache)
70
+ return pendingAuthCache;
71
+ ensureStorageDir();
72
+ pendingAuthCache = new Map();
73
+ if (existsSync(PENDING_AUTH_FILE)) {
74
+ try {
75
+ const data = JSON.parse(readFileSync(PENDING_AUTH_FILE, "utf-8"));
76
+ const now = Date.now();
77
+ const TTL = 5 * 60 * 1000; // 5 minutes
78
+ for (const [state, pending] of Object.entries(data)) {
79
+ const p = pending;
80
+ // Only load non-expired entries
81
+ if (now - p.createdAt < TTL) {
82
+ pendingAuthCache.set(state, p);
83
+ }
84
+ }
85
+ }
86
+ catch (error) {
87
+ console.error("Failed to load pending auth:", error);
88
+ }
89
+ }
90
+ return pendingAuthCache;
91
+ }
92
+ /**
93
+ * Save pending auth requests to disk
94
+ */
95
+ function savePendingAuth() {
96
+ if (!pendingAuthCache)
97
+ return;
98
+ ensureStorageDir();
99
+ const data = {};
100
+ for (const [state, pending] of pendingAuthCache) {
101
+ data[state] = pending;
102
+ }
103
+ try {
104
+ writeFileSync(PENDING_AUTH_FILE, JSON.stringify(data, null, 2));
105
+ }
106
+ catch (error) {
107
+ console.error("Failed to save pending auth:", error);
108
+ }
109
+ }
110
+ // ============ Client Registration ============
111
+ /**
112
+ * Register a new OAuth client
113
+ */
114
+ export function registerClient(client) {
115
+ const clients = loadClients();
116
+ clients.set(client.client_id, client);
117
+ saveClients();
118
+ console.log(`Registered OAuth client: ${client.client_id}`);
119
+ }
120
+ /**
121
+ * Get a registered client by ID
122
+ */
123
+ export function getClient(clientId) {
124
+ const clients = loadClients();
125
+ return clients.get(clientId);
126
+ }
127
+ /**
128
+ * Check if a client ID exists
129
+ */
130
+ export function clientExists(clientId) {
131
+ const clients = loadClients();
132
+ return clients.has(clientId);
133
+ }
134
+ /**
135
+ * Validate client credentials
136
+ */
137
+ export function validateClientCredentials(clientId, clientSecret) {
138
+ const client = getClient(clientId);
139
+ if (!client)
140
+ return false;
141
+ // If client has no secret (public client), accept
142
+ if (!client.client_secret)
143
+ return true;
144
+ // Otherwise validate secret
145
+ return client.client_secret === clientSecret;
146
+ }
147
+ /**
148
+ * Validate redirect URI for a client
149
+ */
150
+ export function validateRedirectUri(clientId, redirectUri) {
151
+ const client = getClient(clientId);
152
+ if (!client)
153
+ return false;
154
+ return client.redirect_uris.some((uri) => {
155
+ // Exact match or localhost with any port
156
+ if (uri === redirectUri)
157
+ return true;
158
+ // Handle localhost wildcards (common for CLI tools)
159
+ try {
160
+ const registered = new URL(uri);
161
+ const requested = new URL(redirectUri);
162
+ if (registered.hostname === "localhost" &&
163
+ requested.hostname === "localhost" &&
164
+ registered.pathname === requested.pathname) {
165
+ return true;
166
+ }
167
+ }
168
+ catch {
169
+ // Invalid URLs, skip
170
+ }
171
+ return false;
172
+ });
173
+ }
174
+ // ============ Pending Auth with PKCE ============
175
+ /**
176
+ * Store a pending auth request
177
+ */
178
+ export function storePendingAuth(pending) {
179
+ const cache = loadPendingAuth();
180
+ cache.set(pending.state, pending);
181
+ savePendingAuth();
182
+ }
183
+ /**
184
+ * Get and remove a pending auth request
185
+ */
186
+ export function consumePendingAuth(state) {
187
+ const cache = loadPendingAuth();
188
+ const pending = cache.get(state);
189
+ if (!pending)
190
+ return undefined;
191
+ // Check if expired (5 minutes)
192
+ if (Date.now() - pending.createdAt > 5 * 60 * 1000) {
193
+ cache.delete(state);
194
+ savePendingAuth();
195
+ return undefined;
196
+ }
197
+ // Remove from cache (one-time use)
198
+ cache.delete(state);
199
+ savePendingAuth();
200
+ return pending;
201
+ }
202
+ /**
203
+ * Cleanup expired pending auth requests
204
+ */
205
+ export function cleanupExpiredPendingAuth() {
206
+ const cache = loadPendingAuth();
207
+ const now = Date.now();
208
+ const TTL = 5 * 60 * 1000;
209
+ let cleaned = 0;
210
+ for (const [state, pending] of cache) {
211
+ if (now - pending.createdAt > TTL) {
212
+ cache.delete(state);
213
+ cleaned++;
214
+ }
215
+ }
216
+ if (cleaned > 0) {
217
+ savePendingAuth();
218
+ }
219
+ }
220
+ // Run cleanup every minute
221
+ setInterval(cleanupExpiredPendingAuth, 60000);
222
+ //# sourceMappingURL=storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.js","sourceRoot":"","sources":["../../src/oauth/storage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Nestr MCP Server
3
+ * Core server setup and configuration
4
+ */
5
+ import { Server } from "@modelcontextprotocol/sdk/server/index.js";
6
+ import { NestrClient } from "./api/client.js";
7
+ export interface NestrMcpServerConfig {
8
+ client?: NestrClient;
9
+ }
10
+ export declare function createServer(config?: NestrMcpServerConfig): Server;
11
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAOnE,OAAO,EAAE,WAAW,EAAuB,MAAM,iBAAiB,CAAC;AAGnE,MAAM,WAAW,oBAAoB;IACnC,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAkSD,wBAAgB,YAAY,CAAC,MAAM,GAAE,oBAAyB,GAAG,MAAM,CAmGtE"}