@thenewlabs/entangle-connect 2.0.0 → 2.0.2

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/dist/index.js CHANGED
File without changes
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@thenewlabs/entangle-connect",
3
- "version": "2.0.0",
3
+ "version": "2.0.2",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "bin": {
@@ -8,13 +8,13 @@
8
8
  },
9
9
  "scripts": {
10
10
  "build": "tsc",
11
- "clean": "rm -rf dist",
11
+ "clean": "rm -rf dist tsconfig.tsbuildinfo",
12
12
  "prepublishOnly": "npm run build"
13
13
  },
14
14
  "dependencies": {
15
- "@thenewlabs/entangle-crypto": "^2.0.0",
16
- "@thenewlabs/entangle-protocol": "^2.0.0",
17
- "@thenewlabs/entangle-utils": "^2.0.0",
15
+ "@thenewlabs/entangle-crypto": "^2.0.2",
16
+ "@thenewlabs/entangle-protocol": "^2.0.2",
17
+ "@thenewlabs/entangle-utils": "^2.0.2",
18
18
  "cborg": "^4.5.8",
19
19
  "commander": "^15.0.0",
20
20
  "ws": "^8.21.0"
package/dist/run.d.ts DELETED
@@ -1,14 +0,0 @@
1
- interface RunOptions {
2
- namespace: string;
3
- capId: string;
4
- S: string;
5
- tool: string;
6
- argv: string[];
7
- cwd: string | undefined;
8
- serverUrl: string;
9
- abortAfterMs: number | undefined;
10
- maxOutBytes: number | undefined;
11
- }
12
- export declare function runCommand(options: RunOptions): Promise<number>;
13
- export {};
14
- //# sourceMappingURL=run.d.ts.map
package/dist/run.d.ts.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../src/run.ts"],"names":[],"mappings":"AAuBA,UAAU,UAAU;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,CAAC,EAAE,MAAM,CAAC;IACV,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;CACjC;AAED,wBAAsB,UAAU,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAmIrE"}
package/dist/run.js DELETED
@@ -1,122 +0,0 @@
1
- import WebSocket from 'ws';
2
- import { FrameType, FrameReader, encodeFrame, } from '@sunpix/entangle-protocol';
3
- import { deriveKeys, extractSaltFromCapId, aeadEncrypt, aeadDecrypt, computeHmac, initCrypto, } from '@sunpix/entangle-crypto';
4
- import { createLogger, BidirectionalCounters, } from '@sunpix/entangle-utils';
5
- import { encode, decode } from 'cborg';
6
- const logger = createLogger('invoke-run');
7
- export async function runCommand(options) {
8
- await initCrypto();
9
- const saltCap = extractSaltFromCapId(options.capId);
10
- const keys = await deriveKeys(options.S, saltCap);
11
- const counters = new BidirectionalCounters();
12
- const wsUrl = options.serverUrl.replace(/^http/, 'ws') +
13
- `/relay/${options.namespace}/${options.capId}`;
14
- logger.info({ url: wsUrl }, 'Connecting to relay');
15
- return new Promise((resolve, reject) => {
16
- const ws = new WebSocket(wsUrl);
17
- const reader = new FrameReader();
18
- let authenticated = false;
19
- let nonceB;
20
- let commandId = Math.random().toString(36).substr(2, 9);
21
- let exitCode = 0;
22
- let abortTimer;
23
- ws.on('open', async () => {
24
- logger.info('Connected, starting auth');
25
- nonceB = require('crypto').randomBytes(16).toString('hex');
26
- const auth1Data = new TextEncoder().encode('hello' + options.capId + nonceB);
27
- const auth1Hmac = computeHmac(keys.K_auth, auth1Data);
28
- ws.send(encodeFrame(FrameType.AUTH1, auth1Hmac));
29
- });
30
- ws.on('message', async (data) => {
31
- if (!(data instanceof Buffer))
32
- return;
33
- const frames = reader.push(data);
34
- for (const frame of frames) {
35
- try {
36
- if (frame.type === FrameType.AUTH2 && !authenticated) {
37
- const auth2Encrypted = decode(frame.payload);
38
- const decrypted = aeadDecrypt(keys.K_enc, FrameType.AUTH2, auth2Encrypted.nonce, auth2Encrypted.cipher);
39
- const auth2 = decrypted.msg;
40
- if (!auth2.ok || auth2.nonceB !== nonceB) {
41
- throw new Error('Invalid AUTH2 response');
42
- }
43
- const auth3Data = new TextEncoder().encode('ready' + auth2.nonceC);
44
- const auth3Hmac = computeHmac(keys.K_auth, auth3Data);
45
- ws.send(encodeFrame(FrameType.AUTH3, auth3Hmac));
46
- authenticated = true;
47
- logger.info('Authenticated, sending RUN');
48
- const runMsg = {
49
- ctr: counters.outgoing.next(),
50
- msg: {
51
- commandId,
52
- tool: options.tool,
53
- argv: options.argv,
54
- cwd: options.cwd,
55
- limits: {
56
- maxOutBytes: options.maxOutBytes,
57
- },
58
- },
59
- };
60
- const runEncrypted = aeadEncrypt(keys.K_enc, FrameType.RUN, runMsg.ctr, runMsg.msg);
61
- ws.send(encodeFrame(FrameType.RUN, encode(runEncrypted)));
62
- if (options.abortAfterMs) {
63
- abortTimer = setTimeout(() => {
64
- logger.info('Sending abort');
65
- const abortMsg = {
66
- ctr: counters.outgoing.next(),
67
- msg: {
68
- commandId,
69
- reason: 'Timeout',
70
- },
71
- };
72
- const abortEncrypted = aeadEncrypt(keys.K_enc, FrameType.ABORT, abortMsg.ctr, abortMsg.msg);
73
- ws.send(encodeFrame(FrameType.ABORT, encode(abortEncrypted)));
74
- }, options.abortAfterMs);
75
- }
76
- }
77
- else if (authenticated) {
78
- const msgEncrypted = decode(frame.payload);
79
- const decrypted = aeadDecrypt(keys.K_enc, frame.type, msgEncrypted.nonce, msgEncrypted.cipher);
80
- counters.incoming.validate(decrypted.ctr);
81
- switch (frame.type) {
82
- case FrameType.STDOUT:
83
- process.stdout.write(Buffer.from(decrypted.msg.chunk));
84
- break;
85
- case FrameType.STDERR:
86
- process.stderr.write(Buffer.from(decrypted.msg.chunk));
87
- break;
88
- case FrameType.EXIT:
89
- if (abortTimer)
90
- clearTimeout(abortTimer);
91
- exitCode = decrypted.msg.code ?? 1;
92
- logger.info({ code: exitCode, signal: decrypted.msg.signal }, 'Command exited');
93
- ws.close();
94
- resolve(exitCode);
95
- break;
96
- case FrameType.ERROR:
97
- logger.error({ error: decrypted.msg }, 'Remote error');
98
- ws.close();
99
- reject(new Error(decrypted.msg.detail || decrypted.msg.code));
100
- break;
101
- }
102
- }
103
- }
104
- catch (error) {
105
- logger.error({ error }, 'Failed to handle frame');
106
- ws.close();
107
- reject(error);
108
- }
109
- }
110
- });
111
- ws.on('error', (error) => {
112
- logger.error({ error }, 'WebSocket error');
113
- reject(error);
114
- });
115
- ws.on('close', () => {
116
- if (abortTimer)
117
- clearTimeout(abortTimer);
118
- resolve(exitCode);
119
- });
120
- });
121
- }
122
- //# sourceMappingURL=run.js.map
package/dist/run.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"run.js","sourceRoot":"","sources":["../src/run.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,IAAI,CAAC;AAC3B,OAAO,EACL,SAAS,EACT,WAAW,EACX,WAAW,GAEZ,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,UAAU,EACV,oBAAoB,EACpB,WAAW,EACX,WAAW,EACX,WAAW,EACX,UAAU,GACX,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,YAAY,EACZ,qBAAqB,GACtB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAEvC,MAAM,MAAM,GAAG,YAAY,CAAC,YAAY,CAAC,CAAC;AAc1C,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,OAAmB;IAClD,MAAM,UAAU,EAAE,CAAC;IAEnB,MAAM,OAAO,GAAG,oBAAoB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACpD,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IAClD,MAAM,QAAQ,GAAG,IAAI,qBAAqB,EAAE,CAAC;IAE7C,MAAM,KAAK,GAAG,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC;QACpD,UAAU,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;IAEjD,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,qBAAqB,CAAC,CAAC;IAEnD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,EAAE,GAAG,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC;QAChC,MAAM,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;QACjC,IAAI,aAAa,GAAG,KAAK,CAAC;QAC1B,IAAI,MAAc,CAAC;QACnB,IAAI,SAAS,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACxD,IAAI,QAAQ,GAAG,CAAC,CAAC;QACjB,IAAI,UAAsC,CAAC;QAE3C,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,KAAK,IAAI,EAAE;YACvB,MAAM,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;YAExC,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YAC3D,MAAM,SAAS,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC;YAC7E,MAAM,SAAS,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;YAEtD,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,EAAE,CAAC,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;YAC9B,IAAI,CAAC,CAAC,IAAI,YAAY,MAAM,CAAC;gBAAE,OAAO;YAEtC,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACjC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;gBAC3B,IAAI,CAAC;oBACH,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,KAAK,IAAI,CAAC,aAAa,EAAE,CAAC;wBACrD,MAAM,cAAc,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAQ,CAAC;wBACpD,MAAM,SAAS,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,CAAC,KAAK,EAAE,cAAc,CAAC,KAAK,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC;wBAExG,MAAM,KAAK,GAAG,SAAS,CAAC,GAAU,CAAC;wBACnC,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;4BACzC,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;wBAC5C,CAAC;wBAED,MAAM,SAAS,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;wBACnE,MAAM,SAAS,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;wBAEtD,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC;wBAEjD,aAAa,GAAG,IAAI,CAAC;wBACrB,MAAM,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;wBAE1C,MAAM,MAAM,GAAe;4BACzB,GAAG,EAAE,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE;4BAC7B,GAAG,EAAE;gCACH,SAAS;gCACT,IAAI,EAAE,OAAO,CAAC,IAAI;gCAClB,IAAI,EAAE,OAAO,CAAC,IAAI;gCAClB,GAAG,EAAE,OAAO,CAAC,GAAG;gCAChB,MAAM,EAAE;oCACN,WAAW,EAAE,OAAO,CAAC,WAAW;iCACjC;6BACF;yBACF,CAAC;wBAEF,MAAM,YAAY,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;wBACpF,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,GAAG,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;wBAE1D,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;4BACzB,UAAU,GAAG,UAAU,CAAC,GAAG,EAAE;gCAC3B,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;gCAC7B,MAAM,QAAQ,GAAG;oCACf,GAAG,EAAE,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE;oCAC7B,GAAG,EAAE;wCACH,SAAS;wCACT,MAAM,EAAE,SAAS;qCAClB;iCACF,CAAC;gCACF,MAAM,cAAc,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC;gCAC5F,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;4BAChE,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;wBAC3B,CAAC;oBACH,CAAC;yBAAM,IAAI,aAAa,EAAE,CAAC;wBACzB,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAQ,CAAC;wBAClD,MAAM,SAAS,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,YAAY,CAAC,KAAK,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC;wBAC/F,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;wBAE1C,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;4BACnB,KAAK,SAAS,CAAC,MAAM;gCACnB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;gCACvD,MAAM;4BAER,KAAK,SAAS,CAAC,MAAM;gCACnB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;gCACvD,MAAM;4BAER,KAAK,SAAS,CAAC,IAAI;gCACjB,IAAI,UAAU;oCAAE,YAAY,CAAC,UAAU,CAAC,CAAC;gCACzC,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC;gCACnC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,gBAAgB,CAAC,CAAC;gCAChF,EAAE,CAAC,KAAK,EAAE,CAAC;gCACX,OAAO,CAAC,QAAQ,CAAC,CAAC;gCAClB,MAAM;4BAER,KAAK,SAAS,CAAC,KAAK;gCAClB,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,CAAC,CAAC;gCACvD,EAAE,CAAC,KAAK,EAAE,CAAC;gCACX,MAAM,CAAC,IAAI,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,IAAI,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;gCAC9D,MAAM;wBACV,CAAC;oBACH,CAAC;gBACH,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,EAAE,wBAAwB,CAAC,CAAC;oBAClD,EAAE,CAAC,KAAK,EAAE,CAAC;oBACX,MAAM,CAAC,KAAK,CAAC,CAAC;gBAChB,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YACvB,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,EAAE,iBAAiB,CAAC,CAAC;YAC3C,MAAM,CAAC,KAAK,CAAC,CAAC;QAChB,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YAClB,IAAI,UAAU;gBAAE,YAAY,CAAC,UAAU,CAAC,CAAC;YACzC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACpB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}