@reactoo/watchtogether-sdk-js 2.7.49 → 2.7.50

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.
@@ -0,0 +1,222 @@
1
+ import { mqtt, iot } from 'aws-iot-device-sdk-v2';
2
+ import { Buffer } from 'buffer';
3
+ import process from 'process';
4
+
5
+ // Provide a global object for the worker environment
6
+ self.global = self;
7
+ self.Buffer = Buffer;
8
+ self.process = process;
9
+ console.log('Worker: Starting up');
10
+ let connection = null;
11
+ self.onmessage = function (event) {
12
+ const {
13
+ type,
14
+ params,
15
+ topic,
16
+ message
17
+ } = event.data;
18
+ console.log(`Worker: Received message of type: ${type}`);
19
+ switch (type) {
20
+ case 'connect':
21
+ connect(params);
22
+ break;
23
+ case 'disconnect':
24
+ disconnect();
25
+ break;
26
+ case 'is_connected':
27
+ isConnected();
28
+ break;
29
+ case 'clear_topics':
30
+ // No action needed in the worker
31
+ break;
32
+ case 'subscribe':
33
+ subscribe(topic);
34
+ break;
35
+ case 'unsubscribe':
36
+ unsubscribe(topic);
37
+ break;
38
+ case 'send':
39
+ send(topic, message);
40
+ break;
41
+ }
42
+ };
43
+ function connect(params) {
44
+ console.log('Worker: Attempting to connect');
45
+ const {
46
+ apiMqttUrl,
47
+ apiMqttClientId,
48
+ region,
49
+ accessKeyId,
50
+ secretAccessKey,
51
+ sessionToken
52
+ } = params;
53
+ const configBuilder = iot.AwsIotMqttConnectionConfigBuilder.new_with_websockets();
54
+ configBuilder.with_clean_session(true);
55
+ configBuilder.with_client_id(apiMqttClientId);
56
+ configBuilder.with_endpoint(apiMqttUrl);
57
+ configBuilder.with_credentials(region, accessKeyId, secretAccessKey, sessionToken);
58
+ configBuilder.with_keep_alive_seconds(30);
59
+ configBuilder.with_ping_timeout_ms(3000);
60
+ configBuilder.with_reconnect_max_sec(5);
61
+ configBuilder.with_reconnect_min_sec(1);
62
+ const config = configBuilder.build();
63
+ const client = new mqtt.MqttClient();
64
+ connection = client.new_connection(config);
65
+ setupConnectionListeners();
66
+ connection.connect().then(() => {
67
+ console.log('Worker: Connection successful');
68
+ self.postMessage({
69
+ type: 'connect_result',
70
+ success: true
71
+ });
72
+ }).catch(error => {
73
+ console.error('Worker: Connection failed', error);
74
+ self.postMessage({
75
+ type: 'connect_result',
76
+ success: false,
77
+ error: error.message
78
+ });
79
+ });
80
+ }
81
+ function disconnect() {
82
+ if (connection) {
83
+ connection.disconnect().then(() => {
84
+ self.postMessage({
85
+ type: 'disconnect_result',
86
+ success: true
87
+ });
88
+ }).catch(error => {
89
+ self.postMessage({
90
+ type: 'disconnect_result',
91
+ success: false,
92
+ error: error.message
93
+ });
94
+ });
95
+ } else {
96
+ self.postMessage({
97
+ type: 'disconnect_result',
98
+ success: true
99
+ });
100
+ }
101
+ }
102
+ function isConnected() {
103
+ const connected = connection && connection.currentState === 0 && connection.desiredState === 0;
104
+ self.postMessage({
105
+ type: 'is_connected_result',
106
+ connected
107
+ });
108
+ }
109
+ function subscribe(topic) {
110
+ if (connection && connection.currentState === 0 && connection.desiredState === 0) {
111
+ connection.subscribe(topic, mqtt.QoS.AtLeastOnce).then(() => {
112
+ self.postMessage({
113
+ type: 'subscribe_result',
114
+ success: true
115
+ });
116
+ }).catch(error => {
117
+ self.postMessage({
118
+ type: 'subscribe_result',
119
+ success: false,
120
+ error: error.message
121
+ });
122
+ });
123
+ } else {
124
+ self.postMessage({
125
+ type: 'subscribe_result',
126
+ success: false,
127
+ error: 'Not connected'
128
+ });
129
+ }
130
+ }
131
+ function unsubscribe(topic) {
132
+ if (connection && connection.currentState === 0 && connection.desiredState === 0) {
133
+ connection.unsubscribe(topic).then(() => {
134
+ self.postMessage({
135
+ type: 'unsubscribe_result',
136
+ success: true
137
+ });
138
+ }).catch(error => {
139
+ self.postMessage({
140
+ type: 'unsubscribe_result',
141
+ success: false,
142
+ error: error.message
143
+ });
144
+ });
145
+ } else {
146
+ self.postMessage({
147
+ type: 'unsubscribe_result',
148
+ success: false,
149
+ error: 'Not connected'
150
+ });
151
+ }
152
+ }
153
+ function send(topic, message) {
154
+ if (connection && connection.currentState === 0 && connection.desiredState === 0) {
155
+ connection.publish(topic, message, mqtt.QoS.AtLeastOnce, false);
156
+ } else {
157
+ console.error('Cannot send message: Not connected');
158
+ }
159
+ }
160
+ function setupConnectionListeners() {
161
+ connection.on('connect', () => {
162
+ self.postMessage({
163
+ type: 'connect'
164
+ });
165
+ });
166
+ connection.on('disconnect', () => {
167
+ self.postMessage({
168
+ type: 'disconnect'
169
+ });
170
+ });
171
+ connection.on('error', error => {
172
+ self.postMessage({
173
+ type: 'error',
174
+ data: error
175
+ });
176
+ });
177
+ connection.on('interrupt', error => {
178
+ self.postMessage({
179
+ type: 'interrupt',
180
+ data: error
181
+ });
182
+ });
183
+ connection.on('resume', error => {
184
+ self.postMessage({
185
+ type: 'resume',
186
+ data: error
187
+ });
188
+ });
189
+ connection.on('message', (topic, payload) => {
190
+ self.postMessage({
191
+ type: 'message',
192
+ data: {
193
+ topic,
194
+ payload
195
+ }
196
+ });
197
+ });
198
+ connection.on('connection_success', error => {
199
+ self.postMessage({
200
+ type: 'connection_success',
201
+ data: error
202
+ });
203
+ });
204
+ connection.on('connection_failure', error => {
205
+ self.postMessage({
206
+ type: 'connection_failure',
207
+ data: error
208
+ });
209
+ });
210
+
211
+ // Add a general error handler for uncaught exceptions
212
+ self.addEventListener('error', error => {
213
+ console.error('Worker: Uncaught error', error);
214
+ self.postMessage({
215
+ type: 'uncaught_error',
216
+ error: error.message
217
+ });
218
+ });
219
+ }
220
+
221
+ // Add this at the end of the file
222
+ console.log('Worker: Setup complete');