@databasin/mcp-client 0.2.0-beta.1 → 0.2.1

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 (100) hide show
  1. package/README.md +36 -30
  2. package/dist/auth-schema.d.ts +23 -0
  3. package/dist/auth-schema.d.ts.map +1 -0
  4. package/dist/auth-schema.js +42 -0
  5. package/dist/auth-schema.js.map +1 -0
  6. package/dist/auth-tools.d.ts +10 -0
  7. package/dist/auth-tools.d.ts.map +1 -0
  8. package/dist/auth-tools.js +60 -0
  9. package/dist/auth-tools.js.map +1 -0
  10. package/dist/auth.d.ts +13 -74
  11. package/dist/auth.d.ts.map +1 -1
  12. package/dist/auth.js +16 -228
  13. package/dist/auth.js.map +1 -1
  14. package/dist/auth0-store.d.ts +14 -0
  15. package/dist/auth0-store.d.ts.map +1 -0
  16. package/dist/auth0-store.js +78 -0
  17. package/dist/auth0-store.js.map +1 -0
  18. package/dist/auth0-token.d.ts +3 -0
  19. package/dist/auth0-token.d.ts.map +1 -0
  20. package/dist/auth0-token.js +13 -0
  21. package/dist/auth0-token.js.map +1 -0
  22. package/dist/auth0.d.ts +41 -0
  23. package/dist/auth0.d.ts.map +1 -0
  24. package/dist/auth0.js +236 -0
  25. package/dist/auth0.js.map +1 -0
  26. package/dist/browser.d.ts.map +1 -1
  27. package/dist/browser.js +3 -2
  28. package/dist/browser.js.map +1 -1
  29. package/dist/cli.d.ts.map +1 -1
  30. package/dist/cli.js +3 -2
  31. package/dist/cli.js.map +1 -1
  32. package/dist/config.d.ts +5 -0
  33. package/dist/config.d.ts.map +1 -1
  34. package/dist/config.js +12 -2
  35. package/dist/config.js.map +1 -1
  36. package/dist/entra-auth.d.ts +84 -0
  37. package/dist/entra-auth.d.ts.map +1 -0
  38. package/dist/entra-auth.js +234 -0
  39. package/dist/entra-auth.js.map +1 -0
  40. package/dist/index.d.ts +1 -1
  41. package/dist/index.d.ts.map +1 -1
  42. package/dist/index.js +1 -1
  43. package/dist/index.js.map +1 -1
  44. package/dist/login-url.d.ts +2 -0
  45. package/dist/login-url.d.ts.map +1 -1
  46. package/dist/login-url.js +14 -0
  47. package/dist/login-url.js.map +1 -1
  48. package/dist/mcp-endpoint.d.ts +5 -0
  49. package/dist/mcp-endpoint.d.ts.map +1 -0
  50. package/dist/mcp-endpoint.js +22 -0
  51. package/dist/mcp-endpoint.js.map +1 -0
  52. package/dist/proxy-tools.d.ts +5 -0
  53. package/dist/proxy-tools.d.ts.map +1 -0
  54. package/dist/proxy-tools.js +39 -0
  55. package/dist/proxy-tools.js.map +1 -0
  56. package/dist/remote-mcp.d.ts +27 -0
  57. package/dist/remote-mcp.d.ts.map +1 -0
  58. package/dist/remote-mcp.js +70 -0
  59. package/dist/remote-mcp.js.map +1 -0
  60. package/dist/server.d.ts +3 -3
  61. package/dist/server.d.ts.map +1 -1
  62. package/dist/server.js +17 -7
  63. package/dist/server.js.map +1 -1
  64. package/dist/version.d.ts +1 -1
  65. package/dist/version.d.ts.map +1 -1
  66. package/dist/version.js +1 -1
  67. package/dist/version.js.map +1 -1
  68. package/package.json +7 -3
  69. package/dist/abort.d.ts +0 -5
  70. package/dist/abort.d.ts.map +0 -1
  71. package/dist/abort.js +0 -25
  72. package/dist/abort.js.map +0 -1
  73. package/dist/api-client.d.ts +0 -58
  74. package/dist/api-client.d.ts.map +0 -1
  75. package/dist/api-client.js +0 -151
  76. package/dist/api-client.js.map +0 -1
  77. package/dist/api-contract.d.ts +0 -59
  78. package/dist/api-contract.d.ts.map +0 -1
  79. package/dist/api-contract.js +0 -47
  80. package/dist/api-contract.js.map +0 -1
  81. package/dist/api-profile.d.ts +0 -5
  82. package/dist/api-profile.d.ts.map +0 -1
  83. package/dist/api-profile.js +0 -38
  84. package/dist/api-profile.js.map +0 -1
  85. package/dist/api-request.d.ts +0 -27
  86. package/dist/api-request.d.ts.map +0 -1
  87. package/dist/api-request.js +0 -147
  88. package/dist/api-request.js.map +0 -1
  89. package/dist/api-response.d.ts +0 -9
  90. package/dist/api-response.d.ts.map +0 -1
  91. package/dist/api-response.js +0 -206
  92. package/dist/api-response.js.map +0 -1
  93. package/dist/schemas.d.ts +0 -431
  94. package/dist/schemas.d.ts.map +0 -1
  95. package/dist/schemas.js +0 -289
  96. package/dist/schemas.js.map +0 -1
  97. package/dist/tools.d.ts +0 -28
  98. package/dist/tools.d.ts.map +0 -1
  99. package/dist/tools.js +0 -328
  100. package/dist/tools.js.map +0 -1
@@ -0,0 +1,234 @@
1
+ import { InteractionRequiredAuthError } from '@azure/msal-node';
2
+ import { openSystemBrowser } from './browser.js';
3
+ import { createSecurePublicClient } from './credential-store.js';
4
+ import { DataBasinError, LoginRequiredError } from './errors.js';
5
+ import { projectDevicePrompt, validateInteractiveLoginUrl } from './login-url.js';
6
+ import { accountMatchesProfile, validateAccessTokenResult } from './token-validation.js';
7
+ export class EntraAuthManager {
8
+ profile;
9
+ clientPromise;
10
+ tokenPromise;
11
+ activeLogin;
12
+ lastLoginFailed = false;
13
+ createClient;
14
+ openBrowser;
15
+ now;
16
+ constructor(profile, options = {}) {
17
+ this.profile = profile;
18
+ this.createClient = options.createClient ?? (() => createSecurePublicClient(profile));
19
+ this.openBrowser = options.openBrowser ?? openSystemBrowser;
20
+ this.now = options.now ?? Date.now;
21
+ }
22
+ async getAccessToken() {
23
+ this.tokenPromise ??= this.acquireSilent().finally(() => {
24
+ this.tokenPromise = undefined;
25
+ });
26
+ return this.tokenPromise;
27
+ }
28
+ async login() {
29
+ return this.performInteractiveLogin(this.openBrowser);
30
+ }
31
+ async startLogin() {
32
+ const status = await this.getLoginStatus();
33
+ if (status.status === 'authenticated' || status.status === 'pending')
34
+ return status;
35
+ const login = this.beginDeviceLogin();
36
+ const outcome = await Promise.race([
37
+ login.prompted.then((prompt) => ({ state: 'prompted', prompt })),
38
+ login.completion.then(() => ({ state: 'completed' }), () => ({ state: 'failed' }))
39
+ ]);
40
+ if (outcome.state === 'completed') {
41
+ return this.assistantResult('authenticated', null, `DataBasin ${this.profile.label} sign-in is complete.`);
42
+ }
43
+ if (outcome.state === 'failed') {
44
+ return this.assistantResult('failed', null, `DataBasin ${this.profile.label} sign-in did not complete. Call databasin_login to try again.`);
45
+ }
46
+ return this.assistantResult('pending', outcome.prompt.verificationUri, `Open the Microsoft sign-in URL on any device and enter code ${outcome.prompt.userCode}. Then call databasin_auth_status.`, outcome.prompt.userCode, login.expiresAt);
47
+ }
48
+ cancelPendingLogin() {
49
+ this.activeLogin?.cancel();
50
+ }
51
+ async getLoginStatus() {
52
+ if (this.activeLogin)
53
+ return this.pendingAssistantResult(this.activeLogin);
54
+ const authenticated = await this.cachedAssistantResult();
55
+ if (authenticated)
56
+ return authenticated;
57
+ if (this.lastLoginFailed)
58
+ return this.failedAssistantResult();
59
+ return this.assistantResult('not_authenticated', null, `DataBasin ${this.profile.label} is not signed in. Call databasin_login to begin.`);
60
+ }
61
+ pendingAssistantResult(login) {
62
+ const message = login.prompt
63
+ ? `Open the Microsoft sign-in URL on any device and enter code ${login.prompt.userCode}.`
64
+ : 'Microsoft is preparing the device sign-in instructions.';
65
+ return this.assistantResult('pending', login.prompt?.verificationUri ?? null, message, login.prompt?.userCode, login.expiresAt);
66
+ }
67
+ async cachedAssistantResult() {
68
+ const cachedStatus = await this.status();
69
+ if (!cachedStatus.authenticated)
70
+ return undefined;
71
+ try {
72
+ await this.getAccessToken();
73
+ return this.assistantResult('authenticated', null, `DataBasin ${this.profile.label} is signed in.`);
74
+ }
75
+ catch (error) {
76
+ if (error instanceof DataBasinError && error.code === 'UNAUTHENTICATED')
77
+ return undefined;
78
+ throw error;
79
+ }
80
+ }
81
+ failedAssistantResult() {
82
+ return this.assistantResult('failed', null, `DataBasin ${this.profile.label} sign-in did not complete. Call databasin_login to try again.`);
83
+ }
84
+ beginDeviceLogin() {
85
+ if (this.activeLogin)
86
+ return this.activeLogin;
87
+ this.lastLoginFailed = false;
88
+ let resolvePrompted = () => undefined;
89
+ let cancelRequested = false;
90
+ let deviceRequest;
91
+ const login = {
92
+ prompted: new Promise((resolve) => {
93
+ resolvePrompted = resolve;
94
+ }),
95
+ completion: Promise.resolve({ authenticated: false, environment: this.profile.environment }),
96
+ prompt: undefined,
97
+ expiresAt: undefined,
98
+ cancel: () => {
99
+ cancelRequested = true;
100
+ if (deviceRequest)
101
+ deviceRequest.cancel = true;
102
+ }
103
+ };
104
+ login.completion = this.performDeviceLogin((prompt) => {
105
+ login.prompt = prompt;
106
+ login.expiresAt = new Date(this.now() + prompt.expiresIn * 1_000).toISOString();
107
+ resolvePrompted(prompt);
108
+ }, (request) => {
109
+ deviceRequest = request;
110
+ if (cancelRequested)
111
+ request.cancel = true;
112
+ }).catch((error) => {
113
+ this.lastLoginFailed = true;
114
+ throw error;
115
+ }).finally(() => {
116
+ if (this.activeLogin === login)
117
+ this.activeLogin = undefined;
118
+ });
119
+ this.activeLogin = login;
120
+ void login.completion.catch(() => undefined);
121
+ return login;
122
+ }
123
+ async performDeviceLogin(onPrompt, onRequest) {
124
+ const client = await this.client();
125
+ let result;
126
+ try {
127
+ const request = {
128
+ scopes: [...this.profile.scopes],
129
+ timeout: 900,
130
+ cancel: false,
131
+ deviceCodeCallback: (response) => onPrompt(projectDevicePrompt(response))
132
+ };
133
+ onRequest(request);
134
+ result = await client.acquireTokenByDeviceCode(request);
135
+ }
136
+ catch {
137
+ throw new DataBasinError('UNAUTHENTICATED', `DataBasin ${this.profile.label} sign-in did not complete.`);
138
+ }
139
+ return this.completeLogin(client, result);
140
+ }
141
+ async performInteractiveLogin(openBrowser) {
142
+ const client = await this.client();
143
+ let result;
144
+ try {
145
+ result = await client.acquireTokenInteractive({
146
+ scopes: [...this.profile.scopes],
147
+ openBrowser: async (url) => openBrowser(validateInteractiveLoginUrl(url, this.profile)),
148
+ prompt: 'select_account',
149
+ successTemplate: successPage(this.profile.label),
150
+ errorTemplate: errorPage()
151
+ });
152
+ }
153
+ catch {
154
+ throw new DataBasinError('UNAUTHENTICATED', `DataBasin ${this.profile.label} sign-in did not complete.`);
155
+ }
156
+ return this.completeLogin(client, result);
157
+ }
158
+ async completeLogin(client, result) {
159
+ validateAccessTokenResult(result, this.profile, this.now());
160
+ const account = result.account;
161
+ const accounts = await client.getAllAccounts();
162
+ await Promise.all(accounts
163
+ .filter((cachedAccount) => cachedAccount.homeAccountId !== account.homeAccountId)
164
+ .map((account) => client.signOut({ account })));
165
+ return {
166
+ authenticated: true,
167
+ environment: this.profile.environment,
168
+ username: account.username
169
+ };
170
+ }
171
+ assistantResult(status, loginUrl, message, userCode, expiresAt) {
172
+ if (status !== 'pending') {
173
+ return { status, environment: this.profile.environment, loginUrl: null, message };
174
+ }
175
+ return {
176
+ status,
177
+ environment: this.profile.environment,
178
+ loginUrl,
179
+ ...(userCode ? { userCode } : {}),
180
+ ...(expiresAt ? { expiresAt } : {}),
181
+ message
182
+ };
183
+ }
184
+ async logout() {
185
+ const client = await this.client();
186
+ const accounts = await client.getAllAccounts();
187
+ await Promise.all(accounts.map((account) => client.signOut({ account })));
188
+ return accounts.length;
189
+ }
190
+ async status() {
191
+ const accounts = await (await this.client()).getAllAccounts();
192
+ const account = selectAccount(accounts, this.profile);
193
+ return account
194
+ ? { authenticated: true, environment: this.profile.environment, username: account.username }
195
+ : { authenticated: false, environment: this.profile.environment };
196
+ }
197
+ async acquireSilent() {
198
+ const client = await this.client();
199
+ const account = selectAccount(await client.getAllAccounts(), this.profile);
200
+ if (!account)
201
+ throw new LoginRequiredError(this.profile.environment);
202
+ try {
203
+ const result = await client.acquireTokenSilent({ account, scopes: [...this.profile.scopes] });
204
+ return validateAccessTokenResult(result, this.profile, this.now());
205
+ }
206
+ catch (error) {
207
+ if (error instanceof InteractionRequiredAuthError) {
208
+ throw new LoginRequiredError(this.profile.environment);
209
+ }
210
+ throw new DataBasinError('UNAUTHENTICATED', `The DataBasin ${this.profile.label} session could not be refreshed. Sign in again.`);
211
+ }
212
+ }
213
+ client() {
214
+ this.clientPromise ??= this.createClient().catch((error) => {
215
+ this.clientPromise = undefined;
216
+ const detail = error instanceof Error && error.message.includes('libsecret')
217
+ ? ' Install or unlock the system keyring and try again.'
218
+ : '';
219
+ throw new DataBasinError('UNAUTHENTICATED', `Secure DataBasin credential storage is unavailable.${detail}`);
220
+ });
221
+ return this.clientPromise;
222
+ }
223
+ }
224
+ function selectAccount(accounts, profile) {
225
+ return accounts.find((account) => accountMatchesProfile(account, profile));
226
+ }
227
+ function successPage(label) {
228
+ return `<!doctype html><html><body><h1>DataBasin sign-in complete</h1><p>You are signed in to ${label}. You can close this window.</p></body></html>`;
229
+ }
230
+ function errorPage() {
231
+ return '<!doctype html><html><body><h1>DataBasin sign-in failed</h1><p>Return to your assistant or terminal and try again.</p></body></html>';
232
+ }
233
+ export { createSecurePublicClient } from './credential-store.js';
234
+ //# sourceMappingURL=entra-auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entra-auth.js","sourceRoot":"","sources":["../src/entra-auth.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,3 +1,3 @@
1
1
  export { SUPPORTED_ENVIRONMENTS, type DataBasinEnvironment } from './config.js';
2
- export { TOOL_NAMES } from './tools.js';
2
+ export { LOCAL_AUTH_TOOL_NAMES } from './auth-tools.js';
3
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,KAAK,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAChF,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,KAAK,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAChF,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC"}
package/dist/index.js CHANGED
@@ -1,3 +1,3 @@
1
1
  export { SUPPORTED_ENVIRONMENTS } from './config.js';
2
- export { TOOL_NAMES } from './tools.js';
2
+ export { LOCAL_AUTH_TOOL_NAMES } from './auth-tools.js';
3
3
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAA6B,MAAM,aAAa,CAAC;AAChF,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAA6B,MAAM,aAAa,CAAC;AAChF,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC"}
@@ -12,6 +12,8 @@ export interface RawDeviceCodeResponse {
12
12
  readonly interval?: unknown;
13
13
  readonly message?: unknown;
14
14
  }
15
+ export declare function validateAuth0LoginUrl(value: unknown): string;
16
+ export declare function validateAssistantLoginUrl(value: unknown): string;
15
17
  export declare function projectDevicePrompt(response: RawDeviceCodeResponse): SafeDevicePrompt;
16
18
  export declare function validateDeviceLoginUrl(value: unknown): string;
17
19
  export declare function validateInteractiveLoginUrl(rawUrl: string, profile?: DataBasinProfile): string;
@@ -1 +1 @@
1
- {"version":3,"file":"login-url.d.ts","sourceRoot":"","sources":["../src/login-url.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEpD,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;IAClC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;CAC5B;AAkBD,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,qBAAqB,GAAG,gBAAgB,CAKrF;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAS7D;AAED,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,MAAM,CAgB9F"}
1
+ {"version":3,"file":"login-url.d.ts","sourceRoot":"","sources":["../src/login-url.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEpD,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;IAClC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;CAC5B;AAkBD,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAK5D;AAED,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAGhE;AAED,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,qBAAqB,GAAG,gBAAgB,CAKrF;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAS7D;AAED,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,MAAM,CAgB9F"}
package/dist/login-url.js CHANGED
@@ -13,6 +13,20 @@ const DEVICE_LOGIN_LOCATIONS = new Map([
13
13
  ['login.microsoft.com', new Set(['/device', '/device/'])]
14
14
  ]);
15
15
  const INTERACTIVE_SUFFIX = '/oauth2/v2.0/authorize';
16
+ export function validateAuth0LoginUrl(value) {
17
+ if (value !== 'https://databasin.us.auth0.com/activate') {
18
+ throw new Error('Refusing an unexpected DataBasin sign-in URL.');
19
+ }
20
+ return value;
21
+ }
22
+ export function validateAssistantLoginUrl(value) {
23
+ try {
24
+ return validateAuth0LoginUrl(value);
25
+ }
26
+ catch {
27
+ return validateDeviceLoginUrl(value);
28
+ }
29
+ }
16
30
  export function projectDevicePrompt(response) {
17
31
  const verificationUri = validateDeviceLoginUrl(response.verificationUri);
18
32
  const userCode = validateUserCode(response.userCode);
@@ -1 +1 @@
1
- {"version":3,"file":"login-url.js","sourceRoot":"","sources":["../src/login-url.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"login-url.js","sourceRoot":"","sources":["../src/login-url.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import { type DataBasinProfile } from './config.js';
2
+ export declare const MCP_ENDPOINT_PATH: "/mcp";
3
+ export declare function mcpEndpointForProfile(profile: DataBasinProfile): URL;
4
+ export declare function assertBuiltInProfile(profile: DataBasinProfile): void;
5
+ //# sourceMappingURL=mcp-endpoint.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-endpoint.d.ts","sourceRoot":"","sources":["../src/mcp-endpoint.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEhE,eAAO,MAAM,iBAAiB,EAAG,MAAe,CAAC;AAEjD,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,gBAAgB,GAAG,GAAG,CAOpE;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,gBAAgB,GAAG,IAAI,CASpE"}
@@ -0,0 +1,22 @@
1
+ import { getProfile } from './config.js';
2
+ export const MCP_ENDPOINT_PATH = '/mcp';
3
+ export function mcpEndpointForProfile(profile) {
4
+ assertBuiltInProfile(profile);
5
+ const endpoint = new URL(profile.apiBaseUrl);
6
+ endpoint.pathname = MCP_ENDPOINT_PATH;
7
+ endpoint.search = '';
8
+ endpoint.hash = '';
9
+ return endpoint;
10
+ }
11
+ export function assertBuiltInProfile(profile) {
12
+ const expected = getProfile(profile.environment);
13
+ const matches = profile.label === expected.label
14
+ && profile.apiBaseUrl === expected.apiBaseUrl
15
+ && profile.tenantId === expected.tenantId
16
+ && profile.clientId === expected.clientId
17
+ && profile.scopes.length === expected.scopes.length
18
+ && profile.scopes.every((scope, index) => scope === expected.scopes[index]);
19
+ if (!matches)
20
+ throw new Error('Only the built-in DataBasin production and NP profiles are permitted.');
21
+ }
22
+ //# sourceMappingURL=mcp-endpoint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-endpoint.js","sourceRoot":"","sources":["../src/mcp-endpoint.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAyB,MAAM,aAAa,CAAC;AAEhE,MAAM,CAAC,MAAM,iBAAiB,GAAG,MAAe,CAAC;AAEjD,MAAM,UAAU,qBAAqB,CAAC,OAAyB;IAC7D,oBAAoB,CAAC,OAAO,CAAC,CAAC;IAC9B,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAC7C,QAAQ,CAAC,QAAQ,GAAG,iBAAiB,CAAC;IACtC,QAAQ,CAAC,MAAM,GAAG,EAAE,CAAC;IACrB,QAAQ,CAAC,IAAI,GAAG,EAAE,CAAC;IACnB,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,OAAyB;IAC5D,MAAM,QAAQ,GAAG,UAAU,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IACjD,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,KAAK,QAAQ,CAAC,KAAK;WAC3C,OAAO,CAAC,UAAU,KAAK,QAAQ,CAAC,UAAU;WAC1C,OAAO,CAAC,QAAQ,KAAK,QAAQ,CAAC,QAAQ;WACtC,OAAO,CAAC,QAAQ,KAAK,QAAQ,CAAC,QAAQ;WACtC,OAAO,CAAC,MAAM,CAAC,MAAM,KAAK,QAAQ,CAAC,MAAM,CAAC,MAAM;WAChD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IAC9E,IAAI,CAAC,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,uEAAuE,CAAC,CAAC;AACzG,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { type Tool } from '@modelcontextprotocol/client';
2
+ import { McpServer } from '@modelcontextprotocol/server';
3
+ import type { RemoteMcp } from './remote-mcp.js';
4
+ export declare function registerRemoteTools(server: McpServer, remote: RemoteMcp, tools: readonly Tool[]): readonly string[];
5
+ //# sourceMappingURL=proxy-tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proxy-tools.d.ts","sourceRoot":"","sources":["../src/proxy-tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuC,KAAK,IAAI,EAAE,MAAM,8BAA8B,CAAC;AAC9F,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAIzD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,SAAS,EACjB,KAAK,EAAE,SAAS,IAAI,EAAE,GACrB,SAAS,MAAM,EAAE,CAQnB"}
@@ -0,0 +1,39 @@
1
+ import { fromJsonSchema } from '@modelcontextprotocol/client';
2
+ import { safeCorrelationId } from './correlation.js';
3
+ import { publicError } from './errors.js';
4
+ import { LOCAL_AUTH_TOOL_NAMES } from './auth-tools.js';
5
+ export function registerRemoteTools(server, remote, tools) {
6
+ const names = new Set(LOCAL_AUTH_TOOL_NAMES);
7
+ for (const tool of tools) {
8
+ if (names.has(tool.name))
9
+ throw new Error(`The remote MCP server advertised duplicate tool "${tool.name}".`);
10
+ names.add(tool.name);
11
+ registerRemoteTool(server, remote, tool);
12
+ }
13
+ return tools.map((tool) => tool.name);
14
+ }
15
+ function registerRemoteTool(server, remote, tool) {
16
+ const outputSchema = tool.outputSchema
17
+ ? fromJsonSchema(tool.outputSchema)
18
+ : undefined;
19
+ server.registerTool(tool.name, {
20
+ ...(tool.title ? { title: tool.title } : {}),
21
+ ...(tool.description ? { description: tool.description } : {}),
22
+ inputSchema: fromJsonSchema(tool.inputSchema),
23
+ ...(outputSchema ? { outputSchema } : {}),
24
+ ...(tool.annotations ? { annotations: tool.annotations } : {}),
25
+ ...(tool.icons ? { icons: [...tool.icons] } : {}),
26
+ ...(tool._meta ? { _meta: tool._meta } : {})
27
+ }, async (args, context) => {
28
+ try {
29
+ return await remote.callTool(tool, args, context.mcpReq.signal);
30
+ }
31
+ catch (error) {
32
+ const visible = publicError(error);
33
+ const { correlationId, ...publicFields } = visible;
34
+ const safe = { ...publicFields, correlationId: safeCorrelationId(correlationId) };
35
+ return { content: [{ type: 'text', text: JSON.stringify(safe) }], isError: true };
36
+ }
37
+ });
38
+ }
39
+ //# sourceMappingURL=proxy-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proxy-tools.js","sourceRoot":"","sources":["../src/proxy-tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import { type CallToolResult, type FetchLike, type Tool } from '@modelcontextprotocol/client';
2
+ import type { DataBasinProfile } from './config.js';
3
+ export declare const REMOTE_PROTOCOL_VERSION: "2026-07-28";
4
+ export interface RemoteMcp {
5
+ connect(): Promise<readonly Tool[]>;
6
+ callTool(tool: Tool, args: unknown, signal?: AbortSignal): Promise<CallToolResult>;
7
+ close(): Promise<void>;
8
+ }
9
+ export type RemoteAuth = Readonly<{
10
+ profile: DataBasinProfile;
11
+ getAccessToken(): Promise<string>;
12
+ }>;
13
+ export type OfficialRemoteMcpOptions = Readonly<{
14
+ auth: RemoteAuth;
15
+ fetchImpl?: FetchLike;
16
+ }>;
17
+ export declare class OfficialRemoteMcp implements RemoteMcp {
18
+ private readonly client;
19
+ private readonly transport;
20
+ private connected;
21
+ constructor(options: OfficialRemoteMcpOptions);
22
+ connect(): Promise<readonly Tool[]>;
23
+ callTool(tool: Tool, args: unknown, signal?: AbortSignal): Promise<CallToolResult>;
24
+ close(): Promise<void>;
25
+ }
26
+ export declare function authenticatedFetch(auth: RemoteAuth, fetchImpl: FetchLike): FetchLike;
27
+ //# sourceMappingURL=remote-mcp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remote-mcp.d.ts","sourceRoot":"","sources":["../src/remote-mcp.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,cAAc,EACnB,KAAK,SAAS,EACd,KAAK,IAAI,EACV,MAAM,8BAA8B,CAAC;AAEtC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAIpD,eAAO,MAAM,uBAAuB,EAAG,YAAqB,CAAC;AAE7D,MAAM,WAAW,SAAS;IACxB,OAAO,IAAI,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;IACpC,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;IACnF,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED,MAAM,MAAM,UAAU,GAAG,QAAQ,CAAC;IAChC,OAAO,EAAE,gBAAgB,CAAC;IAC1B,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;CACnC,CAAC,CAAC;AAEH,MAAM,MAAM,wBAAwB,GAAG,QAAQ,CAAC;IAC9C,IAAI,EAAE,UAAU,CAAC;IACjB,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB,CAAC,CAAC;AAEH,qBAAa,iBAAkB,YAAW,SAAS;IACjD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAgC;IAC1D,OAAO,CAAC,SAAS,CAAS;gBAEd,OAAO,EAAE,wBAAwB;IAevC,OAAO,IAAI,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC;IAazC,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,cAAc,CAAC;IAW5E,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAI7B;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,GAAG,SAAS,CAWpF"}
@@ -0,0 +1,70 @@
1
+ import { Client, StreamableHTTPClientTransport } from '@modelcontextprotocol/client';
2
+ import { randomUUID } from 'node:crypto';
3
+ import { mcpEndpointForProfile } from './mcp-endpoint.js';
4
+ import { VERSION } from './version.js';
5
+ export const REMOTE_PROTOCOL_VERSION = '2026-07-28';
6
+ export class OfficialRemoteMcp {
7
+ client;
8
+ transport;
9
+ connected = false;
10
+ constructor(options) {
11
+ const fetchImpl = authenticatedFetch(options.auth, options.fetchImpl ?? globalThis.fetch);
12
+ this.client = new Client({ name: 'databasin-mcp-client-proxy', version: VERSION }, {
13
+ enforceStrictCapabilities: true,
14
+ versionNegotiation: { mode: { pin: REMOTE_PROTOCOL_VERSION } }
15
+ });
16
+ this.transport = new StreamableHTTPClientTransport(mcpEndpointForProfile(options.auth.profile), {
17
+ fetch: fetchImpl,
18
+ onInsufficientScope: 'throw'
19
+ });
20
+ }
21
+ async connect() {
22
+ if (!this.connected) {
23
+ try {
24
+ await this.client.connect(this.transport);
25
+ this.connected = true;
26
+ }
27
+ catch (error) {
28
+ await this.close();
29
+ throw error;
30
+ }
31
+ }
32
+ return (await this.client.listTools(undefined, { cacheMode: 'refresh' })).tools;
33
+ }
34
+ callTool(tool, args, signal) {
35
+ return this.client.callTool({ name: tool.name, arguments: asArguments(args) }, {
36
+ toolDefinition: tool,
37
+ timeout: requestTimeout(tool),
38
+ ...(signal ? { signal } : {})
39
+ });
40
+ }
41
+ async close() {
42
+ this.connected = false;
43
+ await this.client.close();
44
+ }
45
+ }
46
+ export function authenticatedFetch(auth, fetchImpl) {
47
+ return async (url, init = {}) => {
48
+ const headers = new Headers(init.headers);
49
+ if (headers.get('Mcp-Method') === 'tools/call') {
50
+ headers.set('Authorization', `Bearer ${await auth.getAccessToken()}`);
51
+ headers.set('X-Correlation-Id', randomUUID());
52
+ }
53
+ else {
54
+ headers.delete('Authorization');
55
+ }
56
+ return fetchImpl(url, { ...init, redirect: 'error', headers });
57
+ };
58
+ }
59
+ function asArguments(value) {
60
+ return value && typeof value === 'object' && !Array.isArray(value)
61
+ ? value
62
+ : {};
63
+ }
64
+ function requestTimeout(tool) {
65
+ const value = tool._meta?.['com.databasin/requestTimeoutMs'];
66
+ return typeof value === 'number' && Number.isSafeInteger(value) && value >= 1_000 && value <= 2_000_000
67
+ ? value
68
+ : 60_000;
69
+ }
70
+ //# sourceMappingURL=remote-mcp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remote-mcp.js","sourceRoot":"","sources":["../src/remote-mcp.ts"],"names":[],"mappings":"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"}
package/dist/server.d.ts CHANGED
@@ -1,10 +1,10 @@
1
1
  import { McpServer } from '@modelcontextprotocol/server';
2
2
  import { type StdioServerHandle } from '@modelcontextprotocol/server/stdio';
3
- import { type DataBasinApi } from './api-client.js';
4
3
  import { type AssistantAuthResult } from './auth.js';
5
4
  import { type DataBasinEnvironment, type DataBasinProfile } from './config.js';
5
+ import { type RemoteMcp } from './remote-mcp.js';
6
6
  export declare const SERVER_NAME = "databasin-mcp";
7
- export declare const SERVER_VERSION = "0.2.0-beta.1";
7
+ export declare const SERVER_VERSION = "0.2.1";
8
8
  export declare const SERVER_INSTRUCTIONS: string;
9
9
  export interface CreateServerOptions {
10
10
  environment?: DataBasinEnvironment;
@@ -14,7 +14,7 @@ export interface CreateServerOptions {
14
14
  startLogin(): Promise<AssistantAuthResult>;
15
15
  getLoginStatus(): Promise<AssistantAuthResult>;
16
16
  };
17
- api?: DataBasinApi;
17
+ remote?: RemoteMcp;
18
18
  }
19
19
  export declare function createDataBasinServer(options?: CreateServerOptions): Promise<McpServer>;
20
20
  export declare function serveDataBasinStdio(options?: CreateServerOptions): StdioServerHandle;
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AACzD,OAAO,EAAc,KAAK,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AAExF,OAAO,EAAsB,KAAK,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACxE,OAAO,EAAe,KAAK,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAClE,OAAO,EAAc,KAAK,oBAAoB,EAAE,KAAK,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAI3F,eAAO,MAAM,WAAW,kBAAkB,CAAC;AAC3C,eAAO,MAAM,cAAc,iBAAU,CAAC;AAEtC,eAAO,MAAM,mBAAmB,QAOrB,CAAC;AAEZ,MAAM,WAAW,mBAAmB;IAClC,WAAW,CAAC,EAAE,oBAAoB,CAAC;IACnC,IAAI,CAAC,EAAE;QACL,OAAO,EAAE,gBAAgB,CAAC;QAC1B,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;QAClC,UAAU,IAAI,OAAO,CAAC,mBAAmB,CAAC,CAAC;QAC3C,cAAc,IAAI,OAAO,CAAC,mBAAmB,CAAC,CAAC;KAChD,CAAC;IACF,GAAG,CAAC,EAAE,YAAY,CAAC;CACpB;AAED,wBAAsB,qBAAqB,CAAC,OAAO,GAAE,mBAAwB,GAAG,OAAO,CAAC,SAAS,CAAC,CAUjG;AAED,wBAAgB,mBAAmB,CAAC,OAAO,GAAE,mBAAwB,GAAG,iBAAiB,CAiBxF"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AACzD,OAAO,EAAc,KAAK,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AAExF,OAAO,EAAe,KAAK,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAClE,OAAO,EAAc,KAAK,oBAAoB,EAAE,KAAK,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAG3F,OAAO,EAAqB,KAAK,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAGpE,eAAO,MAAM,WAAW,kBAAkB,CAAC;AAC3C,eAAO,MAAM,cAAc,UAAU,CAAC;AAEtC,eAAO,MAAM,mBAAmB,QAOrB,CAAC;AAEZ,MAAM,WAAW,mBAAmB;IAClC,WAAW,CAAC,EAAE,oBAAoB,CAAC;IACnC,IAAI,CAAC,EAAE;QACL,OAAO,EAAE,gBAAgB,CAAC;QAC1B,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;QAClC,UAAU,IAAI,OAAO,CAAC,mBAAmB,CAAC,CAAC;QAC3C,cAAc,IAAI,OAAO,CAAC,mBAAmB,CAAC,CAAC;KAChD,CAAC;IACF,MAAM,CAAC,EAAE,SAAS,CAAC;CACpB;AAED,wBAAsB,qBAAqB,CAAC,OAAO,GAAE,mBAAwB,GAAG,OAAO,CAAC,SAAS,CAAC,CAkBjG;AAED,wBAAgB,mBAAmB,CAAC,OAAO,GAAE,mBAAwB,GAAG,iBAAiB,CAiBxF"}
package/dist/server.js CHANGED
@@ -1,14 +1,15 @@
1
1
  import { McpServer } from '@modelcontextprotocol/server';
2
2
  import { serveStdio } from '@modelcontextprotocol/server/stdio';
3
- import { DataBasinApiClient } from './api-client.js';
4
3
  import { AuthManager } from './auth.js';
5
4
  import { getProfile } from './config.js';
6
- import { registerDataBasinTools } from './tools.js';
5
+ import { registerAuthTools } from './auth-tools.js';
6
+ import { registerRemoteTools } from './proxy-tools.js';
7
+ import { OfficialRemoteMcp } from './remote-mcp.js';
7
8
  import { VERSION } from './version.js';
8
9
  export const SERVER_NAME = 'databasin-mcp';
9
10
  export const SERVER_VERSION = VERSION;
10
11
  export const SERVER_INSTRUCTIONS = [
11
- 'Call databasin_auth_status first. If needed, call databasin_login and give the user its short-lived Microsoft URL and user code; credentials must be entered only on Microsoft\'s page, never in chat.',
12
+ 'Call databasin_auth_status first. If needed, call databasin_login and give the user its approved login URL and short-lived user code; credentials must be entered only on the sign-in page, never in chat.',
12
13
  'After authentication, call databasin_get_capabilities and databasin_get_context before doing work; use only the server-declared capabilities and resources visible to the signed-in user.',
13
14
  'For agent work, require an explicit institutionId and use only the metadata_readonly profile with an optional projectInternalId or connectorId.',
14
15
  'Work metadata-first and keep searches and result pages bounded.',
@@ -18,10 +19,19 @@ export const SERVER_INSTRUCTIONS = [
18
19
  export async function createDataBasinServer(options = {}) {
19
20
  const profile = getProfile(options.environment ?? 'prod');
20
21
  const auth = options.auth ?? new AuthManager(profile);
21
- const api = options.api ?? DataBasinApiClient.forProfile(auth);
22
- const server = new McpServer({ name: SERVER_NAME, version: SERVER_VERSION }, { instructions: SERVER_INSTRUCTIONS });
23
- registerDataBasinTools(server, { api, auth, profile });
24
- return server;
22
+ const remote = options.remote ?? new OfficialRemoteMcp({ auth });
23
+ try {
24
+ const remoteTools = await remote.connect();
25
+ const server = new McpServer({ name: SERVER_NAME, version: SERVER_VERSION }, { instructions: SERVER_INSTRUCTIONS });
26
+ registerAuthTools(server, auth);
27
+ registerRemoteTools(server, remote, remoteTools);
28
+ server.server.onclose = () => void remote.close().catch(() => undefined);
29
+ return server;
30
+ }
31
+ catch (error) {
32
+ await remote.close().catch(() => undefined);
33
+ throw error;
34
+ }
25
35
  }
26
36
  export function serveDataBasinStdio(options = {}) {
27
37
  const profile = getProfile(options.environment ?? 'prod');
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AACzD,OAAO,EAAE,UAAU,EAA0B,MAAM,oCAAoC,CAAC;AAExF,OAAO,EAAE,kBAAkB,EAAqB,MAAM,iBAAiB,CAAC;AACxE,OAAO,EAAE,WAAW,EAA4B,MAAM,WAAW,CAAC;AAClE,OAAO,EAAE,UAAU,EAAoD,MAAM,aAAa,CAAC;AAC3F,OAAO,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,MAAM,CAAC,MAAM,WAAW,GAAG,eAAe,CAAC;AAC3C,MAAM,CAAC,MAAM,cAAc,GAAG,OAAO,CAAC;AAEtC,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,wMAAwM;IACxM,2LAA2L;IAC3L,iJAAiJ;IACjJ,iEAAiE;IACjE,sQAAsQ;IACtQ,4EAA4E;CAC7E,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAaZ,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,UAA+B,EAAE;IAC3E,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,WAAW,IAAI,MAAM,CAAC,CAAC;IAC1D,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,IAAI,WAAW,CAAC,OAAO,CAAC,CAAC;IACtD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,kBAAkB,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAC/D,MAAM,MAAM,GAAG,IAAI,SAAS,CAC1B,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,cAAc,EAAE,EAC9C,EAAE,YAAY,EAAE,mBAAmB,EAAE,CACtC,CAAC;IACF,sBAAsB,CAAC,MAAM,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;IACvD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,UAA+B,EAAE;IACnE,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,WAAW,IAAI,MAAM,CAAC,CAAC;IAC1D,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,IAAI,WAAW,CAAC,OAAO,CAAC,CAAC;IACtD,MAAM,MAAM,GAAG,UAAU,CACvB,KAAK,IAAI,EAAE,CAAC,qBAAqB,CAAC,EAAE,GAAG,OAAO,EAAE,IAAI,EAAE,CAAC,EACvD;QACE,MAAM,EAAE,OAAO;QACf,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,iCAAiC,CAAC;QACtE,gBAAgB,EAAE,EAAE;KACrB,CACF,CAAC;IACF,OAAO;QACL,KAAK,EAAE,KAAK,IAAI,EAAE;YAChB,IAAI,IAAI,YAAY,WAAW;gBAAE,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC3D,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;QACvB,CAAC;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}