@tuongaz/seeflow 0.1.107 → 0.1.110

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 (77) hide show
  1. package/dist/web/assets/{architectureDiagram-3BPJPVTR-C4n2LFo2.js → architectureDiagram-3BPJPVTR-CyC7OltI.js} +1 -1
  2. package/dist/web/assets/{blockDiagram-GPEHLZMM-DmYJl-4W.js → blockDiagram-GPEHLZMM-Bzp66cSV.js} +1 -1
  3. package/dist/web/assets/{c4Diagram-AAUBKEIU-BRtrAah9.js → c4Diagram-AAUBKEIU-DG8Iponw.js} +1 -1
  4. package/dist/web/assets/channel-ByV7mN6x.js +1 -0
  5. package/dist/web/assets/{chart-BJADfkvF.js → chart-DYrOhreJ.js} +1 -1
  6. package/dist/web/assets/{chunk-2J33WTMH-Cwse2MLm.js → chunk-2J33WTMH-DAqVVWtt.js} +1 -1
  7. package/dist/web/assets/{chunk-4BX2VUAB-C7yQ1hNl.js → chunk-4BX2VUAB-BLSkydjn.js} +1 -1
  8. package/dist/web/assets/{chunk-55IACEB6-C4JH4uPC.js → chunk-55IACEB6-DQPfPbiJ.js} +1 -1
  9. package/dist/web/assets/{chunk-727SXJPM-CH7_QMCX.js → chunk-727SXJPM-BTf0cYfp.js} +1 -1
  10. package/dist/web/assets/{chunk-AQP2D5EJ-JANvO0oT.js → chunk-AQP2D5EJ-3Vhv9mu3.js} +1 -1
  11. package/dist/web/assets/{chunk-FMBD7UC4-tMpbfhjf.js → chunk-FMBD7UC4-DFLLVi48.js} +1 -1
  12. package/dist/web/assets/{chunk-ND2GUHAM-D9eBypg9.js → chunk-ND2GUHAM-CxNVSIAI.js} +1 -1
  13. package/dist/web/assets/{chunk-QZHKN3VN-geJeqOM8.js → chunk-QZHKN3VN-CgQH2fWj.js} +1 -1
  14. package/dist/web/assets/classDiagram-4FO5ZUOK-CftRaxtv.js +1 -0
  15. package/dist/web/assets/classDiagram-v2-Q7XG4LA2-CftRaxtv.js +1 -0
  16. package/dist/web/assets/{code-block-DNQhzmPc.js → code-block-DbJK70Ez.js} +1 -1
  17. package/dist/web/assets/{cose-bilkent-S5V4N54A-BddhusFd.js → cose-bilkent-S5V4N54A-Byq3k4cK.js} +1 -1
  18. package/dist/web/assets/{dagre-BM42HDAG-DgzvId-E.js → dagre-BM42HDAG-BsD1H1iU.js} +1 -1
  19. package/dist/web/assets/{diagram-2AECGRRQ-MDnqZTUO.js → diagram-2AECGRRQ-CtzAGbyS.js} +1 -1
  20. package/dist/web/assets/{diagram-5GNKFQAL-CNp33BbA.js → diagram-5GNKFQAL-D0UfPbiW.js} +1 -1
  21. package/dist/web/assets/{diagram-KO2AKTUF-KiwbE7kH.js → diagram-KO2AKTUF-9h1XRmj3.js} +1 -1
  22. package/dist/web/assets/{diagram-LMA3HP47-CbVgSz8_.js → diagram-LMA3HP47-BrI6e364.js} +1 -1
  23. package/dist/web/assets/{diagram-OG6HWLK6-CbuPIx97.js → diagram-OG6HWLK6-BFGFDRp3.js} +1 -1
  24. package/dist/web/assets/{erDiagram-TEJ5UH35-Cb0DMX_h.js → erDiagram-TEJ5UH35-ybC8Itku.js} +1 -1
  25. package/dist/web/assets/{flowDiagram-I6XJVG4X-BXWZO2JG.js → flowDiagram-I6XJVG4X-Dhol-kR8.js} +1 -1
  26. package/dist/web/assets/{ganttDiagram-6RSMTGT7-BLNBpY-f.js → ganttDiagram-6RSMTGT7-Y0-j3xBh.js} +1 -1
  27. package/dist/web/assets/{gitGraphDiagram-PVQCEYII-CezBV45Y.js → gitGraphDiagram-PVQCEYII-CkmdZb3E.js} +1 -1
  28. package/dist/web/assets/{iconify-Dq4nFnfE.js → iconify-C6Z3PVFi.js} +1 -1
  29. package/dist/web/assets/index-BpIz1YNe.css +1 -0
  30. package/dist/web/assets/index-D3ZH7sGq.js +8629 -0
  31. package/dist/web/assets/{index.es-DcaYIQmY.js → index.es-D2LpuCoX.js} +1 -1
  32. package/dist/web/assets/{infoDiagram-5YYISTIA-CCWYa3Vp.js → infoDiagram-5YYISTIA-C349fRyb.js} +1 -1
  33. package/dist/web/assets/{ishikawaDiagram-YF4QCWOH-CcOMRswO.js → ishikawaDiagram-YF4QCWOH-CdAxgdA0.js} +1 -1
  34. package/dist/web/assets/{journeyDiagram-JHISSGLW-CGh3OzMJ.js → journeyDiagram-JHISSGLW-Gdj93qhh.js} +1 -1
  35. package/dist/web/assets/{jspdf.es.min-BND60C1X.js → jspdf.es.min-BaNs7eNe.js} +3 -3
  36. package/dist/web/assets/{kanban-definition-UN3LZRKU-wc19qf9j.js → kanban-definition-UN3LZRKU-utWOpj47.js} +1 -1
  37. package/dist/web/assets/{linear-DI6gQRSO.js → linear-ysH3nWHa.js} +1 -1
  38. package/dist/web/assets/{markdown-CZ5OQFXP.js → markdown-DKlQMpx8.js} +1 -1
  39. package/dist/web/assets/{mermaid.core-CAZGzK0l.js → mermaid.core-eyZWidoa.js} +4 -4
  40. package/dist/web/assets/{mindmap-definition-RKZ34NQL-DEN6ul-4.js → mindmap-definition-RKZ34NQL-Dhprs5tv.js} +1 -1
  41. package/dist/web/assets/{pieDiagram-4H26LBE5-BzK5WQ02.js → pieDiagram-4H26LBE5-z_3vPWNO.js} +1 -1
  42. package/dist/web/assets/{quadrantDiagram-W4KKPZXB-WpYq-pQF.js → quadrantDiagram-W4KKPZXB-BOBDCRWb.js} +1 -1
  43. package/dist/web/assets/{requirementDiagram-4Y6WPE33-Ca5ORxLp.js → requirementDiagram-4Y6WPE33-qn0up2ND.js} +1 -1
  44. package/dist/web/assets/{sankeyDiagram-5OEKKPKP-DBWaB1Is.js → sankeyDiagram-5OEKKPKP-CrcTPUVx.js} +1 -1
  45. package/dist/web/assets/{sequenceDiagram-3UESZ5HK-BGEYL2Uw.js → sequenceDiagram-3UESZ5HK-r24r7OqC.js} +1 -1
  46. package/dist/web/assets/{stateDiagram-AJRCARHV-Bt3xrb-F.js → stateDiagram-AJRCARHV-2EJNhDf-.js} +1 -1
  47. package/dist/web/assets/stateDiagram-v2-BHNVJYJU-YVpQlkEY.js +1 -0
  48. package/dist/web/assets/{time-DRdnjU-r.js → time-CheTsYvu.js} +1 -1
  49. package/dist/web/assets/{timeline-definition-PNZ67QCA-D3Avg3RH.js → timeline-definition-PNZ67QCA-BNj38YIy.js} +1 -1
  50. package/dist/web/assets/{vennDiagram-CIIHVFJN-DK0Y12Yp.js → vennDiagram-CIIHVFJN-C6ktujmS.js} +1 -1
  51. package/dist/web/assets/{wardley-L42UT6IY-Th41Nnnt.js → wardley-L42UT6IY-Bl_M5GRw.js} +1 -1
  52. package/dist/web/assets/{wardleyDiagram-YWT4CUSO-DYq6kX6q.js → wardleyDiagram-YWT4CUSO-B0CVz9vg.js} +1 -1
  53. package/dist/web/assets/{xychartDiagram-2RQKCTM6-_nwsSoOi.js → xychartDiagram-2RQKCTM6-ljSwqYiu.js} +1 -1
  54. package/dist/web/index.html +2 -2
  55. package/package.json +1 -1
  56. package/src/api.ts +0 -291
  57. package/src/server.ts +0 -20
  58. package/dist/web/assets/channel-Cwz40yCU.js +0 -1
  59. package/dist/web/assets/classDiagram-4FO5ZUOK-DQJOq1dg.js +0 -1
  60. package/dist/web/assets/classDiagram-v2-Q7XG4LA2-DQJOq1dg.js +0 -1
  61. package/dist/web/assets/index-DOA-g04P.js +0 -8644
  62. package/dist/web/assets/index-TDj3HTQM.css +0 -1
  63. package/dist/web/assets/stateDiagram-v2-BHNVJYJU-DyUVzYNm.js +0 -1
  64. package/src/share/sse-frame.ts +0 -85
  65. package/src/share/sse-outbound-queue.ts +0 -173
  66. package/src/share/sse-rate-limit.ts +0 -205
  67. package/src/share/sse-tap.ts +0 -183
  68. package/src/share-audit.ts +0 -267
  69. package/src/share-envelope.ts +0 -155
  70. package/src/share-file-request.ts +0 -353
  71. package/src/share-file-resolver.ts +0 -68
  72. package/src/share-file-upload.ts +0 -595
  73. package/src/share-files-manifest.ts +0 -232
  74. package/src/share-ratelimit.ts +0 -69
  75. package/src/share-rpc-schema.ts +0 -249
  76. package/src/share-transport.ts +0 -205
  77. package/src/share.ts +0 -1663
@@ -1,205 +0,0 @@
1
- /**
2
- * Outbound WebSocket transport for the Live Share host.
3
- *
4
- * Connects to the relay's host WebSocket, sends the auth-host envelope as the
5
- * very first frame, parses inbound frames through the envelope schema, and
6
- * automatically reconnects with exponential backoff on unexpected close.
7
- *
8
- * The WebSocket implementation is injected via `wsFactory` (defaulting to
9
- * Bun's global `WebSocket`) so tests can drive the transport with a fake.
10
- * Inbound frames that fail Zod validation are dropped with a `console.warn`
11
- * carrying only the parser reason — never the payload — per the design doc's
12
- * "logs only `{ type, from, to, sizeBytes }`" rule.
13
- */
14
-
15
- import { type Envelope, makeEnvelope, parseEnvelope } from './share-envelope.ts';
16
-
17
- export type ShareTransportState = 'connecting' | 'open' | 'reconnecting' | 'closed';
18
-
19
- export interface WebSocketLike {
20
- readyState: number;
21
- addEventListener(
22
- type: 'open' | 'message' | 'close' | 'error',
23
- listener: (ev: unknown) => void,
24
- ): void;
25
- removeEventListener(
26
- type: 'open' | 'message' | 'close' | 'error',
27
- listener: (ev: unknown) => void,
28
- ): void;
29
- send(data: string): void;
30
- close(code?: number, reason?: string): void;
31
- }
32
-
33
- export interface ShareTransport {
34
- send(frame: Envelope): void;
35
- close(reason?: string): void;
36
- isOpen(): boolean;
37
- }
38
-
39
- export interface ShareTransportOpts {
40
- wsUrl: string;
41
- sessionId: string;
42
- hostKey: string;
43
- onFrame: (env: Envelope) => void;
44
- onStateChange: (s: ShareTransportState) => void;
45
- wsFactory?: (url: string) => WebSocketLike;
46
- /** Override for tests; defaults to setTimeout. */
47
- setTimeoutFn?: (fn: () => void, ms: number) => unknown;
48
- /** Override for tests; defaults to clearTimeout. */
49
- clearTimeoutFn?: (handle: unknown) => void;
50
- /** Override jitter source for deterministic tests. Returns a value in [0, 1). */
51
- random?: () => number;
52
- }
53
-
54
- const INITIAL_BACKOFF_MS = 500;
55
- const MAX_BACKOFF_MS = 30_000;
56
- const JITTER_FRACTION = 0.2;
57
- const USER_CLOSE_CODE = 1000;
58
-
59
- const defaultWsFactory = (url: string): WebSocketLike => {
60
- // Bun's global WebSocket satisfies WebSocketLike (the DOM-style interface).
61
- return new WebSocket(url) as unknown as WebSocketLike;
62
- };
63
-
64
- export function createShareTransport(opts: ShareTransportOpts): ShareTransport {
65
- const wsFactory = opts.wsFactory ?? defaultWsFactory;
66
- const schedule = opts.setTimeoutFn ?? ((fn, ms) => setTimeout(fn, ms));
67
- const cancel = opts.clearTimeoutFn ?? ((h) => clearTimeout(h as ReturnType<typeof setTimeout>));
68
- const random = opts.random ?? Math.random;
69
-
70
- let ws: WebSocketLike | null = null;
71
- let stopped = false;
72
- let backoffMs = INITIAL_BACKOFF_MS;
73
- let reconnectHandle: unknown = null;
74
- let currentState: ShareTransportState | null = null;
75
-
76
- const setState = (s: ShareTransportState) => {
77
- if (currentState === s) return;
78
- currentState = s;
79
- try {
80
- opts.onStateChange(s);
81
- } catch (err) {
82
- console.error('[share-transport] onStateChange threw:', err);
83
- }
84
- };
85
-
86
- const handleOpen = () => {
87
- backoffMs = INITIAL_BACKOFF_MS;
88
- setState('open');
89
- // First frame after connect MUST be auth-host. Relay closes us (1008) if
90
- // it disagrees, which falls through the close handler into reconnect.
91
- const auth = makeEnvelope(
92
- 'auth-host',
93
- { sessionId: opts.sessionId, hostKey: opts.hostKey },
94
- { from: 'host' },
95
- );
96
- try {
97
- ws?.send(JSON.stringify(auth));
98
- } catch (err) {
99
- console.warn('[share-transport] auth-host send failed:', err);
100
- }
101
- };
102
-
103
- const handleMessage = (ev: unknown) => {
104
- const data = (ev as { data?: unknown }).data;
105
- if (typeof data !== 'string') {
106
- console.warn('[share-transport] dropped non-text frame');
107
- return;
108
- }
109
- let raw: unknown;
110
- try {
111
- raw = JSON.parse(data);
112
- } catch {
113
- console.warn('[share-transport] dropped frame: invalid JSON');
114
- return;
115
- }
116
- const result = parseEnvelope(raw);
117
- if (!result.ok) {
118
- console.warn('[share-transport] dropped frame:', result.reason);
119
- return;
120
- }
121
- try {
122
- opts.onFrame(result.envelope);
123
- } catch (err) {
124
- console.error('[share-transport] onFrame threw:', err);
125
- }
126
- };
127
-
128
- const computeBackoff = (): number => {
129
- const base = backoffMs;
130
- const jitter = base * JITTER_FRACTION * (random() * 2 - 1);
131
- const next = Math.max(0, Math.round(base + jitter));
132
- backoffMs = Math.min(MAX_BACKOFF_MS, base * 2);
133
- return next;
134
- };
135
-
136
- const scheduleReconnect = () => {
137
- if (stopped) return;
138
- setState('reconnecting');
139
- const delay = computeBackoff();
140
- reconnectHandle = schedule(() => {
141
- reconnectHandle = null;
142
- if (stopped) return;
143
- connect();
144
- }, delay);
145
- };
146
-
147
- const handleClose = (ev: unknown) => {
148
- const code = (ev as { code?: number }).code;
149
- ws = null;
150
- if (stopped || code === USER_CLOSE_CODE) {
151
- setState('closed');
152
- return;
153
- }
154
- scheduleReconnect();
155
- };
156
-
157
- const handleError = () => {
158
- // The browser/Bun WS contract is that 'error' is followed by 'close'; we
159
- // let handleClose drive the reconnect to avoid double-scheduling.
160
- };
161
-
162
- const connect = () => {
163
- if (stopped) return;
164
- setState(currentState === 'reconnecting' ? 'reconnecting' : 'connecting');
165
- const sock = wsFactory(opts.wsUrl);
166
- ws = sock;
167
- sock.addEventListener('open', handleOpen);
168
- sock.addEventListener('message', handleMessage);
169
- sock.addEventListener('close', handleClose);
170
- sock.addEventListener('error', handleError);
171
- };
172
-
173
- // Fire initial connect synchronously so callers see state='connecting' immediately.
174
- setState('connecting');
175
- connect();
176
-
177
- return {
178
- send(frame) {
179
- if (!ws || ws.readyState !== 1) {
180
- throw new Error('share-transport-not-open');
181
- }
182
- ws.send(JSON.stringify(frame));
183
- },
184
- close(_reason) {
185
- stopped = true;
186
- if (reconnectHandle !== null) {
187
- cancel(reconnectHandle);
188
- reconnectHandle = null;
189
- }
190
- const sock = ws;
191
- ws = null;
192
- if (sock) {
193
- try {
194
- sock.close(USER_CLOSE_CODE, 'user');
195
- } catch (err) {
196
- console.warn('[share-transport] close failed:', err);
197
- }
198
- }
199
- setState('closed');
200
- },
201
- isOpen() {
202
- return ws !== null && ws.readyState === 1;
203
- },
204
- };
205
- }