@aerostack/sdk-web 0.8.4 → 0.8.5

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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=realtime.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"realtime.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/realtime.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,326 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const vitest_1 = require("vitest");
4
+ const realtime_js_1 = require("../realtime.js");
5
+ // ─── Mock WebSocket ───────────────────────────────────────────
6
+ class MockWebSocket {
7
+ constructor(url, protocols) {
8
+ this.readyState = MockWebSocket.OPEN;
9
+ this.onopen = null;
10
+ this.onmessage = null;
11
+ this.onclose = null;
12
+ this.onerror = null;
13
+ this.sent = [];
14
+ this.url = url;
15
+ this.protocols = protocols;
16
+ setTimeout(() => this.onopen?.(), 0);
17
+ }
18
+ send(data) {
19
+ this.sent.push(JSON.parse(data));
20
+ }
21
+ close() {
22
+ this.readyState = MockWebSocket.CLOSED;
23
+ setTimeout(() => this.onclose?.(), 0);
24
+ }
25
+ }
26
+ MockWebSocket.OPEN = 1;
27
+ MockWebSocket.CLOSED = 3;
28
+ (0, vitest_1.beforeEach)(() => {
29
+ vitest_1.vi.stubGlobal('WebSocket', MockWebSocket);
30
+ vitest_1.vi.stubGlobal('fetch', vitest_1.vi.fn());
31
+ vitest_1.vi.useFakeTimers();
32
+ });
33
+ (0, vitest_1.afterEach)(() => {
34
+ vitest_1.vi.restoreAllMocks();
35
+ vitest_1.vi.useRealTimers();
36
+ });
37
+ // ─── RealtimeSubscription ─────────────────────────────────────
38
+ (0, vitest_1.describe)('RealtimeSubscription', () => {
39
+ function createSub() {
40
+ const client = new realtime_js_1.RealtimeClient({
41
+ baseUrl: 'https://api.test.com/v1',
42
+ projectId: 'proj-1',
43
+ });
44
+ const sub = client.channel('users');
45
+ return { client, sub };
46
+ }
47
+ (0, vitest_1.it)('should register and fire INSERT callbacks', () => {
48
+ const { sub } = createSub();
49
+ const cb = vitest_1.vi.fn();
50
+ sub.on('INSERT', cb);
51
+ sub._emit({
52
+ type: 'db_change',
53
+ topic: sub.topic,
54
+ operation: 'INSERT',
55
+ data: { id: 1 },
56
+ });
57
+ (0, vitest_1.expect)(cb).toHaveBeenCalledOnce();
58
+ });
59
+ (0, vitest_1.it)('should fire wildcard callbacks', () => {
60
+ const { sub } = createSub();
61
+ const cb = vitest_1.vi.fn();
62
+ sub.on('*', cb);
63
+ sub._emit({
64
+ type: 'event',
65
+ topic: sub.topic,
66
+ event: 'custom',
67
+ data: {},
68
+ });
69
+ (0, vitest_1.expect)(cb).toHaveBeenCalledOnce();
70
+ });
71
+ (0, vitest_1.it)('should remove callbacks with off()', () => {
72
+ const { sub } = createSub();
73
+ const cb = vitest_1.vi.fn();
74
+ sub.on('INSERT', cb);
75
+ sub.off('INSERT', cb);
76
+ sub._emit({
77
+ type: 'db_change',
78
+ topic: sub.topic,
79
+ operation: 'INSERT',
80
+ data: {},
81
+ });
82
+ (0, vitest_1.expect)(cb).not.toHaveBeenCalled();
83
+ });
84
+ (0, vitest_1.it)('should be chainable', () => {
85
+ const { sub } = createSub();
86
+ (0, vitest_1.expect)(sub.on('INSERT', vitest_1.vi.fn())).toBe(sub);
87
+ (0, vitest_1.expect)(sub.off('INSERT', vitest_1.vi.fn())).toBe(sub);
88
+ });
89
+ (0, vitest_1.it)('should clear callbacks on unsubscribe', () => {
90
+ const { sub } = createSub();
91
+ const cb = vitest_1.vi.fn();
92
+ sub.on('INSERT', cb);
93
+ sub.subscribe();
94
+ sub.unsubscribe();
95
+ sub._emit({
96
+ type: 'db_change',
97
+ topic: sub.topic,
98
+ operation: 'INSERT',
99
+ data: {},
100
+ });
101
+ (0, vitest_1.expect)(cb).not.toHaveBeenCalled();
102
+ });
103
+ });
104
+ // ─── RealtimeClient ───────────────────────────────────────────
105
+ (0, vitest_1.describe)('RealtimeClient', () => {
106
+ (0, vitest_1.describe)('constructor', () => {
107
+ (0, vitest_1.it)('should start as idle', () => {
108
+ const client = new realtime_js_1.RealtimeClient({
109
+ baseUrl: 'https://api.test.com/v1',
110
+ projectId: 'proj-1',
111
+ });
112
+ (0, vitest_1.expect)(client.status).toBe('idle');
113
+ });
114
+ });
115
+ (0, vitest_1.describe)('connect', () => {
116
+ (0, vitest_1.it)('should connect successfully', async () => {
117
+ const client = new realtime_js_1.RealtimeClient({
118
+ baseUrl: 'https://api.test.com/v1',
119
+ projectId: 'proj-1',
120
+ });
121
+ const connectPromise = client.connect();
122
+ await vitest_1.vi.advanceTimersByTimeAsync(10);
123
+ await connectPromise;
124
+ (0, vitest_1.expect)(client.status).toBe('connected');
125
+ });
126
+ (0, vitest_1.it)('should pass apiKey via Sec-WebSocket-Protocol', async () => {
127
+ const client = new realtime_js_1.RealtimeClient({
128
+ baseUrl: 'https://api.test.com/v1',
129
+ projectId: 'proj-1',
130
+ apiKey: 'my-api-key',
131
+ });
132
+ const connectPromise = client.connect();
133
+ await vitest_1.vi.advanceTimersByTimeAsync(10);
134
+ await connectPromise;
135
+ (0, vitest_1.expect)(client.status).toBe('connected');
136
+ // apiKey should NOT be in URL query params (security)
137
+ });
138
+ (0, vitest_1.it)('should not duplicate connections', async () => {
139
+ const client = new realtime_js_1.RealtimeClient({
140
+ baseUrl: 'https://api.test.com/v1',
141
+ projectId: 'proj-1',
142
+ });
143
+ const p1 = client.connect();
144
+ const p2 = client.connect();
145
+ await vitest_1.vi.advanceTimersByTimeAsync(10);
146
+ await Promise.all([p1, p2]);
147
+ (0, vitest_1.expect)(client.status).toBe('connected');
148
+ });
149
+ (0, vitest_1.it)('should return immediately if already connected', async () => {
150
+ const client = new realtime_js_1.RealtimeClient({
151
+ baseUrl: 'https://api.test.com/v1',
152
+ projectId: 'proj-1',
153
+ });
154
+ const p1 = client.connect();
155
+ await vitest_1.vi.advanceTimersByTimeAsync(10);
156
+ await p1;
157
+ await client.connect(); // Should resolve immediately
158
+ (0, vitest_1.expect)(client.status).toBe('connected');
159
+ });
160
+ });
161
+ (0, vitest_1.describe)('disconnect', () => {
162
+ (0, vitest_1.it)('should set status to disconnected', async () => {
163
+ const client = new realtime_js_1.RealtimeClient({
164
+ baseUrl: 'https://api.test.com/v1',
165
+ projectId: 'proj-1',
166
+ });
167
+ const connectPromise = client.connect();
168
+ await vitest_1.vi.advanceTimersByTimeAsync(10);
169
+ await connectPromise;
170
+ client.disconnect();
171
+ (0, vitest_1.expect)(client.status).toBe('disconnected');
172
+ });
173
+ (0, vitest_1.it)('should be safe when not connected', () => {
174
+ const client = new realtime_js_1.RealtimeClient({
175
+ baseUrl: 'https://api.test.com/v1',
176
+ projectId: 'proj-1',
177
+ });
178
+ client.disconnect();
179
+ (0, vitest_1.expect)(client.status).toBe('disconnected');
180
+ });
181
+ });
182
+ (0, vitest_1.describe)('channel', () => {
183
+ (0, vitest_1.it)('should qualify topic with projectId', () => {
184
+ const client = new realtime_js_1.RealtimeClient({
185
+ baseUrl: 'https://api.test.com/v1',
186
+ projectId: 'proj-1',
187
+ });
188
+ const sub = client.channel('users');
189
+ (0, vitest_1.expect)(sub.topic).toBe('table/users/proj-1');
190
+ });
191
+ (0, vitest_1.it)('should reuse subscriptions', () => {
192
+ const client = new realtime_js_1.RealtimeClient({
193
+ baseUrl: 'https://api.test.com/v1',
194
+ projectId: 'proj-1',
195
+ });
196
+ const sub1 = client.channel('users');
197
+ const sub2 = client.channel('users');
198
+ (0, vitest_1.expect)(sub1).toBe(sub2);
199
+ });
200
+ (0, vitest_1.it)('should not double-qualify', () => {
201
+ const client = new realtime_js_1.RealtimeClient({
202
+ baseUrl: 'https://api.test.com/v1',
203
+ projectId: 'proj-1',
204
+ });
205
+ const sub = client.channel('table/users/proj-1');
206
+ (0, vitest_1.expect)(sub.topic).toBe('table/users/proj-1');
207
+ });
208
+ });
209
+ (0, vitest_1.describe)('status listeners', () => {
210
+ (0, vitest_1.it)('should notify on status change', async () => {
211
+ const client = new realtime_js_1.RealtimeClient({
212
+ baseUrl: 'https://api.test.com/v1',
213
+ projectId: 'proj-1',
214
+ });
215
+ const statuses = [];
216
+ client.onStatusChange((s) => statuses.push(s));
217
+ const connectPromise = client.connect();
218
+ await vitest_1.vi.advanceTimersByTimeAsync(10);
219
+ await connectPromise;
220
+ (0, vitest_1.expect)(statuses).toContain('connecting');
221
+ (0, vitest_1.expect)(statuses).toContain('connected');
222
+ });
223
+ (0, vitest_1.it)('should allow unsubscribing', () => {
224
+ const client = new realtime_js_1.RealtimeClient({
225
+ baseUrl: 'https://api.test.com/v1',
226
+ projectId: 'proj-1',
227
+ });
228
+ const cb = vitest_1.vi.fn();
229
+ const unsub = client.onStatusChange(cb);
230
+ unsub();
231
+ client.disconnect();
232
+ (0, vitest_1.expect)(cb).not.toHaveBeenCalled();
233
+ });
234
+ });
235
+ (0, vitest_1.describe)('setToken', () => {
236
+ (0, vitest_1.it)('should send auth message', async () => {
237
+ const client = new realtime_js_1.RealtimeClient({
238
+ baseUrl: 'https://api.test.com/v1',
239
+ projectId: 'proj-1',
240
+ });
241
+ const connectPromise = client.connect();
242
+ await vitest_1.vi.advanceTimersByTimeAsync(10);
243
+ await connectPromise;
244
+ client.setToken('new-jwt');
245
+ });
246
+ });
247
+ (0, vitest_1.describe)('sendChat + chatRoom', () => {
248
+ (0, vitest_1.it)('should queue chat message', () => {
249
+ const client = new realtime_js_1.RealtimeClient({
250
+ baseUrl: 'https://api.test.com/v1',
251
+ projectId: 'proj-1',
252
+ });
253
+ client.sendChat('room-1', 'Hello');
254
+ });
255
+ (0, vitest_1.it)('should return chat room subscription', () => {
256
+ const client = new realtime_js_1.RealtimeClient({
257
+ baseUrl: 'https://api.test.com/v1',
258
+ projectId: 'proj-1',
259
+ });
260
+ const sub = client.chatRoom('room-1');
261
+ (0, vitest_1.expect)(sub.topic).toBe('chat/room-1/proj-1');
262
+ });
263
+ });
264
+ (0, vitest_1.describe)('_generateId', () => {
265
+ (0, vitest_1.it)('should return unique IDs', () => {
266
+ const client = new realtime_js_1.RealtimeClient({
267
+ baseUrl: 'https://api.test.com/v1',
268
+ projectId: 'proj-1',
269
+ });
270
+ const ids = new Set(Array.from({ length: 50 }, () => client._generateId()));
271
+ (0, vitest_1.expect)(ids.size).toBe(50);
272
+ });
273
+ });
274
+ (0, vitest_1.describe)('_fetchHistory', () => {
275
+ (0, vitest_1.it)('should fetch history with auth headers', async () => {
276
+ const mockFetch = vitest_1.vi.fn().mockResolvedValue({
277
+ json: async () => ({ messages: [{ id: '1' }] }),
278
+ });
279
+ vitest_1.vi.stubGlobal('fetch', mockFetch);
280
+ const client = new realtime_js_1.RealtimeClient({
281
+ baseUrl: 'https://api.test.com/v1',
282
+ projectId: 'proj-1',
283
+ apiKey: 'my-key',
284
+ token: 'my-jwt',
285
+ });
286
+ const result = await client._fetchHistory('chat/room', 10);
287
+ (0, vitest_1.expect)(result).toEqual([{ id: '1' }]);
288
+ const headers = mockFetch.mock.calls[0][1].headers;
289
+ (0, vitest_1.expect)(headers['X-Aerostack-Key']).toBe('my-key');
290
+ (0, vitest_1.expect)(headers['Authorization']).toBe('Bearer my-jwt');
291
+ });
292
+ (0, vitest_1.it)('should return empty array when no messages', async () => {
293
+ vitest_1.vi.stubGlobal('fetch', vitest_1.vi.fn().mockResolvedValue({
294
+ json: async () => ({}),
295
+ }));
296
+ const client = new realtime_js_1.RealtimeClient({
297
+ baseUrl: 'https://api.test.com/v1',
298
+ projectId: 'proj-1',
299
+ });
300
+ const result = await client._fetchHistory('room', 10);
301
+ (0, vitest_1.expect)(result).toEqual([]);
302
+ });
303
+ });
304
+ (0, vitest_1.describe)('maxReconnectAttempts', () => {
305
+ (0, vitest_1.it)('should accept maxReconnectAttempts', () => {
306
+ const client = new realtime_js_1.RealtimeClient({
307
+ baseUrl: 'https://api.test.com/v1',
308
+ projectId: 'proj-1',
309
+ maxReconnectAttempts: 5,
310
+ });
311
+ (0, vitest_1.expect)(client.status).toBe('idle');
312
+ });
313
+ (0, vitest_1.it)('should support onMaxRetriesExceeded', () => {
314
+ const client = new realtime_js_1.RealtimeClient({
315
+ baseUrl: 'https://api.test.com/v1',
316
+ projectId: 'proj-1',
317
+ maxReconnectAttempts: 0,
318
+ });
319
+ const cb = vitest_1.vi.fn();
320
+ const unsub = client.onMaxRetriesExceeded(cb);
321
+ (0, vitest_1.expect)(typeof unsub).toBe('function');
322
+ unsub();
323
+ });
324
+ });
325
+ });
326
+ //# sourceMappingURL=realtime.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"realtime.test.js","sourceRoot":"","sources":["../../../src/__tests__/realtime.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=sdk.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sdk.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/sdk.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,159 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const vitest_1 = require("vitest");
4
+ // Mock the generated APIs and realtime
5
+ vitest_1.vi.mock('../_generated/index.js', () => {
6
+ class MockConfiguration {
7
+ constructor(opts = {}) {
8
+ this.basePath = opts.basePath || '';
9
+ this.headers = opts.headers || {};
10
+ this.apiKey = opts.apiKey;
11
+ }
12
+ }
13
+ return {
14
+ Configuration: MockConfiguration,
15
+ AuthenticationApi: vitest_1.vi.fn().mockImplementation(() => ({ auth: true })),
16
+ AIApi: vitest_1.vi.fn().mockImplementation(() => ({ ai: true })),
17
+ StorageApi: vitest_1.vi.fn().mockImplementation(() => ({ storage: true })),
18
+ DatabaseApi: vitest_1.vi.fn().mockImplementation(() => ({
19
+ dbQuery: vitest_1.vi.fn().mockResolvedValue({ results: [] }),
20
+ })),
21
+ };
22
+ });
23
+ vitest_1.vi.mock('../realtime.js', () => {
24
+ return {
25
+ RealtimeClient: vitest_1.vi.fn().mockImplementation(() => ({
26
+ connect: vitest_1.vi.fn(),
27
+ disconnect: vitest_1.vi.fn(),
28
+ channel: vitest_1.vi.fn(),
29
+ })),
30
+ };
31
+ });
32
+ const sdk_js_1 = require("../sdk.js");
33
+ (0, vitest_1.describe)('Web SDK', () => {
34
+ (0, vitest_1.describe)('constructor', () => {
35
+ (0, vitest_1.it)('should initialize with default options', () => {
36
+ const sdk = new sdk_js_1.SDK();
37
+ (0, vitest_1.expect)(sdk).toBeDefined();
38
+ (0, vitest_1.expect)(sdk.auth).toBeDefined();
39
+ (0, vitest_1.expect)(sdk.ai).toBeDefined();
40
+ (0, vitest_1.expect)(sdk.storage).toBeDefined();
41
+ (0, vitest_1.expect)(sdk.database).toBeDefined();
42
+ (0, vitest_1.expect)(sdk.realtime).toBeDefined();
43
+ });
44
+ (0, vitest_1.it)('should accept apiKey option', () => {
45
+ const sdk = new sdk_js_1.SDK({ apiKey: 'my-key' });
46
+ (0, vitest_1.expect)(sdk).toBeDefined();
47
+ });
48
+ (0, vitest_1.it)('should accept apiKeyAuth alias', () => {
49
+ const sdk = new sdk_js_1.SDK({ apiKeyAuth: 'my-key' });
50
+ (0, vitest_1.expect)(sdk).toBeDefined();
51
+ });
52
+ (0, vitest_1.it)('should accept serverUrl option', () => {
53
+ const sdk = new sdk_js_1.SDK({ serverUrl: 'https://custom.com/v1' });
54
+ (0, vitest_1.expect)(sdk).toBeDefined();
55
+ });
56
+ (0, vitest_1.it)('should accept serverURL alias', () => {
57
+ const sdk = new sdk_js_1.SDK({ serverURL: 'https://custom.com/v1' });
58
+ (0, vitest_1.expect)(sdk).toBeDefined();
59
+ });
60
+ (0, vitest_1.it)('should not expose queue, services, gateway, cache (client-safe)', () => {
61
+ const sdk = new sdk_js_1.SDK();
62
+ (0, vitest_1.expect)(sdk.queue).toBeUndefined();
63
+ (0, vitest_1.expect)(sdk.services).toBeUndefined();
64
+ (0, vitest_1.expect)(sdk.gateway).toBeUndefined();
65
+ (0, vitest_1.expect)(sdk.cache).toBeUndefined();
66
+ });
67
+ });
68
+ (0, vitest_1.describe)('DatabaseFacade', () => {
69
+ (0, vitest_1.it)('should execute a query', async () => {
70
+ const sdk = new sdk_js_1.SDK({ apiKey: 'key' });
71
+ const result = await sdk.database.dbQuery({
72
+ dbQueryRequest: { sql: 'SELECT 1', params: [] },
73
+ });
74
+ (0, vitest_1.expect)(result).toEqual({ results: [] });
75
+ });
76
+ });
77
+ (0, vitest_1.describe)('setApiKey', () => {
78
+ (0, vitest_1.it)('should recreate service instances', () => {
79
+ const sdk = new sdk_js_1.SDK({ apiKey: 'old-key' });
80
+ sdk.setApiKey('new-key');
81
+ (0, vitest_1.expect)(sdk.auth).toBeDefined();
82
+ (0, vitest_1.expect)(sdk.ai).toBeDefined();
83
+ (0, vitest_1.expect)(sdk.storage).toBeDefined();
84
+ (0, vitest_1.expect)(sdk.database).toBeDefined();
85
+ });
86
+ });
87
+ (0, vitest_1.describe)('streamGateway', () => {
88
+ (0, vitest_1.it)('should make POST to gateway endpoint', async () => {
89
+ const mockFetch = vitest_1.vi.fn().mockResolvedValue({
90
+ ok: true,
91
+ body: createMockStream('data: {"choices":[{"delta":{"content":"Hi"}}]}\n\ndata: [DONE]\n\n'),
92
+ });
93
+ vitest_1.vi.stubGlobal('fetch', mockFetch);
94
+ const sdk = new sdk_js_1.SDK({ serverUrl: 'https://api.test.com/v1' });
95
+ const result = await sdk.streamGateway({
96
+ apiSlug: 'bot',
97
+ messages: [{ role: 'user', content: 'Hello' }],
98
+ consumerKey: 'ask_live_123',
99
+ });
100
+ (0, vitest_1.expect)(result.text).toBe('Hi');
101
+ (0, vitest_1.expect)(mockFetch.mock.calls[0][0]).toBe('https://api.test.com/api/gateway/bot/v1/chat/completions');
102
+ });
103
+ (0, vitest_1.it)('should throw on non-OK response', async () => {
104
+ const mockFetch = vitest_1.vi.fn().mockResolvedValue({
105
+ ok: false,
106
+ status: 401,
107
+ json: vitest_1.vi.fn().mockResolvedValue({ error: 'Unauthorized' }),
108
+ });
109
+ vitest_1.vi.stubGlobal('fetch', mockFetch);
110
+ const sdk = new sdk_js_1.SDK({ serverUrl: 'https://api.test.com/v1' });
111
+ await (0, vitest_1.expect)(sdk.streamGateway({
112
+ apiSlug: 'bot',
113
+ messages: [{ role: 'user', content: 'Hi' }],
114
+ })).rejects.toThrow('Unauthorized');
115
+ });
116
+ (0, vitest_1.it)('should estimate tokens when usage not provided', async () => {
117
+ const mockFetch = vitest_1.vi.fn().mockResolvedValue({
118
+ ok: true,
119
+ body: createMockStream('data: {"choices":[{"delta":{"content":"Hello world"}}]}\n\ndata: [DONE]\n\n'),
120
+ });
121
+ vitest_1.vi.stubGlobal('fetch', mockFetch);
122
+ const sdk = new sdk_js_1.SDK({ serverUrl: 'https://api.test.com/v1' });
123
+ const result = await sdk.streamGateway({
124
+ apiSlug: 'bot',
125
+ messages: [{ role: 'user', content: 'Hi' }],
126
+ });
127
+ (0, vitest_1.expect)(result.tokensUsed).toBeGreaterThan(0);
128
+ });
129
+ });
130
+ (0, vitest_1.describe)('Aerostack alias', () => {
131
+ (0, vitest_1.it)('should be the same as SDK', () => {
132
+ (0, vitest_1.expect)(sdk_js_1.Aerostack).toBe(sdk_js_1.SDK);
133
+ });
134
+ });
135
+ (0, vitest_1.describe)('createClient', () => {
136
+ (0, vitest_1.it)('should return an SDK instance', () => {
137
+ const client = (0, sdk_js_1.createClient)({ apiKey: 'key' });
138
+ (0, vitest_1.expect)(client).toBeInstanceOf(sdk_js_1.SDK);
139
+ });
140
+ });
141
+ });
142
+ function createMockStream(text) {
143
+ const encoder = new TextEncoder();
144
+ const data = encoder.encode(text);
145
+ let read = false;
146
+ return {
147
+ getReader: () => ({
148
+ read: async () => {
149
+ if (!read) {
150
+ read = true;
151
+ return { done: false, value: data };
152
+ }
153
+ return { done: true, value: undefined };
154
+ },
155
+ cancel: vitest_1.vi.fn(),
156
+ }),
157
+ };
158
+ }
159
+ //# sourceMappingURL=sdk.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sdk.test.js","sourceRoot":"","sources":["../../../src/__tests__/sdk.test.ts"],"names":[],"mappings":"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"}
@@ -108,6 +108,8 @@ export declare class RealtimeClient {
108
108
  chatRoom(roomId: string): RealtimeSubscription;
109
109
  /** @internal — Generate unique message ID for ack tracking */
110
110
  _generateId(): string;
111
+ /** @internal — Remove a subscription from the map (called on unsubscribe) */
112
+ _removeSubscription(topic: string): void;
111
113
  /** @internal */
112
114
  _send(data: any): void;
113
115
  /** @internal — Fetch chat/event history via REST API */
@@ -1 +1 @@
1
- {"version":3,"file":"realtime.d.ts","sourceRoot":"","sources":["../../src/realtime.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"realtime.d.ts","sourceRoot":"","sources":["../../src/realtime.ts"],"names":[],"mappings":"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"}
@@ -42,6 +42,7 @@ class RealtimeSubscription {
42
42
  });
43
43
  this.isSubscribed = false;
44
44
  this.callbacks.clear();
45
+ this.client._removeSubscription(this.topic);
45
46
  }
46
47
  // ─── Phase 1: Pub/Sub — Publish custom events ─────────────────────────
47
48
  /** Publish a custom event to all subscribers on this channel */
@@ -164,14 +165,15 @@ class RealtimeClient {
164
165
  url.searchParams.set('projectId', this.projectId);
165
166
  if (this.userId)
166
167
  url.searchParams.set('userId', this.userId);
167
- if (this.token)
168
- url.searchParams.set('token', this.token);
169
- // SECURITY: Pass API key via Sec-WebSocket-Protocol header only — never as URL query param
168
+ // SECURITY: Pass credentials via Sec-WebSocket-Protocol header — never as URL query params
170
169
  // (URL params appear in CDN logs, browser history, and Referer headers).
171
170
  const protocols = [];
172
- if (this.apiKey) {
171
+ if (this.apiKey)
173
172
  protocols.push(`aerostack-key.${this.apiKey}`);
174
- }
173
+ if (this.token)
174
+ protocols.push(`aerostack-token.${this.token}`);
175
+ if (protocols.length > 0)
176
+ protocols.push('aerostack-v1');
175
177
  this.ws = protocols.length > 0
176
178
  ? new WebSocket(url.toString(), protocols)
177
179
  : new WebSocket(url.toString());
@@ -253,6 +255,10 @@ class RealtimeClient {
253
255
  _generateId() {
254
256
  return Math.random().toString(36).slice(2) + Date.now().toString(36);
255
257
  }
258
+ /** @internal — Remove a subscription from the map (called on unsubscribe) */
259
+ _removeSubscription(topic) {
260
+ this.subscriptions.delete(topic);
261
+ }
256
262
  /** @internal */
257
263
  _send(data) {
258
264
  if (this.ws && this.ws.readyState === WebSocket.OPEN) {