@supabase/realtime-js 2.99.3-canary.0 → 2.99.3

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 (111) hide show
  1. package/dist/main/RealtimeChannel.d.ts +28 -35
  2. package/dist/main/RealtimeChannel.d.ts.map +1 -1
  3. package/dist/main/RealtimeChannel.js +301 -140
  4. package/dist/main/RealtimeChannel.js.map +1 -1
  5. package/dist/main/RealtimeClient.d.ts +57 -38
  6. package/dist/main/RealtimeClient.d.ts.map +1 -1
  7. package/dist/main/RealtimeClient.js +520 -232
  8. package/dist/main/RealtimeClient.js.map +1 -1
  9. package/dist/main/RealtimePresence.d.ts +24 -8
  10. package/dist/main/RealtimePresence.d.ts.map +1 -1
  11. package/dist/main/RealtimePresence.js +202 -6
  12. package/dist/main/RealtimePresence.js.map +1 -1
  13. package/dist/main/lib/constants.d.ts +35 -39
  14. package/dist/main/lib/constants.d.ts.map +1 -1
  15. package/dist/main/lib/constants.js +35 -30
  16. package/dist/main/lib/constants.js.map +1 -1
  17. package/dist/main/lib/push.d.ts +48 -0
  18. package/dist/main/lib/push.d.ts.map +1 -0
  19. package/dist/main/lib/push.js +102 -0
  20. package/dist/main/lib/push.js.map +1 -0
  21. package/dist/main/lib/timer.d.ts +22 -0
  22. package/dist/main/lib/timer.d.ts.map +1 -0
  23. package/dist/main/lib/timer.js +39 -0
  24. package/dist/main/lib/timer.js.map +1 -0
  25. package/dist/main/lib/version.d.ts +1 -1
  26. package/dist/main/lib/version.d.ts.map +1 -1
  27. package/dist/main/lib/version.js +1 -1
  28. package/dist/main/lib/version.js.map +1 -1
  29. package/dist/main/lib/websocket-factory.d.ts +9 -0
  30. package/dist/main/lib/websocket-factory.d.ts.map +1 -1
  31. package/dist/main/lib/websocket-factory.js +12 -0
  32. package/dist/main/lib/websocket-factory.js.map +1 -1
  33. package/dist/module/RealtimeChannel.d.ts +28 -35
  34. package/dist/module/RealtimeChannel.d.ts.map +1 -1
  35. package/dist/module/RealtimeChannel.js +302 -141
  36. package/dist/module/RealtimeChannel.js.map +1 -1
  37. package/dist/module/RealtimeClient.d.ts +57 -38
  38. package/dist/module/RealtimeClient.d.ts.map +1 -1
  39. package/dist/module/RealtimeClient.js +521 -233
  40. package/dist/module/RealtimeClient.js.map +1 -1
  41. package/dist/module/RealtimePresence.d.ts +24 -8
  42. package/dist/module/RealtimePresence.d.ts.map +1 -1
  43. package/dist/module/RealtimePresence.js +202 -5
  44. package/dist/module/RealtimePresence.js.map +1 -1
  45. package/dist/module/lib/constants.d.ts +35 -39
  46. package/dist/module/lib/constants.d.ts.map +1 -1
  47. package/dist/module/lib/constants.js +35 -30
  48. package/dist/module/lib/constants.js.map +1 -1
  49. package/dist/module/lib/push.d.ts +48 -0
  50. package/dist/module/lib/push.d.ts.map +1 -0
  51. package/dist/module/lib/push.js +99 -0
  52. package/dist/module/lib/push.js.map +1 -0
  53. package/dist/module/lib/timer.d.ts +22 -0
  54. package/dist/module/lib/timer.d.ts.map +1 -0
  55. package/dist/module/lib/timer.js +36 -0
  56. package/dist/module/lib/timer.js.map +1 -0
  57. package/dist/module/lib/version.d.ts +1 -1
  58. package/dist/module/lib/version.d.ts.map +1 -1
  59. package/dist/module/lib/version.js +1 -1
  60. package/dist/module/lib/version.js.map +1 -1
  61. package/dist/module/lib/websocket-factory.d.ts +9 -0
  62. package/dist/module/lib/websocket-factory.d.ts.map +1 -1
  63. package/dist/module/lib/websocket-factory.js +12 -0
  64. package/dist/module/lib/websocket-factory.js.map +1 -1
  65. package/dist/tsconfig.module.tsbuildinfo +1 -1
  66. package/dist/tsconfig.tsbuildinfo +1 -1
  67. package/package.json +3 -3
  68. package/src/RealtimeChannel.ts +364 -201
  69. package/src/RealtimeClient.ts +583 -296
  70. package/src/RealtimePresence.ts +287 -10
  71. package/src/lib/constants.ts +37 -50
  72. package/src/lib/push.ts +121 -0
  73. package/src/lib/timer.ts +43 -0
  74. package/src/lib/version.ts +1 -1
  75. package/src/lib/websocket-factory.ts +13 -0
  76. package/dist/main/phoenix/channelAdapter.d.ts +0 -32
  77. package/dist/main/phoenix/channelAdapter.d.ts.map +0 -1
  78. package/dist/main/phoenix/channelAdapter.js +0 -103
  79. package/dist/main/phoenix/channelAdapter.js.map +0 -1
  80. package/dist/main/phoenix/presenceAdapter.d.ts +0 -53
  81. package/dist/main/phoenix/presenceAdapter.d.ts.map +0 -1
  82. package/dist/main/phoenix/presenceAdapter.js +0 -93
  83. package/dist/main/phoenix/presenceAdapter.js.map +0 -1
  84. package/dist/main/phoenix/socketAdapter.d.ts +0 -38
  85. package/dist/main/phoenix/socketAdapter.d.ts.map +0 -1
  86. package/dist/main/phoenix/socketAdapter.js +0 -114
  87. package/dist/main/phoenix/socketAdapter.js.map +0 -1
  88. package/dist/main/phoenix/types.d.ts +0 -5
  89. package/dist/main/phoenix/types.d.ts.map +0 -1
  90. package/dist/main/phoenix/types.js +0 -3
  91. package/dist/main/phoenix/types.js.map +0 -1
  92. package/dist/module/phoenix/channelAdapter.d.ts +0 -32
  93. package/dist/module/phoenix/channelAdapter.d.ts.map +0 -1
  94. package/dist/module/phoenix/channelAdapter.js +0 -100
  95. package/dist/module/phoenix/channelAdapter.js.map +0 -1
  96. package/dist/module/phoenix/presenceAdapter.d.ts +0 -53
  97. package/dist/module/phoenix/presenceAdapter.d.ts.map +0 -1
  98. package/dist/module/phoenix/presenceAdapter.js +0 -90
  99. package/dist/module/phoenix/presenceAdapter.js.map +0 -1
  100. package/dist/module/phoenix/socketAdapter.d.ts +0 -38
  101. package/dist/module/phoenix/socketAdapter.d.ts.map +0 -1
  102. package/dist/module/phoenix/socketAdapter.js +0 -111
  103. package/dist/module/phoenix/socketAdapter.js.map +0 -1
  104. package/dist/module/phoenix/types.d.ts +0 -5
  105. package/dist/module/phoenix/types.d.ts.map +0 -1
  106. package/dist/module/phoenix/types.js +0 -2
  107. package/dist/module/phoenix/types.js.map +0 -1
  108. package/src/phoenix/channelAdapter.ts +0 -147
  109. package/src/phoenix/presenceAdapter.ts +0 -116
  110. package/src/phoenix/socketAdapter.ts +0 -168
  111. package/src/phoenix/types.ts +0 -32
@@ -1,90 +0,0 @@
1
- import { Presence } from '@supabase/phoenix';
2
- export default class PresenceAdapter {
3
- constructor(channel, opts) {
4
- const phoenixOptions = phoenixPresenceOptions(opts);
5
- this.presence = new Presence(channel.getChannel(), phoenixOptions);
6
- this.presence.onJoin((key, currentPresence, newPresence) => {
7
- const onJoinPayload = PresenceAdapter.onJoinPayload(key, currentPresence, newPresence);
8
- channel.getChannel().trigger('presence', onJoinPayload);
9
- });
10
- this.presence.onLeave((key, currentPresence, leftPresence) => {
11
- const onLeavePayload = PresenceAdapter.onLeavePayload(key, currentPresence, leftPresence);
12
- channel.getChannel().trigger('presence', onLeavePayload);
13
- });
14
- this.presence.onSync(() => {
15
- channel.getChannel().trigger('presence', { event: 'sync' });
16
- });
17
- }
18
- get state() {
19
- return PresenceAdapter.transformState(this.presence.state);
20
- }
21
- /**
22
- * @private
23
- * Remove 'metas' key
24
- * Change 'phx_ref' to 'presence_ref'
25
- * Remove 'phx_ref' and 'phx_ref_prev'
26
- *
27
- * @example
28
- * // returns {
29
- * abc123: [
30
- * { presence_ref: '2', user_id: 1 },
31
- * { presence_ref: '3', user_id: 2 }
32
- * ]
33
- * }
34
- * RealtimePresence.transformState({
35
- * abc123: {
36
- * metas: [
37
- * { phx_ref: '2', phx_ref_prev: '1' user_id: 1 },
38
- * { phx_ref: '3', user_id: 2 }
39
- * ]
40
- * }
41
- * })
42
- *
43
- */
44
- static transformState(state) {
45
- state = cloneState(state);
46
- return Object.getOwnPropertyNames(state).reduce((newState, key) => {
47
- const presences = state[key];
48
- newState[key] = transformState(presences);
49
- return newState;
50
- }, {});
51
- }
52
- static onJoinPayload(key, currentPresence, newPresence) {
53
- const currentPresences = parseCurrentPresences(currentPresence);
54
- const newPresences = transformState(newPresence);
55
- return {
56
- event: 'join',
57
- key,
58
- currentPresences,
59
- newPresences,
60
- };
61
- }
62
- static onLeavePayload(key, currentPresence, leftPresence) {
63
- const currentPresences = parseCurrentPresences(currentPresence);
64
- const leftPresences = transformState(leftPresence);
65
- return {
66
- event: 'leave',
67
- key,
68
- currentPresences,
69
- leftPresences,
70
- };
71
- }
72
- }
73
- function transformState(presences) {
74
- return presences.metas.map((presence) => {
75
- presence['presence_ref'] = presence['phx_ref'];
76
- delete presence['phx_ref'];
77
- delete presence['phx_ref_prev'];
78
- return presence;
79
- });
80
- }
81
- function cloneState(state) {
82
- return JSON.parse(JSON.stringify(state));
83
- }
84
- function phoenixPresenceOptions(opts) {
85
- return (opts === null || opts === void 0 ? void 0 : opts.events) && { events: opts.events };
86
- }
87
- function parseCurrentPresences(currentPresences) {
88
- return (currentPresences === null || currentPresences === void 0 ? void 0 : currentPresences.metas) ? transformState(currentPresences) : [];
89
- }
90
- //# sourceMappingURL=presenceAdapter.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"presenceAdapter.js","sourceRoot":"","sources":["../../../src/phoenix/presenceAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAS5C,MAAM,CAAC,OAAO,OAAO,eAAe;IAGlC,YAAY,OAAuB,EAAE,IAA8B;QACjE,MAAM,cAAc,GAAG,sBAAsB,CAAC,IAAI,CAAC,CAAA;QACnD,IAAI,CAAC,QAAQ,GAAG,IAAI,QAAQ,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,cAAc,CAAC,CAAA;QAElE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,eAAe,EAAE,WAAW,EAAE,EAAE;YACzD,MAAM,aAAa,GAAG,eAAe,CAAC,aAAa,CAAC,GAAG,EAAE,eAAe,EAAE,WAAW,CAAC,CAAA;YACtF,OAAO,CAAC,UAAU,EAAE,CAAC,OAAO,CAAC,UAAU,EAAE,aAAa,CAAC,CAAA;QACzD,CAAC,CAAC,CAAA;QAEF,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,eAAe,EAAE,YAAY,EAAE,EAAE;YAC3D,MAAM,cAAc,GAAG,eAAe,CAAC,cAAc,CAAC,GAAG,EAAE,eAAe,EAAE,YAAY,CAAC,CAAA;YACzF,OAAO,CAAC,UAAU,EAAE,CAAC,OAAO,CAAC,UAAU,EAAE,cAAc,CAAC,CAAA;QAC1D,CAAC,CAAC,CAAA;QAEF,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE;YACxB,OAAO,CAAC,UAAU,EAAE,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAA;QAC7D,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,IAAI,KAAK;QACP,OAAO,eAAe,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;IAC5D,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,MAAM,CAAC,cAAc,CAAC,KAAqB;QACzC,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,CAAA;QAEzB,OAAO,MAAM,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,GAAG,EAAE,EAAE;YAChE,MAAM,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,CAAA;YAC5B,QAAQ,CAAC,GAAG,CAAC,GAAG,cAAc,CAAC,SAAS,CAAC,CAAA;YAEzC,OAAO,QAAQ,CAAA;QACjB,CAAC,EAAE,EAA2B,CAAC,CAAA;IACjC,CAAC;IAED,MAAM,CAAC,aAAa,CAAC,GAAW,EAAE,eAA8B,EAAE,WAA0B;QAC1F,MAAM,gBAAgB,GAAG,qBAAqB,CAAC,eAAe,CAAC,CAAA;QAC/D,MAAM,YAAY,GAAG,cAAc,CAAC,WAAW,CAAC,CAAA;QAEhD,OAAO;YACL,KAAK,EAAE,MAAM;YACb,GAAG;YACH,gBAAgB;YAChB,YAAY;SACb,CAAA;IACH,CAAC;IAED,MAAM,CAAC,cAAc,CAAC,GAAW,EAAE,eAA8B,EAAE,YAA2B;QAC5F,MAAM,gBAAgB,GAAG,qBAAqB,CAAC,eAAe,CAAC,CAAA;QAC/D,MAAM,aAAa,GAAG,cAAc,CAAC,YAAY,CAAC,CAAA;QAElD,OAAO;YACL,KAAK,EAAE,OAAO;YACd,GAAG;YACH,gBAAgB;YAChB,aAAa;SACd,CAAA;IACH,CAAC;CACF;AAED,SAAS,cAAc,CAAC,SAAwB;IAC9C,OAAO,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE;QACtC,QAAQ,CAAC,cAAc,CAAC,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAA;QAE9C,OAAO,QAAQ,CAAC,SAAS,CAAC,CAAA;QAC1B,OAAO,QAAQ,CAAC,cAAc,CAAC,CAAA;QAE/B,OAAO,QAAQ,CAAA;IACjB,CAAC,CAA2B,CAAA;AAC9B,CAAC;AAED,SAAS,UAAU,CAAC,KAAqB;IACvC,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAA;AAC1C,CAAC;AAED,SAAS,sBAAsB,CAAC,IAA8B;IAC5D,OAAO,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,MAAM,KAAI,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAA;AAChD,CAAC;AAED,SAAS,qBAAqB,CAAC,gBAAgC;IAC7D,OAAO,CAAA,gBAAgB,aAAhB,gBAAgB,uBAAhB,gBAAgB,CAAE,KAAK,EAAC,CAAC,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;AACxE,CAAC"}
@@ -1,38 +0,0 @@
1
- import type { Message, SocketOnClose, SocketOnMessage, SocketOnOpen, SocketOnError, SocketOptions, SocketStateChangeCallbacks, Vsn, Encode, Decode, HeartbeatCallback, Timer } from './types';
2
- import { ConnectionState } from '../lib/constants';
3
- import type { HeartbeatTimer, WebSocketLikeConstructor } from '../RealtimeClient';
4
- export default class SocketAdapter {
5
- private socket;
6
- constructor(endPoint: string, options: SocketOptions);
7
- get timeout(): number;
8
- get endPoint(): string;
9
- get transport(): WebSocketLikeConstructor;
10
- get heartbeatIntervalMs(): number;
11
- get heartbeatCallback(): HeartbeatCallback;
12
- set heartbeatCallback(callback: HeartbeatCallback);
13
- get heartbeatTimer(): HeartbeatTimer;
14
- get pendingHeartbeatRef(): string | null;
15
- get reconnectTimer(): Timer;
16
- get vsn(): Vsn;
17
- get encode(): Encode<void>;
18
- get decode(): Decode<void>;
19
- get reconnectAfterMs(): (tries: number) => number;
20
- get sendBuffer(): (() => void)[];
21
- get stateChangeCallbacks(): SocketStateChangeCallbacks;
22
- connect(): void;
23
- disconnect(callback: () => void, code?: number, reason?: string, timeout?: number): Promise<'ok' | 'timeout'>;
24
- push(data: Message<Record<string, unknown>>): void;
25
- log(kind: string, msg: string, data?: any): void;
26
- makeRef(): string;
27
- onOpen(callback: SocketOnOpen): void;
28
- onClose(callback: SocketOnClose): void;
29
- onError(callback: SocketOnError): void;
30
- onMessage(callback: SocketOnMessage): void;
31
- isConnected(): boolean;
32
- isConnecting(): boolean;
33
- isDisconnecting(): boolean;
34
- connectionState(): ConnectionState;
35
- endPointURL(): string;
36
- sendHeartbeat(): void;
37
- }
38
- //# sourceMappingURL=socketAdapter.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"socketAdapter.d.ts","sourceRoot":"","sources":["../../../src/phoenix/socketAdapter.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,OAAO,EACP,aAAa,EACb,eAAe,EACf,YAAY,EACZ,aAAa,EACb,aAAa,EACb,0BAA0B,EAC1B,GAAG,EACH,MAAM,EACN,MAAM,EACN,iBAAiB,EACjB,KAAK,EACN,MAAM,SAAS,CAAA;AAChB,OAAO,EAAoB,eAAe,EAAE,MAAM,kBAAkB,CAAA;AACpE,OAAO,KAAK,EAAE,cAAc,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAA;AAEjF,MAAM,CAAC,OAAO,OAAO,aAAa;IAChC,OAAO,CAAC,MAAM,CAAQ;gBAEV,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa;IAIpD,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED,IAAI,QAAQ,IAAI,MAAM,CAErB;IAED,IAAI,SAAS,IAAI,wBAAwB,CAExC;IAED,IAAI,mBAAmB,IAAI,MAAM,CAEhC;IAED,IAAI,iBAAiB,IAAI,iBAAiB,CAEzC;IAED,IAAI,iBAAiB,CAAC,QAAQ,EAAE,iBAAiB,EAEhD;IAED,IAAI,cAAc,IAAI,cAAc,CAEnC;IAED,IAAI,mBAAmB,IAAI,MAAM,GAAG,IAAI,CAEvC;IAED,IAAI,cAAc,IAAI,KAAK,CAE1B;IAED,IAAI,GAAG,IAAI,GAAG,CAEb;IAED,IAAI,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,CAEzB;IAED,IAAI,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,CAEzB;IAED,IAAI,gBAAgB,IAAI,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAEhD;IAED,IAAI,UAAU,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE,CAE/B;IAED,IAAI,oBAAoB,IAAI,0BAA0B,CAErD;IAED,OAAO;IAIP,UAAU,CACR,QAAQ,EAAE,MAAM,IAAI,EACpB,IAAI,CAAC,EAAE,MAAM,EACb,MAAM,CAAC,EAAE,MAAM,EACf,OAAO,GAAE,MAAc,GACtB,OAAO,CAAC,IAAI,GAAG,SAAS,CAAC;IAc5B,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAI3C,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG;IAIzC,OAAO,IAAI,MAAM;IAIjB,MAAM,CAAC,QAAQ,EAAE,YAAY;IAI7B,OAAO,CAAC,QAAQ,EAAE,aAAa;IAI/B,OAAO,CAAC,QAAQ,EAAE,aAAa;IAI/B,SAAS,CAAC,QAAQ,EAAE,eAAe;IAInC,WAAW;IAIX,YAAY;IAIZ,eAAe;IAIf,eAAe,IAAI,eAAe;IAKlC,WAAW,IAAI,MAAM;IAIrB,aAAa;CAUd"}
@@ -1,111 +0,0 @@
1
- import { Socket } from '@supabase/phoenix';
2
- import { CONNECTION_STATE } from '../lib/constants';
3
- export default class SocketAdapter {
4
- constructor(endPoint, options) {
5
- this.socket = new Socket(endPoint, options);
6
- }
7
- get timeout() {
8
- return this.socket.timeout;
9
- }
10
- get endPoint() {
11
- return this.socket.endPoint;
12
- }
13
- get transport() {
14
- return this.socket.transport;
15
- }
16
- get heartbeatIntervalMs() {
17
- return this.socket.heartbeatIntervalMs;
18
- }
19
- get heartbeatCallback() {
20
- return this.socket.heartbeatCallback;
21
- }
22
- set heartbeatCallback(callback) {
23
- this.socket.heartbeatCallback = callback;
24
- }
25
- get heartbeatTimer() {
26
- return this.socket.heartbeatTimer;
27
- }
28
- get pendingHeartbeatRef() {
29
- return this.socket.pendingHeartbeatRef;
30
- }
31
- get reconnectTimer() {
32
- return this.socket.reconnectTimer;
33
- }
34
- get vsn() {
35
- return this.socket.vsn;
36
- }
37
- get encode() {
38
- return this.socket.encode;
39
- }
40
- get decode() {
41
- return this.socket.decode;
42
- }
43
- get reconnectAfterMs() {
44
- return this.socket.reconnectAfterMs;
45
- }
46
- get sendBuffer() {
47
- return this.socket.sendBuffer;
48
- }
49
- get stateChangeCallbacks() {
50
- return this.socket.stateChangeCallbacks;
51
- }
52
- connect() {
53
- this.socket.connect();
54
- }
55
- disconnect(callback, code, reason, timeout = 10000) {
56
- return new Promise((resolve) => {
57
- setTimeout(() => resolve('timeout'), timeout);
58
- this.socket.disconnect(() => {
59
- callback();
60
- resolve('ok');
61
- }, code, reason);
62
- });
63
- }
64
- push(data) {
65
- this.socket.push(data);
66
- }
67
- log(kind, msg, data) {
68
- this.socket.log(kind, msg, data);
69
- }
70
- makeRef() {
71
- return this.socket.makeRef();
72
- }
73
- onOpen(callback) {
74
- this.socket.onOpen(callback);
75
- }
76
- onClose(callback) {
77
- this.socket.onClose(callback);
78
- }
79
- onError(callback) {
80
- this.socket.onError(callback);
81
- }
82
- onMessage(callback) {
83
- this.socket.onMessage(callback);
84
- }
85
- isConnected() {
86
- return this.socket.isConnected();
87
- }
88
- isConnecting() {
89
- return this.socket.connectionState() == CONNECTION_STATE.connecting;
90
- }
91
- isDisconnecting() {
92
- return this.socket.connectionState() == CONNECTION_STATE.closing;
93
- }
94
- connectionState() {
95
- // @ts-ignore - requires better typing and exposing type in phoenix
96
- return this.socket.connectionState();
97
- }
98
- endPointURL() {
99
- return this.socket.endPointURL();
100
- }
101
- sendHeartbeat() {
102
- this.socket.sendHeartbeat();
103
- }
104
- /**
105
- * @internal
106
- */
107
- getSocket() {
108
- return this.socket;
109
- }
110
- }
111
- //# sourceMappingURL=socketAdapter.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"socketAdapter.js","sourceRoot":"","sources":["../../../src/phoenix/socketAdapter.ts"],"names":[],"mappings":"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"}
@@ -1,5 +0,0 @@
1
- export type { Socket, SocketOptions, SocketState, SocketOnOpen, SocketOnError, SocketOnMessage, SocketOnClose, SocketStateChangeCallbacks, Channel, ChannelState, ChannelEvent, ChannelBindingCallback, ChannelFilterBindings, ChannelOnMessage, ChannelOnErrorCallback, PresenceState, Message, Params, Transport, Timer, Vsn, Encode, Decode, HeartbeatCallback, HeartbeatStatus, } from '@supabase/phoenix';
2
- import type { Channel, PresenceState } from '@supabase/phoenix';
3
- export type Push = ReturnType<Channel['push']>;
4
- export type PresenceStates = Record<string, PresenceState>;
5
- //# sourceMappingURL=types.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/phoenix/types.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,MAAM,EACN,aAAa,EACb,WAAW,EACX,YAAY,EACZ,aAAa,EACb,eAAe,EACf,aAAa,EACb,0BAA0B,EAC1B,OAAO,EACP,YAAY,EACZ,YAAY,EACZ,sBAAsB,EACtB,qBAAqB,EACrB,gBAAgB,EAChB,sBAAsB,EACtB,aAAa,EACb,OAAO,EACP,MAAM,EACN,SAAS,EACT,KAAK,EACL,GAAG,EACH,MAAM,EACN,MAAM,EACN,iBAAiB,EACjB,eAAe,GAChB,MAAM,mBAAmB,CAAA;AAE1B,OAAO,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAE/D,MAAM,MAAM,IAAI,GAAG,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAA;AAC9C,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/phoenix/types.ts"],"names":[],"mappings":""}
@@ -1,147 +0,0 @@
1
- import { Channel } from '@supabase/phoenix'
2
- import { CHANNEL_STATES, MAX_PUSH_BUFFER_SIZE } from '../lib/constants'
3
- import type { RealtimeChannelOptions } from '../RealtimeChannel'
4
- import SocketAdapter from './socketAdapter'
5
- import type {
6
- ChannelBindingCallback,
7
- ChannelOnMessage,
8
- ChannelOnErrorCallback,
9
- ChannelFilterBindings,
10
- Params,
11
- ChannelState,
12
- Push,
13
- Timer,
14
- } from './types'
15
-
16
- export default class ChannelAdapter {
17
- private channel: Channel
18
- private socket: SocketAdapter
19
-
20
- constructor(socket: SocketAdapter, topic: string, params: RealtimeChannelOptions) {
21
- const phoenixParams = phoenixChannelParams(params)
22
- this.channel = socket.getSocket().channel(topic, phoenixParams)
23
- this.socket = socket
24
- }
25
-
26
- get state(): ChannelState {
27
- return this.channel.state
28
- }
29
-
30
- set state(state: ChannelState) {
31
- this.channel.state = state
32
- }
33
-
34
- get joinedOnce(): boolean {
35
- return this.channel.joinedOnce
36
- }
37
-
38
- get joinPush(): Push {
39
- return this.channel.joinPush
40
- }
41
-
42
- get rejoinTimer(): Timer {
43
- return this.channel.rejoinTimer
44
- }
45
-
46
- on(event: string, callback: ChannelBindingCallback): number {
47
- return this.channel.on(event, callback)
48
- }
49
-
50
- off(event: string, refNumber?: number) {
51
- this.channel.off(event, refNumber)
52
- }
53
-
54
- subscribe(timeout?: number): Push {
55
- return this.channel.join(timeout)
56
- }
57
-
58
- unsubscribe(timeout?: number): Push {
59
- return this.channel.leave(timeout)
60
- }
61
-
62
- teardown() {
63
- this.channel.teardown()
64
- }
65
-
66
- onClose(callback: ChannelBindingCallback) {
67
- this.channel.onClose(callback)
68
- }
69
-
70
- onError(callback: ChannelOnErrorCallback): number {
71
- return this.channel.onError(callback)
72
- }
73
-
74
- push(event: string, payload: { [key: string]: any }, timeout?: number): Push {
75
- let push: Push
76
-
77
- try {
78
- push = this.channel.push(event, payload, timeout)
79
- } catch (error) {
80
- throw `tried to push '${event}' to '${this.channel.topic}' before joining. Use channel.subscribe() before pushing events`
81
- }
82
-
83
- if (this.channel.pushBuffer.length > MAX_PUSH_BUFFER_SIZE) {
84
- const removedPush = this.channel.pushBuffer.shift()!
85
- removedPush.cancelTimeout()
86
- this.socket.log(
87
- 'channel',
88
- `discarded push due to buffer overflow: ${removedPush.event}`,
89
- removedPush.payload()
90
- )
91
- }
92
- return push
93
- }
94
-
95
- updateJoinPayload(payload: Record<string, any>) {
96
- const oldPayload = this.channel.joinPush.payload()
97
- this.channel.joinPush.payload = () => ({ ...oldPayload, ...payload })
98
- }
99
-
100
- canPush() {
101
- return this.socket.isConnected() && this.state === CHANNEL_STATES.joined
102
- }
103
-
104
- isJoined() {
105
- return this.state === CHANNEL_STATES.joined
106
- }
107
-
108
- isJoining() {
109
- return this.state === CHANNEL_STATES.joining
110
- }
111
-
112
- isClosed() {
113
- return this.state === CHANNEL_STATES.closed
114
- }
115
-
116
- isLeaving() {
117
- return this.state === CHANNEL_STATES.leaving
118
- }
119
-
120
- updateFilterBindings(filterBindings: ChannelFilterBindings) {
121
- this.channel.filterBindings = filterBindings
122
- }
123
-
124
- updatePayloadTransform(callback: ChannelOnMessage) {
125
- this.channel.onMessage = callback
126
- }
127
-
128
- /**
129
- * @internal
130
- */
131
- getChannel() {
132
- return this.channel
133
- }
134
- }
135
-
136
- function phoenixChannelParams(options: RealtimeChannelOptions): Params {
137
- return {
138
- config: {
139
- ...{
140
- broadcast: { ack: false, self: false },
141
- presence: { key: '', enabled: false },
142
- private: false,
143
- },
144
- ...options.config,
145
- },
146
- }
147
- }
@@ -1,116 +0,0 @@
1
- import { Presence } from '@supabase/phoenix'
2
- import type { PresenceState, PresenceStates } from './types'
3
- import type {
4
- RealtimePresenceOptions,
5
- RealtimePresenceState,
6
- Presence as RealtimePresenceType,
7
- } from '../RealtimePresence'
8
- import ChannelAdapter from './channelAdapter'
9
-
10
- export default class PresenceAdapter {
11
- private presence: Presence
12
-
13
- constructor(channel: ChannelAdapter, opts?: RealtimePresenceOptions) {
14
- const phoenixOptions = phoenixPresenceOptions(opts)
15
- this.presence = new Presence(channel.getChannel(), phoenixOptions)
16
-
17
- this.presence.onJoin((key, currentPresence, newPresence) => {
18
- const onJoinPayload = PresenceAdapter.onJoinPayload(key, currentPresence, newPresence)
19
- channel.getChannel().trigger('presence', onJoinPayload)
20
- })
21
-
22
- this.presence.onLeave((key, currentPresence, leftPresence) => {
23
- const onLeavePayload = PresenceAdapter.onLeavePayload(key, currentPresence, leftPresence)
24
- channel.getChannel().trigger('presence', onLeavePayload)
25
- })
26
-
27
- this.presence.onSync(() => {
28
- channel.getChannel().trigger('presence', { event: 'sync' })
29
- })
30
- }
31
-
32
- get state() {
33
- return PresenceAdapter.transformState(this.presence.state)
34
- }
35
-
36
- /**
37
- * @private
38
- * Remove 'metas' key
39
- * Change 'phx_ref' to 'presence_ref'
40
- * Remove 'phx_ref' and 'phx_ref_prev'
41
- *
42
- * @example
43
- * // returns {
44
- * abc123: [
45
- * { presence_ref: '2', user_id: 1 },
46
- * { presence_ref: '3', user_id: 2 }
47
- * ]
48
- * }
49
- * RealtimePresence.transformState({
50
- * abc123: {
51
- * metas: [
52
- * { phx_ref: '2', phx_ref_prev: '1' user_id: 1 },
53
- * { phx_ref: '3', user_id: 2 }
54
- * ]
55
- * }
56
- * })
57
- *
58
- */
59
- static transformState(state: PresenceStates): RealtimePresenceState {
60
- state = cloneState(state)
61
-
62
- return Object.getOwnPropertyNames(state).reduce((newState, key) => {
63
- const presences = state[key]
64
- newState[key] = transformState(presences)
65
-
66
- return newState
67
- }, {} as RealtimePresenceState)
68
- }
69
-
70
- static onJoinPayload(key: string, currentPresence: PresenceState, newPresence: PresenceState) {
71
- const currentPresences = parseCurrentPresences(currentPresence)
72
- const newPresences = transformState(newPresence)
73
-
74
- return {
75
- event: 'join',
76
- key,
77
- currentPresences,
78
- newPresences,
79
- }
80
- }
81
-
82
- static onLeavePayload(key: string, currentPresence: PresenceState, leftPresence: PresenceState) {
83
- const currentPresences = parseCurrentPresences(currentPresence)
84
- const leftPresences = transformState(leftPresence)
85
-
86
- return {
87
- event: 'leave',
88
- key,
89
- currentPresences,
90
- leftPresences,
91
- }
92
- }
93
- }
94
-
95
- function transformState(presences: PresenceState) {
96
- return presences.metas.map((presence) => {
97
- presence['presence_ref'] = presence['phx_ref']
98
-
99
- delete presence['phx_ref']
100
- delete presence['phx_ref_prev']
101
-
102
- return presence
103
- }) as RealtimePresenceType[]
104
- }
105
-
106
- function cloneState(state: PresenceStates): PresenceStates {
107
- return JSON.parse(JSON.stringify(state))
108
- }
109
-
110
- function phoenixPresenceOptions(opts?: RealtimePresenceOptions) {
111
- return opts?.events && { events: opts.events }
112
- }
113
-
114
- function parseCurrentPresences(currentPresences?: PresenceState) {
115
- return currentPresences?.metas ? transformState(currentPresences) : []
116
- }