@databasin/mcp-client 0.1.0 → 0.2.0-beta.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 (84) hide show
  1. package/README.md +128 -61
  2. package/dist/abort.d.ts +5 -0
  3. package/dist/abort.d.ts.map +1 -0
  4. package/dist/abort.js +25 -0
  5. package/dist/abort.js.map +1 -0
  6. package/dist/api-client.d.ts +49 -34
  7. package/dist/api-client.d.ts.map +1 -1
  8. package/dist/api-client.js +142 -145
  9. package/dist/api-client.js.map +1 -1
  10. package/dist/api-contract.d.ts +59 -0
  11. package/dist/api-contract.d.ts.map +1 -0
  12. package/dist/api-contract.js +47 -0
  13. package/dist/api-contract.js.map +1 -0
  14. package/dist/api-profile.d.ts +5 -0
  15. package/dist/api-profile.d.ts.map +1 -0
  16. package/dist/api-profile.js +38 -0
  17. package/dist/api-profile.js.map +1 -0
  18. package/dist/api-request.d.ts +27 -0
  19. package/dist/api-request.d.ts.map +1 -0
  20. package/dist/api-request.js +147 -0
  21. package/dist/api-request.js.map +1 -0
  22. package/dist/api-response.d.ts +9 -0
  23. package/dist/api-response.d.ts.map +1 -0
  24. package/dist/api-response.js +206 -0
  25. package/dist/api-response.js.map +1 -0
  26. package/dist/auth.d.ts +22 -11
  27. package/dist/auth.d.ts.map +1 -1
  28. package/dist/auth.js +71 -71
  29. package/dist/auth.js.map +1 -1
  30. package/dist/browser.d.ts +20 -1
  31. package/dist/browser.d.ts.map +1 -1
  32. package/dist/browser.js +19 -17
  33. package/dist/browser.js.map +1 -1
  34. package/dist/cli.d.ts +31 -2
  35. package/dist/cli.d.ts.map +1 -1
  36. package/dist/cli.js +147 -67
  37. package/dist/cli.js.map +1 -1
  38. package/dist/config.js +2 -2
  39. package/dist/config.js.map +1 -1
  40. package/dist/correlation.d.ts +6 -0
  41. package/dist/correlation.d.ts.map +1 -0
  42. package/dist/correlation.js +15 -0
  43. package/dist/correlation.js.map +1 -0
  44. package/dist/credential-store.d.ts +21 -0
  45. package/dist/credential-store.d.ts.map +1 -0
  46. package/dist/credential-store.js +46 -0
  47. package/dist/credential-store.js.map +1 -0
  48. package/dist/errors.d.ts +17 -3
  49. package/dist/errors.d.ts.map +1 -1
  50. package/dist/errors.js +24 -6
  51. package/dist/errors.js.map +1 -1
  52. package/dist/login-url.d.ts +18 -0
  53. package/dist/login-url.d.ts.map +1 -0
  54. package/dist/login-url.js +82 -0
  55. package/dist/login-url.js.map +1 -0
  56. package/dist/safety.d.ts +4 -0
  57. package/dist/safety.d.ts.map +1 -1
  58. package/dist/safety.js +94 -10
  59. package/dist/safety.js.map +1 -1
  60. package/dist/schemas.d.ts +326 -49
  61. package/dist/schemas.d.ts.map +1 -1
  62. package/dist/schemas.js +242 -55
  63. package/dist/schemas.js.map +1 -1
  64. package/dist/server.d.ts +2 -4
  65. package/dist/server.d.ts.map +1 -1
  66. package/dist/server.js +17 -10
  67. package/dist/server.js.map +1 -1
  68. package/dist/token-validation.d.ts +5 -0
  69. package/dist/token-validation.d.ts.map +1 -0
  70. package/dist/token-validation.js +183 -0
  71. package/dist/token-validation.js.map +1 -0
  72. package/dist/tools.d.ts +12 -1
  73. package/dist/tools.d.ts.map +1 -1
  74. package/dist/tools.js +286 -75
  75. package/dist/tools.js.map +1 -1
  76. package/dist/version.d.ts +1 -1
  77. package/dist/version.d.ts.map +1 -1
  78. package/dist/version.js +1 -1
  79. package/dist/version.js.map +1 -1
  80. package/package.json +10 -6
  81. package/dist/mappers.d.ts +0 -56
  82. package/dist/mappers.d.ts.map +0 -1
  83. package/dist/mappers.js +0 -171
  84. package/dist/mappers.js.map +0 -1
@@ -1,154 +1,151 @@
1
- import { DataBasinError, LoginRequiredError } from './errors.js';
1
+ import { assertBuiltInProfile, fixedFacadeBaseUrl, normalizeTestOnlyBaseUrl } from './api-profile.js';
2
+ import { defaultRetryDelay, executeFacadeRequest } from './api-request.js';
3
+ import { parseRetryAfter } from './api-response.js';
4
+ import { DataBasinError } from './errors.js';
5
+ import { AgentRunEnvelopeSchema, AgentRunRequestSchema, AssistantEnvelopeSchema, CapabilitiesEnvelopeSchema, ContextEnvelopeSchema, GetSchemaEnvelopeSchema, GetSchemaInputSchema, QueryEnvelopeSchema, QueryLookupInputSchema, RunAssistantInputSchema, RunIdSchema, RunQueryInputSchema, SearchEnvelopeSchema, SearchInputSchema } from './schemas.js';
2
6
  export class DataBasinApiClient {
3
- baseUrl;
4
- auth;
5
- fetchImpl;
6
- maxResponseBytes;
7
- timeoutMs;
8
- constructor(options) {
9
- this.baseUrl = normalizeApiBase(options.baseUrl);
10
- this.auth = options.auth;
11
- this.fetchImpl = options.fetchImpl ?? fetch;
12
- this.maxResponseBytes = options.maxResponseBytes ?? 5_000_000;
13
- this.timeoutMs = options.timeoutMs ?? 30_000;
14
- }
15
- getProjects(signal) {
16
- return this.request('GET', '/my/projects', undefined, signal);
17
- }
18
- getAccessibleConnections(signal) {
19
- return this.request('GET', '/connections/accessible', undefined, signal);
20
- }
21
- search(input, signal) {
22
- const params = new URLSearchParams({ q: input.q, limit: String(input.limit) });
23
- if (input.projectId)
24
- params.set('projectId', input.projectId);
25
- if (input.organizationId !== undefined)
26
- params.set('orgId', String(input.organizationId));
27
- if (input.types?.length)
28
- params.set('types', input.types.join(','));
29
- return this.request('GET', `/search?${params.toString()}`, undefined, signal);
30
- }
31
- browseSchema(input, signal) {
32
- const params = new URLSearchParams({ connectorId: String(input.connectorId) });
33
- let path = '/databasin/catalogs';
34
- if (input.level !== 'catalogs')
35
- params.set('catalog', input.catalog);
36
- if (input.level === 'schemas')
37
- path = '/databasin/schemas';
38
- if (input.level === 'tables' || input.level === 'columns') {
39
- path = input.level === 'tables' ? '/databasin/tables' : '/databasin/columns';
40
- params.set('schema', input.schema);
41
- }
42
- if (input.level === 'columns')
43
- params.set('table', input.table);
44
- return this.request('GET', `${path}?${params.toString()}`, undefined, signal);
45
- }
46
- async getOperation(operationId, options, signal) {
47
- const encoded = encodeURIComponent(operationId);
48
- const status = await this.request('GET', `/databasin/query/${encoded}/status`, undefined, signal, true);
49
- const statusObject = asRecord(status);
50
- if (String(statusObject.status ?? '').toLowerCase() !== 'completed')
51
- return status;
52
- const params = new URLSearchParams({ offset: String(options.offset), limit: String(options.limit) });
53
- const results = await this.request('GET', `/databasin/query/${encoded}/results?${params.toString()}`, undefined, signal);
54
- return { ...statusObject, ...asRecord(results) };
55
- }
56
- cancelOperation(operationId, signal) {
57
- return this.request('POST', `/databasin/query/${encodeURIComponent(operationId)}/cancel`, undefined, signal);
58
- }
59
- async request(method, path, body, callerSignal, allowFailedOperation = false) {
60
- const accessToken = await this.auth.getAccessToken();
61
- const timeoutSignal = AbortSignal.timeout(this.timeoutMs);
62
- const signal = callerSignal ? AbortSignal.any([callerSignal, timeoutSignal]) : timeoutSignal;
63
- let response;
64
- try {
65
- response = await this.fetchImpl(`${this.baseUrl}${path}`, {
66
- method,
67
- signal,
68
- redirect: 'error',
69
- headers: {
70
- accept: 'application/json',
71
- authorization: `Bearer ${accessToken}`,
72
- ...(body === undefined ? {} : { 'content-type': 'application/json' })
73
- },
74
- ...(body === undefined ? {} : { body: JSON.stringify(body) })
75
- });
76
- }
77
- catch {
78
- throw new DataBasinError('DEPENDENCY_UNAVAILABLE', 'The DataBasin API could not be reached.');
79
- }
80
- const payload = await readJson(response, this.maxResponseBytes);
81
- if (response.ok)
82
- return payload;
83
- if (allowFailedOperation && response.status === 500 && isFailedOperation(payload))
84
- return payload;
85
- if (response.status === 401)
86
- throw new LoginRequiredError(this.auth.profile.environment);
87
- if (response.status === 403)
88
- throw new DataBasinError('POLICY_DENIED', 'DataBasin denied access to this resource.');
89
- if (response.status === 404)
90
- throw new DataBasinError('NOT_FOUND', 'The requested DataBasin resource was not found.');
91
- if (response.status >= 500)
92
- throw new DataBasinError('DEPENDENCY_UNAVAILABLE', 'The DataBasin API is temporarily unavailable.');
93
- throw new DataBasinError('OPERATION_FAILED', `The DataBasin API rejected the request with HTTP ${response.status}.`);
7
+ transport;
8
+ constructor(transport) {
9
+ this.transport = transport;
10
+ }
11
+ static forProfile(auth) {
12
+ assertBuiltInProfile(auth.profile);
13
+ return new DataBasinApiClient(transportOptions(fixedFacadeBaseUrl(auth.profile.environment), auth));
14
+ }
15
+ static createForTests(options) {
16
+ return new DataBasinApiClient({
17
+ ...transportOptions(normalizeTestOnlyBaseUrl(options.testOnlyBaseUrl), options.auth),
18
+ fetchImpl: options.fetchImpl,
19
+ maxResponseBytes: options.maxResponseBytes ?? 5_000_000,
20
+ timeoutMs: options.timeoutMs ?? 30_000,
21
+ sleepImpl: options.sleepImpl ?? defaultRetryDelay,
22
+ now: options.now ?? Date.now
23
+ });
24
+ }
25
+ getCapabilities(signal) {
26
+ return this.execute({ endpoint: 'capabilities', schema: CapabilitiesEnvelopeSchema, signal });
27
+ }
28
+ getContext(signal) {
29
+ return this.execute({ endpoint: 'context', schema: ContextEnvelopeSchema, signal });
30
+ }
31
+ async search(input, signal) {
32
+ const request = SearchInputSchema.safeParse(input);
33
+ if (!request.success)
34
+ throw invalidArgument('search');
35
+ return this.execute({ endpoint: 'search', schema: SearchEnvelopeSchema, body: request.data, signal });
36
+ }
37
+ async getSchema(input, signal) {
38
+ const request = GetSchemaInputSchema.safeParse(input);
39
+ if (!request.success)
40
+ throw invalidArgument('schema');
41
+ return this.execute({
42
+ endpoint: 'schema',
43
+ schema: GetSchemaEnvelopeSchema,
44
+ query: schemaQuery(request.data),
45
+ signal
46
+ });
47
+ }
48
+ async createAgentRun(input, idempotencyKey, signal) {
49
+ assertUuid(idempotencyKey, 'idempotency key');
50
+ const request = AgentRunRequestSchema.safeParse(input);
51
+ if (!request.success)
52
+ throw invalidArgument('agent run');
53
+ return this.execute({
54
+ endpoint: 'createAgentRun',
55
+ schema: AgentRunEnvelopeSchema,
56
+ body: request.data,
57
+ signal,
58
+ headers: { 'idempotency-key': idempotencyKey }
59
+ });
60
+ }
61
+ async getAgentRun(runId, signal) {
62
+ assertRunId(runId);
63
+ return this.execute({ endpoint: 'getAgentRun', schema: AgentRunEnvelopeSchema, runId, signal });
64
+ }
65
+ async cancelAgentRun(runId, idempotencyKey, reason, signal) {
66
+ assertUuid(idempotencyKey, 'idempotency key');
67
+ assertRunId(runId);
68
+ return this.execute({
69
+ endpoint: 'cancelAgentRun',
70
+ schema: AgentRunEnvelopeSchema,
71
+ runId,
72
+ body: { reason },
73
+ signal,
74
+ headers: { 'idempotency-key': idempotencyKey }
75
+ });
76
+ }
77
+ async runQuery(input, signal) {
78
+ const request = RunQueryInputSchema.safeParse(input);
79
+ if (!request.success)
80
+ throw invalidArgument('query');
81
+ return this.execute({ endpoint: 'runQuery', schema: QueryEnvelopeSchema, body: request.data, signal });
82
+ }
83
+ async getQueryStatus(queryId, signal) {
84
+ assertQueryId(queryId);
85
+ return this.execute({ endpoint: 'getQueryStatus', schema: QueryEnvelopeSchema, queryId, signal });
86
+ }
87
+ async cancelQuery(queryId, signal) {
88
+ assertQueryId(queryId);
89
+ return this.execute({ endpoint: 'cancelQuery', schema: QueryEnvelopeSchema, queryId, signal });
90
+ }
91
+ async runAssistant(input, signal) {
92
+ const request = RunAssistantInputSchema.safeParse(input);
93
+ if (!request.success)
94
+ throw invalidArgument('assistant');
95
+ return this.execute({
96
+ endpoint: 'assistant',
97
+ schema: AssistantEnvelopeSchema,
98
+ body: request.data,
99
+ signal,
100
+ timeoutMs: ASSISTANT_REQUEST_TIMEOUT_MS
101
+ });
102
+ }
103
+ execute(request) {
104
+ return executeFacadeRequest(this.transport, request);
94
105
  }
95
106
  }
96
- export function normalizeApiBase(raw) {
97
- const url = new URL(raw);
98
- if (url.protocol !== 'https:') {
99
- throw new Error('The DataBasin API URL must use HTTPS.');
100
- }
101
- url.search = '';
102
- url.hash = '';
103
- url.username = '';
104
- url.password = '';
105
- const path = url.pathname.replace(/\/+$/u, '');
106
- url.pathname = path.endsWith('/api') ? path : `${path}/api`;
107
- return url.toString().replace(/\/$/u, '');
107
+ export function createDataBasinApiClientForTests(options) {
108
+ return DataBasinApiClient.createForTests(options);
108
109
  }
109
- async function readJson(response, maxBytes) {
110
- const contentLength = Number(response.headers.get('content-length'));
111
- if (Number.isFinite(contentLength) && contentLength > maxBytes) {
112
- throw new DataBasinError('POLICY_DENIED', 'The DataBasin API response exceeded the size limit.');
113
- }
114
- if (!response.body)
115
- return null;
116
- const reader = response.body.getReader();
117
- const chunks = [];
118
- let total = 0;
119
- while (true) {
120
- const { done, value } = await reader.read();
121
- if (done)
122
- break;
123
- total += value.byteLength;
124
- if (total > maxBytes) {
125
- await reader.cancel();
126
- throw new DataBasinError('POLICY_DENIED', 'The DataBasin API response exceeded the size limit.');
127
- }
128
- chunks.push(value);
129
- }
130
- if (total === 0)
131
- return null;
132
- const bytes = new Uint8Array(total);
133
- let offset = 0;
134
- for (const chunk of chunks) {
135
- bytes.set(chunk, offset);
136
- offset += chunk.byteLength;
137
- }
138
- try {
139
- return JSON.parse(new TextDecoder().decode(bytes));
140
- }
141
- catch {
142
- if (response.ok)
143
- throw new DataBasinError('OPERATION_FAILED', 'The DataBasin API returned an invalid response.');
144
- return null;
110
+ export { fixedFacadeBaseUrl, parseRetryAfter };
111
+ // The assistant call runs synchronously and the facade caps its own wall clock
112
+ // at ~5 minutes, always returning a definitive envelope rather than hanging --
113
+ // this is deliberately longer than the shared 30s default so a legitimate
114
+ // in-progress run is never cut off from the client side first.
115
+ export const ASSISTANT_REQUEST_TIMEOUT_MS = 5 * 60_000 + 60_000;
116
+ function transportOptions(baseUrl, auth) {
117
+ return {
118
+ baseUrl,
119
+ getAccessToken: () => auth.getAccessToken(),
120
+ maxResponseBytes: 5_000_000,
121
+ timeoutMs: 30_000,
122
+ sleepImpl: defaultRetryDelay,
123
+ now: Date.now
124
+ };
125
+ }
126
+ function schemaQuery(input) {
127
+ const query = new URLSearchParams({ connectorId: input.connectorId, level: input.level });
128
+ for (const key of ['catalog', 'schema', 'table']) {
129
+ const value = input[key];
130
+ if (value !== undefined)
131
+ query.set(key, value);
145
132
  }
133
+ return query;
134
+ }
135
+ function assertRunId(runId) {
136
+ if (!RunIdSchema.safeParse(runId).success)
137
+ throw invalidArgument('agent run ID');
146
138
  }
147
- function asRecord(value) {
148
- return value && typeof value === 'object' && !Array.isArray(value) ? value : {};
139
+ function assertQueryId(queryId) {
140
+ if (!QueryLookupInputSchema.shape.queryId.safeParse(queryId).success)
141
+ throw invalidArgument('query ID');
142
+ }
143
+ function assertUuid(value, label) {
144
+ if (!/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/iu.test(value)) {
145
+ throw new DataBasinError('INVALID_ARGUMENT', `The ${label} must be a UUID.`);
146
+ }
149
147
  }
150
- function isFailedOperation(value) {
151
- const record = asRecord(value);
152
- return record.status === 'failed' && typeof record.queryId === 'string' && record.queryId.length > 0;
148
+ function invalidArgument(subject) {
149
+ return new DataBasinError('INVALID_ARGUMENT', `The DataBasin ${subject} request was invalid.`);
153
150
  }
154
151
  //# sourceMappingURL=api-client.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"api-client.js","sourceRoot":"","sources":["../src/api-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"api-client.js","sourceRoot":"","sources":["../src/api-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ export declare const MCP_FACADE_ROOT: "/api/v1/mcp";
2
+ export declare const MCP_ENDPOINTS: Readonly<{
3
+ readonly capabilities: Readonly<{
4
+ method: "GET";
5
+ path: "/capabilities";
6
+ }>;
7
+ readonly context: Readonly<{
8
+ method: "GET";
9
+ path: "/context";
10
+ }>;
11
+ readonly search: Readonly<{
12
+ method: "POST";
13
+ path: "/search";
14
+ }>;
15
+ readonly schema: Readonly<{
16
+ method: "GET";
17
+ path: "/schema";
18
+ }>;
19
+ readonly createAgentRun: Readonly<{
20
+ method: "POST";
21
+ path: "/agent-runs";
22
+ }>;
23
+ readonly getAgentRun: Readonly<{
24
+ method: "GET";
25
+ path: "/agent-runs/:runId";
26
+ }>;
27
+ readonly cancelAgentRun: Readonly<{
28
+ method: "POST";
29
+ path: "/agent-runs/:runId/cancel";
30
+ }>;
31
+ readonly runQuery: Readonly<{
32
+ method: "POST";
33
+ path: "/query";
34
+ }>;
35
+ readonly getQueryStatus: Readonly<{
36
+ method: "GET";
37
+ path: "/query/:queryId";
38
+ }>;
39
+ readonly cancelQuery: Readonly<{
40
+ method: "POST";
41
+ path: "/query/:queryId/cancel";
42
+ }>;
43
+ readonly assistant: Readonly<{
44
+ method: "POST";
45
+ path: "/assistant";
46
+ }>;
47
+ }>;
48
+ export type McpHttpMethod = 'GET' | 'POST';
49
+ export type McpEndpointName = keyof typeof MCP_ENDPOINTS;
50
+ export interface ResolvedMcpEndpoint {
51
+ method: McpHttpMethod;
52
+ path: string;
53
+ }
54
+ export declare function resolveMcpEndpoint(name: McpEndpointName, options?: {
55
+ runId?: string | undefined;
56
+ queryId?: string | undefined;
57
+ query?: URLSearchParams | undefined;
58
+ }): ResolvedMcpEndpoint;
59
+ //# sourceMappingURL=api-contract.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-contract.d.ts","sourceRoot":"","sources":["../src/api-contract.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,eAAe,EAAG,aAAsB,CAAC;AAEtD,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAYf,CAAC;AAEZ,MAAM,MAAM,aAAa,GAAG,KAAK,GAAG,MAAM,CAAC;AAC3C,MAAM,MAAM,eAAe,GAAG,MAAM,OAAO,aAAa,CAAC;AAEzD,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,aAAa,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,eAAe,EACrB,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAAC,KAAK,CAAC,EAAE,eAAe,GAAG,SAAS,CAAA;CAAO,GAC9G,mBAAmB,CAMrB"}
@@ -0,0 +1,47 @@
1
+ export const MCP_FACADE_ROOT = '/api/v1/mcp';
2
+ export const MCP_ENDPOINTS = Object.freeze({
3
+ capabilities: Object.freeze({ method: 'GET', path: '/capabilities' }),
4
+ context: Object.freeze({ method: 'GET', path: '/context' }),
5
+ search: Object.freeze({ method: 'POST', path: '/search' }),
6
+ schema: Object.freeze({ method: 'GET', path: '/schema' }),
7
+ createAgentRun: Object.freeze({ method: 'POST', path: '/agent-runs' }),
8
+ getAgentRun: Object.freeze({ method: 'GET', path: '/agent-runs/:runId' }),
9
+ cancelAgentRun: Object.freeze({ method: 'POST', path: '/agent-runs/:runId/cancel' }),
10
+ runQuery: Object.freeze({ method: 'POST', path: '/query' }),
11
+ getQueryStatus: Object.freeze({ method: 'GET', path: '/query/:queryId' }),
12
+ cancelQuery: Object.freeze({ method: 'POST', path: '/query/:queryId/cancel' }),
13
+ assistant: Object.freeze({ method: 'POST', path: '/assistant' })
14
+ });
15
+ export function resolveMcpEndpoint(name, options = {}) {
16
+ const endpoint = MCP_ENDPOINTS[name];
17
+ const path = resolvePath(name, endpoint.path, options.runId, options.queryId);
18
+ if (options.query && name !== 'schema')
19
+ throw new Error('Only the schema endpoint accepts query parameters.');
20
+ const suffix = options.query?.toString();
21
+ return { method: endpoint.method, path: suffix ? `${path}?${suffix}` : path };
22
+ }
23
+ function fillPathId(template, placeholder, value) {
24
+ const encoded = encodeURIComponent(value);
25
+ if (!encoded || encoded === '.' || encoded === '..') {
26
+ throw new Error('The DataBasin resource ID is invalid.');
27
+ }
28
+ return template.replace(placeholder, encoded);
29
+ }
30
+ function resolvePath(name, path, runId, queryId) {
31
+ if (name === 'getAgentRun' || name === 'cancelAgentRun') {
32
+ if (runId === undefined)
33
+ throw new Error(`The ${name} endpoint requires a run ID.`);
34
+ return fillPathId(path, ':runId', runId);
35
+ }
36
+ if (name === 'getQueryStatus' || name === 'cancelQuery') {
37
+ if (queryId === undefined)
38
+ throw new Error(`The ${name} endpoint requires a query ID.`);
39
+ return fillPathId(path, ':queryId', queryId);
40
+ }
41
+ if (runId !== undefined)
42
+ throw new Error(`The ${name} endpoint does not accept a run ID.`);
43
+ if (queryId !== undefined)
44
+ throw new Error(`The ${name} endpoint does not accept a query ID.`);
45
+ return path;
46
+ }
47
+ //# sourceMappingURL=api-contract.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-contract.js","sourceRoot":"","sources":["../src/api-contract.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import { type DataBasinEnvironment, type DataBasinProfile } from './config.js';
2
+ export declare function fixedFacadeBaseUrl(environment: DataBasinEnvironment): string;
3
+ export declare function assertBuiltInProfile(profile: DataBasinProfile): void;
4
+ export declare function normalizeTestOnlyBaseUrl(raw: string): string;
5
+ //# sourceMappingURL=api-profile.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-profile.d.ts","sourceRoot":"","sources":["../src/api-profile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,oBAAoB,EAAE,KAAK,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAQ3F,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,oBAAoB,GAAG,MAAM,CAI5E;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,gBAAgB,GAAG,IAAI,CASpE;AAED,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAY5D"}
@@ -0,0 +1,38 @@
1
+ import { getProfile } from './config.js';
2
+ import { MCP_FACADE_ROOT } from './api-contract.js';
3
+ const FIXED_FACADE_ORIGINS = Object.freeze({
4
+ prod: 'https://databasin.cloud',
5
+ np: 'https://databasin-ui-np.grayriver-813df174.centralus.azurecontainerapps.io'
6
+ });
7
+ export function fixedFacadeBaseUrl(environment) {
8
+ const origin = FIXED_FACADE_ORIGINS[environment];
9
+ if (!origin)
10
+ throw new Error('Only the built-in DataBasin production and NP profiles are permitted.');
11
+ return `${origin}${MCP_FACADE_ROOT}`;
12
+ }
13
+ export function assertBuiltInProfile(profile) {
14
+ const expected = getProfile(profile.environment);
15
+ const matches = profile.label === expected.label
16
+ && profile.apiBaseUrl === FIXED_FACADE_ORIGINS[profile.environment]
17
+ && profile.tenantId === expected.tenantId
18
+ && profile.clientId === expected.clientId
19
+ && profile.scopes.length === expected.scopes.length
20
+ && profile.scopes.every((scope, index) => scope === expected.scopes[index]);
21
+ if (!matches)
22
+ throw new Error('Only the built-in DataBasin production and NP profiles are permitted.');
23
+ }
24
+ export function normalizeTestOnlyBaseUrl(raw) {
25
+ const url = new URL(raw);
26
+ const loopback = url.hostname === 'localhost' || url.hostname === '127.0.0.1' || url.hostname === '::1';
27
+ if (url.protocol !== 'https:' && !(url.protocol === 'http:' && loopback)) {
28
+ throw new Error('The test-only DataBasin URL must use HTTPS or loopback HTTP.');
29
+ }
30
+ if (url.username || url.password)
31
+ throw new Error('The test-only DataBasin URL must not contain credentials.');
32
+ url.search = '';
33
+ url.hash = '';
34
+ const path = url.pathname.replace(/\/+$/u, '');
35
+ url.pathname = path.endsWith(MCP_FACADE_ROOT) ? path : `${path}${MCP_FACADE_ROOT}`;
36
+ return url.toString().replace(/\/$/u, '');
37
+ }
38
+ //# sourceMappingURL=api-profile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-profile.js","sourceRoot":"","sources":["../src/api-profile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAoD,MAAM,aAAa,CAAC;AAC3F,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,MAAM,oBAAoB,GAAmD,MAAM,CAAC,MAAM,CAAC;IACzF,IAAI,EAAE,yBAAyB;IAC/B,EAAE,EAAE,4EAA4E;CACjF,CAAC,CAAC;AAEH,MAAM,UAAU,kBAAkB,CAAC,WAAiC;IAClE,MAAM,MAAM,GAAG,oBAAoB,CAAC,WAAW,CAAC,CAAC;IACjD,IAAI,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,uEAAuE,CAAC,CAAC;IACtG,OAAO,GAAG,MAAM,GAAG,eAAe,EAAE,CAAC;AACvC,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,oBAAoB,CAAC,OAAO,CAAC,WAAW,CAAC;WAChE,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;AAED,MAAM,UAAU,wBAAwB,CAAC,GAAW;IAClD,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;IACzB,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,KAAK,WAAW,IAAI,GAAG,CAAC,QAAQ,KAAK,WAAW,IAAI,GAAG,CAAC,QAAQ,KAAK,KAAK,CAAC;IACxG,IAAI,GAAG,CAAC,QAAQ,KAAK,QAAQ,IAAI,CAAC,CAAC,GAAG,CAAC,QAAQ,KAAK,OAAO,IAAI,QAAQ,CAAC,EAAE,CAAC;QACzE,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAC;IAClF,CAAC;IACD,IAAI,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAC;IAC/G,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC;IAChB,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC;IACd,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAC/C,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,eAAe,EAAE,CAAC;IACnF,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AAC5C,CAAC"}
@@ -0,0 +1,27 @@
1
+ import type { ZodType } from 'zod';
2
+ import { type McpEndpointName } from './api-contract.js';
3
+ import type { SuccessEnvelope } from './schemas.js';
4
+ export type Sleep = (milliseconds: number, signal?: AbortSignal) => Promise<void>;
5
+ export interface RequestTransportOptions {
6
+ baseUrl: string;
7
+ getAccessToken: () => Promise<string>;
8
+ fetchImpl?: typeof fetch;
9
+ maxResponseBytes: number;
10
+ timeoutMs: number;
11
+ sleepImpl: Sleep;
12
+ now: () => number;
13
+ }
14
+ export interface FacadeRequest<T> {
15
+ endpoint: McpEndpointName;
16
+ schema: ZodType<SuccessEnvelope<T>>;
17
+ runId?: string | undefined;
18
+ queryId?: string | undefined;
19
+ query?: URLSearchParams | undefined;
20
+ body?: unknown;
21
+ signal?: AbortSignal | undefined;
22
+ headers?: Record<string, string> | undefined;
23
+ timeoutMs?: number | undefined;
24
+ }
25
+ export declare function executeFacadeRequest<T>(options: RequestTransportOptions, request: FacadeRequest<T>): Promise<SuccessEnvelope<T>>;
26
+ export declare const defaultRetryDelay: Sleep;
27
+ //# sourceMappingURL=api-request.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-request.d.ts","sourceRoot":"","sources":["../src/api-request.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,KAAK,CAAC;AAGnC,OAAO,EAAsB,KAAK,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAY7E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAEpD,MAAM,MAAM,KAAK,GAAG,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAElF,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IACtC,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,KAAK,CAAC;IACjB,GAAG,EAAE,MAAM,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,aAAa,CAAC,CAAC;IAC9B,QAAQ,EAAE,eAAe,CAAC;IAC1B,MAAM,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;IACpC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,KAAK,CAAC,EAAE,eAAe,GAAG,SAAS,CAAC;IACpC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC;IAI7C,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAChC;AAOD,wBAAsB,oBAAoB,CAAC,CAAC,EAC1C,OAAO,EAAE,uBAAuB,EAChC,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC,GACxB,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAsB7B;AAED,eAAO,MAAM,iBAAiB,EAAE,KAAsB,CAAC"}