@supabase/realtime-js 2.13.0 → 2.15.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.
- package/dist/main/RealtimeChannel.d.ts.map +1 -1
- package/dist/main/RealtimeChannel.js +26 -10
- package/dist/main/RealtimeChannel.js.map +1 -1
- package/dist/main/RealtimeClient.d.ts +1 -1
- package/dist/main/RealtimeClient.d.ts.map +1 -1
- package/dist/main/RealtimeClient.js +22 -8
- package/dist/main/RealtimeClient.js.map +1 -1
- package/dist/main/index.d.ts +2 -1
- package/dist/main/index.d.ts.map +1 -1
- package/dist/main/index.js +3 -1
- package/dist/main/index.js.map +1 -1
- package/dist/main/lib/constants.d.ts +1 -0
- package/dist/main/lib/constants.d.ts.map +1 -1
- package/dist/main/lib/constants.js +2 -1
- package/dist/main/lib/constants.js.map +1 -1
- package/dist/main/lib/timer.d.ts.map +1 -1
- package/dist/main/lib/timer.js +1 -0
- package/dist/main/lib/timer.js.map +1 -1
- package/dist/main/lib/transformers.js +1 -1
- package/dist/main/lib/transformers.js.map +1 -1
- package/dist/main/lib/version.d.ts +1 -1
- package/dist/main/lib/version.js +1 -1
- package/dist/main/lib/websocket-factory.d.ts +41 -0
- package/dist/main/lib/websocket-factory.d.ts.map +1 -0
- package/dist/main/lib/websocket-factory.js +132 -0
- package/dist/main/lib/websocket-factory.js.map +1 -0
- package/dist/module/RealtimeChannel.d.ts.map +1 -1
- package/dist/module/RealtimeChannel.js +27 -11
- package/dist/module/RealtimeChannel.js.map +1 -1
- package/dist/module/RealtimeClient.d.ts +1 -1
- package/dist/module/RealtimeClient.d.ts.map +1 -1
- package/dist/module/RealtimeClient.js +23 -8
- package/dist/module/RealtimeClient.js.map +1 -1
- package/dist/module/index.d.ts +2 -1
- package/dist/module/index.d.ts.map +1 -1
- package/dist/module/index.js +2 -1
- package/dist/module/index.js.map +1 -1
- package/dist/module/lib/constants.d.ts +1 -0
- package/dist/module/lib/constants.d.ts.map +1 -1
- package/dist/module/lib/constants.js +1 -0
- package/dist/module/lib/constants.js.map +1 -1
- package/dist/module/lib/timer.d.ts.map +1 -1
- package/dist/module/lib/timer.js +1 -0
- package/dist/module/lib/timer.js.map +1 -1
- package/dist/module/lib/transformers.js +1 -1
- package/dist/module/lib/transformers.js.map +1 -1
- package/dist/module/lib/version.d.ts +1 -1
- package/dist/module/lib/version.js +1 -1
- package/dist/module/lib/websocket-factory.d.ts +41 -0
- package/dist/module/lib/websocket-factory.d.ts.map +1 -0
- package/dist/module/lib/websocket-factory.js +128 -0
- package/dist/module/lib/websocket-factory.js.map +1 -0
- package/package.json +4 -6
- package/src/RealtimeChannel.ts +38 -12
- package/src/RealtimeClient.ts +24 -14
- package/src/index.ts +3 -0
- package/src/lib/constants.ts +1 -0
- package/src/lib/timer.ts +1 -0
- package/src/lib/transformers.ts +1 -1
- package/src/lib/version.ts +1 -1
- package/src/lib/websocket-factory.ts +189 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transformers.js","sourceRoot":"","sources":["../../../src/lib/transformers.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"transformers.js","sourceRoot":"","sources":["../../../src/lib/transformers.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const version = "2.
|
|
1
|
+
export declare const version = "2.15.0";
|
|
2
2
|
//# sourceMappingURL=version.d.ts.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export const version = '2.
|
|
1
|
+
export const version = '2.15.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":"AAkCA,MAAM,OAAO,gBAAgB;IAC3B;;;;OAIG;IACK,MAAM,CAAC,cAAc,CAAC,QAAgB;QAC5C,IAAI,CAAC;YACH,gDAAgD;YAChD,IACE,OAAO,OAAO,KAAK,WAAW;gBAC9B,OAAO,CAAC,QAAQ;gBAChB,OAAO,CAAC,QAAQ,CAAC,IAAI,EACrB,CAAC;gBACD,mEAAmE;gBACnE,sDAAsD;gBACtD,IAAI,OAAO,OAAO,KAAK,WAAW,EAAE,CAAC;oBACnC,OAAO,OAAO,CAAC,QAAQ,CAAC,CAAA;gBAC1B,CAAC;YACH,CAAC;YACD,OAAO,IAAI,CAAA;QACb,CAAC;QAAC,WAAM,CAAC;YACP,wEAAwE;YACxE,OAAO,IAAI,CAAA;QACb,CAAC;IACH,CAAC;IAEO,MAAM,CAAC,iBAAiB;;QAC9B,IAAI,OAAO,SAAS,KAAK,WAAW,EAAE,CAAC;YACrC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,CAAA;QACnD,CAAC;QAED,IACE,OAAO,UAAU,KAAK,WAAW;YACjC,OAAQ,UAAkB,CAAC,SAAS,KAAK,WAAW,EACpD,CAAC;YACD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAG,UAAkB,CAAC,SAAS,EAAE,CAAA;QACvE,CAAC;QAED,IACE,OAAO,MAAM,KAAK,WAAW;YAC7B,OAAQ,MAAc,CAAC,SAAS,KAAK,WAAW,EAChD,CAAC;YACD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAG,MAAc,CAAC,SAAS,EAAE,CAAA;QACnE,CAAC;QAED,IACE,OAAO,UAAU,KAAK,WAAW;YACjC,OAAQ,UAAkB,CAAC,aAAa,KAAK,WAAW;YACxD,OAAO,UAAU,CAAC,SAAS,KAAK,WAAW,EAC3C,CAAC;YACD,OAAO;gBACL,IAAI,EAAE,YAAY;gBAClB,KAAK,EACH,yFAAyF;gBAC3F,UAAU,EACR,4GAA4G;aAC/G,CAAA;QACH,CAAC;QAED,IACE,CAAC,OAAO,UAAU,KAAK,WAAW,IAAK,UAAkB,CAAC,WAAW,CAAC;YACtE,CAAC,OAAO,SAAS,KAAK,WAAW;iBAC/B,MAAA,SAAS,CAAC,SAAS,0CAAE,QAAQ,CAAC,aAAa,CAAC,CAAA,CAAC,EAC/C,CAAC;YACD,OAAO;gBACL,IAAI,EAAE,aAAa;gBACnB,KAAK,EACH,mGAAmG;gBACrG,UAAU,EACR,wFAAwF;aAC3F,CAAA;QACH,CAAC;QAED,IACE,OAAO,OAAO,KAAK,WAAW;YAC9B,OAAO,CAAC,QAAQ;YAChB,OAAO,CAAC,QAAQ,CAAC,IAAI,EACrB,CAAC;YACD,MAAM,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;YACjE,IAAI,WAAW,IAAI,EAAE,EAAE,CAAC;gBACtB,IAAI,CAAC;oBACH,IAAI,OAAO,UAAU,CAAC,SAAS,KAAK,WAAW,EAAE,CAAC;wBAChD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,CAAC,SAAS,EAAE,CAAA;oBAC9D,CAAC;oBACD,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAA;oBAC5C,IAAI,MAAM,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;wBAC/B,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,CAAC,SAAS,EAAE,CAAA;oBAC1D,CAAC;oBACD,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAA;gBACzC,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,OAAO;wBACL,IAAI,EAAE,aAAa;wBACnB,KAAK,EAAE,WAAW,WAAW,2CAA2C;wBACxE,UAAU,EACR,8DAA8D;qBACjE,CAAA;gBACH,CAAC;YACH,CAAC;YACD,IAAI,CAAC;gBACH,+DAA+D;gBAC/D,MAAM,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAA;gBACpC,IAAI,EAAE,EAAE,CAAC;oBACP,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,MAAA,EAAE,CAAC,SAAS,mCAAI,EAAE,EAAE,CAAA;gBACxD,CAAC;gBACD,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAA;YAC7C,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO;oBACL,IAAI,EAAE,aAAa;oBACnB,KAAK,EAAE,WAAW,WAAW,sCAAsC;oBACnE,UAAU,EAAE,0CAA0C;iBACvD,CAAA;YACH,CAAC;QACH,CAAC;QAED,OAAO;YACL,IAAI,EAAE,aAAa;YACnB,KAAK,EAAE,uDAAuD;YAC9D,UAAU,EACR,yHAAyH;SAC5H,CAAA;IACH,CAAC;IAEM,MAAM,CAAC,uBAAuB;QACnC,MAAM,GAAG,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAA;QACpC,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC;YACpB,OAAO,GAAG,CAAC,WAAW,CAAA;QACxB,CAAC;QACD,IAAI,YAAY,GACd,GAAG,CAAC,KAAK,IAAI,8CAA8C,CAAA;QAC7D,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;YACnB,YAAY,IAAI,2BAA2B,GAAG,CAAC,UAAU,EAAE,CAAA;QAC7D,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAA;IAC/B,CAAC;IAEM,MAAM,CAAC,eAAe,CAC3B,GAAiB,EACjB,SAA6B;QAE7B,MAAM,EAAE,GAAG,IAAI,CAAC,uBAAuB,EAAE,CAAA;QACzC,OAAO,IAAI,EAAE,CAAC,GAAG,EAAE,SAAS,CAAC,CAAA;IAC/B,CAAC;IAEM,MAAM,CAAC,oBAAoB;QAChC,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAA;YACpC,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,IAAI,GAAG,CAAC,IAAI,KAAK,IAAI,CAAA;QACnD,CAAC;QAAC,WAAM,CAAC;YACP,OAAO,KAAK,CAAA;QACd,CAAC;IACH,CAAC;CACF;AAED,eAAe,gBAAgB,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@supabase/realtime-js",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.15.0",
|
|
4
4
|
"description": "Listen to realtime updates to your PostgreSQL database",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"realtime",
|
|
@@ -32,6 +32,7 @@
|
|
|
32
32
|
"test": "vitest run",
|
|
33
33
|
"test:watch": "vitest",
|
|
34
34
|
"coverage": "vitest run --coverage",
|
|
35
|
+
"coverage:text": "vitest run --coverage.enabled true --coverage.reporter=text",
|
|
35
36
|
"docs": "typedoc src/index.ts --out docs/v2",
|
|
36
37
|
"docs:json": "typedoc --json docs/v2/spec.json --excludeExternals src/index.ts",
|
|
37
38
|
"check-exports": "attw --pack .",
|
|
@@ -40,13 +41,11 @@
|
|
|
40
41
|
"dependencies": {
|
|
41
42
|
"@supabase/node-fetch": "^2.6.13",
|
|
42
43
|
"@types/phoenix": "^1.6.6",
|
|
43
|
-
"
|
|
44
|
-
"@types/ws": "^8.18.1"
|
|
45
|
-
"ws": "^8.18.2"
|
|
44
|
+
"ws": "^8.18.2",
|
|
45
|
+
"@types/ws": "^8.18.1"
|
|
46
46
|
},
|
|
47
47
|
"devDependencies": {
|
|
48
48
|
"@arethetypeswrong/cli": "^0.16.4",
|
|
49
|
-
"@types/sinon": "^17.0.4",
|
|
50
49
|
"@vitest/coverage-v8": "^3.1.4",
|
|
51
50
|
"eslint": "^9.27.0",
|
|
52
51
|
"esm": "^3.2.25",
|
|
@@ -58,7 +57,6 @@
|
|
|
58
57
|
"nyc": "^15.1.0",
|
|
59
58
|
"prettier": "^2.8.8",
|
|
60
59
|
"semantic-release-plugin-update-version-in-files": "^1.1.0",
|
|
61
|
-
"sinon": "^18.0.1",
|
|
62
60
|
"typedoc": "^0.27.9",
|
|
63
61
|
"typescript": "^5.8.3",
|
|
64
62
|
"vitest": "^3.1.4",
|
package/src/RealtimeChannel.ts
CHANGED
|
@@ -1,4 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
CHANNEL_EVENTS,
|
|
3
|
+
CHANNEL_STATES,
|
|
4
|
+
MAX_PUSH_BUFFER_SIZE,
|
|
5
|
+
} from './lib/constants'
|
|
2
6
|
import Push from './lib/push'
|
|
3
7
|
import type RealtimeClient from './RealtimeClient'
|
|
4
8
|
import Timer from './lib/timer'
|
|
@@ -213,8 +217,7 @@ export default class RealtimeChannel {
|
|
|
213
217
|
|
|
214
218
|
this.presence = new RealtimePresence(this)
|
|
215
219
|
|
|
216
|
-
this.broadcastEndpointURL =
|
|
217
|
-
httpEndpointURL(this.socket.endPoint) + '/api/broadcast'
|
|
220
|
+
this.broadcastEndpointURL = httpEndpointURL(this.socket.endPoint)
|
|
218
221
|
this.private = this.params.config.private || false
|
|
219
222
|
}
|
|
220
223
|
|
|
@@ -571,8 +574,11 @@ export default class RealtimeChannel {
|
|
|
571
574
|
*/
|
|
572
575
|
teardown() {
|
|
573
576
|
this.pushBuffer.forEach((push: Push) => push.destroy())
|
|
574
|
-
this.
|
|
577
|
+
this.pushBuffer = []
|
|
578
|
+
this.rejoinTimer.reset()
|
|
575
579
|
this.joinPush.destroy()
|
|
580
|
+
this.state = CHANNEL_STATES.closed
|
|
581
|
+
this.bindings = {}
|
|
576
582
|
}
|
|
577
583
|
|
|
578
584
|
/** @internal */
|
|
@@ -608,13 +614,31 @@ export default class RealtimeChannel {
|
|
|
608
614
|
if (this._canPush()) {
|
|
609
615
|
pushEvent.send()
|
|
610
616
|
} else {
|
|
611
|
-
|
|
612
|
-
this.pushBuffer.push(pushEvent)
|
|
617
|
+
this._addToPushBuffer(pushEvent)
|
|
613
618
|
}
|
|
614
619
|
|
|
615
620
|
return pushEvent
|
|
616
621
|
}
|
|
617
622
|
|
|
623
|
+
/** @internal */
|
|
624
|
+
_addToPushBuffer(pushEvent: Push) {
|
|
625
|
+
pushEvent.startTimeout()
|
|
626
|
+
this.pushBuffer.push(pushEvent)
|
|
627
|
+
|
|
628
|
+
// Enforce buffer size limit
|
|
629
|
+
if (this.pushBuffer.length > MAX_PUSH_BUFFER_SIZE) {
|
|
630
|
+
const removedPush = this.pushBuffer.shift()
|
|
631
|
+
if (removedPush) {
|
|
632
|
+
removedPush.destroy()
|
|
633
|
+
this.socket.log(
|
|
634
|
+
'channel',
|
|
635
|
+
`discarded push due to buffer overflow: ${removedPush.event}`,
|
|
636
|
+
removedPush.payload
|
|
637
|
+
)
|
|
638
|
+
}
|
|
639
|
+
}
|
|
640
|
+
}
|
|
641
|
+
|
|
618
642
|
/**
|
|
619
643
|
* Overridable message hook
|
|
620
644
|
*
|
|
@@ -757,12 +781,14 @@ export default class RealtimeChannel {
|
|
|
757
781
|
_off(type: string, filter: { [key: string]: any }) {
|
|
758
782
|
const typeLower = type.toLocaleLowerCase()
|
|
759
783
|
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
784
|
+
if (this.bindings[typeLower]) {
|
|
785
|
+
this.bindings[typeLower] = this.bindings[typeLower].filter((bind) => {
|
|
786
|
+
return !(
|
|
787
|
+
bind.type?.toLocaleLowerCase() === typeLower &&
|
|
788
|
+
RealtimeChannel.isEqual(bind.filter, filter)
|
|
789
|
+
)
|
|
790
|
+
})
|
|
791
|
+
}
|
|
766
792
|
return this
|
|
767
793
|
}
|
|
768
794
|
|
package/src/RealtimeClient.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import WebSocketFactory, { WebSocketLike } from './lib/websocket-factory'
|
|
2
2
|
|
|
3
3
|
import {
|
|
4
4
|
CHANNEL_EVENTS,
|
|
@@ -69,8 +69,6 @@ export interface WebSocketLikeConstructor {
|
|
|
69
69
|
): WebSocketLike
|
|
70
70
|
}
|
|
71
71
|
|
|
72
|
-
export type WebSocketLike = WebSocket
|
|
73
|
-
|
|
74
72
|
export interface WebSocketLikeError {
|
|
75
73
|
error: any
|
|
76
74
|
message: string
|
|
@@ -200,14 +198,16 @@ export default class RealtimeClient {
|
|
|
200
198
|
|
|
201
199
|
// Establish WebSocket connection
|
|
202
200
|
if (!this.transport) {
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
201
|
+
try {
|
|
202
|
+
this.conn = WebSocketFactory.createWebSocket(this.endpointURL())
|
|
203
|
+
} catch (error) {
|
|
204
|
+
this._setConnectionState('disconnected')
|
|
205
|
+
throw new Error(`WebSocket not available: ${(error as Error).message}`)
|
|
206
|
+
}
|
|
207
|
+
} else {
|
|
208
|
+
// Use custom transport if provided
|
|
209
|
+
this.conn = new this.transport!(this.endpointURL()) as WebSocketLike
|
|
208
210
|
}
|
|
209
|
-
|
|
210
|
-
this.conn = new this.transport!(this.endpointURL()) as WebSocketLike
|
|
211
211
|
this._setupConnectionHandlers()
|
|
212
212
|
}
|
|
213
213
|
|
|
@@ -462,10 +462,16 @@ export default class RealtimeClient {
|
|
|
462
462
|
if (customFetch) {
|
|
463
463
|
_fetch = customFetch
|
|
464
464
|
} else if (typeof fetch === 'undefined') {
|
|
465
|
+
// Node.js environment without native fetch
|
|
465
466
|
_fetch = (...args) =>
|
|
466
|
-
import('@supabase/node-fetch' as any)
|
|
467
|
-
fetch(...args)
|
|
468
|
-
|
|
467
|
+
import('@supabase/node-fetch' as any)
|
|
468
|
+
.then(({ default: fetch }) => fetch(...args))
|
|
469
|
+
.catch((error) => {
|
|
470
|
+
throw new Error(
|
|
471
|
+
`Failed to load @supabase/node-fetch: ${error.message}. ` +
|
|
472
|
+
`This is required for HTTP requests in Node.js environments without native fetch.`
|
|
473
|
+
)
|
|
474
|
+
})
|
|
469
475
|
} else {
|
|
470
476
|
_fetch = fetch
|
|
471
477
|
}
|
|
@@ -577,7 +583,11 @@ export default class RealtimeClient {
|
|
|
577
583
|
private _setupConnectionHandlers(): void {
|
|
578
584
|
if (!this.conn) return
|
|
579
585
|
|
|
580
|
-
|
|
586
|
+
// Set binary type if supported (browsers and most WebSocket implementations)
|
|
587
|
+
if ('binaryType' in this.conn) {
|
|
588
|
+
;(this.conn as any).binaryType = 'arraybuffer'
|
|
589
|
+
}
|
|
590
|
+
|
|
581
591
|
this.conn.onopen = () => this._onConnOpen()
|
|
582
592
|
this.conn.onerror = (error: Event) => this._onConnError(error)
|
|
583
593
|
this.conn.onmessage = (event: any) => this._onConnMessage(event)
|
package/src/index.ts
CHANGED
|
@@ -22,6 +22,7 @@ import RealtimePresence, {
|
|
|
22
22
|
RealtimePresenceLeavePayload,
|
|
23
23
|
REALTIME_PRESENCE_LISTEN_EVENTS,
|
|
24
24
|
} from './RealtimePresence'
|
|
25
|
+
import WebSocketFactory, { WebSocketLike } from './lib/websocket-factory'
|
|
25
26
|
|
|
26
27
|
export {
|
|
27
28
|
RealtimePresence,
|
|
@@ -45,4 +46,6 @@ export {
|
|
|
45
46
|
REALTIME_PRESENCE_LISTEN_EVENTS,
|
|
46
47
|
REALTIME_SUBSCRIBE_STATES,
|
|
47
48
|
REALTIME_CHANNEL_STATES,
|
|
49
|
+
WebSocketFactory,
|
|
50
|
+
WebSocketLike,
|
|
48
51
|
}
|
package/src/lib/constants.ts
CHANGED
package/src/lib/timer.ts
CHANGED
package/src/lib/transformers.ts
CHANGED
|
@@ -250,5 +250,5 @@ export const httpEndpointURL = (socketUrl: string): string => {
|
|
|
250
250
|
let url = socketUrl
|
|
251
251
|
url = url.replace(/^ws/i, 'http')
|
|
252
252
|
url = url.replace(/(\/socket\/websocket|\/socket|\/websocket)\/?$/i, '')
|
|
253
|
-
return url.replace(/\/+$/, '')
|
|
253
|
+
return url.replace(/\/+$/, '') + '/api/broadcast'
|
|
254
254
|
}
|
package/src/lib/version.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export const version = '2.
|
|
1
|
+
export const version = '2.15.0'
|
|
@@ -0,0 +1,189 @@
|
|
|
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
|
+
|
|
10
|
+
close(code?: number, reason?: string): void
|
|
11
|
+
send(data: string | ArrayBufferLike | Blob | ArrayBufferView): void
|
|
12
|
+
|
|
13
|
+
onopen: ((this: any, ev: Event) => any) | null
|
|
14
|
+
onmessage: ((this: any, ev: MessageEvent) => any) | null
|
|
15
|
+
onclose: ((this: any, ev: CloseEvent) => any) | null
|
|
16
|
+
onerror: ((this: any, ev: Event) => any) | null
|
|
17
|
+
|
|
18
|
+
addEventListener(type: string, listener: EventListener): void
|
|
19
|
+
removeEventListener(type: string, listener: EventListener): void
|
|
20
|
+
|
|
21
|
+
// Add additional properties that may exist on WebSocket implementations
|
|
22
|
+
binaryType?: string
|
|
23
|
+
bufferedAmount?: number
|
|
24
|
+
extensions?: string
|
|
25
|
+
dispatchEvent?: (event: Event) => boolean
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export interface WebSocketEnvironment {
|
|
29
|
+
type: 'native' | 'ws' | 'cloudflare' | 'unsupported'
|
|
30
|
+
constructor?: any
|
|
31
|
+
error?: string
|
|
32
|
+
workaround?: string
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export class WebSocketFactory {
|
|
36
|
+
/**
|
|
37
|
+
* Dynamic require that works in both CJS and ESM environments
|
|
38
|
+
* Bulletproof against strict ESM environments where require might not be in scope
|
|
39
|
+
* @private
|
|
40
|
+
*/
|
|
41
|
+
private static dynamicRequire(moduleId: string): any {
|
|
42
|
+
try {
|
|
43
|
+
// Check if we're in a Node.js environment first
|
|
44
|
+
if (
|
|
45
|
+
typeof process !== 'undefined' &&
|
|
46
|
+
process.versions &&
|
|
47
|
+
process.versions.node
|
|
48
|
+
) {
|
|
49
|
+
// In Node.js, both CJS and ESM support require for dynamic imports
|
|
50
|
+
// Wrap in try/catch to handle strict ESM environments
|
|
51
|
+
if (typeof require !== 'undefined') {
|
|
52
|
+
return require(moduleId)
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
return null
|
|
56
|
+
} catch {
|
|
57
|
+
// Catches any error from typeof require OR require() call in strict ESM
|
|
58
|
+
return null
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
private static detectEnvironment(): WebSocketEnvironment {
|
|
63
|
+
if (typeof WebSocket !== 'undefined') {
|
|
64
|
+
return { type: 'native', constructor: WebSocket }
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
if (
|
|
68
|
+
typeof globalThis !== 'undefined' &&
|
|
69
|
+
typeof (globalThis as any).WebSocket !== 'undefined'
|
|
70
|
+
) {
|
|
71
|
+
return { type: 'native', constructor: (globalThis as any).WebSocket }
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
if (
|
|
75
|
+
typeof global !== 'undefined' &&
|
|
76
|
+
typeof (global as any).WebSocket !== 'undefined'
|
|
77
|
+
) {
|
|
78
|
+
return { type: 'native', constructor: (global as any).WebSocket }
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
if (
|
|
82
|
+
typeof globalThis !== 'undefined' &&
|
|
83
|
+
typeof (globalThis as any).WebSocketPair !== 'undefined' &&
|
|
84
|
+
typeof globalThis.WebSocket === 'undefined'
|
|
85
|
+
) {
|
|
86
|
+
return {
|
|
87
|
+
type: 'cloudflare',
|
|
88
|
+
error:
|
|
89
|
+
'Cloudflare Workers detected. WebSocket clients are not supported in Cloudflare Workers.',
|
|
90
|
+
workaround:
|
|
91
|
+
'Use Cloudflare Workers WebSocket API for server-side WebSocket handling, or deploy to a different runtime.',
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
if (
|
|
96
|
+
(typeof globalThis !== 'undefined' && (globalThis as any).EdgeRuntime) ||
|
|
97
|
+
(typeof navigator !== 'undefined' &&
|
|
98
|
+
navigator.userAgent?.includes('Vercel-Edge'))
|
|
99
|
+
) {
|
|
100
|
+
return {
|
|
101
|
+
type: 'unsupported',
|
|
102
|
+
error:
|
|
103
|
+
'Edge runtime detected (Vercel Edge/Netlify Edge). WebSockets are not supported in edge functions.',
|
|
104
|
+
workaround:
|
|
105
|
+
'Use serverless functions or a different deployment target for WebSocket functionality.',
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
if (
|
|
110
|
+
typeof process !== 'undefined' &&
|
|
111
|
+
process.versions &&
|
|
112
|
+
process.versions.node
|
|
113
|
+
) {
|
|
114
|
+
const nodeVersion = parseInt(process.versions.node.split('.')[0])
|
|
115
|
+
if (nodeVersion >= 22) {
|
|
116
|
+
try {
|
|
117
|
+
if (typeof globalThis.WebSocket !== 'undefined') {
|
|
118
|
+
return { type: 'native', constructor: globalThis.WebSocket }
|
|
119
|
+
}
|
|
120
|
+
const undici = this.dynamicRequire('undici')
|
|
121
|
+
if (undici && undici.WebSocket) {
|
|
122
|
+
return { type: 'native', constructor: undici.WebSocket }
|
|
123
|
+
}
|
|
124
|
+
throw new Error('undici not available')
|
|
125
|
+
} catch (err) {
|
|
126
|
+
return {
|
|
127
|
+
type: 'unsupported',
|
|
128
|
+
error: `Node.js ${nodeVersion} detected but native WebSocket not found.`,
|
|
129
|
+
workaround:
|
|
130
|
+
'Install the "ws" package or check your Node.js installation.',
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
try {
|
|
135
|
+
// Use dynamic require to work in both CJS and ESM environments
|
|
136
|
+
const ws = this.dynamicRequire('ws')
|
|
137
|
+
if (ws) {
|
|
138
|
+
return { type: 'ws', constructor: ws.WebSocket ?? ws }
|
|
139
|
+
}
|
|
140
|
+
throw new Error('ws package not available')
|
|
141
|
+
} catch (err) {
|
|
142
|
+
return {
|
|
143
|
+
type: 'unsupported',
|
|
144
|
+
error: `Node.js ${nodeVersion} detected without WebSocket support.`,
|
|
145
|
+
workaround: 'Install the "ws" package: npm install ws',
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
return {
|
|
151
|
+
type: 'unsupported',
|
|
152
|
+
error: 'Unknown JavaScript runtime without WebSocket support.',
|
|
153
|
+
workaround:
|
|
154
|
+
"Ensure you're running in a supported environment (browser, Node.js, Deno) or provide a custom WebSocket implementation.",
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
public static getWebSocketConstructor(): typeof WebSocket {
|
|
159
|
+
const env = this.detectEnvironment()
|
|
160
|
+
if (env.constructor) {
|
|
161
|
+
return env.constructor
|
|
162
|
+
}
|
|
163
|
+
let errorMessage =
|
|
164
|
+
env.error || 'WebSocket not supported in this environment.'
|
|
165
|
+
if (env.workaround) {
|
|
166
|
+
errorMessage += `\n\nSuggested solution: ${env.workaround}`
|
|
167
|
+
}
|
|
168
|
+
throw new Error(errorMessage)
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
public static createWebSocket(
|
|
172
|
+
url: string | URL,
|
|
173
|
+
protocols?: string | string[]
|
|
174
|
+
): WebSocketLike {
|
|
175
|
+
const WS = this.getWebSocketConstructor()
|
|
176
|
+
return new WS(url, protocols)
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
public static isWebSocketSupported(): boolean {
|
|
180
|
+
try {
|
|
181
|
+
const env = this.detectEnvironment()
|
|
182
|
+
return env.type === 'native' || env.type === 'ws'
|
|
183
|
+
} catch {
|
|
184
|
+
return false
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
export default WebSocketFactory
|