@dupecom/botcha-cloudflare 0.20.2 → 0.23.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.
Files changed (88) hide show
  1. package/README.md +74 -9
  2. package/dist/agent-auth.d.ts +129 -0
  3. package/dist/agent-auth.d.ts.map +1 -0
  4. package/dist/agent-auth.js +210 -0
  5. package/dist/agents.d.ts +10 -0
  6. package/dist/agents.d.ts.map +1 -1
  7. package/dist/agents.js +51 -1
  8. package/dist/app-gate.d.ts +6 -0
  9. package/dist/app-gate.d.ts.map +1 -0
  10. package/dist/app-gate.js +69 -0
  11. package/dist/apps.d.ts +13 -4
  12. package/dist/apps.d.ts.map +1 -1
  13. package/dist/apps.js +30 -4
  14. package/dist/dashboard/account.d.ts +63 -0
  15. package/dist/dashboard/account.d.ts.map +1 -0
  16. package/dist/dashboard/account.js +488 -0
  17. package/dist/dashboard/api.js +15 -68
  18. package/dist/dashboard/auth.d.ts.map +1 -1
  19. package/dist/dashboard/auth.js +14 -14
  20. package/dist/dashboard/docs.d.ts.map +1 -1
  21. package/dist/dashboard/docs.js +146 -3
  22. package/dist/dashboard/layout.d.ts.map +1 -1
  23. package/dist/dashboard/layout.js +2 -2
  24. package/dist/dashboard/mcp-setup.d.ts +15 -0
  25. package/dist/dashboard/mcp-setup.d.ts.map +1 -0
  26. package/dist/dashboard/mcp-setup.js +391 -0
  27. package/dist/dashboard/showcase.d.ts +6 -10
  28. package/dist/dashboard/showcase.d.ts.map +1 -1
  29. package/dist/dashboard/showcase.js +67 -991
  30. package/dist/dashboard/whitepaper.d.ts.map +1 -1
  31. package/dist/dashboard/whitepaper.js +42 -4
  32. package/dist/index.d.ts +5 -0
  33. package/dist/index.d.ts.map +1 -1
  34. package/dist/index.js +660 -83
  35. package/dist/mcp.d.ts +20 -0
  36. package/dist/mcp.d.ts.map +1 -0
  37. package/dist/mcp.js +1290 -0
  38. package/dist/oauth-agent.d.ts +130 -0
  39. package/dist/oauth-agent.d.ts.map +1 -0
  40. package/dist/oauth-agent.js +194 -0
  41. package/dist/static.d.ts +781 -5
  42. package/dist/static.d.ts.map +1 -1
  43. package/dist/static.js +790 -111
  44. package/dist/tap-a2a-routes.d.ts +355 -0
  45. package/dist/tap-a2a-routes.d.ts.map +1 -0
  46. package/dist/tap-a2a-routes.js +475 -0
  47. package/dist/tap-a2a.d.ts +199 -0
  48. package/dist/tap-a2a.d.ts.map +1 -0
  49. package/dist/tap-a2a.js +502 -0
  50. package/dist/tap-agents.d.ts +15 -0
  51. package/dist/tap-agents.d.ts.map +1 -1
  52. package/dist/tap-agents.js +31 -1
  53. package/dist/tap-ans-routes.d.ts +302 -0
  54. package/dist/tap-ans-routes.d.ts.map +1 -0
  55. package/dist/tap-ans-routes.js +535 -0
  56. package/dist/tap-ans.d.ts +241 -0
  57. package/dist/tap-ans.d.ts.map +1 -0
  58. package/dist/tap-ans.js +481 -0
  59. package/dist/tap-delegation-routes.d.ts.map +1 -1
  60. package/dist/tap-delegation-routes.js +11 -0
  61. package/dist/tap-did.d.ts +140 -0
  62. package/dist/tap-did.d.ts.map +1 -0
  63. package/dist/tap-did.js +262 -0
  64. package/dist/tap-oidca-routes.d.ts +383 -0
  65. package/dist/tap-oidca-routes.d.ts.map +1 -0
  66. package/dist/tap-oidca-routes.js +597 -0
  67. package/dist/tap-oidca.d.ts +288 -0
  68. package/dist/tap-oidca.d.ts.map +1 -0
  69. package/dist/tap-oidca.js +461 -0
  70. package/dist/tap-routes.d.ts +24 -8
  71. package/dist/tap-routes.d.ts.map +1 -1
  72. package/dist/tap-routes.js +169 -23
  73. package/dist/tap-vc-routes.d.ts +358 -0
  74. package/dist/tap-vc-routes.d.ts.map +1 -0
  75. package/dist/tap-vc-routes.js +367 -0
  76. package/dist/tap-vc.d.ts +125 -0
  77. package/dist/tap-vc.d.ts.map +1 -0
  78. package/dist/tap-vc.js +245 -0
  79. package/dist/tap-x402-routes.d.ts +89 -0
  80. package/dist/tap-x402-routes.d.ts.map +1 -0
  81. package/dist/tap-x402-routes.js +579 -0
  82. package/dist/tap-x402.d.ts +222 -0
  83. package/dist/tap-x402.d.ts.map +1 -0
  84. package/dist/tap-x402.js +546 -0
  85. package/dist/webhooks.d.ts +99 -0
  86. package/dist/webhooks.d.ts.map +1 -0
  87. package/dist/webhooks.js +642 -0
  88. package/package.json +3 -1
@@ -0,0 +1,222 @@
1
+ /**
2
+ * x402 Payment Gating — BOTCHA Revenue via HTTP 402
3
+ *
4
+ * Implements the x402 HTTP Payment Required protocol so BOTCHA-verified
5
+ * agents can natively access paid APIs, and BOTCHA earns per-verification.
6
+ *
7
+ * Spec: https://x402.org / https://github.com/coinbase/x402
8
+ *
9
+ * Flow:
10
+ * 1. Agent requests a protected resource
11
+ * 2. Server returns HTTP 402 + X-Payment-Required header (payment details)
12
+ * 3. Agent signs a ERC-3009 transferWithAuthorization and sends X-Payment header
13
+ * 4. Server verifies payment on-chain (or via facilitator) and issues BOTCHA token
14
+ *
15
+ * Key standard:
16
+ * - Scheme: "exact" — fixed USD amount, exact recipient
17
+ * - Network: "base" (Base mainnet, chain ID 8453)
18
+ * - Token: USDC on Base (6 decimals, 1000 units = $0.001)
19
+ * - Verification: ERC-3009 signature (EIP-712 structured data)
20
+ */
21
+ import type { KVNamespace } from './agents.js';
22
+ import { type ES256SigningKeyJWK } from './auth.js';
23
+ /**
24
+ * BOTCHA's receiving wallet on Base. Set via BOTCHA_PAYMENT_WALLET env var.
25
+ * Placeholder: in production, override with BOTCHA_PAYMENT_WALLET secret.
26
+ * This address (b07ca = "botcha" mapped to hex-safe chars) is not owned by anyone.
27
+ */
28
+ export declare const BOTCHA_WALLET = "0xb07ca00000000000000000000000000000000001";
29
+ /** USDC contract address on Base (mainnet) */
30
+ export declare const USDC_BASE_ADDRESS = "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913";
31
+ /** Base chain ID */
32
+ export declare const BASE_CHAIN_ID = 8453;
33
+ /** Price per BOTCHA verification in USDC atomic units (6 decimals) */
34
+ /** 1000 units = $0.001 USDC */
35
+ export declare const VERIFICATION_PRICE_USDC_UNITS = "1000";
36
+ /** Human-readable price */
37
+ export declare const VERIFICATION_PRICE_HUMAN = "$0.001 USDC";
38
+ /** Payment deadline window (seconds) */
39
+ export declare const PAYMENT_DEADLINE_SECONDS = 300;
40
+ /** KV TTL for x402 nonces (replay protection) */
41
+ export declare const NONCE_TTL_SECONDS = 3600;
42
+ /**
43
+ * x402 "exact" scheme payment requirements.
44
+ * This is what goes in the X-Payment-Required header (JSON).
45
+ */
46
+ export interface X402PaymentRequired {
47
+ scheme: 'exact';
48
+ network: string;
49
+ maxAmountRequired: string;
50
+ resource: string;
51
+ description: string;
52
+ mimeType: string;
53
+ payTo: string;
54
+ maxTimeoutSeconds: number;
55
+ asset: string;
56
+ extra?: {
57
+ name: string;
58
+ version: string;
59
+ botcha_app_id?: string;
60
+ };
61
+ }
62
+ /**
63
+ * ERC-3009 transferWithAuthorization payload embedded in X-Payment header.
64
+ * This is the on-chain payment proof signed by the payer.
65
+ */
66
+ export interface ERC3009TransferPayload {
67
+ from: string;
68
+ to: string;
69
+ value: string;
70
+ validAfter: string;
71
+ validBefore: string;
72
+ nonce: string;
73
+ signature: string;
74
+ chainId?: number;
75
+ }
76
+ /**
77
+ * x402 payment proof sent by the agent in the X-Payment header.
78
+ * Base64-encoded JSON of this structure.
79
+ */
80
+ export interface X402PaymentProof {
81
+ scheme: 'exact';
82
+ network: string;
83
+ payload: ERC3009TransferPayload;
84
+ }
85
+ /**
86
+ * Result of x402 payment verification
87
+ */
88
+ export interface X402VerificationResult {
89
+ verified: boolean;
90
+ valid: boolean;
91
+ txHash?: string;
92
+ payer?: string;
93
+ amount?: string;
94
+ network?: string;
95
+ error?: string;
96
+ errorCode?: string;
97
+ }
98
+ /**
99
+ * x402 webhook event (from Coinbase CDP or other facilitators)
100
+ */
101
+ export interface X402WebhookEvent {
102
+ event_type: 'payment.settled' | 'payment.failed' | 'payment.refunded';
103
+ payment_id: string;
104
+ tx_hash: string;
105
+ from: string;
106
+ to: string;
107
+ amount: string;
108
+ token: string;
109
+ network: string;
110
+ resource: string;
111
+ timestamp: string;
112
+ metadata?: Record<string, string>;
113
+ }
114
+ /**
115
+ * Record of an x402 payment stored in KV
116
+ */
117
+ export interface X402PaymentRecord {
118
+ payment_id: string;
119
+ payer: string;
120
+ amount: string;
121
+ network: string;
122
+ tx_hash: string;
123
+ resource: string;
124
+ nonce: string;
125
+ botcha_app_id?: string;
126
+ agent_id?: string;
127
+ access_token?: string;
128
+ verified_at: number;
129
+ status: 'verified' | 'rejected' | 'pending';
130
+ }
131
+ /**
132
+ * Build a standard x402 payment required descriptor.
133
+ * Goes into the X-Payment-Required response header.
134
+ */
135
+ export declare function buildPaymentRequiredDescriptor(resource: string, options?: {
136
+ description?: string;
137
+ mimeType?: string;
138
+ payTo?: string;
139
+ amount?: string;
140
+ appId?: string;
141
+ }): X402PaymentRequired;
142
+ /**
143
+ * Parse and decode an X-Payment header value (base64 JSON)
144
+ * Returns null if invalid format.
145
+ */
146
+ export declare function parsePaymentHeader(headerValue: string): X402PaymentProof | null;
147
+ /**
148
+ * Verify an x402 payment proof.
149
+ *
150
+ * Checks:
151
+ * 1. Network matches Base
152
+ * 2. Recipient matches BOTCHA wallet
153
+ * 3. Amount >= required
154
+ * 4. Deadline has not expired (validBefore)
155
+ * 5. Nonce has not been replayed (KV check)
156
+ * 6. EIP-712 signature is valid (ERC-3009)
157
+ *
158
+ * Note: This verifies the ERC-3009 typed-data signature locally.
159
+ * It does not confirm on-chain settlement; use facilitator webhooks for that.
160
+ */
161
+ export declare function verifyX402Payment(proof: X402PaymentProof, noncesKV: KVNamespace, options?: {
162
+ requiredRecipient?: string;
163
+ requiredAmount?: string;
164
+ }): Promise<X402VerificationResult>;
165
+ export declare function buildERC3009TransferDigest(payload: ERC3009TransferPayload): Uint8Array;
166
+ /**
167
+ * Store a verified x402 payment record in KV
168
+ */
169
+ export declare function storePaymentRecord(noncesKV: KVNamespace, record: X402PaymentRecord): Promise<void>;
170
+ /**
171
+ * Get a payment record by ID
172
+ */
173
+ export declare function getPaymentRecord(noncesKV: KVNamespace, paymentId: string): Promise<X402PaymentRecord | null>;
174
+ /**
175
+ * Issue a BOTCHA access_token in exchange for a verified x402 payment.
176
+ * This is the core pay-for-verification flow.
177
+ *
178
+ * The issued token is identical to a challenge-solve token —
179
+ * agents that pay get the same trust level as agents that solve.
180
+ */
181
+ export declare function issueTokenForPayment(challengesKV: KVNamespace, env: {
182
+ JWT_SECRET: string;
183
+ JWT_SIGNING_KEY?: string;
184
+ }, options: {
185
+ payer: string;
186
+ paymentId: string;
187
+ appId?: string;
188
+ audience?: string;
189
+ solveTimeMs?: number;
190
+ }, signingKey?: ES256SigningKeyJWK): Promise<{
191
+ access_token: string;
192
+ refresh_token: string;
193
+ expires_in: number;
194
+ refresh_expires_in: number;
195
+ }>;
196
+ /**
197
+ * Build the X-Payment-Response header value for successful payment
198
+ */
199
+ export declare function buildPaymentResponseHeader(result: X402VerificationResult): string;
200
+ /**
201
+ * Process an inbound x402 webhook event from a facilitator.
202
+ *
203
+ * On payment.settled: update agent reputation, store payment record.
204
+ * On payment.failed: log failure.
205
+ * On payment.refunded: note in record.
206
+ */
207
+ export declare function processWebhookEvent(event: X402WebhookEvent, noncesKV: KVNamespace, agentsKV: KVNamespace, sessionsKV: KVNamespace, webhookSecret?: string): Promise<{
208
+ handled: boolean;
209
+ message: string;
210
+ }>;
211
+ declare const _default: {
212
+ buildPaymentRequiredDescriptor: typeof buildPaymentRequiredDescriptor;
213
+ parsePaymentHeader: typeof parsePaymentHeader;
214
+ verifyX402Payment: typeof verifyX402Payment;
215
+ issueTokenForPayment: typeof issueTokenForPayment;
216
+ buildPaymentResponseHeader: typeof buildPaymentResponseHeader;
217
+ storePaymentRecord: typeof storePaymentRecord;
218
+ getPaymentRecord: typeof getPaymentRecord;
219
+ processWebhookEvent: typeof processWebhookEvent;
220
+ };
221
+ export default _default;
222
+ //# sourceMappingURL=tap-x402.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tap-x402.d.ts","sourceRoot":"","sources":["../src/tap-x402.ts"],"names":[],"mappings":"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"}