spice-html5-react 0.1.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.
Files changed (64) hide show
  1. package/README.md +262 -0
  2. package/dist/components/SpiceDisplay.d.ts +109 -0
  3. package/dist/components/SpiceDisplay.d.ts.map +1 -0
  4. package/dist/hooks/useSpice.d.ts +107 -0
  5. package/dist/hooks/useSpice.d.ts.map +1 -0
  6. package/dist/index.cjs +14 -0
  7. package/dist/index.cjs.map +1 -0
  8. package/dist/index.d.ts +8 -0
  9. package/dist/index.d.ts.map +1 -0
  10. package/dist/index.mjs +6745 -0
  11. package/dist/index.mjs.map +1 -0
  12. package/dist/protocol/bitmap.d.ts +20 -0
  13. package/dist/protocol/bitmap.d.ts.map +1 -0
  14. package/dist/protocol/cursor.d.ts +16 -0
  15. package/dist/protocol/cursor.d.ts.map +1 -0
  16. package/dist/protocol/display.d.ts +311 -0
  17. package/dist/protocol/display.d.ts.map +1 -0
  18. package/dist/protocol/enums.d.ts +677 -0
  19. package/dist/protocol/enums.d.ts.map +1 -0
  20. package/dist/protocol/filexfer.d.ts +61 -0
  21. package/dist/protocol/filexfer.d.ts.map +1 -0
  22. package/dist/protocol/index.d.ts +34 -0
  23. package/dist/protocol/index.d.ts.map +1 -0
  24. package/dist/protocol/inputs.d.ts +95 -0
  25. package/dist/protocol/inputs.d.ts.map +1 -0
  26. package/dist/protocol/lz.d.ts +24 -0
  27. package/dist/protocol/lz.d.ts.map +1 -0
  28. package/dist/protocol/main.d.ts +205 -0
  29. package/dist/protocol/main.d.ts.map +1 -0
  30. package/dist/protocol/playback.d.ts +51 -0
  31. package/dist/protocol/playback.d.ts.map +1 -0
  32. package/dist/protocol/png.d.ts +14 -0
  33. package/dist/protocol/png.d.ts.map +1 -0
  34. package/dist/protocol/port.d.ts +46 -0
  35. package/dist/protocol/port.d.ts.map +1 -0
  36. package/dist/protocol/quic.d.ts +105 -0
  37. package/dist/protocol/quic.d.ts.map +1 -0
  38. package/dist/protocol/resize.d.ts +61 -0
  39. package/dist/protocol/resize.d.ts.map +1 -0
  40. package/dist/protocol/simulatecursor.d.ts +49 -0
  41. package/dist/protocol/simulatecursor.d.ts.map +1 -0
  42. package/dist/protocol/spicearraybuffer.d.ts +44 -0
  43. package/dist/protocol/spicearraybuffer.d.ts.map +1 -0
  44. package/dist/protocol/spiceconn.d.ts +118 -0
  45. package/dist/protocol/spiceconn.d.ts.map +1 -0
  46. package/dist/protocol/spicedataview.d.ts +144 -0
  47. package/dist/protocol/spicedataview.d.ts.map +1 -0
  48. package/dist/protocol/spicemsg.d.ts +435 -0
  49. package/dist/protocol/spicemsg.d.ts.map +1 -0
  50. package/dist/protocol/spicetype.d.ts +166 -0
  51. package/dist/protocol/spicetype.d.ts.map +1 -0
  52. package/dist/protocol/ticket.d.ts +14 -0
  53. package/dist/protocol/ticket.d.ts.map +1 -0
  54. package/dist/protocol/webm.d.ts +118 -0
  55. package/dist/protocol/webm.d.ts.map +1 -0
  56. package/dist/protocol/wire.d.ts +81 -0
  57. package/dist/protocol/wire.d.ts.map +1 -0
  58. package/dist/utils/atKeynames.d.ts +96 -0
  59. package/dist/utils/atKeynames.d.ts.map +1 -0
  60. package/dist/utils/codeToScancode.d.ts +2 -0
  61. package/dist/utils/codeToScancode.d.ts.map +1 -0
  62. package/dist/utils/debug.d.ts +84 -0
  63. package/dist/utils/debug.d.ts.map +1 -0
  64. package/package.json +60 -0
@@ -0,0 +1,20 @@
1
+ import { SpiceBitmap } from './spicetype.js';
2
+
3
+ /**
4
+ * Convert a SPICE protocol bitmap to a web-compatible ImageData.
5
+ *
6
+ * SPICE bitmaps use BGRx (32BIT) or BGRA (RGBA) pixel order, while
7
+ * the HTML Canvas API expects RGBA. This function swaps the red and
8
+ * blue channels and handles the top-down vs bottom-up row ordering.
9
+ *
10
+ * Only 32-bit (BGRx) and RGBA (BGRA) formats are supported. Other
11
+ * formats return `undefined`.
12
+ *
13
+ * @param context A 2D canvas rendering context (used only to call
14
+ * createImageData for the correct backing store).
15
+ * @param spiceBitmap The deserialized SpiceBitmap from the protocol.
16
+ * @returns An ImageData with RGBA pixels, or undefined if the bitmap
17
+ * format is not supported.
18
+ */
19
+ export declare function convertSpiceBitmapToWeb(context: CanvasRenderingContext2D, spiceBitmap: SpiceBitmap): ImageData | undefined;
20
+ //# sourceMappingURL=bitmap.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bitmap.d.ts","sourceRoot":"","sources":["../../src/protocol/bitmap.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,uBAAuB,CACnC,OAAO,EAAE,wBAAwB,EACjC,WAAW,EAAE,WAAW,GACzB,SAAS,GAAG,SAAS,CAuDvB"}
@@ -0,0 +1,16 @@
1
+ import { SpiceConn, SpiceConnOptions } from './spiceconn';
2
+ import { SpiceMiniData } from './spicemsg';
3
+ import { CursorOwner } from './simulatecursor';
4
+
5
+ export declare class SpiceCursorConn extends SpiceConn implements CursorOwner {
6
+ /** Simulated cursor <img> element (fallback for unsupported browsers). */
7
+ simulatedCursor: CursorOwner['simulatedCursor'];
8
+ /** Event handler stored for cleanup */
9
+ simulatedCursorHandler: CursorOwner['simulatedCursorHandler'];
10
+ constructor(options: SpiceConnOptions);
11
+ protected processChannelMessage(msg: SpiceMiniData): boolean;
12
+ private setCursor;
13
+ private getScreen;
14
+ cleanup(): void;
15
+ }
16
+ //# sourceMappingURL=cursor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cursor.d.ts","sourceRoot":"","sources":["../../src/protocol/cursor.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,SAAS,EAAE,KAAK,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAS/D,OAAO,EACH,aAAa,EAGhB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAEH,KAAK,WAAW,EAEnB,MAAM,kBAAkB,CAAC;AAwB1B,qBAAa,eAAgB,SAAQ,SAAU,YAAW,WAAW;IAEjE,0EAA0E;IAC1E,eAAe,EAAE,WAAW,CAAC,iBAAiB,CAAC,CAAa;IAE5D,uCAAuC;IACvC,sBAAsB,EAAE,WAAW,CAAC,wBAAwB,CAAC,CAAa;gBAE9D,OAAO,EAAE,gBAAgB;cASlB,qBAAqB,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO;IAyHrE,OAAO,CAAC,SAAS;IAsCjB,OAAO,CAAC,SAAS;IAmBR,OAAO,IAAI,IAAI;CAK3B"}
@@ -0,0 +1,311 @@
1
+ import { SpiceMiniData, SpiceMsgcDisplayStreamReport } from './spicemsg';
2
+ import { SpiceConn, SpiceConnOptions } from './spiceconn';
3
+
4
+ /**
5
+ * Internal canvas wrapper that holds a reference to the 2D context.
6
+ * The original display.js attached `context` directly to the canvas
7
+ * element; this interface makes that explicit in TypeScript.
8
+ */
9
+ interface SpiceCanvas {
10
+ canvas: HTMLCanvasElement;
11
+ context: CanvasRenderingContext2D;
12
+ }
13
+ /**
14
+ * Runtime surface state maintained by the display channel.
15
+ * One entry exists per active surface (primary or off-screen).
16
+ */
17
+ export interface SurfaceEntry {
18
+ /** Surface ID from the SPICE protocol. */
19
+ surfaceId: number;
20
+ /** Width in pixels. */
21
+ width: number;
22
+ /** Height in pixels. */
23
+ height: number;
24
+ /** Pixel format (SpiceSurfaceFmt.*). */
25
+ format: number;
26
+ /** Surface flags (e.g. SPICE_SURFACE_FLAGS_PRIMARY). */
27
+ flags: number;
28
+ /** Canvas and its 2D context. */
29
+ canvas: SpiceCanvas;
30
+ /** Counter of draw operations (for debug canvas naming). */
31
+ drawCount: number;
32
+ }
33
+ /**
34
+ * Image cache keyed by the 64-bit image descriptor ID (as bigint).
35
+ * Values are ImageData objects that can be put directly onto a canvas
36
+ * context.
37
+ */
38
+ export type ImageCache = Record<string, ImageData>;
39
+ /**
40
+ * Stream entry type for video streams (VP8 and MJPEG).
41
+ * Tracks the video element, MediaSource, SourceBuffer, frame queue,
42
+ * timing state, and stream report for one active stream.
43
+ */
44
+ export interface StreamEntry {
45
+ /** Stream ID from the SPICE protocol. */
46
+ id: number;
47
+ /** Surface associated with this stream. */
48
+ surfaceId: number;
49
+ /** Video codec type (SpiceVideoCodecType.*). */
50
+ codecType: number;
51
+ /** Stream dimensions. */
52
+ streamWidth: number;
53
+ streamHeight: number;
54
+ /** Destination rectangle. */
55
+ dest: {
56
+ left: number;
57
+ top: number;
58
+ right: number;
59
+ bottom: number;
60
+ };
61
+ /** Clip region. */
62
+ clip: {
63
+ type: number;
64
+ } | undefined;
65
+ /** MJPEG frames currently loading. */
66
+ framesLoading: number;
67
+ /** VP8 video element. */
68
+ video: HTMLVideoElement | undefined;
69
+ /** VP8 MediaSource. */
70
+ media: MediaSource | undefined;
71
+ /** VP8 SourceBuffer. */
72
+ sourceBuffer: SourceBuffer | undefined;
73
+ /** VP8 frame queue. */
74
+ queue: Array<{
75
+ msgMmtime: number;
76
+ mb: ArrayBuffer;
77
+ }>;
78
+ /** VP8 start time. */
79
+ startTime: number;
80
+ /** VP8 cluster time. */
81
+ clusterTime: number;
82
+ /** VP8 append state. */
83
+ appendOkay: boolean;
84
+ /** VP8/MJPEG current frame. */
85
+ currentFrame: {
86
+ msgMmtime: number;
87
+ mb?: ArrayBuffer;
88
+ } | undefined;
89
+ /** Stream report (if active). */
90
+ report: SpiceMsgcDisplayStreamReport | undefined;
91
+ /** Max window size for report. */
92
+ maxWindowSize: number;
93
+ /** Timeout in ms for report. */
94
+ timeoutMs: number;
95
+ }
96
+ /**
97
+ * Callback fired when the primary surface is created or destroyed.
98
+ */
99
+ export interface DisplaySurfaceCallback {
100
+ (surfaceId: number, width: number, height: number, created: boolean): void;
101
+ }
102
+ /**
103
+ * SPICE display channel. Manages surface creation/destruction,
104
+ * image caching, draw operations, and video streaming.
105
+ *
106
+ * US-017 scope: surface lifecycle, image cache, event hooking.
107
+ * US-018 scope: draw COPY/FILL/COPY_BITS, image decompression dispatch.
108
+ * US-019 scope: VP8 and MJPEG video streaming via MediaSource API.
109
+ */
110
+ export declare class SpiceDisplayConn extends SpiceConn {
111
+ surfaces: Record<number, SurfaceEntry>;
112
+ primarySurface: number | undefined;
113
+ cache: ImageCache;
114
+ streams: Record<number, StreamEntry>;
115
+ private focusListener;
116
+ onSurface: DisplaySurfaceCallback | undefined;
117
+ constructor(options: SpiceConnOptions);
118
+ protected processChannelMessage(msg: SpiceMiniData): boolean;
119
+ /**
120
+ * Handle SPICE_MSG_DISPLAY_DRAW_COPY.
121
+ * Dispatches image decompression based on the source bitmap type:
122
+ * QUIC, LZ_RGB, BITMAP, JPEG, JPEG_ALPHA, FROM_CACHE, SURFACE.
123
+ */
124
+ private handleDrawCopy;
125
+ /**
126
+ * Handle SPICE_MSG_DISPLAY_DRAW_FILL.
127
+ * Currently only handles solid brush fills.
128
+ */
129
+ private handleDrawFill;
130
+ /**
131
+ * Handle SPICE_MSG_DISPLAY_COPY_BITS.
132
+ * Copies a region within the same surface.
133
+ */
134
+ private handleCopyBits;
135
+ /**
136
+ * Common helper for all draw copy operations.
137
+ * Handles alpha blending, image caching (CACHE_ME flag), and debug dumps.
138
+ *
139
+ * @param o - Aggregated draw parameters
140
+ * @returns true on success
141
+ */
142
+ private drawCopyHelper;
143
+ /**
144
+ * Handle JPEG and JPEG_ALPHA draw copy operations.
145
+ * Because JPEG decoding is asynchronous (via Image element onload),
146
+ * this method creates an Image element, sets up the onload handler,
147
+ * and returns immediately.
148
+ *
149
+ * @param base - The display base (surface, box, clip)
150
+ * @param descriptor - The image descriptor (for caching)
151
+ * @param jpegData - The raw JPEG data as ArrayBuffer
152
+ * @param alphaImg - Optional alpha channel ImageData (for JPEG_ALPHA)
153
+ * @param surfaceId - The target surface ID
154
+ */
155
+ private handleDrawJpeg;
156
+ /**
157
+ * Log detailed information about a draw command for debugging.
158
+ * Faithfully reproduced from the original display.js log_draw method.
159
+ *
160
+ * @param prefix - Label prefix (e.g. "DrawCopy", "DrawFill")
161
+ * @param draw - The draw message (DrawCopy, DrawFill, CopyBits, etc.)
162
+ */
163
+ private logDraw;
164
+ /**
165
+ * Handle SPICE_MSG_DISPLAY_STREAM_CREATE.
166
+ * Creates a new stream entry. For VP8, also creates a <video> element
167
+ * and a MediaSource with a SourceBuffer for WebM/VP8 frames. For
168
+ * MJPEG, just initialises the frame counter.
169
+ */
170
+ private handleStreamCreate;
171
+ /**
172
+ * Handle SPICE_MSG_DISPLAY_STREAM_DATA and STREAM_DATA_SIZED.
173
+ * Dispatches to VP8 or MJPEG handler depending on stream codec.
174
+ */
175
+ private handleStreamData;
176
+ /**
177
+ * Handle SPICE_MSG_DISPLAY_STREAM_ACTIVATE_REPORT.
178
+ * Sets up a stream report object for quality feedback.
179
+ */
180
+ private handleStreamActivateReport;
181
+ /**
182
+ * Handle SPICE_MSG_DISPLAY_STREAM_CLIP.
183
+ * Updates the clip region for a given stream.
184
+ */
185
+ private handleStreamClip;
186
+ /**
187
+ * Handle SPICE_MSG_DISPLAY_STREAM_DESTROY.
188
+ * Tears down the video element and MediaSource for VP8 streams,
189
+ * then removes the stream entry.
190
+ */
191
+ private handleStreamDestroy;
192
+ /**
193
+ * Called when the MediaSource for a VP8 stream enters 'sourceopen'.
194
+ * Adds a SourceBuffer for VP8/WebM, sends the WebM header + tracks,
195
+ * and wires up buffer events.
196
+ */
197
+ private handleVideoSourceOpen;
198
+ /**
199
+ * Append an ArrayBuffer to the VP8 stream's SourceBuffer.
200
+ * Sets appendOkay to false until the updateend event fires.
201
+ */
202
+ private appendVideoBuffer;
203
+ /**
204
+ * Called when the SourceBuffer finishes appending.
205
+ * Sends stream reports, drains the queue, advances the video
206
+ * currentTime if it falls behind, and attempts to play if paused.
207
+ */
208
+ private handleAppendVideoBufferDone;
209
+ /**
210
+ * Either immediately append to SourceBuffer if ready, or queue
211
+ * the frame for later append when the current operation completes.
212
+ */
213
+ private pushOrQueue;
214
+ /**
215
+ * Create a WebM SimpleBlock element for a VP8 frame and push/queue it.
216
+ */
217
+ private videoSimpleBlock;
218
+ /**
219
+ * Start a new WebM Cluster (keyframe), then immediately emit a
220
+ * SimpleBlock with the same frame data.
221
+ */
222
+ private newVideoCluster;
223
+ /**
224
+ * Process a VP8 video stream data message.
225
+ * Starts a new cluster on the first frame or when the cluster
226
+ * time exceeds MAX_CLUSTER_TIME, otherwise emits a simple block.
227
+ */
228
+ private processVideoStreamData;
229
+ /**
230
+ * Process an MJPEG stream data frame.
231
+ * Rate control: if a frame is late and another is currently loading,
232
+ * the new frame is dropped to help the browser keep up.
233
+ * Otherwise, the JPEG data is turned into a data URI, a SpiceMsgDisplayBase
234
+ * is constructed from the stream state, and the existing handleDrawJpeg
235
+ * path is reused for rendering.
236
+ */
237
+ private processMjpegStreamData;
238
+ /**
239
+ * Accumulate stream quality data and send a report to the server
240
+ * when the window is full or the timeout has expired.
241
+ */
242
+ private processStreamDataReport;
243
+ /**
244
+ * Attach debug event listeners to a VP8 stream's video element.
245
+ * The level of verbosity is controlled by STREAM_DEBUG.
246
+ */
247
+ private listenForVideoEvents;
248
+ private handleSurfaceCreate;
249
+ private handleSurfaceDestroy;
250
+ /**
251
+ * Remove a surface from the internal registry and the DOM.
252
+ *
253
+ * @param surfaceId - The surface ID to remove
254
+ */
255
+ deleteSurface(surfaceId: number): void;
256
+ /**
257
+ * Destroy all surfaces. Called during channel teardown.
258
+ */
259
+ destroySurfaces(): void;
260
+ private handleInvalList;
261
+ /**
262
+ * Store an image in the cache, keyed by its descriptor ID.
263
+ *
264
+ * @param id - The image descriptor ID (bigint)
265
+ * @param imageData - The ImageData to cache
266
+ */
267
+ cacheImage(id: bigint, imageData: ImageData): void;
268
+ /**
269
+ * Retrieve a cached image by its descriptor ID.
270
+ *
271
+ * @param id - The image descriptor ID (bigint)
272
+ * @returns The cached ImageData, or undefined if not found
273
+ */
274
+ getCachedImage(id: bigint): ImageData | undefined;
275
+ /**
276
+ * Check whether an image is in the cache.
277
+ *
278
+ * @param id - The image descriptor ID (bigint)
279
+ * @returns true if the image is cached
280
+ */
281
+ hasImageInCache(id: bigint): boolean;
282
+ /**
283
+ * Get a surface entry by its ID.
284
+ *
285
+ * @param surfaceId - The surface ID
286
+ * @returns The surface entry, or undefined if not found
287
+ */
288
+ getSurface(surfaceId: number): SurfaceEntry | undefined;
289
+ /**
290
+ * Get the primary surface entry.
291
+ *
292
+ * @returns The primary surface entry, or undefined
293
+ */
294
+ getPrimarySurface(): SurfaceEntry | undefined;
295
+ /**
296
+ * Hook input and focus events onto the primary surface canvas.
297
+ * This enables keyboard, mouse, and clipboard interaction.
298
+ *
299
+ * Note: Actual input event handler registration will be done by
300
+ * the inputs channel or component layer. This method sets up the
301
+ * canvas for focus/blur and clipboard grab.
302
+ */
303
+ hookEvents(): void;
304
+ /**
305
+ * Unhook events from the primary surface canvas.
306
+ */
307
+ unhookEvents(): void;
308
+ cleanup(): void;
309
+ }
310
+ export {};
311
+ //# sourceMappingURL=display.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"display.d.ts","sourceRoot":"","sources":["../../src/protocol/display.ts"],"names":[],"mappings":"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"}