hotpipe 0.2.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 +2 -389
- package/dist/client/connection.d.ts +69 -2
- package/dist/client/connection.d.ts.map +1 -1
- package/dist/client/connection.js +145 -19
- package/dist/client/connection.js.map +1 -1
- package/dist/client/index.d.ts +13 -6
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +67 -22
- 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 +76 -5
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +114 -15
- 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 +1 -1
- package/dist/version.d.ts.map +1 -1
- package/dist/version.js +1 -1
- package/dist/version.js.map +1 -1
- package/package.json +3 -3
|
@@ -1,22 +1,61 @@
|
|
|
1
1
|
import { SDK_VERSION } from '../version';
|
|
2
2
|
const MAX_QUEUE_SIZE = 100;
|
|
3
3
|
const QUEUE_TTL = 30_000;
|
|
4
|
+
const RELEASE_DELAY = 500;
|
|
5
|
+
const AUTH_TIMEOUT_MS = 10_000;
|
|
4
6
|
export class ConnectionManager {
|
|
5
7
|
config;
|
|
6
8
|
ws = null;
|
|
7
9
|
status = 'disconnected';
|
|
8
10
|
statusListeners = new Set();
|
|
9
11
|
pipeListeners = new Map();
|
|
12
|
+
serverListeners = new Set();
|
|
10
13
|
pipeRefs = new Map();
|
|
11
14
|
reconnectAttempts = 0;
|
|
12
15
|
maxReconnectDelay = 30_000;
|
|
13
16
|
pingInterval = null;
|
|
14
17
|
reconnectTimer = null;
|
|
18
|
+
releaseTimer = null;
|
|
15
19
|
intentionalClose = false;
|
|
16
20
|
eventQueue = [];
|
|
21
|
+
providerRefCount = 0;
|
|
22
|
+
refreshPromise = null;
|
|
17
23
|
constructor(config) {
|
|
18
24
|
this.config = config;
|
|
19
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
|
+
}
|
|
20
59
|
async connect() {
|
|
21
60
|
if (this.status === 'connecting' || this.status === 'connected')
|
|
22
61
|
return;
|
|
@@ -28,36 +67,55 @@ export class ConnectionManager {
|
|
|
28
67
|
method: 'POST',
|
|
29
68
|
credentials: 'include',
|
|
30
69
|
headers,
|
|
70
|
+
signal: AbortSignal.timeout(AUTH_TIMEOUT_MS),
|
|
31
71
|
});
|
|
32
72
|
if (!res.ok) {
|
|
33
73
|
throw new Error(`Auth failed: ${res.status}`);
|
|
34
74
|
}
|
|
35
|
-
const
|
|
36
|
-
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}`;
|
|
37
81
|
this.ws = new WebSocket(wsUrl);
|
|
38
82
|
this.ws.onopen = () => {
|
|
39
|
-
|
|
40
|
-
this.
|
|
41
|
-
// Resubscribe to all active pipes
|
|
42
|
-
for (const pipe of this.pipeRefs.keys()) {
|
|
43
|
-
this.wsSend({ type: 'subscribe', pipe });
|
|
44
|
-
}
|
|
45
|
-
// Flush queued events
|
|
46
|
-
this.flushQueue();
|
|
47
|
-
// Keepalive ping every 30s
|
|
48
|
-
this.pingInterval = setInterval(() => {
|
|
49
|
-
this.wsSend({ type: 'ping' });
|
|
50
|
-
}, 30_000);
|
|
83
|
+
// Send auth token as first message (token never appears in URL)
|
|
84
|
+
this.wsSend({ type: 'auth', token });
|
|
51
85
|
};
|
|
52
86
|
this.ws.onmessage = (event) => {
|
|
53
87
|
try {
|
|
54
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
|
+
}
|
|
55
106
|
if (msg.type === 'event') {
|
|
56
|
-
this.dispatch(msg.pipe, msg.event, msg.data
|
|
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);
|
|
57
115
|
}
|
|
58
116
|
}
|
|
59
|
-
catch {
|
|
60
|
-
|
|
117
|
+
catch (err) {
|
|
118
|
+
console.warn('[hotpipe] Failed to parse server message:', err);
|
|
61
119
|
}
|
|
62
120
|
};
|
|
63
121
|
this.ws.onclose = () => {
|
|
@@ -90,6 +148,50 @@ export class ConnectionManager {
|
|
|
90
148
|
this.eventQueue = [];
|
|
91
149
|
this.setStatus('disconnected');
|
|
92
150
|
}
|
|
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
|
+
}
|
|
93
195
|
subscribe(pipe) {
|
|
94
196
|
const count = this.pipeRefs.get(pipe) || 0;
|
|
95
197
|
this.pipeRefs.set(pipe, count + 1);
|
|
@@ -99,6 +201,8 @@ export class ConnectionManager {
|
|
|
99
201
|
}
|
|
100
202
|
unsubscribe(pipe) {
|
|
101
203
|
const count = this.pipeRefs.get(pipe) || 0;
|
|
204
|
+
if (count === 0)
|
|
205
|
+
return;
|
|
102
206
|
if (count <= 1) {
|
|
103
207
|
this.pipeRefs.delete(pipe);
|
|
104
208
|
if (this.ws?.readyState === WebSocket.OPEN) {
|
|
@@ -142,6 +246,10 @@ export class ConnectionManager {
|
|
|
142
246
|
this.statusListeners.add(listener);
|
|
143
247
|
return () => this.statusListeners.delete(listener);
|
|
144
248
|
}
|
|
249
|
+
onServerMessage(listener) {
|
|
250
|
+
this.serverListeners.add(listener);
|
|
251
|
+
return () => this.serverListeners.delete(listener);
|
|
252
|
+
}
|
|
145
253
|
flushQueue() {
|
|
146
254
|
const now = Date.now();
|
|
147
255
|
const pending = this.eventQueue.filter((e) => now - e.timestamp < QUEUE_TTL);
|
|
@@ -150,12 +258,30 @@ export class ConnectionManager {
|
|
|
150
258
|
this.wsSend({ type: 'publish', pipe, event, data });
|
|
151
259
|
}
|
|
152
260
|
}
|
|
153
|
-
dispatch(pipe, event, data) {
|
|
261
|
+
dispatch(pipe, event, data, metadata) {
|
|
154
262
|
const listeners = this.pipeListeners.get(pipe);
|
|
155
263
|
if (!listeners)
|
|
156
264
|
return;
|
|
157
265
|
for (const listener of listeners) {
|
|
158
|
-
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?.();
|
|
159
285
|
}
|
|
160
286
|
}
|
|
161
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
|
*/
|
|
@@ -16,7 +16,7 @@ type EventData<T extends EventMap, E extends EventName<T>> = z.infer<T[E]>;
|
|
|
16
16
|
* Handler map for usePipe — a partial record of event handlers.
|
|
17
17
|
*/
|
|
18
18
|
type PipeHandlers<T extends EventMap> = {
|
|
19
|
-
[E in EventName<T>]?: (data: EventData<T, E
|
|
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.
|
|
@@ -32,18 +32,25 @@ export declare function createPipeClient<T extends EventMap>(config: {
|
|
|
32
32
|
events: T;
|
|
33
33
|
/** Override the base path where your handler is mounted. Defaults to `/api/realtime`. */
|
|
34
34
|
basePath?: string;
|
|
35
|
-
/** @internal Override the
|
|
36
|
-
|
|
35
|
+
/** @internal Override the API URL for local development. */
|
|
36
|
+
apiUrl?: string;
|
|
37
37
|
/** Provide custom headers for the auth request (e.g., a Bearer token). */
|
|
38
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
|
-
usePipe: (pipe: string, handlers?: Partial<PipeHandlers<T
|
|
47
|
+
usePipe: (pipe: string, handlers?: Partial<PipeHandlers<T>>, options?: {
|
|
48
|
+
onServerMessage?: (msg: ServerMessage) => void;
|
|
49
|
+
}) => {
|
|
44
50
|
status: ConnectionStatus;
|
|
45
51
|
publish: <E extends EventName<T>>(event: E, data: EventData<T, E>) => boolean;
|
|
46
52
|
};
|
|
53
|
+
refreshPipeAuth: () => Promise<void>;
|
|
47
54
|
};
|
|
48
|
-
export type { ConnectionStatus, EventMap };
|
|
55
|
+
export type { ConnectionStatus, EventMap, PipeEventMetadata, ServerMessage };
|
|
49
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"}
|
package/dist/client/index.js
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
3
|
import { createContext, useCallback, useContext, useEffect, useRef, useState } from 'react';
|
|
4
|
-
import { ConnectionManager } from './connection';
|
|
5
|
-
const
|
|
4
|
+
import { ConnectionManager, } from './connection';
|
|
5
|
+
const DEFAULT_API_URL = 'wss://api.hotpipe.dev';
|
|
6
6
|
const DEFAULT_BASE_PATH = '/api/realtime';
|
|
7
|
+
const globalCache = globalThis;
|
|
7
8
|
/**
|
|
8
9
|
* Creates a typed real-time client bound to your event schemas.
|
|
9
10
|
*
|
|
@@ -15,32 +16,50 @@ const DEFAULT_BASE_PATH = '/api/realtime';
|
|
|
15
16
|
* ```
|
|
16
17
|
*/
|
|
17
18
|
export function createPipeClient(config) {
|
|
19
|
+
const apiUrl = config.apiUrl ?? DEFAULT_API_URL;
|
|
20
|
+
const authEndpoint = `${config.basePath ?? DEFAULT_BASE_PATH}/auth`;
|
|
21
|
+
const connectionConfig = {
|
|
22
|
+
apiUrl,
|
|
23
|
+
authEndpoint,
|
|
24
|
+
authHeaders: config.authHeaders,
|
|
25
|
+
onPipeRevoked: config.onPipeRevoked,
|
|
26
|
+
onAllPipesRevoked: config.onAllPipesRevoked,
|
|
27
|
+
};
|
|
28
|
+
// Reuse existing manager in dev to survive HMR module re-evaluation
|
|
29
|
+
const cacheKey = `__hotpipe_${apiUrl}_${authEndpoint}`;
|
|
30
|
+
let manager;
|
|
31
|
+
if (globalCache[cacheKey]) {
|
|
32
|
+
manager = globalCache[cacheKey];
|
|
33
|
+
manager.updateConfig(connectionConfig);
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
manager = new ConnectionManager(connectionConfig);
|
|
37
|
+
}
|
|
38
|
+
if (process.env.NODE_ENV !== 'production') {
|
|
39
|
+
globalCache[cacheKey] = manager;
|
|
40
|
+
}
|
|
18
41
|
const PipeContext = createContext(null);
|
|
19
42
|
function useManager() {
|
|
20
|
-
const
|
|
21
|
-
if (!
|
|
43
|
+
const ctx = useContext(PipeContext);
|
|
44
|
+
if (!ctx) {
|
|
22
45
|
throw new Error('hotpipe: usePipe must be used within <PipeProvider>');
|
|
23
46
|
}
|
|
24
|
-
return
|
|
47
|
+
return ctx;
|
|
25
48
|
}
|
|
26
49
|
/**
|
|
27
50
|
* Wrap your app (or a subtree) with this provider to establish the
|
|
28
|
-
* WebSocket connection to the
|
|
51
|
+
* WebSocket connection to the hotpipe API.
|
|
29
52
|
*/
|
|
30
53
|
function PipeProvider({ children }) {
|
|
31
|
-
const managerRef = useRef(null);
|
|
32
|
-
if (!managerRef.current) {
|
|
33
|
-
managerRef.current = new ConnectionManager({
|
|
34
|
-
brokerUrl: config.brokerUrl ?? DEFAULT_BROKER_URL,
|
|
35
|
-
authEndpoint: `${config.basePath ?? DEFAULT_BASE_PATH}/auth`,
|
|
36
|
-
authHeaders: config.authHeaders,
|
|
37
|
-
});
|
|
38
|
-
}
|
|
39
54
|
useEffect(() => {
|
|
40
|
-
|
|
41
|
-
|
|
55
|
+
manager.retain();
|
|
56
|
+
if (process.env.NODE_ENV !== 'production' && manager.getProviderRefCount() > 1) {
|
|
57
|
+
console.warn('[hotpipe] Multiple <PipeProvider> instances detected. ' +
|
|
58
|
+
'Use a single provider at the root of your app to avoid redundant connections.');
|
|
59
|
+
}
|
|
60
|
+
return () => manager.release();
|
|
42
61
|
}, []);
|
|
43
|
-
return
|
|
62
|
+
return _jsx(PipeContext.Provider, { value: manager, children: children });
|
|
44
63
|
}
|
|
45
64
|
/**
|
|
46
65
|
* Subscribe to events on a pipe. Returns connection status and a
|
|
@@ -52,20 +71,35 @@ export function createPipeClient(config) {
|
|
|
52
71
|
* });
|
|
53
72
|
* ```
|
|
54
73
|
*/
|
|
55
|
-
function usePipe(pipe, handlers) {
|
|
74
|
+
function usePipe(pipe, handlers, options) {
|
|
56
75
|
const manager = useManager();
|
|
57
76
|
const handlersRef = useRef(handlers);
|
|
58
77
|
handlersRef.current = handlers;
|
|
78
|
+
const serverMsgRef = useRef(options?.onServerMessage);
|
|
79
|
+
serverMsgRef.current = options?.onServerMessage;
|
|
59
80
|
const [status, setStatus] = useState(manager.getStatus());
|
|
60
81
|
useEffect(() => {
|
|
61
82
|
return manager.onStatusChange(setStatus);
|
|
62
83
|
}, [manager]);
|
|
63
84
|
useEffect(() => {
|
|
64
|
-
|
|
85
|
+
if (!serverMsgRef.current)
|
|
86
|
+
return;
|
|
87
|
+
return manager.onServerMessage((msg) => {
|
|
88
|
+
serverMsgRef.current?.(msg);
|
|
89
|
+
});
|
|
90
|
+
}, [manager]);
|
|
91
|
+
useEffect(() => {
|
|
92
|
+
const listener = (event, data, metadata) => {
|
|
65
93
|
const handler = handlersRef.current?.[event];
|
|
66
|
-
if (handler)
|
|
67
|
-
|
|
94
|
+
if (!handler)
|
|
95
|
+
return;
|
|
96
|
+
const schema = config.events[event];
|
|
97
|
+
if (schema) {
|
|
98
|
+
const result = schema.safeParse(data);
|
|
99
|
+
if (!result.success)
|
|
100
|
+
return;
|
|
68
101
|
}
|
|
102
|
+
handler(data, metadata);
|
|
69
103
|
};
|
|
70
104
|
manager.addPipeListener(pipe, listener);
|
|
71
105
|
manager.subscribe(pipe);
|
|
@@ -86,6 +120,17 @@ export function createPipeClient(config) {
|
|
|
86
120
|
}, [pipe, manager]);
|
|
87
121
|
return { status, publish };
|
|
88
122
|
}
|
|
89
|
-
|
|
123
|
+
/**
|
|
124
|
+
* Trigger a mid-session token refresh. Call this when a user's permissions
|
|
125
|
+
* change (e.g., they join a new chat room) and the connection should update
|
|
126
|
+
* in place without disconnecting.
|
|
127
|
+
*
|
|
128
|
+
* Callable from anywhere — event handlers, server action callbacks, etc.
|
|
129
|
+
* Does not require React context.
|
|
130
|
+
*/
|
|
131
|
+
function refreshPipeAuth() {
|
|
132
|
+
return manager.refreshToken();
|
|
133
|
+
}
|
|
134
|
+
return { PipeProvider, usePipe, refreshPipeAuth };
|
|
90
135
|
}
|
|
91
136
|
//# sourceMappingURL=index.js.map
|
package/dist/client/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/client/index.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAG5F,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/client/index.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Default JWT token expiry in seconds. Used by createPipeHandler for token
|
|
3
|
+
* generation and by createPipeAdmin for revocation TTL defaults.
|
|
4
|
+
*
|
|
5
|
+
* Must stay in sync with the API-side constant (apps/hotpipe-api/src/constants.ts).
|
|
6
|
+
*/
|
|
7
|
+
export declare const DEFAULT_TOKEN_EXPIRY_SECONDS = 3600;
|
|
8
|
+
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,eAAO,MAAM,4BAA4B,OAAO,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Default JWT token expiry in seconds. Used by createPipeHandler for token
|
|
3
|
+
* generation and by createPipeAdmin for revocation TTL defaults.
|
|
4
|
+
*
|
|
5
|
+
* Must stay in sync with the API-side constant (apps/hotpipe-api/src/constants.ts).
|
|
6
|
+
*/
|
|
7
|
+
export const DEFAULT_TOKEN_EXPIRY_SECONDS = 3600;
|
|
8
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAG,IAAI,CAAC"}
|
package/dist/server/index.d.ts
CHANGED
|
@@ -15,7 +15,18 @@ interface AuthResult {
|
|
|
15
15
|
pipes: Record<string, PipePermissions>;
|
|
16
16
|
}
|
|
17
17
|
/**
|
|
18
|
-
*
|
|
18
|
+
* Options for server-side publish calls.
|
|
19
|
+
*/
|
|
20
|
+
interface PublishOptions {
|
|
21
|
+
/**
|
|
22
|
+
* An optional sender identity to attach to this event. Receiving clients
|
|
23
|
+
* see this in `metadata.sender`. When omitted, `sender` is `null`,
|
|
24
|
+
* indicating the event originated from the server with no specific user.
|
|
25
|
+
*/
|
|
26
|
+
sender?: string;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Creates a typed server-side publisher for emitting events to the hotpipe API
|
|
19
30
|
* from API routes, server actions, webhooks, cron jobs, etc.
|
|
20
31
|
*
|
|
21
32
|
* ```ts
|
|
@@ -31,8 +42,8 @@ interface AuthResult {
|
|
|
31
42
|
export declare function createPipePublisher<T extends EventMap>(config: {
|
|
32
43
|
secret: string;
|
|
33
44
|
events: T;
|
|
34
|
-
/** @internal Override the
|
|
35
|
-
|
|
45
|
+
/** @internal Override the API URL for local development. */
|
|
46
|
+
apiUrl?: string;
|
|
36
47
|
}): {
|
|
37
48
|
/**
|
|
38
49
|
* Get a reference to a pipe. Returns a `{ publish }` object with
|
|
@@ -44,7 +55,7 @@ export declare function createPipePublisher<T extends EventMap>(config: {
|
|
|
44
55
|
* ```
|
|
45
56
|
*/
|
|
46
57
|
pipe(pipe: string): {
|
|
47
|
-
publish<E extends keyof T & string>(event: E, data: z.infer<T[E]
|
|
58
|
+
publish<E extends keyof T & string>(event: E, data: z.infer<T[E]>, options?: PublishOptions): Promise<void>;
|
|
48
59
|
};
|
|
49
60
|
};
|
|
50
61
|
/**
|
|
@@ -77,5 +88,65 @@ export declare function createPipeHandler(handlerConfig: {
|
|
|
77
88
|
}): {
|
|
78
89
|
POST: (req: Request) => Promise<Response>;
|
|
79
90
|
};
|
|
80
|
-
|
|
91
|
+
/**
|
|
92
|
+
* Options for revocation methods.
|
|
93
|
+
*/
|
|
94
|
+
interface RevokeOptions {
|
|
95
|
+
/** TTL in seconds for the revocation entry. Defaults to the API's token expiry. */
|
|
96
|
+
ttl?: number;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* A single revocation target for batch operations.
|
|
100
|
+
*/
|
|
101
|
+
interface RevocationEntry {
|
|
102
|
+
userId: string;
|
|
103
|
+
pipe: string;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Creates a server-side admin client for revoking pipe access.
|
|
107
|
+
*
|
|
108
|
+
* ```ts
|
|
109
|
+
* const pipeAdmin = createPipeAdmin({
|
|
110
|
+
* secret: process.env.HOTPIPE_SECRET!,
|
|
111
|
+
* });
|
|
112
|
+
*
|
|
113
|
+
* await pipeAdmin.revoke('user-123', 'room-xyz');
|
|
114
|
+
* await pipeAdmin.revokeAll('user-123');
|
|
115
|
+
* ```
|
|
116
|
+
*/
|
|
117
|
+
export declare function createPipeAdmin(config: {
|
|
118
|
+
secret: string;
|
|
119
|
+
/** @internal Override the API URL for local development. */
|
|
120
|
+
apiUrl?: string;
|
|
121
|
+
}): {
|
|
122
|
+
/**
|
|
123
|
+
* Revoke access to one or more pipes for a user.
|
|
124
|
+
*
|
|
125
|
+
* ```ts
|
|
126
|
+
* await pipeAdmin.revoke('user-123', 'room-xyz');
|
|
127
|
+
* await pipeAdmin.revoke('user-123', ['room-xyz', 'room-abc']);
|
|
128
|
+
* ```
|
|
129
|
+
*/
|
|
130
|
+
revoke(userId: string, pipe: string | string[], options?: RevokeOptions): Promise<void>;
|
|
131
|
+
/**
|
|
132
|
+
* Revoke all pipe access for a user (e.g., account suspension).
|
|
133
|
+
*
|
|
134
|
+
* ```ts
|
|
135
|
+
* await pipeAdmin.revokeAll('user-123');
|
|
136
|
+
* ```
|
|
137
|
+
*/
|
|
138
|
+
revokeAll(userId: string, options?: RevokeOptions): Promise<void>;
|
|
139
|
+
/**
|
|
140
|
+
* Batch-revoke access for multiple user/pipe combinations.
|
|
141
|
+
*
|
|
142
|
+
* ```ts
|
|
143
|
+
* await pipeAdmin.revokeBatch([
|
|
144
|
+
* { userId: 'user-123', pipe: 'room-xyz' },
|
|
145
|
+
* { userId: 'user-456', pipe: 'room-xyz' },
|
|
146
|
+
* ]);
|
|
147
|
+
* ```
|
|
148
|
+
*/
|
|
149
|
+
revokeBatch(revocations: RevocationEntry[], options?: RevokeOptions): Promise<void>;
|
|
150
|
+
};
|
|
151
|
+
export type { AuthResult, EventMap, PipePermissions, PublishOptions, RevokeOptions };
|
|
81
152
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAM7B,KAAK,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;AAE1C;;GAEG;AACH,UAAU,eAAe;IACvB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,UAAU,UAAU;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;CACxC;AAED;;GAEG;AACH,UAAU,cAAc;IACtB;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAwBD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,SAAS,QAAQ,EAAE,MAAM,EAAE;IAC9D,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,CAAC,CAAC;IACV,4DAA4D;IAC5D,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;IAgDG;;;;;;;;OAQG;eACQ,MAAM;gBAEC,CAAC,SAAS,MAAM,CAAC,GAAG,MAAM,SAC/B,CAAC,QACF,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,YACT,cAAc,GACvB,OAAO,CAAC,IAAI,CAAC;;EAMvB;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,iBAAiB,CAAC,aAAa,EAAE;IAC/C,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;IACxD,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;gBAyC6B,OAAO,KAAG,OAAO,CAAC,QAAQ,CAAC;EAWxD;AAED;;GAEG;AACH,UAAU,aAAa;IACrB,mFAAmF;IACnF,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,UAAU,eAAe;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,4DAA4D;IAC5D,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;IA2CG;;;;;;;OAOG;mBACkB,MAAM,QAAQ,MAAM,GAAG,MAAM,EAAE,YAAY,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAS7F;;;;;;OAMG;sBACqB,MAAM,YAAY,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAIvE;;;;;;;;;OASG;6BAC4B,eAAe,EAAE,YAAY,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;EAI5F;AAED,YAAY,EAAE,UAAU,EAAE,QAAQ,EAAE,eAAe,EAAE,cAAc,EAAE,aAAa,EAAE,CAAC"}
|