@teneo-protocol/sdk 1.0.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/.dockerignore +14 -0
- package/.env.test.example +14 -0
- package/.eslintrc.json +26 -0
- package/.github/workflows/claude-code-review.yml +78 -0
- package/.github/workflows/claude-reviewer.yml +64 -0
- package/.github/workflows/publish-npm.yml +38 -0
- package/.github/workflows/push-to-main.yml +23 -0
- package/.node-version +1 -0
- package/.prettierrc +11 -0
- package/Dockerfile +25 -0
- package/LICENCE +661 -0
- package/README.md +709 -0
- package/dist/constants.d.ts +42 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +45 -0
- package/dist/constants.js.map +1 -0
- package/dist/core/websocket-client.d.ts +261 -0
- package/dist/core/websocket-client.d.ts.map +1 -0
- package/dist/core/websocket-client.js +875 -0
- package/dist/core/websocket-client.js.map +1 -0
- package/dist/formatters/response-formatter.d.ts +354 -0
- package/dist/formatters/response-formatter.d.ts.map +1 -0
- package/dist/formatters/response-formatter.js +575 -0
- package/dist/formatters/response-formatter.js.map +1 -0
- package/dist/handlers/message-handler-registry.d.ts +155 -0
- package/dist/handlers/message-handler-registry.d.ts.map +1 -0
- package/dist/handlers/message-handler-registry.js +216 -0
- package/dist/handlers/message-handler-registry.js.map +1 -0
- package/dist/handlers/message-handlers/agent-selected-handler.d.ts +112 -0
- package/dist/handlers/message-handlers/agent-selected-handler.d.ts.map +1 -0
- package/dist/handlers/message-handlers/agent-selected-handler.js +40 -0
- package/dist/handlers/message-handlers/agent-selected-handler.js.map +1 -0
- package/dist/handlers/message-handlers/agents-list-handler.d.ts +14 -0
- package/dist/handlers/message-handlers/agents-list-handler.d.ts.map +1 -0
- package/dist/handlers/message-handlers/agents-list-handler.js +25 -0
- package/dist/handlers/message-handlers/agents-list-handler.js.map +1 -0
- package/dist/handlers/message-handlers/auth-error-handler.d.ts +71 -0
- package/dist/handlers/message-handlers/auth-error-handler.d.ts.map +1 -0
- package/dist/handlers/message-handlers/auth-error-handler.js +30 -0
- package/dist/handlers/message-handlers/auth-error-handler.js.map +1 -0
- package/dist/handlers/message-handlers/auth-message-handler.d.ts +18 -0
- package/dist/handlers/message-handlers/auth-message-handler.d.ts.map +1 -0
- package/dist/handlers/message-handlers/auth-message-handler.js +60 -0
- package/dist/handlers/message-handlers/auth-message-handler.js.map +1 -0
- package/dist/handlers/message-handlers/auth-required-handler.d.ts +76 -0
- package/dist/handlers/message-handlers/auth-required-handler.d.ts.map +1 -0
- package/dist/handlers/message-handlers/auth-required-handler.js +23 -0
- package/dist/handlers/message-handlers/auth-required-handler.js.map +1 -0
- package/dist/handlers/message-handlers/auth-success-handler.d.ts +18 -0
- package/dist/handlers/message-handlers/auth-success-handler.d.ts.map +1 -0
- package/dist/handlers/message-handlers/auth-success-handler.js +51 -0
- package/dist/handlers/message-handlers/auth-success-handler.js.map +1 -0
- package/dist/handlers/message-handlers/base-handler.d.ts +55 -0
- package/dist/handlers/message-handlers/base-handler.d.ts.map +1 -0
- package/dist/handlers/message-handlers/base-handler.js +83 -0
- package/dist/handlers/message-handlers/base-handler.js.map +1 -0
- package/dist/handlers/message-handlers/challenge-handler.d.ts +73 -0
- package/dist/handlers/message-handlers/challenge-handler.d.ts.map +1 -0
- package/dist/handlers/message-handlers/challenge-handler.js +47 -0
- package/dist/handlers/message-handlers/challenge-handler.js.map +1 -0
- package/dist/handlers/message-handlers/error-message-handler.d.ts +76 -0
- package/dist/handlers/message-handlers/error-message-handler.d.ts.map +1 -0
- package/dist/handlers/message-handlers/error-message-handler.js +29 -0
- package/dist/handlers/message-handlers/error-message-handler.js.map +1 -0
- package/dist/handlers/message-handlers/index.d.ts +28 -0
- package/dist/handlers/message-handlers/index.d.ts.map +1 -0
- package/dist/handlers/message-handlers/index.js +100 -0
- package/dist/handlers/message-handlers/index.js.map +1 -0
- package/dist/handlers/message-handlers/list-rooms-response-handler.d.ts +122 -0
- package/dist/handlers/message-handlers/list-rooms-response-handler.d.ts.map +1 -0
- package/dist/handlers/message-handlers/list-rooms-response-handler.js +30 -0
- package/dist/handlers/message-handlers/list-rooms-response-handler.js.map +1 -0
- package/dist/handlers/message-handlers/ping-pong-handler.d.ts +104 -0
- package/dist/handlers/message-handlers/ping-pong-handler.d.ts.map +1 -0
- package/dist/handlers/message-handlers/ping-pong-handler.js +36 -0
- package/dist/handlers/message-handlers/ping-pong-handler.js.map +1 -0
- package/dist/handlers/message-handlers/regular-message-handler.d.ts +56 -0
- package/dist/handlers/message-handlers/regular-message-handler.d.ts.map +1 -0
- package/dist/handlers/message-handlers/regular-message-handler.js +59 -0
- package/dist/handlers/message-handlers/regular-message-handler.js.map +1 -0
- package/dist/handlers/message-handlers/subscribe-response-handler.d.ts +81 -0
- package/dist/handlers/message-handlers/subscribe-response-handler.d.ts.map +1 -0
- package/dist/handlers/message-handlers/subscribe-response-handler.js +48 -0
- package/dist/handlers/message-handlers/subscribe-response-handler.js.map +1 -0
- package/dist/handlers/message-handlers/task-response-handler.d.ts +14 -0
- package/dist/handlers/message-handlers/task-response-handler.d.ts.map +1 -0
- package/dist/handlers/message-handlers/task-response-handler.js +44 -0
- package/dist/handlers/message-handlers/task-response-handler.js.map +1 -0
- package/dist/handlers/message-handlers/types.d.ts +51 -0
- package/dist/handlers/message-handlers/types.d.ts.map +1 -0
- package/dist/handlers/message-handlers/types.js +7 -0
- package/dist/handlers/message-handlers/types.js.map +1 -0
- package/dist/handlers/message-handlers/unsubscribe-response-handler.d.ts +81 -0
- package/dist/handlers/message-handlers/unsubscribe-response-handler.d.ts.map +1 -0
- package/dist/handlers/message-handlers/unsubscribe-response-handler.js +48 -0
- package/dist/handlers/message-handlers/unsubscribe-response-handler.js.map +1 -0
- package/dist/handlers/webhook-handler.d.ts +202 -0
- package/dist/handlers/webhook-handler.d.ts.map +1 -0
- package/dist/handlers/webhook-handler.js +511 -0
- package/dist/handlers/webhook-handler.js.map +1 -0
- package/dist/index.d.ts +71 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +217 -0
- package/dist/index.js.map +1 -0
- package/dist/managers/agent-registry.d.ts +173 -0
- package/dist/managers/agent-registry.d.ts.map +1 -0
- package/dist/managers/agent-registry.js +310 -0
- package/dist/managers/agent-registry.js.map +1 -0
- package/dist/managers/connection-manager.d.ts +134 -0
- package/dist/managers/connection-manager.d.ts.map +1 -0
- package/dist/managers/connection-manager.js +176 -0
- package/dist/managers/connection-manager.js.map +1 -0
- package/dist/managers/index.d.ts +9 -0
- package/dist/managers/index.d.ts.map +1 -0
- package/dist/managers/index.js +16 -0
- package/dist/managers/index.js.map +1 -0
- package/dist/managers/message-router.d.ts +112 -0
- package/dist/managers/message-router.d.ts.map +1 -0
- package/dist/managers/message-router.js +260 -0
- package/dist/managers/message-router.js.map +1 -0
- package/dist/managers/room-manager.d.ts +165 -0
- package/dist/managers/room-manager.d.ts.map +1 -0
- package/dist/managers/room-manager.js +227 -0
- package/dist/managers/room-manager.js.map +1 -0
- package/dist/teneo-sdk.d.ts +703 -0
- package/dist/teneo-sdk.d.ts.map +1 -0
- package/dist/teneo-sdk.js +907 -0
- package/dist/teneo-sdk.js.map +1 -0
- package/dist/types/config.d.ts +1047 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +720 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/error-codes.d.ts +29 -0
- package/dist/types/error-codes.d.ts.map +1 -0
- package/dist/types/error-codes.js +41 -0
- package/dist/types/error-codes.js.map +1 -0
- package/dist/types/events.d.ts +616 -0
- package/dist/types/events.d.ts.map +1 -0
- package/dist/types/events.js +261 -0
- package/dist/types/events.js.map +1 -0
- package/dist/types/health.d.ts +40 -0
- package/dist/types/health.d.ts.map +1 -0
- package/dist/types/health.js +6 -0
- package/dist/types/health.js.map +1 -0
- package/dist/types/index.d.ts +10 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +123 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/messages.d.ts +3734 -0
- package/dist/types/messages.d.ts.map +1 -0
- package/dist/types/messages.js +482 -0
- package/dist/types/messages.js.map +1 -0
- package/dist/types/validation.d.ts +81 -0
- package/dist/types/validation.d.ts.map +1 -0
- package/dist/types/validation.js +115 -0
- package/dist/types/validation.js.map +1 -0
- package/dist/utils/bounded-queue.d.ts +127 -0
- package/dist/utils/bounded-queue.d.ts.map +1 -0
- package/dist/utils/bounded-queue.js +181 -0
- package/dist/utils/bounded-queue.js.map +1 -0
- package/dist/utils/circuit-breaker.d.ts +141 -0
- package/dist/utils/circuit-breaker.d.ts.map +1 -0
- package/dist/utils/circuit-breaker.js +215 -0
- package/dist/utils/circuit-breaker.js.map +1 -0
- package/dist/utils/deduplication-cache.d.ts +110 -0
- package/dist/utils/deduplication-cache.d.ts.map +1 -0
- package/dist/utils/deduplication-cache.js +177 -0
- package/dist/utils/deduplication-cache.js.map +1 -0
- package/dist/utils/event-waiter.d.ts +101 -0
- package/dist/utils/event-waiter.d.ts.map +1 -0
- package/dist/utils/event-waiter.js +118 -0
- package/dist/utils/event-waiter.js.map +1 -0
- package/dist/utils/index.d.ts +51 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +72 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/logger.d.ts +22 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +91 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/rate-limiter.d.ts +122 -0
- package/dist/utils/rate-limiter.d.ts.map +1 -0
- package/dist/utils/rate-limiter.js +190 -0
- package/dist/utils/rate-limiter.js.map +1 -0
- package/dist/utils/retry-policy.d.ts +191 -0
- package/dist/utils/retry-policy.d.ts.map +1 -0
- package/dist/utils/retry-policy.js +225 -0
- package/dist/utils/retry-policy.js.map +1 -0
- package/dist/utils/secure-private-key.d.ts +113 -0
- package/dist/utils/secure-private-key.d.ts.map +1 -0
- package/dist/utils/secure-private-key.js +188 -0
- package/dist/utils/secure-private-key.js.map +1 -0
- package/dist/utils/signature-verifier.d.ts +143 -0
- package/dist/utils/signature-verifier.d.ts.map +1 -0
- package/dist/utils/signature-verifier.js +238 -0
- package/dist/utils/signature-verifier.js.map +1 -0
- package/dist/utils/ssrf-validator.d.ts +36 -0
- package/dist/utils/ssrf-validator.d.ts.map +1 -0
- package/dist/utils/ssrf-validator.js +195 -0
- package/dist/utils/ssrf-validator.js.map +1 -0
- package/examples/.env.example +17 -0
- package/examples/basic-usage.ts +211 -0
- package/examples/production-dashboard/.env.example +153 -0
- package/examples/production-dashboard/package.json +39 -0
- package/examples/production-dashboard/public/dashboard.html +642 -0
- package/examples/production-dashboard/server.ts +753 -0
- package/examples/webhook-integration.ts +239 -0
- package/examples/x-influencer-battle-redesign.html +1065 -0
- package/examples/x-influencer-battle-server.ts +217 -0
- package/examples/x-influencer-battle.html +787 -0
- package/package.json +65 -0
- package/src/constants.ts +43 -0
- package/src/core/websocket-client.test.ts +512 -0
- package/src/core/websocket-client.ts +1056 -0
- package/src/formatters/response-formatter.test.ts +571 -0
- package/src/formatters/response-formatter.ts +677 -0
- package/src/handlers/message-handler-registry.ts +239 -0
- package/src/handlers/message-handlers/agent-selected-handler.ts +40 -0
- package/src/handlers/message-handlers/agents-list-handler.ts +26 -0
- package/src/handlers/message-handlers/auth-error-handler.ts +31 -0
- package/src/handlers/message-handlers/auth-message-handler.ts +66 -0
- package/src/handlers/message-handlers/auth-required-handler.ts +23 -0
- package/src/handlers/message-handlers/auth-success-handler.ts +57 -0
- package/src/handlers/message-handlers/base-handler.ts +101 -0
- package/src/handlers/message-handlers/challenge-handler.ts +57 -0
- package/src/handlers/message-handlers/error-message-handler.ts +27 -0
- package/src/handlers/message-handlers/index.ts +77 -0
- package/src/handlers/message-handlers/list-rooms-response-handler.ts +28 -0
- package/src/handlers/message-handlers/ping-pong-handler.ts +30 -0
- package/src/handlers/message-handlers/regular-message-handler.ts +65 -0
- package/src/handlers/message-handlers/subscribe-response-handler.ts +47 -0
- package/src/handlers/message-handlers/task-response-handler.ts +45 -0
- package/src/handlers/message-handlers/types.ts +77 -0
- package/src/handlers/message-handlers/unsubscribe-response-handler.ts +47 -0
- package/src/handlers/webhook-handler.test.ts +789 -0
- package/src/handlers/webhook-handler.ts +576 -0
- package/src/index.ts +269 -0
- package/src/managers/agent-registry.test.ts +466 -0
- package/src/managers/agent-registry.ts +347 -0
- package/src/managers/connection-manager.ts +195 -0
- package/src/managers/index.ts +9 -0
- package/src/managers/message-router.ts +349 -0
- package/src/managers/room-manager.ts +248 -0
- package/src/teneo-sdk.ts +1022 -0
- package/src/types/config.test.ts +325 -0
- package/src/types/config.ts +799 -0
- package/src/types/error-codes.ts +44 -0
- package/src/types/events.test.ts +302 -0
- package/src/types/events.ts +382 -0
- package/src/types/health.ts +46 -0
- package/src/types/index.ts +199 -0
- package/src/types/messages.test.ts +660 -0
- package/src/types/messages.ts +570 -0
- package/src/types/validation.ts +123 -0
- package/src/utils/bounded-queue.test.ts +356 -0
- package/src/utils/bounded-queue.ts +205 -0
- package/src/utils/circuit-breaker.test.ts +394 -0
- package/src/utils/circuit-breaker.ts +262 -0
- package/src/utils/deduplication-cache.test.ts +380 -0
- package/src/utils/deduplication-cache.ts +198 -0
- package/src/utils/event-waiter.test.ts +381 -0
- package/src/utils/event-waiter.ts +172 -0
- package/src/utils/index.ts +74 -0
- package/src/utils/logger.ts +87 -0
- package/src/utils/rate-limiter.test.ts +341 -0
- package/src/utils/rate-limiter.ts +211 -0
- package/src/utils/retry-policy.test.ts +558 -0
- package/src/utils/retry-policy.ts +272 -0
- package/src/utils/secure-private-key.test.ts +356 -0
- package/src/utils/secure-private-key.ts +205 -0
- package/src/utils/signature-verifier.test.ts +464 -0
- package/src/utils/signature-verifier.ts +298 -0
- package/src/utils/ssrf-validator.test.ts +372 -0
- package/src/utils/ssrf-validator.ts +224 -0
- package/tests/integration/real-server.test.ts +740 -0
- package/tests/integration/websocket.test.ts +381 -0
- package/tests/integration-setup.ts +16 -0
- package/tests/setup.ts +34 -0
- package/tsconfig.json +32 -0
- package/vitest.config.ts +42 -0
- package/vitest.integration.config.ts +23 -0
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Timeout constants for various SDK operations
|
|
3
|
+
*/
|
|
4
|
+
export declare const TIMEOUTS: {
|
|
5
|
+
/** Wait time for cached auth response */
|
|
6
|
+
readonly CACHED_AUTH_WAIT: 1000;
|
|
7
|
+
/** WebSocket ping interval */
|
|
8
|
+
readonly PING_INTERVAL: 30000;
|
|
9
|
+
/** Default message response timeout */
|
|
10
|
+
readonly DEFAULT_MESSAGE_TIMEOUT: 30000;
|
|
11
|
+
/** Authentication timeout */
|
|
12
|
+
readonly AUTH_TIMEOUT: 30000;
|
|
13
|
+
/** Initial connection timeout */
|
|
14
|
+
readonly CONNECTION_TIMEOUT: 30000;
|
|
15
|
+
/** Webhook delivery timeout */
|
|
16
|
+
readonly WEBHOOK_TIMEOUT: 10000;
|
|
17
|
+
/** Auth state polling interval */
|
|
18
|
+
readonly AUTH_POLL_INTERVAL: 100;
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* Retry and backoff constants
|
|
22
|
+
*/
|
|
23
|
+
export declare const RETRY: {
|
|
24
|
+
/** Base delay for exponential backoff */
|
|
25
|
+
readonly BASE_DELAY: 1000;
|
|
26
|
+
/** Maximum retry delay */
|
|
27
|
+
readonly MAX_DELAY: 30000;
|
|
28
|
+
/** Maximum webhook retry delay */
|
|
29
|
+
readonly MAX_WEBHOOK_DELAY: 30000;
|
|
30
|
+
/** Maximum reconnection delay */
|
|
31
|
+
readonly MAX_RECONNECT_DELAY: 60000;
|
|
32
|
+
};
|
|
33
|
+
/**
|
|
34
|
+
* Limits and constraints
|
|
35
|
+
*/
|
|
36
|
+
export declare const LIMITS: {
|
|
37
|
+
/** Maximum message size (2MB) */
|
|
38
|
+
readonly MAX_MESSAGE_SIZE: number;
|
|
39
|
+
/** Random jitter for reconnection */
|
|
40
|
+
readonly MAX_JITTER: 1000;
|
|
41
|
+
};
|
|
42
|
+
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,eAAO,MAAM,QAAQ;IACnB,yCAAyC;;IAEzC,8BAA8B;;IAE9B,uCAAuC;;IAEvC,6BAA6B;;IAE7B,iCAAiC;;IAEjC,+BAA+B;;IAE/B,kCAAkC;;CAE1B,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,KAAK;IAChB,yCAAyC;;IAEzC,0BAA0B;;IAE1B,kCAAkC;;IAElC,iCAAiC;;CAEzB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,MAAM;IACjB,iCAAiC;;IAEjC,qCAAqC;;CAE7B,CAAC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.LIMITS = exports.RETRY = exports.TIMEOUTS = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Timeout constants for various SDK operations
|
|
6
|
+
*/
|
|
7
|
+
exports.TIMEOUTS = {
|
|
8
|
+
/** Wait time for cached auth response */
|
|
9
|
+
CACHED_AUTH_WAIT: 1000,
|
|
10
|
+
/** WebSocket ping interval */
|
|
11
|
+
PING_INTERVAL: 30000,
|
|
12
|
+
/** Default message response timeout */
|
|
13
|
+
DEFAULT_MESSAGE_TIMEOUT: 30000,
|
|
14
|
+
/** Authentication timeout */
|
|
15
|
+
AUTH_TIMEOUT: 30000,
|
|
16
|
+
/** Initial connection timeout */
|
|
17
|
+
CONNECTION_TIMEOUT: 30000,
|
|
18
|
+
/** Webhook delivery timeout */
|
|
19
|
+
WEBHOOK_TIMEOUT: 10000,
|
|
20
|
+
/** Auth state polling interval */
|
|
21
|
+
AUTH_POLL_INTERVAL: 100
|
|
22
|
+
};
|
|
23
|
+
/**
|
|
24
|
+
* Retry and backoff constants
|
|
25
|
+
*/
|
|
26
|
+
exports.RETRY = {
|
|
27
|
+
/** Base delay for exponential backoff */
|
|
28
|
+
BASE_DELAY: 1000,
|
|
29
|
+
/** Maximum retry delay */
|
|
30
|
+
MAX_DELAY: 30000,
|
|
31
|
+
/** Maximum webhook retry delay */
|
|
32
|
+
MAX_WEBHOOK_DELAY: 30000,
|
|
33
|
+
/** Maximum reconnection delay */
|
|
34
|
+
MAX_RECONNECT_DELAY: 60000
|
|
35
|
+
};
|
|
36
|
+
/**
|
|
37
|
+
* Limits and constraints
|
|
38
|
+
*/
|
|
39
|
+
exports.LIMITS = {
|
|
40
|
+
/** Maximum message size (2MB) */
|
|
41
|
+
MAX_MESSAGE_SIZE: 2 * 1024 * 1024,
|
|
42
|
+
/** Random jitter for reconnection */
|
|
43
|
+
MAX_JITTER: 1000
|
|
44
|
+
};
|
|
45
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACU,QAAA,QAAQ,GAAG;IACtB,yCAAyC;IACzC,gBAAgB,EAAE,IAAI;IACtB,8BAA8B;IAC9B,aAAa,EAAE,KAAM;IACrB,uCAAuC;IACvC,uBAAuB,EAAE,KAAM;IAC/B,6BAA6B;IAC7B,YAAY,EAAE,KAAM;IACpB,iCAAiC;IACjC,kBAAkB,EAAE,KAAM;IAC1B,+BAA+B;IAC/B,eAAe,EAAE,KAAM;IACvB,kCAAkC;IAClC,kBAAkB,EAAE,GAAG;CACf,CAAC;AAEX;;GAEG;AACU,QAAA,KAAK,GAAG;IACnB,yCAAyC;IACzC,UAAU,EAAE,IAAI;IAChB,0BAA0B;IAC1B,SAAS,EAAE,KAAM;IACjB,kCAAkC;IAClC,iBAAiB,EAAE,KAAM;IACzB,iCAAiC;IACjC,mBAAmB,EAAE,KAAM;CACnB,CAAC;AAEX;;GAEG;AACU,QAAA,MAAM,GAAG;IACpB,iCAAiC;IACjC,gBAAgB,EAAE,CAAC,GAAG,IAAI,GAAG,IAAI;IACjC,qCAAqC;IACrC,UAAU,EAAE,IAAI;CACR,CAAC"}
|
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WebSocket client implementation for Teneo Protocol SDK
|
|
3
|
+
* Handles connection, authentication, and message management with Zod validation
|
|
4
|
+
*/
|
|
5
|
+
import { EventEmitter } from "eventemitter3";
|
|
6
|
+
import { SDKConfig, ConnectionState, AuthenticationState, BaseMessage } from "../types";
|
|
7
|
+
import { SDKEvents } from "../types/events";
|
|
8
|
+
export declare class WebSocketClient extends EventEmitter<SDKEvents> {
|
|
9
|
+
private ws?;
|
|
10
|
+
private config;
|
|
11
|
+
private logger;
|
|
12
|
+
private account?;
|
|
13
|
+
private secureKey?;
|
|
14
|
+
private ownsSecureKey;
|
|
15
|
+
private handlerRegistry;
|
|
16
|
+
private rateLimiter?;
|
|
17
|
+
private signatureVerifier?;
|
|
18
|
+
private deduplicationCache?;
|
|
19
|
+
private reconnectPolicy;
|
|
20
|
+
private roomManager?;
|
|
21
|
+
private connectionState;
|
|
22
|
+
private authState;
|
|
23
|
+
private messageQueue;
|
|
24
|
+
private pendingMessages;
|
|
25
|
+
private reconnectTimer?;
|
|
26
|
+
private pingTimer?;
|
|
27
|
+
private connectionTimer?;
|
|
28
|
+
constructor(config: SDKConfig);
|
|
29
|
+
/**
|
|
30
|
+
* Set the RoomManager instance for handler context
|
|
31
|
+
* Called by TeneoSDK after initialization
|
|
32
|
+
*/
|
|
33
|
+
setRoomManager(roomManager: any): void;
|
|
34
|
+
/**
|
|
35
|
+
* Establishes a WebSocket connection to the Teneo server.
|
|
36
|
+
* Handles connection timeout, authentication challenge-response flow,
|
|
37
|
+
* and automatic message queue processing after successful connection.
|
|
38
|
+
* Emits 'connection:open', 'auth:challenge', 'auth:success', and 'ready' events.
|
|
39
|
+
*
|
|
40
|
+
* @returns Promise that resolves when connection and authentication are complete
|
|
41
|
+
* @throws {TimeoutError} If connection times out (default: 30 seconds)
|
|
42
|
+
* @throws {ConnectionError} If WebSocket connection fails
|
|
43
|
+
* @throws {AuthenticationError} If authentication fails or times out
|
|
44
|
+
*
|
|
45
|
+
* @example
|
|
46
|
+
* ```typescript
|
|
47
|
+
* const wsClient = new WebSocketClient(config);
|
|
48
|
+
* await wsClient.connect();
|
|
49
|
+
* console.log('Connected and authenticated');
|
|
50
|
+
* ```
|
|
51
|
+
*/
|
|
52
|
+
connect(): Promise<void>;
|
|
53
|
+
/**
|
|
54
|
+
* Disconnects from the WebSocket server and cleans up all resources.
|
|
55
|
+
* Stops reconnection attempts, clears all timers, rejects pending messages,
|
|
56
|
+
* and updates connection state. Emits 'disconnect' event.
|
|
57
|
+
*
|
|
58
|
+
* @example
|
|
59
|
+
* ```typescript
|
|
60
|
+
* wsClient.disconnect();
|
|
61
|
+
* console.log('Disconnected from server');
|
|
62
|
+
* ```
|
|
63
|
+
*/
|
|
64
|
+
disconnect(): void;
|
|
65
|
+
/**
|
|
66
|
+
* Sends a message to the WebSocket server with validation and queueing support.
|
|
67
|
+
* Validates message with Zod schema, enforces size limits, and queues messages
|
|
68
|
+
* during reconnection. Adds timestamp if not present. Emits 'message:sent' event.
|
|
69
|
+
*
|
|
70
|
+
* @param message - The message to send
|
|
71
|
+
* @returns Promise that resolves when message is sent successfully
|
|
72
|
+
* @throws {ValidationError} If message fails Zod validation
|
|
73
|
+
* @throws {MessageError} If message size exceeds limit
|
|
74
|
+
* @throws {ConnectionError} If not connected and reconnection is disabled
|
|
75
|
+
*
|
|
76
|
+
* @example
|
|
77
|
+
* ```typescript
|
|
78
|
+
* const message = createUserMessage('Hello', 'general', walletAddress);
|
|
79
|
+
* await wsClient.sendMessage(message);
|
|
80
|
+
* console.log('Message sent');
|
|
81
|
+
* ```
|
|
82
|
+
*/
|
|
83
|
+
sendMessage(message: BaseMessage): Promise<void>;
|
|
84
|
+
/**
|
|
85
|
+
* Sends a message and waits for a response with the same message ID.
|
|
86
|
+
* Implements request-response pattern over WebSocket with timeout support.
|
|
87
|
+
* Message is automatically assigned a unique ID for correlation.
|
|
88
|
+
*
|
|
89
|
+
* @template T - Expected response type
|
|
90
|
+
* @param message - The message to send
|
|
91
|
+
* @param timeout - Optional timeout in milliseconds (default: from config or 60000)
|
|
92
|
+
* @returns Promise that resolves with the response message
|
|
93
|
+
* @throws {TimeoutError} If response is not received within timeout
|
|
94
|
+
* @throws {ValidationError} If message fails validation
|
|
95
|
+
* @throws {MessageError} If message sending fails
|
|
96
|
+
*
|
|
97
|
+
* @example
|
|
98
|
+
* ```typescript
|
|
99
|
+
* const requestMessage = createRequestChallenge('user', walletAddress);
|
|
100
|
+
* const response = await wsClient.sendMessageWithResponse(requestMessage, 30000);
|
|
101
|
+
* console.log('Response received:', response);
|
|
102
|
+
* ```
|
|
103
|
+
*/
|
|
104
|
+
sendMessageWithResponse<T = any>(message: BaseMessage, timeout?: number): Promise<T>;
|
|
105
|
+
/**
|
|
106
|
+
* Authenticate with the server
|
|
107
|
+
*/
|
|
108
|
+
private authenticate;
|
|
109
|
+
/**
|
|
110
|
+
* Create handler context with all dependencies
|
|
111
|
+
*/
|
|
112
|
+
private createHandlerContext;
|
|
113
|
+
/**
|
|
114
|
+
* Handle incoming messages using the handler registry
|
|
115
|
+
*/
|
|
116
|
+
private handleMessage;
|
|
117
|
+
/**
|
|
118
|
+
* Verify message signature if signature verification is enabled (SEC-2)
|
|
119
|
+
* Returns true if message should be processed, false if it should be rejected
|
|
120
|
+
*/
|
|
121
|
+
private verifyMessageSignature;
|
|
122
|
+
/**
|
|
123
|
+
* Handle reconnection logic with configurable retry strategy (REL-3)
|
|
124
|
+
*/
|
|
125
|
+
private handleReconnection;
|
|
126
|
+
/**
|
|
127
|
+
* Calculate reconnection delay using retry policy (REL-3)
|
|
128
|
+
*/
|
|
129
|
+
private calculateReconnectDelay;
|
|
130
|
+
/**
|
|
131
|
+
* Start ping interval to keep connection alive
|
|
132
|
+
*/
|
|
133
|
+
private startPingInterval;
|
|
134
|
+
/**
|
|
135
|
+
* Stop ping interval
|
|
136
|
+
*/
|
|
137
|
+
private stopPingInterval;
|
|
138
|
+
/**
|
|
139
|
+
* Process queued messages after reconnection
|
|
140
|
+
*/
|
|
141
|
+
private processMessageQueue;
|
|
142
|
+
/**
|
|
143
|
+
* Update connection state with validation
|
|
144
|
+
*/
|
|
145
|
+
private updateConnectionState;
|
|
146
|
+
/**
|
|
147
|
+
* Update authentication state with validation
|
|
148
|
+
*/
|
|
149
|
+
private updateAuthState;
|
|
150
|
+
/**
|
|
151
|
+
* Create default logger using pino
|
|
152
|
+
*/
|
|
153
|
+
private createDefaultLogger;
|
|
154
|
+
/**
|
|
155
|
+
* Quick check for whether the WebSocket connection is currently active.
|
|
156
|
+
* This getter provides immediate connection status without full state details.
|
|
157
|
+
*
|
|
158
|
+
* @returns True if WebSocket is connected, false otherwise
|
|
159
|
+
*
|
|
160
|
+
* @example
|
|
161
|
+
* ```typescript
|
|
162
|
+
* if (wsClient.isConnected) {
|
|
163
|
+
* await wsClient.sendMessage(message);
|
|
164
|
+
* }
|
|
165
|
+
* ```
|
|
166
|
+
*/
|
|
167
|
+
get isConnected(): boolean;
|
|
168
|
+
/**
|
|
169
|
+
* Quick check for whether authentication is complete.
|
|
170
|
+
* This getter provides immediate authentication status without full state details.
|
|
171
|
+
*
|
|
172
|
+
* @returns True if authenticated, false otherwise
|
|
173
|
+
*
|
|
174
|
+
* @example
|
|
175
|
+
* ```typescript
|
|
176
|
+
* if (wsClient.isAuthenticated) {
|
|
177
|
+
* console.log('Ready to communicate with agents');
|
|
178
|
+
* }
|
|
179
|
+
* ```
|
|
180
|
+
*/
|
|
181
|
+
get isAuthenticated(): boolean;
|
|
182
|
+
/**
|
|
183
|
+
* Gets a copy of the current connection state including detailed status information.
|
|
184
|
+
* Returns a shallow copy to prevent external modification of internal state.
|
|
185
|
+
*
|
|
186
|
+
* @returns Copy of connection state with connection status, reconnection info, and timestamps
|
|
187
|
+
*
|
|
188
|
+
* @example
|
|
189
|
+
* ```typescript
|
|
190
|
+
* const state = wsClient.getConnectionState();
|
|
191
|
+
* console.log(`Connected: ${state.connected}`);
|
|
192
|
+
* console.log(`Reconnecting: ${state.reconnecting}`);
|
|
193
|
+
* console.log(`Attempts: ${state.reconnectAttempts}`);
|
|
194
|
+
* ```
|
|
195
|
+
*/
|
|
196
|
+
getConnectionState(): ConnectionState;
|
|
197
|
+
/**
|
|
198
|
+
* Gets a copy of the current authentication state including wallet and room information.
|
|
199
|
+
* Returns a shallow copy to prevent external modification of internal state.
|
|
200
|
+
*
|
|
201
|
+
* @returns Copy of authentication state with wallet address, challenge, and room access
|
|
202
|
+
*
|
|
203
|
+
* @example
|
|
204
|
+
* ```typescript
|
|
205
|
+
* const authState = wsClient.getAuthState();
|
|
206
|
+
* console.log(`Authenticated: ${authState.authenticated}`);
|
|
207
|
+
* console.log(`Wallet: ${authState.walletAddress}`);
|
|
208
|
+
* console.log(`Rooms: ${authState.rooms?.length}`);
|
|
209
|
+
* ```
|
|
210
|
+
*/
|
|
211
|
+
getAuthState(): AuthenticationState;
|
|
212
|
+
/**
|
|
213
|
+
* Gets the current rate limiter status including available tokens and configuration.
|
|
214
|
+
* Useful for monitoring rate limiting behavior and detecting potential throttling.
|
|
215
|
+
* Returns undefined if rate limiting is not configured.
|
|
216
|
+
*
|
|
217
|
+
* @returns Rate limiter status object, or undefined if not configured
|
|
218
|
+
* @returns {number} returns.availableTokens - Tokens currently available for consumption
|
|
219
|
+
* @returns {number} returns.tokensPerSecond - Configured rate limit (operations per second)
|
|
220
|
+
* @returns {number} returns.maxBurst - Maximum burst capacity
|
|
221
|
+
*
|
|
222
|
+
* @example
|
|
223
|
+
* ```typescript
|
|
224
|
+
* const status = wsClient.getRateLimiterStatus();
|
|
225
|
+
* if (status) {
|
|
226
|
+
* console.log(`Available: ${status.availableTokens}/${status.maxBurst}`);
|
|
227
|
+
* console.log(`Rate: ${status.tokensPerSecond}/sec`);
|
|
228
|
+
* }
|
|
229
|
+
* ```
|
|
230
|
+
*/
|
|
231
|
+
getRateLimiterStatus(): {
|
|
232
|
+
availableTokens: number;
|
|
233
|
+
tokensPerSecond: number;
|
|
234
|
+
maxBurst: number;
|
|
235
|
+
} | undefined;
|
|
236
|
+
/**
|
|
237
|
+
* Gets the current message deduplication cache status (CB-4).
|
|
238
|
+
* Useful for monitoring deduplication behavior and cache health.
|
|
239
|
+
* Returns undefined if deduplication is not configured.
|
|
240
|
+
*
|
|
241
|
+
* @returns Deduplication cache status object, or undefined if not configured
|
|
242
|
+
* @returns {number} returns.cacheSize - Number of message IDs currently cached
|
|
243
|
+
* @returns {number} returns.ttl - Time-to-live for cache entries in milliseconds
|
|
244
|
+
* @returns {number} returns.maxSize - Maximum cache size
|
|
245
|
+
*
|
|
246
|
+
* @example
|
|
247
|
+
* ```typescript
|
|
248
|
+
* const status = wsClient.getDeduplicationStatus();
|
|
249
|
+
* if (status) {
|
|
250
|
+
* console.log(`Cache: ${status.cacheSize}/${status.maxSize}`);
|
|
251
|
+
* console.log(`TTL: ${status.ttl}ms`);
|
|
252
|
+
* }
|
|
253
|
+
* ```
|
|
254
|
+
*/
|
|
255
|
+
getDeduplicationStatus(): {
|
|
256
|
+
cacheSize: number;
|
|
257
|
+
ttl: number;
|
|
258
|
+
maxSize: number;
|
|
259
|
+
} | undefined;
|
|
260
|
+
}
|
|
261
|
+
//# sourceMappingURL=websocket-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"websocket-client.d.ts","sourceRoot":"","sources":["../../src/core/websocket-client.ts"],"names":[],"mappings":"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"}
|