avantgate 1.4.0 → 1.6.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.
- package/README.md +1 -0
- package/dist/agent/types.d.ts +1 -1
- package/dist/agent/types.d.ts.map +1 -1
- package/dist/{chunk-DTM2OLCG.mjs → chunk-4XWO3NZW.mjs} +69 -18
- package/dist/client/browser-exporter.d.ts +32 -0
- package/dist/client/browser-exporter.d.ts.map +1 -0
- package/dist/client/client.d.ts +37 -0
- package/dist/client/client.d.ts.map +1 -0
- package/dist/client/index.d.ts +5 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/index.js +259 -0
- package/dist/client/index.mjs +230 -0
- package/dist/client/types.d.ts +59 -0
- package/dist/client/types.d.ts.map +1 -0
- package/dist/client/useAvantGateTelemetry.d.ts +14 -0
- package/dist/client/useAvantGateTelemetry.d.ts.map +1 -0
- package/dist/index.js +71 -18
- package/dist/index.mjs +6 -2
- package/dist/workflow/define-workflow.d.ts +1 -1
- package/dist/workflow/define-workflow.d.ts.map +1 -1
- package/dist/workflow/engine.d.ts +1 -1
- package/dist/workflow/engine.d.ts.map +1 -1
- package/dist/workflow/errors.d.ts +7 -0
- package/dist/workflow/errors.d.ts.map +1 -1
- package/dist/workflow/index.d.ts +1 -1
- package/dist/workflow/index.d.ts.map +1 -1
- package/dist/workflow/index.js +73 -20
- package/dist/workflow/index.mjs +7 -3
- package/dist/workflow/types.d.ts +4 -1
- package/dist/workflow/types.d.ts.map +1 -1
- package/package.json +20 -4
package/README.md
CHANGED
|
@@ -54,6 +54,7 @@ Available as a **Managed Cloud Control Plane** or an **Out-of-Process High-Avail
|
|
|
54
54
|
- 🔀 **Zero-Downtime Multi-Model Failover**: Seamless client-side failover to fallback providers (or local zero-cost Ollama) when upstream APIs return HTTP 429/500 errors.
|
|
55
55
|
- 🔧 **Self-Repairing Structured Outputs**: Strict Zod schema compliance with automated heuristic markdown/JSON repair if the model hallucinates formatting.
|
|
56
56
|
- 📡 **Zero-Dependency Telemetry Bridge (`HttpTelemetryExporter`, `PlatformStorageAdapter`)**: Mirror execution audits and hierarchical tool traces asynchronously without adding heavy external dependencies.
|
|
57
|
+
- 🌐 **Lightweight Front-End SDK & React Hook (`avantgate/client`)**: Micro-bundle (< 1.7 KB gzipped) for browser UIs. Captures client-side security alerts (blocked API keys, prompt injection attempts), UI render metrics, and user feedback, streaming them directly to gateWall via `fetch(keepalive)` without loading backend infrastructure.
|
|
57
58
|
- 📦 **100% Framework Agnostic**: Works seamlessly in Next.js, Express, Fastify, NestJS, Cloudflare Workers, AWS Lambda, or CLI scripts.
|
|
58
59
|
|
|
59
60
|
---
|
package/dist/agent/types.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ import type { z } from "zod";
|
|
|
2
2
|
/**
|
|
3
3
|
* Lifecycle status for durable agent workflow steps.
|
|
4
4
|
*/
|
|
5
|
-
export type StepStatus = "PENDING" | "RUNNING" | "COMPLETED" | "FAILED" | "WAITING_APPROVAL";
|
|
5
|
+
export type StepStatus = "PENDING" | "RUNNING" | "COMPLETED" | "FAILED" | "WAITING_APPROVAL" | "ABORTED";
|
|
6
6
|
/**
|
|
7
7
|
* Token usage metrics for LLM calls and tool executions.
|
|
8
8
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/agent/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAE7B;;GAEG;AACH,MAAM,MAAM,UAAU,GAClB,SAAS,GACT,SAAS,GACT,WAAW,GACX,QAAQ,GACR,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/agent/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -33,21 +33,35 @@ var WorkflowValidationError = class extends Error {
|
|
|
33
33
|
this.issues = issues;
|
|
34
34
|
}
|
|
35
35
|
};
|
|
36
|
+
var WorkflowAbortSignal = class extends Error {
|
|
37
|
+
__isWorkflowAbort = true;
|
|
38
|
+
reason;
|
|
39
|
+
payload;
|
|
40
|
+
constructor(reason, payload) {
|
|
41
|
+
super(`Workflow aborted: ${reason}`);
|
|
42
|
+
this.name = "WorkflowAbortSignal";
|
|
43
|
+
this.reason = reason;
|
|
44
|
+
this.payload = payload;
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
var isWorkflowAbortSignal = (value) => {
|
|
48
|
+
return typeof value === "object" && value !== null && value.__isWorkflowAbort === true;
|
|
49
|
+
};
|
|
36
50
|
|
|
37
51
|
// src/workflow/engine.ts
|
|
38
|
-
|
|
52
|
+
var generateRunId = (workflowId) => {
|
|
39
53
|
const timestamp = Date.now();
|
|
40
54
|
const randomSuffix = Math.random().toString(36).substring(2, 9);
|
|
41
55
|
return `run_${workflowId}_${timestamp}_${randomSuffix}`;
|
|
42
|
-
}
|
|
43
|
-
|
|
56
|
+
};
|
|
57
|
+
var validateInput = (config, input) => {
|
|
44
58
|
const parseResult = config.inputSchema.safeParse(input);
|
|
45
59
|
if (!parseResult.success) {
|
|
46
60
|
throw new WorkflowValidationError(config.id, parseResult.error.issues);
|
|
47
61
|
}
|
|
48
62
|
return parseResult.data;
|
|
49
|
-
}
|
|
50
|
-
|
|
63
|
+
};
|
|
64
|
+
var createStepContext = (params) => {
|
|
51
65
|
const { workflowId, stepId, runId, context, stepResults } = params;
|
|
52
66
|
return {
|
|
53
67
|
workflowId,
|
|
@@ -76,10 +90,13 @@ function createStepContext(params) {
|
|
|
76
90
|
});
|
|
77
91
|
}
|
|
78
92
|
throw new StepSuspendedError(stepId, workflowId, options?.prompt);
|
|
93
|
+
},
|
|
94
|
+
abort: (reason, payload) => {
|
|
95
|
+
throw new WorkflowAbortSignal(reason, payload);
|
|
79
96
|
}
|
|
80
97
|
};
|
|
81
|
-
}
|
|
82
|
-
async
|
|
98
|
+
};
|
|
99
|
+
var rollbackSaga = async (params) => {
|
|
83
100
|
const {
|
|
84
101
|
workflowId,
|
|
85
102
|
failedStepId,
|
|
@@ -123,12 +140,38 @@ async function rollbackSaga(params) {
|
|
|
123
140
|
compensatedSteps,
|
|
124
141
|
failedCompensations
|
|
125
142
|
});
|
|
126
|
-
}
|
|
127
|
-
async
|
|
143
|
+
};
|
|
144
|
+
var executeWorkflow = async (config, rawInput, context) => {
|
|
128
145
|
const input = validateInput(config, rawInput);
|
|
129
146
|
const runId = context?.runId ?? generateRunId(config.id);
|
|
130
147
|
const stepResults = {};
|
|
131
148
|
const completedSteps = [];
|
|
149
|
+
const handleAbort = async (stepId, signal) => {
|
|
150
|
+
stepResults[stepId] = {
|
|
151
|
+
aborted: true,
|
|
152
|
+
reason: signal.reason,
|
|
153
|
+
payload: signal.payload
|
|
154
|
+
};
|
|
155
|
+
if (context?.storage) {
|
|
156
|
+
await context.storage.updateStepStatus(config.id, stepId, "ABORTED", {
|
|
157
|
+
result: signal.payload,
|
|
158
|
+
metadata: { abortReason: signal.reason }
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
const abortOutput = signal.payload ?? {
|
|
162
|
+
aborted: true,
|
|
163
|
+
reason: signal.reason
|
|
164
|
+
};
|
|
165
|
+
return {
|
|
166
|
+
workflowId: config.id,
|
|
167
|
+
runId,
|
|
168
|
+
status: "ABORTED",
|
|
169
|
+
stepResults,
|
|
170
|
+
abortReason: signal.reason,
|
|
171
|
+
abortPayload: signal.payload,
|
|
172
|
+
output: abortOutput
|
|
173
|
+
};
|
|
174
|
+
};
|
|
132
175
|
for (const step of config.steps) {
|
|
133
176
|
const stepCtx = createStepContext({
|
|
134
177
|
workflowId: config.id,
|
|
@@ -139,6 +182,9 @@ async function executeWorkflow(config, rawInput, context) {
|
|
|
139
182
|
});
|
|
140
183
|
try {
|
|
141
184
|
const result = await step.execute(input, stepCtx);
|
|
185
|
+
if (isWorkflowAbortSignal(result)) {
|
|
186
|
+
return await handleAbort(step.id, result);
|
|
187
|
+
}
|
|
142
188
|
stepResults[step.id] = result;
|
|
143
189
|
completedSteps.push({ step, result });
|
|
144
190
|
if (context?.storage) {
|
|
@@ -153,6 +199,9 @@ async function executeWorkflow(config, rawInput, context) {
|
|
|
153
199
|
stepResults
|
|
154
200
|
};
|
|
155
201
|
}
|
|
202
|
+
if (isWorkflowAbortSignal(error)) {
|
|
203
|
+
return await handleAbort(step.id, error);
|
|
204
|
+
}
|
|
156
205
|
await rollbackSaga({
|
|
157
206
|
workflowId: config.id,
|
|
158
207
|
failedStepId: step.id,
|
|
@@ -173,22 +222,22 @@ async function executeWorkflow(config, rawInput, context) {
|
|
|
173
222
|
stepResults,
|
|
174
223
|
output: finalOutput
|
|
175
224
|
};
|
|
176
|
-
}
|
|
225
|
+
};
|
|
177
226
|
|
|
178
227
|
// src/workflow/define-workflow.ts
|
|
179
|
-
|
|
228
|
+
var resolveWorkflowImpact = (config, options) => {
|
|
180
229
|
if (options?.impact) {
|
|
181
230
|
return options.impact;
|
|
182
231
|
}
|
|
183
232
|
return config.impact ?? "MUTATIVE";
|
|
184
|
-
}
|
|
185
|
-
|
|
233
|
+
};
|
|
234
|
+
var resolveRequireApproval = (impact, options) => {
|
|
186
235
|
if (options?.requireApproval !== void 0) {
|
|
187
236
|
return options.requireApproval;
|
|
188
237
|
}
|
|
189
238
|
return impact === "DESTRUCTIVE";
|
|
190
|
-
}
|
|
191
|
-
|
|
239
|
+
};
|
|
240
|
+
var buildToolExecutionContext = (options, toolCtx) => {
|
|
192
241
|
const tenantId = typeof toolCtx?.tenantId === "string" ? toolCtx.tenantId : options?.defaultContext?.tenantId;
|
|
193
242
|
const userId = typeof toolCtx?.userId === "string" ? toolCtx.userId : options?.defaultContext?.userId;
|
|
194
243
|
return {
|
|
@@ -197,8 +246,8 @@ function buildToolExecutionContext(options, toolCtx) {
|
|
|
197
246
|
services: options?.defaultContext?.services ?? {},
|
|
198
247
|
storage: options?.storage ?? options?.defaultContext?.storage
|
|
199
248
|
};
|
|
200
|
-
}
|
|
201
|
-
|
|
249
|
+
};
|
|
250
|
+
var defineWorkflow = (config) => {
|
|
202
251
|
const workflowImpact = config.impact ?? "MUTATIVE";
|
|
203
252
|
return {
|
|
204
253
|
id: config.id,
|
|
@@ -242,11 +291,13 @@ function defineWorkflow(config) {
|
|
|
242
291
|
return tool;
|
|
243
292
|
}
|
|
244
293
|
};
|
|
245
|
-
}
|
|
294
|
+
};
|
|
246
295
|
|
|
247
296
|
export {
|
|
248
297
|
WorkflowSagaRollbackError,
|
|
249
298
|
WorkflowValidationError,
|
|
299
|
+
WorkflowAbortSignal,
|
|
300
|
+
isWorkflowAbortSignal,
|
|
250
301
|
executeWorkflow,
|
|
251
302
|
defineWorkflow
|
|
252
303
|
};
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { BrowserTelemetryExporterConfig, ClientTelemetryEvent } from "./types";
|
|
2
|
+
export declare class BrowserTelemetryExporter {
|
|
3
|
+
private readonly publicKey;
|
|
4
|
+
private readonly endpoint;
|
|
5
|
+
private agentName?;
|
|
6
|
+
private runId?;
|
|
7
|
+
private readonly batchIntervalMs;
|
|
8
|
+
private readonly maxBatchSize;
|
|
9
|
+
private readonly fetchFn?;
|
|
10
|
+
private readonly onError?;
|
|
11
|
+
private buffer;
|
|
12
|
+
private timer;
|
|
13
|
+
private isFlushing;
|
|
14
|
+
private isDestroyed;
|
|
15
|
+
private readonly handleVisibilityChange;
|
|
16
|
+
private readonly handleBeforeUnload;
|
|
17
|
+
constructor(config: BrowserTelemetryExporterConfig);
|
|
18
|
+
updateContext: (context: {
|
|
19
|
+
runId?: string;
|
|
20
|
+
agentName?: string;
|
|
21
|
+
}) => void;
|
|
22
|
+
getRunId: () => string | undefined;
|
|
23
|
+
getAgentName: () => string | undefined;
|
|
24
|
+
private startTimer;
|
|
25
|
+
private setupBrowserListeners;
|
|
26
|
+
emit: (event: ClientTelemetryEvent) => void;
|
|
27
|
+
flush: () => Promise<void>;
|
|
28
|
+
private dispatchPayload;
|
|
29
|
+
private handleFlushError;
|
|
30
|
+
destroy: () => void;
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=browser-exporter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser-exporter.d.ts","sourceRoot":"","sources":["../../src/client/browser-exporter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,8BAA8B,EAC9B,oBAAoB,EAErB,MAAM,SAAS,CAAC;AAMjB,qBAAa,wBAAwB;IACnC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,SAAS,CAAC,CAAS;IAC3B,OAAO,CAAC,KAAK,CAAC,CAAS;IACvB,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;IACzC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAe;IACxC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAyB;IAElD,OAAO,CAAC,MAAM,CAA8B;IAC5C,OAAO,CAAC,KAAK,CAA+C;IAC5D,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,WAAW,CAAS;IAE5B,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAIrC;IAEF,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAEjC;gBAEU,MAAM,EAAE,8BAA8B;IAc3C,aAAa,GAAI,SAAS;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,KAAG,IAAI,CAO5E;IAEK,QAAQ,QAAO,MAAM,GAAG,SAAS,CAAe;IAEhD,YAAY,QAAO,MAAM,GAAG,SAAS,CAAmB;IAE/D,OAAO,CAAC,UAAU;IASlB,OAAO,CAAC,qBAAqB;IAStB,IAAI,GAAI,OAAO,oBAAoB,KAAG,IAAI,CAQ/C;IAEK,KAAK,QAAa,OAAO,CAAC,IAAI,CAAC,CAuBpC;IAEF,OAAO,CAAC,eAAe,CAkBrB;IAEF,OAAO,CAAC,gBAAgB,CAStB;IAEK,OAAO,QAAO,IAAI,CAavB;CACH"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { BrowserTelemetryExporter } from "./browser-exporter";
|
|
2
|
+
import type { BrowserTelemetryExporterConfig, ClientSecurityAlertEvent } from "./types";
|
|
3
|
+
export interface TrackSecurityAlertDetails {
|
|
4
|
+
inputLength: number;
|
|
5
|
+
snippet?: string;
|
|
6
|
+
matchedPatternSnippet?: string;
|
|
7
|
+
}
|
|
8
|
+
export interface TrackDataRenderedOptions {
|
|
9
|
+
renderedItemCount?: number;
|
|
10
|
+
channel?: "SOCKET" | "STREAM" | "HTTP";
|
|
11
|
+
}
|
|
12
|
+
export interface TrackFeedbackOptions {
|
|
13
|
+
rating: "POSITIVE" | "NEGATIVE";
|
|
14
|
+
tag?: "HELPFUL" | "INACCURATE" | "UNSAFE" | "OFF_TOPIC";
|
|
15
|
+
comment?: string;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Public interface for the universal (framework-agnostic) avantGate telemetry client.
|
|
19
|
+
*/
|
|
20
|
+
export interface AvantGateClient {
|
|
21
|
+
trackSecurityAlert: (alertType: ClientSecurityAlertEvent["alertType"], details: TrackSecurityAlertDetails) => void;
|
|
22
|
+
trackClientDataRendered: (toolId: string, options?: TrackDataRenderedOptions) => void;
|
|
23
|
+
trackFeedback: (feedback: TrackFeedbackOptions) => void;
|
|
24
|
+
updateContext: (context: {
|
|
25
|
+
runId?: string;
|
|
26
|
+
agentName?: string;
|
|
27
|
+
}) => void;
|
|
28
|
+
flush: () => Promise<void>;
|
|
29
|
+
destroy: () => void;
|
|
30
|
+
exporter: BrowserTelemetryExporter;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Creates a universal, framework-agnostic avantGate client instance.
|
|
34
|
+
* Works seamlessly in Vite (Vanilla JS, Vue, Svelte, SolidJS), Next.js, or browser scripts.
|
|
35
|
+
*/
|
|
36
|
+
export declare const createAvantGateClient: (config: BrowserTelemetryExporterConfig) => AvantGateClient;
|
|
37
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/client/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,KAAK,EACV,8BAA8B,EAC9B,wBAAwB,EACzB,MAAM,SAAS,CAAC;AAEjB,MAAM,WAAW,yBAAyB;IACxC,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,qBAAqB,CAAC,EAAE,MAAM,CAAC;CAChC;AAED,MAAM,WAAW,wBAAwB;IACvC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,OAAO,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,MAAM,CAAC;CACxC;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,UAAU,GAAG,UAAU,CAAC;IAChC,GAAG,CAAC,EAAE,SAAS,GAAG,YAAY,GAAG,QAAQ,GAAG,WAAW,CAAC;IACxD,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,kBAAkB,EAAE,CAClB,SAAS,EAAE,wBAAwB,CAAC,WAAW,CAAC,EAChD,OAAO,EAAE,yBAAyB,KAC/B,IAAI,CAAC;IACV,uBAAuB,EAAE,CACvB,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,wBAAwB,KAC/B,IAAI,CAAC;IACV,aAAa,EAAE,CAAC,QAAQ,EAAE,oBAAoB,KAAK,IAAI,CAAC;IACxD,aAAa,EAAE,CAAC,OAAO,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IACzE,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,QAAQ,EAAE,wBAAwB,CAAC;CACpC;AAED;;;GAGG;AACH,eAAO,MAAM,qBAAqB,GAChC,QAAQ,8BAA8B,KACrC,eAkDF,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { BrowserTelemetryExporter } from "./browser-exporter";
|
|
2
|
+
export { createAvantGateClient, type AvantGateClient, type TrackSecurityAlertDetails, type TrackDataRenderedOptions, type TrackFeedbackOptions, } from "./client";
|
|
3
|
+
export { useAvantGateTelemetry } from "./useAvantGateTelemetry";
|
|
4
|
+
export type { ClientSecurityAlertEvent, ClientDataRenderedEvent, UserFeedbackEvent, ClientTelemetryEvent, BrowserTelemetryExporterConfig, ClientTelemetryIngestPayload, } from "./types";
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EACL,qBAAqB,EACrB,KAAK,eAAe,EACpB,KAAK,yBAAyB,EAC9B,KAAK,wBAAwB,EAC7B,KAAK,oBAAoB,GAC1B,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,YAAY,EACV,wBAAwB,EACxB,uBAAuB,EACvB,iBAAiB,EACjB,oBAAoB,EACpB,8BAA8B,EAC9B,4BAA4B,GAC7B,MAAM,SAAS,CAAC"}
|
|
@@ -0,0 +1,259 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// src/client/index.ts
|
|
21
|
+
var client_exports = {};
|
|
22
|
+
__export(client_exports, {
|
|
23
|
+
BrowserTelemetryExporter: () => BrowserTelemetryExporter,
|
|
24
|
+
createAvantGateClient: () => createAvantGateClient,
|
|
25
|
+
useAvantGateTelemetry: () => useAvantGateTelemetry
|
|
26
|
+
});
|
|
27
|
+
module.exports = __toCommonJS(client_exports);
|
|
28
|
+
|
|
29
|
+
// src/client/browser-exporter.ts
|
|
30
|
+
var DEFAULT_ENDPOINT = "http://localhost:3000/api/v1/ingest/events";
|
|
31
|
+
var DEFAULT_INTERVAL_MS = 3e3;
|
|
32
|
+
var DEFAULT_MAX_BATCH_SIZE = 20;
|
|
33
|
+
var BrowserTelemetryExporter = class {
|
|
34
|
+
publicKey;
|
|
35
|
+
endpoint;
|
|
36
|
+
agentName;
|
|
37
|
+
runId;
|
|
38
|
+
batchIntervalMs;
|
|
39
|
+
maxBatchSize;
|
|
40
|
+
fetchFn;
|
|
41
|
+
onError;
|
|
42
|
+
buffer = [];
|
|
43
|
+
timer = null;
|
|
44
|
+
isFlushing = false;
|
|
45
|
+
isDestroyed = false;
|
|
46
|
+
handleVisibilityChange = () => {
|
|
47
|
+
if (typeof document !== "undefined" && document.visibilityState === "hidden") {
|
|
48
|
+
void this.flush();
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
handleBeforeUnload = () => {
|
|
52
|
+
void this.flush();
|
|
53
|
+
};
|
|
54
|
+
constructor(config) {
|
|
55
|
+
this.publicKey = config.publicKey;
|
|
56
|
+
this.endpoint = config.endpoint ?? DEFAULT_ENDPOINT;
|
|
57
|
+
this.agentName = config.agentName;
|
|
58
|
+
this.runId = config.runId;
|
|
59
|
+
this.batchIntervalMs = config.batchIntervalMs ?? DEFAULT_INTERVAL_MS;
|
|
60
|
+
this.maxBatchSize = config.maxBatchSize ?? DEFAULT_MAX_BATCH_SIZE;
|
|
61
|
+
this.fetchFn = config.fetchFn ?? (typeof fetch !== "undefined" ? fetch.bind(globalThis) : void 0);
|
|
62
|
+
this.onError = config.onError;
|
|
63
|
+
this.startTimer();
|
|
64
|
+
this.setupBrowserListeners();
|
|
65
|
+
}
|
|
66
|
+
updateContext = (context) => {
|
|
67
|
+
if (context.runId !== void 0) {
|
|
68
|
+
this.runId = context.runId;
|
|
69
|
+
}
|
|
70
|
+
if (context.agentName !== void 0) {
|
|
71
|
+
this.agentName = context.agentName;
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
getRunId = () => this.runId;
|
|
75
|
+
getAgentName = () => this.agentName;
|
|
76
|
+
startTimer() {
|
|
77
|
+
if (this.batchIntervalMs <= 0 || typeof setInterval === "undefined") {
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
this.timer = setInterval(() => {
|
|
81
|
+
void this.flush();
|
|
82
|
+
}, this.batchIntervalMs);
|
|
83
|
+
}
|
|
84
|
+
setupBrowserListeners() {
|
|
85
|
+
if (typeof document !== "undefined" && typeof document.addEventListener === "function") {
|
|
86
|
+
document.addEventListener("visibilitychange", this.handleVisibilityChange);
|
|
87
|
+
}
|
|
88
|
+
if (typeof window !== "undefined" && typeof window.addEventListener === "function") {
|
|
89
|
+
window.addEventListener("beforeunload", this.handleBeforeUnload);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
emit = (event) => {
|
|
93
|
+
if (this.isDestroyed) {
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
this.buffer.push(event);
|
|
97
|
+
if (this.buffer.length >= this.maxBatchSize) {
|
|
98
|
+
void this.flush();
|
|
99
|
+
}
|
|
100
|
+
};
|
|
101
|
+
flush = async () => {
|
|
102
|
+
if (this.isFlushing || this.buffer.length === 0 || !this.fetchFn) {
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
this.isFlushing = true;
|
|
106
|
+
const batch = [...this.buffer];
|
|
107
|
+
this.buffer = [];
|
|
108
|
+
const payload = {
|
|
109
|
+
runId: this.runId,
|
|
110
|
+
agentName: this.agentName,
|
|
111
|
+
timestamp: (/* @__PURE__ */ new Date()).toISOString(),
|
|
112
|
+
events: batch
|
|
113
|
+
};
|
|
114
|
+
try {
|
|
115
|
+
await this.dispatchPayload(payload);
|
|
116
|
+
} catch (err) {
|
|
117
|
+
this.handleFlushError(err, batch);
|
|
118
|
+
} finally {
|
|
119
|
+
this.isFlushing = false;
|
|
120
|
+
}
|
|
121
|
+
};
|
|
122
|
+
dispatchPayload = async (payload) => {
|
|
123
|
+
if (!this.fetchFn) {
|
|
124
|
+
throw new Error("No fetch implementation available in current environment");
|
|
125
|
+
}
|
|
126
|
+
const response = await this.fetchFn(this.endpoint, {
|
|
127
|
+
method: "POST",
|
|
128
|
+
headers: {
|
|
129
|
+
"Content-Type": "application/json",
|
|
130
|
+
Authorization: `Bearer ${this.publicKey}`
|
|
131
|
+
},
|
|
132
|
+
body: JSON.stringify(payload),
|
|
133
|
+
keepalive: true
|
|
134
|
+
});
|
|
135
|
+
if (!response.ok) {
|
|
136
|
+
throw new Error(`Browser telemetry ingestion failed: ${response.status} ${response.statusText}`);
|
|
137
|
+
}
|
|
138
|
+
};
|
|
139
|
+
handleFlushError = (err, failedBatch) => {
|
|
140
|
+
if (!this.isDestroyed && this.buffer.length < this.maxBatchSize * 2) {
|
|
141
|
+
this.buffer.unshift(...failedBatch);
|
|
142
|
+
}
|
|
143
|
+
const error = err instanceof Error ? err : new Error(String(err));
|
|
144
|
+
if (this.onError) {
|
|
145
|
+
this.onError(error);
|
|
146
|
+
}
|
|
147
|
+
};
|
|
148
|
+
destroy = () => {
|
|
149
|
+
this.isDestroyed = true;
|
|
150
|
+
if (this.timer) {
|
|
151
|
+
clearInterval(this.timer);
|
|
152
|
+
this.timer = null;
|
|
153
|
+
}
|
|
154
|
+
if (typeof document !== "undefined" && typeof document.removeEventListener === "function") {
|
|
155
|
+
document.removeEventListener("visibilitychange", this.handleVisibilityChange);
|
|
156
|
+
}
|
|
157
|
+
if (typeof window !== "undefined" && typeof window.removeEventListener === "function") {
|
|
158
|
+
window.removeEventListener("beforeunload", this.handleBeforeUnload);
|
|
159
|
+
}
|
|
160
|
+
void this.flush();
|
|
161
|
+
};
|
|
162
|
+
};
|
|
163
|
+
|
|
164
|
+
// src/client/client.ts
|
|
165
|
+
var createAvantGateClient = (config) => {
|
|
166
|
+
const exporter = new BrowserTelemetryExporter(config);
|
|
167
|
+
const trackSecurityAlert = (alertType, details) => {
|
|
168
|
+
const snippet = details.snippet ?? details.matchedPatternSnippet;
|
|
169
|
+
exporter.emit({
|
|
170
|
+
type: "CLIENT_SECURITY_ALERT",
|
|
171
|
+
alertType,
|
|
172
|
+
inputLength: details.inputLength,
|
|
173
|
+
snippet,
|
|
174
|
+
matchedPatternSnippet: snippet,
|
|
175
|
+
timestamp: (/* @__PURE__ */ new Date()).toISOString()
|
|
176
|
+
});
|
|
177
|
+
};
|
|
178
|
+
const trackClientDataRendered = (toolId, options) => {
|
|
179
|
+
exporter.emit({
|
|
180
|
+
type: "CLIENT_DATA_RENDERED",
|
|
181
|
+
toolId,
|
|
182
|
+
channel: options?.channel,
|
|
183
|
+
renderedItemCount: options?.renderedItemCount,
|
|
184
|
+
timestamp: (/* @__PURE__ */ new Date()).toISOString()
|
|
185
|
+
});
|
|
186
|
+
};
|
|
187
|
+
const trackFeedback = (feedback) => {
|
|
188
|
+
exporter.emit({
|
|
189
|
+
type: "USER_FEEDBACK",
|
|
190
|
+
rating: feedback.rating,
|
|
191
|
+
feedbackTag: feedback.tag,
|
|
192
|
+
userComment: feedback.comment,
|
|
193
|
+
timestamp: (/* @__PURE__ */ new Date()).toISOString()
|
|
194
|
+
});
|
|
195
|
+
};
|
|
196
|
+
return {
|
|
197
|
+
trackSecurityAlert,
|
|
198
|
+
trackClientDataRendered,
|
|
199
|
+
trackFeedback,
|
|
200
|
+
updateContext: exporter.updateContext,
|
|
201
|
+
flush: exporter.flush,
|
|
202
|
+
destroy: exporter.destroy,
|
|
203
|
+
exporter
|
|
204
|
+
};
|
|
205
|
+
};
|
|
206
|
+
|
|
207
|
+
// src/client/useAvantGateTelemetry.ts
|
|
208
|
+
var import_react = require("react");
|
|
209
|
+
var useAvantGateTelemetry = (config) => {
|
|
210
|
+
const clientRef = (0, import_react.useRef)(null);
|
|
211
|
+
if (!clientRef.current) {
|
|
212
|
+
clientRef.current = createAvantGateClient(config);
|
|
213
|
+
}
|
|
214
|
+
(0, import_react.useEffect)(() => {
|
|
215
|
+
clientRef.current?.updateContext({
|
|
216
|
+
runId: config.runId,
|
|
217
|
+
agentName: config.agentName
|
|
218
|
+
});
|
|
219
|
+
}, [config.runId, config.agentName]);
|
|
220
|
+
(0, import_react.useEffect)(() => {
|
|
221
|
+
return () => {
|
|
222
|
+
clientRef.current?.destroy();
|
|
223
|
+
clientRef.current = null;
|
|
224
|
+
};
|
|
225
|
+
}, []);
|
|
226
|
+
const trackSecurityAlert = (0, import_react.useCallback)(
|
|
227
|
+
(alertType, details) => {
|
|
228
|
+
clientRef.current?.trackSecurityAlert(alertType, details);
|
|
229
|
+
},
|
|
230
|
+
[]
|
|
231
|
+
);
|
|
232
|
+
const trackClientDataRendered = (0, import_react.useCallback)(
|
|
233
|
+
(toolId, options) => {
|
|
234
|
+
clientRef.current?.trackClientDataRendered(toolId, options);
|
|
235
|
+
},
|
|
236
|
+
[]
|
|
237
|
+
);
|
|
238
|
+
const trackFeedback = (0, import_react.useCallback)(
|
|
239
|
+
(feedback) => {
|
|
240
|
+
clientRef.current?.trackFeedback(feedback);
|
|
241
|
+
},
|
|
242
|
+
[]
|
|
243
|
+
);
|
|
244
|
+
return (0, import_react.useMemo)(
|
|
245
|
+
() => ({
|
|
246
|
+
trackSecurityAlert,
|
|
247
|
+
trackClientDataRendered,
|
|
248
|
+
trackFeedback,
|
|
249
|
+
exporter: clientRef.current?.exporter
|
|
250
|
+
}),
|
|
251
|
+
[trackSecurityAlert, trackClientDataRendered, trackFeedback]
|
|
252
|
+
);
|
|
253
|
+
};
|
|
254
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
255
|
+
0 && (module.exports = {
|
|
256
|
+
BrowserTelemetryExporter,
|
|
257
|
+
createAvantGateClient,
|
|
258
|
+
useAvantGateTelemetry
|
|
259
|
+
});
|