@supabase/realtime-js 1.7.3 → 1.7.4

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 (51) hide show
  1. package/dist/main/RealtimeClient.d.ts +3 -4
  2. package/dist/main/RealtimeClient.d.ts.map +1 -1
  3. package/dist/main/RealtimeClient.js +1 -40
  4. package/dist/main/RealtimeClient.js.map +1 -1
  5. package/dist/main/index.d.ts +1 -3
  6. package/dist/main/index.d.ts.map +1 -1
  7. package/dist/main/index.js +1 -5
  8. package/dist/main/index.js.map +1 -1
  9. package/dist/main/lib/push.d.ts +2 -3
  10. package/dist/main/lib/push.d.ts.map +1 -1
  11. package/dist/main/lib/push.js +2 -16
  12. package/dist/main/lib/push.js.map +1 -1
  13. package/dist/main/lib/version.d.ts +1 -1
  14. package/dist/main/lib/version.js +1 -1
  15. package/dist/module/RealtimeClient.d.ts +3 -4
  16. package/dist/module/RealtimeClient.d.ts.map +1 -1
  17. package/dist/module/RealtimeClient.js +1 -40
  18. package/dist/module/RealtimeClient.js.map +1 -1
  19. package/dist/module/index.d.ts +1 -3
  20. package/dist/module/index.d.ts.map +1 -1
  21. package/dist/module/index.js +1 -3
  22. package/dist/module/index.js.map +1 -1
  23. package/dist/module/lib/push.d.ts +2 -3
  24. package/dist/module/lib/push.d.ts.map +1 -1
  25. package/dist/module/lib/push.js +2 -13
  26. package/dist/module/lib/push.js.map +1 -1
  27. package/dist/module/lib/version.d.ts +1 -1
  28. package/dist/module/lib/version.js +1 -1
  29. package/package.json +1 -1
  30. package/src/RealtimeClient.ts +8 -48
  31. package/src/index.ts +0 -4
  32. package/src/lib/push.ts +3 -12
  33. package/src/lib/version.ts +1 -1
  34. package/dist/main/RealtimeChannel.d.ts +0 -81
  35. package/dist/main/RealtimeChannel.d.ts.map +0 -1
  36. package/dist/main/RealtimeChannel.js +0 -242
  37. package/dist/main/RealtimeChannel.js.map +0 -1
  38. package/dist/main/RealtimePresence.d.ts +0 -97
  39. package/dist/main/RealtimePresence.d.ts.map +0 -1
  40. package/dist/main/RealtimePresence.js +0 -201
  41. package/dist/main/RealtimePresence.js.map +0 -1
  42. package/dist/module/RealtimeChannel.d.ts +0 -81
  43. package/dist/module/RealtimeChannel.d.ts.map +0 -1
  44. package/dist/module/RealtimeChannel.js +0 -236
  45. package/dist/module/RealtimeChannel.js.map +0 -1
  46. package/dist/module/RealtimePresence.d.ts +0 -97
  47. package/dist/module/RealtimePresence.d.ts.map +0 -1
  48. package/dist/module/RealtimePresence.js +0 -198
  49. package/dist/module/RealtimePresence.js.map +0 -1
  50. package/src/RealtimeChannel.ts +0 -289
  51. package/src/RealtimePresence.ts +0 -326
@@ -1,201 +0,0 @@
1
- "use strict";
2
- /*
3
- This file draws heavily from https://github.com/phoenixframework/phoenix/blob/d344ec0a732ab4ee204215b31de69cf4be72e3bf/assets/js/phoenix/presence.js
4
- License: https://github.com/phoenixframework/phoenix/blob/d344ec0a732ab4ee204215b31de69cf4be72e3bf/LICENSE.md
5
- */
6
- Object.defineProperty(exports, "__esModule", { value: true });
7
- class RealtimePresence {
8
- /**
9
- * Initializes the Presence.
10
- *
11
- * @param channel - The RealtimeSubscription
12
- * @param opts - The options,
13
- * for example `{events: {state: 'state', diff: 'diff'}}`
14
- */
15
- constructor(channel, opts) {
16
- this.channel = channel;
17
- this.state = {};
18
- this.pendingDiffs = [];
19
- this.joinRef = null;
20
- this.caller = {
21
- onJoin: () => { },
22
- onLeave: () => { },
23
- onSync: () => { },
24
- };
25
- const events = (opts === null || opts === void 0 ? void 0 : opts.events) || {
26
- state: 'presence_state',
27
- diff: 'presence_diff',
28
- };
29
- this.channel.on(events.state, {}, (newState) => {
30
- const { onJoin, onLeave, onSync } = this.caller;
31
- this.joinRef = this.channel.joinRef();
32
- this.state = RealtimePresence.syncState(this.state, newState, onJoin, onLeave);
33
- this.pendingDiffs.forEach((diff) => {
34
- this.state = RealtimePresence.syncDiff(this.state, diff, onJoin, onLeave);
35
- });
36
- this.pendingDiffs = [];
37
- onSync();
38
- });
39
- this.channel.on(events.diff, {}, (diff) => {
40
- const { onJoin, onLeave, onSync } = this.caller;
41
- if (this.inPendingSyncState()) {
42
- this.pendingDiffs.push(diff);
43
- }
44
- else {
45
- this.state = RealtimePresence.syncDiff(this.state, diff, onJoin, onLeave);
46
- onSync();
47
- }
48
- });
49
- }
50
- /**
51
- * Used to sync the list of presences on the server with the
52
- * client's state.
53
- *
54
- * An optional `onJoin` and `onLeave` callback can be provided to
55
- * react to changes in the client's local presences across
56
- * disconnects and reconnects with the server.
57
- */
58
- static syncState(currentState, newState, onJoin, onLeave) {
59
- const state = this.cloneDeep(currentState);
60
- const transformedState = this.transformState(newState);
61
- const joins = {};
62
- const leaves = {};
63
- this.map(state, (key, presences) => {
64
- if (!transformedState[key]) {
65
- leaves[key] = presences;
66
- }
67
- });
68
- this.map(transformedState, (key, newPresences) => {
69
- const currentPresences = state[key];
70
- if (currentPresences) {
71
- const newPresenceIds = newPresences.map((m) => m.presence_id);
72
- const curPresenceIds = currentPresences.map((m) => m.presence_id);
73
- const joinedPresences = newPresences.filter((m) => curPresenceIds.indexOf(m.presence_id) < 0);
74
- const leftPresences = currentPresences.filter((m) => newPresenceIds.indexOf(m.presence_id) < 0);
75
- if (joinedPresences.length > 0) {
76
- joins[key] = joinedPresences;
77
- }
78
- if (leftPresences.length > 0) {
79
- leaves[key] = leftPresences;
80
- }
81
- }
82
- else {
83
- joins[key] = newPresences;
84
- }
85
- });
86
- return this.syncDiff(state, { joins, leaves }, onJoin, onLeave);
87
- }
88
- /**
89
- * Used to sync a diff of presence join and leave events from the
90
- * server, as they happen.
91
- *
92
- * Like `syncState`, `syncDiff` accepts optional `onJoin` and
93
- * `onLeave` callbacks to react to a user joining or leaving from a
94
- * device.
95
- */
96
- static syncDiff(state, diff, onJoin, onLeave) {
97
- const { joins, leaves } = {
98
- joins: this.transformState(diff.joins),
99
- leaves: this.transformState(diff.leaves),
100
- };
101
- if (!onJoin) {
102
- onJoin = () => { };
103
- }
104
- if (!onLeave) {
105
- onLeave = () => { };
106
- }
107
- this.map(joins, (key, newPresences) => {
108
- const currentPresences = state[key];
109
- state[key] = this.cloneDeep(newPresences);
110
- if (currentPresences) {
111
- const joinedPresenceIds = state[key].map((m) => m.presence_id);
112
- const curPresences = currentPresences.filter((m) => joinedPresenceIds.indexOf(m.presence_id) < 0);
113
- state[key].unshift(...curPresences);
114
- }
115
- onJoin(key, currentPresences, newPresences);
116
- });
117
- this.map(leaves, (key, leftPresences) => {
118
- let currentPresences = state[key];
119
- if (!currentPresences)
120
- return;
121
- const presenceIdsToRemove = leftPresences.map((m) => m.presence_id);
122
- currentPresences = currentPresences.filter((m) => presenceIdsToRemove.indexOf(m.presence_id) < 0);
123
- state[key] = currentPresences;
124
- onLeave(key, currentPresences, leftPresences);
125
- if (currentPresences.length === 0)
126
- delete state[key];
127
- });
128
- return state;
129
- }
130
- /**
131
- * Returns the array of presences, with selected metadata.
132
- */
133
- static list(presences, chooser) {
134
- if (!chooser) {
135
- chooser = (_key, pres) => pres;
136
- }
137
- return this.map(presences, (key, presences) => chooser(key, presences));
138
- }
139
- static map(obj, func) {
140
- return Object.getOwnPropertyNames(obj).map((key) => func(key, obj[key]));
141
- }
142
- /**
143
- * Remove 'metas' key
144
- * Change 'phx_ref' to 'presence_id'
145
- * Remove 'phx_ref' and 'phx_ref_prev'
146
- *
147
- * @example
148
- * // returns {
149
- * abc123: [
150
- * { presence_id: '2', user_id: 1 },
151
- * { presence_id: '3', user_id: 2 }
152
- * ]
153
- * }
154
- * RealtimePresence.transformState({
155
- * abc123: {
156
- * metas: [
157
- * { phx_ref: '2', phx_ref_prev: '1' user_id: 1 },
158
- * { phx_ref: '3', user_id: 2 }
159
- * ]
160
- * }
161
- * })
162
- */
163
- static transformState(state) {
164
- state = this.cloneDeep(state);
165
- return Object.getOwnPropertyNames(state).reduce((newState, key) => {
166
- const presences = state[key];
167
- if ('metas' in presences) {
168
- newState[key] = presences.metas.map((presence) => {
169
- presence['presence_id'] = presence['phx_ref'];
170
- delete presence['phx_ref'];
171
- delete presence['phx_ref_prev'];
172
- return presence;
173
- });
174
- }
175
- else {
176
- newState[key] = presences;
177
- }
178
- return newState;
179
- }, {});
180
- }
181
- static cloneDeep(obj) {
182
- return JSON.parse(JSON.stringify(obj));
183
- }
184
- onJoin(callback) {
185
- this.caller.onJoin = callback;
186
- }
187
- onLeave(callback) {
188
- this.caller.onLeave = callback;
189
- }
190
- onSync(callback) {
191
- this.caller.onSync = callback;
192
- }
193
- list(by) {
194
- return RealtimePresence.list(this.state, by);
195
- }
196
- inPendingSyncState() {
197
- return !this.joinRef || this.joinRef !== this.channel.joinRef();
198
- }
199
- }
200
- exports.default = RealtimePresence;
201
- //# sourceMappingURL=RealtimePresence.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"RealtimePresence.js","sourceRoot":"","sources":["../../src/RealtimePresence.ts"],"names":[],"mappings":"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"}
@@ -1,81 +0,0 @@
1
- import { CHANNEL_EVENTS, CHANNEL_STATES } from './lib/constants';
2
- import Push from './lib/push';
3
- import RealtimeClient from './RealtimeClient';
4
- import Timer from './lib/timer';
5
- import RealtimePresence from './RealtimePresence';
6
- export default class RealtimeChannel {
7
- topic: string;
8
- params: {
9
- [key: string]: unknown;
10
- };
11
- socket: RealtimeClient;
12
- bindings: any[];
13
- timeout: number;
14
- state: CHANNEL_STATES;
15
- joinedOnce: boolean;
16
- joinPush: Push;
17
- rejoinTimer: Timer;
18
- pushBuffer: Push[];
19
- presence: RealtimePresence;
20
- constructor(topic: string, params: {
21
- [key: string]: unknown;
22
- }, socket: RealtimeClient);
23
- list(): any[];
24
- rejoinUntilConnected(): void;
25
- subscribe(timeout?: number): Push;
26
- /**
27
- * Registers a callback that will be executed when the channel closes.
28
- */
29
- onClose(callback: Function): void;
30
- /**
31
- * Registers a callback that will be executed when the channel encounteres an error.
32
- */
33
- onError(callback: Function): void;
34
- on(type: string, filter?: {
35
- [key: string]: string;
36
- }, callback?: Function): void;
37
- off(type: string, filter: {
38
- [key: string]: any;
39
- }): void;
40
- /**
41
- * Returns `true` if the socket is connected and the channel has been joined.
42
- */
43
- canPush(): boolean;
44
- push(event: CHANNEL_EVENTS, payload: any, timeout?: number): Push;
45
- updateJoinPayload(payload: {
46
- [key: string]: unknown;
47
- }): void;
48
- /**
49
- * Leaves the channel.
50
- *
51
- * Unsubscribes from server events, and instructs channel to terminate on server.
52
- * Triggers onClose() hooks.
53
- *
54
- * To receive leave acknowledgements, use the a `receive` hook to bind to the server ack, ie:
55
- * channel.unsubscribe().receive("ok", () => alert("left!") )
56
- */
57
- unsubscribe(timeout?: number): Push;
58
- /**
59
- * Overridable message hook
60
- *
61
- * Receives all events for specialized message handling before dispatching to the channel callbacks.
62
- * Must return the payload, modified or unmodified.
63
- */
64
- onMessage(event: string, payload: any, ref?: string): any;
65
- isMember(topic: string): boolean;
66
- joinRef(): string;
67
- rejoin(timeout?: number): void;
68
- trigger(type: string, payload?: any, ref?: string): void;
69
- send(payload: {
70
- type: string;
71
- [key: string]: any;
72
- }): Promise<unknown>;
73
- replyEventName(ref: string): string;
74
- isClosed(): boolean;
75
- isErrored(): boolean;
76
- isJoined(): boolean;
77
- isJoining(): boolean;
78
- isLeaving(): boolean;
79
- private static isEqual;
80
- }
81
- //# sourceMappingURL=RealtimeChannel.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"RealtimeChannel.d.ts","sourceRoot":"","sources":["../../src/RealtimeChannel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAChE,OAAO,IAAI,MAAM,YAAY,CAAA;AAC7B,OAAO,cAAc,MAAM,kBAAkB,CAAA;AAC7C,OAAO,KAAK,MAAM,aAAa,CAAA;AAC/B,OAAO,gBAAgB,MAAM,oBAAoB,CAAA;AAEjD,MAAM,CAAC,OAAO,OAAO,eAAe;IAWzB,KAAK,EAAE,MAAM;IACb,MAAM,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE;IAClC,MAAM,EAAE,cAAc;IAZ/B,QAAQ,EAAE,GAAG,EAAE,CAAK;IACpB,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,iBAAwB;IAC7B,UAAU,UAAQ;IAClB,QAAQ,EAAE,IAAI,CAAA;IACd,WAAW,EAAE,KAAK,CAAA;IAClB,UAAU,EAAE,IAAI,EAAE,CAAK;IACvB,QAAQ,EAAE,gBAAgB,CAAA;gBAGjB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAO,EACvC,MAAM,EAAE,cAAc;IA+C/B,IAAI;IAIJ,oBAAoB;IAOpB,SAAS,CAAC,OAAO,SAAe;IAiChC;;OAEG;IACH,OAAO,CAAC,QAAQ,EAAE,QAAQ;IAI1B;;OAEG;IACH,OAAO,CAAC,QAAQ,EAAE,QAAQ;IAI1B,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,EAAE,QAAQ,CAAC,EAAE,QAAQ;IAQxE,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE;IAQhD;;OAEG;IACH,OAAO,IAAI,OAAO;IAIlB,IAAI,CAAC,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,SAAe;IAehE,iBAAiB,CAAC,OAAO,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,GAAG,IAAI;IAI5D;;;;;;;;OAQG;IACH,WAAW,CAAC,OAAO,SAAe,GAAG,IAAI;IAmBzC;;;;;OAKG;IACH,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,MAAM;IAInD,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAIhC,OAAO,IAAI,MAAM;IAIjB,MAAM,CAAC,OAAO,SAAe,GAAG,IAAI;IASpC,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,MAAM;IAsBjD,IAAI,CAAC,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE;IASlD,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAInC,QAAQ,IAAI,OAAO;IAGnB,SAAS,IAAI,OAAO;IAGpB,QAAQ,IAAI,OAAO;IAGnB,SAAS,IAAI,OAAO;IAGpB,SAAS,IAAI,OAAO;IAIpB,OAAO,CAAC,MAAM,CAAC,OAAO;CAgBvB"}
@@ -1,236 +0,0 @@
1
- import { CHANNEL_EVENTS, CHANNEL_STATES } from './lib/constants';
2
- import Push from './lib/push';
3
- import Timer from './lib/timer';
4
- import RealtimePresence from './RealtimePresence';
5
- export default class RealtimeChannel {
6
- constructor(topic, params = {}, socket) {
7
- this.topic = topic;
8
- this.params = params;
9
- this.socket = socket;
10
- this.bindings = [];
11
- this.state = CHANNEL_STATES.closed;
12
- this.joinedOnce = false;
13
- this.pushBuffer = [];
14
- this.timeout = this.socket.timeout;
15
- this.joinPush = new Push(this, CHANNEL_EVENTS.join, this.params, this.timeout);
16
- this.rejoinTimer = new Timer(() => this.rejoinUntilConnected(), this.socket.reconnectAfterMs);
17
- this.joinPush.receive('ok', () => {
18
- this.state = CHANNEL_STATES.joined;
19
- this.rejoinTimer.reset();
20
- this.pushBuffer.forEach((pushEvent) => pushEvent.send());
21
- this.pushBuffer = [];
22
- });
23
- this.onClose(() => {
24
- this.rejoinTimer.reset();
25
- this.socket.log('channel', `close ${this.topic} ${this.joinRef()}`);
26
- this.state = CHANNEL_STATES.closed;
27
- this.socket.remove(this);
28
- });
29
- this.onError((reason) => {
30
- if (this.isLeaving() || this.isClosed()) {
31
- return;
32
- }
33
- this.socket.log('channel', `error ${this.topic}`, reason);
34
- this.state = CHANNEL_STATES.errored;
35
- this.rejoinTimer.scheduleTimeout();
36
- });
37
- this.joinPush.receive('timeout', () => {
38
- if (!this.isJoining()) {
39
- return;
40
- }
41
- this.socket.log('channel', `timeout ${this.topic}`, this.joinPush.timeout);
42
- this.state = CHANNEL_STATES.errored;
43
- this.rejoinTimer.scheduleTimeout();
44
- });
45
- this.on(CHANNEL_EVENTS.reply, {}, (payload, ref) => {
46
- this.trigger(this.replyEventName(ref), payload);
47
- });
48
- this.presence = new RealtimePresence(this);
49
- }
50
- list() {
51
- return this.presence.list();
52
- }
53
- rejoinUntilConnected() {
54
- this.rejoinTimer.scheduleTimeout();
55
- if (this.socket.isConnected()) {
56
- this.rejoin();
57
- }
58
- }
59
- subscribe(timeout = this.timeout) {
60
- if (this.joinedOnce) {
61
- throw `tried to subscribe multiple times. 'subscribe' can only be called a single time per channel instance`;
62
- }
63
- else {
64
- const configs = this.bindings.reduce((acc, binding) => {
65
- const { type } = binding;
66
- if (![
67
- 'phx_close',
68
- 'phx_error',
69
- 'phx_reply',
70
- 'presence_diff',
71
- 'presence_state',
72
- ].includes(type)) {
73
- acc[type] = binding;
74
- }
75
- return acc;
76
- }, {});
77
- if (Object.keys(configs).length) {
78
- this.updateJoinPayload({ configs });
79
- }
80
- this.joinedOnce = true;
81
- this.rejoin(timeout);
82
- return this.joinPush;
83
- }
84
- }
85
- /**
86
- * Registers a callback that will be executed when the channel closes.
87
- */
88
- onClose(callback) {
89
- this.on(CHANNEL_EVENTS.close, {}, callback);
90
- }
91
- /**
92
- * Registers a callback that will be executed when the channel encounteres an error.
93
- */
94
- onError(callback) {
95
- this.on(CHANNEL_EVENTS.error, {}, (reason) => callback(reason));
96
- }
97
- on(type, filter, callback) {
98
- this.bindings.push({
99
- type,
100
- filter: filter !== null && filter !== void 0 ? filter : {},
101
- callback: callback !== null && callback !== void 0 ? callback : (() => { }),
102
- });
103
- }
104
- off(type, filter) {
105
- this.bindings = this.bindings.filter((bind) => {
106
- return !(bind.type === type && RealtimeChannel.isEqual(bind.filter, filter));
107
- });
108
- }
109
- /**
110
- * Returns `true` if the socket is connected and the channel has been joined.
111
- */
112
- canPush() {
113
- return this.socket.isConnected() && this.isJoined();
114
- }
115
- push(event, payload, timeout = this.timeout) {
116
- if (!this.joinedOnce) {
117
- throw `tried to push '${event}' to '${this.topic}' before joining. Use channel.subscribe() before pushing events`;
118
- }
119
- let pushEvent = new Push(this, event, payload, timeout);
120
- if (this.canPush()) {
121
- pushEvent.send();
122
- }
123
- else {
124
- pushEvent.startTimeout();
125
- this.pushBuffer.push(pushEvent);
126
- }
127
- return pushEvent;
128
- }
129
- updateJoinPayload(payload) {
130
- this.joinPush.updatePayload(payload);
131
- }
132
- /**
133
- * Leaves the channel.
134
- *
135
- * Unsubscribes from server events, and instructs channel to terminate on server.
136
- * Triggers onClose() hooks.
137
- *
138
- * To receive leave acknowledgements, use the a `receive` hook to bind to the server ack, ie:
139
- * channel.unsubscribe().receive("ok", () => alert("left!") )
140
- */
141
- unsubscribe(timeout = this.timeout) {
142
- this.state = CHANNEL_STATES.leaving;
143
- const onClose = () => {
144
- this.socket.log('channel', `leave ${this.topic}`);
145
- this.trigger(CHANNEL_EVENTS.close, 'leave', this.joinRef());
146
- };
147
- // Destroy joinPush to avoid connection timeouts during unscription phase
148
- this.joinPush.destroy();
149
- const leavePush = new Push(this, CHANNEL_EVENTS.leave, {}, timeout);
150
- leavePush.receive('ok', () => onClose()).receive('timeout', () => onClose());
151
- leavePush.send();
152
- if (!this.canPush()) {
153
- leavePush.trigger('ok', {});
154
- }
155
- return leavePush;
156
- }
157
- /**
158
- * Overridable message hook
159
- *
160
- * Receives all events for specialized message handling before dispatching to the channel callbacks.
161
- * Must return the payload, modified or unmodified.
162
- */
163
- onMessage(event, payload, ref) {
164
- return payload;
165
- }
166
- isMember(topic) {
167
- return this.topic === topic;
168
- }
169
- joinRef() {
170
- return this.joinPush.ref;
171
- }
172
- rejoin(timeout = this.timeout) {
173
- if (this.isLeaving()) {
174
- return;
175
- }
176
- this.socket.leaveOpenTopic(this.topic);
177
- this.state = CHANNEL_STATES.joining;
178
- this.joinPush.resend(timeout);
179
- }
180
- trigger(type, payload, ref) {
181
- const { close, error, leave, join } = CHANNEL_EVENTS;
182
- const events = [close, error, leave, join];
183
- if (ref && events.indexOf(type) >= 0 && ref !== this.joinRef()) {
184
- return;
185
- }
186
- const handledPayload = this.onMessage(type, payload, ref);
187
- if (payload && !handledPayload) {
188
- throw 'channel onMessage callbacks must return the payload, modified or unmodified';
189
- }
190
- this.bindings
191
- .filter((bind) => {
192
- var _a, _b;
193
- return ((bind === null || bind === void 0 ? void 0 : bind.type) === type &&
194
- (((_a = bind === null || bind === void 0 ? void 0 : bind.filter) === null || _a === void 0 ? void 0 : _a.event) === '*' ||
195
- ((_b = bind === null || bind === void 0 ? void 0 : bind.filter) === null || _b === void 0 ? void 0 : _b.event) === (payload === null || payload === void 0 ? void 0 : payload.event)));
196
- })
197
- .map((bind) => bind.callback(handledPayload, ref));
198
- }
199
- send(payload) {
200
- const push = this.push(payload.type, payload);
201
- return new Promise((resolve) => {
202
- push.receive('ok', () => resolve('ok'));
203
- push.receive('timeout', () => resolve('timeout'));
204
- });
205
- }
206
- replyEventName(ref) {
207
- return `chan_reply_${ref}`;
208
- }
209
- isClosed() {
210
- return this.state === CHANNEL_STATES.closed;
211
- }
212
- isErrored() {
213
- return this.state === CHANNEL_STATES.errored;
214
- }
215
- isJoined() {
216
- return this.state === CHANNEL_STATES.joined;
217
- }
218
- isJoining() {
219
- return this.state === CHANNEL_STATES.joining;
220
- }
221
- isLeaving() {
222
- return this.state === CHANNEL_STATES.leaving;
223
- }
224
- static isEqual(obj1, obj2) {
225
- if (Object.keys(obj1).length !== Object.keys(obj2).length) {
226
- return false;
227
- }
228
- for (const k in obj1) {
229
- if (obj1[k] !== obj2[k]) {
230
- return false;
231
- }
232
- }
233
- return true;
234
- }
235
- }
236
- //# sourceMappingURL=RealtimeChannel.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"RealtimeChannel.js","sourceRoot":"","sources":["../../src/RealtimeChannel.ts"],"names":[],"mappings":"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"}
@@ -1,97 +0,0 @@
1
- import { PresenceOpts, PresenceOnJoinCallback, PresenceOnLeaveCallback } from 'phoenix';
2
- import RealtimeChannel from './RealtimeChannel';
3
- declare type Presence = {
4
- presence_id: string;
5
- [key: string]: any;
6
- };
7
- declare type PresenceState = {
8
- [key: string]: Presence[];
9
- };
10
- declare type PresenceDiff = {
11
- joins: PresenceState;
12
- leaves: PresenceState;
13
- };
14
- declare type RawPresenceState = {
15
- [key: string]: Record<'metas', {
16
- phx_ref?: string;
17
- phx_ref_prev?: string;
18
- [key: string]: any;
19
- }[]>;
20
- };
21
- declare type RawPresenceDiff = {
22
- joins: RawPresenceState;
23
- leaves: RawPresenceState;
24
- };
25
- declare type PresenceChooser<T> = (key: string, presences: any) => T;
26
- export default class RealtimePresence {
27
- channel: RealtimeChannel;
28
- state: PresenceState;
29
- pendingDiffs: RawPresenceDiff[];
30
- joinRef: string | null;
31
- caller: {
32
- onJoin: PresenceOnJoinCallback;
33
- onLeave: PresenceOnLeaveCallback;
34
- onSync: () => void;
35
- };
36
- /**
37
- * Initializes the Presence.
38
- *
39
- * @param channel - The RealtimeSubscription
40
- * @param opts - The options,
41
- * for example `{events: {state: 'state', diff: 'diff'}}`
42
- */
43
- constructor(channel: RealtimeChannel, opts?: PresenceOpts);
44
- /**
45
- * Used to sync the list of presences on the server with the
46
- * client's state.
47
- *
48
- * An optional `onJoin` and `onLeave` callback can be provided to
49
- * react to changes in the client's local presences across
50
- * disconnects and reconnects with the server.
51
- */
52
- static syncState(currentState: PresenceState, newState: RawPresenceState | PresenceState, onJoin: PresenceOnJoinCallback, onLeave: PresenceOnLeaveCallback): PresenceState;
53
- /**
54
- * Used to sync a diff of presence join and leave events from the
55
- * server, as they happen.
56
- *
57
- * Like `syncState`, `syncDiff` accepts optional `onJoin` and
58
- * `onLeave` callbacks to react to a user joining or leaving from a
59
- * device.
60
- */
61
- static syncDiff(state: PresenceState, diff: RawPresenceDiff | PresenceDiff, onJoin: PresenceOnJoinCallback, onLeave: PresenceOnLeaveCallback): PresenceState;
62
- /**
63
- * Returns the array of presences, with selected metadata.
64
- */
65
- static list<T = any>(presences: PresenceState, chooser: PresenceChooser<T> | undefined): T[];
66
- private static map;
67
- /**
68
- * Remove 'metas' key
69
- * Change 'phx_ref' to 'presence_id'
70
- * Remove 'phx_ref' and 'phx_ref_prev'
71
- *
72
- * @example
73
- * // returns {
74
- * abc123: [
75
- * { presence_id: '2', user_id: 1 },
76
- * { presence_id: '3', user_id: 2 }
77
- * ]
78
- * }
79
- * RealtimePresence.transformState({
80
- * abc123: {
81
- * metas: [
82
- * { phx_ref: '2', phx_ref_prev: '1' user_id: 1 },
83
- * { phx_ref: '3', user_id: 2 }
84
- * ]
85
- * }
86
- * })
87
- */
88
- private static transformState;
89
- private static cloneDeep;
90
- onJoin(callback: PresenceOnJoinCallback): void;
91
- onLeave(callback: PresenceOnLeaveCallback): void;
92
- onSync(callback: () => void): void;
93
- list<T = any>(by?: PresenceChooser<T>): T[];
94
- private inPendingSyncState;
95
- }
96
- export {};
97
- //# sourceMappingURL=RealtimePresence.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"RealtimePresence.d.ts","sourceRoot":"","sources":["../../src/RealtimePresence.ts"],"names":[],"mappings":"AAKA,OAAO,EACL,YAAY,EACZ,sBAAsB,EACtB,uBAAuB,EACxB,MAAM,SAAS,CAAA;AAChB,OAAO,eAAe,MAAM,mBAAmB,CAAA;AAE/C,aAAK,QAAQ,GAAG;IACd,WAAW,EAAE,MAAM,CAAA;IACnB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CACnB,CAAA;AAED,aAAK,aAAa,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,EAAE,CAAA;CAAE,CAAA;AAElD,aAAK,YAAY,GAAG;IAClB,KAAK,EAAE,aAAa,CAAA;IACpB,MAAM,EAAE,aAAa,CAAA;CACtB,CAAA;AAED,aAAK,gBAAgB,GAAG;IACtB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CACnB,OAAO,EACP;QACE,OAAO,CAAC,EAAE,MAAM,CAAA;QAChB,YAAY,CAAC,EAAE,MAAM,CAAA;QACrB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KACnB,EAAE,CACJ,CAAA;CACF,CAAA;AAED,aAAK,eAAe,GAAG;IACrB,KAAK,EAAE,gBAAgB,CAAA;IACvB,MAAM,EAAE,gBAAgB,CAAA;CACzB,CAAA;AAED,aAAK,eAAe,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC,CAAA;AAE5D,MAAM,CAAC,OAAO,OAAO,gBAAgB;IAqBhB,OAAO,EAAE,eAAe;IApB3C,KAAK,EAAE,aAAa,CAAK;IACzB,YAAY,EAAE,eAAe,EAAE,CAAK;IACpC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAO;IAC7B,MAAM,EAAE;QACN,MAAM,EAAE,sBAAsB,CAAA;QAC9B,OAAO,EAAE,uBAAuB,CAAA;QAChC,MAAM,EAAE,MAAM,IAAI,CAAA;KACnB,CAIA;IAED;;;;;;OAMG;gBACgB,OAAO,EAAE,eAAe,EAAE,IAAI,CAAC,EAAE,YAAY;IAkDhE;;;;;;;OAOG;IACH,MAAM,CAAC,SAAS,CACd,YAAY,EAAE,aAAa,EAC3B,QAAQ,EAAE,gBAAgB,GAAG,aAAa,EAC1C,MAAM,EAAE,sBAAsB,EAC9B,OAAO,EAAE,uBAAuB,GAC/B,aAAa;IA0ChB;;;;;;;OAOG;IACH,MAAM,CAAC,QAAQ,CACb,KAAK,EAAE,aAAa,EACpB,IAAI,EAAE,eAAe,GAAG,YAAY,EACpC,MAAM,EAAE,sBAAsB,EAC9B,OAAO,EAAE,uBAAuB,GAC/B,aAAa;IAoDhB;;OAEG;IACH,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,EACjB,SAAS,EAAE,aAAa,EACxB,OAAO,EAAE,eAAe,CAAC,CAAC,CAAC,GAAG,SAAS,GACtC,CAAC,EAAE;IAUN,OAAO,CAAC,MAAM,CAAC,GAAG;IAOlB;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,OAAO,CAAC,MAAM,CAAC,cAAc;IAyB7B,OAAO,CAAC,MAAM,CAAC,SAAS;IAIxB,MAAM,CAAC,QAAQ,EAAE,sBAAsB,GAAG,IAAI;IAI9C,OAAO,CAAC,QAAQ,EAAE,uBAAuB,GAAG,IAAI;IAIhD,MAAM,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI;IAIlC,IAAI,CAAC,CAAC,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE;IAI3C,OAAO,CAAC,kBAAkB;CAG3B"}