@teneo-protocol/sdk 2.2.2 → 3.0.1
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/.github/ISSUE_TEMPLATE/config.yml +1 -1
- package/CHANGELOG.md +366 -15
- package/CONCEPTS.md +182 -44
- package/README.md +524 -94
- package/dist/constants.d.ts +3 -1
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +5 -3
- package/dist/constants.js.map +1 -1
- package/dist/core/websocket-client.d.ts.map +1 -1
- package/dist/core/websocket-client.js +9 -5
- package/dist/core/websocket-client.js.map +1 -1
- package/dist/formatters/response-formatter.d.ts +6 -6
- package/dist/handlers/message-handlers/agent-details-response-handler.d.ts +1080 -756
- package/dist/handlers/message-handlers/agent-details-response-handler.d.ts.map +1 -1
- package/dist/handlers/message-handlers/agent-details-response-handler.js +2 -2
- package/dist/handlers/message-handlers/agent-details-response-handler.js.map +1 -1
- package/dist/handlers/message-handlers/agent-error-handler.d.ts +91 -0
- package/dist/handlers/message-handlers/agent-error-handler.d.ts.map +1 -0
- package/dist/handlers/message-handlers/agent-error-handler.js +44 -0
- package/dist/handlers/message-handlers/agent-error-handler.js.map +1 -0
- package/dist/handlers/message-handlers/agent-selected-handler.d.ts +6 -0
- package/dist/handlers/message-handlers/agent-selected-handler.d.ts.map +1 -1
- package/dist/handlers/message-handlers/agent-status-update-handler.d.ts +1080 -756
- package/dist/handlers/message-handlers/agent-status-update-handler.d.ts.map +1 -1
- package/dist/handlers/message-handlers/agent-status-update-handler.js +2 -7
- package/dist/handlers/message-handlers/agent-status-update-handler.js.map +1 -1
- package/dist/handlers/message-handlers/all-agents-response-handler.d.ts +135 -54
- package/dist/handlers/message-handlers/all-agents-response-handler.d.ts.map +1 -1
- package/dist/handlers/message-handlers/all-agents-response-handler.js +2 -2
- package/dist/handlers/message-handlers/all-agents-response-handler.js.map +1 -1
- package/dist/handlers/message-handlers/auth-error-handler.d.ts +6 -0
- package/dist/handlers/message-handlers/auth-error-handler.d.ts.map +1 -1
- package/dist/handlers/message-handlers/auth-message-handler.d.ts.map +1 -1
- package/dist/handlers/message-handlers/auth-message-handler.js +6 -1
- package/dist/handlers/message-handlers/auth-message-handler.js.map +1 -1
- package/dist/handlers/message-handlers/auth-required-handler.d.ts +6 -0
- package/dist/handlers/message-handlers/auth-required-handler.d.ts.map +1 -1
- package/dist/handlers/message-handlers/auth-success-handler.d.ts.map +1 -1
- package/dist/handlers/message-handlers/auth-success-handler.js +6 -1
- package/dist/handlers/message-handlers/auth-success-handler.js.map +1 -1
- package/dist/handlers/message-handlers/base-handler.d.ts +2 -1
- package/dist/handlers/message-handlers/base-handler.d.ts.map +1 -1
- package/dist/handlers/message-handlers/base-handler.js +24 -4
- package/dist/handlers/message-handlers/base-handler.js.map +1 -1
- package/dist/handlers/message-handlers/challenge-handler.d.ts +6 -0
- package/dist/handlers/message-handlers/challenge-handler.d.ts.map +1 -1
- package/dist/handlers/message-handlers/error-message-handler.d.ts +6 -0
- package/dist/handlers/message-handlers/error-message-handler.d.ts.map +1 -1
- package/dist/handlers/message-handlers/index.d.ts +4 -0
- package/dist/handlers/message-handlers/index.d.ts.map +1 -1
- package/dist/handlers/message-handlers/index.js +23 -1
- package/dist/handlers/message-handlers/index.js.map +1 -1
- package/dist/handlers/message-handlers/list-available-agents-handler.d.ts +1116 -756
- package/dist/handlers/message-handlers/list-available-agents-handler.d.ts.map +1 -1
- package/dist/handlers/message-handlers/list-available-agents-handler.js +23 -10
- package/dist/handlers/message-handlers/list-available-agents-handler.js.map +1 -1
- package/dist/handlers/message-handlers/list-room-agents-handler.d.ts +1080 -756
- package/dist/handlers/message-handlers/list-room-agents-handler.d.ts.map +1 -1
- package/dist/handlers/message-handlers/list-room-agents-handler.js +2 -6
- package/dist/handlers/message-handlers/list-room-agents-handler.js.map +1 -1
- package/dist/handlers/message-handlers/list-rooms-response-handler.d.ts.map +1 -1
- package/dist/handlers/message-handlers/list-rooms-response-handler.js +2 -5
- package/dist/handlers/message-handlers/list-rooms-response-handler.js.map +1 -1
- package/dist/handlers/message-handlers/ping-pong-handler.d.ts +52 -4
- package/dist/handlers/message-handlers/ping-pong-handler.d.ts.map +1 -1
- package/dist/handlers/message-handlers/ping-pong-handler.js +23 -4
- package/dist/handlers/message-handlers/ping-pong-handler.js.map +1 -1
- package/dist/handlers/message-handlers/rate-limit-notification-handler.d.ts.map +1 -1
- package/dist/handlers/message-handlers/rate-limit-notification-handler.js +3 -2
- package/dist/handlers/message-handlers/rate-limit-notification-handler.js.map +1 -1
- package/dist/handlers/message-handlers/regular-message-handler.d.ts +6 -0
- package/dist/handlers/message-handlers/regular-message-handler.d.ts.map +1 -1
- package/dist/handlers/message-handlers/subscribe-response-handler.d.ts +12 -6
- package/dist/handlers/message-handlers/subscribe-response-handler.d.ts.map +1 -1
- package/dist/handlers/message-handlers/success-handler.d.ts +82 -0
- package/dist/handlers/message-handlers/success-handler.d.ts.map +1 -0
- package/dist/handlers/message-handlers/success-handler.js +24 -0
- package/dist/handlers/message-handlers/success-handler.js.map +1 -0
- package/dist/handlers/message-handlers/task-confirmed-handler.d.ts +110 -0
- package/dist/handlers/message-handlers/task-confirmed-handler.d.ts.map +1 -0
- package/dist/handlers/message-handlers/task-confirmed-handler.js +46 -0
- package/dist/handlers/message-handlers/task-confirmed-handler.js.map +1 -0
- package/dist/handlers/message-handlers/trigger-wallet-tx-handler.d.ts +244 -0
- package/dist/handlers/message-handlers/trigger-wallet-tx-handler.d.ts.map +1 -0
- package/dist/handlers/message-handlers/trigger-wallet-tx-handler.js +58 -0
- package/dist/handlers/message-handlers/trigger-wallet-tx-handler.js.map +1 -0
- package/dist/handlers/message-handlers/unsubscribe-response-handler.d.ts +12 -6
- package/dist/handlers/message-handlers/unsubscribe-response-handler.d.ts.map +1 -1
- package/dist/handlers/message-handlers/user-authenticated-handler.js +2 -2
- package/dist/handlers/message-handlers/user-authenticated-handler.js.map +1 -1
- package/dist/handlers/message-handlers/user-count-handler.js +2 -2
- package/dist/handlers/message-handlers/user-count-handler.js.map +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -4
- package/dist/index.js.map +1 -1
- package/dist/managers/admin-manager.d.ts +3 -1
- package/dist/managers/admin-manager.d.ts.map +1 -1
- package/dist/managers/admin-manager.js +4 -3
- package/dist/managers/admin-manager.js.map +1 -1
- package/dist/managers/agent-room-manager.d.ts +89 -11
- package/dist/managers/agent-room-manager.d.ts.map +1 -1
- package/dist/managers/agent-room-manager.js +99 -35
- package/dist/managers/agent-room-manager.js.map +1 -1
- package/dist/managers/index.d.ts +1 -1
- package/dist/managers/index.d.ts.map +1 -1
- package/dist/managers/index.js.map +1 -1
- package/dist/managers/message-router.d.ts +45 -5
- package/dist/managers/message-router.d.ts.map +1 -1
- package/dist/managers/message-router.js +96 -24
- package/dist/managers/message-router.js.map +1 -1
- package/dist/managers/room-manager.d.ts +29 -7
- package/dist/managers/room-manager.d.ts.map +1 -1
- package/dist/managers/room-manager.js +37 -11
- package/dist/managers/room-manager.js.map +1 -1
- package/dist/payments/index.d.ts +3 -1
- package/dist/payments/index.d.ts.map +1 -1
- package/dist/payments/index.js +17 -3
- package/dist/payments/index.js.map +1 -1
- package/dist/payments/networks.d.ts +59 -0
- package/dist/payments/networks.d.ts.map +1 -0
- package/dist/payments/networks.js +192 -0
- package/dist/payments/networks.js.map +1 -0
- package/dist/payments/payment-client.d.ts +55 -10
- package/dist/payments/payment-client.d.ts.map +1 -1
- package/dist/payments/payment-client.js +172 -51
- package/dist/payments/payment-client.js.map +1 -1
- package/dist/teneo-sdk.d.ts +215 -41
- package/dist/teneo-sdk.d.ts.map +1 -1
- package/dist/teneo-sdk.js +361 -84
- package/dist/teneo-sdk.js.map +1 -1
- package/dist/types/config.d.ts +334 -25
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/config.js +114 -22
- package/dist/types/config.js.map +1 -1
- package/dist/types/events.d.ts +60 -14
- package/dist/types/events.d.ts.map +1 -1
- package/dist/types/events.js.map +1 -1
- package/dist/types/index.d.ts +1 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +11 -4
- package/dist/types/index.js.map +1 -1
- package/dist/types/messages.d.ts +13110 -7451
- package/dist/types/messages.d.ts.map +1 -1
- package/dist/types/messages.js +195 -44
- package/dist/types/messages.js.map +1 -1
- package/dist/utils/pricing-resolver.d.ts +1 -1
- package/dist/utils/pricing-resolver.d.ts.map +1 -1
- package/dist/utils/pricing-resolver.js +9 -1
- package/dist/utils/pricing-resolver.js.map +1 -1
- package/examples/agent-room-management-example.ts +5 -5
- package/examples/basic-usage.ts +26 -6
- package/examples/claude-agent-x-follower/index.ts +1 -1
- package/examples/minimal-chat.ts +4 -3
- package/examples/n8n-teneo/index.ts +2 -2
- package/examples/nestjs-dashboard/README.md +1 -1
- package/examples/nestjs-dashboard/src/teneo/agents.controller.ts +3 -3
- package/examples/nestjs-dashboard/src/teneo/rooms.controller.ts +5 -5
- package/examples/nestjs-dashboard/src/teneo/teneo.service.ts +8 -8
- package/examples/openai-teneo/index.ts +1 -1
- package/examples/payment-flow.ts +143 -0
- package/examples/production-dashboard/README.md +6 -8
- package/examples/production-dashboard/server.ts +22 -10
- package/examples/room-management-example.ts +2 -2
- package/examples/usage/01-connect.ts +0 -3
- package/examples/usage/02-list-agents.ts +0 -2
- package/examples/usage/03-pick-agent.ts +3 -4
- package/examples/usage/04-find-by-capability.ts +10 -12
- package/examples/usage/05-webhook-example.ts +2 -4
- package/examples/usage/06-simple-api-server.ts +13 -9
- package/examples/usage/07-event-listener.ts +1 -13
- package/examples/usage/README.md +33 -7
- package/examples/webhook-integration.ts +9 -9
- package/examples/x-influencer-battle-server.ts +1 -1
- package/package.json +1 -1
- package/scripts/diagnose-connection.ts +86 -0
- package/scripts/investigate-payload.ts +163 -0
- package/scripts/list-agents.ts +58 -0
- package/scripts/live-multi-network-test.ts +230 -0
- package/src/constants.ts +5 -3
- package/src/core/websocket-client.ts +10 -9
- package/src/handlers/message-handlers/agent-details-response-handler.ts +2 -2
- package/src/handlers/message-handlers/agent-error-handler.ts +47 -0
- package/src/handlers/message-handlers/agent-status-update-handler.ts +2 -7
- package/src/handlers/message-handlers/all-agents-response-handler.ts +2 -2
- package/src/handlers/message-handlers/auth-message-handler.ts +7 -1
- package/src/handlers/message-handlers/auth-success-handler.ts +7 -1
- package/src/handlers/message-handlers/base-handler.ts +24 -4
- package/src/handlers/message-handlers/index.ts +24 -0
- package/src/handlers/message-handlers/list-available-agents-handler.ts +24 -11
- package/src/handlers/message-handlers/list-room-agents-handler.ts +2 -6
- package/src/handlers/message-handlers/list-rooms-response-handler.ts +2 -5
- package/src/handlers/message-handlers/ping-pong-handler.ts +29 -4
- package/src/handlers/message-handlers/rate-limit-notification-handler.ts +3 -2
- package/src/handlers/message-handlers/success-handler.ts +26 -0
- package/src/handlers/message-handlers/task-confirmed-handler.ts +49 -0
- package/src/handlers/message-handlers/trigger-wallet-tx-handler.ts +62 -0
- package/src/handlers/message-handlers/user-authenticated-handler.ts +2 -2
- package/src/handlers/message-handlers/user-count-handler.ts +2 -2
- package/src/index.ts +12 -4
- package/src/managers/admin-manager.ts +6 -3
- package/src/managers/agent-room-manager.ts +155 -26
- package/src/managers/index.ts +6 -1
- package/src/managers/message-router.ts +122 -27
- package/src/managers/room-manager.ts +39 -11
- package/src/payments/index.ts +20 -5
- package/src/payments/networks.ts +208 -0
- package/src/payments/payment-client.ts +211 -56
- package/src/teneo-sdk.ts +402 -71
- package/src/types/config.test.ts +24 -4
- package/src/types/config.ts +123 -25
- package/src/types/events.ts +36 -2
- package/src/types/index.ts +16 -3
- package/src/types/messages.ts +235 -60
- package/src/utils/pricing-resolver.ts +10 -2
- package/tests/direct-agent-test.ts +1 -1
- package/tests/integration/real-server.test.ts +1 -1
- package/tests/integration/websocket.test.ts +3 -3
- package/tests/multi-network-payment.test.ts +309 -0
- package/tests/multi-network.test.ts +296 -0
- package/tests/payment-flow-test.ts +6 -4
- package/tests/unit/handlers/agent-error-handler.test.ts +388 -0
- package/tests/unit/handlers/agent-room-operation-response-handler.test.ts +9 -6
- package/tests/unit/handlers/agent-status-update-handler.test.ts +11 -16
- package/tests/unit/handlers/list-available-agents-handler.test.ts +11 -14
- package/tests/unit/handlers/list-room-agents-handler.test.ts +11 -15
- package/tests/unit/handlers/room-operation-response-handler.test.ts +9 -6
- package/tests/unit/handlers/trigger-wallet-tx-handler.test.ts +431 -0
- package/tests/unit/managers/admin-manager.test.ts +183 -0
- package/tests/unit/managers/agent-room-manager.test.ts +189 -33
- package/tests/unit/sdk-new-methods.test.ts +221 -0
|
@@ -0,0 +1,309 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Multi-Network Payment Tests
|
|
3
|
+
*
|
|
4
|
+
* Tests PaymentClient across PEAQ, Base, and Avalanche networks.
|
|
5
|
+
* Uses a test private key to create actual payment headers.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import { describe, it, expect, beforeAll, vi } from "vitest";
|
|
9
|
+
import { PaymentClient } from "../src/payments/payment-client";
|
|
10
|
+
import { getNetwork, NETWORKS, setNetworkConfigUrl, fetchNetworkConfigs } from "../src/payments/networks";
|
|
11
|
+
import { SecurePrivateKey } from "../src/utils/secure-private-key";
|
|
12
|
+
import { privateKeyToAccount } from "viem/accounts";
|
|
13
|
+
|
|
14
|
+
// Test private key (Hardhat default test account #0 - DO NOT use for real funds)
|
|
15
|
+
const TEST_PRIVATE_KEY = "0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80";
|
|
16
|
+
const TEST_RECIPIENT = "0x1234567890123456789012345678901234567890";
|
|
17
|
+
|
|
18
|
+
// Mock network data
|
|
19
|
+
const mockNetworkData = {
|
|
20
|
+
networks: {
|
|
21
|
+
peaq: {
|
|
22
|
+
chainId: 3338,
|
|
23
|
+
name: "PEAQ Mainnet",
|
|
24
|
+
caip2: "eip155:3338",
|
|
25
|
+
rpcUrl: "https://peaq.network/rpc",
|
|
26
|
+
usdcContract: "0xbbA60da06c2c5424f03f7434542280FCAd453d10",
|
|
27
|
+
settlementRouter: "0xCD57f4596f70b18a0fd0c42daa4F3066d3adc8d4",
|
|
28
|
+
transferHook: "0xf45FA7713a58eBd0C353186F9e49A7C39a0eD34E",
|
|
29
|
+
eip712: {
|
|
30
|
+
name: "USDC",
|
|
31
|
+
version: "2"
|
|
32
|
+
}
|
|
33
|
+
},
|
|
34
|
+
base: {
|
|
35
|
+
chainId: 8453,
|
|
36
|
+
name: "Base Mainnet",
|
|
37
|
+
caip2: "eip155:8453",
|
|
38
|
+
rpcUrl: "https://mainnet.base.org",
|
|
39
|
+
usdcContract: "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
|
|
40
|
+
settlementRouter: "0x73fc659Cd5494E69852bE8D9D23FE05Aab14b29B",
|
|
41
|
+
transferHook: "0x081258287F692D61575387ee2a4075f34dd7Aef7",
|
|
42
|
+
eip712: {
|
|
43
|
+
name: "USD Coin",
|
|
44
|
+
version: "2"
|
|
45
|
+
}
|
|
46
|
+
},
|
|
47
|
+
avalanche: {
|
|
48
|
+
chainId: 43114,
|
|
49
|
+
name: "Avalanche Mainnet",
|
|
50
|
+
caip2: "eip155:43114",
|
|
51
|
+
rpcUrl: "https://api.avax.network/ext/bc/C/rpc",
|
|
52
|
+
usdcContract: "0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E",
|
|
53
|
+
settlementRouter: "0xF38709cFd3f89734c231dd8E59Ff1d44caCddEe8",
|
|
54
|
+
transferHook: "0x6D21298950dC58a984664B12Cdf4DeBA143889aa",
|
|
55
|
+
eip712: {
|
|
56
|
+
name: "USD Coin",
|
|
57
|
+
version: "2"
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
describe("Multi-Network Payment Tests", () => {
|
|
64
|
+
let secureKey: SecurePrivateKey;
|
|
65
|
+
let walletAddress: string;
|
|
66
|
+
|
|
67
|
+
beforeAll(async () => {
|
|
68
|
+
// Mock global fetch
|
|
69
|
+
global.fetch = vi.fn(() =>
|
|
70
|
+
Promise.resolve({
|
|
71
|
+
ok: true,
|
|
72
|
+
json: () => Promise.resolve(mockNetworkData)
|
|
73
|
+
} as Response)
|
|
74
|
+
);
|
|
75
|
+
|
|
76
|
+
// Initialize networks before tests
|
|
77
|
+
setNetworkConfigUrl("https://backend.test.com/ws");
|
|
78
|
+
await fetchNetworkConfigs();
|
|
79
|
+
|
|
80
|
+
secureKey = new SecurePrivateKey(TEST_PRIVATE_KEY);
|
|
81
|
+
const account = privateKeyToAccount(TEST_PRIVATE_KEY as `0x${string}`);
|
|
82
|
+
walletAddress = account.address;
|
|
83
|
+
console.log(`Test wallet address: ${walletAddress}`);
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
describe("Network Configuration Verification", () => {
|
|
87
|
+
it("should have correct PEAQ configuration", () => {
|
|
88
|
+
const peaq = getNetwork("peaq");
|
|
89
|
+
expect(peaq.chainId).toBe(3338);
|
|
90
|
+
expect(peaq.settlementRouter).toBe("0xCD57f4596f70b18a0fd0c42daa4F3066d3adc8d4");
|
|
91
|
+
expect(peaq.transferHook).toBe("0xf45FA7713a58eBd0C353186F9e49A7C39a0eD34E");
|
|
92
|
+
expect(peaq.usdcContract).toBe("0xbbA60da06c2c5424f03f7434542280FCAd453d10");
|
|
93
|
+
console.log("PEAQ:", peaq);
|
|
94
|
+
});
|
|
95
|
+
|
|
96
|
+
it("should have correct Base configuration", () => {
|
|
97
|
+
const base = getNetwork("base");
|
|
98
|
+
expect(base.chainId).toBe(8453);
|
|
99
|
+
expect(base.settlementRouter).toBe("0x73fc659Cd5494E69852bE8D9D23FE05Aab14b29B");
|
|
100
|
+
expect(base.transferHook).toBe("0x081258287F692D61575387ee2a4075f34dd7Aef7");
|
|
101
|
+
expect(base.usdcContract).toBe("0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913");
|
|
102
|
+
console.log("Base:", base);
|
|
103
|
+
});
|
|
104
|
+
|
|
105
|
+
it("should have correct Avalanche configuration", () => {
|
|
106
|
+
const avalanche = getNetwork("avalanche");
|
|
107
|
+
expect(avalanche.chainId).toBe(43114);
|
|
108
|
+
expect(avalanche.settlementRouter).toBe("0xF38709cFd3f89734c231dd8E59Ff1d44caCddEe8");
|
|
109
|
+
expect(avalanche.transferHook).toBe("0x6D21298950dC58a984664B12Cdf4DeBA143889aa");
|
|
110
|
+
expect(avalanche.usdcContract).toBe("0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E");
|
|
111
|
+
console.log("Avalanche:", avalanche);
|
|
112
|
+
});
|
|
113
|
+
});
|
|
114
|
+
|
|
115
|
+
describe("PaymentClient on PEAQ", () => {
|
|
116
|
+
let client: PaymentClient;
|
|
117
|
+
|
|
118
|
+
beforeAll(() => {
|
|
119
|
+
client = new PaymentClient(secureKey, walletAddress, {
|
|
120
|
+
network: "peaq"
|
|
121
|
+
});
|
|
122
|
+
});
|
|
123
|
+
|
|
124
|
+
it("should create client with correct network", () => {
|
|
125
|
+
expect(client.network.chainId).toBe(3338);
|
|
126
|
+
expect(client.network.name).toBe("PEAQ Mainnet");
|
|
127
|
+
expect(client.caip2).toBe("eip155:3338");
|
|
128
|
+
});
|
|
129
|
+
|
|
130
|
+
it("should create payment header for PEAQ", async () => {
|
|
131
|
+
const header = await client.createPaymentHeader(
|
|
132
|
+
1000000, // 1 USDC
|
|
133
|
+
TEST_RECIPIENT,
|
|
134
|
+
"https://example.com/x402"
|
|
135
|
+
);
|
|
136
|
+
|
|
137
|
+
expect(header).toBeDefined();
|
|
138
|
+
expect(typeof header).toBe("string");
|
|
139
|
+
|
|
140
|
+
// Decode and verify header structure
|
|
141
|
+
const decoded = JSON.parse(Buffer.from(header, "base64").toString());
|
|
142
|
+
expect(decoded.x402Version).toBe(2);
|
|
143
|
+
expect(decoded.accepted.network).toBe("eip155:3338");
|
|
144
|
+
expect(decoded.accepted.asset).toBe("0xbbA60da06c2c5424f03f7434542280FCAd453d10");
|
|
145
|
+
expect(decoded.accepted.amount).toBe("1000000");
|
|
146
|
+
expect(decoded.payload.authorization.from).toBe(walletAddress);
|
|
147
|
+
// Authorization "to" is the settlement router, not the recipient
|
|
148
|
+
expect(decoded.payload.authorization.to).toBe("0xCD57f4596f70b18a0fd0c42daa4F3066d3adc8d4");
|
|
149
|
+
// Final recipient is in accepted.payTo
|
|
150
|
+
expect(decoded.accepted.payTo).toBe(TEST_RECIPIENT);
|
|
151
|
+
console.log("PEAQ Payment Header:", JSON.stringify(decoded, null, 2));
|
|
152
|
+
});
|
|
153
|
+
});
|
|
154
|
+
|
|
155
|
+
describe("PaymentClient on Base", () => {
|
|
156
|
+
let client: PaymentClient;
|
|
157
|
+
|
|
158
|
+
beforeAll(() => {
|
|
159
|
+
client = new PaymentClient(secureKey, walletAddress, {
|
|
160
|
+
network: "base"
|
|
161
|
+
});
|
|
162
|
+
});
|
|
163
|
+
|
|
164
|
+
it("should create client with correct network", () => {
|
|
165
|
+
expect(client.network.chainId).toBe(8453);
|
|
166
|
+
expect(client.network.name).toBe("Base Mainnet");
|
|
167
|
+
expect(client.caip2).toBe("eip155:8453");
|
|
168
|
+
});
|
|
169
|
+
|
|
170
|
+
it("should create payment header for Base", async () => {
|
|
171
|
+
const header = await client.createPaymentHeader(
|
|
172
|
+
500000, // 0.5 USDC
|
|
173
|
+
TEST_RECIPIENT,
|
|
174
|
+
"https://example.com/x402"
|
|
175
|
+
);
|
|
176
|
+
|
|
177
|
+
expect(header).toBeDefined();
|
|
178
|
+
|
|
179
|
+
const decoded = JSON.parse(Buffer.from(header, "base64").toString());
|
|
180
|
+
expect(decoded.x402Version).toBe(2);
|
|
181
|
+
expect(decoded.accepted.network).toBe("eip155:8453");
|
|
182
|
+
expect(decoded.accepted.asset).toBe("0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913");
|
|
183
|
+
expect(decoded.accepted.amount).toBe("500000");
|
|
184
|
+
expect(decoded.accepted.extra.name).toBe("USD Coin"); // Base USDC EIP-712 name
|
|
185
|
+
console.log("Base Payment Header:", JSON.stringify(decoded, null, 2));
|
|
186
|
+
});
|
|
187
|
+
|
|
188
|
+
it("should use correct EIP-712 domain for Base USDC", async () => {
|
|
189
|
+
const header = await client.createPaymentHeader(100000, TEST_RECIPIENT, "https://example.com/x402");
|
|
190
|
+
const decoded = JSON.parse(Buffer.from(header, "base64").toString());
|
|
191
|
+
|
|
192
|
+
// Base USDC uses "USD Coin" as the EIP-712 name
|
|
193
|
+
expect(decoded.accepted.extra.name).toBe("USD Coin");
|
|
194
|
+
expect(decoded.accepted.extra.version).toBe("2");
|
|
195
|
+
});
|
|
196
|
+
});
|
|
197
|
+
|
|
198
|
+
describe("PaymentClient on Avalanche", () => {
|
|
199
|
+
let client: PaymentClient;
|
|
200
|
+
|
|
201
|
+
beforeAll(() => {
|
|
202
|
+
client = new PaymentClient(secureKey, walletAddress, {
|
|
203
|
+
network: "avalanche"
|
|
204
|
+
});
|
|
205
|
+
});
|
|
206
|
+
|
|
207
|
+
it("should create client with correct network", () => {
|
|
208
|
+
expect(client.network.chainId).toBe(43114);
|
|
209
|
+
expect(client.network.name).toBe("Avalanche Mainnet");
|
|
210
|
+
expect(client.caip2).toBe("eip155:43114");
|
|
211
|
+
});
|
|
212
|
+
|
|
213
|
+
it("should create payment header for Avalanche", async () => {
|
|
214
|
+
const header = await client.createPaymentHeader(
|
|
215
|
+
2000000, // 2 USDC
|
|
216
|
+
TEST_RECIPIENT,
|
|
217
|
+
"https://example.com/x402"
|
|
218
|
+
);
|
|
219
|
+
|
|
220
|
+
expect(header).toBeDefined();
|
|
221
|
+
|
|
222
|
+
const decoded = JSON.parse(Buffer.from(header, "base64").toString());
|
|
223
|
+
expect(decoded.x402Version).toBe(2);
|
|
224
|
+
expect(decoded.accepted.network).toBe("eip155:43114");
|
|
225
|
+
expect(decoded.accepted.asset).toBe("0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E");
|
|
226
|
+
expect(decoded.accepted.amount).toBe("2000000");
|
|
227
|
+
console.log("Avalanche Payment Header:", JSON.stringify(decoded, null, 2));
|
|
228
|
+
});
|
|
229
|
+
});
|
|
230
|
+
|
|
231
|
+
describe("Network Selection by Chain ID", () => {
|
|
232
|
+
it("should create client for PEAQ by chain ID 3338", () => {
|
|
233
|
+
const client = new PaymentClient(secureKey, walletAddress, {
|
|
234
|
+
networkChainId: 3338
|
|
235
|
+
});
|
|
236
|
+
expect(client.network.name).toBe("PEAQ Mainnet");
|
|
237
|
+
});
|
|
238
|
+
|
|
239
|
+
it("should create client for Base by chain ID 8453", () => {
|
|
240
|
+
const client = new PaymentClient(secureKey, walletAddress, {
|
|
241
|
+
networkChainId: 8453
|
|
242
|
+
});
|
|
243
|
+
expect(client.network.name).toBe("Base Mainnet");
|
|
244
|
+
});
|
|
245
|
+
|
|
246
|
+
it("should create client for Avalanche by chain ID 43114", () => {
|
|
247
|
+
const client = new PaymentClient(secureKey, walletAddress, {
|
|
248
|
+
networkChainId: 43114
|
|
249
|
+
});
|
|
250
|
+
expect(client.network.name).toBe("Avalanche Mainnet");
|
|
251
|
+
});
|
|
252
|
+
});
|
|
253
|
+
|
|
254
|
+
describe("Per-Request Network Override", () => {
|
|
255
|
+
it("should allow network override in createPaymentHeader", async () => {
|
|
256
|
+
// Create client for PEAQ
|
|
257
|
+
const client = new PaymentClient(secureKey, walletAddress, {
|
|
258
|
+
network: "peaq"
|
|
259
|
+
});
|
|
260
|
+
expect(client.network.chainId).toBe(3338);
|
|
261
|
+
|
|
262
|
+
// But create payment for Base
|
|
263
|
+
const header = await client.createPaymentHeader(
|
|
264
|
+
100000,
|
|
265
|
+
TEST_RECIPIENT,
|
|
266
|
+
"https://example.com/x402",
|
|
267
|
+
"base" // Override to Base
|
|
268
|
+
);
|
|
269
|
+
|
|
270
|
+
const decoded = JSON.parse(Buffer.from(header, "base64").toString());
|
|
271
|
+
expect(decoded.accepted.network).toBe("eip155:8453"); // Should be Base
|
|
272
|
+
expect(decoded.accepted.asset).toBe("0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"); // Base USDC
|
|
273
|
+
});
|
|
274
|
+
|
|
275
|
+
it("should allow chain ID override in createPaymentHeader", async () => {
|
|
276
|
+
const client = new PaymentClient(secureKey, walletAddress, {
|
|
277
|
+
network: "peaq"
|
|
278
|
+
});
|
|
279
|
+
|
|
280
|
+
// Override by chain ID
|
|
281
|
+
const header = await client.createPaymentHeader(
|
|
282
|
+
100000,
|
|
283
|
+
TEST_RECIPIENT,
|
|
284
|
+
"https://example.com/x402",
|
|
285
|
+
43114 // Override to Avalanche by chain ID
|
|
286
|
+
);
|
|
287
|
+
|
|
288
|
+
const decoded = JSON.parse(Buffer.from(header, "base64").toString());
|
|
289
|
+
expect(decoded.accepted.network).toBe("eip155:43114"); // Should be Avalanche
|
|
290
|
+
});
|
|
291
|
+
});
|
|
292
|
+
|
|
293
|
+
describe("All Networks Summary", () => {
|
|
294
|
+
it("should print all network configurations", () => {
|
|
295
|
+
console.log("\n=== All Supported Networks ===\n");
|
|
296
|
+
|
|
297
|
+
for (const [name, config] of Object.entries(NETWORKS)) {
|
|
298
|
+
console.log(`${name.toUpperCase()}:`);
|
|
299
|
+
console.log(` Chain ID: ${config.chainId}`);
|
|
300
|
+
console.log(` CAIP-2: ${config.caip2}`);
|
|
301
|
+
console.log(` USDC: ${config.usdcContract}`);
|
|
302
|
+
console.log(` SettlementRouter: ${config.settlementRouter}`);
|
|
303
|
+
console.log(` TransferHook: ${config.transferHook}`);
|
|
304
|
+
console.log(` EIP-712: ${config.eip712.name} v${config.eip712.version}`);
|
|
305
|
+
console.log("");
|
|
306
|
+
}
|
|
307
|
+
});
|
|
308
|
+
});
|
|
309
|
+
});
|
|
@@ -0,0 +1,296 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Multi-Network Support Tests (v2.3.0)
|
|
3
|
+
*
|
|
4
|
+
* Tests for multi-network payment support including:
|
|
5
|
+
* - Network configuration lookup
|
|
6
|
+
* - Default network resolution
|
|
7
|
+
* - PaymentClient network configuration
|
|
8
|
+
* - SDKConfigBuilder network methods
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import { describe, it, expect, beforeEach, afterEach, vi } from "vitest";
|
|
12
|
+
import {
|
|
13
|
+
getNetwork,
|
|
14
|
+
getDefaultNetwork,
|
|
15
|
+
isNetworkSupported,
|
|
16
|
+
getSupportedNetworks,
|
|
17
|
+
NETWORKS,
|
|
18
|
+
CHAIN_ID_TO_NETWORK,
|
|
19
|
+
CAIP2_TO_NETWORK,
|
|
20
|
+
setNetworkConfigUrl,
|
|
21
|
+
fetchNetworkConfigs
|
|
22
|
+
} from "../src/payments/networks";
|
|
23
|
+
import { SDKConfigBuilder } from "../src/types/config";
|
|
24
|
+
|
|
25
|
+
// Mock fetch globally for all tests
|
|
26
|
+
const mockNetworkData = {
|
|
27
|
+
networks: {
|
|
28
|
+
peaq: {
|
|
29
|
+
chainId: 3338,
|
|
30
|
+
name: "PEAQ Mainnet",
|
|
31
|
+
caip2: "eip155:3338",
|
|
32
|
+
rpcUrl: "https://peaq.network/rpc",
|
|
33
|
+
usdcContract: "0xbbA60da06c2c5424f03f7434542280FCAd453d10",
|
|
34
|
+
settlementRouter: "0x0000000000000000000000000000000000000001",
|
|
35
|
+
transferHook: "0x0000000000000000000000000000000000000002",
|
|
36
|
+
eip712: {
|
|
37
|
+
name: "USDC",
|
|
38
|
+
version: "2"
|
|
39
|
+
}
|
|
40
|
+
},
|
|
41
|
+
base: {
|
|
42
|
+
chainId: 8453,
|
|
43
|
+
name: "Base Mainnet",
|
|
44
|
+
caip2: "eip155:8453",
|
|
45
|
+
rpcUrl: "https://mainnet.base.org",
|
|
46
|
+
usdcContract: "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
|
|
47
|
+
settlementRouter: "0x0000000000000000000000000000000000000003",
|
|
48
|
+
transferHook: "0x0000000000000000000000000000000000000004",
|
|
49
|
+
eip712: {
|
|
50
|
+
name: "USD Coin",
|
|
51
|
+
version: "2"
|
|
52
|
+
}
|
|
53
|
+
},
|
|
54
|
+
avalanche: {
|
|
55
|
+
chainId: 43114,
|
|
56
|
+
name: "Avalanche Mainnet",
|
|
57
|
+
caip2: "eip155:43114",
|
|
58
|
+
rpcUrl: "https://api.avax.network/ext/bc/C/rpc",
|
|
59
|
+
usdcContract: "0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E",
|
|
60
|
+
settlementRouter: "0x0000000000000000000000000000000000000005",
|
|
61
|
+
transferHook: "0x0000000000000000000000000000000000000006",
|
|
62
|
+
eip712: {
|
|
63
|
+
name: "USD Coin",
|
|
64
|
+
version: "2"
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
describe("Multi-Network Support", () => {
|
|
71
|
+
beforeEach(async () => {
|
|
72
|
+
// Mock global fetch
|
|
73
|
+
global.fetch = vi.fn(() =>
|
|
74
|
+
Promise.resolve({
|
|
75
|
+
ok: true,
|
|
76
|
+
json: () => Promise.resolve(mockNetworkData)
|
|
77
|
+
} as Response)
|
|
78
|
+
);
|
|
79
|
+
|
|
80
|
+
// Initialize networks before each test
|
|
81
|
+
setNetworkConfigUrl("https://backend.test.com/ws");
|
|
82
|
+
await fetchNetworkConfigs();
|
|
83
|
+
});
|
|
84
|
+
|
|
85
|
+
afterEach(() => {
|
|
86
|
+
vi.restoreAllMocks();
|
|
87
|
+
});
|
|
88
|
+
|
|
89
|
+
describe("Network Configuration", () => {
|
|
90
|
+
it("should have PEAQ network configured", () => {
|
|
91
|
+
expect(NETWORKS.peaq).toBeDefined();
|
|
92
|
+
expect(NETWORKS.peaq.chainId).toBe(3338);
|
|
93
|
+
expect(NETWORKS.peaq.caip2).toBe("eip155:3338");
|
|
94
|
+
expect(NETWORKS.peaq.usdcContract).toBe("0xbbA60da06c2c5424f03f7434542280FCAd453d10");
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
it("should have Base Mainnet configured", () => {
|
|
98
|
+
expect(NETWORKS.base).toBeDefined();
|
|
99
|
+
expect(NETWORKS.base.chainId).toBe(8453);
|
|
100
|
+
expect(NETWORKS.base.caip2).toBe("eip155:8453");
|
|
101
|
+
expect(NETWORKS.base.usdcContract).toBe("0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913");
|
|
102
|
+
});
|
|
103
|
+
|
|
104
|
+
it("should have Avalanche Mainnet configured", () => {
|
|
105
|
+
expect(NETWORKS.avalanche).toBeDefined();
|
|
106
|
+
expect(NETWORKS.avalanche.chainId).toBe(43114);
|
|
107
|
+
expect(NETWORKS.avalanche.caip2).toBe("eip155:43114");
|
|
108
|
+
expect(NETWORKS.avalanche.usdcContract).toBe("0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E");
|
|
109
|
+
});
|
|
110
|
+
|
|
111
|
+
it("should have chain ID to network mapping", () => {
|
|
112
|
+
expect(CHAIN_ID_TO_NETWORK[3338]).toBe("peaq");
|
|
113
|
+
expect(CHAIN_ID_TO_NETWORK[8453]).toBe("base");
|
|
114
|
+
expect(CHAIN_ID_TO_NETWORK[43114]).toBe("avalanche");
|
|
115
|
+
});
|
|
116
|
+
|
|
117
|
+
it("should have CAIP-2 to network mapping", () => {
|
|
118
|
+
expect(CAIP2_TO_NETWORK["eip155:3338"]).toBe("peaq");
|
|
119
|
+
expect(CAIP2_TO_NETWORK["eip155:8453"]).toBe("base");
|
|
120
|
+
expect(CAIP2_TO_NETWORK["eip155:43114"]).toBe("avalanche");
|
|
121
|
+
});
|
|
122
|
+
});
|
|
123
|
+
|
|
124
|
+
describe("getNetwork()", () => {
|
|
125
|
+
it("should get network by name", () => {
|
|
126
|
+
const peaq = getNetwork("peaq");
|
|
127
|
+
expect(peaq.chainId).toBe(3338);
|
|
128
|
+
|
|
129
|
+
const base = getNetwork("base");
|
|
130
|
+
expect(base.chainId).toBe(8453);
|
|
131
|
+
|
|
132
|
+
const avalanche = getNetwork("avalanche");
|
|
133
|
+
expect(avalanche.chainId).toBe(43114);
|
|
134
|
+
});
|
|
135
|
+
|
|
136
|
+
it("should get network by chain ID", () => {
|
|
137
|
+
const peaq = getNetwork(3338);
|
|
138
|
+
expect(peaq.name).toBe("PEAQ Mainnet");
|
|
139
|
+
|
|
140
|
+
const base = getNetwork(8453);
|
|
141
|
+
expect(base.name).toBe("Base Mainnet");
|
|
142
|
+
|
|
143
|
+
const avalanche = getNetwork(43114);
|
|
144
|
+
expect(avalanche.name).toBe("Avalanche Mainnet");
|
|
145
|
+
});
|
|
146
|
+
|
|
147
|
+
it("should get network by CAIP-2 identifier", () => {
|
|
148
|
+
const peaq = getNetwork("eip155:3338");
|
|
149
|
+
expect(peaq.name).toBe("PEAQ Mainnet");
|
|
150
|
+
|
|
151
|
+
const base = getNetwork("eip155:8453");
|
|
152
|
+
expect(base.name).toBe("Base Mainnet");
|
|
153
|
+
|
|
154
|
+
const avalanche = getNetwork("eip155:43114");
|
|
155
|
+
expect(avalanche.name).toBe("Avalanche Mainnet");
|
|
156
|
+
});
|
|
157
|
+
|
|
158
|
+
it("should throw for unknown network name", () => {
|
|
159
|
+
expect(() => getNetwork("unknown")).toThrow("Unknown network: unknown");
|
|
160
|
+
});
|
|
161
|
+
|
|
162
|
+
it("should throw for unknown chain ID", () => {
|
|
163
|
+
expect(() => getNetwork(99999)).toThrow("Unknown chain ID: 99999");
|
|
164
|
+
});
|
|
165
|
+
|
|
166
|
+
it("should throw for unknown CAIP-2", () => {
|
|
167
|
+
expect(() => getNetwork("eip155:99999")).toThrow("Unknown CAIP-2 network: eip155:99999");
|
|
168
|
+
});
|
|
169
|
+
|
|
170
|
+
it("should be case-insensitive for network names", () => {
|
|
171
|
+
const peaqLower = getNetwork("peaq");
|
|
172
|
+
const peaqUpper = getNetwork("PEAQ");
|
|
173
|
+
expect(peaqLower.chainId).toBe(peaqUpper.chainId);
|
|
174
|
+
});
|
|
175
|
+
});
|
|
176
|
+
|
|
177
|
+
describe("getDefaultNetwork()", () => {
|
|
178
|
+
const originalEnv = process.env.TENEO_NETWORK;
|
|
179
|
+
|
|
180
|
+
afterEach(() => {
|
|
181
|
+
if (originalEnv === undefined) {
|
|
182
|
+
delete process.env.TENEO_NETWORK;
|
|
183
|
+
} else {
|
|
184
|
+
process.env.TENEO_NETWORK = originalEnv;
|
|
185
|
+
}
|
|
186
|
+
});
|
|
187
|
+
|
|
188
|
+
it("should return PEAQ as default when no env var set", () => {
|
|
189
|
+
delete process.env.TENEO_NETWORK;
|
|
190
|
+
const network = getDefaultNetwork();
|
|
191
|
+
expect(network.name).toBe("PEAQ Mainnet");
|
|
192
|
+
});
|
|
193
|
+
|
|
194
|
+
it("should use TENEO_NETWORK env var when set", () => {
|
|
195
|
+
process.env.TENEO_NETWORK = "base";
|
|
196
|
+
const network = getDefaultNetwork();
|
|
197
|
+
expect(network.name).toBe("Base Mainnet");
|
|
198
|
+
});
|
|
199
|
+
|
|
200
|
+
it("should fall back to PEAQ when env var is invalid", () => {
|
|
201
|
+
process.env.TENEO_NETWORK = "invalid-network";
|
|
202
|
+
// Mock console.warn to avoid test output noise
|
|
203
|
+
const warnSpy = vi.spyOn(console, "warn").mockImplementation(() => {});
|
|
204
|
+
const network = getDefaultNetwork();
|
|
205
|
+
expect(network.name).toBe("PEAQ Mainnet");
|
|
206
|
+
expect(warnSpy).toHaveBeenCalled();
|
|
207
|
+
warnSpy.mockRestore();
|
|
208
|
+
});
|
|
209
|
+
});
|
|
210
|
+
|
|
211
|
+
describe("isNetworkSupported()", () => {
|
|
212
|
+
it("should return true for supported networks by name", () => {
|
|
213
|
+
expect(isNetworkSupported("peaq")).toBe(true);
|
|
214
|
+
expect(isNetworkSupported("base")).toBe(true);
|
|
215
|
+
expect(isNetworkSupported("avalanche")).toBe(true);
|
|
216
|
+
});
|
|
217
|
+
|
|
218
|
+
it("should return true for supported networks by chain ID", () => {
|
|
219
|
+
expect(isNetworkSupported(3338)).toBe(true);
|
|
220
|
+
expect(isNetworkSupported(8453)).toBe(true);
|
|
221
|
+
expect(isNetworkSupported(43114)).toBe(true);
|
|
222
|
+
});
|
|
223
|
+
|
|
224
|
+
it("should return true for supported networks by CAIP-2", () => {
|
|
225
|
+
expect(isNetworkSupported("eip155:3338")).toBe(true);
|
|
226
|
+
expect(isNetworkSupported("eip155:8453")).toBe(true);
|
|
227
|
+
expect(isNetworkSupported("eip155:43114")).toBe(true);
|
|
228
|
+
});
|
|
229
|
+
|
|
230
|
+
it("should return false for unsupported networks", () => {
|
|
231
|
+
expect(isNetworkSupported("unknown")).toBe(false);
|
|
232
|
+
expect(isNetworkSupported(99999)).toBe(false);
|
|
233
|
+
expect(isNetworkSupported("eip155:99999")).toBe(false);
|
|
234
|
+
});
|
|
235
|
+
});
|
|
236
|
+
|
|
237
|
+
describe("getSupportedNetworks()", () => {
|
|
238
|
+
it("should return all supported network names", () => {
|
|
239
|
+
const networks = getSupportedNetworks();
|
|
240
|
+
expect(networks).toContain("peaq");
|
|
241
|
+
expect(networks).toContain("base");
|
|
242
|
+
expect(networks).toContain("avalanche");
|
|
243
|
+
});
|
|
244
|
+
});
|
|
245
|
+
|
|
246
|
+
describe("SDKConfigBuilder Network Methods", () => {
|
|
247
|
+
it("should support withNetwork() method", () => {
|
|
248
|
+
const config = new SDKConfigBuilder()
|
|
249
|
+
.withWebSocketUrl("wss://example.com/ws")
|
|
250
|
+
.withNetwork("base")
|
|
251
|
+
.build();
|
|
252
|
+
|
|
253
|
+
expect(config.network).toBe("base");
|
|
254
|
+
});
|
|
255
|
+
|
|
256
|
+
it("should support withNetworkChainId() method", () => {
|
|
257
|
+
const config = new SDKConfigBuilder()
|
|
258
|
+
.withWebSocketUrl("wss://example.com/ws")
|
|
259
|
+
.withNetworkChainId(8453)
|
|
260
|
+
.build();
|
|
261
|
+
|
|
262
|
+
expect(config.networkChainId).toBe(8453);
|
|
263
|
+
});
|
|
264
|
+
|
|
265
|
+
it("should support both network and networkChainId together", () => {
|
|
266
|
+
const config = new SDKConfigBuilder()
|
|
267
|
+
.withWebSocketUrl("wss://example.com/ws")
|
|
268
|
+
.withNetwork("base")
|
|
269
|
+
.withNetworkChainId(43114)
|
|
270
|
+
.build();
|
|
271
|
+
|
|
272
|
+
expect(config.network).toBe("base");
|
|
273
|
+
expect(config.networkChainId).toBe(43114);
|
|
274
|
+
});
|
|
275
|
+
});
|
|
276
|
+
|
|
277
|
+
describe("Network EIP-712 Parameters", () => {
|
|
278
|
+
it("should have correct EIP-712 name for PEAQ USDC", () => {
|
|
279
|
+
const peaq = getNetwork("peaq");
|
|
280
|
+
expect(peaq.eip712.name).toBe("USDC");
|
|
281
|
+
expect(peaq.eip712.version).toBe("2");
|
|
282
|
+
});
|
|
283
|
+
|
|
284
|
+
it("should have correct EIP-712 name for Base USDC", () => {
|
|
285
|
+
const base = getNetwork("base");
|
|
286
|
+
expect(base.eip712.name).toBe("USD Coin");
|
|
287
|
+
expect(base.eip712.version).toBe("2");
|
|
288
|
+
});
|
|
289
|
+
|
|
290
|
+
it("should have correct EIP-712 name for Avalanche USDC", () => {
|
|
291
|
+
const avalanche = getNetwork("avalanche");
|
|
292
|
+
expect(avalanche.eip712.name).toBe("USD Coin");
|
|
293
|
+
expect(avalanche.eip712.version).toBe("2");
|
|
294
|
+
});
|
|
295
|
+
});
|
|
296
|
+
});
|
|
@@ -48,7 +48,8 @@ async function testPaymentFlow() {
|
|
|
48
48
|
.withLogging("info")
|
|
49
49
|
.build();
|
|
50
50
|
|
|
51
|
-
|
|
51
|
+
// Increase max message size to 10MB to handle large payloads
|
|
52
|
+
const sdk = new TeneoSDK({ ...config, maxMessageSize: 10 * 1024 * 1024 });
|
|
52
53
|
|
|
53
54
|
// Set up event listeners
|
|
54
55
|
sdk.on("connection:open", () => console.log("✓ Connected"));
|
|
@@ -99,7 +100,7 @@ async function testPaymentFlow() {
|
|
|
99
100
|
// Subscribe to test room
|
|
100
101
|
console.log("Subscribing to room:", TEST_ROOM);
|
|
101
102
|
try {
|
|
102
|
-
await sdk.
|
|
103
|
+
await sdk.subscribeToPublicRoom(TEST_ROOM);
|
|
103
104
|
console.log("Subscribed!\n");
|
|
104
105
|
} catch {
|
|
105
106
|
console.log("Room subscription skipped (private room)\n");
|
|
@@ -109,10 +110,11 @@ async function testPaymentFlow() {
|
|
|
109
110
|
await sleep(1000);
|
|
110
111
|
|
|
111
112
|
// Send test message - this will trigger quote-approve flow
|
|
113
|
+
// Use direct @agent command since AI coordinator is disabled
|
|
112
114
|
console.log("\n=== Sending Test Request ===");
|
|
113
|
-
console.log('Request: "
|
|
115
|
+
console.log('Request: "@x-agent-enterprise-v2 user @elonmusk"\n');
|
|
114
116
|
|
|
115
|
-
const response = await sdk.sendMessage("
|
|
117
|
+
const response = await sdk.sendMessage("@x-agent-enterprise-v2 user @elonmusk", {
|
|
116
118
|
room: TEST_ROOM,
|
|
117
119
|
waitForResponse: true,
|
|
118
120
|
timeout: 120000 // 2 minutes
|