@boxes-dev/dvb 1.0.100 → 1.0.101
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/bin/dvb.cjs +310 -167
- package/dist/bin/dvb.cjs.map +1 -1
- package/dist/bin/dvbd.cjs +5 -5
- package/dist/devbox/commands/connect.d.ts +1 -3
- package/dist/devbox/commands/connect.d.ts.map +1 -1
- package/dist/devbox/commands/connect.js +55 -110
- package/dist/devbox/commands/connect.js.map +1 -1
- package/dist/devbox/commands/connectSessionMapping.d.ts +64 -0
- package/dist/devbox/commands/connectSessionMapping.d.ts.map +1 -0
- package/dist/devbox/commands/connectSessionMapping.js +153 -0
- package/dist/devbox/commands/connectSessionMapping.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
import { readSpriteSessions, writeSpriteSessions, } from "@boxes-dev/core";
|
|
2
|
+
import { ensureUniqueAutoSessionName, getNextAutoSessionName, renameSessionLog, } from "./sessionUtils.js";
|
|
3
|
+
const SESSION_NAME_TOKEN_KEY = "DEVBOX_SESSION_NAME_B64";
|
|
4
|
+
const decodeSessionNameToken = (value) => {
|
|
5
|
+
try {
|
|
6
|
+
const decoded = Buffer.from(value, "base64url").toString("utf8").trim();
|
|
7
|
+
return decoded.length > 0 ? decoded : null;
|
|
8
|
+
}
|
|
9
|
+
catch {
|
|
10
|
+
return null;
|
|
11
|
+
}
|
|
12
|
+
};
|
|
13
|
+
const extractSessionNameFromCommand = (command) => {
|
|
14
|
+
if (!command || command.length < 3)
|
|
15
|
+
return null;
|
|
16
|
+
const script = command.slice(2).join(" ");
|
|
17
|
+
const patterns = [
|
|
18
|
+
new RegExp(`${SESSION_NAME_TOKEN_KEY}='([^']+)'`),
|
|
19
|
+
new RegExp(`${SESSION_NAME_TOKEN_KEY}=\"([^\"]+)\"`),
|
|
20
|
+
];
|
|
21
|
+
for (const pattern of patterns) {
|
|
22
|
+
const match = script.match(pattern);
|
|
23
|
+
if (!match?.[1])
|
|
24
|
+
continue;
|
|
25
|
+
const decoded = decodeSessionNameToken(match[1]);
|
|
26
|
+
if (decoded)
|
|
27
|
+
return decoded;
|
|
28
|
+
}
|
|
29
|
+
return null;
|
|
30
|
+
};
|
|
31
|
+
export const readSessionMapSafe = async ({ client, alias, fallback, onWarn, }) => {
|
|
32
|
+
try {
|
|
33
|
+
return await readSpriteSessions(client, alias);
|
|
34
|
+
}
|
|
35
|
+
catch (error) {
|
|
36
|
+
onWarn("sessions_read_failed", { error: String(error) });
|
|
37
|
+
return fallback;
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
export const initializeSessionMapState = async ({ client, alias, sessionName, autoNameRequested, onWarn, }) => {
|
|
41
|
+
const sessions = sessionName || autoNameRequested
|
|
42
|
+
? await readSessionMapSafe({
|
|
43
|
+
client,
|
|
44
|
+
alias,
|
|
45
|
+
fallback: {},
|
|
46
|
+
onWarn,
|
|
47
|
+
})
|
|
48
|
+
: {};
|
|
49
|
+
const resolvedSessionName = !sessionName && autoNameRequested
|
|
50
|
+
? getNextAutoSessionName(sessions)
|
|
51
|
+
: sessionName;
|
|
52
|
+
const autoNamed = !sessionName && Boolean(autoNameRequested);
|
|
53
|
+
return {
|
|
54
|
+
sessions,
|
|
55
|
+
sessionName: resolvedSessionName,
|
|
56
|
+
autoNamed,
|
|
57
|
+
requireFreshSessionOpen: autoNamed,
|
|
58
|
+
};
|
|
59
|
+
};
|
|
60
|
+
export const refreshSessionMapState = async ({ client, alias, computeProvider, supportsAttachExecSession, supportsListExecSessions, sessionName, sessionId, sessions, requireFreshSessionOpen, explicitName, onWarn, }) => {
|
|
61
|
+
if (!supportsAttachExecSession || !sessionName) {
|
|
62
|
+
return {
|
|
63
|
+
sessions,
|
|
64
|
+
sessionId,
|
|
65
|
+
confirmedCreateExplicit: Boolean(sessionId && explicitName),
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
const latest = await readSessionMapSafe({
|
|
69
|
+
client,
|
|
70
|
+
alias,
|
|
71
|
+
fallback: sessions,
|
|
72
|
+
onWarn,
|
|
73
|
+
});
|
|
74
|
+
if (requireFreshSessionOpen) {
|
|
75
|
+
return {
|
|
76
|
+
sessions: latest,
|
|
77
|
+
sessionId,
|
|
78
|
+
confirmedCreateExplicit: Boolean(sessionId && explicitName),
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
let resolvedSessionId = latest[sessionName];
|
|
82
|
+
if (!resolvedSessionId &&
|
|
83
|
+
computeProvider === "modal" &&
|
|
84
|
+
supportsListExecSessions) {
|
|
85
|
+
const available = await client.listExecSessions(alias);
|
|
86
|
+
const matched = available.find((session) => session.tty !== false &&
|
|
87
|
+
extractSessionNameFromCommand(session.command) === sessionName);
|
|
88
|
+
if (matched) {
|
|
89
|
+
resolvedSessionId = matched.id;
|
|
90
|
+
latest[sessionName] = matched.id;
|
|
91
|
+
await writeSpriteSessions(client, alias, latest);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
if (resolvedSessionId &&
|
|
95
|
+
supportsListExecSessions &&
|
|
96
|
+
computeProvider !== "modal") {
|
|
97
|
+
const available = await client.listExecSessions(alias);
|
|
98
|
+
const match = available.find((session) => session.id === resolvedSessionId);
|
|
99
|
+
if (!match || match.tty === false) {
|
|
100
|
+
delete latest[sessionName];
|
|
101
|
+
resolvedSessionId = undefined;
|
|
102
|
+
await writeSpriteSessions(client, alias, latest);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
return {
|
|
106
|
+
sessions: latest,
|
|
107
|
+
sessionId: resolvedSessionId,
|
|
108
|
+
confirmedCreateExplicit: Boolean(resolvedSessionId && explicitName),
|
|
109
|
+
};
|
|
110
|
+
};
|
|
111
|
+
export const finalizeAutoNamedSession = async ({ client, alias, autoNamed, sessionName, sessionId, sessions, remoteHome, onWarn, }) => {
|
|
112
|
+
if (!autoNamed || !sessionName) {
|
|
113
|
+
return { sessionName, sessions, renamed: false };
|
|
114
|
+
}
|
|
115
|
+
const latest = await readSessionMapSafe({
|
|
116
|
+
client,
|
|
117
|
+
alias,
|
|
118
|
+
fallback: sessions,
|
|
119
|
+
onWarn,
|
|
120
|
+
});
|
|
121
|
+
const uniqueName = ensureUniqueAutoSessionName(latest, sessionName, sessionId);
|
|
122
|
+
const renamed = uniqueName !== sessionName;
|
|
123
|
+
if (renamed) {
|
|
124
|
+
await renameSessionLog(client, alias, sessionName, uniqueName, remoteHome);
|
|
125
|
+
}
|
|
126
|
+
latest[uniqueName] = sessionId;
|
|
127
|
+
await writeSpriteSessions(client, alias, latest);
|
|
128
|
+
return { sessionName: uniqueName, sessions: latest, renamed };
|
|
129
|
+
};
|
|
130
|
+
export const renameMappedSession = async ({ client, alias, fromName, toName, expectedId, remoteHome, sessions, }) => {
|
|
131
|
+
const latest = await readSessionMapSafe({
|
|
132
|
+
client,
|
|
133
|
+
alias,
|
|
134
|
+
fallback: sessions,
|
|
135
|
+
onWarn: () => { },
|
|
136
|
+
});
|
|
137
|
+
const currentId = latest[fromName];
|
|
138
|
+
if (!currentId) {
|
|
139
|
+
throw new Error(`Session "${fromName}" not found.`);
|
|
140
|
+
}
|
|
141
|
+
if (currentId !== expectedId) {
|
|
142
|
+
throw new Error(`Session "${fromName}" no longer matches the active session.`);
|
|
143
|
+
}
|
|
144
|
+
if (latest[toName] && latest[toName] !== expectedId) {
|
|
145
|
+
throw new Error(`Session "${toName}" already exists.`);
|
|
146
|
+
}
|
|
147
|
+
delete latest[fromName];
|
|
148
|
+
latest[toName] = expectedId;
|
|
149
|
+
await writeSpriteSessions(client, alias, latest);
|
|
150
|
+
await renameSessionLog(client, alias, fromName, toName, remoteHome);
|
|
151
|
+
return latest;
|
|
152
|
+
};
|
|
153
|
+
//# sourceMappingURL=connectSessionMapping.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connectSessionMapping.js","sourceRoot":"","sources":["../../../src/devbox/commands/connectSessionMapping.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,mBAAmB,GAEpB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,2BAA2B,EAC3B,sBAAsB,EACtB,gBAAgB,GACjB,MAAM,mBAAmB,CAAC;AAW3B,MAAM,sBAAsB,GAAG,yBAAyB,CAAC;AAEzD,MAAM,sBAAsB,GAAG,CAAC,KAAa,EAAE,EAAE;IAC/C,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;QACxE,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;IAC7C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,6BAA6B,GAAG,CAAC,OAAkB,EAAE,EAAE;IAC3D,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAChD,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC1C,MAAM,QAAQ,GAAG;QACf,IAAI,MAAM,CAAC,GAAG,sBAAsB,YAAY,CAAC;QACjD,IAAI,MAAM,CAAC,GAAG,sBAAsB,eAAe,CAAC;KACrD,CAAC;IACF,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACpC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YAAE,SAAS;QAC1B,MAAM,OAAO,GAAG,sBAAsB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACjD,IAAI,OAAO;YAAE,OAAO,OAAO,CAAC;IAC9B,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,EAAE,EACvC,MAAM,EACN,KAAK,EACL,QAAQ,EACR,MAAM,GAMP,EAAE,EAAE;IACH,IAAI,CAAC;QACH,OAAO,MAAM,kBAAkB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACjD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,sBAAsB,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACzD,OAAO,QAAQ,CAAC;IAClB,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,yBAAyB,GAAG,KAAK,EAAE,EAC9C,MAAM,EACN,KAAK,EACL,WAAW,EACX,iBAAiB,EACjB,MAAM,GAOP,EAAE,EAAE;IACH,MAAM,QAAQ,GACZ,WAAW,IAAI,iBAAiB;QAC9B,CAAC,CAAC,MAAM,kBAAkB,CAAC;YACvB,MAAM;YACN,KAAK;YACL,QAAQ,EAAE,EAAE;YACZ,MAAM;SACP,CAAC;QACJ,CAAC,CAAC,EAAE,CAAC;IACT,MAAM,mBAAmB,GACvB,CAAC,WAAW,IAAI,iBAAiB;QAC/B,CAAC,CAAC,sBAAsB,CAAC,QAAQ,CAAC;QAClC,CAAC,CAAC,WAAW,CAAC;IAClB,MAAM,SAAS,GAAG,CAAC,WAAW,IAAI,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAC7D,OAAO;QACL,QAAQ;QACR,WAAW,EAAE,mBAAmB;QAChC,SAAS;QACT,uBAAuB,EAAE,SAAS;KACnC,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAG,KAAK,EAAE,EAC3C,MAAM,EACN,KAAK,EACL,eAAe,EACf,yBAAyB,EACzB,wBAAwB,EACxB,WAAW,EACX,SAAS,EACT,QAAQ,EACR,uBAAuB,EACvB,YAAY,EACZ,MAAM,GAaP,EAAE,EAAE;IACH,IAAI,CAAC,yBAAyB,IAAI,CAAC,WAAW,EAAE,CAAC;QAC/C,OAAO;YACL,QAAQ;YACR,SAAS;YACT,uBAAuB,EAAE,OAAO,CAAC,SAAS,IAAI,YAAY,CAAC;SAC5D,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC;QACtC,MAAM;QACN,KAAK;QACL,QAAQ,EAAE,QAAQ;QAClB,MAAM;KACP,CAAC,CAAC;IACH,IAAI,uBAAuB,EAAE,CAAC;QAC5B,OAAO;YACL,QAAQ,EAAE,MAAM;YAChB,SAAS;YACT,uBAAuB,EAAE,OAAO,CAAC,SAAS,IAAI,YAAY,CAAC;SAC5D,CAAC;IACJ,CAAC;IAED,IAAI,iBAAiB,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;IAC5C,IACE,CAAC,iBAAiB;QAClB,eAAe,KAAK,OAAO;QAC3B,wBAAwB,EACxB,CAAC;QACD,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;QACvD,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,CAC5B,CAAC,OAAO,EAAE,EAAE,CACV,OAAO,CAAC,GAAG,KAAK,KAAK;YACrB,6BAA6B,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,WAAW,CACjE,CAAC;QACF,IAAI,OAAO,EAAE,CAAC;YACZ,iBAAiB,GAAG,OAAO,CAAC,EAAE,CAAC;YAC/B,MAAM,CAAC,WAAW,CAAC,GAAG,OAAO,CAAC,EAAE,CAAC;YACjC,MAAM,mBAAmB,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QACnD,CAAC;IACH,CAAC;IAED,IACE,iBAAiB;QACjB,wBAAwB;QACxB,eAAe,KAAK,OAAO,EAC3B,CAAC;QACD,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;QACvD,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,KAAK,iBAAiB,CAAC,CAAC;QAC5E,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,GAAG,KAAK,KAAK,EAAE,CAAC;YAClC,OAAO,MAAM,CAAC,WAAW,CAAC,CAAC;YAC3B,iBAAiB,GAAG,SAAS,CAAC;YAC9B,MAAM,mBAAmB,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QACnD,CAAC;IACH,CAAC;IAED,OAAO;QACL,QAAQ,EAAE,MAAM;QAChB,SAAS,EAAE,iBAAiB;QAC5B,uBAAuB,EAAE,OAAO,CAAC,iBAAiB,IAAI,YAAY,CAAC;KACpE,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,wBAAwB,GAAG,KAAK,EAAE,EAC7C,MAAM,EACN,KAAK,EACL,SAAS,EACT,WAAW,EACX,SAAS,EACT,QAAQ,EACR,UAAU,EACV,MAAM,GAUP,EAAE,EAAE;IACH,IAAI,CAAC,SAAS,IAAI,CAAC,WAAW,EAAE,CAAC;QAC/B,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IACnD,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC;QACtC,MAAM;QACN,KAAK;QACL,QAAQ,EAAE,QAAQ;QAClB,MAAM;KACP,CAAC,CAAC;IACH,MAAM,UAAU,GAAG,2BAA2B,CAC5C,MAAM,EACN,WAAW,EACX,SAAS,CACV,CAAC;IACF,MAAM,OAAO,GAAG,UAAU,KAAK,WAAW,CAAC;IAC3C,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,gBAAgB,CAAC,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;IAC7E,CAAC;IACD,MAAM,CAAC,UAAU,CAAC,GAAG,SAAS,CAAC;IAC/B,MAAM,mBAAmB,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;IACjD,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;AAChE,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,EAAE,EACxC,MAAM,EACN,KAAK,EACL,QAAQ,EACR,MAAM,EACN,UAAU,EACV,UAAU,EACV,QAAQ,GAST,EAAE,EAAE;IACH,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC;QACtC,MAAM;QACN,KAAK;QACL,QAAQ,EAAE,QAAQ;QAClB,MAAM,EAAE,GAAG,EAAE,GAAE,CAAC;KACjB,CAAC,CAAC;IACH,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;IACnC,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,YAAY,QAAQ,cAAc,CAAC,CAAC;IACtD,CAAC;IACD,IAAI,SAAS,KAAK,UAAU,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CACb,YAAY,QAAQ,yCAAyC,CAC9D,CAAC;IACJ,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,UAAU,EAAE,CAAC;QACpD,MAAM,IAAI,KAAK,CAAC,YAAY,MAAM,mBAAmB,CAAC,CAAC;IACzD,CAAC;IACD,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC;IACxB,MAAM,CAAC,MAAM,CAAC,GAAG,UAAU,CAAC;IAC5B,MAAM,mBAAmB,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;IACjD,MAAM,gBAAgB,CAAC,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;IACpE,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC"}
|