@blit-sh/core 0.17.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 (73) hide show
  1. package/dist/BlitConnection.d.ts +132 -0
  2. package/dist/BlitConnection.d.ts.map +1 -0
  3. package/dist/BlitConnection.js +875 -0
  4. package/dist/BlitConnection.js.map +1 -0
  5. package/dist/BlitWorkspace.d.ts +65 -0
  6. package/dist/BlitWorkspace.d.ts.map +1 -0
  7. package/dist/BlitWorkspace.js +298 -0
  8. package/dist/BlitWorkspace.js.map +1 -0
  9. package/dist/TerminalStore.d.ts +125 -0
  10. package/dist/TerminalStore.d.ts.map +1 -0
  11. package/dist/TerminalStore.js +468 -0
  12. package/dist/TerminalStore.js.map +1 -0
  13. package/dist/bsp/dsl.d.ts +56 -0
  14. package/dist/bsp/dsl.d.ts.map +1 -0
  15. package/dist/bsp/dsl.js +247 -0
  16. package/dist/bsp/dsl.js.map +1 -0
  17. package/dist/bsp/index.d.ts +5 -0
  18. package/dist/bsp/index.d.ts.map +1 -0
  19. package/dist/bsp/index.js +3 -0
  20. package/dist/bsp/index.js.map +1 -0
  21. package/dist/bsp/layout.d.ts +32 -0
  22. package/dist/bsp/layout.d.ts.map +1 -0
  23. package/dist/bsp/layout.js +84 -0
  24. package/dist/bsp/layout.js.map +1 -0
  25. package/dist/gl-renderer.d.ts +10 -0
  26. package/dist/gl-renderer.d.ts.map +1 -0
  27. package/dist/gl-renderer.js +297 -0
  28. package/dist/gl-renderer.js.map +1 -0
  29. package/dist/index.d.ts +19 -0
  30. package/dist/index.d.ts.map +1 -0
  31. package/dist/index.js +13 -0
  32. package/dist/index.js.map +1 -0
  33. package/dist/keyboard.d.ts +7 -0
  34. package/dist/keyboard.d.ts.map +1 -0
  35. package/dist/keyboard.js +118 -0
  36. package/dist/keyboard.js.map +1 -0
  37. package/dist/measure.d.ts +19 -0
  38. package/dist/measure.d.ts.map +1 -0
  39. package/dist/measure.js +55 -0
  40. package/dist/measure.js.map +1 -0
  41. package/dist/palettes.d.ts +3 -0
  42. package/dist/palettes.d.ts.map +1 -0
  43. package/dist/palettes.js +803 -0
  44. package/dist/palettes.js.map +1 -0
  45. package/dist/protocol.d.ts +34 -0
  46. package/dist/protocol.d.ts.map +1 -0
  47. package/dist/protocol.js +195 -0
  48. package/dist/protocol.js.map +1 -0
  49. package/dist/transports/index.d.ts +8 -0
  50. package/dist/transports/index.d.ts.map +1 -0
  51. package/dist/transports/index.js +5 -0
  52. package/dist/transports/index.js.map +1 -0
  53. package/dist/transports/webrtc-share.d.ts +11 -0
  54. package/dist/transports/webrtc-share.d.ts.map +1 -0
  55. package/dist/transports/webrtc-share.js +299 -0
  56. package/dist/transports/webrtc-share.js.map +1 -0
  57. package/dist/transports/webrtc.d.ts +11 -0
  58. package/dist/transports/webrtc.d.ts.map +1 -0
  59. package/dist/transports/webrtc.js +234 -0
  60. package/dist/transports/webrtc.js.map +1 -0
  61. package/dist/transports/websocket.d.ts +37 -0
  62. package/dist/transports/websocket.d.ts.map +1 -0
  63. package/dist/transports/websocket.js +200 -0
  64. package/dist/transports/websocket.js.map +1 -0
  65. package/dist/transports/webtransport.d.ts +53 -0
  66. package/dist/transports/webtransport.d.ts.map +1 -0
  67. package/dist/transports/webtransport.js +277 -0
  68. package/dist/transports/webtransport.js.map +1 -0
  69. package/dist/types.d.ts +163 -0
  70. package/dist/types.d.ts.map +1 -0
  71. package/dist/types.js +42 -0
  72. package/dist/types.js.map +1 -0
  73. package/package.json +75 -0
@@ -0,0 +1,277 @@
1
+ /**
2
+ * BlitTransport implementation over WebTransport (QUIC/HTTP3).
3
+ *
4
+ * The protocol is length-prefixed binary frames on a single bidirectional
5
+ * QUIC stream, with a 2-byte-length + passphrase auth handshake.
6
+ */
7
+ export class WebTransportTransport {
8
+ constructor(url, passphrase, options) {
9
+ this.wt = null;
10
+ this.writer = null;
11
+ this._status = "disconnected";
12
+ this.reconnectTimer = null;
13
+ this.connectPromise = null;
14
+ this.disposed = false;
15
+ this.messageListeners = new Set();
16
+ this.statusListeners = new Set();
17
+ /** True when the server explicitly rejected the passphrase. */
18
+ this.authRejected = false;
19
+ /** Last error message, if any. */
20
+ this.lastError = null;
21
+ this.url = url;
22
+ this.passphrase = passphrase;
23
+ this._reconnect = options?.reconnect ?? true;
24
+ this.initialDelay = options?.reconnectDelay ?? 500;
25
+ this.maxDelay = options?.maxReconnectDelay ?? 10000;
26
+ this.backoff = options?.reconnectBackoff ?? 1.5;
27
+ this.connectTimeoutMs = options?.connectTimeoutMs ?? 10000;
28
+ this.currentDelay = this.initialDelay;
29
+ if (options?.serverCertificateHash) {
30
+ this.certHash = hexToBytes(options.serverCertificateHash);
31
+ }
32
+ }
33
+ get status() {
34
+ return this._status;
35
+ }
36
+ send(data) {
37
+ if (!this.writer)
38
+ return;
39
+ // Length-prefixed: 4-byte LE length + payload
40
+ const frame = new Uint8Array(4 + data.length);
41
+ frame[0] = data.length & 0xff;
42
+ frame[1] = (data.length >> 8) & 0xff;
43
+ frame[2] = (data.length >> 16) & 0xff;
44
+ frame[3] = (data.length >> 24) & 0xff;
45
+ frame.set(data, 4);
46
+ this.writer.write(frame).catch(() => { });
47
+ }
48
+ close() {
49
+ this.disposed = true;
50
+ this.clearReconnectTimer();
51
+ this.cleanup();
52
+ this.setStatus("closed");
53
+ }
54
+ addEventListener(type, listener) {
55
+ if (type === "message") {
56
+ this.messageListeners.add(listener);
57
+ }
58
+ else if (type === "statuschange") {
59
+ this.statusListeners.add(listener);
60
+ }
61
+ }
62
+ removeEventListener(type, listener) {
63
+ if (type === "message") {
64
+ this.messageListeners.delete(listener);
65
+ }
66
+ else if (type === "statuschange") {
67
+ this.statusListeners.delete(listener);
68
+ }
69
+ }
70
+ setStatus(status) {
71
+ if (this._status === status)
72
+ return;
73
+ this._status = status;
74
+ for (const l of this.statusListeners)
75
+ l(status);
76
+ }
77
+ clearReconnectTimer() {
78
+ if (this.reconnectTimer !== null) {
79
+ clearTimeout(this.reconnectTimer);
80
+ this.reconnectTimer = null;
81
+ }
82
+ }
83
+ scheduleReconnect() {
84
+ if (this.disposed || !this._reconnect)
85
+ return;
86
+ this.clearReconnectTimer();
87
+ this.reconnectTimer = setTimeout(() => {
88
+ this.reconnectTimer = null;
89
+ if (!this.disposed)
90
+ this.connect();
91
+ }, this.currentDelay);
92
+ this.currentDelay = Math.min(this.currentDelay * this.backoff, this.maxDelay);
93
+ }
94
+ cleanup() {
95
+ this.writer = null;
96
+ if (this.wt) {
97
+ try {
98
+ this.wt.close();
99
+ }
100
+ catch { }
101
+ this.wt = null;
102
+ }
103
+ }
104
+ connect() {
105
+ if (this.connectPromise)
106
+ return;
107
+ const connectPromise = this.connectInternal().finally(() => {
108
+ if (this.connectPromise === connectPromise) {
109
+ this.connectPromise = null;
110
+ }
111
+ });
112
+ this.connectPromise = connectPromise;
113
+ }
114
+ async connectInternal() {
115
+ if (this.disposed)
116
+ return;
117
+ if (this.reconnectTimer !== null) {
118
+ this.clearReconnectTimer();
119
+ this.currentDelay = this.initialDelay;
120
+ }
121
+ if (this._status === "connecting" ||
122
+ this._status === "authenticating" ||
123
+ this._status === "connected") {
124
+ return;
125
+ }
126
+ this.setStatus("connecting");
127
+ try {
128
+ const opts = {};
129
+ if (this.certHash) {
130
+ opts.serverCertificateHashes = [
131
+ { algorithm: "sha-256", value: this.certHash.buffer },
132
+ ];
133
+ }
134
+ const wt = new WebTransport(this.url, opts);
135
+ this.wt = wt;
136
+ await Promise.race([
137
+ wt.ready,
138
+ new Promise((_, reject) => setTimeout(() => reject(new Error("connect timeout")), this.connectTimeoutMs)),
139
+ ]);
140
+ if (this.disposed || this.wt !== wt) {
141
+ wt.close();
142
+ return;
143
+ }
144
+ // Open a bidirectional stream for the blit protocol
145
+ const stream = await wt.createBidirectionalStream();
146
+ const writer = stream.writable.getWriter();
147
+ const reader = stream.readable.getReader();
148
+ // --- Auth: send 2-byte LE length + passphrase ---
149
+ this.setStatus("authenticating");
150
+ const passBytes = new TextEncoder().encode(this.passphrase);
151
+ const authMsg = new Uint8Array(2 + passBytes.length);
152
+ authMsg[0] = passBytes.length & 0xff;
153
+ authMsg[1] = (passBytes.length >> 8) & 0xff;
154
+ authMsg.set(passBytes, 2);
155
+ await writer.write(authMsg);
156
+ // Read 1-byte auth response: 1 = ok, 0 = rejected
157
+ const { data: authResp, remainder } = await readExactBuffered(reader, 1);
158
+ if (!authResp || authResp[0] !== 1) {
159
+ this.authRejected = true;
160
+ this.lastError = "Authentication failed";
161
+ this.setStatus("error");
162
+ wt.close();
163
+ return;
164
+ }
165
+ if (this.disposed || this.wt !== wt) {
166
+ wt.close();
167
+ return;
168
+ }
169
+ this.writer = writer;
170
+ this.authRejected = false;
171
+ this.lastError = null;
172
+ this.currentDelay = this.initialDelay;
173
+ this.setStatus("connected");
174
+ // Read loop: length-prefixed frames
175
+ void this.readLoop(reader, wt, new Uint8Array(remainder));
176
+ // Handle connection close
177
+ wt.closed
178
+ .then(() => {
179
+ if (this.wt !== wt || this.disposed)
180
+ return;
181
+ this.cleanup();
182
+ this.setStatus(this.authRejected ? "error" : "disconnected");
183
+ if (!this.authRejected) {
184
+ this.scheduleReconnect();
185
+ }
186
+ })
187
+ .catch(() => {
188
+ if (this.wt !== wt || this.disposed)
189
+ return;
190
+ this.cleanup();
191
+ this.setStatus(this.authRejected ? "error" : "disconnected");
192
+ if (!this.authRejected) {
193
+ this.scheduleReconnect();
194
+ }
195
+ });
196
+ }
197
+ catch (err) {
198
+ if (this.disposed)
199
+ return;
200
+ this.cleanup();
201
+ if (!this.authRejected) {
202
+ this.lastError =
203
+ err instanceof Error ? err.message : "Connection failed";
204
+ }
205
+ this.setStatus("error");
206
+ if (!this.authRejected) {
207
+ this.scheduleReconnect();
208
+ }
209
+ }
210
+ }
211
+ async readLoop(reader, wt, initialBuffer = new Uint8Array(0)) {
212
+ let buffer = initialBuffer;
213
+ try {
214
+ while (true) {
215
+ while (buffer.length >= 4) {
216
+ const len = buffer[0] |
217
+ (buffer[1] << 8) |
218
+ (buffer[2] << 16) |
219
+ (buffer[3] << 24);
220
+ if (len < 0 || len > 16 * 1024 * 1024) {
221
+ // Invalid frame — close
222
+ wt.close();
223
+ return;
224
+ }
225
+ if (buffer.length < 4 + len)
226
+ break;
227
+ const payload = buffer.slice(4, 4 + len);
228
+ buffer = buffer.subarray(4 + len);
229
+ for (const l of this.messageListeners)
230
+ l(payload.buffer);
231
+ }
232
+ const { value, done } = await reader.read();
233
+ if (done || this.disposed || this.wt !== wt)
234
+ break;
235
+ if (!value || value.length === 0)
236
+ continue;
237
+ // Append to buffer
238
+ const newBuf = new Uint8Array(buffer.length + value.length);
239
+ newBuf.set(buffer);
240
+ newBuf.set(value, buffer.length);
241
+ buffer = newBuf;
242
+ }
243
+ }
244
+ catch {
245
+ // Stream closed or error
246
+ }
247
+ }
248
+ }
249
+ /** Read exactly `n` bytes from a ReadableStreamDefaultReader. */
250
+ async function readExactBuffered(reader, n, initialBuffer = new Uint8Array(0)) {
251
+ const buf = new Uint8Array(n);
252
+ let offset = 0;
253
+ let buffer = initialBuffer;
254
+ while (offset < n) {
255
+ if (buffer.length === 0) {
256
+ const { value, done } = await reader.read();
257
+ if (done || !value) {
258
+ return { data: null, remainder: new Uint8Array(0) };
259
+ }
260
+ buffer = new Uint8Array(value);
261
+ }
262
+ const take = Math.min(buffer.length, n - offset);
263
+ buf.set(buffer.subarray(0, take), offset);
264
+ offset += take;
265
+ buffer = buffer.subarray(take);
266
+ }
267
+ return { data: buf, remainder: buffer };
268
+ }
269
+ function hexToBytes(hex) {
270
+ const clean = hex.replace(/[^0-9a-fA-F]/g, "");
271
+ const bytes = new Uint8Array(clean.length / 2);
272
+ for (let i = 0; i < bytes.length; i++) {
273
+ bytes[i] = parseInt(clean.slice(i * 2, i * 2 + 2), 16);
274
+ }
275
+ return bytes;
276
+ }
277
+ //# sourceMappingURL=webtransport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webtransport.js","sourceRoot":"","sources":["../../src/transports/webtransport.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,163 @@
1
+ /** A terminal color palette. */
2
+ export interface TerminalPalette {
3
+ id: string;
4
+ name: string;
5
+ /** true = dark background, false = light background. */
6
+ dark: boolean;
7
+ /** Default foreground color as [r, g, b] (0–255). */
8
+ fg: [number, number, number];
9
+ /** Default background color as [r, g, b] (0–255). */
10
+ bg: [number, number, number];
11
+ /** ANSI 16-color entries, indexed 0–15. */
12
+ ansi: Array<[number, number, number]>;
13
+ }
14
+ export interface BlitDebug {
15
+ log(msg: string, ...args: unknown[]): void;
16
+ warn(msg: string, ...args: unknown[]): void;
17
+ error(msg: string, ...args: unknown[]): void;
18
+ }
19
+ /** Connection lifecycle states. */
20
+ export type ConnectionStatus = "connecting" | "authenticating" | "connected" | "disconnected" | "closed" | "error";
21
+ export type ConnectionId = string;
22
+ export type SessionId = string;
23
+ /**
24
+ * Transport abstraction for blit server communication.
25
+ * Implementations handle the underlying protocol (WebSocket, WebTransport, etc.)
26
+ * while consumers only deal with binary messages and status changes.
27
+ */
28
+ export type BlitTransportEventMap = {
29
+ message: ArrayBuffer;
30
+ statuschange: ConnectionStatus;
31
+ };
32
+ export interface BlitTransportOptions {
33
+ /** Enable automatic reconnection on disconnect. Default: true. */
34
+ reconnect?: boolean;
35
+ /** Initial reconnect delay in ms. Default: 500. */
36
+ reconnectDelay?: number;
37
+ /** Maximum reconnect delay in ms. Default: 10000. */
38
+ maxReconnectDelay?: number;
39
+ /** Backoff multiplier for reconnect delay. Default: 1.5. */
40
+ reconnectBackoff?: number;
41
+ /** Timeout in ms to wait for the connection to be established. Default: none for WebSocket, 10000 for others. */
42
+ connectTimeoutMs?: number;
43
+ }
44
+ export interface BlitTransport {
45
+ /** Start connecting. Safe to call repeatedly. Call after registering listeners. */
46
+ connect(): void;
47
+ /** Send binary data to the server. */
48
+ send(data: Uint8Array): void;
49
+ /** Close the transport connection. */
50
+ close(): void;
51
+ /** Current connection status. */
52
+ readonly status: ConnectionStatus;
53
+ /** True when the server explicitly rejected authentication. */
54
+ readonly authRejected: boolean;
55
+ /** Last error message, if any. Cleared on successful connection. */
56
+ readonly lastError: string | null;
57
+ /** Register a listener for transport events. */
58
+ addEventListener(type: "message", listener: (data: ArrayBuffer) => void): void;
59
+ addEventListener(type: "statuschange", listener: (status: ConnectionStatus) => void): void;
60
+ /** Remove a previously registered listener. */
61
+ removeEventListener(type: "message", listener: (data: ArrayBuffer) => void): void;
62
+ removeEventListener(type: "statuschange", listener: (status: ConnectionStatus) => void): void;
63
+ }
64
+ /** A tracked terminal session. */
65
+ export type BlitSession = {
66
+ id: SessionId;
67
+ connectionId: ConnectionId;
68
+ ptyId: number;
69
+ tag: string;
70
+ title: string | null;
71
+ command: string | null;
72
+ state: "creating" | "active" | "exited" | "closed";
73
+ };
74
+ export interface BlitConnectionSnapshot {
75
+ id: ConnectionId;
76
+ status: ConnectionStatus;
77
+ ready: boolean;
78
+ supportsRestart: boolean;
79
+ supportsCopyRange: boolean;
80
+ retryCount: number;
81
+ /** Non-null when the last connection attempt failed with an explicit error message. */
82
+ error: string | null;
83
+ sessions: readonly BlitSession[];
84
+ focusedSessionId: SessionId | null;
85
+ }
86
+ export interface BlitWorkspaceSnapshot {
87
+ connections: readonly BlitConnectionSnapshot[];
88
+ sessions: readonly BlitSession[];
89
+ focusedSessionId: SessionId | null;
90
+ ready: boolean;
91
+ }
92
+ export interface BlitSearchResult {
93
+ sessionId: SessionId;
94
+ connectionId: ConnectionId;
95
+ score: number;
96
+ primarySource: number;
97
+ matchedSources: number;
98
+ scrollOffset: number | null;
99
+ context: string;
100
+ }
101
+ export type TransportConfig = {
102
+ type: "websocket";
103
+ url: string;
104
+ passphrase: string;
105
+ options?: BlitTransportOptions;
106
+ } | {
107
+ type: "webtransport";
108
+ url: string;
109
+ passphrase: string;
110
+ options?: BlitTransportOptions & {
111
+ certHash?: string;
112
+ };
113
+ } | {
114
+ type: "share";
115
+ hubUrl: string;
116
+ passphrase: string;
117
+ debug?: BlitDebug;
118
+ } | {
119
+ type: "custom";
120
+ transport: BlitTransport;
121
+ };
122
+ export declare const DEFAULT_FONT = "ui-monospace, monospace";
123
+ export declare const DEFAULT_FONT_SIZE = 13;
124
+ /** Wire protocol constants: client-to-server message types. */
125
+ export declare const C2S_INPUT = 0;
126
+ /** Desired viewport size(s): repeated [pty_id:2][rows:2][cols:2] entries. `0x0` clears one. */
127
+ export declare const C2S_RESIZE = 1;
128
+ export declare const C2S_SCROLL = 2;
129
+ export declare const C2S_ACK = 3;
130
+ export declare const C2S_DISPLAY_RATE = 4;
131
+ export declare const C2S_CLIENT_METRICS = 5;
132
+ export declare const C2S_MOUSE = 6;
133
+ export declare const C2S_RESTART = 7;
134
+ export declare const C2S_CREATE = 16;
135
+ export declare const C2S_FOCUS = 17;
136
+ export declare const C2S_CLOSE = 18;
137
+ export declare const C2S_SUBSCRIBE = 19;
138
+ export declare const C2S_UNSUBSCRIBE = 20;
139
+ export declare const C2S_SEARCH = 21;
140
+ export declare const C2S_CREATE_AT = 22;
141
+ export declare const C2S_CREATE_N = 23;
142
+ export declare const C2S_CREATE2 = 24;
143
+ export declare const C2S_KILL = 26;
144
+ export declare const C2S_COPY_RANGE = 27;
145
+ export declare const CREATE2_HAS_SRC_PTY: number;
146
+ export declare const CREATE2_HAS_COMMAND: number;
147
+ /** Wire protocol constants: server-to-client message types. */
148
+ export declare const S2C_UPDATE = 0;
149
+ export declare const S2C_CREATED = 1;
150
+ export declare const S2C_CLOSED = 2;
151
+ export declare const S2C_LIST = 3;
152
+ export declare const S2C_TITLE = 4;
153
+ export declare const S2C_SEARCH_RESULTS = 5;
154
+ export declare const S2C_CREATED_N = 6;
155
+ export declare const S2C_HELLO = 7;
156
+ export declare const S2C_EXITED = 8;
157
+ export declare const S2C_TEXT = 10;
158
+ export declare const PROTOCOL_VERSION = 1;
159
+ export declare const FEATURE_CREATE_NONCE: number;
160
+ export declare const FEATURE_RESTART: number;
161
+ export declare const FEATURE_RESIZE_BATCH: number;
162
+ export declare const FEATURE_COPY_RANGE: number;
163
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,42 @@
1
+ export const DEFAULT_FONT = "ui-monospace, monospace";
2
+ export const DEFAULT_FONT_SIZE = 13;
3
+ /** Wire protocol constants: client-to-server message types. */
4
+ export const C2S_INPUT = 0x00;
5
+ /** Desired viewport size(s): repeated [pty_id:2][rows:2][cols:2] entries. `0x0` clears one. */
6
+ export const C2S_RESIZE = 0x01;
7
+ export const C2S_SCROLL = 0x02;
8
+ export const C2S_ACK = 0x03;
9
+ export const C2S_DISPLAY_RATE = 0x04;
10
+ export const C2S_CLIENT_METRICS = 0x05;
11
+ export const C2S_MOUSE = 0x06;
12
+ export const C2S_RESTART = 0x07;
13
+ export const C2S_CREATE = 0x10;
14
+ export const C2S_FOCUS = 0x11;
15
+ export const C2S_CLOSE = 0x12;
16
+ export const C2S_SUBSCRIBE = 0x13;
17
+ export const C2S_UNSUBSCRIBE = 0x14;
18
+ export const C2S_SEARCH = 0x15;
19
+ export const C2S_CREATE_AT = 0x16;
20
+ export const C2S_CREATE_N = 0x17;
21
+ export const C2S_CREATE2 = 0x18;
22
+ export const C2S_KILL = 0x1a;
23
+ export const C2S_COPY_RANGE = 0x1b;
24
+ export const CREATE2_HAS_SRC_PTY = 1 << 0;
25
+ export const CREATE2_HAS_COMMAND = 1 << 1;
26
+ /** Wire protocol constants: server-to-client message types. */
27
+ export const S2C_UPDATE = 0x00;
28
+ export const S2C_CREATED = 0x01;
29
+ export const S2C_CLOSED = 0x02;
30
+ export const S2C_LIST = 0x03;
31
+ export const S2C_TITLE = 0x04;
32
+ export const S2C_SEARCH_RESULTS = 0x05;
33
+ export const S2C_CREATED_N = 0x06;
34
+ export const S2C_HELLO = 0x07;
35
+ export const S2C_EXITED = 0x08;
36
+ export const S2C_TEXT = 0x0a;
37
+ export const PROTOCOL_VERSION = 1;
38
+ export const FEATURE_CREATE_NONCE = 1 << 0;
39
+ export const FEATURE_RESTART = 1 << 1;
40
+ export const FEATURE_RESIZE_BATCH = 1 << 2;
41
+ export const FEATURE_COPY_RANGE = 1 << 3;
42
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAiJA,MAAM,CAAC,MAAM,YAAY,GAAG,yBAAyB,CAAC;AACtD,MAAM,CAAC,MAAM,iBAAiB,GAAG,EAAE,CAAC;AAEpC,+DAA+D;AAC/D,MAAM,CAAC,MAAM,SAAS,GAAG,IAAI,CAAC;AAC9B,+FAA+F;AAC/F,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,CAAC;AAC/B,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,CAAC;AAC/B,MAAM,CAAC,MAAM,OAAO,GAAG,IAAI,CAAC;AAC5B,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,CAAC;AACrC,MAAM,CAAC,MAAM,kBAAkB,GAAG,IAAI,CAAC;AACvC,MAAM,CAAC,MAAM,SAAS,GAAG,IAAI,CAAC;AAC9B,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,CAAC;AAChC,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,CAAC;AAC/B,MAAM,CAAC,MAAM,SAAS,GAAG,IAAI,CAAC;AAC9B,MAAM,CAAC,MAAM,SAAS,GAAG,IAAI,CAAC;AAC9B,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,CAAC;AAClC,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,CAAC;AACpC,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,CAAC;AAC/B,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,CAAC;AAClC,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,CAAC;AACjC,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,CAAC;AAChC,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,CAAC;AAC7B,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,CAAC;AACnC,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,IAAI,CAAC,CAAC;AAC1C,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,IAAI,CAAC,CAAC;AAE1C,+DAA+D;AAC/D,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,CAAC;AAC/B,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,CAAC;AAChC,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,CAAC;AAC/B,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,CAAC;AAC7B,MAAM,CAAC,MAAM,SAAS,GAAG,IAAI,CAAC;AAC9B,MAAM,CAAC,MAAM,kBAAkB,GAAG,IAAI,CAAC;AACvC,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,CAAC;AAClC,MAAM,CAAC,MAAM,SAAS,GAAG,IAAI,CAAC;AAC9B,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,CAAC;AAC/B,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,CAAC;AAE7B,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC;AAClC,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,IAAI,CAAC,CAAC;AAC3C,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,IAAI,CAAC,CAAC;AACtC,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,IAAI,CAAC,CAAC;AAC3C,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,IAAI,CAAC,CAAC"}
package/package.json ADDED
@@ -0,0 +1,75 @@
1
+ {
2
+ "name": "@blit-sh/core",
3
+ "version": "0.17.0",
4
+ "type": "module",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "exports": {
8
+ ".": {
9
+ "types": "./dist/index.d.ts",
10
+ "default": "./dist/index.js"
11
+ },
12
+ "./transports": {
13
+ "types": "./dist/transports/index.d.ts",
14
+ "default": "./dist/transports/index.js"
15
+ },
16
+ "./types": {
17
+ "types": "./dist/types.d.ts",
18
+ "default": "./dist/types.js"
19
+ },
20
+ "./palettes": {
21
+ "types": "./dist/palettes.d.ts",
22
+ "default": "./dist/palettes.js"
23
+ },
24
+ "./bsp": {
25
+ "types": "./dist/bsp/index.d.ts",
26
+ "default": "./dist/bsp/index.js"
27
+ }
28
+ },
29
+ "description": "Low-latency terminal streaming — framework-agnostic core",
30
+ "homepage": "https://blit.sh",
31
+ "author": "Indent <oss@indent.com> (https://indent.com)",
32
+ "repository": {
33
+ "type": "git",
34
+ "url": "git+https://github.com/indent-com/blit.git",
35
+ "directory": "js/core"
36
+ },
37
+ "bugs": {
38
+ "url": "https://github.com/indent-com/blit/issues"
39
+ },
40
+ "keywords": [
41
+ "terminal",
42
+ "tty",
43
+ "streaming",
44
+ "webgl",
45
+ "bsp"
46
+ ],
47
+ "sideEffects": false,
48
+ "files": [
49
+ "dist"
50
+ ],
51
+ "scripts": {
52
+ "build": "tsc",
53
+ "dev": "tsc --watch",
54
+ "test": "vitest run",
55
+ "test:coverage": "vitest run --coverage",
56
+ "test:watch": "vitest"
57
+ },
58
+ "peerDependencies": {
59
+ "@blit-sh/browser": ">=0.9.0"
60
+ },
61
+ "dependencies": {
62
+ "tweetnacl": "^1.0.3"
63
+ },
64
+ "devDependencies": {
65
+ "@blit-sh/browser": "file:/tmp/tmp.FkE9Oh4RZj/blit-browser",
66
+ "@vitest/coverage-v8": "^4",
67
+ "jsdom": "^29.0.1",
68
+ "typescript": "^6",
69
+ "vitest": "^4"
70
+ },
71
+ "license": "MIT",
72
+ "overrides": {
73
+ "rollup": ">=4.59.0"
74
+ }
75
+ }