@mochabug/adapt-web 1.0.0-rc21 → 1.0.0-rc22

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (162) hide show
  1. package/README.md +184 -0
  2. package/dist/esm/index.js +948 -159
  3. package/dist/esm/index.js.map +1 -1
  4. package/dist/esm/types.js +2 -0
  5. package/dist/esm/types.js.map +1 -0
  6. package/dist/types/index.d.ts +66 -27
  7. package/dist/types/types.d.ts +225 -0
  8. package/dist/umd/adapt-web.js +5024 -0
  9. package/dist/umd/adapt-web.min.js +271 -0
  10. package/package.json +19 -41
  11. package/dist/cjs/genproto/buf/validate/validate_pb.js +0 -355
  12. package/dist/cjs/genproto/buf/validate/validate_pb.js.map +0 -1
  13. package/dist/cjs/genproto/google/api/annotations_pb.js +0 -30
  14. package/dist/cjs/genproto/google/api/annotations_pb.js.map +0 -1
  15. package/dist/cjs/genproto/google/api/client_pb.js +0 -290
  16. package/dist/cjs/genproto/google/api/client_pb.js.map +0 -1
  17. package/dist/cjs/genproto/google/api/http_pb.js +0 -37
  18. package/dist/cjs/genproto/google/api/http_pb.js.map +0 -1
  19. package/dist/cjs/genproto/google/api/launch_stage_pb.js +0 -104
  20. package/dist/cjs/genproto/google/api/launch_stage_pb.js.map +0 -1
  21. package/dist/cjs/genproto/mochabugapis/adapt/automations/v1/automations_pb.js +0 -179
  22. package/dist/cjs/genproto/mochabugapis/adapt/automations/v1/automations_pb.js.map +0 -1
  23. package/dist/cjs/genproto/mochabugapis/adapt/graph/exchange_pb.js +0 -29
  24. package/dist/cjs/genproto/mochabugapis/adapt/graph/exchange_pb.js.map +0 -1
  25. package/dist/cjs/genproto/mochabugapis/adapt/graph/jtd_schema_pb.js +0 -29
  26. package/dist/cjs/genproto/mochabugapis/adapt/graph/jtd_schema_pb.js.map +0 -1
  27. package/dist/cjs/genproto/mochabugapis/adapt/graph/receiver_pb.js +0 -29
  28. package/dist/cjs/genproto/mochabugapis/adapt/graph/receiver_pb.js.map +0 -1
  29. package/dist/cjs/genproto/mochabugapis/adapt/graph/signal_binding_pb.js +0 -88
  30. package/dist/cjs/genproto/mochabugapis/adapt/graph/signal_binding_pb.js.map +0 -1
  31. package/dist/cjs/genproto/mochabugapis/adapt/graph/signal_data_pb.js +0 -28
  32. package/dist/cjs/genproto/mochabugapis/adapt/graph/signal_data_pb.js.map +0 -1
  33. package/dist/cjs/genproto/mochabugapis/adapt/graph/signal_descriptor_pb.js +0 -29
  34. package/dist/cjs/genproto/mochabugapis/adapt/graph/signal_descriptor_pb.js.map +0 -1
  35. package/dist/cjs/genproto/mochabugapis/adapt/graph/signal_format_pb.js +0 -29
  36. package/dist/cjs/genproto/mochabugapis/adapt/graph/signal_format_pb.js.map +0 -1
  37. package/dist/cjs/genproto/mochabugapis/adapt/graph/transceiver_pb.js +0 -29
  38. package/dist/cjs/genproto/mochabugapis/adapt/graph/transceiver_pb.js.map +0 -1
  39. package/dist/cjs/genproto/mochabugapis/adapt/graph/transmitter_pb.js +0 -65
  40. package/dist/cjs/genproto/mochabugapis/adapt/graph/transmitter_pb.js.map +0 -1
  41. package/dist/cjs/genproto/mochabugapis/adapt/graph/vertex_metadata_pb.js +0 -31
  42. package/dist/cjs/genproto/mochabugapis/adapt/graph/vertex_metadata_pb.js.map +0 -1
  43. package/dist/cjs/genproto/mochabugapis/adapt/plugins/v1/compound_services_pb.js +0 -33
  44. package/dist/cjs/genproto/mochabugapis/adapt/plugins/v1/compound_services_pb.js.map +0 -1
  45. package/dist/cjs/genproto/mochabugapis/adapt/plugins/v1/file_pb.js +0 -28
  46. package/dist/cjs/genproto/mochabugapis/adapt/plugins/v1/file_pb.js.map +0 -1
  47. package/dist/cjs/genproto/mochabugapis/adapt/plugins/v1/http_proxy_service_pb.js +0 -105
  48. package/dist/cjs/genproto/mochabugapis/adapt/plugins/v1/http_proxy_service_pb.js.map +0 -1
  49. package/dist/cjs/genproto/mochabugapis/adapt/plugins/v1/manifest_pb.js +0 -30
  50. package/dist/cjs/genproto/mochabugapis/adapt/plugins/v1/manifest_pb.js.map +0 -1
  51. package/dist/cjs/genproto/mochabugapis/adapt/plugins/v1/oauth2_service_pb.js +0 -187
  52. package/dist/cjs/genproto/mochabugapis/adapt/plugins/v1/oauth2_service_pb.js.map +0 -1
  53. package/dist/cjs/genproto/mochabugapis/adapt/plugins/v1/plugins_pb.js +0 -48
  54. package/dist/cjs/genproto/mochabugapis/adapt/plugins/v1/plugins_pb.js.map +0 -1
  55. package/dist/cjs/genproto/mochabugapis/adapt/plugins/v1/service_definition_pb.js +0 -32
  56. package/dist/cjs/genproto/mochabugapis/adapt/plugins/v1/service_definition_pb.js.map +0 -1
  57. package/dist/cjs/genproto/mochabugapis/adapt/plugins/v1/service_settings_pb.js +0 -40
  58. package/dist/cjs/genproto/mochabugapis/adapt/plugins/v1/service_settings_pb.js.map +0 -1
  59. package/dist/cjs/genproto/mochabugapis/adapt/plugins/v1/variable_service_pb.js +0 -30
  60. package/dist/cjs/genproto/mochabugapis/adapt/plugins/v1/variable_service_pb.js.map +0 -1
  61. package/dist/cjs/genproto/mochabugapis/adapt/plugins/v1/vertex_pb.js +0 -79
  62. package/dist/cjs/genproto/mochabugapis/adapt/plugins/v1/vertex_pb.js.map +0 -1
  63. package/dist/cjs/genproto/mochabugapis/adapt/runtime/v1/incoming_pb.js +0 -74
  64. package/dist/cjs/genproto/mochabugapis/adapt/runtime/v1/incoming_pb.js.map +0 -1
  65. package/dist/cjs/genproto/mochabugapis/adapt/runtime/v1/runtime_pb.js +0 -442
  66. package/dist/cjs/genproto/mochabugapis/adapt/runtime/v1/runtime_pb.js.map +0 -1
  67. package/dist/cjs/genproto/mochabugapis/adapt/runtime/v1/store_pb.js +0 -94
  68. package/dist/cjs/genproto/mochabugapis/adapt/runtime/v1/store_pb.js.map +0 -1
  69. package/dist/cjs/index.js +0 -191
  70. package/dist/cjs/index.js.map +0 -1
  71. package/dist/cjs/pubsub-client.js +0 -566
  72. package/dist/cjs/pubsub-client.js.map +0 -1
  73. package/dist/esm/genproto/buf/validate/validate_pb.js +0 -352
  74. package/dist/esm/genproto/buf/validate/validate_pb.js.map +0 -1
  75. package/dist/esm/genproto/google/api/annotations_pb.js +0 -27
  76. package/dist/esm/genproto/google/api/annotations_pb.js.map +0 -1
  77. package/dist/esm/genproto/google/api/client_pb.js +0 -287
  78. package/dist/esm/genproto/google/api/client_pb.js.map +0 -1
  79. package/dist/esm/genproto/google/api/http_pb.js +0 -34
  80. package/dist/esm/genproto/google/api/http_pb.js.map +0 -1
  81. package/dist/esm/genproto/google/api/launch_stage_pb.js +0 -101
  82. package/dist/esm/genproto/google/api/launch_stage_pb.js.map +0 -1
  83. package/dist/esm/genproto/mochabugapis/adapt/automations/v1/automations_pb.js +0 -176
  84. package/dist/esm/genproto/mochabugapis/adapt/automations/v1/automations_pb.js.map +0 -1
  85. package/dist/esm/genproto/mochabugapis/adapt/graph/exchange_pb.js +0 -26
  86. package/dist/esm/genproto/mochabugapis/adapt/graph/exchange_pb.js.map +0 -1
  87. package/dist/esm/genproto/mochabugapis/adapt/graph/jtd_schema_pb.js +0 -26
  88. package/dist/esm/genproto/mochabugapis/adapt/graph/jtd_schema_pb.js.map +0 -1
  89. package/dist/esm/genproto/mochabugapis/adapt/graph/receiver_pb.js +0 -26
  90. package/dist/esm/genproto/mochabugapis/adapt/graph/receiver_pb.js.map +0 -1
  91. package/dist/esm/genproto/mochabugapis/adapt/graph/signal_binding_pb.js +0 -85
  92. package/dist/esm/genproto/mochabugapis/adapt/graph/signal_binding_pb.js.map +0 -1
  93. package/dist/esm/genproto/mochabugapis/adapt/graph/signal_data_pb.js +0 -25
  94. package/dist/esm/genproto/mochabugapis/adapt/graph/signal_data_pb.js.map +0 -1
  95. package/dist/esm/genproto/mochabugapis/adapt/graph/signal_descriptor_pb.js +0 -26
  96. package/dist/esm/genproto/mochabugapis/adapt/graph/signal_descriptor_pb.js.map +0 -1
  97. package/dist/esm/genproto/mochabugapis/adapt/graph/signal_format_pb.js +0 -26
  98. package/dist/esm/genproto/mochabugapis/adapt/graph/signal_format_pb.js.map +0 -1
  99. package/dist/esm/genproto/mochabugapis/adapt/graph/transceiver_pb.js +0 -26
  100. package/dist/esm/genproto/mochabugapis/adapt/graph/transceiver_pb.js.map +0 -1
  101. package/dist/esm/genproto/mochabugapis/adapt/graph/transmitter_pb.js +0 -62
  102. package/dist/esm/genproto/mochabugapis/adapt/graph/transmitter_pb.js.map +0 -1
  103. package/dist/esm/genproto/mochabugapis/adapt/graph/vertex_metadata_pb.js +0 -28
  104. package/dist/esm/genproto/mochabugapis/adapt/graph/vertex_metadata_pb.js.map +0 -1
  105. package/dist/esm/genproto/mochabugapis/adapt/plugins/v1/compound_services_pb.js +0 -30
  106. package/dist/esm/genproto/mochabugapis/adapt/plugins/v1/compound_services_pb.js.map +0 -1
  107. package/dist/esm/genproto/mochabugapis/adapt/plugins/v1/file_pb.js +0 -25
  108. package/dist/esm/genproto/mochabugapis/adapt/plugins/v1/file_pb.js.map +0 -1
  109. package/dist/esm/genproto/mochabugapis/adapt/plugins/v1/http_proxy_service_pb.js +0 -102
  110. package/dist/esm/genproto/mochabugapis/adapt/plugins/v1/http_proxy_service_pb.js.map +0 -1
  111. package/dist/esm/genproto/mochabugapis/adapt/plugins/v1/manifest_pb.js +0 -27
  112. package/dist/esm/genproto/mochabugapis/adapt/plugins/v1/manifest_pb.js.map +0 -1
  113. package/dist/esm/genproto/mochabugapis/adapt/plugins/v1/oauth2_service_pb.js +0 -184
  114. package/dist/esm/genproto/mochabugapis/adapt/plugins/v1/oauth2_service_pb.js.map +0 -1
  115. package/dist/esm/genproto/mochabugapis/adapt/plugins/v1/plugins_pb.js +0 -45
  116. package/dist/esm/genproto/mochabugapis/adapt/plugins/v1/plugins_pb.js.map +0 -1
  117. package/dist/esm/genproto/mochabugapis/adapt/plugins/v1/service_definition_pb.js +0 -29
  118. package/dist/esm/genproto/mochabugapis/adapt/plugins/v1/service_definition_pb.js.map +0 -1
  119. package/dist/esm/genproto/mochabugapis/adapt/plugins/v1/service_settings_pb.js +0 -37
  120. package/dist/esm/genproto/mochabugapis/adapt/plugins/v1/service_settings_pb.js.map +0 -1
  121. package/dist/esm/genproto/mochabugapis/adapt/plugins/v1/variable_service_pb.js +0 -27
  122. package/dist/esm/genproto/mochabugapis/adapt/plugins/v1/variable_service_pb.js.map +0 -1
  123. package/dist/esm/genproto/mochabugapis/adapt/plugins/v1/vertex_pb.js +0 -76
  124. package/dist/esm/genproto/mochabugapis/adapt/plugins/v1/vertex_pb.js.map +0 -1
  125. package/dist/esm/genproto/mochabugapis/adapt/runtime/v1/incoming_pb.js +0 -71
  126. package/dist/esm/genproto/mochabugapis/adapt/runtime/v1/incoming_pb.js.map +0 -1
  127. package/dist/esm/genproto/mochabugapis/adapt/runtime/v1/runtime_pb.js +0 -438
  128. package/dist/esm/genproto/mochabugapis/adapt/runtime/v1/runtime_pb.js.map +0 -1
  129. package/dist/esm/genproto/mochabugapis/adapt/runtime/v1/store_pb.js +0 -91
  130. package/dist/esm/genproto/mochabugapis/adapt/runtime/v1/store_pb.js.map +0 -1
  131. package/dist/esm/pubsub-client.js +0 -559
  132. package/dist/esm/pubsub-client.js.map +0 -1
  133. package/dist/types/genproto/buf/validate/validate_pb.d.ts +0 -8490
  134. package/dist/types/genproto/google/api/annotations_pb.d.ts +0 -13
  135. package/dist/types/genproto/google/api/client_pb.d.ts +0 -1431
  136. package/dist/types/genproto/google/api/http_pb.d.ts +0 -842
  137. package/dist/types/genproto/google/api/launch_stage_pb.d.ts +0 -93
  138. package/dist/types/genproto/mochabugapis/adapt/automations/v1/automations_pb.d.ts +0 -1043
  139. package/dist/types/genproto/mochabugapis/adapt/graph/exchange_pb.d.ts +0 -76
  140. package/dist/types/genproto/mochabugapis/adapt/graph/jtd_schema_pb.d.ts +0 -400
  141. package/dist/types/genproto/mochabugapis/adapt/graph/receiver_pb.d.ts +0 -68
  142. package/dist/types/genproto/mochabugapis/adapt/graph/signal_binding_pb.d.ts +0 -429
  143. package/dist/types/genproto/mochabugapis/adapt/graph/signal_data_pb.d.ts +0 -197
  144. package/dist/types/genproto/mochabugapis/adapt/graph/signal_descriptor_pb.d.ts +0 -160
  145. package/dist/types/genproto/mochabugapis/adapt/graph/signal_format_pb.d.ts +0 -304
  146. package/dist/types/genproto/mochabugapis/adapt/graph/transceiver_pb.d.ts +0 -76
  147. package/dist/types/genproto/mochabugapis/adapt/graph/transmitter_pb.d.ts +0 -119
  148. package/dist/types/genproto/mochabugapis/adapt/graph/vertex_metadata_pb.d.ts +0 -98
  149. package/dist/types/genproto/mochabugapis/adapt/plugins/v1/compound_services_pb.d.ts +0 -346
  150. package/dist/types/genproto/mochabugapis/adapt/plugins/v1/file_pb.d.ts +0 -63
  151. package/dist/types/genproto/mochabugapis/adapt/plugins/v1/http_proxy_service_pb.d.ts +0 -1281
  152. package/dist/types/genproto/mochabugapis/adapt/plugins/v1/manifest_pb.d.ts +0 -387
  153. package/dist/types/genproto/mochabugapis/adapt/plugins/v1/oauth2_service_pb.d.ts +0 -804
  154. package/dist/types/genproto/mochabugapis/adapt/plugins/v1/plugins_pb.d.ts +0 -237
  155. package/dist/types/genproto/mochabugapis/adapt/plugins/v1/service_definition_pb.d.ts +0 -240
  156. package/dist/types/genproto/mochabugapis/adapt/plugins/v1/service_settings_pb.d.ts +0 -538
  157. package/dist/types/genproto/mochabugapis/adapt/plugins/v1/variable_service_pb.d.ts +0 -189
  158. package/dist/types/genproto/mochabugapis/adapt/plugins/v1/vertex_pb.d.ts +0 -268
  159. package/dist/types/genproto/mochabugapis/adapt/runtime/v1/incoming_pb.d.ts +0 -338
  160. package/dist/types/genproto/mochabugapis/adapt/runtime/v1/runtime_pb.d.ts +0 -2720
  161. package/dist/types/genproto/mochabugapis/adapt/runtime/v1/store_pb.d.ts +0 -871
  162. package/dist/types/pubsub-client.d.ts +0 -59
@@ -1,566 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.PubsubClient = exports.ConnectionState = void 0;
7
- const protobuf_1 = require("@bufbuild/protobuf");
8
- const wkt_1 = require("@bufbuild/protobuf/wkt");
9
- const isomorphic_ws_1 = __importDefault(require("isomorphic-ws"));
10
- const uuid_1 = require("uuid");
11
- const automations_pb_js_1 = require("./genproto/mochabugapis/adapt/automations/v1/automations_pb.js");
12
- const index_js_1 = require("./index.js");
13
- // Connection states
14
- var ConnectionState;
15
- (function (ConnectionState) {
16
- ConnectionState["DISCONNECTED"] = "disconnected";
17
- ConnectionState["CONNECTING"] = "connecting";
18
- ConnectionState["CONNECTED"] = "connected";
19
- ConnectionState["CLOSING"] = "closing";
20
- })(ConnectionState || (exports.ConnectionState = ConnectionState = {}));
21
- // WebSocket close codes (following RFC 6455)
22
- var CloseCode;
23
- (function (CloseCode) {
24
- CloseCode[CloseCode["NORMAL"] = 1000] = "NORMAL";
25
- CloseCode[CloseCode["GOING_AWAY"] = 1001] = "GOING_AWAY";
26
- CloseCode[CloseCode["PROTOCOL_ERROR"] = 1002] = "PROTOCOL_ERROR";
27
- CloseCode[CloseCode["UNSUPPORTED_DATA"] = 1003] = "UNSUPPORTED_DATA";
28
- CloseCode[CloseCode["ABNORMAL"] = 1006] = "ABNORMAL";
29
- CloseCode[CloseCode["POLICY_VIOLATION"] = 1008] = "POLICY_VIOLATION";
30
- CloseCode[CloseCode["SERVER_RESTART"] = 1012] = "SERVER_RESTART";
31
- CloseCode[CloseCode["TRY_AGAIN_LATER"] = 1013] = "TRY_AGAIN_LATER";
32
- CloseCode[CloseCode["BAD_GATEWAY"] = 1014] = "BAD_GATEWAY";
33
- CloseCode[CloseCode["TLS_HANDSHAKE"] = 1015] = "TLS_HANDSHAKE";
34
- })(CloseCode || (CloseCode = {}));
35
- // Logger class for consistent logging
36
- class Logger {
37
- constructor(debug) {
38
- this.debug = debug;
39
- }
40
- log(level, message, data) {
41
- if (!this.debug && level === "debug")
42
- return;
43
- const timestamp = new Date().toISOString();
44
- const prefix = `[PubSub ${timestamp}]`;
45
- const fullMessage = `${prefix} ${message}`;
46
- if (data !== undefined) {
47
- console[level](fullMessage, data);
48
- }
49
- else {
50
- console[level](fullMessage);
51
- }
52
- }
53
- }
54
- // ACK tracker to prevent duplicate message processing
55
- class AckTracker {
56
- constructor(logger) {
57
- this.logger = logger;
58
- this.ackedMessages = new Map();
59
- this.MESSAGE_TTL = 60000; // 60 seconds
60
- this.cleanupTimer = null;
61
- }
62
- start() {
63
- // Cleanup old messages every 30 seconds
64
- this.cleanupTimer = setInterval(() => this.cleanup(), 30000);
65
- }
66
- stop() {
67
- if (this.cleanupTimer) {
68
- clearInterval(this.cleanupTimer);
69
- this.cleanupTimer = null;
70
- }
71
- this.ackedMessages.clear();
72
- }
73
- isProcessed(messageId) {
74
- return this.ackedMessages.has(messageId);
75
- }
76
- markProcessed(messageId) {
77
- this.ackedMessages.set(messageId, Date.now());
78
- }
79
- cleanup() {
80
- const now = Date.now();
81
- const deadline = now - this.MESSAGE_TTL;
82
- let removed = 0;
83
- for (const [messageId, timestamp] of this.ackedMessages.entries()) {
84
- if (timestamp < deadline) {
85
- this.ackedMessages.delete(messageId);
86
- removed++;
87
- }
88
- }
89
- if (removed > 0) {
90
- this.logger.log("debug", `Cleaned up ${removed} old ACKed messages`);
91
- }
92
- }
93
- }
94
- // Reconnection manager with exponential backoff
95
- class ReconnectionManager {
96
- constructor(logger) {
97
- this.logger = logger;
98
- this.attempts = 0;
99
- this.timer = null;
100
- this.FAST_INITIAL_DELAY = 50; // 50ms for first 10 attempts
101
- this.FAST_ATTEMPTS_THRESHOLD = 10; // First 10 attempts are fast
102
- this.SLOW_INITIAL_DELAY = 1000; // 1 second after fast attempts
103
- this.MAX_DELAY = 30000; // 30 seconds
104
- this.MAX_ATTEMPTS = -1; // -1 = infinite
105
- }
106
- reset() {
107
- this.attempts = 0;
108
- this.cancel();
109
- }
110
- cancel() {
111
- if (this.timer) {
112
- clearTimeout(this.timer);
113
- this.timer = null;
114
- }
115
- }
116
- scheduleReconnect(callback, immediate = false) {
117
- if (this.MAX_ATTEMPTS !== -1 && this.attempts >= this.MAX_ATTEMPTS) {
118
- this.logger.log("error", "Max reconnection attempts reached");
119
- return false;
120
- }
121
- this.attempts++;
122
- // Calculate delay with fast exponential backoff for first 10 attempts
123
- let delay;
124
- if (immediate) {
125
- // Immediate reconnection for server restart
126
- delay = 0;
127
- this.logger.log("info", "Scheduling immediate reconnect (server restart)");
128
- }
129
- else if (this.attempts <= this.FAST_ATTEMPTS_THRESHOLD) {
130
- // Fast reconnection: 50 => 100 => 200 => 400 => 800 => 1600 => 3200 => 6400 => 12800 => 25600
131
- delay = this.FAST_INITIAL_DELAY * Math.pow(2, this.attempts - 1);
132
- }
133
- else {
134
- // After fast attempts, use slower backoff starting from SLOW_INITIAL_DELAY
135
- const slowAttempt = this.attempts - this.FAST_ATTEMPTS_THRESHOLD;
136
- delay = this.SLOW_INITIAL_DELAY * Math.pow(2, slowAttempt - 1);
137
- }
138
- // Cap at MAX_DELAY (except for immediate reconnects)
139
- if (!immediate) {
140
- delay = Math.min(delay, this.MAX_DELAY);
141
- }
142
- if (!immediate) {
143
- this.logger.log("info", `Scheduling reconnect attempt ${this.attempts} in ${delay}ms`);
144
- }
145
- this.timer = setTimeout(() => {
146
- this.timer = null;
147
- callback();
148
- }, delay);
149
- return true;
150
- }
151
- }
152
- // WebSocket connection manager
153
- class WebSocketManager {
154
- constructor(logger) {
155
- this.logger = logger;
156
- this.ws = null;
157
- this.closePromise = null;
158
- this.closeResolve = null;
159
- }
160
- connect(url, onOpen, onMessage, onClose, onError) {
161
- if (this.ws) {
162
- throw new Error("WebSocket already exists");
163
- }
164
- this.logger.log("info", `Connecting to: ${url}`);
165
- // Create a promise that resolves when the WebSocket closes
166
- this.closePromise = new Promise((resolve) => {
167
- this.closeResolve = resolve;
168
- });
169
- this.ws = new isomorphic_ws_1.default(url);
170
- this.ws.binaryType = "arraybuffer";
171
- this.ws.onopen = () => {
172
- this.logger.log("info", "✓ WebSocket connected");
173
- onOpen();
174
- };
175
- this.ws.onmessage = (event) => {
176
- if (event.data instanceof ArrayBuffer) {
177
- onMessage(event.data);
178
- }
179
- else if (event.data instanceof Blob) {
180
- // Handle Blob data (some browsers may return Blob instead of ArrayBuffer)
181
- event.data
182
- .arrayBuffer()
183
- .then(onMessage)
184
- .catch((error) => {
185
- this.logger.log("error", "Failed to convert Blob to ArrayBuffer:", error);
186
- });
187
- }
188
- else {
189
- this.logger.log("warn", "Received non-binary message, ignoring");
190
- }
191
- };
192
- this.ws.onerror = (error) => {
193
- this.logger.log("error", "WebSocket error:", error);
194
- onError(error);
195
- };
196
- this.ws.onclose = (event) => {
197
- this.logger.log("info", `WebSocket closed: ${event.code} - ${event.reason}`);
198
- onClose(event.code, event.reason);
199
- this.ws = null;
200
- // Resolve the close promise
201
- this.closeResolve();
202
- this.closeResolve = null;
203
- this.closePromise = null;
204
- };
205
- }
206
- sendAck(messageId) {
207
- if (!this.isConnected()) {
208
- this.logger.log("warn", `Cannot send ACK (not connected): ${messageId}`);
209
- return false;
210
- }
211
- try {
212
- // Parse UUID string to bytes (16 bytes)
213
- const uuid = new Uint8Array((0, uuid_1.parse)(messageId));
214
- this.ws.send(uuid);
215
- this.logger.log("debug", `Sent ACK: ${messageId}`);
216
- return true;
217
- }
218
- catch (error) {
219
- this.logger.log("error", `Failed to send ACK for ${messageId}:`, error);
220
- return false;
221
- }
222
- }
223
- async close(code = CloseCode.NORMAL, reason = "Client disconnecting") {
224
- if (!this.ws) {
225
- return;
226
- }
227
- if (this.ws.readyState === isomorphic_ws_1.default.OPEN ||
228
- this.ws.readyState === isomorphic_ws_1.default.CONNECTING) {
229
- this.ws.close(code, reason);
230
- }
231
- await this.closePromise;
232
- }
233
- isConnected() {
234
- return this.ws !== null && this.ws.readyState === isomorphic_ws_1.default.OPEN;
235
- }
236
- }
237
- // Message processor for handling incoming WebSocket messages
238
- class MessageProcessor {
239
- constructor(logger, handlers) {
240
- this.logger = logger;
241
- this.handlers = handlers;
242
- this.sessionEnded = false;
243
- }
244
- process(data) {
245
- try {
246
- const message = (0, protobuf_1.fromBinary)(automations_pb_js_1.WebsocketMessageSchema, new Uint8Array(data));
247
- this.logger.log("debug", `Processing message: ${message.id}`);
248
- // Process based on message type
249
- switch (message.message.case) {
250
- case "output":
251
- this.processOutput(message.message.value);
252
- break;
253
- case "session":
254
- this.processSession(message.message.value);
255
- break;
256
- case "url":
257
- this.processUrl(message.message.value);
258
- break;
259
- default:
260
- this.logger.log("warn", `Unknown message type: ${message.message.case}`);
261
- }
262
- return { messageId: message.id, sessionEnded: this.sessionEnded };
263
- }
264
- catch (error) {
265
- this.logger.log("error", "Failed to process message:", error);
266
- return { messageId: null, sessionEnded: this.sessionEnded };
267
- }
268
- }
269
- hasSessionEnded() {
270
- return this.sessionEnded;
271
- }
272
- processOutput(output) {
273
- if (!this.handlers.onOutput)
274
- return;
275
- try {
276
- const result = {
277
- vertex: output.vertex,
278
- fork: output.fork,
279
- data: output.data,
280
- };
281
- if (output.created) {
282
- result.created = (0, wkt_1.timestampDate)(output.created);
283
- }
284
- this.handlers.onOutput(result);
285
- }
286
- catch (error) {
287
- this.logger.log("error", "Error in output handler:", error);
288
- }
289
- }
290
- processSession(session) {
291
- // Check for terminal status
292
- switch (session.status) {
293
- case automations_pb_js_1.Status.STOPPED:
294
- case automations_pb_js_1.Status.COMPLETED:
295
- case automations_pb_js_1.Status.ERRORED:
296
- case automations_pb_js_1.Status.EXPIRED:
297
- this.sessionEnded = true;
298
- this.logger.log("info", `Session ended with status: ${automations_pb_js_1.Status[session.status]}`);
299
- break;
300
- }
301
- if (!this.handlers.onSession)
302
- return;
303
- try {
304
- this.handlers.onSession((0, protobuf_1.toJson)(automations_pb_js_1.SessionSchema, session));
305
- }
306
- catch (error) {
307
- this.logger.log("error", "Error in session handler:", error);
308
- }
309
- }
310
- processUrl(url) {
311
- if (!this.handlers.onUrl)
312
- return;
313
- try {
314
- this.handlers.onUrl((0, protobuf_1.toJson)(automations_pb_js_1.UrlSchema, url));
315
- }
316
- catch (error) {
317
- this.logger.log("error", "Error in URL handler:", error);
318
- }
319
- }
320
- }
321
- // Main PubsubClient class
322
- class PubsubClient {
323
- constructor(debug = false) {
324
- this.state = ConnectionState.DISCONNECTED;
325
- this.sessionInfo = null;
326
- this.messageProcessor = null;
327
- this.shouldReconnect = true;
328
- this.sessionComplete = false;
329
- this.logger = new Logger(debug);
330
- this.ackTracker = new AckTracker(this.logger);
331
- this.reconnectManager = new ReconnectionManager(this.logger);
332
- this.wsManager = new WebSocketManager(this.logger);
333
- }
334
- async subscribe(opts) {
335
- this.logger.log("debug", "Subscribe called", {
336
- automation: opts.id,
337
- hasToken: !!opts.sessionToken,
338
- });
339
- // Validate input
340
- if (!opts.sessionToken || !opts.id) {
341
- throw new Error("Session token and automation are required");
342
- }
343
- // Check if already connected to same session
344
- if (this.isSameSession(opts)) {
345
- this.logger.log("debug", "Already connected to same session, updating handlers");
346
- this.updateHandlers(opts);
347
- return;
348
- }
349
- // Check state
350
- if (this.state === ConnectionState.CONNECTING) {
351
- throw new Error("Already connecting, please wait");
352
- }
353
- // Disconnect if connected to different session
354
- if (this.state === ConnectionState.CONNECTED) {
355
- await this.unsubscribe();
356
- }
357
- // Store configuration
358
- this.sessionInfo = {
359
- token: opts.sessionToken,
360
- id: opts.id,
361
- };
362
- // Create message processor with handlers
363
- const handlers = {};
364
- if (opts.onOutput)
365
- handlers.onOutput = opts.onOutput;
366
- if (opts.onSession)
367
- handlers.onSession = opts.onSession;
368
- if (opts.onUrl)
369
- handlers.onUrl = opts.onUrl;
370
- this.messageProcessor = new MessageProcessor(this.logger, handlers);
371
- // Reset state
372
- this.shouldReconnect = true;
373
- this.sessionComplete = false;
374
- this.reconnectManager.reset();
375
- // Start ACK tracker
376
- this.ackTracker.start();
377
- // Connect
378
- await this.connect();
379
- }
380
- async unsubscribe() {
381
- if (this.state === ConnectionState.DISCONNECTED ||
382
- this.state === ConnectionState.CLOSING) {
383
- return;
384
- }
385
- this.logger.log("info", "Unsubscribing...");
386
- // Update state
387
- this.state = ConnectionState.CLOSING;
388
- this.shouldReconnect = false;
389
- // Cancel any pending reconnects
390
- this.reconnectManager.cancel();
391
- // Close WebSocket and wait for it to fully close
392
- await this.wsManager.close();
393
- // Stop ACK tracker
394
- this.ackTracker.stop();
395
- // Clear state
396
- this.sessionInfo = null;
397
- this.messageProcessor = null;
398
- this.state = ConnectionState.DISCONNECTED;
399
- this.logger.log("info", "Unsubscribed successfully");
400
- }
401
- isConnected() {
402
- return this.state === ConnectionState.CONNECTED;
403
- }
404
- getConnectionState() {
405
- return this.state;
406
- }
407
- getSessionInfo() {
408
- if (!this.sessionInfo) {
409
- throw new Error("No active session");
410
- }
411
- return this.sessionInfo;
412
- }
413
- async connect() {
414
- if (!this.sessionInfo) {
415
- throw new Error("No session configuration");
416
- }
417
- this.state = ConnectionState.CONNECTING;
418
- const config = (0, index_js_1.getConfig)();
419
- const wsUrl = `${config.wsBaseUrl}/${this.sessionInfo.id}/ws?token=${encodeURIComponent(this.sessionInfo.token)}`;
420
- try {
421
- this.wsManager.connect(wsUrl, () => this.handleOpen(), (data) => this.handleMessage(data), (code, reason) => this.handleClose(code, reason), (error) => this.handleError(error));
422
- }
423
- catch (error) {
424
- this.state = ConnectionState.DISCONNECTED;
425
- throw error;
426
- }
427
- }
428
- handleOpen() {
429
- this.state = ConnectionState.CONNECTED;
430
- this.reconnectManager.reset();
431
- }
432
- handleMessage(data) {
433
- if (!this.messageProcessor) {
434
- this.logger.log("error", "No message processor configured");
435
- return;
436
- }
437
- // Process the message
438
- const result = this.messageProcessor.process(data);
439
- if (!result.messageId) {
440
- return; // Failed to parse
441
- }
442
- // Update session complete flag if session ended
443
- if (result.sessionEnded && !this.sessionComplete) {
444
- this.logger.log("info", "Session has ended (detected from message)");
445
- this.sessionComplete = true;
446
- }
447
- // Check for duplicate
448
- if (this.ackTracker.isProcessed(result.messageId)) {
449
- this.logger.log("debug", `Duplicate message: ${result.messageId}`);
450
- }
451
- else {
452
- this.ackTracker.markProcessed(result.messageId);
453
- }
454
- // ACK the message (skip for session-ending messages as connection will close)
455
- if (!result.sessionEnded) {
456
- this.wsManager.sendAck(result.messageId);
457
- }
458
- }
459
- handleClose(code, reason) {
460
- this.state = ConnectionState.DISCONNECTED;
461
- // Analyze close code
462
- const reconnectStrategy = this.analyzeCloseCode(code, reason);
463
- // Schedule reconnect if appropriate
464
- if (reconnectStrategy.shouldReconnect &&
465
- this.shouldReconnect &&
466
- !this.sessionComplete) {
467
- this.scheduleReconnect(reconnectStrategy.immediate);
468
- }
469
- else {
470
- // Clean shutdown (fire and forget - cleanup is async but we don't need to wait)
471
- this.cleanup().catch((error) => {
472
- this.logger.log("error", "Error during cleanup:", error);
473
- });
474
- }
475
- }
476
- handleError(error) {
477
- this.logger.log("error", "WebSocket error:", error);
478
- }
479
- analyzeCloseCode(code, reason) {
480
- switch (code) {
481
- case CloseCode.NORMAL:
482
- // Normal closure - session complete or client requested
483
- this.logger.log("info", "Normal closure");
484
- this.sessionComplete = true;
485
- return { shouldReconnect: false, immediate: false };
486
- case CloseCode.GOING_AWAY:
487
- // Server shutting down
488
- this.logger.log("warn", "Server going away");
489
- return { shouldReconnect: true, immediate: false };
490
- case CloseCode.SERVER_RESTART:
491
- // Server restart - reconnect immediately (no backoff)
492
- this.logger.log("warn", "Server restarting - will reconnect immediately");
493
- return { shouldReconnect: true, immediate: true };
494
- case CloseCode.TRY_AGAIN_LATER:
495
- // Service temporarily unavailable - reconnect with backoff
496
- this.logger.log("warn", "Service temporarily unavailable, will retry");
497
- return { shouldReconnect: true, immediate: false };
498
- case CloseCode.PROTOCOL_ERROR:
499
- case CloseCode.UNSUPPORTED_DATA:
500
- case CloseCode.POLICY_VIOLATION:
501
- // Critical errors - don't reconnect
502
- this.logger.log("error", `Critical error (${code}): ${reason}`);
503
- return { shouldReconnect: false, immediate: false };
504
- case CloseCode.ABNORMAL:
505
- // Connection lost - try to reconnect
506
- this.logger.log("warn", "Connection lost (abnormal closure)");
507
- return { shouldReconnect: true, immediate: false };
508
- default:
509
- // Unknown code - try to reconnect
510
- this.logger.log("warn", `Unknown close code ${code}: ${reason}`);
511
- return { shouldReconnect: true, immediate: false };
512
- }
513
- }
514
- scheduleReconnect(immediate = false) {
515
- const scheduled = this.reconnectManager.scheduleReconnect(() => {
516
- // Double-check state to avoid race conditions
517
- if (this.shouldReconnect &&
518
- this.state === ConnectionState.DISCONNECTED &&
519
- !this.sessionComplete) {
520
- this.connect().catch((error) => {
521
- this.logger.log("error", "Reconnection failed:", error);
522
- // Try again with normal backoff (not immediate)
523
- this.scheduleReconnect(false);
524
- });
525
- }
526
- }, immediate);
527
- if (!scheduled) {
528
- // Max attempts reached (fire and forget cleanup)
529
- this.cleanup().catch((error) => {
530
- this.logger.log("error", "Error during cleanup:", error);
531
- });
532
- }
533
- }
534
- async cleanup() {
535
- this.shouldReconnect = false;
536
- this.reconnectManager.cancel();
537
- this.ackTracker.stop();
538
- await this.wsManager.close();
539
- this.sessionInfo = null;
540
- this.messageProcessor = null;
541
- this.state = ConnectionState.DISCONNECTED;
542
- }
543
- isSameSession(opts) {
544
- if (!this.sessionInfo || this.state !== ConnectionState.CONNECTED) {
545
- return false;
546
- }
547
- return (this.sessionInfo.token === opts.sessionToken &&
548
- this.sessionInfo.id === opts.id);
549
- }
550
- updateHandlers(opts) {
551
- if (!this.messageProcessor) {
552
- return;
553
- }
554
- // Update handlers in message processor
555
- const handlers = {};
556
- if (opts.onOutput)
557
- handlers.onOutput = opts.onOutput;
558
- if (opts.onSession)
559
- handlers.onSession = opts.onSession;
560
- if (opts.onUrl)
561
- handlers.onUrl = opts.onUrl;
562
- this.messageProcessor = new MessageProcessor(this.logger, handlers);
563
- }
564
- }
565
- exports.PubsubClient = PubsubClient;
566
- //# sourceMappingURL=pubsub-client.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"pubsub-client.js","sourceRoot":"","sources":["../../src/pubsub-client.ts"],"names":[],"mappings":"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"}