@sandbank.dev/boxlite 0.1.0 → 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/dist/adapter.d.ts.map +1 -1
- package/dist/adapter.js +6 -4
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +15 -16
- package/package.json +10 -18
package/dist/adapter.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,UAAU,EACV,YAAY,EAGZ,UAAU,EACV,cAAc,EACd,WAAW,EAIZ,MAAM,oBAAoB,CAAA;AAG3B,OAAO,KAAK,EAAE,oBAAoB,EAAc,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,UAAU,EACV,YAAY,EAGZ,UAAU,EACV,cAAc,EACd,WAAW,EAIZ,MAAM,oBAAoB,CAAA;AAG3B,OAAO,KAAK,EAAE,oBAAoB,EAAc,MAAM,YAAY,CAAA;AAwKlE,qBAAa,cAAe,YAAW,cAAc;IACnD,QAAQ,CAAC,IAAI,aAAY;IACzB,QAAQ,CAAC,YAAY,EAAE,WAAW,CAAC,UAAU,CAAC,CAM5C;IAEF,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAe;IACtC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAsB;IAC7C,oEAAoE;IACpE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAyC;gBAEtD,MAAM,EAAE,oBAAoB;IAKlC,aAAa,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,cAAc,CAAC;IA0C5D,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAW/C,aAAa,CAAC,MAAM,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IA0B1D,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAShD"}
|
package/dist/adapter.js
CHANGED
|
@@ -102,16 +102,18 @@ function wrapBox(box, client, config, portMappings) {
|
|
|
102
102
|
async startTerminal(options) {
|
|
103
103
|
const port = 7681;
|
|
104
104
|
const shell = options?.shell ?? '/bin/bash';
|
|
105
|
-
const
|
|
105
|
+
const ttydBase = 'https://github.com/tsl0922/ttyd/releases/download/1.7.7/ttyd';
|
|
106
106
|
// 1. Ensure ttyd is available
|
|
107
107
|
const check = await client.exec(box.box_id, { command: 'which', args: ['ttyd'] });
|
|
108
108
|
if (check.exitCode !== 0) {
|
|
109
109
|
await client.exec(box.box_id, {
|
|
110
110
|
command: 'bash',
|
|
111
111
|
args: ['-c',
|
|
112
|
-
`
|
|
113
|
-
+ `
|
|
114
|
-
+ `
|
|
112
|
+
`ARCH=$(uname -m); case "$ARCH" in aarch64|arm64) ARCH=aarch64;; x86_64) ARCH=x86_64;; *) echo "Unsupported arch: $ARCH" >&2; exit 1;; esac; `
|
|
113
|
+
+ `TTYD_URL="${ttydBase}.$ARCH"; `
|
|
114
|
+
+ `command -v curl > /dev/null && curl -sL "$TTYD_URL" -o /usr/local/bin/ttyd`
|
|
115
|
+
+ ` || { command -v wget > /dev/null && wget -qO /usr/local/bin/ttyd "$TTYD_URL"; }`
|
|
116
|
+
+ ` || { apt-get update -qq && apt-get install -y -qq wget > /dev/null && wget -qO /usr/local/bin/ttyd "$TTYD_URL"; }`,
|
|
115
117
|
],
|
|
116
118
|
});
|
|
117
119
|
await client.exec(box.box_id, {
|
package/dist/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,oBAAoB,EACpB,UAAU,EACV,mBAAmB,EACnB,kBAAkB,EAElB,eAAe,EAEhB,MAAM,YAAY,CAAA;AAEnB,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,oBAAoB;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,oBAAoB,EACpB,UAAU,EACV,mBAAmB,EACnB,kBAAkB,EAElB,eAAe,EAEhB,MAAM,YAAY,CAAA;AAEnB,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,oBAAoB;sBA0HpC,mBAAmB,GAAG,OAAO,CAAC,UAAU,CAAC;kBAO7C,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;uBAIvB,MAAM,aAAa,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;qBASnD,MAAM,oBAAkB,OAAO,CAAC,IAAI,CAAC;oBAMtC,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;mBAIvB,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;gBAOlC,MAAM,OACR,kBAAkB,GACtB,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;sBAwBvD,MAAM,OACR,kBAAkB,GACtB,OAAO,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;uBAuEb,MAAM,QAAQ,MAAM,WAAW,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;yBAkBvD,MAAM,QAAQ,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;0BAwBzD,MAAM,QAAQ,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;2BAO9C,MAAM,QAAQ,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;yBAMtC,MAAM,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;0BAIlC,MAAM,QAAQ,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;EAMnE;AAED,MAAM,MAAM,aAAa,GAAG,UAAU,CAAC,OAAO,mBAAmB,CAAC,CAAA"}
|
package/dist/client.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export function createBoxLiteClient(config) {
|
|
2
2
|
const { apiUrl } = config;
|
|
3
|
-
const prefix = config.prefix ?? '
|
|
3
|
+
const prefix = config.prefix ?? '';
|
|
4
4
|
const baseUrl = apiUrl.replace(/\/$/, '') + '/v1';
|
|
5
5
|
// --- Token management ---
|
|
6
6
|
let token = config.apiToken ?? '';
|
|
@@ -9,13 +9,12 @@ export function createBoxLiteClient(config) {
|
|
|
9
9
|
// If a static token was provided, always use it
|
|
10
10
|
if (config.apiToken)
|
|
11
11
|
return config.apiToken;
|
|
12
|
+
// No auth configured — run without authentication
|
|
13
|
+
if (!config.clientId || !config.clientSecret)
|
|
14
|
+
return '';
|
|
12
15
|
// If we have a valid cached token, use it
|
|
13
16
|
if (token && Date.now() < tokenExpiresAt)
|
|
14
17
|
return token;
|
|
15
|
-
// Acquire token via OAuth2 client credentials
|
|
16
|
-
if (!config.clientId || !config.clientSecret) {
|
|
17
|
-
throw new Error('BoxLite: either apiToken or clientId+clientSecret must be provided');
|
|
18
|
-
}
|
|
19
18
|
const response = await fetch(`${baseUrl}/oauth/tokens`, {
|
|
20
19
|
method: 'POST',
|
|
21
20
|
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
|
|
@@ -37,15 +36,15 @@ export function createBoxLiteClient(config) {
|
|
|
37
36
|
}
|
|
38
37
|
async function request(path, options = {}, rawResponse = false) {
|
|
39
38
|
const bearerToken = await ensureToken();
|
|
40
|
-
const url = `${baseUrl}/${prefix}${path}`;
|
|
41
|
-
const
|
|
42
|
-
|
|
43
|
-
headers
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
});
|
|
39
|
+
const url = prefix ? `${baseUrl}/${prefix}${path}` : `${baseUrl}${path}`;
|
|
40
|
+
const headers = {
|
|
41
|
+
'Content-Type': 'application/json',
|
|
42
|
+
...options.headers,
|
|
43
|
+
};
|
|
44
|
+
if (bearerToken) {
|
|
45
|
+
headers['Authorization'] = `Bearer ${bearerToken}`;
|
|
46
|
+
}
|
|
47
|
+
const response = await fetch(url, { ...options, headers });
|
|
49
48
|
if (rawResponse)
|
|
50
49
|
return response;
|
|
51
50
|
if (!response.ok) {
|
|
@@ -215,7 +214,7 @@ export function createBoxLiteClient(config) {
|
|
|
215
214
|
// --- Files (native tar API) ---
|
|
216
215
|
async uploadFiles(boxId, path, tarData) {
|
|
217
216
|
const bearerToken = await ensureToken();
|
|
218
|
-
const url = `${baseUrl}
|
|
217
|
+
const url = `${baseUrl}${prefix ? `/${prefix}` : ''}/boxes/${boxId}/files?path=${encodeURIComponent(path)}`;
|
|
219
218
|
const response = await fetch(url, {
|
|
220
219
|
method: 'PUT',
|
|
221
220
|
headers: {
|
|
@@ -231,7 +230,7 @@ export function createBoxLiteClient(config) {
|
|
|
231
230
|
},
|
|
232
231
|
async downloadFiles(boxId, path) {
|
|
233
232
|
const bearerToken = await ensureToken();
|
|
234
|
-
const url = `${baseUrl}
|
|
233
|
+
const url = `${baseUrl}${prefix ? `/${prefix}` : ''}/boxes/${boxId}/files?path=${encodeURIComponent(path)}`;
|
|
235
234
|
const response = await fetch(url, {
|
|
236
235
|
headers: {
|
|
237
236
|
'Authorization': `Bearer ${bearerToken}`,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sandbank.dev/boxlite",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "BoxLite bare-metal sandbox adapter for Sandbank",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -10,31 +10,23 @@
|
|
|
10
10
|
"url": "https://github.com/chekusu/sandbank.git",
|
|
11
11
|
"directory": "packages/boxlite"
|
|
12
12
|
},
|
|
13
|
-
"keywords": [
|
|
14
|
-
"sandbox",
|
|
15
|
-
"ai-agent",
|
|
16
|
-
"boxlite",
|
|
17
|
-
"bare-metal",
|
|
18
|
-
"kvm"
|
|
19
|
-
],
|
|
13
|
+
"keywords": ["sandbox", "ai-agent", "boxlite", "bare-metal", "kvm"],
|
|
20
14
|
"exports": {
|
|
21
15
|
".": {
|
|
22
16
|
"types": "./dist/index.d.ts",
|
|
23
17
|
"import": "./dist/index.js"
|
|
24
18
|
}
|
|
25
19
|
},
|
|
26
|
-
"files": [
|
|
27
|
-
"dist"
|
|
28
|
-
],
|
|
29
|
-
"dependencies": {
|
|
30
|
-
"@sandbank.dev/core": "0.1.0"
|
|
31
|
-
},
|
|
32
|
-
"devDependencies": {
|
|
33
|
-
"typescript": "^5.7.3"
|
|
34
|
-
},
|
|
20
|
+
"files": ["dist"],
|
|
35
21
|
"scripts": {
|
|
36
22
|
"build": "tsc",
|
|
37
23
|
"typecheck": "tsc --noEmit",
|
|
38
24
|
"clean": "rm -rf dist"
|
|
25
|
+
},
|
|
26
|
+
"dependencies": {
|
|
27
|
+
"@sandbank.dev/core": "^0.2.0"
|
|
28
|
+
},
|
|
29
|
+
"devDependencies": {
|
|
30
|
+
"typescript": "^5.7.3"
|
|
39
31
|
}
|
|
40
|
-
}
|
|
32
|
+
}
|