open-agentpay 0.1.0 → 0.2.5
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/LICENSE +201 -0
- package/README.md +125 -4
- package/dist/client/client.d.ts +37 -0
- package/dist/client/client.d.ts.map +1 -0
- package/dist/client/client.js +90 -0
- package/dist/client/client.js.map +1 -0
- package/dist/client/errors.d.ts +23 -0
- package/dist/client/errors.d.ts.map +1 -0
- package/dist/client/errors.js +38 -0
- package/dist/client/errors.js.map +1 -0
- package/dist/client/index.d.ts +6 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/index.js +6 -0
- package/dist/client/index.js.map +1 -0
- package/dist/client/interfaces.d.ts +34 -0
- package/dist/client/interfaces.d.ts.map +1 -0
- package/dist/client/interfaces.js +5 -0
- package/dist/client/interfaces.js.map +1 -0
- package/dist/client/signer.d.ts +136 -0
- package/dist/client/signer.d.ts.map +1 -0
- package/dist/client/signer.js +300 -0
- package/dist/client/signer.js.map +1 -0
- package/dist/client/transport.d.ts +44 -0
- package/dist/client/transport.d.ts.map +1 -0
- package/dist/client/transport.js +389 -0
- package/dist/client/transport.js.map +1 -0
- package/dist/core/codecs.d.ts +35 -0
- package/dist/core/codecs.d.ts.map +1 -0
- package/dist/core/codecs.js +177 -0
- package/dist/core/codecs.js.map +1 -0
- package/dist/core/errors.d.ts +33 -0
- package/dist/core/errors.d.ts.map +1 -0
- package/dist/core/errors.js +48 -0
- package/dist/core/errors.js.map +1 -0
- package/dist/core/index.d.ts +6 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +6 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/interop.d.ts +10 -0
- package/dist/core/interop.d.ts.map +1 -0
- package/dist/core/interop.js +28 -0
- package/dist/core/interop.js.map +1 -0
- package/dist/core/models.d.ts +155 -0
- package/dist/core/models.d.ts.map +1 -0
- package/dist/core/models.js +463 -0
- package/dist/core/models.js.map +1 -0
- package/dist/core/state.d.ts +82 -0
- package/dist/core/state.d.ts.map +1 -0
- package/dist/core/state.js +87 -0
- package/dist/core/state.js.map +1 -0
- package/dist/evm/constants.d.ts +52 -0
- package/dist/evm/constants.d.ts.map +1 -0
- package/dist/evm/constants.js +72 -0
- package/dist/evm/constants.js.map +1 -0
- package/dist/evm/eip3009.d.ts +43 -0
- package/dist/evm/eip3009.d.ts.map +1 -0
- package/dist/evm/eip3009.js +145 -0
- package/dist/evm/eip3009.js.map +1 -0
- package/dist/evm/index.d.ts +3 -0
- package/dist/evm/index.d.ts.map +1 -0
- package/dist/evm/index.js +3 -0
- package/dist/evm/index.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +12 -0
- package/dist/index.js.map +1 -0
- package/dist/integrations/index.d.ts +4 -0
- package/dist/integrations/index.d.ts.map +1 -0
- package/dist/integrations/index.js +4 -0
- package/dist/integrations/index.js.map +1 -0
- package/dist/integrations/langchain.d.ts +40 -0
- package/dist/integrations/langchain.d.ts.map +1 -0
- package/dist/integrations/langchain.js +68 -0
- package/dist/integrations/langchain.js.map +1 -0
- package/dist/integrations/mcp.d.ts +29 -0
- package/dist/integrations/mcp.d.ts.map +1 -0
- package/dist/integrations/mcp.js +73 -0
- package/dist/integrations/mcp.js.map +1 -0
- package/dist/integrations/vercel-ai.d.ts +31 -0
- package/dist/integrations/vercel-ai.d.ts.map +1 -0
- package/dist/integrations/vercel-ai.js +50 -0
- package/dist/integrations/vercel-ai.js.map +1 -0
- package/dist/policy/db.d.ts +14 -0
- package/dist/policy/db.d.ts.map +1 -0
- package/dist/policy/db.js +86 -0
- package/dist/policy/db.js.map +1 -0
- package/dist/policy/errors.d.ts +31 -0
- package/dist/policy/errors.d.ts.map +1 -0
- package/dist/policy/errors.js +48 -0
- package/dist/policy/errors.js.map +1 -0
- package/dist/policy/evaluator.d.ts +22 -0
- package/dist/policy/evaluator.d.ts.map +1 -0
- package/dist/policy/evaluator.js +152 -0
- package/dist/policy/evaluator.js.map +1 -0
- package/dist/policy/index.d.ts +7 -0
- package/dist/policy/index.d.ts.map +1 -0
- package/dist/policy/index.js +7 -0
- package/dist/policy/index.js.map +1 -0
- package/dist/policy/interfaces.d.ts +59 -0
- package/dist/policy/interfaces.d.ts.map +1 -0
- package/dist/policy/interfaces.js +7 -0
- package/dist/policy/interfaces.js.map +1 -0
- package/dist/policy/models.d.ts +161 -0
- package/dist/policy/models.d.ts.map +1 -0
- package/dist/policy/models.js +449 -0
- package/dist/policy/models.js.map +1 -0
- package/dist/policy/sqlite-engine.d.ts +28 -0
- package/dist/policy/sqlite-engine.d.ts.map +1 -0
- package/dist/policy/sqlite-engine.js +501 -0
- package/dist/policy/sqlite-engine.js.map +1 -0
- package/dist/state/buyer-coordinator.d.ts +33 -0
- package/dist/state/buyer-coordinator.d.ts.map +1 -0
- package/dist/state/buyer-coordinator.js +363 -0
- package/dist/state/buyer-coordinator.js.map +1 -0
- package/dist/state/errors.d.ts +45 -0
- package/dist/state/errors.d.ts.map +1 -0
- package/dist/state/errors.js +88 -0
- package/dist/state/errors.js.map +1 -0
- package/dist/state/guards.d.ts +24 -0
- package/dist/state/guards.d.ts.map +1 -0
- package/dist/state/guards.js +211 -0
- package/dist/state/guards.js.map +1 -0
- package/dist/state/index.d.ts +5 -0
- package/dist/state/index.d.ts.map +1 -0
- package/dist/state/index.js +5 -0
- package/dist/state/index.js.map +1 -0
- package/dist/state/reconciliation.d.ts +105 -0
- package/dist/state/reconciliation.d.ts.map +1 -0
- package/dist/state/reconciliation.js +297 -0
- package/dist/state/reconciliation.js.map +1 -0
- package/package.json +98 -12
- package/index.d.ts +0 -2
- package/index.js +0 -8
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Model Context Protocol (MCP) integration for AgentPay.
|
|
3
|
+
*
|
|
4
|
+
* Provides MCP server tool handlers and client fetch adapters for autonomous 402 payment negotiation.
|
|
5
|
+
*/
|
|
6
|
+
import { AgentPayClient } from '../client/client.js';
|
|
7
|
+
import { type AgentPayClientOptions } from '../client/transport.js';
|
|
8
|
+
export interface McpContentItem {
|
|
9
|
+
type: string;
|
|
10
|
+
text?: string;
|
|
11
|
+
data?: string;
|
|
12
|
+
mimeType?: string;
|
|
13
|
+
[key: string]: unknown;
|
|
14
|
+
}
|
|
15
|
+
export interface McpToolResponse {
|
|
16
|
+
isError?: boolean;
|
|
17
|
+
content: McpContentItem[];
|
|
18
|
+
[key: string]: unknown;
|
|
19
|
+
}
|
|
20
|
+
export interface PaidMcpToolOptions {
|
|
21
|
+
handlePolicyViolation?: boolean;
|
|
22
|
+
}
|
|
23
|
+
export type McpToolHandler<TArgs = Record<string, unknown>> = (args: TArgs, extra?: {
|
|
24
|
+
client: AgentPayClient;
|
|
25
|
+
[key: string]: unknown;
|
|
26
|
+
}) => Promise<McpToolResponse | unknown>;
|
|
27
|
+
export declare function createPaidMcpToolHandler<TArgs = Record<string, unknown>>(client: AgentPayClient, handler: McpToolHandler<TArgs>, options?: PaidMcpToolOptions): (args: TArgs, extra?: any) => Promise<McpToolResponse>;
|
|
28
|
+
export declare function createPaidMcpFetch(clientOrOptions: AgentPayClient | AgentPayClientOptions): typeof globalThis.fetch;
|
|
29
|
+
//# sourceMappingURL=mcp.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../../src/integrations/mcp.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAuB,KAAK,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAIzF,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,kBAAkB;IACjC,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACjC;AAED,MAAM,MAAM,cAAc,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,CAC5D,IAAI,EAAE,KAAK,EACX,KAAK,CAAC,EAAE;IAAE,MAAM,EAAE,cAAc,CAAC;IAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,KACvD,OAAO,CAAC,eAAe,GAAG,OAAO,CAAC,CAAC;AAExC,wBAAgB,wBAAwB,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACtE,MAAM,EAAE,cAAc,EACtB,OAAO,EAAE,cAAc,CAAC,KAAK,CAAC,EAC9B,OAAO,CAAC,EAAE,kBAAkB,GAC3B,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,GAAG,KAAK,OAAO,CAAC,eAAe,CAAC,CA2DxD;AAED,wBAAgB,kBAAkB,CAChC,eAAe,EAAE,cAAc,GAAG,qBAAqB,GACtD,OAAO,UAAU,CAAC,KAAK,CAKzB"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Model Context Protocol (MCP) integration for AgentPay.
|
|
3
|
+
*
|
|
4
|
+
* Provides MCP server tool handlers and client fetch adapters for autonomous 402 payment negotiation.
|
|
5
|
+
*/
|
|
6
|
+
import { AgentPayClient } from '../client/client.js';
|
|
7
|
+
import { createAgentPayFetch } from '../client/transport.js';
|
|
8
|
+
import { X402Error } from '../core/errors.js';
|
|
9
|
+
import { PolicyViolationError } from '../policy/errors.js';
|
|
10
|
+
export function createPaidMcpToolHandler(client, handler, options) {
|
|
11
|
+
const handlePolicyViolation = options?.handlePolicyViolation ?? true;
|
|
12
|
+
return async (args, extra) => {
|
|
13
|
+
const context = {
|
|
14
|
+
client,
|
|
15
|
+
...(extra && typeof extra === 'object' ? extra : {}),
|
|
16
|
+
};
|
|
17
|
+
try {
|
|
18
|
+
const result = await handler(args, context);
|
|
19
|
+
if (result &&
|
|
20
|
+
typeof result === 'object' &&
|
|
21
|
+
'content' in result &&
|
|
22
|
+
Array.isArray(result.content)) {
|
|
23
|
+
return result;
|
|
24
|
+
}
|
|
25
|
+
return {
|
|
26
|
+
content: [
|
|
27
|
+
{
|
|
28
|
+
type: 'text',
|
|
29
|
+
text: typeof result === 'string' ? result : JSON.stringify(result),
|
|
30
|
+
},
|
|
31
|
+
],
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
catch (err) {
|
|
35
|
+
if (err instanceof PolicyViolationError) {
|
|
36
|
+
if (handlePolicyViolation) {
|
|
37
|
+
return {
|
|
38
|
+
isError: true,
|
|
39
|
+
content: [
|
|
40
|
+
{
|
|
41
|
+
type: 'text',
|
|
42
|
+
text: `AgentPay Firewall Rejected: [${err.code}] ${err.detail || err.message}`,
|
|
43
|
+
},
|
|
44
|
+
],
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
throw err;
|
|
48
|
+
}
|
|
49
|
+
if (err instanceof X402Error) {
|
|
50
|
+
if (handlePolicyViolation) {
|
|
51
|
+
return {
|
|
52
|
+
isError: true,
|
|
53
|
+
content: [
|
|
54
|
+
{
|
|
55
|
+
type: 'text',
|
|
56
|
+
text: `AgentPay x402 Protocol Error: ${err.message}`,
|
|
57
|
+
},
|
|
58
|
+
],
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
throw err;
|
|
62
|
+
}
|
|
63
|
+
throw err;
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
export function createPaidMcpFetch(clientOrOptions) {
|
|
68
|
+
if (clientOrOptions instanceof AgentPayClient) {
|
|
69
|
+
return clientOrOptions.asFetch();
|
|
70
|
+
}
|
|
71
|
+
return createAgentPayFetch(clientOrOptions);
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=mcp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../src/integrations/mcp.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAA8B,MAAM,wBAAwB,CAAC;AACzF,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAyB3D,MAAM,UAAU,wBAAwB,CACtC,MAAsB,EACtB,OAA8B,EAC9B,OAA4B;IAE5B,MAAM,qBAAqB,GAAG,OAAO,EAAE,qBAAqB,IAAI,IAAI,CAAC;IAErE,OAAO,KAAK,EAAE,IAAW,EAAE,KAAW,EAA4B,EAAE;QAClE,MAAM,OAAO,GAAG;YACd,MAAM;YACN,GAAG,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;SACrD,CAAC;QAEF,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAC5C,IACE,MAAM;gBACN,OAAO,MAAM,KAAK,QAAQ;gBAC1B,SAAS,IAAI,MAAM;gBACnB,KAAK,CAAC,OAAO,CAAE,MAA0B,CAAC,OAAO,CAAC,EAClD,CAAC;gBACD,OAAO,MAAyB,CAAC;YACnC,CAAC;YACD,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;qBACnE;iBACF;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,oBAAoB,EAAE,CAAC;gBACxC,IAAI,qBAAqB,EAAE,CAAC;oBAC1B,OAAO;wBACL,OAAO,EAAE,IAAI;wBACb,OAAO,EAAE;4BACP;gCACE,IAAI,EAAE,MAAM;gCACZ,IAAI,EAAE,gCAAgC,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,OAAO,EAAE;6BAC/E;yBACF;qBACF,CAAC;gBACJ,CAAC;gBACD,MAAM,GAAG,CAAC;YACZ,CAAC;YACD,IAAI,GAAG,YAAY,SAAS,EAAE,CAAC;gBAC7B,IAAI,qBAAqB,EAAE,CAAC;oBAC1B,OAAO;wBACL,OAAO,EAAE,IAAI;wBACb,OAAO,EAAE;4BACP;gCACE,IAAI,EAAE,MAAM;gCACZ,IAAI,EAAE,iCAAiC,GAAG,CAAC,OAAO,EAAE;6BACrD;yBACF;qBACF,CAAC;gBACJ,CAAC;gBACD,MAAM,GAAG,CAAC;YACZ,CAAC;YACD,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,eAAuD;IAEvD,IAAI,eAAe,YAAY,cAAc,EAAE,CAAC;QAC9C,OAAO,eAAe,CAAC,OAAO,EAAE,CAAC;IACnC,CAAC;IACD,OAAO,mBAAmB,CAAC,eAAe,CAAC,CAAC;AAC9C,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Vercel AI SDK integration for AgentPay.
|
|
3
|
+
*
|
|
4
|
+
* Wraps tool definitions with autonomous AgentPayClient execution context,
|
|
5
|
+
* intercepting financial policy rejections to return structured tool error responses.
|
|
6
|
+
*/
|
|
7
|
+
import type { AgentPayClient } from '../client/client.js';
|
|
8
|
+
export interface PaidVercelToolOptions<TParams = any, TResult = any> {
|
|
9
|
+
description?: string;
|
|
10
|
+
parameters: any;
|
|
11
|
+
client?: AgentPayClient;
|
|
12
|
+
handlePolicyViolation?: boolean;
|
|
13
|
+
execute: (args: TParams, context?: {
|
|
14
|
+
client?: AgentPayClient;
|
|
15
|
+
[key: string]: any;
|
|
16
|
+
}) => Promise<TResult>;
|
|
17
|
+
}
|
|
18
|
+
export interface PaidVercelToolError {
|
|
19
|
+
error: true;
|
|
20
|
+
code: string;
|
|
21
|
+
message: string;
|
|
22
|
+
}
|
|
23
|
+
export interface PaidVercelTool<TParams = any, TResult = any> {
|
|
24
|
+
description?: string;
|
|
25
|
+
parameters: any;
|
|
26
|
+
client?: AgentPayClient;
|
|
27
|
+
execute: (args: TParams, context?: any) => Promise<TResult | PaidVercelToolError>;
|
|
28
|
+
}
|
|
29
|
+
export declare function paidVercelTool<TParams = any, TResult = any>(options: PaidVercelToolOptions<TParams, TResult>): PaidVercelTool<TParams, TResult>;
|
|
30
|
+
export declare const createVercelPaidTool: typeof paidVercelTool;
|
|
31
|
+
//# sourceMappingURL=vercel-ai.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vercel-ai.d.ts","sourceRoot":"","sources":["../../src/integrations/vercel-ai.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAI1D,MAAM,WAAW,qBAAqB,CAAC,OAAO,GAAG,GAAG,EAAE,OAAO,GAAG,GAAG;IACjE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,GAAG,CAAC;IAChB,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,OAAO,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,cAAc,CAAC;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CACzG;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,IAAI,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,cAAc,CAAC,OAAO,GAAG,GAAG,EAAE,OAAO,GAAG,GAAG;IAC1D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,GAAG,CAAC;IAChB,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB,OAAO,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,GAAG,KAAK,OAAO,CAAC,OAAO,GAAG,mBAAmB,CAAC,CAAC;CACnF;AAED,wBAAgB,cAAc,CAAC,OAAO,GAAG,GAAG,EAAE,OAAO,GAAG,GAAG,EACzD,OAAO,EAAE,qBAAqB,CAAC,OAAO,EAAE,OAAO,CAAC,GAC/C,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,CAwClC;AAED,eAAO,MAAM,oBAAoB,uBAAiB,CAAC"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Vercel AI SDK integration for AgentPay.
|
|
3
|
+
*
|
|
4
|
+
* Wraps tool definitions with autonomous AgentPayClient execution context,
|
|
5
|
+
* intercepting financial policy rejections to return structured tool error responses.
|
|
6
|
+
*/
|
|
7
|
+
import { X402Error } from '../core/errors.js';
|
|
8
|
+
import { PolicyViolationError } from '../policy/errors.js';
|
|
9
|
+
export function paidVercelTool(options) {
|
|
10
|
+
const handlePolicyViolation = options.handlePolicyViolation ?? true;
|
|
11
|
+
return {
|
|
12
|
+
description: options.description,
|
|
13
|
+
parameters: options.parameters,
|
|
14
|
+
client: options.client,
|
|
15
|
+
execute: async (args, context) => {
|
|
16
|
+
const execContext = {
|
|
17
|
+
client: options.client,
|
|
18
|
+
...(context && typeof context === 'object' ? context : {}),
|
|
19
|
+
};
|
|
20
|
+
try {
|
|
21
|
+
return await options.execute(args, execContext);
|
|
22
|
+
}
|
|
23
|
+
catch (err) {
|
|
24
|
+
if (err instanceof PolicyViolationError) {
|
|
25
|
+
if (handlePolicyViolation) {
|
|
26
|
+
return {
|
|
27
|
+
error: true,
|
|
28
|
+
code: err.code,
|
|
29
|
+
message: `AgentPay Firewall Rejected: [${err.code}] ${err.detail || err.message}`,
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
throw err;
|
|
33
|
+
}
|
|
34
|
+
if (err instanceof X402Error) {
|
|
35
|
+
if (handlePolicyViolation) {
|
|
36
|
+
return {
|
|
37
|
+
error: true,
|
|
38
|
+
code: 'X402_ERROR',
|
|
39
|
+
message: `AgentPay x402 Protocol Error: ${err.message}`,
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
throw err;
|
|
43
|
+
}
|
|
44
|
+
throw err;
|
|
45
|
+
}
|
|
46
|
+
},
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
export const createVercelPaidTool = paidVercelTool;
|
|
50
|
+
//# sourceMappingURL=vercel-ai.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vercel-ai.js","sourceRoot":"","sources":["../../src/integrations/vercel-ai.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAuB3D,MAAM,UAAU,cAAc,CAC5B,OAAgD;IAEhD,MAAM,qBAAqB,GAAG,OAAO,CAAC,qBAAqB,IAAI,IAAI,CAAC;IAEpE,OAAO;QACL,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,OAAO,EAAE,KAAK,EAAE,IAAa,EAAE,OAAa,EAAE,EAAE;YAC9C,MAAM,WAAW,GAAG;gBAClB,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,GAAG,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;aAC3D,CAAC;YAEF,IAAI,CAAC;gBACH,OAAO,MAAM,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;YAClD,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,GAAG,YAAY,oBAAoB,EAAE,CAAC;oBACxC,IAAI,qBAAqB,EAAE,CAAC;wBAC1B,OAAO;4BACL,KAAK,EAAE,IAAI;4BACX,IAAI,EAAE,GAAG,CAAC,IAAI;4BACd,OAAO,EAAE,gCAAgC,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,OAAO,EAAE;yBAClF,CAAC;oBACJ,CAAC;oBACD,MAAM,GAAG,CAAC;gBACZ,CAAC;gBACD,IAAI,GAAG,YAAY,SAAS,EAAE,CAAC;oBAC7B,IAAI,qBAAqB,EAAE,CAAC;wBAC1B,OAAO;4BACL,KAAK,EAAE,IAAI;4BACX,IAAI,EAAE,YAAY;4BAClB,OAAO,EAAE,iCAAiC,GAAG,CAAC,OAAO,EAAE;yBACxD,CAAC;oBACJ,CAAC;oBACD,MAAM,GAAG,CAAC;gBACZ,CAAC;gBACD,MAAM,GAAG,CAAC;YACZ,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,oBAAoB,GAAG,cAAc,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Database connection utilities and connection factory for AgentPay.
|
|
3
|
+
*
|
|
4
|
+
* Enforces:
|
|
5
|
+
* - Foreign key constraint enforcement on EVERY connection (PRAGMA foreign_keys = ON)
|
|
6
|
+
* - WAL journal mode for concurrent read/write isolation (PRAGMA journal_mode = WAL)
|
|
7
|
+
* - Busy timeout configuration to wait during concurrent write contention
|
|
8
|
+
* - Canonical buyer schema initialization helper
|
|
9
|
+
* - defaultSafeIntegers(true) for 64-bit BigInt precision
|
|
10
|
+
*/
|
|
11
|
+
import { type Database as DatabaseInstance } from 'better-sqlite3';
|
|
12
|
+
export declare function createBuyerConnection(dbPath: string, busyTimeoutMs?: number): DatabaseInstance;
|
|
13
|
+
export declare function initBuyerDatabase(db: DatabaseInstance): void;
|
|
14
|
+
//# sourceMappingURL=db.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../../src/policy/db.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAiB,EAAE,KAAK,QAAQ,IAAI,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAE7E,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,MAAM,EACd,aAAa,SAAO,GACnB,gBAAgB,CAclB;AAED,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,gBAAgB,GAAG,IAAI,CA6D5D"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Database connection utilities and connection factory for AgentPay.
|
|
3
|
+
*
|
|
4
|
+
* Enforces:
|
|
5
|
+
* - Foreign key constraint enforcement on EVERY connection (PRAGMA foreign_keys = ON)
|
|
6
|
+
* - WAL journal mode for concurrent read/write isolation (PRAGMA journal_mode = WAL)
|
|
7
|
+
* - Busy timeout configuration to wait during concurrent write contention
|
|
8
|
+
* - Canonical buyer schema initialization helper
|
|
9
|
+
* - defaultSafeIntegers(true) for 64-bit BigInt precision
|
|
10
|
+
*/
|
|
11
|
+
import Database from 'better-sqlite3';
|
|
12
|
+
export function createBuyerConnection(dbPath, busyTimeoutMs = 5000) {
|
|
13
|
+
const db = new Database(dbPath, {
|
|
14
|
+
timeout: busyTimeoutMs,
|
|
15
|
+
});
|
|
16
|
+
db.defaultSafeIntegers(true);
|
|
17
|
+
db.pragma('foreign_keys = ON');
|
|
18
|
+
db.pragma(`busy_timeout = ${busyTimeoutMs}`);
|
|
19
|
+
if (dbPath !== ':memory:') {
|
|
20
|
+
db.pragma('journal_mode = WAL');
|
|
21
|
+
}
|
|
22
|
+
return db;
|
|
23
|
+
}
|
|
24
|
+
export function initBuyerDatabase(db) {
|
|
25
|
+
db.exec(`
|
|
26
|
+
CREATE TABLE IF NOT EXISTS ap_policy (
|
|
27
|
+
id TEXT PRIMARY KEY,
|
|
28
|
+
name TEXT NOT NULL,
|
|
29
|
+
wallet_address TEXT NOT NULL,
|
|
30
|
+
max_per_tx_base_units INTEGER NOT NULL CHECK (max_per_tx_base_units > 0),
|
|
31
|
+
rolling_budget_24h_base_units INTEGER NOT NULL CHECK (rolling_budget_24h_base_units > 0),
|
|
32
|
+
lifetime_budget_base_units INTEGER CHECK (lifetime_budget_base_units > 0),
|
|
33
|
+
whitelist_mode TEXT NOT NULL DEFAULT 'simple' CHECK (whitelist_mode IN ('strict', 'simple')),
|
|
34
|
+
whitelist_payees_json TEXT NOT NULL DEFAULT '[]',
|
|
35
|
+
whitelist_assets_json TEXT NOT NULL DEFAULT '[]',
|
|
36
|
+
whitelist_networks_json TEXT NOT NULL DEFAULT '[]',
|
|
37
|
+
whitelist_domains_json TEXT NOT NULL DEFAULT '[]',
|
|
38
|
+
circuit_max_rpm INTEGER NOT NULL DEFAULT 15,
|
|
39
|
+
circuit_consecutive_failures INTEGER NOT NULL DEFAULT 5,
|
|
40
|
+
circuit_cooldown_seconds INTEGER NOT NULL DEFAULT 300,
|
|
41
|
+
consecutive_failures INTEGER NOT NULL DEFAULT 0,
|
|
42
|
+
breaker_state TEXT NOT NULL DEFAULT 'CLOSED' CHECK (breaker_state IN ('CLOSED', 'OPEN', 'HALF_OPEN')),
|
|
43
|
+
tripped_at INTEGER,
|
|
44
|
+
is_frozen INTEGER NOT NULL DEFAULT 0 CHECK (is_frozen IN (0, 1)),
|
|
45
|
+
created_at INTEGER NOT NULL,
|
|
46
|
+
updated_at INTEGER NOT NULL
|
|
47
|
+
);
|
|
48
|
+
|
|
49
|
+
CREATE TABLE IF NOT EXISTS ap_budget_ledger (
|
|
50
|
+
id TEXT PRIMARY KEY,
|
|
51
|
+
policy_id TEXT NOT NULL REFERENCES ap_policy(id),
|
|
52
|
+
wallet_address TEXT NOT NULL,
|
|
53
|
+
intent_id TEXT NOT NULL UNIQUE,
|
|
54
|
+
amount_base_units INTEGER NOT NULL CHECK (amount_base_units > 0 AND typeof(amount_base_units) = 'integer'),
|
|
55
|
+
state TEXT NOT NULL CHECK (state IN ('RESERVED', 'COMMITTED', 'RELEASED')),
|
|
56
|
+
created_at INTEGER NOT NULL,
|
|
57
|
+
expires_at INTEGER NOT NULL,
|
|
58
|
+
updated_at INTEGER NOT NULL
|
|
59
|
+
);
|
|
60
|
+
|
|
61
|
+
CREATE TABLE IF NOT EXISTS ap_buyer_intent (
|
|
62
|
+
intent_id TEXT PRIMARY KEY,
|
|
63
|
+
policy_id TEXT NOT NULL REFERENCES ap_policy(id),
|
|
64
|
+
idempotency_key TEXT NOT NULL,
|
|
65
|
+
payer_address TEXT NOT NULL,
|
|
66
|
+
payee_address TEXT NOT NULL,
|
|
67
|
+
asset_address TEXT NOT NULL,
|
|
68
|
+
network_id TEXT NOT NULL,
|
|
69
|
+
amount_base_units INTEGER NOT NULL CHECK (amount_base_units > 0 AND typeof(amount_base_units) = 'integer'),
|
|
70
|
+
status TEXT NOT NULL CHECK (status IN ('CREATED', 'AUTHORIZED', 'PROCESSING', 'SIGNATURE_SENT', 'COMPLETED', 'SUCCEEDED', 'REJECTED', 'EXPIRED', 'CANCELLED', 'RECOVERY_HOLD')),
|
|
71
|
+
nonce TEXT,
|
|
72
|
+
valid_after INTEGER,
|
|
73
|
+
valid_before INTEGER,
|
|
74
|
+
raw_signature TEXT,
|
|
75
|
+
created_at INTEGER NOT NULL,
|
|
76
|
+
updated_at INTEGER NOT NULL
|
|
77
|
+
);
|
|
78
|
+
|
|
79
|
+
CREATE INDEX IF NOT EXISTS idx_budget_rolling_sum
|
|
80
|
+
ON ap_budget_ledger (policy_id, state, created_at, expires_at);
|
|
81
|
+
|
|
82
|
+
CREATE UNIQUE INDEX IF NOT EXISTS uq_buyer_intent_idempotency
|
|
83
|
+
ON ap_buyer_intent (payer_address, idempotency_key);
|
|
84
|
+
`);
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=db.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"db.js","sourceRoot":"","sources":["../../src/policy/db.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,QAA+C,MAAM,gBAAgB,CAAC;AAE7E,MAAM,UAAU,qBAAqB,CACnC,MAAc,EACd,aAAa,GAAG,IAAI;IAEpB,MAAM,EAAE,GAAG,IAAI,QAAQ,CAAC,MAAM,EAAE;QAC9B,OAAO,EAAE,aAAa;KACvB,CAAC,CAAC;IAEH,EAAE,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAC7B,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;IAC/B,EAAE,CAAC,MAAM,CAAC,kBAAkB,aAAa,EAAE,CAAC,CAAC;IAE7C,IAAI,MAAM,KAAK,UAAU,EAAE,CAAC;QAC1B,EAAE,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;IAClC,CAAC;IAED,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,EAAoB;IACpD,EAAE,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2DP,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Standardized policy engine error codes and exception types.
|
|
3
|
+
*
|
|
4
|
+
* All error codes are defined in policy-engine-spec.md §2 and are language-agnostic
|
|
5
|
+
* uppercase string constants.
|
|
6
|
+
*/
|
|
7
|
+
export declare enum PolicyErrorCode {
|
|
8
|
+
POLICY_FROZEN = "POLICY_FROZEN",
|
|
9
|
+
CIRCUIT_BREAKER_OPEN = "CIRCUIT_BREAKER_OPEN",
|
|
10
|
+
INVALID_AMOUNT_FORMAT = "INVALID_AMOUNT_FORMAT",
|
|
11
|
+
INVALID_REQUEST = "INVALID_REQUEST",
|
|
12
|
+
NETWORK_NOT_WHITELISTED = "NETWORK_NOT_WHITELISTED",
|
|
13
|
+
ASSET_NOT_WHITELISTED = "ASSET_NOT_WHITELISTED",
|
|
14
|
+
PAYEE_NOT_WHITELISTED = "PAYEE_NOT_WHITELISTED",
|
|
15
|
+
DOMAIN_NOT_WHITELISTED = "DOMAIN_NOT_WHITELISTED",
|
|
16
|
+
SINGLE_TX_CAP_EXCEEDED = "SINGLE_TX_CAP_EXCEEDED",
|
|
17
|
+
LIFETIME_BUDGET_EXCEEDED = "LIFETIME_BUDGET_EXCEEDED",
|
|
18
|
+
DAILY_BUDGET_EXCEEDED = "DAILY_BUDGET_EXCEEDED",
|
|
19
|
+
RESERVATION_EXPIRED = "RESERVATION_EXPIRED",
|
|
20
|
+
RESERVATION_ALREADY_FINALIZED = "RESERVATION_ALREADY_FINALIZED",
|
|
21
|
+
UNMETERED_CREDENTIAL = "UNMETERED_CREDENTIAL",
|
|
22
|
+
DUPLICATE_INTENT = "DUPLICATE_INTENT",
|
|
23
|
+
POLICY_SYSTEM_ERROR = "POLICY_SYSTEM_ERROR"
|
|
24
|
+
}
|
|
25
|
+
export declare class PolicyViolationError extends Error {
|
|
26
|
+
readonly code: PolicyErrorCode;
|
|
27
|
+
readonly detail: string;
|
|
28
|
+
constructor(code: PolicyErrorCode, detail?: string);
|
|
29
|
+
toString(): string;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/policy/errors.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,oBAAY,eAAe;IAEzB,aAAa,kBAAkB;IAG/B,oBAAoB,yBAAyB;IAG7C,qBAAqB,0BAA0B;IAC/C,eAAe,oBAAoB;IAGnC,uBAAuB,4BAA4B;IACnD,qBAAqB,0BAA0B;IAC/C,qBAAqB,0BAA0B;IAC/C,sBAAsB,2BAA2B;IAGjD,sBAAsB,2BAA2B;IAGjD,wBAAwB,6BAA6B;IAGrD,qBAAqB,0BAA0B;IAG/C,mBAAmB,wBAAwB;IAC3C,6BAA6B,kCAAkC;IAC/D,oBAAoB,yBAAyB;IAC7C,gBAAgB,qBAAqB;IACrC,mBAAmB,wBAAwB;CAC5C;AAED,qBAAa,oBAAqB,SAAQ,KAAK;IAC7C,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC;IAC/B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;gBAEZ,IAAI,EAAE,eAAe,EAAE,MAAM,SAAK;IAQrC,QAAQ,IAAI,MAAM;CAG5B"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Standardized policy engine error codes and exception types.
|
|
3
|
+
*
|
|
4
|
+
* All error codes are defined in policy-engine-spec.md §2 and are language-agnostic
|
|
5
|
+
* uppercase string constants.
|
|
6
|
+
*/
|
|
7
|
+
export var PolicyErrorCode;
|
|
8
|
+
(function (PolicyErrorCode) {
|
|
9
|
+
// 1. Administrative lock
|
|
10
|
+
PolicyErrorCode["POLICY_FROZEN"] = "POLICY_FROZEN";
|
|
11
|
+
// 2. Circuit breaker
|
|
12
|
+
PolicyErrorCode["CIRCUIT_BREAKER_OPEN"] = "CIRCUIT_BREAKER_OPEN";
|
|
13
|
+
// 3. Request format validation
|
|
14
|
+
PolicyErrorCode["INVALID_AMOUNT_FORMAT"] = "INVALID_AMOUNT_FORMAT";
|
|
15
|
+
PolicyErrorCode["INVALID_REQUEST"] = "INVALID_REQUEST";
|
|
16
|
+
// 4. Whitelist matrix (evaluated in order: network → asset → payee → domain)
|
|
17
|
+
PolicyErrorCode["NETWORK_NOT_WHITELISTED"] = "NETWORK_NOT_WHITELISTED";
|
|
18
|
+
PolicyErrorCode["ASSET_NOT_WHITELISTED"] = "ASSET_NOT_WHITELISTED";
|
|
19
|
+
PolicyErrorCode["PAYEE_NOT_WHITELISTED"] = "PAYEE_NOT_WHITELISTED";
|
|
20
|
+
PolicyErrorCode["DOMAIN_NOT_WHITELISTED"] = "DOMAIN_NOT_WHITELISTED";
|
|
21
|
+
// 5. Single-transaction cap
|
|
22
|
+
PolicyErrorCode["SINGLE_TX_CAP_EXCEEDED"] = "SINGLE_TX_CAP_EXCEEDED";
|
|
23
|
+
// 6. Lifetime budget
|
|
24
|
+
PolicyErrorCode["LIFETIME_BUDGET_EXCEEDED"] = "LIFETIME_BUDGET_EXCEEDED";
|
|
25
|
+
// 7. Rolling 24h budget
|
|
26
|
+
PolicyErrorCode["DAILY_BUDGET_EXCEEDED"] = "DAILY_BUDGET_EXCEEDED";
|
|
27
|
+
// Reservation lifecycle & system errors
|
|
28
|
+
PolicyErrorCode["RESERVATION_EXPIRED"] = "RESERVATION_EXPIRED";
|
|
29
|
+
PolicyErrorCode["RESERVATION_ALREADY_FINALIZED"] = "RESERVATION_ALREADY_FINALIZED";
|
|
30
|
+
PolicyErrorCode["UNMETERED_CREDENTIAL"] = "UNMETERED_CREDENTIAL";
|
|
31
|
+
PolicyErrorCode["DUPLICATE_INTENT"] = "DUPLICATE_INTENT";
|
|
32
|
+
PolicyErrorCode["POLICY_SYSTEM_ERROR"] = "POLICY_SYSTEM_ERROR";
|
|
33
|
+
})(PolicyErrorCode || (PolicyErrorCode = {}));
|
|
34
|
+
export class PolicyViolationError extends Error {
|
|
35
|
+
code;
|
|
36
|
+
detail;
|
|
37
|
+
constructor(code, detail = '') {
|
|
38
|
+
const message = detail ? `${code}: ${detail}` : code;
|
|
39
|
+
super(message);
|
|
40
|
+
this.name = 'PolicyViolationError';
|
|
41
|
+
this.code = code;
|
|
42
|
+
this.detail = detail;
|
|
43
|
+
}
|
|
44
|
+
toString() {
|
|
45
|
+
return `PolicyViolationError(code=${this.code}, detail=${JSON.stringify(this.detail)})`;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/policy/errors.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,CAAN,IAAY,eAgCX;AAhCD,WAAY,eAAe;IACzB,yBAAyB;IACzB,kDAA+B,CAAA;IAE/B,qBAAqB;IACrB,gEAA6C,CAAA;IAE7C,+BAA+B;IAC/B,kEAA+C,CAAA;IAC/C,sDAAmC,CAAA;IAEnC,6EAA6E;IAC7E,sEAAmD,CAAA;IACnD,kEAA+C,CAAA;IAC/C,kEAA+C,CAAA;IAC/C,oEAAiD,CAAA;IAEjD,4BAA4B;IAC5B,oEAAiD,CAAA;IAEjD,qBAAqB;IACrB,wEAAqD,CAAA;IAErD,wBAAwB;IACxB,kEAA+C,CAAA;IAE/C,wCAAwC;IACxC,8DAA2C,CAAA;IAC3C,kFAA+D,CAAA;IAC/D,gEAA6C,CAAA;IAC7C,wDAAqC,CAAA;IACrC,8DAA2C,CAAA;AAC7C,CAAC,EAhCW,eAAe,KAAf,eAAe,QAgC1B;AAED,MAAM,OAAO,oBAAqB,SAAQ,KAAK;IACpC,IAAI,CAAkB;IACtB,MAAM,CAAS;IAExB,YAAY,IAAqB,EAAE,MAAM,GAAG,EAAE;QAC5C,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,KAAK,MAAM,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QACrD,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;QACnC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAEQ,QAAQ;QACf,OAAO,6BAA6B,IAAI,CAAC,IAAI,YAAY,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;IAC1F,CAAC;CACF"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Static rule evaluation logic for AgentPay Policy Engine.
|
|
3
|
+
*
|
|
4
|
+
* Evaluates deterministic static guardrails according to specs/policy-engine-spec.md §3:
|
|
5
|
+
* 1. Administrative lock (is_frozen) -> POLICY_FROZEN
|
|
6
|
+
* 2. Request format -> INVALID_AMOUNT_FORMAT (for amount) / INVALID_REQUEST (for other fields)
|
|
7
|
+
* 3. Whitelist matrix (Order: Network -> Asset -> Payee -> Domain)
|
|
8
|
+
* 4. Single-Transaction Cap -> SINGLE_TX_CAP_EXCEEDED
|
|
9
|
+
* 5. Lifetime Budget Ceiling -> LIFETIME_BUDGET_EXCEEDED
|
|
10
|
+
*
|
|
11
|
+
* Pure in-memory rule validation without external database calls.
|
|
12
|
+
*/
|
|
13
|
+
import { PolicyErrorCode } from './errors.js';
|
|
14
|
+
import { PaymentRequest, PolicyConfig } from './models.js';
|
|
15
|
+
export interface StaticEvaluationResult {
|
|
16
|
+
readonly passed: boolean;
|
|
17
|
+
readonly errorCode?: PolicyErrorCode | null;
|
|
18
|
+
readonly reason?: string | null;
|
|
19
|
+
}
|
|
20
|
+
export declare function evaluateStaticRules(config: PolicyConfig, request: PaymentRequest, lifetimeSpent?: bigint): StaticEvaluationResult;
|
|
21
|
+
export declare function evaluateMeteredRules(config: PolicyConfig, amount: bigint, domain: string | null | undefined, lifetimeSpent?: bigint): StaticEvaluationResult;
|
|
22
|
+
//# sourceMappingURL=evaluator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evaluator.d.ts","sourceRoot":"","sources":["../../src/policy/evaluator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EACL,cAAc,EACd,YAAY,EAIb,MAAM,aAAa,CAAC;AAErB,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,SAAS,CAAC,EAAE,eAAe,GAAG,IAAI,CAAC;IAC5C,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACjC;AAED,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,cAAc,EACvB,aAAa,SAAK,GACjB,sBAAsB,CAwGxB;AAED,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,YAAY,EACpB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACjC,aAAa,SAAK,GACjB,sBAAsB,CAsDxB"}
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Static rule evaluation logic for AgentPay Policy Engine.
|
|
3
|
+
*
|
|
4
|
+
* Evaluates deterministic static guardrails according to specs/policy-engine-spec.md §3:
|
|
5
|
+
* 1. Administrative lock (is_frozen) -> POLICY_FROZEN
|
|
6
|
+
* 2. Request format -> INVALID_AMOUNT_FORMAT (for amount) / INVALID_REQUEST (for other fields)
|
|
7
|
+
* 3. Whitelist matrix (Order: Network -> Asset -> Payee -> Domain)
|
|
8
|
+
* 4. Single-Transaction Cap -> SINGLE_TX_CAP_EXCEEDED
|
|
9
|
+
* 5. Lifetime Budget Ceiling -> LIFETIME_BUDGET_EXCEEDED
|
|
10
|
+
*
|
|
11
|
+
* Pure in-memory rule validation without external database calls.
|
|
12
|
+
*/
|
|
13
|
+
import { PolicyErrorCode } from './errors.js';
|
|
14
|
+
import { SQLITE_MAX_INT, WhitelistMode, normalizeDomainHost, } from './models.js';
|
|
15
|
+
export function evaluateStaticRules(config, request, lifetimeSpent = 0n) {
|
|
16
|
+
// 1. Administrative lock (is_frozen)
|
|
17
|
+
if (config.isFrozen) {
|
|
18
|
+
return {
|
|
19
|
+
passed: false,
|
|
20
|
+
errorCode: PolicyErrorCode.POLICY_FROZEN,
|
|
21
|
+
reason: `Policy ${config.id} is administratively frozen`,
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
// 2. Format validation (Amount must be strictly positive bigint within SQLite 64-bit bounds)
|
|
25
|
+
if (typeof request.amount !== 'bigint' || request.amount <= 0n || request.amount > SQLITE_MAX_INT) {
|
|
26
|
+
return {
|
|
27
|
+
passed: false,
|
|
28
|
+
errorCode: PolicyErrorCode.INVALID_AMOUNT_FORMAT,
|
|
29
|
+
reason: `Invalid payment amount: ${String(request.amount)}`,
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
if (typeof request.intentId !== 'string' ||
|
|
33
|
+
!request.intentId.trim() ||
|
|
34
|
+
typeof request.ttlSeconds !== 'number' ||
|
|
35
|
+
!Number.isInteger(request.ttlSeconds) ||
|
|
36
|
+
request.ttlSeconds <= 0 ||
|
|
37
|
+
request.ttlSeconds > 86400) {
|
|
38
|
+
return {
|
|
39
|
+
passed: false,
|
|
40
|
+
errorCode: PolicyErrorCode.INVALID_REQUEST,
|
|
41
|
+
reason: 'Invalid payment request parameters',
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
// 3. Whitelist Matrix (EVM only). AgentPay internal wallet ledger uses required gateway domain.
|
|
45
|
+
const isStrict = config.whitelistMode === WhitelistMode.STRICT;
|
|
46
|
+
if (!request.isAgentpayWallet) {
|
|
47
|
+
if ((isStrict || config.whitelistNetworks.size > 0) && !config.whitelistNetworks.has(request.network)) {
|
|
48
|
+
return {
|
|
49
|
+
passed: false,
|
|
50
|
+
errorCode: PolicyErrorCode.NETWORK_NOT_WHITELISTED,
|
|
51
|
+
reason: `Network ${request.network} is not in whitelisted networks`,
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
if ((isStrict || config.whitelistAssets.size > 0) && !config.whitelistAssets.has(request.asset)) {
|
|
55
|
+
return {
|
|
56
|
+
passed: false,
|
|
57
|
+
errorCode: PolicyErrorCode.ASSET_NOT_WHITELISTED,
|
|
58
|
+
reason: `Asset ${request.asset} is not in whitelisted assets`,
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
if ((isStrict || config.whitelistPayees.size > 0) && !config.whitelistPayees.has(request.payee)) {
|
|
62
|
+
return {
|
|
63
|
+
passed: false,
|
|
64
|
+
errorCode: PolicyErrorCode.PAYEE_NOT_WHITELISTED,
|
|
65
|
+
reason: `Payee ${request.payee} is not in whitelisted payees`,
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
if (request.isAgentpayWallet && request.domain === null) {
|
|
70
|
+
return {
|
|
71
|
+
passed: false,
|
|
72
|
+
errorCode: PolicyErrorCode.DOMAIN_NOT_WHITELISTED,
|
|
73
|
+
reason: 'AgentPay wallet requests require a whitelisted gateway domain',
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
if (request.domain !== null) {
|
|
77
|
+
const enforceDomain = request.isAgentpayWallet || isStrict || config.whitelistDomains.size > 0;
|
|
78
|
+
if (enforceDomain && !config.whitelistDomains.has(request.domain)) {
|
|
79
|
+
return {
|
|
80
|
+
passed: false,
|
|
81
|
+
errorCode: PolicyErrorCode.DOMAIN_NOT_WHITELISTED,
|
|
82
|
+
reason: `Domain ${request.domain} is not in whitelisted domains`,
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
// 4. Single-Transaction Cap
|
|
87
|
+
if (request.amount > config.maxPerTxBaseUnits) {
|
|
88
|
+
return {
|
|
89
|
+
passed: false,
|
|
90
|
+
errorCode: PolicyErrorCode.SINGLE_TX_CAP_EXCEEDED,
|
|
91
|
+
reason: `Amount ${request.amount.toString()} exceeds single transaction cap of ${config.maxPerTxBaseUnits.toString()}`,
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
// 5. Lifetime Budget Ceiling (if configured)
|
|
95
|
+
if (config.lifetimeBudgetBaseUnits !== null &&
|
|
96
|
+
lifetimeSpent + request.amount > config.lifetimeBudgetBaseUnits) {
|
|
97
|
+
return {
|
|
98
|
+
passed: false,
|
|
99
|
+
errorCode: PolicyErrorCode.LIFETIME_BUDGET_EXCEEDED,
|
|
100
|
+
reason: `Lifetime spend (${lifetimeSpent.toString()} + ${request.amount.toString()}) exceeds limit of ${config.lifetimeBudgetBaseUnits.toString()}`,
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
return { passed: true };
|
|
104
|
+
}
|
|
105
|
+
export function evaluateMeteredRules(config, amount, domain, lifetimeSpent = 0n) {
|
|
106
|
+
if (config.isFrozen) {
|
|
107
|
+
return {
|
|
108
|
+
passed: false,
|
|
109
|
+
errorCode: PolicyErrorCode.POLICY_FROZEN,
|
|
110
|
+
reason: `Policy ${config.id} is administratively frozen`,
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
if (typeof amount !== 'bigint' || amount <= 0n || amount > SQLITE_MAX_INT) {
|
|
114
|
+
return {
|
|
115
|
+
passed: false,
|
|
116
|
+
errorCode: PolicyErrorCode.INVALID_AMOUNT_FORMAT,
|
|
117
|
+
reason: `Invalid estimated amount: ${String(amount)}`,
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
if (domain !== undefined && domain !== null && typeof domain !== 'string') {
|
|
121
|
+
return {
|
|
122
|
+
passed: false,
|
|
123
|
+
errorCode: PolicyErrorCode.INVALID_REQUEST,
|
|
124
|
+
reason: `Invalid domain type: ${typeof domain}`,
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
const host = typeof domain === 'string' ? normalizeDomainHost(domain) : '';
|
|
128
|
+
if (!host || !config.whitelistDomains.has(host)) {
|
|
129
|
+
return {
|
|
130
|
+
passed: false,
|
|
131
|
+
errorCode: PolicyErrorCode.DOMAIN_NOT_WHITELISTED,
|
|
132
|
+
reason: `Domain ${JSON.stringify(domain)} is not in whitelisted domains`,
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
if (amount > config.maxPerTxBaseUnits) {
|
|
136
|
+
return {
|
|
137
|
+
passed: false,
|
|
138
|
+
errorCode: PolicyErrorCode.SINGLE_TX_CAP_EXCEEDED,
|
|
139
|
+
reason: `Amount ${amount.toString()} exceeds single transaction cap of ${config.maxPerTxBaseUnits.toString()}`,
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
if (config.lifetimeBudgetBaseUnits !== null &&
|
|
143
|
+
lifetimeSpent + amount > config.lifetimeBudgetBaseUnits) {
|
|
144
|
+
return {
|
|
145
|
+
passed: false,
|
|
146
|
+
errorCode: PolicyErrorCode.LIFETIME_BUDGET_EXCEEDED,
|
|
147
|
+
reason: `Lifetime spend (${lifetimeSpent.toString()} + ${amount.toString()}) exceeds limit of ${config.lifetimeBudgetBaseUnits.toString()}`,
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
return { passed: true };
|
|
151
|
+
}
|
|
152
|
+
//# sourceMappingURL=evaluator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evaluator.js","sourceRoot":"","sources":["../../src/policy/evaluator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/policy/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,SAAS,CAAC;AACxB,cAAc,oBAAoB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/policy/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,SAAS,CAAC;AACxB,cAAc,oBAAoB,CAAC"}
|