@data-loom/realtime-js 0.0.2-alpha.1 → 0.0.2
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 +228 -0
- package/dist/main/RealtimeChannel.d.ts.map +1 -0
- package/dist/main/RealtimeChannel.js +528 -0
- package/dist/main/RealtimeChannel.js.map +1 -0
- package/dist/main/RealtimeClient.d.ts +197 -0
- package/dist/main/RealtimeClient.d.ts.map +1 -0
- package/dist/main/RealtimeClient.js +514 -0
- package/dist/main/RealtimeClient.js.map +1 -0
- package/dist/main/RealtimePresence.d.ts +67 -0
- package/dist/main/RealtimePresence.d.ts.map +1 -0
- package/dist/main/RealtimePresence.js +228 -0
- package/dist/main/RealtimePresence.js.map +1 -0
- package/dist/main/index.d.ts +5 -0
- package/dist/main/index.d.ts.map +1 -0
- package/dist/main/index.js +41 -0
- package/dist/main/index.js.map +1 -0
- package/dist/main/utils/constants.d.ts +43 -0
- package/dist/main/utils/constants.d.ts.map +1 -0
- package/dist/main/utils/constants.js +51 -0
- package/dist/main/utils/constants.js.map +1 -0
- package/dist/main/utils/push.d.ts +48 -0
- package/dist/main/utils/push.d.ts.map +1 -0
- package/dist/main/utils/push.js +104 -0
- package/dist/main/utils/push.js.map +1 -0
- package/dist/main/utils/serializer.d.ts +7 -0
- package/dist/main/utils/serializer.d.ts.map +1 -0
- package/dist/main/utils/serializer.js +36 -0
- package/dist/main/utils/serializer.js.map +1 -0
- package/dist/main/utils/timer.d.ts +22 -0
- package/dist/main/utils/timer.d.ts.map +1 -0
- package/dist/main/utils/timer.js +38 -0
- package/dist/main/utils/timer.js.map +1 -0
- package/dist/main/utils/transformers.d.ts +109 -0
- package/dist/main/utils/transformers.d.ts.map +1 -0
- package/dist/main/utils/transformers.js +229 -0
- package/dist/main/utils/transformers.js.map +1 -0
- package/dist/main/utils/version.d.ts +2 -0
- package/dist/main/utils/version.d.ts.map +1 -0
- package/dist/main/utils/version.js +5 -0
- package/dist/main/utils/version.js.map +1 -0
- package/dist/module/RealtimeChannel.d.ts +228 -0
- package/dist/module/RealtimeChannel.d.ts.map +1 -0
- package/dist/module/RealtimeChannel.js +498 -0
- package/dist/module/RealtimeChannel.js.map +1 -0
- package/dist/module/RealtimeClient.d.ts +197 -0
- package/dist/module/RealtimeClient.d.ts.map +1 -0
- package/dist/module/RealtimeClient.js +482 -0
- package/dist/module/RealtimeClient.js.map +1 -0
- package/dist/module/RealtimePresence.d.ts +67 -0
- package/dist/module/RealtimePresence.d.ts.map +1 -0
- package/dist/module/RealtimePresence.js +224 -0
- package/dist/module/RealtimePresence.js.map +1 -0
- package/dist/module/index.d.ts +5 -0
- package/dist/module/index.d.ts.map +1 -0
- package/dist/module/index.js +5 -0
- package/dist/module/index.js.map +1 -0
- package/dist/module/utils/constants.d.ts +43 -0
- package/dist/module/utils/constants.d.ts.map +1 -0
- package/dist/module/utils/constants.js +48 -0
- package/dist/module/utils/constants.js.map +1 -0
- package/dist/module/utils/push.d.ts +48 -0
- package/dist/module/utils/push.d.ts.map +1 -0
- package/dist/module/utils/push.js +101 -0
- package/dist/module/utils/push.js.map +1 -0
- package/dist/module/utils/serializer.d.ts +7 -0
- package/dist/module/utils/serializer.d.ts.map +1 -0
- package/dist/module/utils/serializer.js +33 -0
- package/dist/module/utils/serializer.js.map +1 -0
- package/dist/module/utils/timer.d.ts +22 -0
- package/dist/module/utils/timer.d.ts.map +1 -0
- package/dist/module/utils/timer.js +35 -0
- package/dist/module/utils/timer.js.map +1 -0
- package/dist/module/utils/transformers.d.ts +109 -0
- package/dist/module/utils/transformers.d.ts.map +1 -0
- package/dist/module/utils/transformers.js +217 -0
- package/dist/module/utils/transformers.js.map +1 -0
- package/dist/module/utils/version.d.ts +2 -0
- package/dist/module/utils/version.d.ts.map +1 -0
- package/dist/module/utils/version.js +2 -0
- package/dist/module/utils/version.js.map +1 -0
- package/package.json +2 -2
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
import type { WebSocket as WSWebSocket } from 'ws';
|
|
2
|
+
import { CONNECTION_STATE, LOG_LEVEL } from './utils/constants';
|
|
3
|
+
import Serializer from './utils/serializer';
|
|
4
|
+
import Timer from './utils/timer';
|
|
5
|
+
import RealtimeChannel from './RealtimeChannel';
|
|
6
|
+
import type { RealtimeChannelOptions } from './RealtimeChannel';
|
|
7
|
+
type Fetch = typeof fetch;
|
|
8
|
+
export type Channel = {
|
|
9
|
+
name: string;
|
|
10
|
+
inserted_at: string;
|
|
11
|
+
updated_at: string;
|
|
12
|
+
id: number;
|
|
13
|
+
};
|
|
14
|
+
export type LogLevel = LOG_LEVEL;
|
|
15
|
+
export type RealtimeMessage = {
|
|
16
|
+
topic: string;
|
|
17
|
+
event: string;
|
|
18
|
+
payload: any;
|
|
19
|
+
ref: string;
|
|
20
|
+
join_ref?: string;
|
|
21
|
+
};
|
|
22
|
+
export type RealtimeRemoveChannelResponse = 'ok' | 'timed out' | 'error';
|
|
23
|
+
export interface WebSocketLikeConstructor {
|
|
24
|
+
new (address: string | URL, _ignored?: any, options?: {
|
|
25
|
+
headers: Object | undefined;
|
|
26
|
+
}): WebSocketLike;
|
|
27
|
+
}
|
|
28
|
+
export type WebSocketLike = WebSocket | WSWebSocket | WSWebSocketDummy;
|
|
29
|
+
export interface WebSocketLikeError {
|
|
30
|
+
error: any;
|
|
31
|
+
message: string;
|
|
32
|
+
type: string;
|
|
33
|
+
}
|
|
34
|
+
export type RealtimeClientOptions = {
|
|
35
|
+
transport?: WebSocketLikeConstructor;
|
|
36
|
+
timeout?: number;
|
|
37
|
+
heartbeatIntervalMs?: number;
|
|
38
|
+
logger?: Function;
|
|
39
|
+
encode?: Function;
|
|
40
|
+
decode?: Function;
|
|
41
|
+
reconnectAfterMs?: Function;
|
|
42
|
+
headers?: {
|
|
43
|
+
[key: string]: string;
|
|
44
|
+
};
|
|
45
|
+
params?: {
|
|
46
|
+
[key: string]: any;
|
|
47
|
+
};
|
|
48
|
+
log_level?: LogLevel;
|
|
49
|
+
logLevel?: LogLevel;
|
|
50
|
+
fetch?: Fetch;
|
|
51
|
+
worker?: boolean;
|
|
52
|
+
workerUrl?: string;
|
|
53
|
+
accessToken?: () => Promise<string | null>;
|
|
54
|
+
};
|
|
55
|
+
export default class RealtimeClient {
|
|
56
|
+
accessTokenValue: string | null;
|
|
57
|
+
apiKey: string | null;
|
|
58
|
+
channels: RealtimeChannel[];
|
|
59
|
+
endPoint: string;
|
|
60
|
+
httpEndpoint: string;
|
|
61
|
+
headers?: {
|
|
62
|
+
[key: string]: string;
|
|
63
|
+
};
|
|
64
|
+
params?: {
|
|
65
|
+
[key: string]: string;
|
|
66
|
+
};
|
|
67
|
+
timeout: number;
|
|
68
|
+
transport: WebSocketLikeConstructor | null;
|
|
69
|
+
heartbeatIntervalMs: number;
|
|
70
|
+
heartbeatTimer: ReturnType<typeof setInterval> | undefined;
|
|
71
|
+
pendingHeartbeatRef: string | null;
|
|
72
|
+
ref: number;
|
|
73
|
+
reconnectTimer: Timer;
|
|
74
|
+
logger: Function;
|
|
75
|
+
logLevel?: LogLevel;
|
|
76
|
+
encode: Function;
|
|
77
|
+
decode: Function;
|
|
78
|
+
reconnectAfterMs: Function;
|
|
79
|
+
conn: WebSocketLike | null;
|
|
80
|
+
sendBuffer: Function[];
|
|
81
|
+
serializer: Serializer;
|
|
82
|
+
stateChangeCallbacks: {
|
|
83
|
+
open: Function[];
|
|
84
|
+
close: Function[];
|
|
85
|
+
error: Function[];
|
|
86
|
+
message: Function[];
|
|
87
|
+
};
|
|
88
|
+
fetch: Fetch;
|
|
89
|
+
accessToken: (() => Promise<string | null>) | null;
|
|
90
|
+
worker?: boolean;
|
|
91
|
+
workerUrl?: string;
|
|
92
|
+
workerRef?: Worker;
|
|
93
|
+
/**
|
|
94
|
+
* Initializes the Socket.
|
|
95
|
+
*
|
|
96
|
+
* @param endPoint The string WebSocket endpoint, ie, "ws://example.com/socket", "wss://example.com", "/socket" (inherited host & protocol)
|
|
97
|
+
* @param httpEndpoint The string HTTP endpoint, ie, "https://example.com", "/" (inherited host & protocol)
|
|
98
|
+
* @param options.transport The Websocket Transport, for example WebSocket. This can be a custom implementation
|
|
99
|
+
* @param options.timeout The default timeout in milliseconds to trigger push timeouts.
|
|
100
|
+
* @param options.params The optional params to pass when connecting.
|
|
101
|
+
* @param options.headers The optional headers to pass when connecting.
|
|
102
|
+
* @param options.heartbeatIntervalMs The millisec interval to send a heartbeat message.
|
|
103
|
+
* @param options.logger The optional function for specialized logging, ie: logger: (kind, msg, data) => { console.log(`${kind}: ${msg}`, data) }
|
|
104
|
+
* @param options.logLevel Sets the log level for Realtime
|
|
105
|
+
* @param options.encode The function to encode outgoing messages. Defaults to JSON: (payload, callback) => callback(JSON.stringify(payload))
|
|
106
|
+
* @param options.decode The function to decode incoming messages. Defaults to Serializer's decode.
|
|
107
|
+
* @param options.reconnectAfterMs he optional function that returns the millsec reconnect interval. Defaults to stepped backoff off.
|
|
108
|
+
* @param options.worker Use Web Worker to set a side flow. Defaults to false.
|
|
109
|
+
* @param options.workerUrl The URL of the worker script. Defaults to https://realtime.supabase.com/worker.js that includes a heartbeat event call to keep the connection alive.
|
|
110
|
+
*/
|
|
111
|
+
constructor(endPoint: string, options?: RealtimeClientOptions);
|
|
112
|
+
/**
|
|
113
|
+
* Connects the socket, unless already connected.
|
|
114
|
+
*/
|
|
115
|
+
connect(): void;
|
|
116
|
+
/**
|
|
117
|
+
* Returns the URL of the websocket.
|
|
118
|
+
* @returns string The URL of the websocket.
|
|
119
|
+
*/
|
|
120
|
+
endpointURL(): string;
|
|
121
|
+
/**
|
|
122
|
+
* Disconnects the socket.
|
|
123
|
+
*
|
|
124
|
+
* @param code A numeric status code to send on disconnect.
|
|
125
|
+
* @param reason A custom reason for the disconnect.
|
|
126
|
+
*/
|
|
127
|
+
disconnect(code?: number, reason?: string): void;
|
|
128
|
+
/**
|
|
129
|
+
* Returns all created channels
|
|
130
|
+
*/
|
|
131
|
+
getChannels(): RealtimeChannel[];
|
|
132
|
+
/**
|
|
133
|
+
* Unsubscribes and removes a single channel
|
|
134
|
+
* @param channel A RealtimeChannel instance
|
|
135
|
+
*/
|
|
136
|
+
removeChannel(channel: RealtimeChannel): Promise<RealtimeRemoveChannelResponse>;
|
|
137
|
+
/**
|
|
138
|
+
* Unsubscribes and removes all channels
|
|
139
|
+
*/
|
|
140
|
+
removeAllChannels(): Promise<RealtimeRemoveChannelResponse[]>;
|
|
141
|
+
/**
|
|
142
|
+
* Logs the message.
|
|
143
|
+
*
|
|
144
|
+
* For customized logging, `this.logger` can be overridden.
|
|
145
|
+
*/
|
|
146
|
+
log(kind: string, msg: string, data?: any): void;
|
|
147
|
+
/**
|
|
148
|
+
* Returns the current state of the socket.
|
|
149
|
+
*/
|
|
150
|
+
connectionState(): CONNECTION_STATE;
|
|
151
|
+
/**
|
|
152
|
+
* Returns `true` is the connection is open.
|
|
153
|
+
*/
|
|
154
|
+
isConnected(): boolean;
|
|
155
|
+
channel(topic: string, params?: RealtimeChannelOptions): RealtimeChannel;
|
|
156
|
+
/**
|
|
157
|
+
* Push out a message if the socket is connected.
|
|
158
|
+
*
|
|
159
|
+
* If the socket is not connected, the message gets enqueued within a local buffer, and sent out when a connection is next established.
|
|
160
|
+
*/
|
|
161
|
+
push(data: RealtimeMessage): void;
|
|
162
|
+
/**
|
|
163
|
+
* Sets the JWT access token used for channel subscription authorization and Realtime RLS.
|
|
164
|
+
*
|
|
165
|
+
* If param is null it will use the `accessToken` callback function or the token set on the client.
|
|
166
|
+
*
|
|
167
|
+
* On callback used, it will set the value of the token internal to the client.
|
|
168
|
+
*
|
|
169
|
+
* @param token A JWT string to override the token set on the client.
|
|
170
|
+
*/
|
|
171
|
+
setAuth(token?: string | null): Promise<void>;
|
|
172
|
+
/**
|
|
173
|
+
* Sends a heartbeat message if the socket is connected.
|
|
174
|
+
*/
|
|
175
|
+
sendHeartbeat(): Promise<void>;
|
|
176
|
+
/**
|
|
177
|
+
* Flushes send buffer
|
|
178
|
+
*/
|
|
179
|
+
flushSendBuffer(): void;
|
|
180
|
+
private _workerObjectUrl;
|
|
181
|
+
}
|
|
182
|
+
declare class WSWebSocketDummy {
|
|
183
|
+
binaryType: string;
|
|
184
|
+
close: Function;
|
|
185
|
+
onclose: Function;
|
|
186
|
+
onerror: Function;
|
|
187
|
+
onmessage: Function;
|
|
188
|
+
onopen: Function;
|
|
189
|
+
readyState: number;
|
|
190
|
+
send: Function;
|
|
191
|
+
url: string | URL | null;
|
|
192
|
+
constructor(address: string, _protocols: undefined, options: {
|
|
193
|
+
close: Function;
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
export {};
|
|
197
|
+
//# sourceMappingURL=RealtimeClient.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RealtimeClient.d.ts","sourceRoot":"","sources":["../../src/RealtimeClient.ts"],"names":[],"mappings":"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"}
|