@teneo-protocol/sdk 2.0.0 → 2.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.eslintrc.json +11 -2
- package/.github/CODEOWNERS +2 -0
- package/.github/ISSUE_TEMPLATE/01-bug.yml +85 -0
- package/.github/ISSUE_TEMPLATE/config.yml +8 -0
- package/.github/ISSUE_TEMPLATE/feature_request.md +22 -0
- package/.github/workflows/claude-code-review.yml +8 -3
- package/.github/workflows/claude-reviewer.yml +6 -4
- package/.github/workflows/publish-npm.yml +1 -0
- package/.github/workflows/push-to-main.yml +1 -1
- package/.github/workflows/top-issue.yml +102 -0
- package/CHANGELOG.md +69 -0
- package/CONCEPTS.md +747 -0
- package/README.md +178 -8
- package/dist/constants.js +8 -8
- package/dist/constants.js.map +1 -1
- package/dist/core/websocket-client.d.ts +15 -3
- package/dist/core/websocket-client.d.ts.map +1 -1
- package/dist/core/websocket-client.js +52 -13
- package/dist/core/websocket-client.js.map +1 -1
- package/dist/formatters/response-formatter.js +4 -0
- package/dist/formatters/response-formatter.js.map +1 -1
- package/dist/handlers/message-handler-registry.js +2 -1
- package/dist/handlers/message-handler-registry.js.map +1 -1
- package/dist/handlers/message-handlers/agent-details-response-handler.d.ts +1666 -0
- package/dist/handlers/message-handlers/agent-details-response-handler.d.ts.map +1 -0
- package/dist/handlers/message-handlers/agent-details-response-handler.js +38 -0
- package/dist/handlers/message-handlers/agent-details-response-handler.js.map +1 -0
- package/dist/handlers/message-handlers/agent-room-operation-response-handler.d.ts.map +1 -1
- package/dist/handlers/message-handlers/agent-room-operation-response-handler.js +2 -5
- package/dist/handlers/message-handlers/agent-room-operation-response-handler.js.map +1 -1
- package/dist/handlers/message-handlers/agent-selected-handler.js +2 -5
- package/dist/handlers/message-handlers/agent-selected-handler.js.map +1 -1
- package/dist/handlers/message-handlers/agent-status-update-handler.d.ts +783 -0
- 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 -5
- package/dist/handlers/message-handlers/agent-status-update-handler.js.map +1 -1
- package/dist/handlers/message-handlers/agents-list-handler.js +2 -5
- package/dist/handlers/message-handlers/agents-list-handler.js.map +1 -1
- package/dist/handlers/message-handlers/all-agents-response-handler.d.ts +439 -0
- package/dist/handlers/message-handlers/all-agents-response-handler.d.ts.map +1 -0
- package/dist/handlers/message-handlers/all-agents-response-handler.js +36 -0
- package/dist/handlers/message-handlers/all-agents-response-handler.js.map +1 -0
- package/dist/handlers/message-handlers/auth-error-handler.js +2 -5
- package/dist/handlers/message-handlers/auth-error-handler.js.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 -5
- package/dist/handlers/message-handlers/auth-message-handler.js.map +1 -1
- package/dist/handlers/message-handlers/auth-required-handler.js +2 -5
- package/dist/handlers/message-handlers/auth-required-handler.js.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 -5
- package/dist/handlers/message-handlers/auth-success-handler.js.map +1 -1
- package/dist/handlers/message-handlers/base-handler.d.ts +4 -4
- package/dist/handlers/message-handlers/base-handler.d.ts.map +1 -1
- package/dist/handlers/message-handlers/base-handler.js +3 -1
- package/dist/handlers/message-handlers/base-handler.js.map +1 -1
- package/dist/handlers/message-handlers/challenge-handler.js +3 -2
- package/dist/handlers/message-handlers/challenge-handler.js.map +1 -1
- package/dist/handlers/message-handlers/error-message-handler.js +2 -5
- package/dist/handlers/message-handlers/error-message-handler.js.map +1 -1
- package/dist/handlers/message-handlers/index.d.ts +6 -0
- package/dist/handlers/message-handlers/index.d.ts.map +1 -1
- package/dist/handlers/message-handlers/index.js +33 -1
- package/dist/handlers/message-handlers/index.js.map +1 -1
- package/dist/handlers/message-handlers/list-available-agents-handler.d.ts +783 -0
- package/dist/handlers/message-handlers/list-available-agents-handler.d.ts.map +1 -1
- package/dist/handlers/message-handlers/list-available-agents-handler.js +2 -5
- package/dist/handlers/message-handlers/list-available-agents-handler.js.map +1 -1
- package/dist/handlers/message-handlers/list-room-agents-handler.d.ts +783 -0
- 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 -5
- package/dist/handlers/message-handlers/list-room-agents-handler.js.map +1 -1
- package/dist/handlers/message-handlers/list-rooms-response-handler.d.ts +2 -199
- package/dist/handlers/message-handlers/list-rooms-response-handler.d.ts.map +1 -1
- package/dist/handlers/message-handlers/list-rooms-response-handler.js +4 -6
- package/dist/handlers/message-handlers/list-rooms-response-handler.js.map +1 -1
- package/dist/handlers/message-handlers/ping-pong-handler.js +4 -10
- package/dist/handlers/message-handlers/ping-pong-handler.js.map +1 -1
- package/dist/handlers/message-handlers/rate-limit-notification-handler.d.ts +94 -0
- package/dist/handlers/message-handlers/rate-limit-notification-handler.d.ts.map +1 -0
- package/dist/handlers/message-handlers/rate-limit-notification-handler.js +35 -0
- package/dist/handlers/message-handlers/rate-limit-notification-handler.js.map +1 -0
- package/dist/handlers/message-handlers/regular-message-handler.d.ts.map +1 -1
- package/dist/handlers/message-handlers/regular-message-handler.js +4 -6
- package/dist/handlers/message-handlers/regular-message-handler.js.map +1 -1
- package/dist/handlers/message-handlers/room-operation-response-handler.d.ts.map +1 -1
- package/dist/handlers/message-handlers/room-operation-response-handler.js +2 -5
- package/dist/handlers/message-handlers/room-operation-response-handler.js.map +1 -1
- package/dist/handlers/message-handlers/subscribe-response-handler.d.ts.map +1 -1
- package/dist/handlers/message-handlers/subscribe-response-handler.js +4 -6
- package/dist/handlers/message-handlers/subscribe-response-handler.js.map +1 -1
- package/dist/handlers/message-handlers/task-quote-handler.d.ts +14 -0
- package/dist/handlers/message-handlers/task-quote-handler.d.ts.map +1 -0
- package/dist/handlers/message-handlers/task-quote-handler.js +29 -0
- package/dist/handlers/message-handlers/task-quote-handler.js.map +1 -0
- package/dist/handlers/message-handlers/task-response-handler.js +2 -5
- package/dist/handlers/message-handlers/task-response-handler.js.map +1 -1
- package/dist/handlers/message-handlers/types.d.ts +21 -9
- package/dist/handlers/message-handlers/types.d.ts.map +1 -1
- package/dist/handlers/message-handlers/unsubscribe-response-handler.d.ts.map +1 -1
- package/dist/handlers/message-handlers/unsubscribe-response-handler.js +4 -6
- package/dist/handlers/message-handlers/unsubscribe-response-handler.js.map +1 -1
- package/dist/handlers/message-handlers/user-authenticated-handler.d.ts +40 -0
- package/dist/handlers/message-handlers/user-authenticated-handler.d.ts.map +1 -0
- package/dist/handlers/message-handlers/user-authenticated-handler.js +28 -0
- package/dist/handlers/message-handlers/user-authenticated-handler.js.map +1 -0
- package/dist/handlers/message-handlers/user-count-handler.d.ts +49 -0
- package/dist/handlers/message-handlers/user-count-handler.d.ts.map +1 -0
- package/dist/handlers/message-handlers/user-count-handler.js +31 -0
- package/dist/handlers/message-handlers/user-count-handler.js.map +1 -0
- package/dist/handlers/webhook-handler.d.ts +1 -1
- package/dist/handlers/webhook-handler.d.ts.map +1 -1
- package/dist/handlers/webhook-handler.js +14 -5
- package/dist/handlers/webhook-handler.js.map +1 -1
- package/dist/index.d.ts +6 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +19 -2
- package/dist/index.js.map +1 -1
- package/dist/managers/admin-manager.d.ts +116 -0
- package/dist/managers/admin-manager.d.ts.map +1 -0
- package/dist/managers/admin-manager.js +169 -0
- package/dist/managers/admin-manager.js.map +1 -0
- package/dist/managers/agent-registry.d.ts +52 -1
- package/dist/managers/agent-registry.d.ts.map +1 -1
- package/dist/managers/agent-registry.js +145 -6
- package/dist/managers/agent-registry.js.map +1 -1
- package/dist/managers/agent-room-manager.d.ts +1 -7
- package/dist/managers/agent-room-manager.d.ts.map +1 -1
- package/dist/managers/agent-room-manager.js +83 -36
- package/dist/managers/agent-room-manager.js.map +1 -1
- package/dist/managers/connection-manager.js +2 -0
- package/dist/managers/connection-manager.js.map +1 -1
- package/dist/managers/index.d.ts +2 -1
- package/dist/managers/index.d.ts.map +1 -1
- package/dist/managers/index.js +3 -1
- package/dist/managers/index.js.map +1 -1
- package/dist/managers/message-router.d.ts +56 -5
- package/dist/managers/message-router.d.ts.map +1 -1
- package/dist/managers/message-router.js +155 -8
- package/dist/managers/message-router.js.map +1 -1
- package/dist/managers/room-management-manager.d.ts.map +1 -1
- package/dist/managers/room-management-manager.js +9 -7
- package/dist/managers/room-management-manager.js.map +1 -1
- package/dist/managers/room-manager.d.ts +7 -5
- package/dist/managers/room-manager.d.ts.map +1 -1
- package/dist/managers/room-manager.js +14 -10
- package/dist/managers/room-manager.js.map +1 -1
- package/dist/payments/index.d.ts +5 -0
- package/dist/payments/index.d.ts.map +1 -0
- package/dist/payments/index.js +21 -0
- package/dist/payments/index.js.map +1 -0
- package/dist/payments/payment-client.d.ts +74 -0
- package/dist/payments/payment-client.d.ts.map +1 -0
- package/dist/payments/payment-client.js +207 -0
- package/dist/payments/payment-client.js.map +1 -0
- package/dist/teneo-sdk.d.ts +135 -21
- package/dist/teneo-sdk.d.ts.map +1 -1
- package/dist/teneo-sdk.js +268 -26
- package/dist/teneo-sdk.js.map +1 -1
- package/dist/types/categories.d.ts +22 -0
- package/dist/types/categories.d.ts.map +1 -0
- package/dist/types/categories.js +40 -0
- package/dist/types/categories.js.map +1 -0
- package/dist/types/config.d.ts +79 -8
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/config.js +62 -5
- package/dist/types/config.js.map +1 -1
- package/dist/types/error-codes.d.ts +8 -0
- package/dist/types/error-codes.d.ts.map +1 -1
- package/dist/types/error-codes.js +9 -0
- package/dist/types/error-codes.js.map +1 -1
- package/dist/types/events.d.ts +44 -0
- package/dist/types/events.d.ts.map +1 -1
- package/dist/types/events.js +19 -1
- package/dist/types/events.js.map +1 -1
- package/dist/types/index.d.ts +3 -2
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +33 -3
- package/dist/types/index.js.map +1 -1
- package/dist/types/messages.d.ts +11219 -423
- package/dist/types/messages.d.ts.map +1 -1
- package/dist/types/messages.js +249 -7
- package/dist/types/messages.js.map +1 -1
- package/dist/utils/bounded-queue.d.ts.map +1 -1
- package/dist/utils/bounded-queue.js +5 -2
- package/dist/utils/bounded-queue.js.map +1 -1
- package/dist/utils/circuit-breaker.js +11 -4
- package/dist/utils/circuit-breaker.js.map +1 -1
- package/dist/utils/deduplication-cache.js +3 -1
- package/dist/utils/deduplication-cache.js.map +1 -1
- package/dist/utils/event-waiter.d.ts +3 -3
- package/dist/utils/event-waiter.d.ts.map +1 -1
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +4 -1
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/pricing-resolver.d.ts +26 -0
- package/dist/utils/pricing-resolver.d.ts.map +1 -0
- package/dist/utils/pricing-resolver.js +85 -0
- package/dist/utils/pricing-resolver.js.map +1 -0
- package/dist/utils/rate-limiter.d.ts.map +1 -1
- package/dist/utils/rate-limiter.js +6 -0
- package/dist/utils/rate-limiter.js.map +1 -1
- package/dist/utils/retry-policy.js +1 -0
- package/dist/utils/retry-policy.js.map +1 -1
- package/dist/utils/secure-private-key.js +3 -1
- package/dist/utils/secure-private-key.js.map +1 -1
- package/dist/utils/signature-verifier.d.ts.map +1 -1
- package/dist/utils/signature-verifier.js +3 -1
- package/dist/utils/signature-verifier.js.map +1 -1
- package/examples/.env.example +1 -1
- package/examples/agent-room-management-example.ts +10 -9
- package/examples/basic-usage.ts +3 -4
- package/examples/claude-agent-x-follower/.env.example +1 -1
- package/examples/claude-agent-x-follower/QUICKSTART.md +2 -2
- package/examples/claude-agent-x-follower/README.md +2 -2
- package/examples/claude-agent-x-follower/index.ts +120 -96
- package/examples/n8n-teneo/.env.example +1 -1
- package/examples/n8n-teneo/README.md +1 -1
- package/examples/n8n-teneo/index.ts +54 -44
- package/examples/nestjs-dashboard/.env.example +11 -0
- package/examples/nestjs-dashboard/README.md +297 -0
- package/examples/nestjs-dashboard/nest-cli.json +10 -0
- package/examples/nestjs-dashboard/package.json +44 -0
- package/examples/nestjs-dashboard/pnpm-lock.yaml +3079 -0
- package/examples/nestjs-dashboard/src/app.controller.ts +24 -0
- package/examples/nestjs-dashboard/src/app.module.ts +15 -0
- package/examples/nestjs-dashboard/src/main.ts +32 -0
- package/examples/nestjs-dashboard/src/public/dashboard.html +1144 -0
- package/examples/nestjs-dashboard/src/teneo/agents.controller.ts +54 -0
- package/examples/nestjs-dashboard/src/teneo/events.controller.ts +65 -0
- package/examples/nestjs-dashboard/src/teneo/messages.controller.ts +47 -0
- package/examples/nestjs-dashboard/src/teneo/rooms.controller.ts +258 -0
- package/examples/nestjs-dashboard/src/teneo/teneo.module.ts +13 -0
- package/examples/nestjs-dashboard/src/teneo/teneo.service.ts +484 -0
- package/examples/nestjs-dashboard/tsconfig.json +22 -0
- package/examples/openai-teneo/.env.example +1 -1
- package/examples/openai-teneo/README.md +2 -2
- package/examples/openai-teneo/index.ts +82 -71
- package/examples/production-dashboard/.env.example +1 -1
- package/examples/production-dashboard/README.md +1 -1
- package/examples/production-dashboard/server.ts +2 -2
- package/examples/room-management-example.ts +5 -8
- package/examples/usage/.env.example +1 -1
- package/examples/usage/01-connect.ts +3 -4
- package/examples/usage/02-list-agents.ts +2 -3
- package/examples/usage/03-pick-agent.ts +2 -3
- package/examples/usage/04-find-by-capability.ts +2 -3
- package/examples/usage/05-webhook-example.ts +2 -3
- package/examples/usage/06-simple-api-server.ts +2 -3
- package/examples/usage/07-event-listener.ts +2 -3
- package/examples/webhook-integration.ts +1 -1
- package/examples/x-influencer-battle-server.ts +2 -2
- package/package.json +4 -1
- package/src/core/websocket-client.test.ts +8 -3
- package/src/core/websocket-client.ts +36 -6
- package/src/formatters/response-formatter.test.ts +2 -0
- package/src/formatters/response-formatter.ts +3 -3
- package/src/handlers/message-handlers/agent-details-response-handler.ts +42 -0
- package/src/handlers/message-handlers/agent-room-operation-response-handler.ts +2 -8
- package/src/handlers/message-handlers/agent-status-update-handler.ts +3 -9
- package/src/handlers/message-handlers/all-agents-response-handler.ts +39 -0
- package/src/handlers/message-handlers/auth-message-handler.ts +5 -0
- package/src/handlers/message-handlers/auth-success-handler.ts +6 -1
- package/src/handlers/message-handlers/base-handler.ts +20 -7
- package/src/handlers/message-handlers/index.ts +34 -0
- package/src/handlers/message-handlers/list-room-agents-handler.ts +2 -5
- package/src/handlers/message-handlers/list-rooms-response-handler.ts +4 -2
- package/src/handlers/message-handlers/rate-limit-notification-handler.ts +45 -0
- package/src/handlers/message-handlers/regular-message-handler.ts +3 -2
- package/src/handlers/message-handlers/room-operation-response-handler.ts +3 -6
- package/src/handlers/message-handlers/subscribe-response-handler.ts +12 -2
- package/src/handlers/message-handlers/task-quote-handler.ts +31 -0
- package/src/handlers/message-handlers/types.ts +37 -9
- package/src/handlers/message-handlers/unsubscribe-response-handler.ts +12 -2
- package/src/handlers/message-handlers/user-authenticated-handler.ts +31 -0
- package/src/handlers/message-handlers/user-count-handler.ts +34 -0
- package/src/handlers/webhook-handler.test.ts +3 -2
- package/src/handlers/webhook-handler.ts +13 -7
- package/src/index.ts +21 -0
- package/src/managers/admin-manager.ts +249 -0
- package/src/managers/agent-registry.test.ts +2 -1
- package/src/managers/agent-registry.ts +170 -2
- package/src/managers/agent-room-manager.ts +98 -42
- package/src/managers/index.ts +13 -1
- package/src/managers/message-router.ts +215 -17
- package/src/managers/room-management-manager.ts +4 -7
- package/src/managers/room-manager.ts +11 -15
- package/src/payments/index.ts +22 -0
- package/src/payments/payment-client.ts +240 -0
- package/src/teneo-sdk.ts +302 -27
- package/src/types/categories.ts +45 -0
- package/src/types/config.ts +70 -2
- package/src/types/error-codes.ts +10 -0
- package/src/types/events.test.ts +1 -0
- package/src/types/events.ts +43 -0
- package/src/types/index.ts +56 -0
- package/src/types/messages.test.ts +2 -1
- package/src/types/messages.ts +307 -5
- package/src/utils/bounded-queue.test.ts +1 -1
- package/src/utils/bounded-queue.ts +2 -1
- package/src/utils/circuit-breaker.test.ts +1 -1
- package/src/utils/deduplication-cache.test.ts +1 -1
- package/src/utils/event-waiter.test.ts +1 -1
- package/src/utils/event-waiter.ts +3 -3
- package/src/utils/index.ts +7 -0
- package/src/utils/logger.ts +8 -8
- package/src/utils/pricing-resolver.ts +128 -0
- package/src/utils/rate-limiter.test.ts +1 -1
- package/src/utils/rate-limiter.ts +1 -0
- package/src/utils/signature-verifier.test.ts +2 -2
- package/src/utils/signature-verifier.ts +3 -2
- package/tests/.env.example +7 -0
- package/tests/direct-agent-test.ts +151 -0
- package/tests/integration/real-server.test.ts +2 -0
- package/tests/integration/room-management.test.ts +10 -8
- package/tests/integration/websocket.test.ts +4 -1
- package/tests/payment-flow-test.ts +147 -0
- package/tests/unit/handlers/agent-room-operation-response-handler.test.ts +17 -29
- package/tests/unit/handlers/agent-status-update-handler.test.ts +2 -6
- package/tests/unit/handlers/auth-success-handler-rooms.test.ts +1 -3
- package/tests/unit/handlers/list-available-agents-handler.test.ts +4 -12
- package/tests/unit/handlers/list-room-agents-handler.test.ts +2 -6
- package/tests/unit/handlers/room-operation-response-handler.test.ts +9 -36
- package/tests/unit/managers/agent-room-manager.test.ts +9 -16
- package/tests/unit/managers/room-management-manager.test.ts +21 -39
- package/tsconfig.json +2 -2
- package/vitest.config.ts +1 -0
|
@@ -181,10 +181,11 @@ export class BoundedQueue<T> {
|
|
|
181
181
|
`Queue is full (max size: ${this.maxSize}). Cannot add more items.`
|
|
182
182
|
);
|
|
183
183
|
|
|
184
|
-
default:
|
|
184
|
+
default: {
|
|
185
185
|
// TypeScript exhaustiveness check
|
|
186
186
|
const _exhaustive: never = this.strategy;
|
|
187
187
|
throw new Error(`Unknown overflow strategy: ${_exhaustive}`);
|
|
188
|
+
}
|
|
188
189
|
}
|
|
189
190
|
}
|
|
190
191
|
}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
5
|
import { describe, it, expect, beforeEach, vi } from "vitest";
|
|
6
|
-
import { CircuitBreaker, CircuitBreakerError
|
|
6
|
+
import { CircuitBreaker, CircuitBreakerError } from "./circuit-breaker";
|
|
7
7
|
|
|
8
8
|
describe("CircuitBreaker", () => {
|
|
9
9
|
describe("constructor", () => {
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Tests for Deduplication Cache
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
|
-
import { describe, it, expect, beforeEach
|
|
5
|
+
import { describe, it, expect, beforeEach } from "vitest";
|
|
6
6
|
import { DeduplicationCache } from "./deduplication-cache";
|
|
7
7
|
|
|
8
8
|
describe("DeduplicationCache", () => {
|
|
@@ -123,7 +123,7 @@ describe("waitForEvent", () => {
|
|
|
123
123
|
it("should timeout if no matching event arrives", async () => {
|
|
124
124
|
const promise = waitForEvent(emitter, "filtered:event", {
|
|
125
125
|
timeout: 1000,
|
|
126
|
-
filter: (data:
|
|
126
|
+
filter: (data: { id: number }) => data.id === 999
|
|
127
127
|
});
|
|
128
128
|
|
|
129
129
|
// Emit non-matching events
|
|
@@ -60,7 +60,7 @@ export interface WaitForEventOptions<T> {
|
|
|
60
60
|
* });
|
|
61
61
|
* ```
|
|
62
62
|
*/
|
|
63
|
-
export async function waitForEvent<T =
|
|
63
|
+
export async function waitForEvent<T = unknown>(
|
|
64
64
|
emitter: EventEmitter,
|
|
65
65
|
eventName: string,
|
|
66
66
|
options: WaitForEventOptions<T>
|
|
@@ -129,7 +129,7 @@ export async function waitForEvent<T = any>(
|
|
|
129
129
|
* ]);
|
|
130
130
|
* ```
|
|
131
131
|
*/
|
|
132
|
-
export async function waitForAnyEvent<T =
|
|
132
|
+
export async function waitForAnyEvent<T = unknown>(
|
|
133
133
|
waiters: Array<{
|
|
134
134
|
emitter: EventEmitter;
|
|
135
135
|
eventName: string;
|
|
@@ -157,7 +157,7 @@ export async function waitForAnyEvent<T = any>(
|
|
|
157
157
|
* ]);
|
|
158
158
|
* ```
|
|
159
159
|
*/
|
|
160
|
-
export async function waitForAllEvents<T =
|
|
160
|
+
export async function waitForAllEvents<T = unknown>(
|
|
161
161
|
waiters: Array<{
|
|
162
162
|
emitter: EventEmitter;
|
|
163
163
|
eventName: string;
|
package/src/utils/index.ts
CHANGED
package/src/utils/logger.ts
CHANGED
|
@@ -55,30 +55,30 @@ export function createPinoLogger(level: LogLevel, name?: string): Logger {
|
|
|
55
55
|
|
|
56
56
|
// Adapt pino's API to match our Logger interface
|
|
57
57
|
return {
|
|
58
|
-
debug: (message: string, data?:
|
|
58
|
+
debug: (message: string, data?: unknown) => {
|
|
59
59
|
if (data !== undefined) {
|
|
60
|
-
pinoLogger.debug(data, message);
|
|
60
|
+
pinoLogger.debug(data as object, message);
|
|
61
61
|
} else {
|
|
62
62
|
pinoLogger.debug(message);
|
|
63
63
|
}
|
|
64
64
|
},
|
|
65
|
-
info: (message: string, data?:
|
|
65
|
+
info: (message: string, data?: unknown) => {
|
|
66
66
|
if (data !== undefined) {
|
|
67
|
-
pinoLogger.info(data, message);
|
|
67
|
+
pinoLogger.info(data as object, message);
|
|
68
68
|
} else {
|
|
69
69
|
pinoLogger.info(message);
|
|
70
70
|
}
|
|
71
71
|
},
|
|
72
|
-
warn: (message: string, data?:
|
|
72
|
+
warn: (message: string, data?: unknown) => {
|
|
73
73
|
if (data !== undefined) {
|
|
74
|
-
pinoLogger.warn(data, message);
|
|
74
|
+
pinoLogger.warn(data as object, message);
|
|
75
75
|
} else {
|
|
76
76
|
pinoLogger.warn(message);
|
|
77
77
|
}
|
|
78
78
|
},
|
|
79
|
-
error: (message: string, data?:
|
|
79
|
+
error: (message: string, data?: unknown) => {
|
|
80
80
|
if (data !== undefined) {
|
|
81
|
-
pinoLogger.error(data, message);
|
|
81
|
+
pinoLogger.error(data as object, message);
|
|
82
82
|
} else {
|
|
83
83
|
pinoLogger.error(message);
|
|
84
84
|
}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import { Agent, CommandPricing } from "../types";
|
|
2
|
+
|
|
3
|
+
const VALID_PRICE_TYPES = ["free", "per-query", "per-item", "time-based-task"] as const;
|
|
4
|
+
type PriceType = (typeof VALID_PRICE_TYPES)[number];
|
|
5
|
+
|
|
6
|
+
export interface ResolvedPricing {
|
|
7
|
+
pricePerUnit: number;
|
|
8
|
+
priceType: PriceType;
|
|
9
|
+
taskUnit?: string;
|
|
10
|
+
timeUnit?: "hour" | "day";
|
|
11
|
+
totalPrice: number;
|
|
12
|
+
itemCount?: number;
|
|
13
|
+
duration?: number;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export interface PriceResolutionOptions {
|
|
17
|
+
commandTrigger?: string;
|
|
18
|
+
itemCount?: number;
|
|
19
|
+
duration?: number;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
function isValidPriceType(type: string): type is PriceType {
|
|
23
|
+
return VALID_PRICE_TYPES.includes(type as PriceType);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export function resolveAgentPricing(
|
|
27
|
+
agent: Agent,
|
|
28
|
+
options: PriceResolutionOptions = {}
|
|
29
|
+
): ResolvedPricing | null {
|
|
30
|
+
const { commandTrigger, itemCount = 1, duration = 1 } = options;
|
|
31
|
+
|
|
32
|
+
// Validate itemCount and duration are positive
|
|
33
|
+
if (itemCount < 0 || duration < 0) {
|
|
34
|
+
return null;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
let pricing: CommandPricing | undefined;
|
|
38
|
+
|
|
39
|
+
if (commandTrigger && agent.commands) {
|
|
40
|
+
const command = agent.commands.find(
|
|
41
|
+
(cmd) => cmd.trigger.toLowerCase() === commandTrigger.toLowerCase()
|
|
42
|
+
);
|
|
43
|
+
pricing = command?.pricing;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
if (!pricing) {
|
|
47
|
+
return null;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
const rawPriceType = pricing.priceType || "free";
|
|
51
|
+
const priceType: PriceType = isValidPriceType(rawPriceType) ? rawPriceType : "free";
|
|
52
|
+
const pricePerUnit = pricing.pricePerUnit || 0;
|
|
53
|
+
|
|
54
|
+
// Reject negative prices
|
|
55
|
+
if (pricePerUnit < 0) {
|
|
56
|
+
return null;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
if (priceType === "free" || pricePerUnit === 0) {
|
|
60
|
+
return {
|
|
61
|
+
pricePerUnit: 0,
|
|
62
|
+
priceType: "free",
|
|
63
|
+
totalPrice: 0
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
let totalPrice: number;
|
|
68
|
+
|
|
69
|
+
switch (priceType) {
|
|
70
|
+
case "per-query":
|
|
71
|
+
totalPrice = pricePerUnit;
|
|
72
|
+
break;
|
|
73
|
+
case "per-item":
|
|
74
|
+
totalPrice = pricePerUnit * itemCount;
|
|
75
|
+
break;
|
|
76
|
+
case "time-based-task":
|
|
77
|
+
totalPrice = pricePerUnit * duration;
|
|
78
|
+
break;
|
|
79
|
+
default:
|
|
80
|
+
totalPrice = pricePerUnit;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
return {
|
|
84
|
+
pricePerUnit,
|
|
85
|
+
priceType,
|
|
86
|
+
taskUnit: pricing.taskUnit,
|
|
87
|
+
timeUnit: pricing.timeUnit,
|
|
88
|
+
totalPrice,
|
|
89
|
+
itemCount: priceType === "per-item" ? itemCount : undefined,
|
|
90
|
+
duration: priceType === "time-based-task" ? duration : undefined
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
export function parseCommandForPricing(content: string): {
|
|
95
|
+
agentName?: string;
|
|
96
|
+
commandTrigger?: string;
|
|
97
|
+
itemCount?: number;
|
|
98
|
+
duration?: number;
|
|
99
|
+
} {
|
|
100
|
+
const directCommandMatch = content.match(/^@(\S+)\s+(.+)$/);
|
|
101
|
+
if (!directCommandMatch) {
|
|
102
|
+
return {};
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
const agentName = directCommandMatch[1];
|
|
106
|
+
const commandContent = directCommandMatch[2];
|
|
107
|
+
|
|
108
|
+
const parts = commandContent.trim().split(/\s+/);
|
|
109
|
+
const commandTrigger = parts[0];
|
|
110
|
+
const args = parts.slice(1);
|
|
111
|
+
|
|
112
|
+
let itemCount: number | undefined;
|
|
113
|
+
let duration: number | undefined;
|
|
114
|
+
|
|
115
|
+
for (const arg of args) {
|
|
116
|
+
const numMatch = arg.match(/^(\d+)$/);
|
|
117
|
+
if (numMatch) {
|
|
118
|
+
itemCount = parseInt(numMatch[1], 10);
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
const durationMatch = arg.match(/^(\d+)(h|d)$/i);
|
|
122
|
+
if (durationMatch) {
|
|
123
|
+
duration = parseInt(durationMatch[1], 10);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
return { agentName, commandTrigger, itemCount, duration };
|
|
128
|
+
}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Tests for Token Bucket Rate Limiter
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
|
-
import { describe, it, expect
|
|
5
|
+
import { describe, it, expect } from "vitest";
|
|
6
6
|
import { TokenBucketRateLimiter, RateLimitError } from "./rate-limiter";
|
|
7
7
|
|
|
8
8
|
describe("TokenBucketRateLimiter", () => {
|
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
* Tests for Signature Verifier
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
|
-
import { describe, it, expect
|
|
5
|
+
import { describe, it, expect } from "vitest";
|
|
6
6
|
import { privateKeyToAccount } from "viem/accounts";
|
|
7
7
|
import { SignatureVerifier } from "./signature-verifier";
|
|
8
|
-
import { BaseMessage
|
|
8
|
+
import { BaseMessage } from "../types";
|
|
9
9
|
|
|
10
10
|
describe("SignatureVerifier", () => {
|
|
11
11
|
// Test accounts
|
|
@@ -198,10 +198,11 @@ export class SignatureVerifier {
|
|
|
198
198
|
* @returns Object containing signable fields
|
|
199
199
|
*/
|
|
200
200
|
public getSignableContent(message: BaseMessage): object {
|
|
201
|
-
|
|
201
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
202
|
+
const { signature: _signature, publicKey: _publicKey, id: _id, ...signableContent } = message;
|
|
202
203
|
|
|
203
204
|
// Include only defined fields for consistent hashing
|
|
204
|
-
const filtered: Record<string,
|
|
205
|
+
const filtered: Record<string, unknown> = {};
|
|
205
206
|
for (const [key, value] of Object.entries(signableContent)) {
|
|
206
207
|
if (value !== undefined) {
|
|
207
208
|
filtered[key] = value;
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Direct Agent Test - Tests direct @agent commands with payment
|
|
3
|
+
*
|
|
4
|
+
* Setup:
|
|
5
|
+
* Create a .env file in the teneo-sdk root with:
|
|
6
|
+
* PRIVATE_KEY=your_private_key_here
|
|
7
|
+
* WS_URL=wss://backend.developer.chatroom.teneo-protocol.ai/ws # optional
|
|
8
|
+
*
|
|
9
|
+
* Run:
|
|
10
|
+
* npx tsx tests/direct-agent-test.ts
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
import "dotenv/config";
|
|
14
|
+
import { TeneoSDK } from "../src/teneo-sdk";
|
|
15
|
+
|
|
16
|
+
// Configuration from environment variables (loaded from .env)
|
|
17
|
+
const WS_URL = process.env.WS_URL || "wss://backend.developer.chatroom.teneo-protocol.ai/ws";
|
|
18
|
+
const PRIVATE_KEY = process.env.PRIVATE_KEY;
|
|
19
|
+
|
|
20
|
+
if (!PRIVATE_KEY) {
|
|
21
|
+
console.error("❌ Missing PRIVATE_KEY");
|
|
22
|
+
console.error("");
|
|
23
|
+
console.error("Setup: Create a .env file in the teneo-sdk root with:");
|
|
24
|
+
console.error(" PRIVATE_KEY=your_private_key_here");
|
|
25
|
+
console.error("");
|
|
26
|
+
console.error("Then run:");
|
|
27
|
+
console.error(" npx tsx tests/direct-agent-test.ts");
|
|
28
|
+
process.exit(1);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
// Type assertion after validation
|
|
32
|
+
const privateKey: string = PRIVATE_KEY;
|
|
33
|
+
|
|
34
|
+
let TEST_ROOM = ""; // Will be set after auth to use user's private room
|
|
35
|
+
|
|
36
|
+
async function testDirectAgentCommand() {
|
|
37
|
+
console.log("=== Direct Agent Command Test ===\n");
|
|
38
|
+
console.log("WebSocket URL:", WS_URL);
|
|
39
|
+
|
|
40
|
+
// Create SDK with quote-approve enabled
|
|
41
|
+
const config = TeneoSDK.builder()
|
|
42
|
+
.withWebSocketUrl(WS_URL)
|
|
43
|
+
.withAuthentication(privateKey)
|
|
44
|
+
.withPayments({
|
|
45
|
+
autoApprove: true,
|
|
46
|
+
maxPricePerRequest: 10_000_000 // Max 10 USDC
|
|
47
|
+
})
|
|
48
|
+
.withLogging("info")
|
|
49
|
+
.build();
|
|
50
|
+
|
|
51
|
+
const sdk = new TeneoSDK(config);
|
|
52
|
+
|
|
53
|
+
// Set up event listeners
|
|
54
|
+
sdk.on("connection:open", () => console.log("✓ Connected"));
|
|
55
|
+
sdk.on("auth:success", (state) => {
|
|
56
|
+
console.log("✓ Authenticated as:", state.walletAddress);
|
|
57
|
+
// Get user's first private room
|
|
58
|
+
if (state.privateRoomIds && state.privateRoomIds.length > 0) {
|
|
59
|
+
TEST_ROOM = state.privateRoomIds[0];
|
|
60
|
+
console.log("✓ Using room:", TEST_ROOM);
|
|
61
|
+
} else if (state.rooms && state.rooms.length > 0) {
|
|
62
|
+
TEST_ROOM = state.rooms[0];
|
|
63
|
+
console.log("✓ Using room:", TEST_ROOM);
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
sdk.on("quote:received", (quote) => {
|
|
67
|
+
console.log("\n📋 Quote Received:");
|
|
68
|
+
console.log(" Task ID:", quote.data.task_id);
|
|
69
|
+
console.log(" Agent:", quote.data.agent_name);
|
|
70
|
+
console.log(" Price:", quote.data.pricing.pricePerUnit, "USDC");
|
|
71
|
+
console.log(" Expires:", quote.data.expires_at);
|
|
72
|
+
});
|
|
73
|
+
sdk.on("payment:attached", (data) => {
|
|
74
|
+
console.log("\n💰 Payment Attached:");
|
|
75
|
+
console.log(" Agent:", data.agentId);
|
|
76
|
+
console.log(" Amount:", data.amount / 1_000_000, "USDC");
|
|
77
|
+
console.log(" Command:", data.command);
|
|
78
|
+
});
|
|
79
|
+
sdk.on("agent:response", (response) => {
|
|
80
|
+
console.log("\n📥 Agent Response:");
|
|
81
|
+
console.log(" Success:", response.success);
|
|
82
|
+
if (response.content) {
|
|
83
|
+
console.log(" Content:", response.content.substring(0, 200) + "...");
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
sdk.on("error", (error) => console.error("❌ Error:", error.message));
|
|
87
|
+
|
|
88
|
+
try {
|
|
89
|
+
// Connect
|
|
90
|
+
console.log("\nConnecting to", WS_URL);
|
|
91
|
+
await sdk.connect();
|
|
92
|
+
console.log("Connected!\n");
|
|
93
|
+
|
|
94
|
+
// Wait for auth to complete and room to be set
|
|
95
|
+
await sleep(500);
|
|
96
|
+
|
|
97
|
+
if (!TEST_ROOM) {
|
|
98
|
+
throw new Error("No room available - auth may have failed");
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
// Subscribe to test room
|
|
102
|
+
console.log("Subscribing to room:", TEST_ROOM);
|
|
103
|
+
try {
|
|
104
|
+
await sdk.subscribeToRoom(TEST_ROOM);
|
|
105
|
+
console.log("Subscribed!\n");
|
|
106
|
+
} catch {
|
|
107
|
+
console.log("Room subscription skipped (private room)\n");
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
// Wait a bit for connection to stabilize
|
|
111
|
+
await sleep(1000);
|
|
112
|
+
|
|
113
|
+
// Send direct agent command - bypasses coordinator, goes directly to agent
|
|
114
|
+
console.log("\n=== Sending Direct Agent Command ===");
|
|
115
|
+
console.log('Command: "@x-agent-enterprise-v2 user @elonmusk"\n');
|
|
116
|
+
|
|
117
|
+
const response = await sdk.sendMessage("@x-agent-enterprise-v2 user @elonmusk", {
|
|
118
|
+
room: TEST_ROOM,
|
|
119
|
+
waitForResponse: true,
|
|
120
|
+
timeout: 120000 // 2 minutes
|
|
121
|
+
});
|
|
122
|
+
|
|
123
|
+
if (response) {
|
|
124
|
+
console.log("\n=== Test Complete ===");
|
|
125
|
+
console.log("Response received successfully!");
|
|
126
|
+
console.log(
|
|
127
|
+
"Humanized:",
|
|
128
|
+
typeof response.humanized === "string"
|
|
129
|
+
? response.humanized.substring(0, 500)
|
|
130
|
+
: JSON.stringify(response, null, 2).substring(0, 500)
|
|
131
|
+
);
|
|
132
|
+
}
|
|
133
|
+
} catch (error: unknown) {
|
|
134
|
+
const err = error as Error & { details?: unknown };
|
|
135
|
+
console.error("\n❌ Test failed:", err.message);
|
|
136
|
+
if (err.details) {
|
|
137
|
+
console.error("Details:", err.details);
|
|
138
|
+
}
|
|
139
|
+
} finally {
|
|
140
|
+
console.log("\nDisconnecting...");
|
|
141
|
+
sdk.destroy();
|
|
142
|
+
console.log("Done!");
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
function sleep(ms: number): Promise<void> {
|
|
147
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
// Run the test
|
|
151
|
+
testDirectAgentCommand().catch(console.error);
|
|
@@ -49,6 +49,7 @@ const hasCredentials = !!(
|
|
|
49
49
|
describe.skipIf(!hasCredentials)("Real Teneo Server Integration Test", () => {
|
|
50
50
|
let sdk: TeneoSDK;
|
|
51
51
|
let authState: AuthenticationState;
|
|
52
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
52
53
|
let receivedAgents: Agent[] = [];
|
|
53
54
|
let privateRoomId: string = "";
|
|
54
55
|
|
|
@@ -143,6 +144,7 @@ describe.skipIf(!hasCredentials)("Real Teneo Server Integration Test", () => {
|
|
|
143
144
|
|
|
144
145
|
let challengeReceived = false;
|
|
145
146
|
let authSuccessReceived = false;
|
|
147
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
146
148
|
let usedCachedAuth = false;
|
|
147
149
|
|
|
148
150
|
const challengePromise = new Promise<string | null>((resolve) => {
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
import { describe, it, expect, beforeAll, afterAll, beforeEach, afterEach } from "vitest";
|
|
7
|
-
import
|
|
7
|
+
import { WebSocketServer } from "ws";
|
|
8
8
|
import { TeneoSDK } from "../../src";
|
|
9
9
|
import { SDKConfigBuilder } from "../../src/types";
|
|
10
10
|
import { privateKeyToAccount } from "viem/accounts";
|
|
@@ -69,7 +69,7 @@ describe.skip("Room Management Integration Tests", () => {
|
|
|
69
69
|
);
|
|
70
70
|
break;
|
|
71
71
|
|
|
72
|
-
case "create_room":
|
|
72
|
+
case "create_room": {
|
|
73
73
|
// Create new room
|
|
74
74
|
const newRoomId = `room-${roomCounter++}`;
|
|
75
75
|
const newRoom: RoomInfo = {
|
|
@@ -96,8 +96,9 @@ describe.skip("Room Management Integration Tests", () => {
|
|
|
96
96
|
})
|
|
97
97
|
);
|
|
98
98
|
break;
|
|
99
|
+
}
|
|
99
100
|
|
|
100
|
-
case "update_room":
|
|
101
|
+
case "update_room": {
|
|
101
102
|
// Update existing room
|
|
102
103
|
const roomId = message.room_id;
|
|
103
104
|
const existingRoom = rooms.get(roomId);
|
|
@@ -137,8 +138,9 @@ describe.skip("Room Management Integration Tests", () => {
|
|
|
137
138
|
})
|
|
138
139
|
);
|
|
139
140
|
break;
|
|
141
|
+
}
|
|
140
142
|
|
|
141
|
-
case "delete_room":
|
|
143
|
+
case "delete_room": {
|
|
142
144
|
// Delete room
|
|
143
145
|
const deleteRoomId = message.room_id;
|
|
144
146
|
const roomToDelete = rooms.get(deleteRoomId);
|
|
@@ -171,6 +173,7 @@ describe.skip("Room Management Integration Tests", () => {
|
|
|
171
173
|
})
|
|
172
174
|
);
|
|
173
175
|
break;
|
|
176
|
+
}
|
|
174
177
|
|
|
175
178
|
case "ping":
|
|
176
179
|
ws.send(JSON.stringify({ type: "pong" }));
|
|
@@ -245,7 +248,6 @@ describe.skip("Room Management Integration Tests", () => {
|
|
|
245
248
|
expect(ownedRooms[0].id).toBe(room.id);
|
|
246
249
|
});
|
|
247
250
|
|
|
248
|
-
|
|
249
251
|
it("should emit room:created event", async () => {
|
|
250
252
|
const roomOptions = {
|
|
251
253
|
name: "Event Test Room"
|
|
@@ -267,9 +269,7 @@ describe.skip("Room Management Integration Tests", () => {
|
|
|
267
269
|
it("should validate room name", async () => {
|
|
268
270
|
await expect(sdk.createRoom({ name: "" })).rejects.toThrow("Room name cannot be empty");
|
|
269
271
|
|
|
270
|
-
await expect(sdk.createRoom({ name: "a".repeat(101) })).rejects.toThrow(
|
|
271
|
-
"Room name too long"
|
|
272
|
-
);
|
|
272
|
+
await expect(sdk.createRoom({ name: "a".repeat(101) })).rejects.toThrow("Room name too long");
|
|
273
273
|
});
|
|
274
274
|
|
|
275
275
|
it("should validate room description", async () => {
|
|
@@ -470,9 +470,11 @@ describe.skip("Room Management Integration Tests", () => {
|
|
|
470
470
|
|
|
471
471
|
describe("Multiple Rooms", () => {
|
|
472
472
|
it("should handle creating multiple rooms", async () => {
|
|
473
|
+
/* eslint-disable @typescript-eslint/no-unused-vars */
|
|
473
474
|
const room1 = await sdk.createRoom({ name: "Room 1" });
|
|
474
475
|
const room2 = await sdk.createRoom({ name: "Room 2" });
|
|
475
476
|
const room3 = await sdk.createRoom({ name: "Room 3" });
|
|
477
|
+
/* eslint-enable @typescript-eslint/no-unused-vars */
|
|
476
478
|
|
|
477
479
|
expect(sdk.getOwnedRoomCount()).toBe(3);
|
|
478
480
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { describe, it, expect, beforeAll, afterAll, beforeEach, afterEach } from "vitest";
|
|
2
|
-
import
|
|
2
|
+
import { WebSocketServer } from "ws";
|
|
3
3
|
import { TeneoSDK } from "../../src";
|
|
4
4
|
import { SDKConfigBuilder } from "../../src/types";
|
|
5
5
|
import { privateKeyToAccount } from "viem/accounts";
|
|
@@ -10,6 +10,7 @@ describe("WebSocket Integration Tests", () => {
|
|
|
10
10
|
let sdk: TeneoSDK;
|
|
11
11
|
let serverPort: number;
|
|
12
12
|
let privateKey: string;
|
|
13
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
13
14
|
let walletAddress: string;
|
|
14
15
|
|
|
15
16
|
// Mock server to simulate Teneo WebSocket server
|
|
@@ -150,6 +151,7 @@ describe("WebSocket Integration Tests", () => {
|
|
|
150
151
|
.withAuthentication(privateKey)
|
|
151
152
|
.withReconnection(false) // Disable for tests
|
|
152
153
|
.withAutoJoinRooms(["test-room"]) // Auto-join test room
|
|
154
|
+
.withPayments({ autoApprove: false }) // Use legacy flow for mock server
|
|
153
155
|
.build();
|
|
154
156
|
|
|
155
157
|
sdk = new TeneoSDK(config);
|
|
@@ -290,6 +292,7 @@ describe("WebSocket Integration Tests", () => {
|
|
|
290
292
|
.withAuthentication(privateKey)
|
|
291
293
|
.withWebhook("http://localhost:3001/webhook")
|
|
292
294
|
.withReconnection(false)
|
|
295
|
+
.withPayments({ autoApprove: false }) // Use legacy flow for mock server
|
|
293
296
|
.build()
|
|
294
297
|
);
|
|
295
298
|
|