@mondaydotcomorg/atp-server 0.18.5-rc.0 → 0.19.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.
- package/dist/aggregator/index.d.ts +14 -0
- package/dist/aggregator/index.d.ts.map +1 -1
- package/dist/aggregator/index.js +85 -1
- package/dist/aggregator/index.js.map +1 -1
- package/dist/create-server.d.ts +66 -2
- package/dist/create-server.d.ts.map +1 -1
- package/dist/create-server.js +203 -33
- package/dist/create-server.js.map +1 -1
- package/dist/executor/compiler-config.d.ts.map +1 -1
- package/dist/executor/compiler-config.js +6 -7
- package/dist/executor/compiler-config.js.map +1 -1
- package/dist/executor/executor.js.map +1 -1
- package/dist/executor/resume-handler.d.ts.map +1 -1
- package/dist/executor/resume-handler.js +3 -1
- package/dist/executor/resume-handler.js.map +1 -1
- package/dist/executor/sandbox-builder.d.ts.map +1 -1
- package/dist/executor/sandbox-builder.js +8 -5
- package/dist/executor/sandbox-builder.js.map +1 -1
- package/dist/explorer/index.d.ts +2 -0
- package/dist/explorer/index.d.ts.map +1 -1
- package/dist/explorer/index.js +14 -2
- package/dist/explorer/index.js.map +1 -1
- package/dist/graphql-loader.d.ts +13 -0
- package/dist/graphql-loader.d.ts.map +1 -0
- package/dist/graphql-loader.js +324 -0
- package/dist/graphql-loader.js.map +1 -0
- package/dist/http/request-handler.d.ts.map +1 -1
- package/dist/http/request-handler.js +7 -1
- package/dist/http/request-handler.js.map +1 -1
- package/dist/openapi-loader.js +10 -1
- package/dist/openapi-loader.js.map +1 -1
- package/package.json +7 -6
- package/src/aggregator/index.ts +99 -0
- package/src/create-server.ts +228 -33
- package/src/executor/compiler-config.ts +7 -7
- package/src/executor/execution-error-handler.ts +1 -1
- package/src/executor/executor.ts +8 -8
- package/src/executor/resume-handler.ts +5 -1
- package/src/executor/sandbox-builder.ts +52 -48
- package/src/explorer/index.ts +17 -2
- package/src/graphql-loader.ts +421 -0
- package/src/http/request-handler.ts +6 -1
- package/src/openapi-loader.ts +9 -1
|
@@ -44,6 +44,20 @@ export declare class APIAggregator {
|
|
|
44
44
|
* @returns TypeScript type string
|
|
45
45
|
*/
|
|
46
46
|
private jsonSchemaTypeToTS;
|
|
47
|
+
/**
|
|
48
|
+
* Converts a full JSON Schema to TypeScript interface properties
|
|
49
|
+
* @param schema - JSON Schema object
|
|
50
|
+
* @param depth - Current recursion depth (prevents infinite recursion)
|
|
51
|
+
* @returns TypeScript interface properties string
|
|
52
|
+
*/
|
|
53
|
+
private jsonSchemaToTSInterface;
|
|
54
|
+
/**
|
|
55
|
+
* Converts any JSON Schema to a TypeScript type expression
|
|
56
|
+
* @param schema - JSON Schema object
|
|
57
|
+
* @param depth - Current recursion depth
|
|
58
|
+
* @returns TypeScript type expression
|
|
59
|
+
*/
|
|
60
|
+
private schemaToTSType;
|
|
47
61
|
/**
|
|
48
62
|
* Helper to check if a string is a valid JavaScript identifier
|
|
49
63
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/aggregator/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAqB,MAAM,+BAA+B,CAAC;AAEvF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAEnE;;;GAGG;AACH,qBAAa,aAAa;IACzB,OAAO,CAAC,SAAS,CAAmB;IAEpC;;;OAGG;gBACS,SAAS,EAAE,cAAc,EAAE;IAIvC;;;;OAIG;IACG,kBAAkB,CAAC,cAAc,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAuBpE;;;;OAIG;IACI,oBAAoB,CAAC,OAAO,CAAC,EAAE;QACrC,cAAc,CAAC,EAAE;YAChB,MAAM,EAAE,OAAO,CAAC;YAChB,WAAW,EAAE,OAAO,CAAC;YACrB,YAAY,EAAE,OAAO,CAAC;YACtB,QAAQ,EAAE,OAAO,CAAC;SAClB,CAAC;QACF,aAAa,CAAC,EAAE,cAAc,EAAE,CAAC;KACjC,GAAG,MAAM;IAIV;;;;;OAKG;IACH,OAAO,CAAC,qBAAqB;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/aggregator/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAqB,MAAM,+BAA+B,CAAC;AAEvF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAEnE;;;GAGG;AACH,qBAAa,aAAa;IACzB,OAAO,CAAC,SAAS,CAAmB;IAEpC;;;OAGG;gBACS,SAAS,EAAE,cAAc,EAAE;IAIvC;;;;OAIG;IACG,kBAAkB,CAAC,cAAc,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAuBpE;;;;OAIG;IACI,oBAAoB,CAAC,OAAO,CAAC,EAAE;QACrC,cAAc,CAAC,EAAE;YAChB,MAAM,EAAE,OAAO,CAAC;YAChB,WAAW,EAAE,OAAO,CAAC;YACrB,YAAY,EAAE,OAAO,CAAC;YACtB,QAAQ,EAAE,OAAO,CAAC;SAClB,CAAC;QACF,aAAa,CAAC,EAAE,cAAc,EAAE,CAAC;KACjC,GAAG,MAAM;IAIV;;;;;OAKG;IACH,OAAO,CAAC,qBAAqB;IA+B7B;;;;OAIG;IACH,OAAO,CAAC,kBAAkB;IAkB1B;;;;;OAKG;IACH,OAAO,CAAC,uBAAuB;IAgC/B;;;;;OAKG;IACH,OAAO,CAAC,cAAc;IAgDtB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAIzB;;;OAGG;IACH,OAAO,CAAC,kBAAkB;IAO1B;;;;;OAKG;IACH,OAAO,CAAC,oBAAoB;IAoE5B;;;OAGG;IACH,YAAY,IAAI,MAAM,EAAE;CAGxB"}
|
package/dist/aggregator/index.js
CHANGED
|
@@ -64,7 +64,13 @@ export class APIAggregator {
|
|
|
64
64
|
}
|
|
65
65
|
typescript += `}\n`;
|
|
66
66
|
typescript += `\ninterface ${outputTypeName} {\n`;
|
|
67
|
-
|
|
67
|
+
if (func.outputSchema) {
|
|
68
|
+
const outputType = this.jsonSchemaToTSInterface(func.outputSchema);
|
|
69
|
+
typescript += outputType;
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
typescript += ` [key: string]: unknown;\n`;
|
|
73
|
+
}
|
|
68
74
|
typescript += `}\n`;
|
|
69
75
|
return typescript;
|
|
70
76
|
}
|
|
@@ -90,6 +96,84 @@ export class APIAggregator {
|
|
|
90
96
|
return 'unknown';
|
|
91
97
|
}
|
|
92
98
|
}
|
|
99
|
+
/**
|
|
100
|
+
* Converts a full JSON Schema to TypeScript interface properties
|
|
101
|
+
* @param schema - JSON Schema object
|
|
102
|
+
* @param depth - Current recursion depth (prevents infinite recursion)
|
|
103
|
+
* @returns TypeScript interface properties string
|
|
104
|
+
*/
|
|
105
|
+
jsonSchemaToTSInterface(schema, depth = 0) {
|
|
106
|
+
// Prevent infinite recursion
|
|
107
|
+
if (depth > 3) {
|
|
108
|
+
return ' [key: string]: unknown;\n';
|
|
109
|
+
}
|
|
110
|
+
// Handle array types - for arrays, we treat the interface as array-indexable
|
|
111
|
+
if (schema.type === 'array' && schema.items) {
|
|
112
|
+
const itemType = this.schemaToTSType(schema.items, depth + 1);
|
|
113
|
+
// Generate array-like interface
|
|
114
|
+
return ` [index: number]: ${itemType};\n length: number;\n`;
|
|
115
|
+
}
|
|
116
|
+
// Handle object types with properties
|
|
117
|
+
if (schema.type === 'object' && schema.properties) {
|
|
118
|
+
const required = schema.required || [];
|
|
119
|
+
let result = '';
|
|
120
|
+
for (const [key, value] of Object.entries(schema.properties)) {
|
|
121
|
+
const prop = value;
|
|
122
|
+
const optional = required.includes(key) ? '' : '?';
|
|
123
|
+
const tsType = this.schemaToTSType(prop, depth + 1);
|
|
124
|
+
result += ` ${key}${optional}: ${tsType};\n`;
|
|
125
|
+
}
|
|
126
|
+
return result || ' [key: string]: unknown;\n';
|
|
127
|
+
}
|
|
128
|
+
// Fallback for simple types or unknown structures
|
|
129
|
+
return ' [key: string]: unknown;\n';
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Converts any JSON Schema to a TypeScript type expression
|
|
133
|
+
* @param schema - JSON Schema object
|
|
134
|
+
* @param depth - Current recursion depth
|
|
135
|
+
* @returns TypeScript type expression
|
|
136
|
+
*/
|
|
137
|
+
schemaToTSType(schema, depth = 0) {
|
|
138
|
+
if (!schema)
|
|
139
|
+
return 'unknown';
|
|
140
|
+
// Prevent infinite recursion
|
|
141
|
+
if (depth > 3) {
|
|
142
|
+
return 'unknown';
|
|
143
|
+
}
|
|
144
|
+
// Handle array types
|
|
145
|
+
if (schema.type === 'array') {
|
|
146
|
+
if (schema.items) {
|
|
147
|
+
const itemType = this.schemaToTSType(schema.items, depth + 1);
|
|
148
|
+
return `${itemType}[]`;
|
|
149
|
+
}
|
|
150
|
+
return 'unknown[]';
|
|
151
|
+
}
|
|
152
|
+
// Handle enum types
|
|
153
|
+
if (schema.enum) {
|
|
154
|
+
return schema.enum.map((v) => `"${v}"`).join(' | ') || 'string';
|
|
155
|
+
}
|
|
156
|
+
// Handle object types with properties
|
|
157
|
+
if (schema.type === 'object' && schema.properties) {
|
|
158
|
+
const required = schema.required || [];
|
|
159
|
+
const props = [];
|
|
160
|
+
for (const [key, value] of Object.entries(schema.properties)) {
|
|
161
|
+
const prop = value;
|
|
162
|
+
const optional = required.includes(key) ? '' : '?';
|
|
163
|
+
const tsType = this.schemaToTSType(prop, depth + 1);
|
|
164
|
+
props.push(`${key}${optional}: ${tsType}`);
|
|
165
|
+
}
|
|
166
|
+
if (props.length > 0) {
|
|
167
|
+
return `{ ${props.join('; ')} }`;
|
|
168
|
+
}
|
|
169
|
+
return 'Record<string, unknown>';
|
|
170
|
+
}
|
|
171
|
+
// Handle simple types
|
|
172
|
+
if (schema.type) {
|
|
173
|
+
return this.jsonSchemaTypeToTS(schema.type);
|
|
174
|
+
}
|
|
175
|
+
return 'unknown';
|
|
176
|
+
}
|
|
93
177
|
/**
|
|
94
178
|
* Helper to check if a string is a valid JavaScript identifier
|
|
95
179
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/aggregator/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAGxF;;;GAGG;AACH,MAAM,OAAO,aAAa;IACjB,SAAS,CAAmB;IAEpC;;;OAGG;IACH,YAAY,SAA2B;QACtC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC5B,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,kBAAkB,CAAC,cAAyB;QACjD,MAAM,MAAM,GAAG,cAAc;YAC5B,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAC/D,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC;QAElB,IAAI,UAAU,GAAG,+CAA+C,CAAC;QAEjE,UAAU,IAAI,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAE1C,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC5B,UAAU,IAAI,mBAAmB,KAAK,CAAC,IAAI,IAAI,CAAC;YAChD,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;gBACrB,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;oBACpC,UAAU,IAAI,IAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC5D,CAAC;YACF,CAAC;QACF,CAAC;QAED,UAAU,IAAI,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;QAEhD,OAAO,UAAU,CAAC;IACnB,CAAC;IAED;;;;OAIG;IACI,oBAAoB,CAAC,OAQ3B;QACA,OAAO,oBAAoB,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC;IAC1D,CAAC;IAED;;;;;OAKG;IACK,qBAAqB,CAAC,IAAuB,EAAE,SAAiB;QACvE,MAAM,aAAa,GAAG,GAAG,IAAI,CAAC,IAAI,QAAQ,CAAC;QAC3C,MAAM,cAAc,GAAG,GAAG,IAAI,CAAC,IAAI,SAAS,CAAC;QAE7C,IAAI,UAAU,GAAG,eAAe,aAAa,MAAM,CAAC;QACpD,IAAI,IAAI,CAAC,WAAW,EAAE,UAAU,EAAE,CAAC;YAClC,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,IAAI,EAAE,CAAC;YACjD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,EAAE,CAAC;gBACxE,MAAM,IAAI,GAAG,KAAgD,CAAC;gBAC9D,MAAM,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,IAAI,KAAK,CAAC,CAAC;gBAC3D,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAClE,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;gBACnD,UAAU,IAAI,KAAK,GAAG,GAAG,QAAQ,KAAK,MAAM,IAAI,OAAO,IAAI,CAAC;YAC7D,CAAC;QACF,CAAC;QACD,UAAU,IAAI,KAAK,CAAC;QAEpB,UAAU,IAAI,eAAe,cAAc,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/aggregator/index.ts"],"names":[],"mappings":"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"}
|
package/dist/create-server.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { IncomingMessage, ServerResponse } from 'node:http';
|
|
2
2
|
import type { CacheProvider, AuthProvider, AuditSink, APIGroupConfig, ToolMetadata } from '@mondaydotcomorg/atp-protocol';
|
|
3
3
|
import type { ICompiler } from '@mondaydotcomorg/atp-compiler';
|
|
4
|
+
import { type DeclarativePolicyConfig, type SecurityPolicy } from '@mondaydotcomorg/atp-provenance';
|
|
4
5
|
import type { ServerConfig, Middleware, RequestContext } from './core/config.js';
|
|
5
6
|
import { ClientSessionManager } from './client-sessions.js';
|
|
6
7
|
import { SandboxExecutor } from './executor/index.js';
|
|
@@ -15,6 +16,8 @@ export declare class AgentToolProtocolServer {
|
|
|
15
16
|
private httpServer;
|
|
16
17
|
private responseHeaders;
|
|
17
18
|
private isRunning;
|
|
19
|
+
private policyRegistry;
|
|
20
|
+
private initPromise;
|
|
18
21
|
sessionManager?: ClientSessionManager;
|
|
19
22
|
executor?: SandboxExecutor;
|
|
20
23
|
validator?: CodeValidator;
|
|
@@ -34,10 +37,46 @@ export declare class AgentToolProtocolServer {
|
|
|
34
37
|
compiler?: ICompiler;
|
|
35
38
|
private customLogger?;
|
|
36
39
|
constructor(config?: ServerConfig);
|
|
40
|
+
/**
|
|
41
|
+
* Add a security policy (programmatic SecurityPolicy object)
|
|
42
|
+
* @example
|
|
43
|
+
* server.addPolicy(preventDataExfiltration);
|
|
44
|
+
*/
|
|
45
|
+
addPolicy(policy: SecurityPolicy): this;
|
|
46
|
+
/**
|
|
47
|
+
* Add multiple security policies
|
|
48
|
+
*/
|
|
49
|
+
addPolicies(policies: SecurityPolicy[]): this;
|
|
50
|
+
/**
|
|
51
|
+
* Load declarative policies from JSON configuration
|
|
52
|
+
* @example
|
|
53
|
+
* server.loadPolicies([{
|
|
54
|
+
* id: 'block-llm-payments',
|
|
55
|
+
* scope: { toolName: 'payment.*' },
|
|
56
|
+
* rules: [{ action: 'block', conditions: [...] }]
|
|
57
|
+
* }]);
|
|
58
|
+
*/
|
|
59
|
+
loadPolicies(configs: DeclarativePolicyConfig[], replace?: boolean): this;
|
|
60
|
+
/**
|
|
61
|
+
* Remove a policy by name
|
|
62
|
+
*/
|
|
63
|
+
removePolicy(name: string): this;
|
|
64
|
+
/**
|
|
65
|
+
* Clear all policies
|
|
66
|
+
*/
|
|
67
|
+
clearPolicies(): this;
|
|
68
|
+
/**
|
|
69
|
+
* Get all active policies
|
|
70
|
+
*/
|
|
71
|
+
getPolicies(): SecurityPolicy[];
|
|
37
72
|
/**
|
|
38
73
|
* Register middleware or API groups.
|
|
39
|
-
*
|
|
40
|
-
*
|
|
74
|
+
* Can be called before OR after server starts.
|
|
75
|
+
* - Before start: Simply adds to configuration
|
|
76
|
+
* - After start: Dynamically updates running server components
|
|
77
|
+
*
|
|
78
|
+
* Note: Middleware can only be added before server starts.
|
|
79
|
+
* @throws {Error} If trying to add middleware after server has started
|
|
41
80
|
*/
|
|
42
81
|
use(...items: (Middleware | APIGroupConfig | APIGroupConfig[])[]): this;
|
|
43
82
|
/**
|
|
@@ -84,6 +123,11 @@ export declare class AgentToolProtocolServer {
|
|
|
84
123
|
approved: boolean;
|
|
85
124
|
data?: any;
|
|
86
125
|
}>): this;
|
|
126
|
+
/**
|
|
127
|
+
* Initialize server components without starting HTTP server.
|
|
128
|
+
* Call this when using handler(), toExpress() or toFastify().
|
|
129
|
+
*/
|
|
130
|
+
start(): Promise<void>;
|
|
87
131
|
listen(port: number): Promise<void>;
|
|
88
132
|
stop(): Promise<void>;
|
|
89
133
|
getInfo(): unknown;
|
|
@@ -95,9 +139,29 @@ export declare class AgentToolProtocolServer {
|
|
|
95
139
|
handleExplore(ctx: RequestContext): Promise<unknown>;
|
|
96
140
|
handleExecute(ctx: RequestContext): Promise<unknown>;
|
|
97
141
|
handleResume(ctx: RequestContext, executionId: string): Promise<unknown>;
|
|
142
|
+
/**
|
|
143
|
+
* Update server components with new API groups (internal method)
|
|
144
|
+
* @private
|
|
145
|
+
*/
|
|
146
|
+
private updateComponentsWithNewGroups;
|
|
147
|
+
/**
|
|
148
|
+
* Load an OpenAPI spec and add it to the server
|
|
149
|
+
* Works both before and after server starts
|
|
150
|
+
* @param source - URL or file path to OpenAPI spec
|
|
151
|
+
* @param options - OpenAPI loading options
|
|
152
|
+
*/
|
|
153
|
+
loadOpenAPI(source: string, options?: any): Promise<this>;
|
|
154
|
+
/**
|
|
155
|
+
* Load a GraphQL spec and add it to the server
|
|
156
|
+
* Works both before and after server starts
|
|
157
|
+
* @param source - URL or file path to GraphQL spec (SDL, introspection JSON, or endpoint URL)
|
|
158
|
+
* @param options - GraphQL loading options
|
|
159
|
+
*/
|
|
160
|
+
loadGraphQL(source: string, options?: any): Promise<this>;
|
|
98
161
|
/**
|
|
99
162
|
* Get raw Node.js request handler for framework integration
|
|
100
163
|
* Use this to integrate ATP with Express, Fastify, or any Node.js framework
|
|
164
|
+
* Components will be automatically initialized on first request if not already started.
|
|
101
165
|
*/
|
|
102
166
|
handler(): (req: IncomingMessage, res: ServerResponse) => Promise<void>;
|
|
103
167
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-server.d.ts","sourceRoot":"","sources":["../src/create-server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoC,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC9F,OAAO,KAAK,EACX,aAAa,EACb,YAAY,EACZ,SAAS,EACT,cAAc,EAEd,YAAY,EACZ,MAAM,+BAA+B,CAAC;AACvC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAK/D,OAAO,KAAK,EACX,YAAY,EACZ,UAAU,EACV,cAAc,EAEd,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"create-server.d.ts","sourceRoot":"","sources":["../src/create-server.ts"],"names":[],"mappings":"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"}
|
package/dist/create-server.js
CHANGED
|
@@ -2,6 +2,7 @@ import { createServer as createHTTPServer } from 'node:http';
|
|
|
2
2
|
import { ProvenanceMode } from '@mondaydotcomorg/atp-protocol';
|
|
3
3
|
import { log, initializeLogger } from '@mondaydotcomorg/atp-runtime';
|
|
4
4
|
import { shutdownLogger } from '@mondaydotcomorg/atp-runtime';
|
|
5
|
+
import { DynamicPolicyRegistry, } from '@mondaydotcomorg/atp-provenance';
|
|
5
6
|
import { MB, HOUR, MINUTE } from './core/config.js';
|
|
6
7
|
import { ClientSessionManager } from './client-sessions.js';
|
|
7
8
|
import { SandboxExecutor } from './executor/index.js';
|
|
@@ -21,6 +22,7 @@ import { getDefinitions } from './handlers/definitions.handler.js';
|
|
|
21
22
|
import { shutdownAudit } from './middleware/audit.js';
|
|
22
23
|
import { EnvAuthProvider, MemoryCache, OpenTelemetryAuditSink, } from '@mondaydotcomorg/atp-providers';
|
|
23
24
|
import { APIAggregator } from './aggregator/index.js';
|
|
25
|
+
import { loadGraphQL } from './graphql-loader.js';
|
|
24
26
|
export class AgentToolProtocolServer {
|
|
25
27
|
config;
|
|
26
28
|
middleware = [];
|
|
@@ -28,6 +30,8 @@ export class AgentToolProtocolServer {
|
|
|
28
30
|
httpServer = null;
|
|
29
31
|
responseHeaders = new Map();
|
|
30
32
|
isRunning = false;
|
|
33
|
+
policyRegistry;
|
|
34
|
+
initPromise = null;
|
|
31
35
|
sessionManager;
|
|
32
36
|
executor;
|
|
33
37
|
validator;
|
|
@@ -41,13 +45,17 @@ export class AgentToolProtocolServer {
|
|
|
41
45
|
compiler;
|
|
42
46
|
customLogger;
|
|
43
47
|
constructor(config = {}) {
|
|
48
|
+
// Initialize DynamicPolicyRegistry with policies from config
|
|
49
|
+
const initialPolicies = config.execution?.securityPolicies ?? [];
|
|
50
|
+
this.policyRegistry = new DynamicPolicyRegistry(initialPolicies);
|
|
44
51
|
this.config = {
|
|
45
52
|
execution: {
|
|
46
53
|
timeout: config.execution?.timeout ?? 30000,
|
|
47
54
|
memory: config.execution?.memory ?? 128 * MB,
|
|
48
55
|
llmCalls: config.execution?.llmCalls ?? 10,
|
|
49
56
|
provenanceMode: config.execution?.provenanceMode ?? ProvenanceMode.NONE,
|
|
50
|
-
|
|
57
|
+
// Override policies to use the dynamic registry as the single entry point
|
|
58
|
+
securityPolicies: [this.policyRegistry],
|
|
51
59
|
},
|
|
52
60
|
clientInit: {
|
|
53
61
|
tokenTTL: config.clientInit?.tokenTTL ?? HOUR,
|
|
@@ -143,24 +151,102 @@ export class AgentToolProtocolServer {
|
|
|
143
151
|
log.info('Custom compiler configured', { type: config.compiler.getType() });
|
|
144
152
|
}
|
|
145
153
|
}
|
|
154
|
+
/**
|
|
155
|
+
* Add a security policy (programmatic SecurityPolicy object)
|
|
156
|
+
* @example
|
|
157
|
+
* server.addPolicy(preventDataExfiltration);
|
|
158
|
+
*/
|
|
159
|
+
addPolicy(policy) {
|
|
160
|
+
this.policyRegistry.addPolicy(policy);
|
|
161
|
+
log.info('Security policy added', { name: policy.name });
|
|
162
|
+
return this;
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Add multiple security policies
|
|
166
|
+
*/
|
|
167
|
+
addPolicies(policies) {
|
|
168
|
+
for (const policy of policies) {
|
|
169
|
+
this.policyRegistry.addPolicy(policy);
|
|
170
|
+
}
|
|
171
|
+
log.info('Security policies added', { count: policies.length });
|
|
172
|
+
return this;
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Load declarative policies from JSON configuration
|
|
176
|
+
* @example
|
|
177
|
+
* server.loadPolicies([{
|
|
178
|
+
* id: 'block-llm-payments',
|
|
179
|
+
* scope: { toolName: 'payment.*' },
|
|
180
|
+
* rules: [{ action: 'block', conditions: [...] }]
|
|
181
|
+
* }]);
|
|
182
|
+
*/
|
|
183
|
+
loadPolicies(configs, replace = false) {
|
|
184
|
+
this.policyRegistry.loadFromConfigs(configs, replace);
|
|
185
|
+
log.info('Declarative policies loaded', { count: configs.length, replace });
|
|
186
|
+
return this;
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Remove a policy by name
|
|
190
|
+
*/
|
|
191
|
+
removePolicy(name) {
|
|
192
|
+
this.policyRegistry.removePolicy(name);
|
|
193
|
+
log.info('Security policy removed', { name });
|
|
194
|
+
return this;
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Clear all policies
|
|
198
|
+
*/
|
|
199
|
+
clearPolicies() {
|
|
200
|
+
this.policyRegistry.clear();
|
|
201
|
+
log.info('All security policies cleared');
|
|
202
|
+
return this;
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Get all active policies
|
|
206
|
+
*/
|
|
207
|
+
getPolicies() {
|
|
208
|
+
return this.policyRegistry.getPolicies();
|
|
209
|
+
}
|
|
146
210
|
/**
|
|
147
211
|
* Register middleware or API groups.
|
|
148
|
-
*
|
|
149
|
-
*
|
|
212
|
+
* Can be called before OR after server starts.
|
|
213
|
+
* - Before start: Simply adds to configuration
|
|
214
|
+
* - After start: Dynamically updates running server components
|
|
215
|
+
*
|
|
216
|
+
* Note: Middleware can only be added before server starts.
|
|
217
|
+
* @throws {Error} If trying to add middleware after server has started
|
|
150
218
|
*/
|
|
151
219
|
use(...items) {
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
220
|
+
const middlewareItems = [];
|
|
221
|
+
const apiGroupItems = [];
|
|
222
|
+
// Separate middleware from API groups
|
|
155
223
|
for (const item of items) {
|
|
156
224
|
if (Array.isArray(item)) {
|
|
157
|
-
|
|
225
|
+
apiGroupItems.push(...item);
|
|
158
226
|
}
|
|
159
227
|
else if (typeof item === 'function') {
|
|
160
|
-
|
|
228
|
+
middlewareItems.push(item);
|
|
161
229
|
}
|
|
162
230
|
else if ('name' in item && 'type' in item) {
|
|
163
|
-
|
|
231
|
+
apiGroupItems.push(item);
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
// Middleware can only be added before server starts
|
|
235
|
+
if (middlewareItems.length > 0) {
|
|
236
|
+
if (this.isRunning) {
|
|
237
|
+
throw new Error('Cannot add middleware after server has started. Add middleware before calling listen().');
|
|
238
|
+
}
|
|
239
|
+
this.middleware.push(...middlewareItems);
|
|
240
|
+
}
|
|
241
|
+
// API groups can be added anytime
|
|
242
|
+
if (apiGroupItems.length > 0) {
|
|
243
|
+
if (this.isRunning) {
|
|
244
|
+
// Server is running - update components dynamically
|
|
245
|
+
this.updateComponentsWithNewGroups(apiGroupItems);
|
|
246
|
+
}
|
|
247
|
+
else {
|
|
248
|
+
// Server not started yet - just add to array
|
|
249
|
+
this.apiGroups.push(...apiGroupItems);
|
|
164
250
|
}
|
|
165
251
|
}
|
|
166
252
|
return this;
|
|
@@ -220,11 +306,13 @@ export class AgentToolProtocolServer {
|
|
|
220
306
|
log.info('Approval handler configured');
|
|
221
307
|
return this;
|
|
222
308
|
}
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
309
|
+
/**
|
|
310
|
+
* Initialize server components without starting HTTP server.
|
|
311
|
+
* Call this when using handler(), toExpress() or toFastify().
|
|
312
|
+
*/
|
|
313
|
+
async start() {
|
|
314
|
+
if (this.isRunning)
|
|
315
|
+
return;
|
|
228
316
|
this.sessionManager = new ClientSessionManager({
|
|
229
317
|
cache: this.cacheProvider,
|
|
230
318
|
tokenTTL: this.config.clientInit.tokenTTL,
|
|
@@ -250,6 +338,13 @@ export class AgentToolProtocolServer {
|
|
|
250
338
|
maxPauseDuration: this.config.executionState.maxPauseDuration,
|
|
251
339
|
keyPrefix: this.config.executionState.keyPrefix,
|
|
252
340
|
});
|
|
341
|
+
this.isRunning = true;
|
|
342
|
+
}
|
|
343
|
+
async listen(port) {
|
|
344
|
+
if (this.httpServer) {
|
|
345
|
+
throw new Error('Server is already running');
|
|
346
|
+
}
|
|
347
|
+
await this.start();
|
|
253
348
|
this.httpServer = createHTTPServer((req, res) => {
|
|
254
349
|
handleHTTPRequest(req, res, {
|
|
255
350
|
cacheProvider: this.cacheProvider,
|
|
@@ -381,29 +476,97 @@ export class AgentToolProtocolServer {
|
|
|
381
476
|
}
|
|
382
477
|
return await handleResume(ctx, executionId, this.executor, this.stateManager, this.config, this.sessionManager);
|
|
383
478
|
}
|
|
479
|
+
/**
|
|
480
|
+
* Update server components with new API groups (internal method)
|
|
481
|
+
* @private
|
|
482
|
+
*/
|
|
483
|
+
updateComponentsWithNewGroups(groups) {
|
|
484
|
+
// Add to apiGroups array
|
|
485
|
+
this.apiGroups.push(...groups);
|
|
486
|
+
// Update search engine with new groups
|
|
487
|
+
if (this.searchEngine) {
|
|
488
|
+
this.searchEngine = new SearchEngine(this.apiGroups);
|
|
489
|
+
}
|
|
490
|
+
// Update explorer service with new groups
|
|
491
|
+
if (this.explorerService) {
|
|
492
|
+
this.explorerService = new ExplorerService(this.apiGroups);
|
|
493
|
+
}
|
|
494
|
+
// Update executor with new groups
|
|
495
|
+
if (this.executor) {
|
|
496
|
+
this.executor = new SandboxExecutor({
|
|
497
|
+
defaultTimeout: this.config.execution.timeout,
|
|
498
|
+
maxTimeout: this.config.execution.timeout * 2,
|
|
499
|
+
defaultMemoryLimit: this.config.execution.memory,
|
|
500
|
+
maxMemoryLimit: this.config.execution.memory * 2,
|
|
501
|
+
defaultLLMCallLimit: this.config.execution.llmCalls,
|
|
502
|
+
maxLLMCallLimit: this.config.execution.llmCalls * 2,
|
|
503
|
+
cacheProvider: this.cacheProvider,
|
|
504
|
+
}, this.apiGroups, this.approvalHandler, this.sessionManager);
|
|
505
|
+
}
|
|
506
|
+
for (const group of groups) {
|
|
507
|
+
log.info(` ✅ Dynamically loaded: ${group.name} (${group.functions?.length || 0} functions)`);
|
|
508
|
+
}
|
|
509
|
+
}
|
|
510
|
+
/**
|
|
511
|
+
* Load an OpenAPI spec and add it to the server
|
|
512
|
+
* Works both before and after server starts
|
|
513
|
+
* @param source - URL or file path to OpenAPI spec
|
|
514
|
+
* @param options - OpenAPI loading options
|
|
515
|
+
*/
|
|
516
|
+
async loadOpenAPI(source, options = {}) {
|
|
517
|
+
const { loadOpenAPI: loadSpec } = await import('./openapi-loader.js');
|
|
518
|
+
log.info(`📚 Loading OpenAPI spec: ${options.name || 'API'} from ${source}`);
|
|
519
|
+
try {
|
|
520
|
+
const apiGroup = await loadSpec(source, options);
|
|
521
|
+
this.use(apiGroup);
|
|
522
|
+
return this;
|
|
523
|
+
}
|
|
524
|
+
catch (error) {
|
|
525
|
+
log.error(`❌ Failed to load OpenAPI spec: ${error.message}`);
|
|
526
|
+
throw error;
|
|
527
|
+
}
|
|
528
|
+
}
|
|
529
|
+
/**
|
|
530
|
+
* Load a GraphQL spec and add it to the server
|
|
531
|
+
* Works both before and after server starts
|
|
532
|
+
* @param source - URL or file path to GraphQL spec (SDL, introspection JSON, or endpoint URL)
|
|
533
|
+
* @param options - GraphQL loading options
|
|
534
|
+
*/
|
|
535
|
+
async loadGraphQL(source, options = {}) {
|
|
536
|
+
try {
|
|
537
|
+
const apiGroup = await loadGraphQL(source, options);
|
|
538
|
+
this.use(apiGroup);
|
|
539
|
+
return this;
|
|
540
|
+
}
|
|
541
|
+
catch (error) {
|
|
542
|
+
log.error(`Failed to load GraphQL spec: ${error.message}`);
|
|
543
|
+
throw error;
|
|
544
|
+
}
|
|
545
|
+
}
|
|
384
546
|
/**
|
|
385
547
|
* Get raw Node.js request handler for framework integration
|
|
386
548
|
* Use this to integrate ATP with Express, Fastify, or any Node.js framework
|
|
549
|
+
* Components will be automatically initialized on first request if not already started.
|
|
387
550
|
*/
|
|
388
551
|
handler() {
|
|
389
|
-
|
|
390
|
-
!this.
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
}
|
|
552
|
+
return async (req, res) => {
|
|
553
|
+
if (!this.isRunning && !this.initPromise) {
|
|
554
|
+
this.initPromise = this.start();
|
|
555
|
+
}
|
|
556
|
+
if (this.initPromise) {
|
|
557
|
+
await this.initPromise;
|
|
558
|
+
this.initPromise = null;
|
|
559
|
+
}
|
|
560
|
+
return handleHTTPRequest(req, res, {
|
|
561
|
+
cacheProvider: this.cacheProvider,
|
|
562
|
+
authProvider: this.authProvider,
|
|
563
|
+
auditSink: this.auditSink,
|
|
564
|
+
customLogger: this.customLogger,
|
|
565
|
+
middleware: this.middleware,
|
|
566
|
+
routeHandler: (ctx) => handleRoute(ctx, this),
|
|
567
|
+
sessionManager: this.sessionManager,
|
|
568
|
+
}, this.responseHeaders);
|
|
569
|
+
};
|
|
407
570
|
}
|
|
408
571
|
/**
|
|
409
572
|
* Get Express middleware
|
|
@@ -414,7 +577,10 @@ export class AgentToolProtocolServer {
|
|
|
414
577
|
toExpress() {
|
|
415
578
|
const requestHandler = this.handler();
|
|
416
579
|
return (req, res, next) => {
|
|
417
|
-
requestHandler(req, res).catch(
|
|
580
|
+
requestHandler(req, res).catch((error) => {
|
|
581
|
+
log.error('Express handler error:', error);
|
|
582
|
+
next(error);
|
|
583
|
+
});
|
|
418
584
|
};
|
|
419
585
|
}
|
|
420
586
|
/**
|
|
@@ -427,6 +593,10 @@ export class AgentToolProtocolServer {
|
|
|
427
593
|
return async (request, reply) => {
|
|
428
594
|
const req = request.raw;
|
|
429
595
|
const res = reply.raw;
|
|
596
|
+
const fastifyReq = request;
|
|
597
|
+
if (fastifyReq.body !== undefined) {
|
|
598
|
+
req.body = fastifyReq.body;
|
|
599
|
+
}
|
|
430
600
|
await requestHandler(req, res);
|
|
431
601
|
};
|
|
432
602
|
}
|