skikrumb-api 2.1.1 → 2.1.2
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/dist/index.js +27 -16
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -20,7 +20,9 @@ class SkiKrumbRealtimeClient {
|
|
|
20
20
|
return Promise.resolve();
|
|
21
21
|
}
|
|
22
22
|
// Additional guard: check if we're already connecting or connected
|
|
23
|
-
if (this.websocket &&
|
|
23
|
+
if (this.websocket &&
|
|
24
|
+
(this.websocket.readyState === WebSocket.CONNECTING ||
|
|
25
|
+
this.websocket.readyState === WebSocket.OPEN)) {
|
|
24
26
|
return Promise.resolve();
|
|
25
27
|
}
|
|
26
28
|
// Clean up any stale websocket before creating new one
|
|
@@ -39,7 +41,8 @@ class SkiKrumbRealtimeClient {
|
|
|
39
41
|
connectToWebSocket() {
|
|
40
42
|
return new Promise((resolve, reject) => {
|
|
41
43
|
try {
|
|
42
|
-
const baseWsUrl = this.url.replace(/^https/, 'wss').replace(/^http/, 'ws') +
|
|
44
|
+
const baseWsUrl = this.url.replace(/^https/, 'wss').replace(/^http/, 'ws') +
|
|
45
|
+
'/realtime';
|
|
43
46
|
let wsUrl = `${baseWsUrl}?token=${encodeURIComponent(this.sessionToken)}`;
|
|
44
47
|
if (this.supabaseToken) {
|
|
45
48
|
wsUrl += `&supabaseToken=${encodeURIComponent(this.supabaseToken)}`;
|
|
@@ -59,7 +62,8 @@ class SkiKrumbRealtimeClient {
|
|
|
59
62
|
this.emit('connected', message);
|
|
60
63
|
resolve();
|
|
61
64
|
}
|
|
62
|
-
else if (message.type === 'auth_error' ||
|
|
65
|
+
else if (message.type === 'auth_error' ||
|
|
66
|
+
message.type === 'error') {
|
|
63
67
|
console.error('❌ Authentication/Connection failed:', message.message || message.error);
|
|
64
68
|
(_a = this.websocket) === null || _a === void 0 ? void 0 : _a.close();
|
|
65
69
|
reject(new Error(`Connection failed: ${message.message || message.error}`));
|
|
@@ -77,12 +81,18 @@ class SkiKrumbRealtimeClient {
|
|
|
77
81
|
// Transform device data to match expected React Native format
|
|
78
82
|
const deviceData = {
|
|
79
83
|
...message.data,
|
|
80
|
-
device_id: ((_b = message.data.deveui) === null || _b === void 0 ? void 0 : _b.replace(/'/g, '')) ||
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
84
|
+
device_id: ((_b = message.data.deveui) === null || _b === void 0 ? void 0 : _b.replace(/'/g, '')) ||
|
|
85
|
+
message.data.device_id,
|
|
86
|
+
serial_number: ((_c = message.data.serial_number) === null || _c === void 0 ? void 0 : _c.replace(/'/g, '')) ||
|
|
87
|
+
message.data.serial_number,
|
|
88
|
+
gps_fix: ((_d = message.data.gps_fix) === null || _d === void 0 ? void 0 : _d.replace(/'/g, '')) ||
|
|
89
|
+
message.data.gps_fix,
|
|
90
|
+
gateway_id: ((_e = message.data.gateway_uuid) === null || _e === void 0 ? void 0 : _e.replace(/'/g, '')) ||
|
|
91
|
+
message.data.gateway_id,
|
|
92
|
+
created_at: ((_f = message.data.recorded_at) === null || _f === void 0 ? void 0 : _f.replace(/'/g, '')) ||
|
|
93
|
+
message.data.created_at ||
|
|
94
|
+
message.timestamp,
|
|
95
|
+
timestamp: message.timestamp,
|
|
86
96
|
};
|
|
87
97
|
this.emit('device_data', deviceData);
|
|
88
98
|
}
|
|
@@ -103,7 +113,7 @@ class SkiKrumbRealtimeClient {
|
|
|
103
113
|
}
|
|
104
114
|
};
|
|
105
115
|
this.websocket.onerror = (error) => {
|
|
106
|
-
console.
|
|
116
|
+
console.warn('⚠️ Realtime connection event');
|
|
107
117
|
this.isConnecting = false;
|
|
108
118
|
this.emit('error', error);
|
|
109
119
|
reject(error);
|
|
@@ -161,7 +171,8 @@ class SkiKrumbRealtimeClient {
|
|
|
161
171
|
this.websocket.onerror = null;
|
|
162
172
|
this.websocket.onclose = null;
|
|
163
173
|
// Close the connection if it's still open
|
|
164
|
-
if (this.websocket.readyState === WebSocket.OPEN ||
|
|
174
|
+
if (this.websocket.readyState === WebSocket.OPEN ||
|
|
175
|
+
this.websocket.readyState === WebSocket.CONNECTING) {
|
|
165
176
|
this.websocket.close(1000, 'Manual disconnect');
|
|
166
177
|
}
|
|
167
178
|
this.websocket = null;
|
|
@@ -174,7 +185,10 @@ class SkiKrumbRealtimeClient {
|
|
|
174
185
|
}
|
|
175
186
|
requestRefresh() {
|
|
176
187
|
if (this.websocket && this.websocket.readyState === WebSocket.OPEN) {
|
|
177
|
-
this.websocket.send(JSON.stringify({
|
|
188
|
+
this.websocket.send(JSON.stringify({
|
|
189
|
+
type: 'request_refresh',
|
|
190
|
+
timestamp: new Date().toISOString(),
|
|
191
|
+
}));
|
|
178
192
|
}
|
|
179
193
|
}
|
|
180
194
|
on(event, callback) {
|
|
@@ -339,9 +353,7 @@ export const skiKrumb = (options = {
|
|
|
339
353
|
'x-client': options.requestedWith,
|
|
340
354
|
},
|
|
341
355
|
});
|
|
342
|
-
const response = await refreshRequest
|
|
343
|
-
.post('auth/external/refresh')
|
|
344
|
-
.json();
|
|
356
|
+
const response = await refreshRequest.post('auth/external/refresh').json();
|
|
345
357
|
return {
|
|
346
358
|
success: response.success,
|
|
347
359
|
sessionToken: response.sessionToken,
|
|
@@ -355,7 +367,6 @@ export const skiKrumb = (options = {
|
|
|
355
367
|
throw error;
|
|
356
368
|
}
|
|
357
369
|
};
|
|
358
|
-
// Sharing API endpoints
|
|
359
370
|
const createSharingLink = async (shareRequest) => {
|
|
360
371
|
try {
|
|
361
372
|
const requestWithAuth = ky.create({
|