@mondaydotcomorg/atp-server 0.20.0 → 0.20.2

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/index.js CHANGED
@@ -2,7 +2,7 @@ import { log, isReplayMode, setCurrentExecutionId, getAPIResultFromCache, approv
2
2
  import fs, { readFile } from 'fs/promises';
3
3
  import yaml from 'js-yaml';
4
4
  import { createServer as createServer$1 } from 'http';
5
- import { ProvenanceMode, ToolOperationType, ToolSensitivityLevel, CallbackType, ToolOperation, ExecutionStatus, sanitizeInput, MAX_CODE_SIZE, ExecutionErrorCode } from '@mondaydotcomorg/atp-protocol';
5
+ import { ProvenanceMode, ToolOperationType, ToolSensitivityLevel, createToolStartEvent, createToolEndEvent, CallbackType, ToolOperation, ExecutionStatus, sanitizeInput, MAX_CODE_SIZE, ExecutionErrorCode } from '@mondaydotcomorg/atp-protocol';
6
6
  import { getProvenance, createProvenanceProxy, ProvenanceSource, setProvenanceExecutionId, SecurityPolicyEngine, createTrackingRuntime, registerProvenanceMetadata, instrumentCode, captureProvenanceSnapshot, cleanupProvenanceForExecution, clearProvenanceExecutionId, DynamicPolicyRegistry, getProvenanceForPrimitive, computeDigest, verifyProvenanceHints, restoreProvenanceSnapshot, markPrimitiveTainted, ProvenanceMode as ProvenanceMode$1, issueProvenanceToken } from '@mondaydotcomorg/atp-provenance';
7
7
  export { ProvenanceMode, ProvenanceSecurityError, ProvenanceSource, SecurityPolicyEngine, auditSensitiveAccess, blockLLMRecipients, blockLLMRecipientsWithApproval, canRead, captureProvenanceState, cleanupProvenanceForExecution, clearProvenanceExecutionId, createCustomPolicy, createProvenanceProxy, createTrackingRuntime, getAllProvenance, getBuiltInPolicies, getBuiltInPoliciesWithApproval, getProvenance, getProvenanceForPrimitive, hasProvenance, instrumentCode, isPrimitiveTainted, markPrimitiveTainted, preventDataExfiltration, preventDataExfiltrationWithApproval, requireUserOrigin, requireUserOriginWithApproval, restoreProvenanceState, setProvenanceExecutionId } from '@mondaydotcomorg/atp-provenance';
8
8
  import crypto, { randomBytes, randomUUID } from 'crypto';
@@ -6410,10 +6410,28 @@ function convertOperation(path, method, operation, spec, baseURL, options, auth)
6410
6410
  url.searchParams.append(key, value);
6411
6411
  }
6412
6412
  try {
6413
- const response = await fetch(url.toString(), {
6414
- method: method.toUpperCase(),
6415
- headers,
6416
- body: body ? JSON.stringify(body) : void 0
6413
+ let finalUrl = url.toString();
6414
+ let finalMethod = method.toUpperCase();
6415
+ let finalHeaders = {
6416
+ ...headers
6417
+ };
6418
+ let finalBody = body ? JSON.stringify(body) : void 0;
6419
+ if (options.requestTransformer) {
6420
+ const transformed = await options.requestTransformer({
6421
+ url: finalUrl,
6422
+ method: finalMethod,
6423
+ headers: finalHeaders,
6424
+ body
6425
+ });
6426
+ if (transformed.url) finalUrl = transformed.url;
6427
+ if (transformed.method) finalMethod = transformed.method;
6428
+ if (transformed.headers) finalHeaders = transformed.headers;
6429
+ if (transformed.body !== void 0) finalBody = transformed.body;
6430
+ }
6431
+ const response = await fetch(finalUrl, {
6432
+ method: finalMethod,
6433
+ headers: finalHeaders,
6434
+ body: finalBody
6417
6435
  });
6418
6436
  if (!response.ok) {
6419
6437
  const errorText = await response.text();
@@ -7050,6 +7068,24 @@ function reattachProvenanceFromHints(args, hintMap) {
7050
7068
  __name(reattachProvenanceFromHints, "reattachProvenanceFromHints");
7051
7069
 
7052
7070
  // src/executor/sandbox-builder.ts
7071
+ function createEventEmitter(eventCallback) {
7072
+ return (eventOrType, data, runId) => {
7073
+ if (!eventCallback) return;
7074
+ const event = typeof eventOrType === "string" ? {
7075
+ type: eventOrType,
7076
+ data,
7077
+ timestamp: Date.now(),
7078
+ runId
7079
+ } : eventOrType;
7080
+ setImmediate(() => {
7081
+ try {
7082
+ eventCallback(event);
7083
+ } catch (error) {
7084
+ }
7085
+ });
7086
+ };
7087
+ }
7088
+ __name(createEventEmitter, "createEventEmitter");
7053
7089
  var SandboxBuilder = class {
7054
7090
  static {
7055
7091
  __name(this, "SandboxBuilder");
@@ -7408,21 +7444,25 @@ var SandboxBuilder = class {
7408
7444
  sensitivityLevel: metadata?.sensitivityLevel
7409
7445
  });
7410
7446
  }
7447
+ const emit = createEventEmitter(config.eventCallback);
7411
7448
  const handlerContext = {
7412
7449
  metadata,
7413
- requestContext: config.requestContext
7450
+ requestContext: config.requestContext,
7451
+ emit
7414
7452
  };
7415
7453
  const toolCallStartTime = Date.now();
7416
7454
  let result;
7417
7455
  let toolCallError;
7456
+ emit(createToolStartEvent(func.name, group.name, input));
7418
7457
  try {
7419
7458
  result = await handler(input, handlerContext);
7420
7459
  } catch (error) {
7421
7460
  toolCallError = error instanceof Error ? error : new Error(String(error));
7422
7461
  throw error;
7423
7462
  } finally {
7463
+ const duration = Date.now() - toolCallStartTime;
7464
+ emit(createToolEndEvent(func.name, group.name, toolCallError ? void 0 : result, duration, !toolCallError, toolCallError?.message));
7424
7465
  if (config.onToolCall) {
7425
- const duration = Date.now() - toolCallStartTime;
7426
7466
  config.onToolCall({
7427
7467
  toolName: func.name,
7428
7468
  apiGroup: group.name,
@@ -11250,7 +11290,8 @@ async function handleExecute(ctx, executor, stateManager, config, auditSink, ses
11250
11290
  path: ctx.path,
11251
11291
  method: ctx.method
11252
11292
  },
11253
- onToolCall
11293
+ onToolCall,
11294
+ eventCallback: requestConfig.eventCallback
11254
11295
  };
11255
11296
  let hintMap;
11256
11297
  const prelimExecutionId = crypto.randomUUID();