hotpipe 0.1.0 → 0.10.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/README.md +3 -0
- package/dist/client/connection.d.ts +79 -9
- package/dist/client/connection.d.ts.map +1 -1
- package/dist/client/connection.js +191 -39
- package/dist/client/connection.js.map +1 -1
- package/dist/client/index.d.ts +23 -19
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +80 -68
- package/dist/client/index.js.map +1 -1
- package/dist/constants.d.ts +8 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +8 -0
- package/dist/constants.js.map +1 -0
- package/dist/server/index.d.ts +114 -33
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +196 -56
- package/dist/server/index.js.map +1 -1
- package/dist/server/parse-secret.d.ts +5 -0
- package/dist/server/parse-secret.d.ts.map +1 -0
- package/dist/server/parse-secret.js +8 -0
- package/dist/server/parse-secret.js.map +1 -0
- package/dist/version.d.ts +2 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +2 -0
- package/dist/version.js.map +1 -0
- package/package.json +6 -6
package/README.md
ADDED
|
@@ -1,32 +1,102 @@
|
|
|
1
1
|
export type ConnectionStatus = 'disconnected' | 'connecting' | 'connected' | 'reconnecting';
|
|
2
|
-
export
|
|
2
|
+
export interface PipeEventMetadata {
|
|
3
|
+
sender: string | null;
|
|
4
|
+
ts: number;
|
|
5
|
+
}
|
|
6
|
+
export type PipeListener = (event: string, data: unknown, metadata: PipeEventMetadata) => void;
|
|
7
|
+
export type ServerMessage = {
|
|
8
|
+
type: 'error';
|
|
9
|
+
message: string;
|
|
10
|
+
code?: string;
|
|
11
|
+
limit?: number;
|
|
12
|
+
current?: number;
|
|
13
|
+
upgradeUrl?: string;
|
|
14
|
+
} | {
|
|
15
|
+
type: 'system';
|
|
16
|
+
code: string;
|
|
17
|
+
message: string;
|
|
18
|
+
pipe?: string;
|
|
19
|
+
limit?: number;
|
|
20
|
+
current?: number;
|
|
21
|
+
upgradeUrl?: string;
|
|
22
|
+
} | {
|
|
23
|
+
type: 'authenticated';
|
|
24
|
+
} | {
|
|
25
|
+
type: 'subscribed';
|
|
26
|
+
pipe: string;
|
|
27
|
+
} | {
|
|
28
|
+
type: 'unsubscribed';
|
|
29
|
+
pipe: string;
|
|
30
|
+
} | {
|
|
31
|
+
type: 'pong';
|
|
32
|
+
} | {
|
|
33
|
+
type: 'token_updated';
|
|
34
|
+
};
|
|
35
|
+
export type ServerMessageListener = (msg: ServerMessage) => void;
|
|
3
36
|
interface ConnectionConfig {
|
|
4
|
-
|
|
37
|
+
apiUrl: string;
|
|
5
38
|
authEndpoint: string;
|
|
39
|
+
authHeaders?: () => Promise<Record<string, string>>;
|
|
40
|
+
onPipeRevoked?: (pipe: string) => void;
|
|
41
|
+
onAllPipesRevoked?: () => void;
|
|
6
42
|
}
|
|
7
43
|
export declare class ConnectionManager {
|
|
8
44
|
private config;
|
|
9
45
|
private ws;
|
|
10
46
|
private status;
|
|
11
47
|
private statusListeners;
|
|
12
|
-
private
|
|
13
|
-
private
|
|
48
|
+
private pipeListeners;
|
|
49
|
+
private serverListeners;
|
|
50
|
+
private pipeRefs;
|
|
14
51
|
private reconnectAttempts;
|
|
15
52
|
private maxReconnectDelay;
|
|
16
53
|
private pingInterval;
|
|
17
54
|
private reconnectTimer;
|
|
55
|
+
private releaseTimer;
|
|
18
56
|
private intentionalClose;
|
|
57
|
+
private eventQueue;
|
|
58
|
+
private providerRefCount;
|
|
59
|
+
private refreshPromise;
|
|
19
60
|
constructor(config: ConnectionConfig);
|
|
61
|
+
/**
|
|
62
|
+
* Called by PipeProvider on mount. Ref-counts providers and connects
|
|
63
|
+
* on the first mount. Cancels any pending delayed disconnect from a
|
|
64
|
+
* prior release (e.g., during HMR remount).
|
|
65
|
+
*/
|
|
66
|
+
retain(): void;
|
|
67
|
+
/**
|
|
68
|
+
* Called by PipeProvider on unmount. Decrements ref count and schedules
|
|
69
|
+
* a delayed disconnect when the last provider unmounts. The delay
|
|
70
|
+
* absorbs HMR unmount/remount cycles so the connection stays alive.
|
|
71
|
+
*/
|
|
72
|
+
release(): void;
|
|
73
|
+
getProviderRefCount(): number;
|
|
74
|
+
updateConfig(config: ConnectionConfig): void;
|
|
20
75
|
connect(): Promise<void>;
|
|
21
76
|
disconnect(): void;
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
77
|
+
/**
|
|
78
|
+
* Fetches a fresh token from the auth endpoint and sends it to the API
|
|
79
|
+
* for mid-session permission updates. Fire-and-forget — if the token is
|
|
80
|
+
* valid, the API updates permissions immediately. If invalid, the API
|
|
81
|
+
* sends an error through the existing onServerMessage path.
|
|
82
|
+
*
|
|
83
|
+
* No-op if the WebSocket is not connected. Concurrent calls collapse
|
|
84
|
+
* into a single auth request.
|
|
85
|
+
*/
|
|
86
|
+
refreshToken(): Promise<void>;
|
|
87
|
+
private doRefreshToken;
|
|
88
|
+
subscribe(pipe: string): void;
|
|
89
|
+
unsubscribe(pipe: string): void;
|
|
90
|
+
publish(pipe: string, event: string, data: unknown): boolean;
|
|
91
|
+
addPipeListener(pipe: string, listener: PipeListener): void;
|
|
92
|
+
removePipeListener(pipe: string, listener: PipeListener): void;
|
|
27
93
|
getStatus(): ConnectionStatus;
|
|
28
94
|
onStatusChange(listener: (status: ConnectionStatus) => void): () => void;
|
|
95
|
+
onServerMessage(listener: ServerMessageListener): () => void;
|
|
96
|
+
private flushQueue;
|
|
29
97
|
private dispatch;
|
|
98
|
+
private dispatchServerMessage;
|
|
99
|
+
private handleRevocationEvent;
|
|
30
100
|
private setStatus;
|
|
31
101
|
private wsSend;
|
|
32
102
|
private cleanup;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../../src/client/connection.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../../src/client/connection.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,55 +1,121 @@
|
|
|
1
|
+
import { SDK_VERSION } from '../version';
|
|
2
|
+
const MAX_QUEUE_SIZE = 100;
|
|
3
|
+
const QUEUE_TTL = 30_000;
|
|
4
|
+
const RELEASE_DELAY = 500;
|
|
5
|
+
const AUTH_TIMEOUT_MS = 10_000;
|
|
1
6
|
export class ConnectionManager {
|
|
2
7
|
config;
|
|
3
8
|
ws = null;
|
|
4
9
|
status = 'disconnected';
|
|
5
10
|
statusListeners = new Set();
|
|
6
|
-
|
|
7
|
-
|
|
11
|
+
pipeListeners = new Map();
|
|
12
|
+
serverListeners = new Set();
|
|
13
|
+
pipeRefs = new Map();
|
|
8
14
|
reconnectAttempts = 0;
|
|
9
15
|
maxReconnectDelay = 30_000;
|
|
10
16
|
pingInterval = null;
|
|
11
17
|
reconnectTimer = null;
|
|
18
|
+
releaseTimer = null;
|
|
12
19
|
intentionalClose = false;
|
|
20
|
+
eventQueue = [];
|
|
21
|
+
providerRefCount = 0;
|
|
22
|
+
refreshPromise = null;
|
|
13
23
|
constructor(config) {
|
|
14
24
|
this.config = config;
|
|
15
25
|
}
|
|
26
|
+
/**
|
|
27
|
+
* Called by PipeProvider on mount. Ref-counts providers and connects
|
|
28
|
+
* on the first mount. Cancels any pending delayed disconnect from a
|
|
29
|
+
* prior release (e.g., during HMR remount).
|
|
30
|
+
*/
|
|
31
|
+
retain() {
|
|
32
|
+
this.providerRefCount++;
|
|
33
|
+
if (this.releaseTimer) {
|
|
34
|
+
clearTimeout(this.releaseTimer);
|
|
35
|
+
this.releaseTimer = null;
|
|
36
|
+
}
|
|
37
|
+
this.connect();
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Called by PipeProvider on unmount. Decrements ref count and schedules
|
|
41
|
+
* a delayed disconnect when the last provider unmounts. The delay
|
|
42
|
+
* absorbs HMR unmount/remount cycles so the connection stays alive.
|
|
43
|
+
*/
|
|
44
|
+
release() {
|
|
45
|
+
this.providerRefCount = Math.max(0, this.providerRefCount - 1);
|
|
46
|
+
if (this.providerRefCount === 0) {
|
|
47
|
+
this.releaseTimer = setTimeout(() => {
|
|
48
|
+
this.releaseTimer = null;
|
|
49
|
+
this.disconnect();
|
|
50
|
+
}, RELEASE_DELAY);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
getProviderRefCount() {
|
|
54
|
+
return this.providerRefCount;
|
|
55
|
+
}
|
|
56
|
+
updateConfig(config) {
|
|
57
|
+
this.config = config;
|
|
58
|
+
}
|
|
16
59
|
async connect() {
|
|
17
60
|
if (this.status === 'connecting' || this.status === 'connected')
|
|
18
61
|
return;
|
|
19
62
|
this.intentionalClose = false;
|
|
20
63
|
this.setStatus(this.reconnectAttempts > 0 ? 'reconnecting' : 'connecting');
|
|
21
64
|
try {
|
|
65
|
+
const headers = this.config.authHeaders ? await this.config.authHeaders() : undefined;
|
|
22
66
|
const res = await fetch(this.config.authEndpoint, {
|
|
23
67
|
method: 'POST',
|
|
24
68
|
credentials: 'include',
|
|
69
|
+
headers,
|
|
70
|
+
signal: AbortSignal.timeout(AUTH_TIMEOUT_MS),
|
|
25
71
|
});
|
|
26
72
|
if (!res.ok) {
|
|
27
73
|
throw new Error(`Auth failed: ${res.status}`);
|
|
28
74
|
}
|
|
29
|
-
const
|
|
30
|
-
const
|
|
75
|
+
const body = await res.json();
|
|
76
|
+
const token = body?.token;
|
|
77
|
+
if (typeof token !== 'string' || token.length === 0) {
|
|
78
|
+
throw new Error('Auth endpoint did not return a valid token');
|
|
79
|
+
}
|
|
80
|
+
const wsUrl = `${this.config.apiUrl}/ws?v=${SDK_VERSION}`;
|
|
31
81
|
this.ws = new WebSocket(wsUrl);
|
|
32
82
|
this.ws.onopen = () => {
|
|
33
|
-
|
|
34
|
-
this.
|
|
35
|
-
// Resubscribe to all active channels
|
|
36
|
-
for (const channel of this.channelRefs.keys()) {
|
|
37
|
-
this.wsSend({ type: 'subscribe', channel });
|
|
38
|
-
}
|
|
39
|
-
// Keepalive ping every 30s
|
|
40
|
-
this.pingInterval = setInterval(() => {
|
|
41
|
-
this.wsSend({ type: 'ping' });
|
|
42
|
-
}, 30_000);
|
|
83
|
+
// Send auth token as first message (token never appears in URL)
|
|
84
|
+
this.wsSend({ type: 'auth', token });
|
|
43
85
|
};
|
|
44
86
|
this.ws.onmessage = (event) => {
|
|
45
87
|
try {
|
|
46
88
|
const msg = JSON.parse(event.data);
|
|
89
|
+
// Handle auth confirmation — transition to connected state
|
|
90
|
+
if (msg.type === 'authenticated') {
|
|
91
|
+
this.setStatus('connected');
|
|
92
|
+
this.reconnectAttempts = 0;
|
|
93
|
+
// Resubscribe to all active pipes
|
|
94
|
+
for (const pipe of this.pipeRefs.keys()) {
|
|
95
|
+
this.wsSend({ type: 'subscribe', pipe });
|
|
96
|
+
}
|
|
97
|
+
// Flush queued events
|
|
98
|
+
this.flushQueue();
|
|
99
|
+
// Keepalive ping every 30s
|
|
100
|
+
this.pingInterval = setInterval(() => {
|
|
101
|
+
this.wsSend({ type: 'ping' });
|
|
102
|
+
}, 30_000);
|
|
103
|
+
this.dispatchServerMessage(msg);
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
47
106
|
if (msg.type === 'event') {
|
|
48
|
-
this.dispatch(msg.
|
|
107
|
+
this.dispatch(msg.pipe, msg.event, msg.data, {
|
|
108
|
+
sender: msg.sender ?? null,
|
|
109
|
+
ts: msg.ts ?? 0,
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
113
|
+
this.dispatchServerMessage(msg);
|
|
114
|
+
this.handleRevocationEvent(msg);
|
|
49
115
|
}
|
|
50
116
|
}
|
|
51
|
-
catch {
|
|
52
|
-
|
|
117
|
+
catch (err) {
|
|
118
|
+
console.warn('[hotpipe] Failed to parse server message:', err);
|
|
53
119
|
}
|
|
54
120
|
};
|
|
55
121
|
this.ws.onclose = () => {
|
|
@@ -79,42 +145,98 @@ export class ConnectionManager {
|
|
|
79
145
|
}
|
|
80
146
|
this.ws?.close();
|
|
81
147
|
this.ws = null;
|
|
148
|
+
this.eventQueue = [];
|
|
82
149
|
this.setStatus('disconnected');
|
|
83
150
|
}
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
151
|
+
/**
|
|
152
|
+
* Fetches a fresh token from the auth endpoint and sends it to the API
|
|
153
|
+
* for mid-session permission updates. Fire-and-forget — if the token is
|
|
154
|
+
* valid, the API updates permissions immediately. If invalid, the API
|
|
155
|
+
* sends an error through the existing onServerMessage path.
|
|
156
|
+
*
|
|
157
|
+
* No-op if the WebSocket is not connected. Concurrent calls collapse
|
|
158
|
+
* into a single auth request.
|
|
159
|
+
*/
|
|
160
|
+
async refreshToken() {
|
|
161
|
+
if (this.refreshPromise) {
|
|
162
|
+
return this.refreshPromise;
|
|
163
|
+
}
|
|
164
|
+
if (this.ws?.readyState !== WebSocket.OPEN) {
|
|
165
|
+
return;
|
|
166
|
+
}
|
|
167
|
+
this.refreshPromise = this.doRefreshToken();
|
|
168
|
+
try {
|
|
169
|
+
await this.refreshPromise;
|
|
170
|
+
}
|
|
171
|
+
finally {
|
|
172
|
+
this.refreshPromise = null;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
async doRefreshToken() {
|
|
176
|
+
const headers = this.config.authHeaders ? await this.config.authHeaders() : undefined;
|
|
177
|
+
const res = await fetch(this.config.authEndpoint, {
|
|
178
|
+
method: 'POST',
|
|
179
|
+
credentials: 'include',
|
|
180
|
+
headers,
|
|
181
|
+
signal: AbortSignal.timeout(AUTH_TIMEOUT_MS),
|
|
182
|
+
});
|
|
183
|
+
if (!res.ok) {
|
|
184
|
+
throw new Error(`Auth refresh failed: ${res.status}`);
|
|
185
|
+
}
|
|
186
|
+
const body = await res.json();
|
|
187
|
+
const token = body?.token;
|
|
188
|
+
if (typeof token !== 'string' || token.length === 0) {
|
|
189
|
+
throw new Error('Auth endpoint did not return a valid token');
|
|
190
|
+
}
|
|
191
|
+
if (this.ws?.readyState === WebSocket.OPEN) {
|
|
192
|
+
this.wsSend({ type: 'token', token });
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
subscribe(pipe) {
|
|
196
|
+
const count = this.pipeRefs.get(pipe) || 0;
|
|
197
|
+
this.pipeRefs.set(pipe, count + 1);
|
|
87
198
|
if (count === 0 && this.ws?.readyState === WebSocket.OPEN) {
|
|
88
|
-
this.wsSend({ type: 'subscribe',
|
|
199
|
+
this.wsSend({ type: 'subscribe', pipe });
|
|
89
200
|
}
|
|
90
201
|
}
|
|
91
|
-
unsubscribe(
|
|
92
|
-
const count = this.
|
|
202
|
+
unsubscribe(pipe) {
|
|
203
|
+
const count = this.pipeRefs.get(pipe) || 0;
|
|
204
|
+
if (count === 0)
|
|
205
|
+
return;
|
|
93
206
|
if (count <= 1) {
|
|
94
|
-
this.
|
|
207
|
+
this.pipeRefs.delete(pipe);
|
|
95
208
|
if (this.ws?.readyState === WebSocket.OPEN) {
|
|
96
|
-
this.wsSend({ type: 'unsubscribe',
|
|
209
|
+
this.wsSend({ type: 'unsubscribe', pipe });
|
|
97
210
|
}
|
|
98
211
|
}
|
|
99
212
|
else {
|
|
100
|
-
this.
|
|
213
|
+
this.pipeRefs.set(pipe, count - 1);
|
|
101
214
|
}
|
|
102
215
|
}
|
|
103
|
-
publish(
|
|
216
|
+
publish(pipe, event, data) {
|
|
104
217
|
if (this.ws?.readyState === WebSocket.OPEN) {
|
|
105
|
-
this.wsSend({ type: 'publish',
|
|
218
|
+
this.wsSend({ type: 'publish', pipe, event, data });
|
|
219
|
+
return true;
|
|
220
|
+
}
|
|
221
|
+
if (this.intentionalClose) {
|
|
222
|
+
return false;
|
|
106
223
|
}
|
|
224
|
+
if (this.eventQueue.length >= MAX_QUEUE_SIZE) {
|
|
225
|
+
return false;
|
|
226
|
+
}
|
|
227
|
+
this.eventQueue.push({ pipe, event, data, timestamp: Date.now() });
|
|
228
|
+
return true;
|
|
107
229
|
}
|
|
108
|
-
|
|
109
|
-
if (!this.
|
|
110
|
-
this.
|
|
230
|
+
addPipeListener(pipe, listener) {
|
|
231
|
+
if (!this.pipeListeners.has(pipe)) {
|
|
232
|
+
this.pipeListeners.set(pipe, new Set());
|
|
111
233
|
}
|
|
112
|
-
this.
|
|
234
|
+
this.pipeListeners.get(pipe).add(listener);
|
|
113
235
|
}
|
|
114
|
-
|
|
115
|
-
this.
|
|
116
|
-
if (this.
|
|
117
|
-
this.
|
|
236
|
+
removePipeListener(pipe, listener) {
|
|
237
|
+
this.pipeListeners.get(pipe)?.delete(listener);
|
|
238
|
+
if (this.pipeListeners.get(pipe)?.size === 0) {
|
|
239
|
+
this.pipeListeners.delete(pipe);
|
|
118
240
|
}
|
|
119
241
|
}
|
|
120
242
|
getStatus() {
|
|
@@ -124,12 +246,42 @@ export class ConnectionManager {
|
|
|
124
246
|
this.statusListeners.add(listener);
|
|
125
247
|
return () => this.statusListeners.delete(listener);
|
|
126
248
|
}
|
|
127
|
-
|
|
128
|
-
|
|
249
|
+
onServerMessage(listener) {
|
|
250
|
+
this.serverListeners.add(listener);
|
|
251
|
+
return () => this.serverListeners.delete(listener);
|
|
252
|
+
}
|
|
253
|
+
flushQueue() {
|
|
254
|
+
const now = Date.now();
|
|
255
|
+
const pending = this.eventQueue.filter((e) => now - e.timestamp < QUEUE_TTL);
|
|
256
|
+
this.eventQueue = [];
|
|
257
|
+
for (const { pipe, event, data } of pending) {
|
|
258
|
+
this.wsSend({ type: 'publish', pipe, event, data });
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
dispatch(pipe, event, data, metadata) {
|
|
262
|
+
const listeners = this.pipeListeners.get(pipe);
|
|
129
263
|
if (!listeners)
|
|
130
264
|
return;
|
|
131
265
|
for (const listener of listeners) {
|
|
132
|
-
listener(event, data);
|
|
266
|
+
listener(event, data, metadata);
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
dispatchServerMessage(msg) {
|
|
270
|
+
for (const listener of this.serverListeners) {
|
|
271
|
+
listener(msg);
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
handleRevocationEvent(msg) {
|
|
275
|
+
if (msg.type !== 'system')
|
|
276
|
+
return;
|
|
277
|
+
const code = msg.code;
|
|
278
|
+
if (code === 'PIPE_REVOKED') {
|
|
279
|
+
this.refreshToken().catch(() => { });
|
|
280
|
+
this.config.onPipeRevoked?.(msg.pipe);
|
|
281
|
+
}
|
|
282
|
+
else if (code === 'ALL_PIPES_REVOKED') {
|
|
283
|
+
this.refreshToken().catch(() => { });
|
|
284
|
+
this.config.onAllPipesRevoked?.();
|
|
133
285
|
}
|
|
134
286
|
}
|
|
135
287
|
setStatus(status) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connection.js","sourceRoot":"","sources":["../../src/client/connection.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"connection.js","sourceRoot":"","sources":["../../src/client/connection.ts"],"names":[],"mappings":"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"}
|
package/dist/client/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { z } from 'zod';
|
|
2
|
-
import { type ConnectionStatus } from './connection';
|
|
2
|
+
import { type ConnectionStatus, type PipeEventMetadata, type ServerMessage } from './connection';
|
|
3
3
|
/**
|
|
4
4
|
* A record mapping event names to Zod schemas.
|
|
5
5
|
*/
|
|
@@ -13,40 +13,44 @@ type EventName<T extends EventMap> = keyof T & string;
|
|
|
13
13
|
*/
|
|
14
14
|
type EventData<T extends EventMap, E extends EventName<T>> = z.infer<T[E]>;
|
|
15
15
|
/**
|
|
16
|
-
* Handler map for
|
|
16
|
+
* Handler map for usePipe — a partial record of event handlers.
|
|
17
17
|
*/
|
|
18
|
-
type
|
|
19
|
-
[E in EventName<T>]?: (data: EventData<T, E
|
|
18
|
+
type PipeHandlers<T extends EventMap> = {
|
|
19
|
+
[E in EventName<T>]?: (data: EventData<T, E>, metadata: PipeEventMetadata) => void;
|
|
20
20
|
};
|
|
21
21
|
/**
|
|
22
22
|
* Creates a typed real-time client bound to your event schemas.
|
|
23
23
|
*
|
|
24
24
|
* Usage:
|
|
25
25
|
* ```ts
|
|
26
|
-
* const {
|
|
26
|
+
* const { PipeProvider, usePipe } = createPipeClient({
|
|
27
27
|
* events: realtimeEvents,
|
|
28
|
-
* auth: { endpoint: '/api/realtime/auth' },
|
|
29
28
|
* });
|
|
30
29
|
* ```
|
|
31
30
|
*/
|
|
32
|
-
export declare function
|
|
31
|
+
export declare function createPipeClient<T extends EventMap>(config: {
|
|
33
32
|
events: T;
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
33
|
+
/** Override the base path where your handler is mounted. Defaults to `/api/realtime`. */
|
|
34
|
+
basePath?: string;
|
|
35
|
+
/** @internal Override the API URL for local development. */
|
|
36
|
+
apiUrl?: string;
|
|
37
|
+
/** Provide custom headers for the auth request (e.g., a Bearer token). */
|
|
38
|
+
authHeaders?: () => Promise<Record<string, string>>;
|
|
39
|
+
/** Called when access to a specific pipe is revoked. */
|
|
40
|
+
onPipeRevoked?: (pipe: string) => void;
|
|
41
|
+
/** Called when all pipe access is revoked (e.g., account suspension). */
|
|
42
|
+
onAllPipesRevoked?: () => void;
|
|
39
43
|
}): {
|
|
40
|
-
|
|
44
|
+
PipeProvider: ({ children }: {
|
|
41
45
|
children: React.ReactNode;
|
|
42
46
|
}) => import("react/jsx-runtime").JSX.Element;
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
};
|
|
47
|
-
useEvent: <E extends EventName<T>>(channel: string, event: E, handler: (data: EventData<T, E>) => void) => {
|
|
47
|
+
usePipe: (pipe: string, handlers?: Partial<PipeHandlers<T>>, options?: {
|
|
48
|
+
onServerMessage?: (msg: ServerMessage) => void;
|
|
49
|
+
}) => {
|
|
48
50
|
status: ConnectionStatus;
|
|
51
|
+
publish: <E extends EventName<T>>(event: E, data: EventData<T, E>) => boolean;
|
|
49
52
|
};
|
|
53
|
+
refreshPipeAuth: () => Promise<void>;
|
|
50
54
|
};
|
|
51
|
-
export type { ConnectionStatus, EventMap };
|
|
55
|
+
export type { ConnectionStatus, EventMap, PipeEventMetadata, ServerMessage };
|
|
52
56
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/client/index.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAE7B,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/client/index.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAE7B,OAAO,EAEL,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACtB,KAAK,aAAa,EACnB,MAAM,cAAc,CAAC;AAEtB;;GAEG;AACH,KAAK,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;AAE1C;;GAEG;AACH,KAAK,SAAS,CAAC,CAAC,SAAS,QAAQ,IAAI,MAAM,CAAC,GAAG,MAAM,CAAC;AAEtD;;GAEG;AACH,KAAK,SAAS,CAAC,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAE3E;;GAEG;AACH,KAAK,YAAY,CAAC,CAAC,SAAS,QAAQ,IAAI;KACrC,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,iBAAiB,KAAK,IAAI;CACnF,CAAC;AAOF;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,QAAQ,EAAE,MAAM,EAAE;IAC3D,MAAM,EAAE,CAAC,CAAC;IACV,yFAAyF;IACzF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,4DAA4D;IAC5D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,0EAA0E;IAC1E,WAAW,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACpD,wDAAwD;IACxD,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,yEAAyE;IACzE,iBAAiB,CAAC,EAAE,MAAM,IAAI,CAAC;CAChC;iCA2CqC;QAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;KAAE;oBA4BzD,MAAM,aACD,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,YACzB;QAAE,eAAe,CAAC,EAAE,CAAC,GAAG,EAAE,aAAa,KAAK,IAAI,CAAA;KAAE,KAC3D;QACD,MAAM,EAAE,gBAAgB,CAAC;QACzB,OAAO,EAAE,CAAC,CAAC,SAAS,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,OAAO,CAAC;KAC/E;2BA4E2B,OAAO,CAAC,IAAI,CAAC;EAK1C;AAED,YAAY,EAAE,gBAAgB,EAAE,QAAQ,EAAE,iBAAiB,EAAE,aAAa,EAAE,CAAC"}
|