@agent-receipts/schema 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.
package/dist/index.js ADDED
@@ -0,0 +1,260 @@
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/index.ts
21
+ var index_exports = {};
22
+ __export(index_exports, {
23
+ ActionReceipt: () => ActionReceipt,
24
+ CompleteReceiptInput: () => CompleteReceiptInput,
25
+ CreateReceiptInput: () => CreateReceiptInput,
26
+ Environment: () => Environment,
27
+ ErrorCode: () => ErrorCode,
28
+ ErrorResponse: () => ErrorResponse,
29
+ ListReceiptsQuery: () => ListReceiptsQuery,
30
+ PaginationMeta: () => PaginationMeta,
31
+ ReceiptStatus: () => ReceiptStatus,
32
+ ReceiptType: () => ReceiptType,
33
+ SignablePayload: () => SignablePayload,
34
+ VerifyResponse: () => VerifyResponse,
35
+ createErrorResponse: () => createErrorResponse,
36
+ formatZodError: () => formatZodError,
37
+ validate: () => validate
38
+ });
39
+ module.exports = __toCommonJS(index_exports);
40
+
41
+ // src/enums.ts
42
+ var import_zod = require("zod");
43
+ var ReceiptStatus = import_zod.z.enum(["pending", "completed", "failed", "timeout"]);
44
+ var ReceiptType = import_zod.z.enum(["action", "verification", "judgment", "arbitration"]);
45
+ var Environment = import_zod.z.enum(["production", "staging", "test"]);
46
+ var ErrorCode = import_zod.z.enum([
47
+ "UNAUTHORIZED",
48
+ "KEY_REVOKED",
49
+ "FORBIDDEN",
50
+ "RECEIPT_NOT_FOUND",
51
+ "CHAIN_NOT_FOUND",
52
+ "AGENT_NOT_FOUND",
53
+ "RECEIPT_NOT_PENDING",
54
+ "RECEIPT_IMMUTABLE",
55
+ "RATE_LIMIT_EXCEEDED",
56
+ "VALIDATION_ERROR",
57
+ "INTERNAL_ERROR"
58
+ ]);
59
+
60
+ // src/receipt.ts
61
+ var import_zod2 = require("zod");
62
+ var SignablePayload = import_zod2.z.object({
63
+ receipt_id: import_zod2.z.string(),
64
+ chain_id: import_zod2.z.string(),
65
+ receipt_type: ReceiptType,
66
+ agent_id: import_zod2.z.string(),
67
+ org_id: import_zod2.z.string(),
68
+ action: import_zod2.z.string(),
69
+ input_hash: import_zod2.z.string(),
70
+ output_hash: import_zod2.z.string().nullable(),
71
+ status: ReceiptStatus,
72
+ timestamp: import_zod2.z.string().datetime(),
73
+ completed_at: import_zod2.z.string().datetime().nullable(),
74
+ environment: Environment
75
+ });
76
+ var ActionReceipt = import_zod2.z.object({
77
+ // Identity
78
+ receipt_id: import_zod2.z.string(),
79
+ parent_receipt_id: import_zod2.z.string().nullable(),
80
+ chain_id: import_zod2.z.string(),
81
+ // Type
82
+ receipt_type: ReceiptType,
83
+ // Who
84
+ agent_id: import_zod2.z.string(),
85
+ org_id: import_zod2.z.string(),
86
+ // What
87
+ action: import_zod2.z.string(),
88
+ input_hash: import_zod2.z.string(),
89
+ output_hash: import_zod2.z.string().nullable(),
90
+ output_summary: import_zod2.z.string().nullable(),
91
+ // How (all nullable — may not be known at creation)
92
+ model: import_zod2.z.string().nullable(),
93
+ tokens_in: import_zod2.z.number().int().nonnegative().nullable(),
94
+ tokens_out: import_zod2.z.number().int().nonnegative().nullable(),
95
+ cost_usd: import_zod2.z.number().nonnegative().nullable(),
96
+ latency_ms: import_zod2.z.number().int().nonnegative().nullable(),
97
+ tool_calls: import_zod2.z.array(import_zod2.z.string()).nullable(),
98
+ // When
99
+ timestamp: import_zod2.z.string().datetime(),
100
+ completed_at: import_zod2.z.string().datetime().nullable(),
101
+ // Status
102
+ status: ReceiptStatus,
103
+ error: import_zod2.z.record(import_zod2.z.unknown()).nullable(),
104
+ // Context
105
+ environment: Environment,
106
+ tags: import_zod2.z.array(import_zod2.z.string()).nullable(),
107
+ // Verification (Tier 2 — Phase 6)
108
+ constraints: import_zod2.z.record(import_zod2.z.unknown()).nullable(),
109
+ constraint_result: import_zod2.z.record(import_zod2.z.unknown()).nullable(),
110
+ // Trust
111
+ signature: import_zod2.z.string(),
112
+ verify_url: import_zod2.z.string().url(),
113
+ // Optional
114
+ callback_verified: import_zod2.z.boolean().nullable(),
115
+ confidence: import_zod2.z.number().min(0).max(1).nullable(),
116
+ metadata: import_zod2.z.record(import_zod2.z.unknown())
117
+ });
118
+
119
+ // src/api.ts
120
+ var import_zod3 = require("zod");
121
+ var CreateReceiptInput = import_zod3.z.object({
122
+ // Required
123
+ agent_id: import_zod3.z.string().min(1),
124
+ action: import_zod3.z.string().min(1),
125
+ input_hash: import_zod3.z.string().min(1),
126
+ // Optional with defaults
127
+ receipt_type: ReceiptType.default("action"),
128
+ status: ReceiptStatus.default("pending"),
129
+ environment: Environment.default("production"),
130
+ // Optional
131
+ parent_receipt_id: import_zod3.z.string().nullable().optional(),
132
+ output_hash: import_zod3.z.string().nullable().optional(),
133
+ output_summary: import_zod3.z.string().nullable().optional(),
134
+ model: import_zod3.z.string().nullable().optional(),
135
+ tokens_in: import_zod3.z.number().int().nonnegative().nullable().optional(),
136
+ tokens_out: import_zod3.z.number().int().nonnegative().nullable().optional(),
137
+ cost_usd: import_zod3.z.number().nonnegative().nullable().optional(),
138
+ latency_ms: import_zod3.z.number().int().nonnegative().nullable().optional(),
139
+ tool_calls: import_zod3.z.array(import_zod3.z.string()).nullable().optional(),
140
+ tags: import_zod3.z.array(import_zod3.z.string()).nullable().optional(),
141
+ confidence: import_zod3.z.number().min(0).max(1).nullable().optional(),
142
+ callback_verified: import_zod3.z.boolean().nullable().optional(),
143
+ metadata: import_zod3.z.record(import_zod3.z.unknown()).optional()
144
+ });
145
+ var CompleteReceiptInput = import_zod3.z.object({
146
+ // Required — must transition from pending
147
+ status: import_zod3.z.enum(["completed", "failed", "timeout"]),
148
+ // Execution results (all optional — set what you know)
149
+ output_hash: import_zod3.z.string().nullable().optional(),
150
+ output_summary: import_zod3.z.string().nullable().optional(),
151
+ model: import_zod3.z.string().nullable().optional(),
152
+ tokens_in: import_zod3.z.number().int().nonnegative().nullable().optional(),
153
+ tokens_out: import_zod3.z.number().int().nonnegative().nullable().optional(),
154
+ cost_usd: import_zod3.z.number().nonnegative().nullable().optional(),
155
+ latency_ms: import_zod3.z.number().int().nonnegative().nullable().optional(),
156
+ tool_calls: import_zod3.z.array(import_zod3.z.string()).nullable().optional(),
157
+ confidence: import_zod3.z.number().min(0).max(1).nullable().optional(),
158
+ callback_verified: import_zod3.z.boolean().nullable().optional(),
159
+ error: import_zod3.z.record(import_zod3.z.unknown()).nullable().optional()
160
+ });
161
+ var VerifyResponse = import_zod3.z.object({
162
+ verified: import_zod3.z.boolean(),
163
+ receipt: import_zod3.z.object({
164
+ receipt_id: import_zod3.z.string(),
165
+ chain_id: import_zod3.z.string(),
166
+ receipt_type: ReceiptType,
167
+ agent_id: import_zod3.z.string(),
168
+ action: import_zod3.z.string(),
169
+ status: ReceiptStatus,
170
+ input_hash: import_zod3.z.string(),
171
+ output_hash: import_zod3.z.string().nullable(),
172
+ signature: import_zod3.z.string(),
173
+ timestamp: import_zod3.z.string().datetime(),
174
+ completed_at: import_zod3.z.string().datetime().nullable(),
175
+ environment: Environment,
176
+ latency_ms: import_zod3.z.number().int().nonnegative().nullable()
177
+ }),
178
+ signature_valid: import_zod3.z.boolean(),
179
+ chain_length: import_zod3.z.number().int().nonnegative(),
180
+ public_key_url: import_zod3.z.string().url()
181
+ });
182
+ var ListReceiptsQuery = import_zod3.z.object({
183
+ page: import_zod3.z.coerce.number().int().positive().default(1),
184
+ limit: import_zod3.z.coerce.number().int().positive().max(100).default(50),
185
+ agent_id: import_zod3.z.string().optional(),
186
+ action: import_zod3.z.string().optional(),
187
+ status: ReceiptStatus.optional(),
188
+ environment: Environment.optional(),
189
+ receipt_type: ReceiptType.optional(),
190
+ chain_id: import_zod3.z.string().optional(),
191
+ tag: import_zod3.z.string().optional(),
192
+ from: import_zod3.z.string().datetime().optional(),
193
+ to: import_zod3.z.string().datetime().optional(),
194
+ sort: import_zod3.z.string().regex(/^(created_at|completed_at|latency_ms|cost_usd):(asc|desc)$/).default("created_at:desc")
195
+ });
196
+ var PaginationMeta = import_zod3.z.object({
197
+ page: import_zod3.z.number().int().positive(),
198
+ limit: import_zod3.z.number().int().positive(),
199
+ total: import_zod3.z.number().int().nonnegative(),
200
+ total_pages: import_zod3.z.number().int().nonnegative(),
201
+ has_next: import_zod3.z.boolean(),
202
+ has_prev: import_zod3.z.boolean()
203
+ });
204
+ var ErrorResponse = import_zod3.z.object({
205
+ error: import_zod3.z.object({
206
+ code: ErrorCode,
207
+ message: import_zod3.z.string(),
208
+ status: import_zod3.z.number().int()
209
+ })
210
+ });
211
+
212
+ // src/validation.ts
213
+ function validate(schema, data) {
214
+ const result = schema.safeParse(data);
215
+ if (result.success) {
216
+ return { success: true, data: result.data };
217
+ }
218
+ return {
219
+ success: false,
220
+ error: createErrorResponse(
221
+ "VALIDATION_ERROR",
222
+ formatZodError(result.error),
223
+ 400
224
+ )
225
+ };
226
+ }
227
+ function formatZodError(error) {
228
+ return error.issues.map((issue) => {
229
+ const path = issue.path.length > 0 ? `${issue.path.join(".")}: ` : "";
230
+ return `${path}${issue.message}`;
231
+ }).join("; ");
232
+ }
233
+ function createErrorResponse(code, message, status) {
234
+ return {
235
+ error: {
236
+ code,
237
+ message,
238
+ status
239
+ }
240
+ };
241
+ }
242
+ // Annotate the CommonJS export names for ESM import in node:
243
+ 0 && (module.exports = {
244
+ ActionReceipt,
245
+ CompleteReceiptInput,
246
+ CreateReceiptInput,
247
+ Environment,
248
+ ErrorCode,
249
+ ErrorResponse,
250
+ ListReceiptsQuery,
251
+ PaginationMeta,
252
+ ReceiptStatus,
253
+ ReceiptType,
254
+ SignablePayload,
255
+ VerifyResponse,
256
+ createErrorResponse,
257
+ formatZodError,
258
+ validate
259
+ });
260
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts","../src/enums.ts","../src/receipt.ts","../src/api.ts","../src/validation.ts"],"sourcesContent":["// Enums\nexport { ReceiptStatus, ReceiptType, Environment, ErrorCode } from './enums'\n\n// Receipt schemas + types\nexport { SignablePayload, ActionReceipt } from './receipt'\n\n// API schemas + types\nexport {\n CreateReceiptInput,\n CompleteReceiptInput,\n VerifyResponse,\n ListReceiptsQuery,\n PaginationMeta,\n ErrorResponse,\n} from './api'\n\n// Validation utilities\nexport { validate, formatZodError, createErrorResponse } from './validation'\n\n// Re-export types explicitly for consumers who import types only\nexport type {\n ReceiptStatus as ReceiptStatusType,\n ReceiptType as ReceiptTypeType,\n Environment as EnvironmentType,\n ErrorCode as ErrorCodeType,\n} from './enums'\n","import { z } from 'zod'\n\nexport const ReceiptStatus = z.enum(['pending', 'completed', 'failed', 'timeout'])\nexport type ReceiptStatus = z.infer<typeof ReceiptStatus>\n\nexport const ReceiptType = z.enum(['action', 'verification', 'judgment', 'arbitration'])\nexport type ReceiptType = z.infer<typeof ReceiptType>\n\nexport const Environment = z.enum(['production', 'staging', 'test'])\nexport type Environment = z.infer<typeof Environment>\n\nexport const ErrorCode = z.enum([\n 'UNAUTHORIZED',\n 'KEY_REVOKED',\n 'FORBIDDEN',\n 'RECEIPT_NOT_FOUND',\n 'CHAIN_NOT_FOUND',\n 'AGENT_NOT_FOUND',\n 'RECEIPT_NOT_PENDING',\n 'RECEIPT_IMMUTABLE',\n 'RATE_LIMIT_EXCEEDED',\n 'VALIDATION_ERROR',\n 'INTERNAL_ERROR',\n])\nexport type ErrorCode = z.infer<typeof ErrorCode>\n","import { z } from 'zod'\nimport { ReceiptStatus, ReceiptType, Environment } from './enums'\n\n/**\n * The 12 fields that are cryptographically signed.\n * These fields are extracted from a receipt and serialized as canonical JSON\n * before signing with Ed25519.\n */\nexport const SignablePayload = z.object({\n receipt_id: z.string(),\n chain_id: z.string(),\n receipt_type: ReceiptType,\n agent_id: z.string(),\n org_id: z.string(),\n action: z.string(),\n input_hash: z.string(),\n output_hash: z.string().nullable(),\n status: ReceiptStatus,\n timestamp: z.string().datetime(),\n completed_at: z.string().datetime().nullable(),\n environment: Environment,\n})\nexport type SignablePayload = z.infer<typeof SignablePayload>\n\n/**\n * The complete receipt object as returned by the API.\n */\nexport const ActionReceipt = z.object({\n // Identity\n receipt_id: z.string(),\n parent_receipt_id: z.string().nullable(),\n chain_id: z.string(),\n\n // Type\n receipt_type: ReceiptType,\n\n // Who\n agent_id: z.string(),\n org_id: z.string(),\n\n // What\n action: z.string(),\n input_hash: z.string(),\n output_hash: z.string().nullable(),\n output_summary: z.string().nullable(),\n\n // How (all nullable — may not be known at creation)\n model: z.string().nullable(),\n tokens_in: z.number().int().nonnegative().nullable(),\n tokens_out: z.number().int().nonnegative().nullable(),\n cost_usd: z.number().nonnegative().nullable(),\n latency_ms: z.number().int().nonnegative().nullable(),\n tool_calls: z.array(z.string()).nullable(),\n\n // When\n timestamp: z.string().datetime(),\n completed_at: z.string().datetime().nullable(),\n\n // Status\n status: ReceiptStatus,\n error: z.record(z.unknown()).nullable(),\n\n // Context\n environment: Environment,\n tags: z.array(z.string()).nullable(),\n\n // Verification (Tier 2 — Phase 6)\n constraints: z.record(z.unknown()).nullable(),\n constraint_result: z.record(z.unknown()).nullable(),\n\n // Trust\n signature: z.string(),\n verify_url: z.string().url(),\n\n // Optional\n callback_verified: z.boolean().nullable(),\n confidence: z.number().min(0).max(1).nullable(),\n metadata: z.record(z.unknown()),\n})\nexport type ActionReceipt = z.infer<typeof ActionReceipt>\n","import { z } from 'zod'\nimport { ReceiptStatus, ReceiptType, Environment, ErrorCode } from './enums'\n\n/**\n * What the client sends to POST /api/v1/receipts.\n */\nexport const CreateReceiptInput = z.object({\n // Required\n agent_id: z.string().min(1),\n action: z.string().min(1),\n input_hash: z.string().min(1),\n\n // Optional with defaults\n receipt_type: ReceiptType.default('action'),\n status: ReceiptStatus.default('pending'),\n environment: Environment.default('production'),\n\n // Optional\n parent_receipt_id: z.string().nullable().optional(),\n output_hash: z.string().nullable().optional(),\n output_summary: z.string().nullable().optional(),\n model: z.string().nullable().optional(),\n tokens_in: z.number().int().nonnegative().nullable().optional(),\n tokens_out: z.number().int().nonnegative().nullable().optional(),\n cost_usd: z.number().nonnegative().nullable().optional(),\n latency_ms: z.number().int().nonnegative().nullable().optional(),\n tool_calls: z.array(z.string()).nullable().optional(),\n tags: z.array(z.string()).nullable().optional(),\n confidence: z.number().min(0).max(1).nullable().optional(),\n callback_verified: z.boolean().nullable().optional(),\n metadata: z.record(z.unknown()).optional(),\n})\nexport type CreateReceiptInput = z.infer<typeof CreateReceiptInput>\n\n/**\n * What the client sends to PATCH /api/v1/receipts/:id/complete.\n */\nexport const CompleteReceiptInput = z.object({\n // Required — must transition from pending\n status: z.enum(['completed', 'failed', 'timeout']),\n\n // Execution results (all optional — set what you know)\n output_hash: z.string().nullable().optional(),\n output_summary: z.string().nullable().optional(),\n model: z.string().nullable().optional(),\n tokens_in: z.number().int().nonnegative().nullable().optional(),\n tokens_out: z.number().int().nonnegative().nullable().optional(),\n cost_usd: z.number().nonnegative().nullable().optional(),\n latency_ms: z.number().int().nonnegative().nullable().optional(),\n tool_calls: z.array(z.string()).nullable().optional(),\n confidence: z.number().min(0).max(1).nullable().optional(),\n callback_verified: z.boolean().nullable().optional(),\n error: z.record(z.unknown()).nullable().optional(),\n})\nexport type CompleteReceiptInput = z.infer<typeof CompleteReceiptInput>\n\n/**\n * What GET /api/v1/verify/:id returns.\n * Note: Does NOT include org_id, metadata, tags, or output_summary (org-private).\n */\nexport const VerifyResponse = z.object({\n verified: z.boolean(),\n receipt: z.object({\n receipt_id: z.string(),\n chain_id: z.string(),\n receipt_type: ReceiptType,\n agent_id: z.string(),\n action: z.string(),\n status: ReceiptStatus,\n input_hash: z.string(),\n output_hash: z.string().nullable(),\n signature: z.string(),\n timestamp: z.string().datetime(),\n completed_at: z.string().datetime().nullable(),\n environment: Environment,\n latency_ms: z.number().int().nonnegative().nullable(),\n }),\n signature_valid: z.boolean(),\n chain_length: z.number().int().nonnegative(),\n public_key_url: z.string().url(),\n})\nexport type VerifyResponse = z.infer<typeof VerifyResponse>\n\n/**\n * Query parameters for GET /api/v1/receipts.\n */\nexport const ListReceiptsQuery = z.object({\n page: z.coerce.number().int().positive().default(1),\n limit: z.coerce.number().int().positive().max(100).default(50),\n agent_id: z.string().optional(),\n action: z.string().optional(),\n status: ReceiptStatus.optional(),\n environment: Environment.optional(),\n receipt_type: ReceiptType.optional(),\n chain_id: z.string().optional(),\n tag: z.string().optional(),\n from: z.string().datetime().optional(),\n to: z.string().datetime().optional(),\n sort: z.string().regex(/^(created_at|completed_at|latency_ms|cost_usd):(asc|desc)$/).default('created_at:desc'),\n})\nexport type ListReceiptsQuery = z.infer<typeof ListReceiptsQuery>\n\n/**\n * Pagination metadata included in list responses.\n */\nexport const PaginationMeta = z.object({\n page: z.number().int().positive(),\n limit: z.number().int().positive(),\n total: z.number().int().nonnegative(),\n total_pages: z.number().int().nonnegative(),\n has_next: z.boolean(),\n has_prev: z.boolean(),\n})\nexport type PaginationMeta = z.infer<typeof PaginationMeta>\n\n/**\n * Standard error response format.\n */\nexport const ErrorResponse = z.object({\n error: z.object({\n code: ErrorCode,\n message: z.string(),\n status: z.number().int(),\n }),\n})\nexport type ErrorResponse = z.infer<typeof ErrorResponse>\n","import { z } from 'zod'\nimport type { ErrorResponse } from './api'\n\n/**\n * Validate data against a Zod schema.\n * Returns { success: true, data } or { success: false, error: ErrorResponse }\n */\nexport function validate<T extends z.ZodSchema>(\n schema: T,\n data: unknown\n): { success: true; data: z.infer<T> } | { success: false; error: ErrorResponse } {\n const result = schema.safeParse(data)\n if (result.success) {\n return { success: true, data: result.data }\n }\n return {\n success: false,\n error: createErrorResponse(\n 'VALIDATION_ERROR',\n formatZodError(result.error),\n 400\n ),\n }\n}\n\n/**\n * Format Zod errors into a human-readable message.\n */\nexport function formatZodError(error: z.ZodError): string {\n return error.issues\n .map((issue) => {\n const path = issue.path.length > 0 ? `${issue.path.join('.')}: ` : ''\n return `${path}${issue.message}`\n })\n .join('; ')\n}\n\n/**\n * Create a standard error response object.\n */\nexport function createErrorResponse(\n code: string,\n message: string,\n status: number\n): ErrorResponse {\n return {\n error: {\n code: code as ErrorResponse['error']['code'],\n message,\n status,\n },\n }\n}\n"],"mappings":"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","names":["import_zod","import_zod"]}
package/dist/index.mjs ADDED
@@ -0,0 +1,219 @@
1
+ // src/enums.ts
2
+ import { z } from "zod";
3
+ var ReceiptStatus = z.enum(["pending", "completed", "failed", "timeout"]);
4
+ var ReceiptType = z.enum(["action", "verification", "judgment", "arbitration"]);
5
+ var Environment = z.enum(["production", "staging", "test"]);
6
+ var ErrorCode = z.enum([
7
+ "UNAUTHORIZED",
8
+ "KEY_REVOKED",
9
+ "FORBIDDEN",
10
+ "RECEIPT_NOT_FOUND",
11
+ "CHAIN_NOT_FOUND",
12
+ "AGENT_NOT_FOUND",
13
+ "RECEIPT_NOT_PENDING",
14
+ "RECEIPT_IMMUTABLE",
15
+ "RATE_LIMIT_EXCEEDED",
16
+ "VALIDATION_ERROR",
17
+ "INTERNAL_ERROR"
18
+ ]);
19
+
20
+ // src/receipt.ts
21
+ import { z as z2 } from "zod";
22
+ var SignablePayload = z2.object({
23
+ receipt_id: z2.string(),
24
+ chain_id: z2.string(),
25
+ receipt_type: ReceiptType,
26
+ agent_id: z2.string(),
27
+ org_id: z2.string(),
28
+ action: z2.string(),
29
+ input_hash: z2.string(),
30
+ output_hash: z2.string().nullable(),
31
+ status: ReceiptStatus,
32
+ timestamp: z2.string().datetime(),
33
+ completed_at: z2.string().datetime().nullable(),
34
+ environment: Environment
35
+ });
36
+ var ActionReceipt = z2.object({
37
+ // Identity
38
+ receipt_id: z2.string(),
39
+ parent_receipt_id: z2.string().nullable(),
40
+ chain_id: z2.string(),
41
+ // Type
42
+ receipt_type: ReceiptType,
43
+ // Who
44
+ agent_id: z2.string(),
45
+ org_id: z2.string(),
46
+ // What
47
+ action: z2.string(),
48
+ input_hash: z2.string(),
49
+ output_hash: z2.string().nullable(),
50
+ output_summary: z2.string().nullable(),
51
+ // How (all nullable — may not be known at creation)
52
+ model: z2.string().nullable(),
53
+ tokens_in: z2.number().int().nonnegative().nullable(),
54
+ tokens_out: z2.number().int().nonnegative().nullable(),
55
+ cost_usd: z2.number().nonnegative().nullable(),
56
+ latency_ms: z2.number().int().nonnegative().nullable(),
57
+ tool_calls: z2.array(z2.string()).nullable(),
58
+ // When
59
+ timestamp: z2.string().datetime(),
60
+ completed_at: z2.string().datetime().nullable(),
61
+ // Status
62
+ status: ReceiptStatus,
63
+ error: z2.record(z2.unknown()).nullable(),
64
+ // Context
65
+ environment: Environment,
66
+ tags: z2.array(z2.string()).nullable(),
67
+ // Verification (Tier 2 — Phase 6)
68
+ constraints: z2.record(z2.unknown()).nullable(),
69
+ constraint_result: z2.record(z2.unknown()).nullable(),
70
+ // Trust
71
+ signature: z2.string(),
72
+ verify_url: z2.string().url(),
73
+ // Optional
74
+ callback_verified: z2.boolean().nullable(),
75
+ confidence: z2.number().min(0).max(1).nullable(),
76
+ metadata: z2.record(z2.unknown())
77
+ });
78
+
79
+ // src/api.ts
80
+ import { z as z3 } from "zod";
81
+ var CreateReceiptInput = z3.object({
82
+ // Required
83
+ agent_id: z3.string().min(1),
84
+ action: z3.string().min(1),
85
+ input_hash: z3.string().min(1),
86
+ // Optional with defaults
87
+ receipt_type: ReceiptType.default("action"),
88
+ status: ReceiptStatus.default("pending"),
89
+ environment: Environment.default("production"),
90
+ // Optional
91
+ parent_receipt_id: z3.string().nullable().optional(),
92
+ output_hash: z3.string().nullable().optional(),
93
+ output_summary: z3.string().nullable().optional(),
94
+ model: z3.string().nullable().optional(),
95
+ tokens_in: z3.number().int().nonnegative().nullable().optional(),
96
+ tokens_out: z3.number().int().nonnegative().nullable().optional(),
97
+ cost_usd: z3.number().nonnegative().nullable().optional(),
98
+ latency_ms: z3.number().int().nonnegative().nullable().optional(),
99
+ tool_calls: z3.array(z3.string()).nullable().optional(),
100
+ tags: z3.array(z3.string()).nullable().optional(),
101
+ confidence: z3.number().min(0).max(1).nullable().optional(),
102
+ callback_verified: z3.boolean().nullable().optional(),
103
+ metadata: z3.record(z3.unknown()).optional()
104
+ });
105
+ var CompleteReceiptInput = z3.object({
106
+ // Required — must transition from pending
107
+ status: z3.enum(["completed", "failed", "timeout"]),
108
+ // Execution results (all optional — set what you know)
109
+ output_hash: z3.string().nullable().optional(),
110
+ output_summary: z3.string().nullable().optional(),
111
+ model: z3.string().nullable().optional(),
112
+ tokens_in: z3.number().int().nonnegative().nullable().optional(),
113
+ tokens_out: z3.number().int().nonnegative().nullable().optional(),
114
+ cost_usd: z3.number().nonnegative().nullable().optional(),
115
+ latency_ms: z3.number().int().nonnegative().nullable().optional(),
116
+ tool_calls: z3.array(z3.string()).nullable().optional(),
117
+ confidence: z3.number().min(0).max(1).nullable().optional(),
118
+ callback_verified: z3.boolean().nullable().optional(),
119
+ error: z3.record(z3.unknown()).nullable().optional()
120
+ });
121
+ var VerifyResponse = z3.object({
122
+ verified: z3.boolean(),
123
+ receipt: z3.object({
124
+ receipt_id: z3.string(),
125
+ chain_id: z3.string(),
126
+ receipt_type: ReceiptType,
127
+ agent_id: z3.string(),
128
+ action: z3.string(),
129
+ status: ReceiptStatus,
130
+ input_hash: z3.string(),
131
+ output_hash: z3.string().nullable(),
132
+ signature: z3.string(),
133
+ timestamp: z3.string().datetime(),
134
+ completed_at: z3.string().datetime().nullable(),
135
+ environment: Environment,
136
+ latency_ms: z3.number().int().nonnegative().nullable()
137
+ }),
138
+ signature_valid: z3.boolean(),
139
+ chain_length: z3.number().int().nonnegative(),
140
+ public_key_url: z3.string().url()
141
+ });
142
+ var ListReceiptsQuery = z3.object({
143
+ page: z3.coerce.number().int().positive().default(1),
144
+ limit: z3.coerce.number().int().positive().max(100).default(50),
145
+ agent_id: z3.string().optional(),
146
+ action: z3.string().optional(),
147
+ status: ReceiptStatus.optional(),
148
+ environment: Environment.optional(),
149
+ receipt_type: ReceiptType.optional(),
150
+ chain_id: z3.string().optional(),
151
+ tag: z3.string().optional(),
152
+ from: z3.string().datetime().optional(),
153
+ to: z3.string().datetime().optional(),
154
+ sort: z3.string().regex(/^(created_at|completed_at|latency_ms|cost_usd):(asc|desc)$/).default("created_at:desc")
155
+ });
156
+ var PaginationMeta = z3.object({
157
+ page: z3.number().int().positive(),
158
+ limit: z3.number().int().positive(),
159
+ total: z3.number().int().nonnegative(),
160
+ total_pages: z3.number().int().nonnegative(),
161
+ has_next: z3.boolean(),
162
+ has_prev: z3.boolean()
163
+ });
164
+ var ErrorResponse = z3.object({
165
+ error: z3.object({
166
+ code: ErrorCode,
167
+ message: z3.string(),
168
+ status: z3.number().int()
169
+ })
170
+ });
171
+
172
+ // src/validation.ts
173
+ function validate(schema, data) {
174
+ const result = schema.safeParse(data);
175
+ if (result.success) {
176
+ return { success: true, data: result.data };
177
+ }
178
+ return {
179
+ success: false,
180
+ error: createErrorResponse(
181
+ "VALIDATION_ERROR",
182
+ formatZodError(result.error),
183
+ 400
184
+ )
185
+ };
186
+ }
187
+ function formatZodError(error) {
188
+ return error.issues.map((issue) => {
189
+ const path = issue.path.length > 0 ? `${issue.path.join(".")}: ` : "";
190
+ return `${path}${issue.message}`;
191
+ }).join("; ");
192
+ }
193
+ function createErrorResponse(code, message, status) {
194
+ return {
195
+ error: {
196
+ code,
197
+ message,
198
+ status
199
+ }
200
+ };
201
+ }
202
+ export {
203
+ ActionReceipt,
204
+ CompleteReceiptInput,
205
+ CreateReceiptInput,
206
+ Environment,
207
+ ErrorCode,
208
+ ErrorResponse,
209
+ ListReceiptsQuery,
210
+ PaginationMeta,
211
+ ReceiptStatus,
212
+ ReceiptType,
213
+ SignablePayload,
214
+ VerifyResponse,
215
+ createErrorResponse,
216
+ formatZodError,
217
+ validate
218
+ };
219
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/enums.ts","../src/receipt.ts","../src/api.ts","../src/validation.ts"],"sourcesContent":["import { z } from 'zod'\n\nexport const ReceiptStatus = z.enum(['pending', 'completed', 'failed', 'timeout'])\nexport type ReceiptStatus = z.infer<typeof ReceiptStatus>\n\nexport const ReceiptType = z.enum(['action', 'verification', 'judgment', 'arbitration'])\nexport type ReceiptType = z.infer<typeof ReceiptType>\n\nexport const Environment = z.enum(['production', 'staging', 'test'])\nexport type Environment = z.infer<typeof Environment>\n\nexport const ErrorCode = z.enum([\n 'UNAUTHORIZED',\n 'KEY_REVOKED',\n 'FORBIDDEN',\n 'RECEIPT_NOT_FOUND',\n 'CHAIN_NOT_FOUND',\n 'AGENT_NOT_FOUND',\n 'RECEIPT_NOT_PENDING',\n 'RECEIPT_IMMUTABLE',\n 'RATE_LIMIT_EXCEEDED',\n 'VALIDATION_ERROR',\n 'INTERNAL_ERROR',\n])\nexport type ErrorCode = z.infer<typeof ErrorCode>\n","import { z } from 'zod'\nimport { ReceiptStatus, ReceiptType, Environment } from './enums'\n\n/**\n * The 12 fields that are cryptographically signed.\n * These fields are extracted from a receipt and serialized as canonical JSON\n * before signing with Ed25519.\n */\nexport const SignablePayload = z.object({\n receipt_id: z.string(),\n chain_id: z.string(),\n receipt_type: ReceiptType,\n agent_id: z.string(),\n org_id: z.string(),\n action: z.string(),\n input_hash: z.string(),\n output_hash: z.string().nullable(),\n status: ReceiptStatus,\n timestamp: z.string().datetime(),\n completed_at: z.string().datetime().nullable(),\n environment: Environment,\n})\nexport type SignablePayload = z.infer<typeof SignablePayload>\n\n/**\n * The complete receipt object as returned by the API.\n */\nexport const ActionReceipt = z.object({\n // Identity\n receipt_id: z.string(),\n parent_receipt_id: z.string().nullable(),\n chain_id: z.string(),\n\n // Type\n receipt_type: ReceiptType,\n\n // Who\n agent_id: z.string(),\n org_id: z.string(),\n\n // What\n action: z.string(),\n input_hash: z.string(),\n output_hash: z.string().nullable(),\n output_summary: z.string().nullable(),\n\n // How (all nullable — may not be known at creation)\n model: z.string().nullable(),\n tokens_in: z.number().int().nonnegative().nullable(),\n tokens_out: z.number().int().nonnegative().nullable(),\n cost_usd: z.number().nonnegative().nullable(),\n latency_ms: z.number().int().nonnegative().nullable(),\n tool_calls: z.array(z.string()).nullable(),\n\n // When\n timestamp: z.string().datetime(),\n completed_at: z.string().datetime().nullable(),\n\n // Status\n status: ReceiptStatus,\n error: z.record(z.unknown()).nullable(),\n\n // Context\n environment: Environment,\n tags: z.array(z.string()).nullable(),\n\n // Verification (Tier 2 — Phase 6)\n constraints: z.record(z.unknown()).nullable(),\n constraint_result: z.record(z.unknown()).nullable(),\n\n // Trust\n signature: z.string(),\n verify_url: z.string().url(),\n\n // Optional\n callback_verified: z.boolean().nullable(),\n confidence: z.number().min(0).max(1).nullable(),\n metadata: z.record(z.unknown()),\n})\nexport type ActionReceipt = z.infer<typeof ActionReceipt>\n","import { z } from 'zod'\nimport { ReceiptStatus, ReceiptType, Environment, ErrorCode } from './enums'\n\n/**\n * What the client sends to POST /api/v1/receipts.\n */\nexport const CreateReceiptInput = z.object({\n // Required\n agent_id: z.string().min(1),\n action: z.string().min(1),\n input_hash: z.string().min(1),\n\n // Optional with defaults\n receipt_type: ReceiptType.default('action'),\n status: ReceiptStatus.default('pending'),\n environment: Environment.default('production'),\n\n // Optional\n parent_receipt_id: z.string().nullable().optional(),\n output_hash: z.string().nullable().optional(),\n output_summary: z.string().nullable().optional(),\n model: z.string().nullable().optional(),\n tokens_in: z.number().int().nonnegative().nullable().optional(),\n tokens_out: z.number().int().nonnegative().nullable().optional(),\n cost_usd: z.number().nonnegative().nullable().optional(),\n latency_ms: z.number().int().nonnegative().nullable().optional(),\n tool_calls: z.array(z.string()).nullable().optional(),\n tags: z.array(z.string()).nullable().optional(),\n confidence: z.number().min(0).max(1).nullable().optional(),\n callback_verified: z.boolean().nullable().optional(),\n metadata: z.record(z.unknown()).optional(),\n})\nexport type CreateReceiptInput = z.infer<typeof CreateReceiptInput>\n\n/**\n * What the client sends to PATCH /api/v1/receipts/:id/complete.\n */\nexport const CompleteReceiptInput = z.object({\n // Required — must transition from pending\n status: z.enum(['completed', 'failed', 'timeout']),\n\n // Execution results (all optional — set what you know)\n output_hash: z.string().nullable().optional(),\n output_summary: z.string().nullable().optional(),\n model: z.string().nullable().optional(),\n tokens_in: z.number().int().nonnegative().nullable().optional(),\n tokens_out: z.number().int().nonnegative().nullable().optional(),\n cost_usd: z.number().nonnegative().nullable().optional(),\n latency_ms: z.number().int().nonnegative().nullable().optional(),\n tool_calls: z.array(z.string()).nullable().optional(),\n confidence: z.number().min(0).max(1).nullable().optional(),\n callback_verified: z.boolean().nullable().optional(),\n error: z.record(z.unknown()).nullable().optional(),\n})\nexport type CompleteReceiptInput = z.infer<typeof CompleteReceiptInput>\n\n/**\n * What GET /api/v1/verify/:id returns.\n * Note: Does NOT include org_id, metadata, tags, or output_summary (org-private).\n */\nexport const VerifyResponse = z.object({\n verified: z.boolean(),\n receipt: z.object({\n receipt_id: z.string(),\n chain_id: z.string(),\n receipt_type: ReceiptType,\n agent_id: z.string(),\n action: z.string(),\n status: ReceiptStatus,\n input_hash: z.string(),\n output_hash: z.string().nullable(),\n signature: z.string(),\n timestamp: z.string().datetime(),\n completed_at: z.string().datetime().nullable(),\n environment: Environment,\n latency_ms: z.number().int().nonnegative().nullable(),\n }),\n signature_valid: z.boolean(),\n chain_length: z.number().int().nonnegative(),\n public_key_url: z.string().url(),\n})\nexport type VerifyResponse = z.infer<typeof VerifyResponse>\n\n/**\n * Query parameters for GET /api/v1/receipts.\n */\nexport const ListReceiptsQuery = z.object({\n page: z.coerce.number().int().positive().default(1),\n limit: z.coerce.number().int().positive().max(100).default(50),\n agent_id: z.string().optional(),\n action: z.string().optional(),\n status: ReceiptStatus.optional(),\n environment: Environment.optional(),\n receipt_type: ReceiptType.optional(),\n chain_id: z.string().optional(),\n tag: z.string().optional(),\n from: z.string().datetime().optional(),\n to: z.string().datetime().optional(),\n sort: z.string().regex(/^(created_at|completed_at|latency_ms|cost_usd):(asc|desc)$/).default('created_at:desc'),\n})\nexport type ListReceiptsQuery = z.infer<typeof ListReceiptsQuery>\n\n/**\n * Pagination metadata included in list responses.\n */\nexport const PaginationMeta = z.object({\n page: z.number().int().positive(),\n limit: z.number().int().positive(),\n total: z.number().int().nonnegative(),\n total_pages: z.number().int().nonnegative(),\n has_next: z.boolean(),\n has_prev: z.boolean(),\n})\nexport type PaginationMeta = z.infer<typeof PaginationMeta>\n\n/**\n * Standard error response format.\n */\nexport const ErrorResponse = z.object({\n error: z.object({\n code: ErrorCode,\n message: z.string(),\n status: z.number().int(),\n }),\n})\nexport type ErrorResponse = z.infer<typeof ErrorResponse>\n","import { z } from 'zod'\nimport type { ErrorResponse } from './api'\n\n/**\n * Validate data against a Zod schema.\n * Returns { success: true, data } or { success: false, error: ErrorResponse }\n */\nexport function validate<T extends z.ZodSchema>(\n schema: T,\n data: unknown\n): { success: true; data: z.infer<T> } | { success: false; error: ErrorResponse } {\n const result = schema.safeParse(data)\n if (result.success) {\n return { success: true, data: result.data }\n }\n return {\n success: false,\n error: createErrorResponse(\n 'VALIDATION_ERROR',\n formatZodError(result.error),\n 400\n ),\n }\n}\n\n/**\n * Format Zod errors into a human-readable message.\n */\nexport function formatZodError(error: z.ZodError): string {\n return error.issues\n .map((issue) => {\n const path = issue.path.length > 0 ? `${issue.path.join('.')}: ` : ''\n return `${path}${issue.message}`\n })\n .join('; ')\n}\n\n/**\n * Create a standard error response object.\n */\nexport function createErrorResponse(\n code: string,\n message: string,\n status: number\n): ErrorResponse {\n return {\n error: {\n code: code as ErrorResponse['error']['code'],\n message,\n status,\n },\n }\n}\n"],"mappings":"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","names":["z","z","z","z"]}
package/package.json ADDED
@@ -0,0 +1,57 @@
1
+ {
2
+ "name": "@agent-receipts/schema",
3
+ "version": "0.1.0",
4
+ "description": "Zod schemas and TypeScript types for the Action Receipt Protocol",
5
+ "license": "MIT",
6
+ "author": "Amin <amin@webaes.co> (https://webaes.co)",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "https://github.com/webaesbyamin/agent-receipts",
10
+ "directory": "packages/schema"
11
+ },
12
+ "homepage": "https://github.com/webaesbyamin/agent-receipts#readme",
13
+ "bugs": {
14
+ "url": "https://github.com/webaesbyamin/agent-receipts/issues"
15
+ },
16
+ "keywords": [
17
+ "agent-receipts",
18
+ "action-receipt-protocol",
19
+ "zod",
20
+ "schema",
21
+ "validation",
22
+ "ai-agents",
23
+ "mcp"
24
+ ],
25
+ "engines": {
26
+ "node": ">=20.0.0"
27
+ },
28
+ "main": "./dist/index.js",
29
+ "module": "./dist/index.mjs",
30
+ "types": "./dist/index.d.ts",
31
+ "exports": {
32
+ ".": {
33
+ "types": "./dist/index.d.ts",
34
+ "import": "./dist/index.mjs",
35
+ "require": "./dist/index.js"
36
+ }
37
+ },
38
+ "files": [
39
+ "dist",
40
+ "receipt.schema.json"
41
+ ],
42
+ "dependencies": {
43
+ "zod": "^3.23.0"
44
+ },
45
+ "devDependencies": {
46
+ "tsup": "^8.2.0",
47
+ "typescript": "^5.4.0",
48
+ "vitest": "^2.1.0",
49
+ "zod-to-json-schema": "^3.23.0"
50
+ },
51
+ "scripts": {
52
+ "build": "tsup && node -e \"const{zodToJsonSchema}=require('zod-to-json-schema');const{ActionReceipt}=require('./dist');const fs=require('fs');fs.writeFileSync('receipt.schema.json',JSON.stringify(zodToJsonSchema(ActionReceipt,'ActionReceipt'),null,2));\"",
53
+ "dev": "tsup --watch",
54
+ "test": "vitest run",
55
+ "typecheck": "tsc --noEmit"
56
+ }
57
+ }