@supabase/realtime-js 2.12.2 → 2.14.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.
Files changed (40) hide show
  1. package/dist/main/RealtimeChannel.d.ts.map +1 -1
  2. package/dist/main/RealtimeChannel.js +10 -1
  3. package/dist/main/RealtimeChannel.js.map +1 -1
  4. package/dist/main/RealtimeClient.d.ts +13 -2
  5. package/dist/main/RealtimeClient.d.ts.map +1 -1
  6. package/dist/main/RealtimeClient.js +311 -115
  7. package/dist/main/RealtimeClient.js.map +1 -1
  8. package/dist/main/index.d.ts +2 -1
  9. package/dist/main/index.d.ts.map +1 -1
  10. package/dist/main/index.js +3 -1
  11. package/dist/main/index.js.map +1 -1
  12. package/dist/main/lib/version.d.ts +1 -1
  13. package/dist/main/lib/version.js +1 -1
  14. package/dist/main/lib/websocket-factory.d.ts +41 -0
  15. package/dist/main/lib/websocket-factory.d.ts.map +1 -0
  16. package/dist/main/lib/websocket-factory.js +132 -0
  17. package/dist/main/lib/websocket-factory.js.map +1 -0
  18. package/dist/module/RealtimeChannel.d.ts.map +1 -1
  19. package/dist/module/RealtimeChannel.js +10 -1
  20. package/dist/module/RealtimeChannel.js.map +1 -1
  21. package/dist/module/RealtimeClient.d.ts +13 -2
  22. package/dist/module/RealtimeClient.d.ts.map +1 -1
  23. package/dist/module/RealtimeClient.js +312 -115
  24. package/dist/module/RealtimeClient.js.map +1 -1
  25. package/dist/module/index.d.ts +2 -1
  26. package/dist/module/index.d.ts.map +1 -1
  27. package/dist/module/index.js +2 -1
  28. package/dist/module/index.js.map +1 -1
  29. package/dist/module/lib/version.d.ts +1 -1
  30. package/dist/module/lib/version.js +1 -1
  31. package/dist/module/lib/websocket-factory.d.ts +41 -0
  32. package/dist/module/lib/websocket-factory.d.ts.map +1 -0
  33. package/dist/module/lib/websocket-factory.js +128 -0
  34. package/dist/module/lib/websocket-factory.js.map +1 -0
  35. package/package.json +3 -4
  36. package/src/RealtimeChannel.ts +12 -1
  37. package/src/RealtimeClient.ts +358 -132
  38. package/src/index.ts +3 -0
  39. package/src/lib/version.ts +1 -1
  40. package/src/lib/websocket-factory.ts +189 -0
@@ -1,5 +1,6 @@
1
1
  import RealtimeClient from './RealtimeClient';
2
2
  import RealtimeChannel, { REALTIME_LISTEN_TYPES, REALTIME_POSTGRES_CHANGES_LISTEN_EVENT, REALTIME_SUBSCRIBE_STATES, REALTIME_CHANNEL_STATES, } from './RealtimeChannel';
3
3
  import RealtimePresence, { REALTIME_PRESENCE_LISTEN_EVENTS, } from './RealtimePresence';
4
- export { RealtimePresence, RealtimeChannel, RealtimeClient, REALTIME_LISTEN_TYPES, REALTIME_POSTGRES_CHANGES_LISTEN_EVENT, REALTIME_PRESENCE_LISTEN_EVENTS, REALTIME_SUBSCRIBE_STATES, REALTIME_CHANNEL_STATES, };
4
+ import WebSocketFactory from './lib/websocket-factory';
5
+ export { RealtimePresence, RealtimeChannel, RealtimeClient, REALTIME_LISTEN_TYPES, REALTIME_POSTGRES_CHANGES_LISTEN_EVENT, REALTIME_PRESENCE_LISTEN_EVENTS, REALTIME_SUBSCRIBE_STATES, REALTIME_CHANNEL_STATES, WebSocketFactory, };
5
6
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,cAIN,MAAM,kBAAkB,CAAA;AACzB,OAAO,eAAe,EAAE,EAQtB,qBAAqB,EACrB,sCAAsC,EACtC,yBAAyB,EACzB,uBAAuB,GACxB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,gBAAgB,EAAE,EAIvB,+BAA+B,GAChC,MAAM,oBAAoB,CAAA;AAE3B,OAAO,EACL,gBAAgB,EAChB,eAAe,EAGf,cAAc,EAYd,qBAAqB,EACrB,sCAAsC,EACtC,+BAA+B,EAC/B,yBAAyB,EACzB,uBAAuB,GACxB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,cAIN,MAAM,kBAAkB,CAAA;AACzB,OAAO,eAAe,EAAE,EAQtB,qBAAqB,EACrB,sCAAsC,EACtC,yBAAyB,EACzB,uBAAuB,GACxB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,gBAAgB,EAAE,EAIvB,+BAA+B,GAChC,MAAM,oBAAoB,CAAA;AAC3B,OAAO,gBAAmC,MAAM,yBAAyB,CAAA;AAEzE,OAAO,EACL,gBAAgB,EAChB,eAAe,EAGf,cAAc,EAYd,qBAAqB,EACrB,sCAAsC,EACtC,+BAA+B,EAC/B,yBAAyB,EACzB,uBAAuB,EACvB,gBAAgB,GAEjB,CAAA"}
@@ -1,2 +1,2 @@
1
- export declare const version = "2.12.2";
1
+ export declare const version = "2.14.0";
2
2
  //# sourceMappingURL=version.d.ts.map
@@ -1,2 +1,2 @@
1
- export const version = '2.12.2';
1
+ export const version = '2.14.0';
2
2
  //# sourceMappingURL=version.js.map
@@ -0,0 +1,41 @@
1
+ export interface WebSocketLike {
2
+ readonly CONNECTING: number;
3
+ readonly OPEN: number;
4
+ readonly CLOSING: number;
5
+ readonly CLOSED: number;
6
+ readonly readyState: number;
7
+ readonly url: string;
8
+ readonly protocol: string;
9
+ close(code?: number, reason?: string): void;
10
+ send(data: string | ArrayBufferLike | Blob | ArrayBufferView): void;
11
+ onopen: ((this: any, ev: Event) => any) | null;
12
+ onmessage: ((this: any, ev: MessageEvent) => any) | null;
13
+ onclose: ((this: any, ev: CloseEvent) => any) | null;
14
+ onerror: ((this: any, ev: Event) => any) | null;
15
+ addEventListener(type: string, listener: EventListener): void;
16
+ removeEventListener(type: string, listener: EventListener): void;
17
+ binaryType?: string;
18
+ bufferedAmount?: number;
19
+ extensions?: string;
20
+ dispatchEvent?: (event: Event) => boolean;
21
+ }
22
+ export interface WebSocketEnvironment {
23
+ type: 'native' | 'ws' | 'cloudflare' | 'unsupported';
24
+ constructor?: any;
25
+ error?: string;
26
+ workaround?: string;
27
+ }
28
+ export declare class WebSocketFactory {
29
+ /**
30
+ * Dynamic require that works in both CJS and ESM environments
31
+ * Bulletproof against strict ESM environments where require might not be in scope
32
+ * @private
33
+ */
34
+ private static dynamicRequire;
35
+ private static detectEnvironment;
36
+ static getWebSocketConstructor(): typeof WebSocket;
37
+ static createWebSocket(url: string | URL, protocols?: string | string[]): WebSocketLike;
38
+ static isWebSocketSupported(): boolean;
39
+ }
40
+ export default WebSocketFactory;
41
+ //# sourceMappingURL=websocket-factory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"websocket-factory.d.ts","sourceRoot":"","sources":["../../../src/lib/websocket-factory.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IAEzB,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3C,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,GAAG,eAAe,GAAG,IAAI,CAAA;IAEnE,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,KAAK,GAAG,CAAC,GAAG,IAAI,CAAA;IAC9C,SAAS,EAAE,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,YAAY,KAAK,GAAG,CAAC,GAAG,IAAI,CAAA;IACxD,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,UAAU,KAAK,GAAG,CAAC,GAAG,IAAI,CAAA;IACpD,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,KAAK,GAAG,CAAC,GAAG,IAAI,CAAA;IAE/C,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,GAAG,IAAI,CAAA;IAC7D,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,GAAG,IAAI,CAAA;IAGhE,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,OAAO,CAAA;CAC1C;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,QAAQ,GAAG,IAAI,GAAG,YAAY,GAAG,aAAa,CAAA;IACpD,WAAW,CAAC,EAAE,GAAG,CAAA;IACjB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,qBAAa,gBAAgB;IAC3B;;;;OAIG;IACH,OAAO,CAAC,MAAM,CAAC,cAAc;IAqB7B,OAAO,CAAC,MAAM,CAAC,iBAAiB;WAgGlB,uBAAuB,IAAI,OAAO,SAAS;WAa3C,eAAe,CAC3B,GAAG,EAAE,MAAM,GAAG,GAAG,EACjB,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,GAC5B,aAAa;WAKF,oBAAoB,IAAI,OAAO;CAQ9C;AAED,eAAe,gBAAgB,CAAA"}
@@ -0,0 +1,128 @@
1
+ export class WebSocketFactory {
2
+ /**
3
+ * Dynamic require that works in both CJS and ESM environments
4
+ * Bulletproof against strict ESM environments where require might not be in scope
5
+ * @private
6
+ */
7
+ static dynamicRequire(moduleId) {
8
+ try {
9
+ // Check if we're in a Node.js environment first
10
+ if (typeof process !== 'undefined' &&
11
+ process.versions &&
12
+ process.versions.node) {
13
+ // In Node.js, both CJS and ESM support require for dynamic imports
14
+ // Wrap in try/catch to handle strict ESM environments
15
+ if (typeof require !== 'undefined') {
16
+ return require(moduleId);
17
+ }
18
+ }
19
+ return null;
20
+ }
21
+ catch (_a) {
22
+ // Catches any error from typeof require OR require() call in strict ESM
23
+ return null;
24
+ }
25
+ }
26
+ static detectEnvironment() {
27
+ var _a, _b;
28
+ if (typeof WebSocket !== 'undefined') {
29
+ return { type: 'native', constructor: WebSocket };
30
+ }
31
+ if (typeof globalThis !== 'undefined' &&
32
+ typeof globalThis.WebSocket !== 'undefined') {
33
+ return { type: 'native', constructor: globalThis.WebSocket };
34
+ }
35
+ if (typeof global !== 'undefined' &&
36
+ typeof global.WebSocket !== 'undefined') {
37
+ return { type: 'native', constructor: global.WebSocket };
38
+ }
39
+ if (typeof globalThis !== 'undefined' &&
40
+ typeof globalThis.WebSocketPair !== 'undefined' &&
41
+ typeof globalThis.WebSocket === 'undefined') {
42
+ return {
43
+ type: 'cloudflare',
44
+ error: 'Cloudflare Workers detected. WebSocket clients are not supported in Cloudflare Workers.',
45
+ workaround: 'Use Cloudflare Workers WebSocket API for server-side WebSocket handling, or deploy to a different runtime.',
46
+ };
47
+ }
48
+ if ((typeof globalThis !== 'undefined' && globalThis.EdgeRuntime) ||
49
+ (typeof navigator !== 'undefined' &&
50
+ ((_a = navigator.userAgent) === null || _a === void 0 ? void 0 : _a.includes('Vercel-Edge')))) {
51
+ return {
52
+ type: 'unsupported',
53
+ error: 'Edge runtime detected (Vercel Edge/Netlify Edge). WebSockets are not supported in edge functions.',
54
+ workaround: 'Use serverless functions or a different deployment target for WebSocket functionality.',
55
+ };
56
+ }
57
+ if (typeof process !== 'undefined' &&
58
+ process.versions &&
59
+ process.versions.node) {
60
+ const nodeVersion = parseInt(process.versions.node.split('.')[0]);
61
+ if (nodeVersion >= 22) {
62
+ try {
63
+ if (typeof globalThis.WebSocket !== 'undefined') {
64
+ return { type: 'native', constructor: globalThis.WebSocket };
65
+ }
66
+ const undici = this.dynamicRequire('undici');
67
+ if (undici && undici.WebSocket) {
68
+ return { type: 'native', constructor: undici.WebSocket };
69
+ }
70
+ throw new Error('undici not available');
71
+ }
72
+ catch (err) {
73
+ return {
74
+ type: 'unsupported',
75
+ error: `Node.js ${nodeVersion} detected but native WebSocket not found.`,
76
+ workaround: 'Install the "ws" package or check your Node.js installation.',
77
+ };
78
+ }
79
+ }
80
+ try {
81
+ // Use dynamic require to work in both CJS and ESM environments
82
+ const ws = this.dynamicRequire('ws');
83
+ if (ws) {
84
+ return { type: 'ws', constructor: (_b = ws.WebSocket) !== null && _b !== void 0 ? _b : ws };
85
+ }
86
+ throw new Error('ws package not available');
87
+ }
88
+ catch (err) {
89
+ return {
90
+ type: 'unsupported',
91
+ error: `Node.js ${nodeVersion} detected without WebSocket support.`,
92
+ workaround: 'Install the "ws" package: npm install ws',
93
+ };
94
+ }
95
+ }
96
+ return {
97
+ type: 'unsupported',
98
+ error: 'Unknown JavaScript runtime without WebSocket support.',
99
+ workaround: "Ensure you're running in a supported environment (browser, Node.js, Deno) or provide a custom WebSocket implementation.",
100
+ };
101
+ }
102
+ static getWebSocketConstructor() {
103
+ const env = this.detectEnvironment();
104
+ if (env.constructor) {
105
+ return env.constructor;
106
+ }
107
+ let errorMessage = env.error || 'WebSocket not supported in this environment.';
108
+ if (env.workaround) {
109
+ errorMessage += `\n\nSuggested solution: ${env.workaround}`;
110
+ }
111
+ throw new Error(errorMessage);
112
+ }
113
+ static createWebSocket(url, protocols) {
114
+ const WS = this.getWebSocketConstructor();
115
+ return new WS(url, protocols);
116
+ }
117
+ static isWebSocketSupported() {
118
+ try {
119
+ const env = this.detectEnvironment();
120
+ return env.type === 'native' || env.type === 'ws';
121
+ }
122
+ catch (_a) {
123
+ return false;
124
+ }
125
+ }
126
+ }
127
+ export default WebSocketFactory;
128
+ //# sourceMappingURL=websocket-factory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"websocket-factory.js","sourceRoot":"","sources":["../../../src/lib/websocket-factory.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@supabase/realtime-js",
3
- "version": "2.12.2",
3
+ "version": "2.14.0",
4
4
  "description": "Listen to realtime updates to your PostgreSQL database",
5
5
  "keywords": [
6
6
  "realtime",
@@ -40,9 +40,8 @@
40
40
  "dependencies": {
41
41
  "@supabase/node-fetch": "^2.6.13",
42
42
  "@types/phoenix": "^1.6.6",
43
- "isows": "^1.0.7",
44
- "@types/ws": "^8.18.1",
45
- "ws": "^8.18.2"
43
+ "ws": "^8.18.2",
44
+ "@types/ws": "^8.18.1"
46
45
  },
47
46
  "devDependencies": {
48
47
  "@arethetypeswrong/cli": "^0.16.4",
@@ -198,6 +198,15 @@ export default class RealtimeChannel {
198
198
  this.state = CHANNEL_STATES.errored
199
199
  this.rejoinTimer.scheduleTimeout()
200
200
  })
201
+
202
+ this.joinPush.receive('error', (reason: any) => {
203
+ if (this._isLeaving() || this._isClosed()) {
204
+ return
205
+ }
206
+ this.socket.log('channel', `error ${this.topic}`, reason)
207
+ this.state = CHANNEL_STATES.errored
208
+ this.rejoinTimer.scheduleTimeout()
209
+ })
201
210
  this._on(CHANNEL_EVENTS.reply, {}, (payload: any, ref: string) => {
202
211
  this._trigger(this._replyEventName(ref), payload)
203
212
  })
@@ -225,7 +234,9 @@ export default class RealtimeChannel {
225
234
  const postgres_changes =
226
235
  this.bindings.postgres_changes?.map((r) => r.filter) ?? []
227
236
 
228
- const presence_enabled = !!this.bindings[REALTIME_LISTEN_TYPES.PRESENCE]
237
+ const presence_enabled =
238
+ !!this.bindings[REALTIME_LISTEN_TYPES.PRESENCE] &&
239
+ this.bindings[REALTIME_LISTEN_TYPES.PRESENCE].length > 0
229
240
  const accessTokenPayload: { access_token?: string } = {}
230
241
  const config = {
231
242
  broadcast,