@databasin/mcp-client 0.1.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 (54) hide show
  1. package/README.md +108 -0
  2. package/dist/api-client.d.ts +43 -0
  3. package/dist/api-client.d.ts.map +1 -0
  4. package/dist/api-client.js +154 -0
  5. package/dist/api-client.js.map +1 -0
  6. package/dist/auth.d.ts +73 -0
  7. package/dist/auth.d.ts.map +1 -0
  8. package/dist/auth.js +234 -0
  9. package/dist/auth.js.map +1 -0
  10. package/dist/browser.d.ts +2 -0
  11. package/dist/browser.d.ts.map +1 -0
  12. package/dist/browser.js +34 -0
  13. package/dist/browser.js.map +1 -0
  14. package/dist/cli.d.ts +11 -0
  15. package/dist/cli.d.ts.map +1 -0
  16. package/dist/cli.js +131 -0
  17. package/dist/cli.js.map +1 -0
  18. package/dist/config.d.ts +14 -0
  19. package/dist/config.d.ts.map +1 -0
  20. package/dist/config.js +45 -0
  21. package/dist/config.js.map +1 -0
  22. package/dist/errors.d.ts +13 -0
  23. package/dist/errors.d.ts.map +1 -0
  24. package/dist/errors.js +20 -0
  25. package/dist/errors.js.map +1 -0
  26. package/dist/index.d.ts +3 -0
  27. package/dist/index.d.ts.map +1 -0
  28. package/dist/index.js +3 -0
  29. package/dist/index.js.map +1 -0
  30. package/dist/mappers.d.ts +56 -0
  31. package/dist/mappers.d.ts.map +1 -0
  32. package/dist/mappers.js +171 -0
  33. package/dist/mappers.js.map +1 -0
  34. package/dist/safety.d.ts +3 -0
  35. package/dist/safety.d.ts.map +1 -0
  36. package/dist/safety.js +27 -0
  37. package/dist/safety.js.map +1 -0
  38. package/dist/schemas.d.ts +154 -0
  39. package/dist/schemas.d.ts.map +1 -0
  40. package/dist/schemas.js +102 -0
  41. package/dist/schemas.js.map +1 -0
  42. package/dist/server.d.ts +23 -0
  43. package/dist/server.d.ts.map +1 -0
  44. package/dist/server.js +35 -0
  45. package/dist/server.js.map +1 -0
  46. package/dist/tools.d.ts +17 -0
  47. package/dist/tools.d.ts.map +1 -0
  48. package/dist/tools.js +117 -0
  49. package/dist/tools.js.map +1 -0
  50. package/dist/version.d.ts +2 -0
  51. package/dist/version.d.ts.map +1 -0
  52. package/dist/version.js +2 -0
  53. package/dist/version.js.map +1 -0
  54. package/package.json +61 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"AAEA,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAsBrE"}
@@ -0,0 +1,34 @@
1
+ import { spawn } from 'node:child_process';
2
+ export async function openSystemBrowser(rawUrl) {
3
+ const url = new URL(rawUrl);
4
+ if (url.protocol !== 'https:' || url.hostname !== 'login.microsoftonline.com') {
5
+ throw new Error('Refusing to open an unexpected OAuth URL.');
6
+ }
7
+ const command = browserCommand(url.toString());
8
+ await new Promise((resolve) => {
9
+ const child = spawn(command.executable, command.args, {
10
+ detached: true,
11
+ stdio: 'ignore',
12
+ windowsHide: true
13
+ });
14
+ child.once('spawn', () => {
15
+ child.unref();
16
+ resolve();
17
+ });
18
+ child.once('error', () => {
19
+ process.stderr.write(`Open this URL to sign in to DataBasin:\n${url.toString()}\n`);
20
+ resolve();
21
+ });
22
+ });
23
+ }
24
+ function browserCommand(url) {
25
+ switch (process.platform) {
26
+ case 'darwin':
27
+ return { executable: 'open', args: [url] };
28
+ case 'win32':
29
+ return { executable: 'rundll32.exe', args: ['url.dll,FileProtocolHandler', url] };
30
+ default:
31
+ return { executable: 'xdg-open', args: [url] };
32
+ }
33
+ }
34
+ //# sourceMappingURL=browser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser.js","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAE3C,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,MAAc;IACpD,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;IAC5B,IAAI,GAAG,CAAC,QAAQ,KAAK,QAAQ,IAAI,GAAG,CAAC,QAAQ,KAAK,2BAA2B,EAAE,CAAC;QAC9E,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;IAC/D,CAAC;IAED,MAAM,OAAO,GAAG,cAAc,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC/C,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;QAClC,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,IAAI,EAAE;YACpD,QAAQ,EAAE,IAAI;YACd,KAAK,EAAE,QAAQ;YACf,WAAW,EAAE,IAAI;SAClB,CAAC,CAAC;QACH,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE;YACvB,KAAK,CAAC,KAAK,EAAE,CAAC;YACd,OAAO,EAAE,CAAC;QACZ,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE;YACvB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,2CAA2C,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;YACpF,OAAO,EAAE,CAAC;QACZ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,cAAc,CAAC,GAAW;IACjC,QAAQ,OAAO,CAAC,QAAQ,EAAE,CAAC;QACzB,KAAK,QAAQ;YACX,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;QAC7C,KAAK,OAAO;YACV,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,6BAA6B,EAAE,GAAG,CAAC,EAAE,CAAC;QACpF;YACE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;IACnD,CAAC;AACH,CAAC"}
package/dist/cli.d.ts ADDED
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/env node
2
+ import { type DataBasinEnvironment } from './config.js';
3
+ type Command = 'serve' | 'login' | 'logout' | 'status' | 'help' | 'version';
4
+ export interface CliOptions {
5
+ command: Command;
6
+ environment: DataBasinEnvironment;
7
+ }
8
+ export declare function parseCliArgs(args: string[]): CliOptions;
9
+ export declare function runCli(args: string[]): Promise<void>;
10
+ export {};
11
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAKA,OAAO,EAAkC,KAAK,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAIxF,KAAK,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,CAAC;AAE5E,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,oBAAoB,CAAC;CACnC;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,CAoCvD;AAED,wBAAsB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA4C1D"}
package/dist/cli.js ADDED
@@ -0,0 +1,131 @@
1
+ #!/usr/bin/env node
2
+ import { realpathSync } from 'node:fs';
3
+ import { fileURLToPath } from 'node:url';
4
+ import { getProfile, resolveEnvironment } from './config.js';
5
+ import { DataBasinError } from './errors.js';
6
+ import { VERSION } from './version.js';
7
+ export function parseCliArgs(args) {
8
+ let command = 'serve';
9
+ let commandSet = false;
10
+ let environmentValue;
11
+ for (let index = 0; index < args.length; index += 1) {
12
+ const argument = args[index];
13
+ if (argument === '--environment' || argument === '-e') {
14
+ environmentValue = args[index + 1];
15
+ if (!environmentValue)
16
+ throw new Error(`${argument} requires prod or np.`);
17
+ index += 1;
18
+ continue;
19
+ }
20
+ if (argument.startsWith('--environment=')) {
21
+ environmentValue = argument.slice('--environment='.length);
22
+ continue;
23
+ }
24
+ if (argument === '--help' || argument === '-h') {
25
+ command = 'help';
26
+ commandSet = true;
27
+ continue;
28
+ }
29
+ if (argument === '--version' || argument === '-v') {
30
+ command = 'version';
31
+ commandSet = true;
32
+ continue;
33
+ }
34
+ if (!commandSet && isCommand(argument)) {
35
+ command = argument;
36
+ commandSet = true;
37
+ continue;
38
+ }
39
+ throw new Error(`Unknown argument "${argument}".`);
40
+ }
41
+ return { command, environment: resolveEnvironment(environmentValue) };
42
+ }
43
+ export async function runCli(args) {
44
+ const options = parseCliArgs(args);
45
+ if (options.command === 'help') {
46
+ process.stdout.write(helpText());
47
+ return;
48
+ }
49
+ if (options.command === 'version') {
50
+ process.stdout.write(`${VERSION}\n`);
51
+ return;
52
+ }
53
+ const profile = getProfile(options.environment);
54
+ if (options.command === 'serve') {
55
+ const { serveDataBasinStdio } = await import('./server.js');
56
+ const handle = serveDataBasinStdio({ profile });
57
+ let closing = false;
58
+ const close = async () => {
59
+ if (closing)
60
+ return;
61
+ closing = true;
62
+ await handle.close();
63
+ };
64
+ process.once('SIGINT', () => void close());
65
+ process.once('SIGTERM', () => void close());
66
+ return;
67
+ }
68
+ const { AuthManager } = await import('./auth.js');
69
+ const auth = new AuthManager(profile);
70
+ if (options.command === 'login') {
71
+ const status = await auth.login();
72
+ process.stdout.write(`Signed in to DataBasin ${profile.label}${status.username ? ` as ${status.username}` : ''}.\n`);
73
+ return;
74
+ }
75
+ if (options.command === 'logout') {
76
+ const count = await auth.logout();
77
+ process.stdout.write(count > 0
78
+ ? `Signed out of DataBasin ${profile.label}.\n`
79
+ : `No DataBasin ${profile.label} session was stored.\n`);
80
+ return;
81
+ }
82
+ const status = await auth.status();
83
+ process.stdout.write(status.authenticated
84
+ ? `Signed in to DataBasin ${profile.label}${status.username ? ` as ${status.username}` : ''}.\n`
85
+ : `Not signed in to DataBasin ${profile.label}. Run: npx @databasin/mcp-client login${profile.environment === 'prod' ? '' : ` --environment ${profile.environment}`}\n`);
86
+ }
87
+ function isCommand(value) {
88
+ return value === 'serve' || value === 'login' || value === 'logout' || value === 'status' || value === 'help' || value === 'version';
89
+ }
90
+ function helpText() {
91
+ return `DataBasin local MCP client ${VERSION}
92
+
93
+ Usage:
94
+ databasin-mcp Start the production stdio MCP server
95
+ databasin-mcp login Sign in to production
96
+ databasin-mcp logout Remove the production session
97
+ databasin-mcp status Show production sign-in status
98
+ databasin-mcp <command> -e np Use the non-production environment
99
+
100
+ Commands:
101
+ serve Start the stdio MCP server (default)
102
+ login Open Microsoft sign-in in the system browser
103
+ logout Remove the locally cached DataBasin session
104
+ status Show whether a session is available
105
+
106
+ Options:
107
+ -e, --environment <prod|np> Select an environment (default: prod)
108
+ -h, --help Show this help
109
+ -v, --version Show the package version
110
+ `;
111
+ }
112
+ if (isEntrypoint()) {
113
+ runCli(process.argv.slice(2)).catch((error) => {
114
+ const message = error instanceof DataBasinError || error instanceof Error
115
+ ? error.message
116
+ : 'DataBasin MCP failed.';
117
+ process.stderr.write(`${message}\n`);
118
+ process.exitCode = 1;
119
+ });
120
+ }
121
+ function isEntrypoint() {
122
+ if (!process.argv[1])
123
+ return false;
124
+ try {
125
+ return realpathSync(process.argv[1]) === realpathSync(fileURLToPath(import.meta.url));
126
+ }
127
+ catch {
128
+ return false;
129
+ }
130
+ }
131
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ export type DataBasinEnvironment = 'prod' | 'np';
2
+ export interface DataBasinProfile {
3
+ environment: DataBasinEnvironment;
4
+ label: string;
5
+ apiBaseUrl: string;
6
+ tenantId: string;
7
+ clientId: string;
8
+ scopes: readonly string[];
9
+ }
10
+ export declare function resolveEnvironment(value: string | undefined): DataBasinEnvironment;
11
+ export declare function getProfile(environment?: DataBasinEnvironment): DataBasinProfile;
12
+ export declare function authorityFor(profile: DataBasinProfile): string;
13
+ export declare const SUPPORTED_ENVIRONMENTS: readonly ["prod", "np"];
14
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,oBAAoB,GAAG,MAAM,GAAG,IAAI,CAAC;AAEjD,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,oBAAoB,CAAC;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;CAC3B;AAiCD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,oBAAoB,CAOlF;AAED,wBAAgB,UAAU,CAAC,WAAW,GAAE,oBAA6B,GAAG,gBAAgB,CAEvF;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,gBAAgB,GAAG,MAAM,CAE9D;AAED,eAAO,MAAM,sBAAsB,yBAAyC,CAAC"}
package/dist/config.js ADDED
@@ -0,0 +1,45 @@
1
+ const TENANT_ID = '6990684d-a83d-4cf0-95bc-fda77ad2fc29';
2
+ const PROFILES = Object.freeze({
3
+ prod: Object.freeze({
4
+ environment: 'prod',
5
+ label: 'production',
6
+ apiBaseUrl: 'https://databasin-api.calmplant-7d6b6890.centralus.azurecontainerapps.io/api',
7
+ tenantId: TENANT_ID,
8
+ clientId: '74125794-c409-483c-97e9-13194e58abb3',
9
+ scopes: Object.freeze(['api://2170da8e-41ff-422f-a759-2718336f40d7/Databasin.API'])
10
+ }),
11
+ np: Object.freeze({
12
+ environment: 'np',
13
+ label: 'non-production',
14
+ apiBaseUrl: 'https://databasin-api-np.grayriver-813df174.centralus.azurecontainerapps.io/api',
15
+ tenantId: TENANT_ID,
16
+ clientId: '68f0487f-d03d-41dd-96df-3c3fbaf1f112',
17
+ scopes: Object.freeze(['api://16b4e522-d051-4838-a0d7-75d246b8090c/Databasin.API'])
18
+ })
19
+ });
20
+ const ENVIRONMENT_ALIASES = Object.freeze({
21
+ prod: 'prod',
22
+ production: 'prod',
23
+ np: 'np',
24
+ nonprod: 'np',
25
+ 'non-production': 'np',
26
+ test: 'np',
27
+ staging: 'np'
28
+ });
29
+ export function resolveEnvironment(value) {
30
+ if (!value)
31
+ return 'prod';
32
+ const environment = ENVIRONMENT_ALIASES[value.trim().toLowerCase()];
33
+ if (!environment) {
34
+ throw new Error(`Unknown DataBasin environment "${value}". Use prod or np.`);
35
+ }
36
+ return environment;
37
+ }
38
+ export function getProfile(environment = 'prod') {
39
+ return PROFILES[environment];
40
+ }
41
+ export function authorityFor(profile) {
42
+ return `https://login.microsoftonline.com/${profile.tenantId}`;
43
+ }
44
+ export const SUPPORTED_ENVIRONMENTS = Object.freeze(['prod', 'np']);
45
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAWA,MAAM,SAAS,GAAG,sCAAsC,CAAC;AAEzD,MAAM,QAAQ,GAA6D,MAAM,CAAC,MAAM,CAAC;IACvF,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC;QAClB,WAAW,EAAE,MAAM;QACnB,KAAK,EAAE,YAAY;QACnB,UAAU,EAAE,8EAA8E;QAC1F,QAAQ,EAAE,SAAS;QACnB,QAAQ,EAAE,sCAAsC;QAChD,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,0DAA0D,CAAC,CAAC;KACpF,CAAC;IACF,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC;QAChB,WAAW,EAAE,IAAI;QACjB,KAAK,EAAE,gBAAgB;QACvB,UAAU,EAAE,iFAAiF;QAC7F,QAAQ,EAAE,SAAS;QACnB,QAAQ,EAAE,sCAAsC;QAChD,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,0DAA0D,CAAC,CAAC;KACpF,CAAC;CACH,CAAC,CAAC;AAEH,MAAM,mBAAmB,GAAmD,MAAM,CAAC,MAAM,CAAC;IACxF,IAAI,EAAE,MAAM;IACZ,UAAU,EAAE,MAAM;IAClB,EAAE,EAAE,IAAI;IACR,OAAO,EAAE,IAAI;IACb,gBAAgB,EAAE,IAAI;IACtB,IAAI,EAAE,IAAI;IACV,OAAO,EAAE,IAAI;CACd,CAAC,CAAC;AAEH,MAAM,UAAU,kBAAkB,CAAC,KAAyB;IAC1D,IAAI,CAAC,KAAK;QAAE,OAAO,MAAM,CAAC;IAC1B,MAAM,WAAW,GAAG,mBAAmB,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;IACpE,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,kCAAkC,KAAK,oBAAoB,CAAC,CAAC;IAC/E,CAAC;IACD,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,cAAoC,MAAM;IACnE,OAAO,QAAQ,CAAC,WAAW,CAAC,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,OAAyB;IACpD,OAAO,qCAAqC,OAAO,CAAC,QAAQ,EAAE,CAAC;AACjE,CAAC;AAED,MAAM,CAAC,MAAM,sBAAsB,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,IAAI,CAAU,CAAC,CAAC"}
@@ -0,0 +1,13 @@
1
+ export type DataBasinErrorCode = 'INVALID_ARGUMENT' | 'UNAUTHENTICATED' | 'NOT_FOUND' | 'POLICY_DENIED' | 'DEPENDENCY_UNAVAILABLE' | 'OPERATION_FAILED' | 'INTERNAL_ERROR';
2
+ export declare class DataBasinError extends Error {
3
+ readonly code: DataBasinErrorCode;
4
+ constructor(code: DataBasinErrorCode, message: string);
5
+ }
6
+ export declare class LoginRequiredError extends DataBasinError {
7
+ constructor(environment: string);
8
+ }
9
+ export declare function publicError(error: unknown): {
10
+ code: DataBasinErrorCode;
11
+ message: string;
12
+ };
13
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,kBAAkB,GAC1B,kBAAkB,GAClB,iBAAiB,GACjB,WAAW,GACX,eAAe,GACf,wBAAwB,GACxB,kBAAkB,GAClB,gBAAgB,CAAC;AAErB,qBAAa,cAAe,SAAQ,KAAK;IAErC,QAAQ,CAAC,IAAI,EAAE,kBAAkB;gBAAxB,IAAI,EAAE,kBAAkB,EACjC,OAAO,EAAE,MAAM;CAKlB;AAED,qBAAa,kBAAmB,SAAQ,cAAc;gBACxC,WAAW,EAAE,MAAM;CAOhC;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG;IAAE,IAAI,EAAE,kBAAkB,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAGzF"}
package/dist/errors.js ADDED
@@ -0,0 +1,20 @@
1
+ export class DataBasinError extends Error {
2
+ code;
3
+ constructor(code, message) {
4
+ super(message);
5
+ this.code = code;
6
+ this.name = 'DataBasinError';
7
+ }
8
+ }
9
+ export class LoginRequiredError extends DataBasinError {
10
+ constructor(environment) {
11
+ super('UNAUTHENTICATED', `DataBasin login is required for ${environment}. Call databasin_login, or run: npx @databasin/mcp-client login --environment ${environment}`);
12
+ this.name = 'LoginRequiredError';
13
+ }
14
+ }
15
+ export function publicError(error) {
16
+ if (error instanceof DataBasinError)
17
+ return { code: error.code, message: error.message };
18
+ return { code: 'INTERNAL_ERROR', message: 'The DataBasin operation could not be completed.' };
19
+ }
20
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AASA,MAAM,OAAO,cAAe,SAAQ,KAAK;IAE5B;IADX,YACW,IAAwB,EACjC,OAAe;QAEf,KAAK,CAAC,OAAO,CAAC,CAAC;QAHN,SAAI,GAAJ,IAAI,CAAoB;QAIjC,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;IAC/B,CAAC;CACF;AAED,MAAM,OAAO,kBAAmB,SAAQ,cAAc;IACpD,YAAY,WAAmB;QAC7B,KAAK,CACH,iBAAiB,EACjB,mCAAmC,WAAW,iFAAiF,WAAW,EAAE,CAC7I,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;IACnC,CAAC;CACF;AAED,MAAM,UAAU,WAAW,CAAC,KAAc;IACxC,IAAI,KAAK,YAAY,cAAc;QAAE,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;IACzF,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,iDAAiD,EAAE,CAAC;AAChG,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { SUPPORTED_ENVIRONMENTS, type DataBasinEnvironment } from './config.js';
2
+ export { TOOL_NAMES } from './tools.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +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"}
package/dist/index.js ADDED
@@ -0,0 +1,3 @@
1
+ export { SUPPORTED_ENVIRONMENTS } from './config.js';
2
+ export { TOOL_NAMES } from './tools.js';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +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"}
@@ -0,0 +1,56 @@
1
+ import { type BrowseSchemaInput } from './schemas.js';
2
+ export declare function mapProjects(payload: unknown): Array<{
3
+ id: string;
4
+ name: string | null;
5
+ organizationId: string | null;
6
+ }>;
7
+ export declare function mapConnections(payload: unknown): Array<{
8
+ id: string | number;
9
+ }>;
10
+ export declare function mapSearch(payload: unknown, limit: number): {
11
+ items: {
12
+ id: string;
13
+ type: "unknown" | "pipeline" | "connector" | "automation";
14
+ name: string;
15
+ description: string | null;
16
+ projectId: string | null;
17
+ organizationId: string | null;
18
+ updatedAt: string | null;
19
+ }[];
20
+ truncated: boolean;
21
+ };
22
+ export declare function mapSchema(payload: unknown, input: BrowseSchemaInput): {
23
+ connectorId: number;
24
+ level: "catalogs" | "schemas" | "tables" | "columns";
25
+ items: {
26
+ name: string;
27
+ type: string | null;
28
+ comment: string | null;
29
+ }[];
30
+ truncated: boolean;
31
+ };
32
+ export declare function mapOperation(payload: unknown, requestedId: string, options: {
33
+ offset: number;
34
+ limit: number;
35
+ }): {
36
+ operationId: string;
37
+ status: "failed" | "unknown" | "queued" | "running" | "completed" | "cancelled";
38
+ engineType: string | null;
39
+ resultKind: string | null;
40
+ columns: {
41
+ name: string;
42
+ type: string | null;
43
+ }[];
44
+ rowCount: number | null;
45
+ rows: unknown[][];
46
+ offset: number;
47
+ limit: number;
48
+ hasMore: boolean | null;
49
+ truncated: boolean;
50
+ message: string | null;
51
+ };
52
+ export declare function mapCancel(payload: unknown, requestedId: string): {
53
+ operationId: string;
54
+ status: "failed" | "unknown" | "queued" | "running" | "completed" | "cancelled";
55
+ };
56
+ //# sourceMappingURL=mappers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mappers.d.ts","sourceRoot":"","sources":["../src/mappers.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,iBAAiB,EACvB,MAAM,cAAc,CAAC;AAKtB,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC,CAUvH;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAAA;CAAE,CAAC,CAS/E;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM;;;;;;;;;;;EA+BxD;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,iBAAiB;;;;;;;;;EAyBnE;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE;;;;;;;;;;;;;;;;EAiC7G;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM;;;EAU9D"}
@@ -0,0 +1,171 @@
1
+ import { BrowseSchemaOutputSchema, CancelOperationOutputSchema, OperationOutputSchema, SearchOutputSchema } from './schemas.js';
2
+ import { DataBasinError } from './errors.js';
3
+ export function mapProjects(payload) {
4
+ return arrayValue(payload, ['projects', 'items', 'results']).flatMap((item) => {
5
+ const object = record(item);
6
+ const projectId = id(first(object, ['projectId', 'id', 'internalId']));
7
+ return projectId ? [{
8
+ id: projectId,
9
+ name: text(first(object, ['name', 'projectName', 'title']), 500),
10
+ organizationId: id(first(object, ['organizationId', 'orgId', 'institutionId']))
11
+ }] : [];
12
+ });
13
+ }
14
+ export function mapConnections(payload) {
15
+ return arrayValue(payload, ['connections', 'items', 'results']).flatMap((item) => {
16
+ const value = typeof item === 'string' || typeof item === 'number'
17
+ ? item
18
+ : first(record(item), ['id', 'connectorId', 'connectionId']);
19
+ if (typeof value === 'string' && value.trim())
20
+ return [{ id: value.trim().slice(0, 256) }];
21
+ if (typeof value === 'number' && Number.isSafeInteger(value) && value > 0)
22
+ return [{ id: value }];
23
+ return [];
24
+ });
25
+ }
26
+ export function mapSearch(payload, limit) {
27
+ const root = record(unwrap(payload));
28
+ const grouped = record(root.results);
29
+ const rawItems = Object.keys(grouped).length > 0
30
+ ? [
31
+ ...arrayValue(grouped.pipelines, ['items', 'results', 'data']).map((item) => ({ item, impliedType: 'pipeline' })),
32
+ ...arrayValue(grouped.connectors, ['items', 'results', 'data']).map((item) => ({ item, impliedType: 'connector' })),
33
+ ...arrayValue(grouped.automations, ['items', 'results', 'data']).map((item) => ({ item, impliedType: 'automation' }))
34
+ ]
35
+ : arrayValue(payload, ['items', 'results', 'matches', 'data']).map((item) => ({ item, impliedType: undefined }));
36
+ const items = rawItems.flatMap(({ item, impliedType }) => {
37
+ const object = record(item);
38
+ const itemId = id(first(object, ['id', 'resourceId', 'pipelineId', 'connectorId', 'automationId']));
39
+ if (!itemId)
40
+ return [];
41
+ const rawType = text(first(object, ['type', 'resourceType', 'kind']), 100)?.toLowerCase() ?? impliedType;
42
+ const type = rawType === 'pipeline' || rawType === 'connector' || rawType === 'automation' ? rawType : 'unknown';
43
+ return [{
44
+ id: itemId,
45
+ type,
46
+ name: text(first(object, ['name', 'title', 'label']), 500) ?? itemId,
47
+ description: text(first(object, ['description', 'summary']), 2_000),
48
+ projectId: id(first(object, ['projectId', 'projectInternalId'])),
49
+ organizationId: id(first(object, ['organizationId', 'orgId', 'institutionId'])),
50
+ updatedAt: text(first(object, ['updatedAt', 'updatedDate', 'updatedDatetime', 'lastUpdated']), 100)
51
+ }];
52
+ });
53
+ const backendTruncated = Object.values(record(root.truncated)).some((value) => value === true);
54
+ return SearchOutputSchema.parse({
55
+ items: items.slice(0, limit),
56
+ truncated: backendTruncated || items.length > limit
57
+ });
58
+ }
59
+ export function mapSchema(payload, input) {
60
+ const keys = {
61
+ catalogs: ['catalogs', 'items', 'results', 'data'],
62
+ schemas: ['schemas', 'items', 'results', 'data'],
63
+ tables: ['tables', 'items', 'results', 'data'],
64
+ columns: ['columns', 'items', 'results', 'data']
65
+ };
66
+ const items = arrayValue(payload, keys[input.level]).flatMap((item) => {
67
+ const object = record(item);
68
+ const rawName = typeof item === 'string'
69
+ ? item
70
+ : first(object, ['name', 'catalogName', 'schemaName', 'tableName', 'columnName']);
71
+ const name = text(rawName, 256);
72
+ return name ? [{
73
+ name,
74
+ type: text(first(object, ['type', 'objectType', 'dataType', 'columnType']), 200),
75
+ comment: text(first(object, ['comment', 'description']), 2_000)
76
+ }] : [];
77
+ });
78
+ return BrowseSchemaOutputSchema.parse({
79
+ connectorId: input.connectorId,
80
+ level: input.level,
81
+ items: items.slice(0, 200),
82
+ truncated: items.length > 200
83
+ });
84
+ }
85
+ export function mapOperation(payload, requestedId, options) {
86
+ const object = record(unwrap(payload));
87
+ const operationId = id(first(object, ['operationId', 'queryId'])) ?? requestedId;
88
+ if (!operationId)
89
+ throw new DataBasinError('OPERATION_FAILED', 'DataBasin did not return an operation identifier.');
90
+ const rawStatus = text(first(object, ['status', 'state']), 100)?.toLowerCase();
91
+ const status = rawStatus === 'queued' || rawStatus === 'running' || rawStatus === 'completed' || rawStatus === 'failed' || rawStatus === 'cancelled'
92
+ ? rawStatus
93
+ : 'unknown';
94
+ const columns = arrayValue(object, ['columns']).flatMap((item) => {
95
+ const column = record(item);
96
+ const name = text(first(column, ['name', 'columnName']), 256);
97
+ return name ? [{ name, type: text(first(column, ['type', 'dataType']), 200) }] : [];
98
+ });
99
+ const requestedLimit = Math.min(Math.max(options.limit, 1), 100);
100
+ const rows = arrayValue(object, ['data', 'rows'])
101
+ .flatMap((row) => Array.isArray(row) ? [row.slice(0, 500)] : [])
102
+ .slice(0, requestedLimit);
103
+ const pagination = record(object.pagination);
104
+ const stats = record(object.stats);
105
+ return OperationOutputSchema.parse({
106
+ operationId,
107
+ status,
108
+ engineType: text(first(object, ['engineType', 'engine']), 100),
109
+ resultKind: text(object.resultKind, 100),
110
+ columns,
111
+ rowCount: count(first(object, ['rowCount', 'totalRows'])) ?? count(first(stats, ['rowCount', 'totalRows'])) ?? count(pagination.totalRows),
112
+ rows,
113
+ offset: count(pagination.offset) ?? options.offset,
114
+ limit: Math.min(count(pagination.limit) ?? requestedLimit, 100),
115
+ hasMore: Object.keys(pagination).length > 0 ? pagination.hasMore === true : null,
116
+ truncated: object.truncated === true || rows.length >= requestedLimit,
117
+ message: text(first(object, ['message', 'textOutput']), 1_000) ?? text(record(object.error).message, 1_000)
118
+ });
119
+ }
120
+ export function mapCancel(payload, requestedId) {
121
+ const object = record(unwrap(payload));
122
+ const rawStatus = text(first(object, ['status', 'state']), 100)?.toLowerCase();
123
+ const status = rawStatus === 'cancelled' || rawStatus === 'queued' || rawStatus === 'running' || rawStatus === 'completed' || rawStatus === 'failed'
124
+ ? rawStatus
125
+ : 'unknown';
126
+ return CancelOperationOutputSchema.parse({
127
+ operationId: id(first(object, ['operationId', 'queryId'])) ?? requestedId,
128
+ status
129
+ });
130
+ }
131
+ function unwrap(value) {
132
+ const object = record(value);
133
+ if (!('data' in object) || !(Array.isArray(object.data) || (object.data && typeof object.data === 'object')))
134
+ return value;
135
+ const envelopeKeys = new Set(['data', 'meta', 'pagination', 'error']);
136
+ return Object.keys(object).every((key) => envelopeKeys.has(key)) ? object.data : value;
137
+ }
138
+ function arrayValue(value, keys) {
139
+ if (Array.isArray(value))
140
+ return value;
141
+ const object = record(unwrap(value));
142
+ for (const key of keys)
143
+ if (Array.isArray(object[key]))
144
+ return object[key];
145
+ return [];
146
+ }
147
+ function record(value) {
148
+ return value && typeof value === 'object' && !Array.isArray(value) ? value : {};
149
+ }
150
+ function first(object, keys) {
151
+ for (const key of keys)
152
+ if (object[key] !== undefined && object[key] !== null)
153
+ return object[key];
154
+ return null;
155
+ }
156
+ function text(value, max) {
157
+ if (typeof value === 'string')
158
+ return value.slice(0, max);
159
+ return value === null || value === undefined ? null : String(value).slice(0, max);
160
+ }
161
+ function id(value) {
162
+ if (typeof value === 'string' && value.trim())
163
+ return value.trim().slice(0, 256);
164
+ if (typeof value === 'number' && Number.isSafeInteger(value) && value > 0)
165
+ return String(value);
166
+ return null;
167
+ }
168
+ function count(value) {
169
+ return typeof value === 'number' && Number.isSafeInteger(value) && value >= 0 ? value : null;
170
+ }
171
+ //# sourceMappingURL=mappers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mappers.js","sourceRoot":"","sources":["../src/mappers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare function assertSafeOutput(value: unknown, maxBytes?: number): void;
2
+ export declare function correlationId(): string;
3
+ //# sourceMappingURL=safety.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"safety.d.ts","sourceRoot":"","sources":["../src/safety.ts"],"names":[],"mappings":"AAMA,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,SAAY,GAAG,IAAI,CAK3E;AAgBD,wBAAgB,aAAa,IAAI,MAAM,CAEtC"}
package/dist/safety.js ADDED
@@ -0,0 +1,27 @@
1
+ import { randomUUID } from 'node:crypto';
2
+ import { DataBasinError } from './errors.js';
3
+ const SENSITIVE_KEY = /(?:pass(word)?|secret|token|api[-_]?key|credential|authorization|cookie|webhook|signed[-_]?url|connection[-_]?string|private[-_]?key|client[-_]?secret|keyvault)/iu;
4
+ export function assertSafeOutput(value, maxBytes = 1_048_576) {
5
+ inspectKeys(value, '$');
6
+ if (Buffer.byteLength(JSON.stringify(value), 'utf8') > maxBytes) {
7
+ throw new DataBasinError('POLICY_DENIED', 'The tool output exceeded the response-size limit.');
8
+ }
9
+ }
10
+ function inspectKeys(value, path) {
11
+ if (Array.isArray(value)) {
12
+ value.forEach((child, index) => inspectKeys(child, `${path}[${index}]`));
13
+ return;
14
+ }
15
+ if (!value || typeof value !== 'object')
16
+ return;
17
+ for (const [key, child] of Object.entries(value)) {
18
+ if (SENSITIVE_KEY.test(key)) {
19
+ throw new DataBasinError('INTERNAL_ERROR', `A sensitive field was blocked at ${path}.`);
20
+ }
21
+ inspectKeys(child, `${path}.${key}`);
22
+ }
23
+ }
24
+ export function correlationId() {
25
+ return randomUUID();
26
+ }
27
+ //# sourceMappingURL=safety.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"safety.js","sourceRoot":"","sources":["../src/safety.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,MAAM,aAAa,GAAG,oKAAoK,CAAC;AAE3L,MAAM,UAAU,gBAAgB,CAAC,KAAc,EAAE,QAAQ,GAAG,SAAS;IACnE,WAAW,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACxB,IAAI,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,GAAG,QAAQ,EAAE,CAAC;QAChE,MAAM,IAAI,cAAc,CAAC,eAAe,EAAE,mDAAmD,CAAC,CAAC;IACjG,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAC,KAAc,EAAE,IAAY;IAC/C,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC,KAAK,EAAE,GAAG,IAAI,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC;QACzE,OAAO;IACT,CAAC;IACD,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO;IAChD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACjD,IAAI,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YAC5B,MAAM,IAAI,cAAc,CAAC,gBAAgB,EAAE,oCAAoC,IAAI,GAAG,CAAC,CAAC;QAC1F,CAAC;QACD,WAAW,CAAC,KAAK,EAAE,GAAG,IAAI,IAAI,GAAG,EAAE,CAAC,CAAC;IACvC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,OAAO,UAAU,EAAE,CAAC;AACtB,CAAC"}