@airterm/protocol 0.2.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/LICENSE +21 -0
- package/README.md +37 -0
- package/dist/capability.d.ts +22 -0
- package/dist/capability.d.ts.map +1 -0
- package/dist/capability.js +137 -0
- package/dist/capability.js.map +1 -0
- package/dist/framing.d.ts +45 -0
- package/dist/framing.d.ts.map +1 -0
- package/dist/framing.js +110 -0
- package/dist/framing.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -0
- package/dist/messages.d.ts +50 -0
- package/dist/messages.d.ts.map +1 -0
- package/dist/messages.js +199 -0
- package/dist/messages.js.map +1 -0
- package/dist/noise.d.ts +21 -0
- package/dist/noise.d.ts.map +1 -0
- package/dist/noise.js +122 -0
- package/dist/noise.js.map +1 -0
- package/dist/transfers.d.ts +71 -0
- package/dist/transfers.d.ts.map +1 -0
- package/dist/transfers.js +295 -0
- package/dist/transfers.js.map +1 -0
- package/package.json +47 -0
|
@@ -0,0 +1,295 @@
|
|
|
1
|
+
import { decodeBase64Url, encodeBase64Url } from './capability.js';
|
|
2
|
+
export const TRANSFER_ID_BYTES = 16;
|
|
3
|
+
export const TRANSFER_CHUNK_BYTES = 32 * 1_024;
|
|
4
|
+
export const TRANSFER_WINDOW_BYTES = 256 * 1_024;
|
|
5
|
+
export const TRANSFER_IDLE_TIMEOUT_MS = 30_000;
|
|
6
|
+
export function generateTransferId(randomValues = (target) => globalThis.crypto.getRandomValues(target)) {
|
|
7
|
+
return encodeBase64Url(randomValues(new Uint8Array(TRANSFER_ID_BYTES)));
|
|
8
|
+
}
|
|
9
|
+
export function encodeTransferRequest(message) {
|
|
10
|
+
assertSha256(message.assetId, 'Asset ID');
|
|
11
|
+
return encodeJson({ asset_id: message.assetId });
|
|
12
|
+
}
|
|
13
|
+
export function decodeTransferRequest(payload) {
|
|
14
|
+
const value = decodeRecord(payload);
|
|
15
|
+
if (typeof value.asset_id !== 'string') {
|
|
16
|
+
throw new Error('Invalid transfer request payload.');
|
|
17
|
+
}
|
|
18
|
+
assertSha256(value.asset_id, 'Asset ID');
|
|
19
|
+
return { assetId: value.asset_id };
|
|
20
|
+
}
|
|
21
|
+
export function encodeTransferOffer(message) {
|
|
22
|
+
validateTransferOffer(message);
|
|
23
|
+
return encodeJson({
|
|
24
|
+
transfer_id: message.transferId,
|
|
25
|
+
purpose: message.purpose,
|
|
26
|
+
direction: message.direction,
|
|
27
|
+
mime_type: message.mimeType,
|
|
28
|
+
display_name: message.displayName,
|
|
29
|
+
byte_length: message.byteLength.toString(),
|
|
30
|
+
...(message.sha256 === undefined ? {} : { sha256: message.sha256 }),
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
export function decodeTransferOffer(payload) {
|
|
34
|
+
const value = decodeRecord(payload);
|
|
35
|
+
if (typeof value.transfer_id !== 'string' ||
|
|
36
|
+
(value.purpose !== 'terminal-font' && value.purpose !== 'clipboard-image') ||
|
|
37
|
+
(value.direction !== 'agent-to-browser' && value.direction !== 'browser-to-agent') ||
|
|
38
|
+
typeof value.mime_type !== 'string' ||
|
|
39
|
+
typeof value.display_name !== 'string' ||
|
|
40
|
+
typeof value.byte_length !== 'string' ||
|
|
41
|
+
!/^\d+$/.test(value.byte_length) ||
|
|
42
|
+
(value.sha256 !== undefined && typeof value.sha256 !== 'string')) {
|
|
43
|
+
throw new Error('Invalid transfer offer payload.');
|
|
44
|
+
}
|
|
45
|
+
const offer = {
|
|
46
|
+
transferId: value.transfer_id,
|
|
47
|
+
purpose: value.purpose,
|
|
48
|
+
direction: value.direction,
|
|
49
|
+
mimeType: value.mime_type,
|
|
50
|
+
displayName: value.display_name,
|
|
51
|
+
byteLength: BigInt(value.byte_length),
|
|
52
|
+
...(value.sha256 === undefined ? {} : { sha256: value.sha256 }),
|
|
53
|
+
};
|
|
54
|
+
validateTransferOffer(offer);
|
|
55
|
+
return offer;
|
|
56
|
+
}
|
|
57
|
+
export function encodeTransferControl(message) {
|
|
58
|
+
assertTransferId(message.transferId);
|
|
59
|
+
return encodeJson({ transfer_id: message.transferId });
|
|
60
|
+
}
|
|
61
|
+
export function decodeTransferControl(payload) {
|
|
62
|
+
const value = decodeRecord(payload);
|
|
63
|
+
if (typeof value.transfer_id !== 'string') {
|
|
64
|
+
throw new Error('Invalid transfer control payload.');
|
|
65
|
+
}
|
|
66
|
+
assertTransferId(value.transfer_id);
|
|
67
|
+
return { transferId: value.transfer_id };
|
|
68
|
+
}
|
|
69
|
+
export function encodeTransferResult(message) {
|
|
70
|
+
assertTransferId(message.transferId);
|
|
71
|
+
if (message.path !== undefined && (message.path.length === 0 || message.path.length > 4_096)) {
|
|
72
|
+
throw new Error('Invalid transfer result path.');
|
|
73
|
+
}
|
|
74
|
+
if (message.pasteText !== undefined && (message.pasteText.length === 0 || message.pasteText.length > 8_192)) {
|
|
75
|
+
throw new Error('Invalid transfer paste text.');
|
|
76
|
+
}
|
|
77
|
+
return encodeJson({
|
|
78
|
+
transfer_id: message.transferId,
|
|
79
|
+
...(message.path === undefined ? {} : { path: message.path }),
|
|
80
|
+
...(message.pasteText === undefined ? {} : { paste_text: message.pasteText }),
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
export function decodeTransferResult(payload) {
|
|
84
|
+
const value = decodeRecord(payload);
|
|
85
|
+
if (typeof value.transfer_id !== 'string' ||
|
|
86
|
+
(value.path !== undefined && typeof value.path !== 'string') ||
|
|
87
|
+
(value.paste_text !== undefined && typeof value.paste_text !== 'string')) {
|
|
88
|
+
throw new Error('Invalid transfer result payload.');
|
|
89
|
+
}
|
|
90
|
+
return decodeTransferResultValidated({
|
|
91
|
+
transferId: value.transfer_id,
|
|
92
|
+
...(value.path === undefined ? {} : { path: value.path }),
|
|
93
|
+
...(value.paste_text === undefined ? {} : { pasteText: value.paste_text }),
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
export function encodeTransferCancel(message) {
|
|
97
|
+
assertTransferId(message.transferId);
|
|
98
|
+
assertShortText(message.code, 'Transfer cancellation code', 64);
|
|
99
|
+
assertShortText(message.message, 'Transfer cancellation message', 512);
|
|
100
|
+
return encodeJson({
|
|
101
|
+
transfer_id: message.transferId,
|
|
102
|
+
code: message.code,
|
|
103
|
+
message: message.message,
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
export function decodeTransferCancel(payload) {
|
|
107
|
+
const value = decodeRecord(payload);
|
|
108
|
+
if (typeof value.transfer_id !== 'string' ||
|
|
109
|
+
typeof value.code !== 'string' ||
|
|
110
|
+
typeof value.message !== 'string') {
|
|
111
|
+
throw new Error('Invalid transfer cancellation payload.');
|
|
112
|
+
}
|
|
113
|
+
const message = {
|
|
114
|
+
transferId: value.transfer_id,
|
|
115
|
+
code: value.code,
|
|
116
|
+
message: value.message,
|
|
117
|
+
};
|
|
118
|
+
encodeTransferCancel(message);
|
|
119
|
+
return message;
|
|
120
|
+
}
|
|
121
|
+
export function encodeTransferChunk(message) {
|
|
122
|
+
const transferId = decodeTransferId(message.transferId);
|
|
123
|
+
if (message.bytes.byteLength === 0 || message.bytes.byteLength > TRANSFER_CHUNK_BYTES) {
|
|
124
|
+
throw new RangeError('Transfer chunks must contain between 1 and 32768 bytes.');
|
|
125
|
+
}
|
|
126
|
+
const payload = new Uint8Array(TRANSFER_ID_BYTES + message.bytes.byteLength);
|
|
127
|
+
payload.set(transferId);
|
|
128
|
+
payload.set(message.bytes, TRANSFER_ID_BYTES);
|
|
129
|
+
return payload;
|
|
130
|
+
}
|
|
131
|
+
export function decodeTransferChunk(payload) {
|
|
132
|
+
if (payload.byteLength <= TRANSFER_ID_BYTES ||
|
|
133
|
+
payload.byteLength > TRANSFER_ID_BYTES + TRANSFER_CHUNK_BYTES) {
|
|
134
|
+
throw new RangeError('Invalid transfer chunk size.');
|
|
135
|
+
}
|
|
136
|
+
return {
|
|
137
|
+
transferId: encodeBase64Url(payload.subarray(0, TRANSFER_ID_BYTES)),
|
|
138
|
+
bytes: payload.subarray(TRANSFER_ID_BYTES),
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
export class TransferSenderState {
|
|
142
|
+
offer;
|
|
143
|
+
sentOffset = 0n;
|
|
144
|
+
acknowledgedOffset = 0n;
|
|
145
|
+
accepted = false;
|
|
146
|
+
finished = false;
|
|
147
|
+
constructor(offer) {
|
|
148
|
+
this.offer = offer;
|
|
149
|
+
validateTransferOffer(offer);
|
|
150
|
+
}
|
|
151
|
+
accept() {
|
|
152
|
+
if (this.accepted || this.finished) {
|
|
153
|
+
throw new Error('Transfer offer cannot be accepted in its current state.');
|
|
154
|
+
}
|
|
155
|
+
this.accepted = true;
|
|
156
|
+
}
|
|
157
|
+
availableWindow() {
|
|
158
|
+
const remaining = BigInt(TRANSFER_WINDOW_BYTES) - (this.sentOffset - this.acknowledgedOffset);
|
|
159
|
+
return Number(remaining > 0n ? remaining : 0n);
|
|
160
|
+
}
|
|
161
|
+
recordChunk(offset, byteLength) {
|
|
162
|
+
if (!this.accepted || this.finished || offset !== this.sentOffset) {
|
|
163
|
+
throw new Error('Transfer chunk is not valid for the sender state.');
|
|
164
|
+
}
|
|
165
|
+
assertChunkLength(byteLength);
|
|
166
|
+
if (byteLength > this.availableWindow() || offset + BigInt(byteLength) > this.offer.byteLength) {
|
|
167
|
+
throw new RangeError('Transfer chunk exceeds the available transfer window.');
|
|
168
|
+
}
|
|
169
|
+
this.sentOffset += BigInt(byteLength);
|
|
170
|
+
}
|
|
171
|
+
acknowledge(nextOffset) {
|
|
172
|
+
if (!this.accepted ||
|
|
173
|
+
this.finished ||
|
|
174
|
+
nextOffset < this.acknowledgedOffset ||
|
|
175
|
+
nextOffset > this.sentOffset) {
|
|
176
|
+
throw new Error('Transfer acknowledgement is not valid for the sender state.');
|
|
177
|
+
}
|
|
178
|
+
this.acknowledgedOffset = nextOffset;
|
|
179
|
+
}
|
|
180
|
+
complete() {
|
|
181
|
+
if (!this.accepted ||
|
|
182
|
+
this.finished ||
|
|
183
|
+
this.sentOffset !== this.offer.byteLength ||
|
|
184
|
+
this.acknowledgedOffset !== this.offer.byteLength) {
|
|
185
|
+
throw new Error('Transfer cannot complete before all bytes are acknowledged.');
|
|
186
|
+
}
|
|
187
|
+
this.finished = true;
|
|
188
|
+
}
|
|
189
|
+
cancel() {
|
|
190
|
+
this.finished = true;
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
export class TransferReceiverState {
|
|
194
|
+
offer;
|
|
195
|
+
receivedOffset = 0n;
|
|
196
|
+
finished = false;
|
|
197
|
+
constructor(offer) {
|
|
198
|
+
this.offer = offer;
|
|
199
|
+
validateTransferOffer(offer);
|
|
200
|
+
}
|
|
201
|
+
recordChunk(offset, byteLength) {
|
|
202
|
+
if (this.finished || offset !== this.receivedOffset) {
|
|
203
|
+
throw new Error('Transfer chunk is not contiguous for the receiver state.');
|
|
204
|
+
}
|
|
205
|
+
assertChunkLength(byteLength);
|
|
206
|
+
const nextOffset = offset + BigInt(byteLength);
|
|
207
|
+
if (nextOffset > this.offer.byteLength) {
|
|
208
|
+
throw new RangeError('Transfer chunk exceeds the declared byte length.');
|
|
209
|
+
}
|
|
210
|
+
this.receivedOffset = nextOffset;
|
|
211
|
+
return nextOffset;
|
|
212
|
+
}
|
|
213
|
+
complete(offset) {
|
|
214
|
+
if (this.finished || offset !== this.receivedOffset || offset !== this.offer.byteLength) {
|
|
215
|
+
throw new Error('Transfer cannot complete before all declared bytes arrive.');
|
|
216
|
+
}
|
|
217
|
+
this.finished = true;
|
|
218
|
+
}
|
|
219
|
+
cancel() {
|
|
220
|
+
this.finished = true;
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
export function hasTransferTimedOut(lastActivityAt, now = Date.now()) {
|
|
224
|
+
return now - lastActivityAt >= TRANSFER_IDLE_TIMEOUT_MS;
|
|
225
|
+
}
|
|
226
|
+
function validateTransferOffer(message) {
|
|
227
|
+
assertTransferId(message.transferId);
|
|
228
|
+
if (message.byteLength <= 0n || message.byteLength > 0xffffffffffffffffn) {
|
|
229
|
+
throw new RangeError('Transfer byte length must fit in an unsigned 64-bit integer.');
|
|
230
|
+
}
|
|
231
|
+
assertShortText(message.mimeType, 'Transfer MIME type', 255);
|
|
232
|
+
assertShortText(message.displayName, 'Transfer display name', 255);
|
|
233
|
+
if (message.sha256 !== undefined) {
|
|
234
|
+
assertSha256(message.sha256, 'Transfer SHA-256');
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
function decodeTransferResultValidated(message) {
|
|
238
|
+
encodeTransferResult(message);
|
|
239
|
+
return message;
|
|
240
|
+
}
|
|
241
|
+
function assertTransferId(value) {
|
|
242
|
+
decodeTransferId(value);
|
|
243
|
+
}
|
|
244
|
+
function decodeTransferId(value) {
|
|
245
|
+
let bytes;
|
|
246
|
+
try {
|
|
247
|
+
bytes = decodeBase64Url(value);
|
|
248
|
+
}
|
|
249
|
+
catch {
|
|
250
|
+
throw new Error('Transfer ID must contain 16 bytes.');
|
|
251
|
+
}
|
|
252
|
+
if (bytes.byteLength !== TRANSFER_ID_BYTES) {
|
|
253
|
+
throw new Error('Transfer ID must contain 16 bytes.');
|
|
254
|
+
}
|
|
255
|
+
return bytes;
|
|
256
|
+
}
|
|
257
|
+
function assertSha256(value, label) {
|
|
258
|
+
let bytes;
|
|
259
|
+
try {
|
|
260
|
+
bytes = decodeBase64Url(value);
|
|
261
|
+
}
|
|
262
|
+
catch {
|
|
263
|
+
throw new Error(`${label} must contain 32 bytes.`);
|
|
264
|
+
}
|
|
265
|
+
if (bytes.byteLength !== 32) {
|
|
266
|
+
throw new Error(`${label} must contain 32 bytes.`);
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
function assertShortText(value, label, maximumLength) {
|
|
270
|
+
if (value.length === 0 || value.length > maximumLength || /[\u0000-\u001f\u007f]/.test(value)) {
|
|
271
|
+
throw new Error(`${label} is invalid.`);
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
function assertChunkLength(value) {
|
|
275
|
+
if (!Number.isInteger(value) || value < 1 || value > TRANSFER_CHUNK_BYTES) {
|
|
276
|
+
throw new RangeError('Transfer chunk size is invalid.');
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
function encodeJson(value) {
|
|
280
|
+
return new TextEncoder().encode(JSON.stringify(value));
|
|
281
|
+
}
|
|
282
|
+
function decodeRecord(payload) {
|
|
283
|
+
let value;
|
|
284
|
+
try {
|
|
285
|
+
value = JSON.parse(new TextDecoder('utf-8', { fatal: true }).decode(payload));
|
|
286
|
+
}
|
|
287
|
+
catch {
|
|
288
|
+
throw new Error('Invalid JSON transfer payload.');
|
|
289
|
+
}
|
|
290
|
+
if (typeof value !== 'object' || value === null || Array.isArray(value)) {
|
|
291
|
+
throw new Error('Transfer payload must be an object.');
|
|
292
|
+
}
|
|
293
|
+
return value;
|
|
294
|
+
}
|
|
295
|
+
//# sourceMappingURL=transfers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transfers.js","sourceRoot":"","sources":["../src/transfers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAEnE,MAAM,CAAC,MAAM,iBAAiB,GAAG,EAAE,CAAC;AACpC,MAAM,CAAC,MAAM,oBAAoB,GAAG,EAAE,GAAG,KAAK,CAAC;AAC/C,MAAM,CAAC,MAAM,qBAAqB,GAAG,GAAG,GAAG,KAAK,CAAC;AACjD,MAAM,CAAC,MAAM,wBAAwB,GAAG,MAAM,CAAC;AAsC/C,MAAM,UAAU,kBAAkB,CAC9B,eAAmD,CAAC,MAAM,EAAE,EAAE,CAC1D,UAAU,CAAC,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC;IAE7C,OAAO,eAAe,CAAC,YAAY,CAAC,IAAI,UAAU,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;AAC5E,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,OAA+B;IACjE,YAAY,CAAC,OAAO,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IAE1C,OAAO,UAAU,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,OAAmB;IACrD,MAAM,KAAK,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;IAEpC,IAAI,OAAO,KAAK,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACrC,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;IACzD,CAAC;IAED,YAAY,CAAC,KAAK,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IAEzC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,OAA6B;IAC7D,qBAAqB,CAAC,OAAO,CAAC,CAAC;IAE/B,OAAO,UAAU,CAAC;QACd,WAAW,EAAE,OAAO,CAAC,UAAU;QAC/B,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,SAAS,EAAE,OAAO,CAAC,QAAQ;QAC3B,YAAY,EAAE,OAAO,CAAC,WAAW;QACjC,WAAW,EAAE,OAAO,CAAC,UAAU,CAAC,QAAQ,EAAE;QAC1C,GAAG,CAAC,OAAO,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC;KACtE,CAAC,CAAC;AACP,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,OAAmB;IACnD,MAAM,KAAK,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;IAEpC,IACI,OAAO,KAAK,CAAC,WAAW,KAAK,QAAQ;QACrC,CAAC,KAAK,CAAC,OAAO,KAAK,eAAe,IAAI,KAAK,CAAC,OAAO,KAAK,iBAAiB,CAAC;QAC1E,CAAC,KAAK,CAAC,SAAS,KAAK,kBAAkB,IAAI,KAAK,CAAC,SAAS,KAAK,kBAAkB,CAAC;QAClF,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ;QACnC,OAAO,KAAK,CAAC,YAAY,KAAK,QAAQ;QACtC,OAAO,KAAK,CAAC,WAAW,KAAK,QAAQ;QACrC,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC;QAChC,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS,IAAI,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ,CAAC,EAClE,CAAC;QACC,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;IACvD,CAAC;IAED,MAAM,KAAK,GAAyB;QAChC,UAAU,EAAE,KAAK,CAAC,WAAW;QAC7B,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,QAAQ,EAAE,KAAK,CAAC,SAAS;QACzB,WAAW,EAAE,KAAK,CAAC,YAAY;QAC/B,UAAU,EAAE,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC;QACrC,GAAG,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;KAClE,CAAC;IACF,qBAAqB,CAAC,KAAK,CAAC,CAAC;IAE7B,OAAO,KAAK,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,OAA+B;IACjE,gBAAgB,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAErC,OAAO,UAAU,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;AAC3D,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,OAAmB;IACrD,MAAM,KAAK,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;IAEpC,IAAI,OAAO,KAAK,CAAC,WAAW,KAAK,QAAQ,EAAE,CAAC;QACxC,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;IACzD,CAAC;IAED,gBAAgB,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IAEpC,OAAO,EAAE,UAAU,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,OAA8B;IAC/D,gBAAgB,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAErC,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,EAAE,CAAC;QAC3F,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;IACrD,CAAC;IAED,IAAI,OAAO,CAAC,SAAS,KAAK,SAAS,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,CAAC,SAAS,CAAC,MAAM,GAAG,KAAK,CAAC,EAAE,CAAC;QAC1G,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;IACpD,CAAC;IAED,OAAO,UAAU,CAAC;QACd,WAAW,EAAE,OAAO,CAAC,UAAU;QAC/B,GAAG,CAAC,OAAO,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC;QAC7D,GAAG,CAAC,OAAO,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC;KAChF,CAAC,CAAC;AACP,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,OAAmB;IACpD,MAAM,KAAK,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;IAEpC,IACI,OAAO,KAAK,CAAC,WAAW,KAAK,QAAQ;QACrC,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC;QAC5D,CAAC,KAAK,CAAC,UAAU,KAAK,SAAS,IAAI,OAAO,KAAK,CAAC,UAAU,KAAK,QAAQ,CAAC,EAC1E,CAAC;QACC,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;IACxD,CAAC;IAED,OAAO,6BAA6B,CAAC;QACjC,UAAU,EAAE,KAAK,CAAC,WAAW;QAC7B,GAAG,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC;QACzD,GAAG,CAAC,KAAK,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC;KAC7E,CAAC,CAAC;AACP,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,OAA8B;IAC/D,gBAAgB,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IACrC,eAAe,CAAC,OAAO,CAAC,IAAI,EAAE,4BAA4B,EAAE,EAAE,CAAC,CAAC;IAChE,eAAe,CAAC,OAAO,CAAC,OAAO,EAAE,+BAA+B,EAAE,GAAG,CAAC,CAAC;IAEvE,OAAO,UAAU,CAAC;QACd,WAAW,EAAE,OAAO,CAAC,UAAU;QAC/B,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,OAAO,EAAE,OAAO,CAAC,OAAO;KAC3B,CAAC,CAAC;AACP,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,OAAmB;IACpD,MAAM,KAAK,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;IAEpC,IACI,OAAO,KAAK,CAAC,WAAW,KAAK,QAAQ;QACrC,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ;QAC9B,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,EACnC,CAAC;QACC,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;IAC9D,CAAC;IAED,MAAM,OAAO,GAAG;QACZ,UAAU,EAAE,KAAK,CAAC,WAAW;QAC7B,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,OAAO,EAAE,KAAK,CAAC,OAAO;KACzB,CAAC;IACF,oBAAoB,CAAC,OAAO,CAAC,CAAC;IAE9B,OAAO,OAAO,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,OAA6B;IAC7D,MAAM,UAAU,GAAG,gBAAgB,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAExD,IAAI,OAAO,CAAC,KAAK,CAAC,UAAU,KAAK,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC,UAAU,GAAG,oBAAoB,EAAE,CAAC;QACpF,MAAM,IAAI,UAAU,CAAC,yDAAyD,CAAC,CAAC;IACpF,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,UAAU,CAAC,iBAAiB,GAAG,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAC7E,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACxB,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC;IAE9C,OAAO,OAAO,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,OAAmB;IACnD,IACI,OAAO,CAAC,UAAU,IAAI,iBAAiB;QACvC,OAAO,CAAC,UAAU,GAAG,iBAAiB,GAAG,oBAAoB,EAC/D,CAAC;QACC,MAAM,IAAI,UAAU,CAAC,8BAA8B,CAAC,CAAC;IACzD,CAAC;IAED,OAAO;QACH,UAAU,EAAE,eAAe,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAC;QACnE,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAC;KAC7C,CAAC;AACN,CAAC;AAED,MAAM,OAAO,mBAAmB;IAMO;IAL5B,UAAU,GAAG,EAAE,CAAC;IAChB,kBAAkB,GAAG,EAAE,CAAC;IACxB,QAAQ,GAAG,KAAK,CAAC;IACjB,QAAQ,GAAG,KAAK,CAAC;IAExB,YAAmC,KAA2B;QAA3B,UAAK,GAAL,KAAK,CAAsB;QAC1D,qBAAqB,CAAC,KAAK,CAAC,CAAC;IACjC,CAAC;IAEM,MAAM;QACT,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;QAC/E,CAAC;QAED,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;IACzB,CAAC;IAEM,eAAe;QAClB,MAAM,SAAS,GAAG,MAAM,CAAC,qBAAqB,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAE9F,OAAO,MAAM,CAAC,SAAS,GAAG,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACnD,CAAC;IAEM,WAAW,CAAC,MAAc,EAAE,UAAkB;QACjD,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,IAAI,MAAM,KAAK,IAAI,CAAC,UAAU,EAAE,CAAC;YAChE,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;QACzE,CAAC;QAED,iBAAiB,CAAC,UAAU,CAAC,CAAC;QAE9B,IAAI,UAAU,GAAG,IAAI,CAAC,eAAe,EAAE,IAAI,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;YAC7F,MAAM,IAAI,UAAU,CAAC,uDAAuD,CAAC,CAAC;QAClF,CAAC;QAED,IAAI,CAAC,UAAU,IAAI,MAAM,CAAC,UAAU,CAAC,CAAC;IAC1C,CAAC;IAEM,WAAW,CAAC,UAAkB;QACjC,IACI,CAAC,IAAI,CAAC,QAAQ;YACd,IAAI,CAAC,QAAQ;YACb,UAAU,GAAG,IAAI,CAAC,kBAAkB;YACpC,UAAU,GAAG,IAAI,CAAC,UAAU,EAC9B,CAAC;YACC,MAAM,IAAI,KAAK,CAAC,6DAA6D,CAAC,CAAC;QACnF,CAAC;QAED,IAAI,CAAC,kBAAkB,GAAG,UAAU,CAAC;IACzC,CAAC;IAEM,QAAQ;QACX,IACI,CAAC,IAAI,CAAC,QAAQ;YACd,IAAI,CAAC,QAAQ;YACb,IAAI,CAAC,UAAU,KAAK,IAAI,CAAC,KAAK,CAAC,UAAU;YACzC,IAAI,CAAC,kBAAkB,KAAK,IAAI,CAAC,KAAK,CAAC,UAAU,EACnD,CAAC;YACC,MAAM,IAAI,KAAK,CAAC,6DAA6D,CAAC,CAAC;QACnF,CAAC;QAED,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;IACzB,CAAC;IAEM,MAAM;QACT,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;IACzB,CAAC;CACJ;AAED,MAAM,OAAO,qBAAqB;IAIK;IAH5B,cAAc,GAAG,EAAE,CAAC;IACpB,QAAQ,GAAG,KAAK,CAAC;IAExB,YAAmC,KAA2B;QAA3B,UAAK,GAAL,KAAK,CAAsB;QAC1D,qBAAqB,CAAC,KAAK,CAAC,CAAC;IACjC,CAAC;IAEM,WAAW,CAAC,MAAc,EAAE,UAAkB;QACjD,IAAI,IAAI,CAAC,QAAQ,IAAI,MAAM,KAAK,IAAI,CAAC,cAAc,EAAE,CAAC;YAClD,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC;QAChF,CAAC;QAED,iBAAiB,CAAC,UAAU,CAAC,CAAC;QAC9B,MAAM,UAAU,GAAG,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;QAE/C,IAAI,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;YACrC,MAAM,IAAI,UAAU,CAAC,kDAAkD,CAAC,CAAC;QAC7E,CAAC;QAED,IAAI,CAAC,cAAc,GAAG,UAAU,CAAC;QAEjC,OAAO,UAAU,CAAC;IACtB,CAAC;IAEM,QAAQ,CAAC,MAAc;QAC1B,IAAI,IAAI,CAAC,QAAQ,IAAI,MAAM,KAAK,IAAI,CAAC,cAAc,IAAI,MAAM,KAAK,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;YACtF,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAC;QAClF,CAAC;QAED,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;IACzB,CAAC;IAEM,MAAM;QACT,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;IACzB,CAAC;CACJ;AAED,MAAM,UAAU,mBAAmB,CAC/B,cAAsB,EACtB,MAAc,IAAI,CAAC,GAAG,EAAE;IAExB,OAAO,GAAG,GAAG,cAAc,IAAI,wBAAwB,CAAC;AAC5D,CAAC;AAED,SAAS,qBAAqB,CAAC,OAA6B;IACxD,gBAAgB,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAErC,IAAI,OAAO,CAAC,UAAU,IAAI,EAAE,IAAI,OAAO,CAAC,UAAU,GAAG,mBAAsB,EAAE,CAAC;QAC1E,MAAM,IAAI,UAAU,CAAC,8DAA8D,CAAC,CAAC;IACzF,CAAC;IAED,eAAe,CAAC,OAAO,CAAC,QAAQ,EAAE,oBAAoB,EAAE,GAAG,CAAC,CAAC;IAC7D,eAAe,CAAC,OAAO,CAAC,WAAW,EAAE,uBAAuB,EAAE,GAAG,CAAC,CAAC;IAEnE,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAC/B,YAAY,CAAC,OAAO,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IACrD,CAAC;AACL,CAAC;AAED,SAAS,6BAA6B,CAAC,OAA8B;IACjE,oBAAoB,CAAC,OAAO,CAAC,CAAC;IAE9B,OAAO,OAAO,CAAC;AACnB,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAa;IACnC,gBAAgB,CAAC,KAAK,CAAC,CAAC;AAC5B,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAa;IACnC,IAAI,KAAiB,CAAC;IAEtB,IAAI,CAAC;QACD,KAAK,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC;IAAC,MAAM,CAAC;QACL,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;IAC1D,CAAC;IAED,IAAI,KAAK,CAAC,UAAU,KAAK,iBAAiB,EAAE,CAAC;QACzC,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;IAC1D,CAAC;IAED,OAAO,KAAK,CAAC;AACjB,CAAC;AAED,SAAS,YAAY,CAAC,KAAa,EAAE,KAAa;IAC9C,IAAI,KAAiB,CAAC;IAEtB,IAAI,CAAC;QACD,KAAK,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC;IAAC,MAAM,CAAC;QACL,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,yBAAyB,CAAC,CAAC;IACvD,CAAC;IAED,IAAI,KAAK,CAAC,UAAU,KAAK,EAAE,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,yBAAyB,CAAC,CAAC;IACvD,CAAC;AACL,CAAC;AAED,SAAS,eAAe,CAAC,KAAa,EAAE,KAAa,EAAE,aAAqB;IACxE,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,aAAa,IAAI,uBAAuB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5F,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,cAAc,CAAC,CAAC;IAC5C,CAAC;AACL,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAa;IACpC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,oBAAoB,EAAE,CAAC;QACxE,MAAM,IAAI,UAAU,CAAC,iCAAiC,CAAC,CAAC;IAC5D,CAAC;AACL,CAAC;AAED,SAAS,UAAU,CAAC,KAAc;IAC9B,OAAO,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED,SAAS,YAAY,CAAC,OAAmB;IACrC,IAAI,KAAc,CAAC;IAEnB,IAAI,CAAC;QACD,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,WAAW,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;IAClF,CAAC;IAAC,MAAM,CAAC;QACL,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;IACtD,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACtE,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;IAC3D,CAAC;IAED,OAAO,KAAgC,CAAC;AAC5C,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@airterm/protocol",
|
|
3
|
+
"version": "0.2.0",
|
|
4
|
+
"description": "Shared browser and Node.js protocol implementation for AirTerm",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"terminal",
|
|
7
|
+
"e2ee",
|
|
8
|
+
"noise-protocol"
|
|
9
|
+
],
|
|
10
|
+
"license": "MIT",
|
|
11
|
+
"homepage": "https://airterm.app",
|
|
12
|
+
"bugs": {
|
|
13
|
+
"url": "https://github.com/nazmulpcc/airterm-cli/issues"
|
|
14
|
+
},
|
|
15
|
+
"repository": {
|
|
16
|
+
"type": "git",
|
|
17
|
+
"url": "git+https://github.com/nazmulpcc/airterm-cli.git",
|
|
18
|
+
"directory": "packages/protocol"
|
|
19
|
+
},
|
|
20
|
+
"type": "module",
|
|
21
|
+
"sideEffects": false,
|
|
22
|
+
"files": [
|
|
23
|
+
"dist"
|
|
24
|
+
],
|
|
25
|
+
"exports": {
|
|
26
|
+
".": {
|
|
27
|
+
"types": "./dist/index.d.ts",
|
|
28
|
+
"import": "./dist/index.js"
|
|
29
|
+
}
|
|
30
|
+
},
|
|
31
|
+
"scripts": {
|
|
32
|
+
"build": "node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\" && tsc -p tsconfig.json && vite build --config vite.browser.config.ts",
|
|
33
|
+
"test": "vitest run",
|
|
34
|
+
"types:check": "tsc -p tsconfig.json --noEmit",
|
|
35
|
+
"prepack": "npm run build"
|
|
36
|
+
},
|
|
37
|
+
"engines": {
|
|
38
|
+
"node": ">=22.12"
|
|
39
|
+
},
|
|
40
|
+
"dependencies": {
|
|
41
|
+
"noise-handshake": "4.2.0",
|
|
42
|
+
"sodium-javascript": "0.8.0"
|
|
43
|
+
},
|
|
44
|
+
"publishConfig": {
|
|
45
|
+
"access": "public"
|
|
46
|
+
}
|
|
47
|
+
}
|