catelog 0.0.0-stage → 1.0.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/dist/agent.js ADDED
@@ -0,0 +1,309 @@
1
+ import { SecurityManager } from "./security.js";
2
+ import { SSEWriter } from "./sse.js";
3
+ import { toJsonSchema, validateSchemaData } from "./schema.js";
4
+ import { PROTOCOL_VERSION, } from "./types.js";
5
+ import { startAgentServer } from "./server.js";
6
+ export class MarketplaceAgent {
7
+ id;
8
+ name;
9
+ version;
10
+ description;
11
+ capabilities;
12
+ security;
13
+ config;
14
+ startTime;
15
+ constructor(config) {
16
+ this.config = config;
17
+ this.name = config.name;
18
+ this.id = config.id || slugify(config.name);
19
+ this.version = config.version || "1.0.0";
20
+ this.description = config.description || `Agent for ${this.name}`;
21
+ this.capabilities = {
22
+ streaming: true,
23
+ delta_stream: false,
24
+ max_timeout_seconds: 300,
25
+ ...config.capabilities,
26
+ };
27
+ this.security = new SecurityManager({ secret: config.secret });
28
+ this.startTime = Date.now();
29
+ }
30
+ getHealth() {
31
+ return {
32
+ status: "ready",
33
+ protocol_version: PROTOCOL_VERSION,
34
+ uptime_seconds: Math.floor((Date.now() - this.startTime) / 1000),
35
+ environment_ready: true,
36
+ };
37
+ }
38
+ getManifest() {
39
+ return {
40
+ id: this.id,
41
+ name: this.name,
42
+ version: this.version,
43
+ description: this.description,
44
+ protocol_version: PROTOCOL_VERSION,
45
+ capabilities: this.capabilities,
46
+ input_schema: toJsonSchema(this.config.inputSchema, "InputSchema"),
47
+ output_schema: toJsonSchema(this.config.outputSchema, "OutputSchema"),
48
+ };
49
+ }
50
+ serve(portOrOptions) {
51
+ const opts = typeof portOrOptions === "number" ? { port: portOrOptions } : portOrOptions;
52
+ return startAgentServer(this, opts);
53
+ }
54
+ async handleRequest(req, res) {
55
+ const method = req.method?.toUpperCase() || "GET";
56
+ const url = new URL(req.url || "/", `http://${req.headers.host || "localhost"}`);
57
+ const pathname = url.pathname;
58
+ // Enable CORS for testing & browser callers
59
+ res.setHeader("Access-Control-Allow-Origin", "*");
60
+ res.setHeader("Access-Control-Allow-Methods", "GET, POST, OPTIONS");
61
+ res.setHeader("Access-Control-Allow-Headers", "Content-Type, Accept, X-Marketplace-Protocol, X-Marketplace-Timestamp, X-Marketplace-Nonce, X-Marketplace-Run-Id, X-Marketplace-Signature");
62
+ if (method === "OPTIONS") {
63
+ res.writeHead(204);
64
+ res.end();
65
+ return;
66
+ }
67
+ try {
68
+ if (pathname === "/health" && method === "GET") {
69
+ this.writeJsonResponse(res, 200, this.getHealth());
70
+ return;
71
+ }
72
+ if (pathname === "/schema" && method === "GET") {
73
+ this.writeJsonResponse(res, 200, this.getManifest());
74
+ return;
75
+ }
76
+ if (pathname === "/execute" && method === "POST") {
77
+ await this.handleExecute(req, res);
78
+ return;
79
+ }
80
+ this.writeJsonResponse(res, 404, {
81
+ error: {
82
+ code: "NOT_FOUND",
83
+ message: `Endpoint ${method} ${pathname} not found`,
84
+ retryable: false,
85
+ },
86
+ });
87
+ }
88
+ catch (err) {
89
+ const error = normalizeError(err);
90
+ this.writeJsonResponse(res, 500, {
91
+ error,
92
+ });
93
+ }
94
+ }
95
+ async handleExecute(req, res) {
96
+ const rawBody = await readBody(req);
97
+ const headers = req.headers;
98
+ const path = req.url || "/execute";
99
+ const method = req.method || "POST";
100
+ // 1. Security & Signature verification
101
+ let authInfo;
102
+ try {
103
+ authInfo = this.security.verifyRequest({
104
+ method,
105
+ path,
106
+ headers,
107
+ rawBody,
108
+ });
109
+ }
110
+ catch (err) {
111
+ if (err && typeof err === "object" && "code" in err && "statusCode" in err) {
112
+ const secErr = err;
113
+ this.writeJsonResponse(res, secErr.statusCode, {
114
+ error: {
115
+ code: secErr.code,
116
+ message: secErr.message,
117
+ retryable: false,
118
+ },
119
+ });
120
+ return;
121
+ }
122
+ throw err;
123
+ }
124
+ // Parse request body
125
+ let payload;
126
+ try {
127
+ payload = rawBody.length > 0 ? JSON.parse(rawBody.toString("utf8")) : {};
128
+ }
129
+ catch {
130
+ this.writeJsonResponse(res, 400, {
131
+ error: {
132
+ code: "INVALID_INPUT",
133
+ message: "Malformed JSON request body",
134
+ retryable: false,
135
+ },
136
+ });
137
+ return;
138
+ }
139
+ const runId = payload.run_id || authInfo.runId;
140
+ this.security.markRunStarted(runId);
141
+ // 2. Pre-Execution Schema Validation
142
+ const validation = validateSchemaData(this.config.inputSchema, payload.input);
143
+ if (!validation.success) {
144
+ this.security.markRunCompleted(runId);
145
+ this.writeJsonResponse(res, 400, {
146
+ run_id: runId,
147
+ status: "failed",
148
+ duration_ms: 0,
149
+ error: {
150
+ code: "INVALID_INPUT",
151
+ message: `Input validation failed: ${validation.errors.join("; ")}`,
152
+ retryable: false,
153
+ details: { validationErrors: validation.errors },
154
+ },
155
+ });
156
+ return;
157
+ }
158
+ const startTimestamp = Date.now();
159
+ const acceptsSse = req.headers.accept?.includes("text/event-stream") ?? true;
160
+ // Setup deadline timeout if specified
161
+ const abortController = new AbortController();
162
+ let timeoutTimer;
163
+ if (payload.deadline_ms && payload.deadline_ms > Date.now()) {
164
+ const waitTime = payload.deadline_ms - Date.now();
165
+ timeoutTimer = setTimeout(() => {
166
+ abortController.abort(new Error("EXECUTION_TIMEOUT"));
167
+ }, waitTime);
168
+ }
169
+ if (acceptsSse) {
170
+ // Streaming SSE Response Mode
171
+ const sseWriter = new SSEWriter(runId, res, {
172
+ onClientDisconnect: () => {
173
+ abortController.abort(new Error("CLIENT_DISCONNECTED"));
174
+ },
175
+ });
176
+ // Forward abort signal
177
+ sseWriter.signal.addEventListener("abort", () => {
178
+ abortController.abort(sseWriter.signal.reason);
179
+ });
180
+ // Send initial run.started event
181
+ sseWriter.sendRunStarted();
182
+ try {
183
+ const result = await this.config.execute({
184
+ runId,
185
+ input: validation.data,
186
+ stream: sseWriter,
187
+ signal: abortController.signal,
188
+ metadata: payload.metadata,
189
+ deadlineMs: payload.deadline_ms,
190
+ });
191
+ if (timeoutTimer)
192
+ clearTimeout(timeoutTimer);
193
+ const durationMs = Date.now() - startTimestamp;
194
+ this.security.markRunCompleted(runId);
195
+ sseWriter.sendRunSucceeded(result.output, durationMs, result.telemetry);
196
+ }
197
+ catch (err) {
198
+ if (timeoutTimer)
199
+ clearTimeout(timeoutTimer);
200
+ const durationMs = Date.now() - startTimestamp;
201
+ this.security.markRunCompleted(runId);
202
+ const error = normalizeError(err);
203
+ sseWriter.sendRunFailed(error, durationMs);
204
+ }
205
+ }
206
+ else {
207
+ // Batch JSON Mode
208
+ try {
209
+ const noopStream = {
210
+ step: () => { },
211
+ delta: () => { },
212
+ emit: () => { },
213
+ isClosed: () => false,
214
+ };
215
+ const result = await this.config.execute({
216
+ runId,
217
+ input: validation.data,
218
+ stream: noopStream,
219
+ signal: abortController.signal,
220
+ metadata: payload.metadata,
221
+ deadlineMs: payload.deadline_ms,
222
+ });
223
+ if (timeoutTimer)
224
+ clearTimeout(timeoutTimer);
225
+ const durationMs = Date.now() - startTimestamp;
226
+ this.security.markRunCompleted(runId);
227
+ const response = {
228
+ run_id: runId,
229
+ status: "succeeded",
230
+ duration_ms: durationMs,
231
+ output: result.output,
232
+ telemetry: result.telemetry,
233
+ };
234
+ this.writeJsonResponse(res, 200, response);
235
+ }
236
+ catch (err) {
237
+ if (timeoutTimer)
238
+ clearTimeout(timeoutTimer);
239
+ const durationMs = Date.now() - startTimestamp;
240
+ this.security.markRunCompleted(runId);
241
+ const error = normalizeError(err);
242
+ const response = {
243
+ run_id: runId,
244
+ status: "failed",
245
+ duration_ms: durationMs,
246
+ error,
247
+ };
248
+ this.writeJsonResponse(res, 200, response);
249
+ }
250
+ }
251
+ }
252
+ writeJsonResponse(res, status, data) {
253
+ if (res.writableEnded)
254
+ return;
255
+ const body = JSON.stringify(data);
256
+ res.writeHead(status, {
257
+ "Content-Type": "application/json; charset=utf-8",
258
+ "Content-Length": Buffer.byteLength(body),
259
+ });
260
+ res.end(body);
261
+ }
262
+ }
263
+ /**
264
+ * Convenience builder function for creating a compliant Marketplace Agent
265
+ */
266
+ export function createMarketplaceAgent(config) {
267
+ return new MarketplaceAgent(config);
268
+ }
269
+ function slugify(text) {
270
+ return text
271
+ .toLowerCase()
272
+ .trim()
273
+ .replace(/[^\w\s-]/g, "")
274
+ .replace(/[\s_-]+/g, "-")
275
+ .replace(/^-+|-+$/g, "");
276
+ }
277
+ function normalizeError(err, defaultCode = "INTERNAL_CRASH") {
278
+ if (err instanceof Error) {
279
+ if (err.name === "AbortError" || err.message === "EXECUTION_TIMEOUT") {
280
+ return {
281
+ code: "EXECUTION_TIMEOUT",
282
+ message: "Execution exceeded allowed deadline or timeout",
283
+ retryable: true,
284
+ };
285
+ }
286
+ // Check for standard error codes attached to error object
287
+ const code = err.code || defaultCode;
288
+ const retryable = err.retryable ?? false;
289
+ return {
290
+ code,
291
+ message: err.message,
292
+ retryable,
293
+ };
294
+ }
295
+ return {
296
+ code: defaultCode,
297
+ message: String(err),
298
+ retryable: false,
299
+ };
300
+ }
301
+ async function readBody(req) {
302
+ return new Promise((resolve, reject) => {
303
+ const chunks = [];
304
+ req.on("data", (chunk) => chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk)));
305
+ req.on("end", () => resolve(Buffer.concat(chunks)));
306
+ req.on("error", reject);
307
+ });
308
+ }
309
+ //# sourceMappingURL=agent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent.js","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Catelog Banner - Terminal splash for installation and agent startup
4
+ */
5
+ export declare function renderBanner(mode?: "install" | "startup", details?: {
6
+ name?: string;
7
+ url?: string;
8
+ }): void;
9
+ //# sourceMappingURL=banner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"banner.d.ts","sourceRoot":"","sources":["../src/banner.ts"],"names":[],"mappings":";AAEA;;GAEG;AA8BH,wBAAgB,YAAY,CAAC,IAAI,GAAE,SAAS,GAAG,SAAqB,EAAE,OAAO,CAAC,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAkDrH"}
package/dist/banner.js ADDED
@@ -0,0 +1,76 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Catelog Banner - Terminal splash for installation and agent startup
4
+ */
5
+ // ANSI escape codes for rich terminal styling
6
+ const c = {
7
+ reset: "\x1b[0m",
8
+ bold: "\x1b[1m",
9
+ dim: "\x1b[2m",
10
+ italic: "\x1b[3m",
11
+ underline: "\x1b[4m",
12
+ // Vibrant colors
13
+ cyan: "\x1b[36m",
14
+ brightCyan: "\x1b[96m",
15
+ magenta: "\x1b[35m",
16
+ brightMagenta: "\x1b[95m",
17
+ blue: "\x1b[34m",
18
+ brightBlue: "\x1b[94m",
19
+ green: "\x1b[32m",
20
+ brightGreen: "\x1b[92m",
21
+ yellow: "\x1b[33m",
22
+ brightYellow: "\x1b[93m",
23
+ gray: "\x1b[90m",
24
+ white: "\x1b[97m",
25
+ // Backgrounds
26
+ bgMagenta: "\x1b[45m",
27
+ bgCyan: "\x1b[46m",
28
+ bgDarkGray: "\x1b[100m",
29
+ };
30
+ export function renderBanner(mode = "install", details) {
31
+ // Check if CI or silent install
32
+ if (process.env.CI || process.env.CATELOG_SILENT) {
33
+ return;
34
+ }
35
+ const asciiCatelog = `
36
+ ${c.brightCyan} ██████╗ █████╗ ████████╗███████╗██╗ ██████╗ ██████╗
37
+ ${c.brightCyan} ██╔════╝██╔══██╗╚══██╔══╝██╔════╝██║ ██╔═══██╗██╔════╝
38
+ ${c.brightMagenta} ██║ ███████║ ██║ █████╗ ██║ ██║ ██║██║ ███╗
39
+ ${c.brightMagenta} ██║ ██╔══██║ ██║ ██╔══╝ ██║ ██║ ██║██║ ██║
40
+ ${c.magenta} ╚██████╗██║ ██║ ██║ ███████╗███████╗╚██████╔╝╚██████╔╝
41
+ ${c.magenta} ╚═════╝╚═╝ ╚═╝ ╚═╝ ╚══════╝╚══════╝ ╚═════╝ ╚═════╝
42
+ `.trimEnd();
43
+ const width = 68;
44
+ const line = c.gray + "─".repeat(width) + c.reset;
45
+ const doubleLine = c.brightMagenta + "═".repeat(width) + c.reset;
46
+ console.log("\n" + doubleLine);
47
+ console.log(asciiCatelog);
48
+ console.log(line);
49
+ // Team ROX note box
50
+ console.log(` ${c.bgMagenta}${c.white}${c.bold} NOTE FROM TEAM ROX ${c.reset}`);
51
+ console.log(` ${c.brightYellow}${c.italic}“Welcome to the agent economy, where humans and agents rent out intelligence.”${c.reset}`);
52
+ console.log(line);
53
+ if (mode === "install") {
54
+ console.log(` ${c.green}✔${c.reset} ${c.bold}Catelog SDK installed successfully!${c.reset}`);
55
+ console.log(` ${c.dim}Supported runtimes & package managers:${c.reset}`);
56
+ console.log(` ${c.cyan}pnpm${c.reset} ${c.gray}|${c.reset} ${c.brightBlue}npm${c.reset} ${c.gray}|${c.reset} ${c.brightMagenta}yarn${c.reset} ${c.gray}|${c.reset} ${c.brightYellow}bun${c.reset} ${c.gray}• Node.js 18+ • TypeScript 5+${c.reset}`);
57
+ console.log("");
58
+ console.log(` ${c.bold}Quick Start:${c.reset}`);
59
+ console.log(` ${c.dim}import { createMarketplaceAgent } from "catelog";${c.reset}`);
60
+ console.log(` ${c.dim}const agent = createMarketplaceAgent({ ... });${c.reset}`);
61
+ console.log(` ${c.dim}agent.serve(3000);${c.reset}`);
62
+ }
63
+ else {
64
+ const agentName = details?.name || "Marketplace Agent";
65
+ const serverUrl = details?.url || "http://localhost:3000";
66
+ console.log(` ${c.green}●${c.reset} ${c.bold}${agentName}${c.reset} is active and ready for jobs!`);
67
+ console.log(` ${c.dim}Public URL:${c.reset} ${c.brightCyan}${serverUrl}${c.reset}`);
68
+ console.log(` ${c.dim}Endpoints:${c.reset} ${c.white}${serverUrl}/health${c.reset} ${c.gray}•${c.reset} ${c.white}${serverUrl}/schema${c.reset} ${c.gray}•${c.reset} ${c.white}${serverUrl}/execute${c.reset}`);
69
+ }
70
+ console.log(doubleLine + "\n");
71
+ }
72
+ // If executed directly (e.g. via postinstall or node)
73
+ if (process.argv[1]?.endsWith("banner.ts") || process.argv[1]?.endsWith("banner.js")) {
74
+ renderBanner("install");
75
+ }
76
+ //# sourceMappingURL=banner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"banner.js","sourceRoot":"","sources":["../src/banner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export * from "./types.js";
2
+ export * from "./security.js";
3
+ export * from "./sse.js";
4
+ export * from "./schema.js";
5
+ export * from "./agent.js";
6
+ export * from "./server.js";
7
+ export * from "./banner.js";
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,8 @@
1
+ export * from "./types.js";
2
+ export * from "./security.js";
3
+ export * from "./sse.js";
4
+ export * from "./schema.js";
5
+ export * from "./agent.js";
6
+ export * from "./server.js";
7
+ export * from "./banner.js";
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC"}
@@ -0,0 +1,20 @@
1
+ import type { ZodTypeAny } from "zod";
2
+ export type SchemaLike = ZodTypeAny | Record<string, unknown>;
3
+ export declare function isZodSchema(schema: unknown): schema is ZodTypeAny;
4
+ /**
5
+ * Converts a Zod schema or passes through a JSON schema object
6
+ * to standard JSON Schema (Draft-07).
7
+ */
8
+ export declare function toJsonSchema(schema: SchemaLike, title?: string): Record<string, unknown>;
9
+ /**
10
+ * Validates input against schema (if Zod is provided).
11
+ * Returns { success: true, data } or { success: false, error }
12
+ */
13
+ export declare function validateSchemaData<T>(schema: SchemaLike, data: unknown): {
14
+ success: true;
15
+ data: T;
16
+ } | {
17
+ success: false;
18
+ errors: string[];
19
+ };
20
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,KAAK,CAAC;AAEtC,MAAM,MAAM,UAAU,GAAG,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAE9D,wBAAgB,WAAW,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,IAAI,UAAU,CAOjE;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAsBxF;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,EAClC,MAAM,EAAE,UAAU,EAClB,IAAI,EAAE,OAAO,GACZ;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,CAAC,CAAA;CAAE,GAAG;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAcnE"}
package/dist/schema.js ADDED
@@ -0,0 +1,49 @@
1
+ import { zodToJsonSchema } from "zod-to-json-schema";
2
+ export function isZodSchema(schema) {
3
+ return (typeof schema === "object" &&
4
+ schema !== null &&
5
+ "_def" in schema &&
6
+ typeof schema.safeParse === "function");
7
+ }
8
+ /**
9
+ * Converts a Zod schema or passes through a JSON schema object
10
+ * to standard JSON Schema (Draft-07).
11
+ */
12
+ export function toJsonSchema(schema, title) {
13
+ if (isZodSchema(schema)) {
14
+ const converted = zodToJsonSchema(schema, {
15
+ name: title,
16
+ target: "jsonSchema7",
17
+ $refStrategy: "none",
18
+ });
19
+ // If wrapped in definitions, unwrap the root object
20
+ if (converted && typeof converted === "object") {
21
+ const record = converted;
22
+ const defs = record.definitions;
23
+ if (defs && title && defs[title]) {
24
+ return defs[title];
25
+ }
26
+ return record;
27
+ }
28
+ return converted;
29
+ }
30
+ // Already a raw JSON schema object
31
+ return schema;
32
+ }
33
+ /**
34
+ * Validates input against schema (if Zod is provided).
35
+ * Returns { success: true, data } or { success: false, error }
36
+ */
37
+ export function validateSchemaData(schema, data) {
38
+ if (isZodSchema(schema)) {
39
+ const result = schema.safeParse(data);
40
+ if (result.success) {
41
+ return { success: true, data: result.data };
42
+ }
43
+ const formattedErrors = result.error.errors.map((err) => `${err.path.join(".") || "root"}: ${err.message}`);
44
+ return { success: false, errors: formattedErrors };
45
+ }
46
+ // Raw JSON schema pass-through (pre-validated by gateway as per spec rule 4)
47
+ return { success: true, data: data };
48
+ }
49
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAKrD,MAAM,UAAU,WAAW,CAAC,MAAe;IACzC,OAAO,CACL,OAAO,MAAM,KAAK,QAAQ;QAC1B,MAAM,KAAK,IAAI;QACf,MAAM,IAAI,MAAM;QAChB,OAAQ,MAAkC,CAAC,SAAS,KAAK,UAAU,CACpE,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,MAAkB,EAAE,KAAc;IAC7D,IAAI,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;QACxB,MAAM,SAAS,GAAG,eAAe,CAAC,MAAM,EAAE;YACxC,IAAI,EAAE,KAAK;YACX,MAAM,EAAE,aAAa;YACrB,YAAY,EAAE,MAAM;SACrB,CAAC,CAAC;QAEH,oDAAoD;QACpD,IAAI,SAAS,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;YAC/C,MAAM,MAAM,GAAG,SAAoC,CAAC;YACpD,MAAM,IAAI,GAAG,MAAM,CAAC,WAAkD,CAAC;YACvE,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;gBACjC,OAAO,IAAI,CAAC,KAAK,CAA4B,CAAC;YAChD,CAAC;YACD,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,OAAO,SAAoC,CAAC;IAC9C,CAAC;IAED,mCAAmC;IACnC,OAAO,MAAiC,CAAC;AAC3C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAChC,MAAkB,EAClB,IAAa;IAEb,IAAI,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;QACxB,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACtC,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,IAAS,EAAE,CAAC;QACnD,CAAC;QACD,MAAM,eAAe,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAC7C,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,MAAM,KAAK,GAAG,CAAC,OAAO,EAAE,CAC3D,CAAC;QACF,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC;IACrD,CAAC;IAED,6EAA6E;IAC7E,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAS,EAAE,CAAC;AAC5C,CAAC"}
@@ -0,0 +1,52 @@
1
+ import type { ErrorCode } from "./types.js";
2
+ export interface SecurityOptions {
3
+ secret?: string;
4
+ maxTimestampDriftMs?: number;
5
+ nonceTtlMs?: number;
6
+ }
7
+ export declare class SecurityVerificationError extends Error {
8
+ readonly code: ErrorCode;
9
+ readonly statusCode: number;
10
+ constructor(code: ErrorCode, message: string, statusCode?: number);
11
+ }
12
+ export declare class SecurityManager {
13
+ private secret?;
14
+ private maxTimestampDriftMs;
15
+ private nonceTtlMs;
16
+ private seenNonces;
17
+ private activeRunIds;
18
+ private completedRunIds;
19
+ constructor(options?: SecurityOptions);
20
+ setSecret(secret: string): void;
21
+ getSecret(): string | undefined;
22
+ /**
23
+ * Computes SHA-256 hash in lowercase hex of request body
24
+ */
25
+ computeBodyHash(rawBody: string | Buffer): string;
26
+ /**
27
+ * Constructs the canonical string according to MAPS 1.0.0:
28
+ * METHOD\nPATH\nTIMESTAMP\nNONCE\nRUN_ID\nBodyHash
29
+ */
30
+ buildCanonicalString(method: string, path: string, timestamp: string | number, nonce: string, runId: string, bodyHash: string): string;
31
+ /**
32
+ * Calculates HMAC-SHA256 signature in lowercase hex
33
+ */
34
+ calculateSignature(canonicalString: string, secret: string): string;
35
+ /**
36
+ * Verifies headers, timestamp, nonce, and HMAC-SHA256 signature.
37
+ */
38
+ verifyRequest(params: {
39
+ method: string;
40
+ path: string;
41
+ headers: Record<string, string | string[] | undefined>;
42
+ rawBody: string | Buffer;
43
+ }): {
44
+ runId: string;
45
+ nonce: string;
46
+ timestamp: number;
47
+ };
48
+ markRunStarted(runId: string): void;
49
+ markRunCompleted(runId: string): void;
50
+ private cleanupOldEntries;
51
+ }
52
+ //# sourceMappingURL=security.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"security.d.ts","sourceRoot":"","sources":["../src/security.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,MAAM,WAAW,eAAe;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,qBAAa,yBAA0B,SAAQ,KAAK;aAEhC,IAAI,EAAE,SAAS;aAEf,UAAU,EAAE,MAAM;gBAFlB,IAAI,EAAE,SAAS,EAC/B,OAAO,EAAE,MAAM,EACC,UAAU,GAAE,MAAY;CAK3C;AAED,qBAAa,eAAe;IAC1B,OAAO,CAAC,MAAM,CAAC,CAAS;IACxB,OAAO,CAAC,mBAAmB,CAAS;IACpC,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,UAAU,CAA6B;IAC/C,OAAO,CAAC,YAAY,CAAqB;IACzC,OAAO,CAAC,eAAe,CAA6B;gBAExC,OAAO,GAAE,eAAoB;IAMlC,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAI/B,SAAS,IAAI,MAAM,GAAG,SAAS;IAItC;;OAEG;IACI,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM;IAIxD;;;OAGG;IACI,oBAAoB,CACzB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,GAAG,MAAM,EAC1B,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,GACf,MAAM;IAMT;;OAEG;IACI,kBAAkB,CAAC,eAAe,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM;IAI1E;;OAEG;IACI,aAAa,CAAC,MAAM,EAAE;QAC3B,MAAM,EAAE,MAAM,CAAC;QACf,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC;QACvD,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC;KAC1B,GAAG;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE;IA+FhD,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAInC,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAK5C,OAAO,CAAC,iBAAiB;CAgB1B"}