borgmcp 2.0.10 → 2.1.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/README.md +11 -3
- package/SECURITY.md +1 -1
- package/dist/assimilate-cmd.d.ts +13 -4
- package/dist/assimilate-cmd.d.ts.map +1 -1
- package/dist/assimilate-cmd.js +134 -110
- package/dist/assimilate-cmd.js.map +1 -1
- package/dist/assimilate-deps.d.ts +7 -1
- package/dist/assimilate-deps.d.ts.map +1 -1
- package/dist/assimilate-deps.js +44 -18
- package/dist/assimilate-deps.js.map +1 -1
- package/dist/claude.d.ts +3 -1
- package/dist/claude.d.ts.map +1 -1
- package/dist/claude.js +26 -12
- package/dist/claude.js.map +1 -1
- package/dist/cli-help.d.ts +2 -0
- package/dist/cli-help.d.ts.map +1 -1
- package/dist/cli-help.js +22 -5
- package/dist/cli-help.js.map +1 -1
- package/dist/config.d.ts +7 -4
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +21 -4
- package/dist/config.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -8
- package/dist/index.js.map +1 -1
- package/dist/local-manage-tool-result.d.ts +10 -0
- package/dist/local-manage-tool-result.d.ts.map +1 -1
- package/dist/local-manage-tool-result.js +36 -0
- package/dist/local-manage-tool-result.js.map +1 -1
- package/dist/remote-client.d.ts +8 -5
- package/dist/remote-client.d.ts.map +1 -1
- package/dist/remote-client.js +54 -11
- package/dist/remote-client.js.map +1 -1
- package/dist/repository-cube-init.d.ts +57 -0
- package/dist/repository-cube-init.d.ts.map +1 -0
- package/dist/repository-cube-init.js +196 -0
- package/dist/repository-cube-init.js.map +1 -0
- package/dist/repository-identity.d.ts +29 -0
- package/dist/repository-identity.d.ts.map +1 -0
- package/dist/repository-identity.js +143 -0
- package/dist/repository-identity.js.map +1 -0
- package/dist/server-errors.d.ts +6 -0
- package/dist/server-errors.d.ts.map +1 -1
- package/dist/server-errors.js +12 -0
- package/dist/server-errors.js.map +1 -1
- package/dist/server-facade.d.ts +11 -1
- package/dist/server-facade.d.ts.map +1 -1
- package/dist/server-facade.js +33 -3
- package/dist/server-facade.js.map +1 -1
- package/dist/server-handshake.d.ts +8 -4
- package/dist/server-handshake.d.ts.map +1 -1
- package/dist/server-handshake.js +15 -6
- package/dist/server-handshake.js.map +1 -1
- package/dist/tool-manifest.js +2 -2
- package/dist/tool-manifest.js.map +1 -1
- package/docs/EXTRACTION_PROVENANCE.md +8 -8
- package/docs/LOCAL_SERVER.md +35 -6
- package/docs/RELEASING.md +25 -14
- package/package.json +2 -2
- package/src/assimilate-cmd.ts +166 -140
- package/src/assimilate-deps.ts +59 -17
- package/src/claude.ts +34 -14
- package/src/cli-help.ts +25 -5
- package/src/config.ts +30 -8
- package/src/index.ts +9 -8
- package/src/local-manage-tool-result.ts +47 -0
- package/src/remote-client.ts +64 -19
- package/src/repository-cube-init.ts +273 -0
- package/src/repository-identity.ts +199 -0
- package/src/server-errors.ts +14 -0
- package/src/server-facade.ts +47 -2
- package/src/server-handshake.ts +33 -7
- package/src/tool-manifest.ts +2 -2
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
import { NEW_CUBE_TEMPLATE_PRESENTATIONS, LEGACY_DEFAULT_TEMPLATE_LABEL, } from 'borgmcp-shared/templates';
|
|
2
|
+
import { shellEscape } from './shell-escape.js';
|
|
3
|
+
export class RepositoryAssociationSaveError extends Error {
|
|
4
|
+
constructor() {
|
|
5
|
+
super('repository association could not be saved');
|
|
6
|
+
this.name = 'RepositoryAssociationSaveError';
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
export class PromptInterruptedError extends Error {
|
|
10
|
+
constructor() {
|
|
11
|
+
super('prompt interrupted');
|
|
12
|
+
this.name = 'PromptInterruptedError';
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
const NAME_ERROR = 'Use 1-120 letters, digits, spaces, dots, underscores, or hyphens, starting with a letter or digit.';
|
|
16
|
+
export function validRepositoryCubeName(value) {
|
|
17
|
+
return Buffer.byteLength(value, 'utf8') <= 120 && /^[A-Za-z0-9][A-Za-z0-9 ._-]*$/.test(value);
|
|
18
|
+
}
|
|
19
|
+
function presentation(template) {
|
|
20
|
+
if (template === 'default') {
|
|
21
|
+
return { name: template, label: LEGACY_DEFAULT_TEMPLATE_LABEL };
|
|
22
|
+
}
|
|
23
|
+
return NEW_CUBE_TEMPLATE_PRESENTATIONS.find((candidate) => candidate.name === template);
|
|
24
|
+
}
|
|
25
|
+
async function ask(deps, message) {
|
|
26
|
+
try {
|
|
27
|
+
return { value: await deps.prompt(message) };
|
|
28
|
+
}
|
|
29
|
+
catch (error) {
|
|
30
|
+
if (error instanceof PromptInterruptedError) {
|
|
31
|
+
deps.write('\nCube creation cancelled. Nothing was changed.\n');
|
|
32
|
+
return { stop: 130 };
|
|
33
|
+
}
|
|
34
|
+
deps.write('Input ended before cube creation. Nothing was changed.\n');
|
|
35
|
+
return { stop: 1 };
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
function renderResult(deps, input) {
|
|
39
|
+
const lines = [
|
|
40
|
+
input.existing ? 'Cube already initialized.' : 'Cube created.',
|
|
41
|
+
` Name: ${input.response.name}`,
|
|
42
|
+
` Template: ${presentation(input.response.template).label}`,
|
|
43
|
+
` Repository: ${input.root}`,
|
|
44
|
+
` Server: ${input.serverOrigin}`,
|
|
45
|
+
];
|
|
46
|
+
if (input.creationOptionsUnused) {
|
|
47
|
+
lines.push('Creation options were not used because this repository is already initialized.');
|
|
48
|
+
}
|
|
49
|
+
if (input.mode === 'cube-init') {
|
|
50
|
+
lines.push('No drone was created.', `Next: borg assimilate --host ${shellEscape(input.serverOrigin)}`);
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
lines.push('Continuing with role and seat setup...');
|
|
54
|
+
}
|
|
55
|
+
deps.write(`${lines.join('\n')}\n`);
|
|
56
|
+
}
|
|
57
|
+
export async function initializeRepositoryCube(input, deps) {
|
|
58
|
+
const repository = await deps.getIdentity(input.context);
|
|
59
|
+
const association = await deps.getAssociation(repository);
|
|
60
|
+
const creationOptionsUnused = association !== null && (input.flags.cubeName !== undefined || input.flags.template !== undefined || input.flags.yes === true);
|
|
61
|
+
if (association) {
|
|
62
|
+
const cube = await deps.getCube(association.cubeId);
|
|
63
|
+
const authoritativeAssociation = { ...association, name: cube.name };
|
|
64
|
+
if (cube.name !== association.name) {
|
|
65
|
+
try {
|
|
66
|
+
await deps.saveAssociation(repository, authoritativeAssociation);
|
|
67
|
+
}
|
|
68
|
+
catch {
|
|
69
|
+
throw new RepositoryAssociationSaveError();
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
const response = {
|
|
73
|
+
result: 'resolved',
|
|
74
|
+
cube_id: association.cubeId,
|
|
75
|
+
name: cube.name,
|
|
76
|
+
working_repo_name: association.workingRepoName,
|
|
77
|
+
repository,
|
|
78
|
+
template: association.template,
|
|
79
|
+
human_seat_role_id: cube.roles.find((role) => role.is_human_seat)?.id ?? '',
|
|
80
|
+
default_worker_role_id: cube.roles.find((role) => role.is_default)?.id ?? '',
|
|
81
|
+
access: 'manage',
|
|
82
|
+
};
|
|
83
|
+
renderResult(deps, {
|
|
84
|
+
existing: true,
|
|
85
|
+
response,
|
|
86
|
+
root: input.context.root,
|
|
87
|
+
serverOrigin: input.serverOrigin,
|
|
88
|
+
mode: input.mode,
|
|
89
|
+
creationOptionsUnused,
|
|
90
|
+
});
|
|
91
|
+
return { kind: 'success', creation: { response, cube }, existing: true };
|
|
92
|
+
}
|
|
93
|
+
if (input.flags.noTemplate) {
|
|
94
|
+
deps.write('--no-template is not supported for repository cube creation. Use --template software-dev or --template starter.\n');
|
|
95
|
+
return { kind: 'stop', code: 1 };
|
|
96
|
+
}
|
|
97
|
+
if (input.flags.template !== undefined && input.flags.template !== 'software-dev' && input.flags.template !== 'starter') {
|
|
98
|
+
const safe = input.flags.template.replace(/[\u0000-\u001f\u007f]/g, '?').slice(0, 120);
|
|
99
|
+
deps.write(`Unknown template '${safe}'. Use software-dev or starter.\n`);
|
|
100
|
+
return { kind: 'stop', code: 1 };
|
|
101
|
+
}
|
|
102
|
+
if (!deps.isTTY() && !input.flags.yes && (!input.flags.cubeName || !input.flags.template)) {
|
|
103
|
+
deps.write('Non-interactive cube creation requires --cube-name <name> and --template software-dev|starter, or --yes to use repository defaults.\n');
|
|
104
|
+
return { kind: 'stop', code: 1 };
|
|
105
|
+
}
|
|
106
|
+
deps.write(`Create a cube for this repository\n` +
|
|
107
|
+
`Repository: ${input.context.root}\n` +
|
|
108
|
+
`Server: ${input.serverOrigin}\n`);
|
|
109
|
+
let name = input.flags.cubeName?.trim() ?? input.context.derivedName;
|
|
110
|
+
if (!input.flags.cubeName && deps.isTTY() && !input.flags.yes) {
|
|
111
|
+
while (true) {
|
|
112
|
+
const answer = await ask(deps, `Cube name [${input.context.derivedName}]: `);
|
|
113
|
+
if ('stop' in answer)
|
|
114
|
+
return { kind: 'stop', code: answer.stop };
|
|
115
|
+
name = answer.value.trim() || input.context.derivedName;
|
|
116
|
+
if (validRepositoryCubeName(name))
|
|
117
|
+
break;
|
|
118
|
+
deps.write(`${NAME_ERROR}\n`);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
if (!validRepositoryCubeName(name)) {
|
|
122
|
+
deps.write(`${NAME_ERROR}\n`);
|
|
123
|
+
return { kind: 'stop', code: 1 };
|
|
124
|
+
}
|
|
125
|
+
let template = input.flags.template;
|
|
126
|
+
if (!template && deps.isTTY() && !input.flags.yes) {
|
|
127
|
+
let menu = 'Choose a template:\n';
|
|
128
|
+
for (let i = 0; i < NEW_CUBE_TEMPLATE_PRESENTATIONS.length; i += 1) {
|
|
129
|
+
const p = NEW_CUBE_TEMPLATE_PRESENTATIONS[i];
|
|
130
|
+
const suffix = i === 0 ? ' (recommended)' : '';
|
|
131
|
+
menu += ` ${i + 1}. ${p.label}${suffix}\n`;
|
|
132
|
+
menu += ` ${p.short_description}\n`;
|
|
133
|
+
}
|
|
134
|
+
deps.write(menu);
|
|
135
|
+
while (!template) {
|
|
136
|
+
const answer = await ask(deps, 'Template [1]: ');
|
|
137
|
+
if ('stop' in answer)
|
|
138
|
+
return { kind: 'stop', code: answer.stop };
|
|
139
|
+
const selected = answer.value.trim();
|
|
140
|
+
if (selected === '' || selected === '1')
|
|
141
|
+
template = 'software-dev';
|
|
142
|
+
else if (selected === '2')
|
|
143
|
+
template = 'starter';
|
|
144
|
+
else
|
|
145
|
+
deps.write('Choose 1 or 2.\n');
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
template ??= 'software-dev';
|
|
149
|
+
if (deps.isTTY() && !input.flags.yes) {
|
|
150
|
+
deps.write(`Create this cube?\n` +
|
|
151
|
+
` Name: ${name}\n` +
|
|
152
|
+
` Template: ${presentation(template).label}\n` +
|
|
153
|
+
` Repository: ${input.context.root}\n` +
|
|
154
|
+
` Server: ${input.serverOrigin}\n`);
|
|
155
|
+
let confirmed = false;
|
|
156
|
+
while (!confirmed) {
|
|
157
|
+
const answer = await ask(deps, 'Create cube? [Y/n]: ');
|
|
158
|
+
if ('stop' in answer)
|
|
159
|
+
return { kind: 'stop', code: answer.stop };
|
|
160
|
+
const confirmation = answer.value.trim().toLowerCase();
|
|
161
|
+
if (confirmation === '' || confirmation === 'y' || confirmation === 'yes') {
|
|
162
|
+
confirmed = true;
|
|
163
|
+
break;
|
|
164
|
+
}
|
|
165
|
+
if (confirmation === 'n' || confirmation === 'no') {
|
|
166
|
+
deps.write('Cube creation cancelled. Nothing was changed.\n');
|
|
167
|
+
return { kind: 'stop', code: 0 };
|
|
168
|
+
}
|
|
169
|
+
deps.write('Enter y or n.\n');
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
deps.write('Creating cube...\n');
|
|
173
|
+
const workingRepoName = input.context.derivedName;
|
|
174
|
+
const creation = await deps.createCube({ name, workingRepoName, repository, template });
|
|
175
|
+
try {
|
|
176
|
+
await deps.saveAssociation(repository, {
|
|
177
|
+
cubeId: creation.response.cube_id,
|
|
178
|
+
name: creation.response.name,
|
|
179
|
+
workingRepoName: creation.response.working_repo_name,
|
|
180
|
+
template: creation.response.template,
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
catch {
|
|
184
|
+
throw new RepositoryAssociationSaveError();
|
|
185
|
+
}
|
|
186
|
+
renderResult(deps, {
|
|
187
|
+
existing: creation.response.result === 'resolved',
|
|
188
|
+
response: creation.response,
|
|
189
|
+
root: input.context.root,
|
|
190
|
+
serverOrigin: input.serverOrigin,
|
|
191
|
+
mode: input.mode,
|
|
192
|
+
creationOptionsUnused: false,
|
|
193
|
+
});
|
|
194
|
+
return { kind: 'success', creation, existing: creation.response.result === 'resolved' };
|
|
195
|
+
}
|
|
196
|
+
//# sourceMappingURL=repository-cube-init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repository-cube-init.js","sourceRoot":"","sources":["../src/repository-cube-init.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,+BAA+B,EAC/B,6BAA6B,GAC9B,MAAM,0BAA0B,CAAC;AAMlC,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AA6ChD,MAAM,OAAO,8BAA+B,SAAQ,KAAK;IACvD;QACE,KAAK,CAAC,2CAA2C,CAAC,CAAC;QACnD,IAAI,CAAC,IAAI,GAAG,gCAAgC,CAAC;IAC/C,CAAC;CACF;AAED,MAAM,OAAO,sBAAuB,SAAQ,KAAK;IAC/C;QACE,KAAK,CAAC,oBAAoB,CAAC,CAAC;QAC5B,IAAI,CAAC,IAAI,GAAG,wBAAwB,CAAC;IACvC,CAAC;CACF;AAED,MAAM,UAAU,GAAG,oGAAoG,CAAC;AAExH,MAAM,UAAU,uBAAuB,CAAC,KAAa;IACnD,OAAO,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,GAAG,IAAI,+BAA+B,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAChG,CAAC;AAED,SAAS,YAAY,CAAC,QAAsB;IAC1C,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,6BAA6B,EAAE,CAAC;IAClE,CAAC;IACD,OAAO,+BAA+B,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,KAAK,QAAQ,CAAE,CAAC;AAC3F,CAAC;AAED,KAAK,UAAU,GAAG,CAAC,IAA4B,EAAE,OAAe;IAC9D,IAAI,CAAC;QACH,OAAO,EAAE,KAAK,EAAE,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;IAC/C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,sBAAsB,EAAE,CAAC;YAC5C,IAAI,CAAC,KAAK,CAAC,mDAAmD,CAAC,CAAC;YAChE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;QACvB,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,0DAA0D,CAAC,CAAC;QACvE,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;IACrB,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CACnB,IAA4B,EAC5B,KAOC;IAED,MAAM,KAAK,GAAG;QACZ,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,2BAA2B,CAAC,CAAC,CAAC,eAAe;QAC9D,WAAW,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE;QAChC,eAAe,YAAY,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE;QAC5D,iBAAiB,KAAK,CAAC,IAAI,EAAE;QAC7B,aAAa,KAAK,CAAC,YAAY,EAAE;KAClC,CAAC;IACF,IAAI,KAAK,CAAC,qBAAqB,EAAE,CAAC;QAChC,KAAK,CAAC,IAAI,CAAC,gFAAgF,CAAC,CAAC;IAC/F,CAAC;IACD,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;QAC/B,KAAK,CAAC,IAAI,CACR,uBAAuB,EACvB,gCAAgC,WAAW,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,CAClE,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;IACvD,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACtC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAAC,KAK9C,EAAE,IAA4B;IAC7B,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACzD,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;IAC1D,MAAM,qBAAqB,GAAG,WAAW,KAAK,IAAI,IAAI,CACpD,KAAK,CAAC,KAAK,CAAC,QAAQ,KAAK,SAAS,IAAI,KAAK,CAAC,KAAK,CAAC,QAAQ,KAAK,SAAS,IAAI,KAAK,CAAC,KAAK,CAAC,GAAG,KAAK,IAAI,CACrG,CAAC;IACF,IAAI,WAAW,EAAE,CAAC;QAChB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QACpD,MAAM,wBAAwB,GAAG,EAAE,GAAG,WAAW,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;QACrE,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,CAAC,IAAI,EAAE,CAAC;YACnC,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,wBAAwB,CAAC,CAAC;YACnE,CAAC;YAAC,MAAM,CAAC;gBACP,MAAM,IAAI,8BAA8B,EAAE,CAAC;YAC7C,CAAC;QACH,CAAC;QACD,MAAM,QAAQ,GAAuB;YACnC,MAAM,EAAE,UAAU;YAClB,OAAO,EAAE,WAAW,CAAC,MAAM;YAC3B,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,iBAAiB,EAAE,WAAW,CAAC,eAAe;YAC9C,UAAU;YACV,QAAQ,EAAE,WAAW,CAAC,QAAQ;YAC9B,kBAAkB,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,IAAI,EAAE;YAC3E,sBAAsB,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,IAAI,EAAE;YAC5E,MAAM,EAAE,QAAQ;SACjB,CAAC;QACF,YAAY,CAAC,IAAI,EAAE;YACjB,QAAQ,EAAE,IAAI;YACd,QAAQ;YACR,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI;YACxB,YAAY,EAAE,KAAK,CAAC,YAAY;YAChC,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,qBAAqB;SACtB,CAAC,CAAC;QACH,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAC3E,CAAC;IAED,IAAI,KAAK,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;QAC3B,IAAI,CAAC,KAAK,CAAC,mHAAmH,CAAC,CAAC;QAChI,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;IACnC,CAAC;IACD,IAAI,KAAK,CAAC,KAAK,CAAC,QAAQ,KAAK,SAAS,IAAI,KAAK,CAAC,KAAK,CAAC,QAAQ,KAAK,cAAc,IAAI,KAAK,CAAC,KAAK,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QACxH,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,wBAAwB,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QACvF,IAAI,CAAC,KAAK,CAAC,qBAAqB,IAAI,mCAAmC,CAAC,CAAC;QACzE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;IACnC,CAAC;IACD,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1F,IAAI,CAAC,KAAK,CAAC,uIAAuI,CAAC,CAAC;QACpJ,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;IACnC,CAAC;IAED,IAAI,CAAC,KAAK,CACR,qCAAqC;QACrC,eAAe,KAAK,CAAC,OAAO,CAAC,IAAI,IAAI;QACrC,WAAW,KAAK,CAAC,YAAY,IAAI,CAClC,CAAC;IAEF,IAAI,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC;IACrE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,IAAI,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QAC9D,OAAO,IAAI,EAAE,CAAC;YACZ,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,cAAc,KAAK,CAAC,OAAO,CAAC,WAAW,KAAK,CAAC,CAAC;YAC7E,IAAI,MAAM,IAAI,MAAM;gBAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;YACjE,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC;YACxD,IAAI,uBAAuB,CAAC,IAAI,CAAC;gBAAE,MAAM;YACzC,IAAI,CAAC,KAAK,CAAC,GAAG,UAAU,IAAI,CAAC,CAAC;QAChC,CAAC;IACH,CAAC;IACD,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,EAAE,CAAC;QACnC,IAAI,CAAC,KAAK,CAAC,GAAG,UAAU,IAAI,CAAC,CAAC;QAC9B,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;IACnC,CAAC;IAED,IAAI,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,QAAkD,CAAC;IAC9E,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QAClD,IAAI,IAAI,GAAG,sBAAsB,CAAC;QAClC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,+BAA+B,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YACnE,MAAM,CAAC,GAAG,+BAA+B,CAAC,CAAC,CAAC,CAAC;YAC7C,MAAM,MAAM,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/C,IAAI,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,MAAM,IAAI,CAAC;YAC5C,IAAI,IAAI,QAAQ,CAAC,CAAC,iBAAiB,IAAI,CAAC;QAC1C,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACjB,OAAO,CAAC,QAAQ,EAAE,CAAC;YACjB,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC;YACjD,IAAI,MAAM,IAAI,MAAM;gBAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;YACjE,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;YACrC,IAAI,QAAQ,KAAK,EAAE,IAAI,QAAQ,KAAK,GAAG;gBAAE,QAAQ,GAAG,cAAc,CAAC;iBAC9D,IAAI,QAAQ,KAAK,GAAG;gBAAE,QAAQ,GAAG,SAAS,CAAC;;gBAC3C,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;IACD,QAAQ,KAAK,cAAc,CAAC;IAE5B,IAAI,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QACrC,IAAI,CAAC,KAAK,CACR,qBAAqB;YACrB,WAAW,IAAI,IAAI;YACnB,eAAe,YAAY,CAAC,QAAQ,CAAC,CAAC,KAAK,IAAI;YAC/C,iBAAiB,KAAK,CAAC,OAAO,CAAC,IAAI,IAAI;YACvC,aAAa,KAAK,CAAC,YAAY,IAAI,CACpC,CAAC;QACF,IAAI,SAAS,GAAG,KAAK,CAAC;QACtB,OAAO,CAAC,SAAS,EAAE,CAAC;YAClB,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,sBAAsB,CAAC,CAAC;YACvD,IAAI,MAAM,IAAI,MAAM;gBAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;YACjE,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;YACvD,IAAI,YAAY,KAAK,EAAE,IAAI,YAAY,KAAK,GAAG,IAAI,YAAY,KAAK,KAAK,EAAE,CAAC;gBAC1E,SAAS,GAAG,IAAI,CAAC;gBACjB,MAAM;YACR,CAAC;YACD,IAAI,YAAY,KAAK,GAAG,IAAI,YAAY,KAAK,IAAI,EAAE,CAAC;gBAClD,IAAI,CAAC,KAAK,CAAC,iDAAiD,CAAC,CAAC;gBAC9D,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;YACnC,CAAC;YACD,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;QAChC,CAAC;IACH,CAAC;IAED,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;IACjC,MAAM,eAAe,GAAG,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC;IAClD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,CAAC;IACxF,IAAI,CAAC;QACH,MAAM,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE;YACrC,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,OAAO;YACjC,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAC,IAAI;YAC5B,eAAe,EAAE,QAAQ,CAAC,QAAQ,CAAC,iBAAiB;YACpD,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,QAAQ;SACrC,CAAC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,8BAA8B,EAAE,CAAC;IAC7C,CAAC;IACD,YAAY,CAAC,IAAI,EAAE;QACjB,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,MAAM,KAAK,UAAU;QACjD,QAAQ,EAAE,QAAQ,CAAC,QAAQ;QAC3B,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI;QACxB,YAAY,EAAE,KAAK,CAAC,YAAY;QAChC,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,qBAAqB,EAAE,KAAK;KAC7B,CAAC,CAAC;IACH,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;AAC1F,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { CreateCubeRepository, CubeTemplate } from 'borgmcp-shared/protocol';
|
|
2
|
+
export interface GitRepositoryContext {
|
|
3
|
+
root: string;
|
|
4
|
+
commonDir: string;
|
|
5
|
+
derivedName: string;
|
|
6
|
+
publicRepository: Extract<CreateCubeRepository, {
|
|
7
|
+
kind: 'origin';
|
|
8
|
+
}> | null;
|
|
9
|
+
publicRepositoryName: string | null;
|
|
10
|
+
}
|
|
11
|
+
export interface RepositoryAssociation {
|
|
12
|
+
cubeId: string;
|
|
13
|
+
name: string;
|
|
14
|
+
workingRepoName: string;
|
|
15
|
+
template: CubeTemplate;
|
|
16
|
+
}
|
|
17
|
+
export interface RepositoryIdentityDeps {
|
|
18
|
+
runGit?: (cwd: string, args: string[]) => {
|
|
19
|
+
status: number | null;
|
|
20
|
+
stdout?: string | null;
|
|
21
|
+
};
|
|
22
|
+
canonicalPath?: (path: string) => Promise<string>;
|
|
23
|
+
root?: string;
|
|
24
|
+
}
|
|
25
|
+
export declare function resolveGitRepositoryContext(cwd: string, deps?: RepositoryIdentityDeps): Promise<GitRepositoryContext | null>;
|
|
26
|
+
export declare function getOrCreateRepositoryIdentity(context: GitRepositoryContext, deps?: RepositoryIdentityDeps): Promise<CreateCubeRepository>;
|
|
27
|
+
export declare function getRepositoryAssociation(trustIdentity: string, repository: CreateCubeRepository, deps?: RepositoryIdentityDeps): Promise<RepositoryAssociation | null>;
|
|
28
|
+
export declare function saveRepositoryAssociation(trustIdentity: string, repository: CreateCubeRepository, association: RepositoryAssociation, deps?: RepositoryIdentityDeps): Promise<void>;
|
|
29
|
+
//# sourceMappingURL=repository-identity.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repository-identity.d.ts","sourceRoot":"","sources":["../src/repository-identity.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAalF,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,OAAO,CAAC,oBAAoB,EAAE;QAAE,IAAI,EAAE,QAAQ,CAAA;KAAE,CAAC,GAAG,IAAI,CAAC;IAC3E,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAC;CACrC;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE,YAAY,CAAC;CACxB;AAQD,MAAM,WAAW,sBAAsB;IACrC,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK;QAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;IAC5F,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAClD,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAYD,wBAAsB,2BAA2B,CAC/C,GAAG,EAAE,MAAM,EACX,IAAI,GAAE,sBAA2B,GAChC,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC,CAyBtC;AA0ED,wBAAsB,6BAA6B,CACjD,OAAO,EAAE,oBAAoB,EAC7B,IAAI,GAAE,sBAA2B,GAChC,OAAO,CAAC,oBAAoB,CAAC,CAa/B;AAMD,wBAAsB,wBAAwB,CAC5C,aAAa,EAAE,MAAM,EACrB,UAAU,EAAE,oBAAoB,EAChC,IAAI,GAAE,sBAA2B,GAChC,OAAO,CAAC,qBAAqB,GAAG,IAAI,CAAC,CAIvC;AAED,wBAAsB,yBAAyB,CAC7C,aAAa,EAAE,MAAM,EACrB,UAAU,EAAE,oBAAoB,EAChC,WAAW,EAAE,qBAAqB,EAClC,IAAI,GAAE,sBAA2B,GAChC,OAAO,CAAC,IAAI,CAAC,CAKf"}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
import { createHmac, randomBytes, randomUUID } from 'node:crypto';
|
|
2
|
+
import { spawnSync } from 'node:child_process';
|
|
3
|
+
import { basename, isAbsolute, join } from 'node:path';
|
|
4
|
+
import { realpath } from 'node:fs/promises';
|
|
5
|
+
import { canonicalizeWorkingRepoIdentity } from './working-repo.js';
|
|
6
|
+
import { normalizeCubeName } from './cube-name.js';
|
|
7
|
+
import { borgConfigRoot, ensurePrivateBorgConfigRoot } from './private-root.js';
|
|
8
|
+
import { atomicWrite0600, readStoreFile, withStoreLock } from './seat-store.js';
|
|
9
|
+
const STORE_VERSION = 1;
|
|
10
|
+
const SECRET_FILE = 'repository-identity.key';
|
|
11
|
+
const STATE_FILE = 'repository-identities.json';
|
|
12
|
+
const LOCK_FILE = 'repository-identities.lock';
|
|
13
|
+
const UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
|
|
14
|
+
const DISPLAY_NAME_RE = /^[A-Za-z0-9][A-Za-z0-9 ._-]*$/;
|
|
15
|
+
function defaultRunGit(cwd, args) {
|
|
16
|
+
const result = spawnSync('git', args, { cwd, encoding: 'utf8' });
|
|
17
|
+
return { status: result.status, stdout: result.stdout };
|
|
18
|
+
}
|
|
19
|
+
function output(result) {
|
|
20
|
+
const value = result.status === 0 ? result.stdout?.trim() : null;
|
|
21
|
+
return value || null;
|
|
22
|
+
}
|
|
23
|
+
export async function resolveGitRepositoryContext(cwd, deps = {}) {
|
|
24
|
+
const runGit = deps.runGit ?? defaultRunGit;
|
|
25
|
+
const canonicalPath = deps.canonicalPath ?? realpath;
|
|
26
|
+
const rootRaw = output(runGit(cwd, ['rev-parse', '--show-toplevel']));
|
|
27
|
+
if (!rootRaw || !isAbsolute(rootRaw))
|
|
28
|
+
return null;
|
|
29
|
+
const bare = output(runGit(cwd, ['rev-parse', '--is-bare-repository']));
|
|
30
|
+
if (bare === 'true')
|
|
31
|
+
throw new Error('BARE_REPOSITORY');
|
|
32
|
+
const commonRaw = output(runGit(cwd, ['rev-parse', '--path-format=absolute', '--git-common-dir']));
|
|
33
|
+
if (!commonRaw || !isAbsolute(commonRaw))
|
|
34
|
+
return null;
|
|
35
|
+
const root = await canonicalPath(rootRaw);
|
|
36
|
+
const commonDir = await canonicalPath(commonRaw);
|
|
37
|
+
const derivedName = normalizeCubeName(basename(root));
|
|
38
|
+
if (!derivedName)
|
|
39
|
+
return null;
|
|
40
|
+
const originRaw = output(runGit(root, ['config', '--get', 'remote.origin.url']));
|
|
41
|
+
const canonical = originRaw ? canonicalizeWorkingRepoIdentity(originRaw) : null;
|
|
42
|
+
return {
|
|
43
|
+
root,
|
|
44
|
+
commonDir,
|
|
45
|
+
derivedName,
|
|
46
|
+
publicRepository: canonical?.origin
|
|
47
|
+
? { kind: 'origin', value: canonical.origin }
|
|
48
|
+
: null,
|
|
49
|
+
publicRepositoryName: canonical?.name ?? null,
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
function parseSecret(raw) {
|
|
53
|
+
if (raw === null)
|
|
54
|
+
return null;
|
|
55
|
+
if (!/^[a-f0-9]{64}$/.test(raw.trim())) {
|
|
56
|
+
throw new Error('Borg repository identity secret is malformed');
|
|
57
|
+
}
|
|
58
|
+
return Buffer.from(raw.trim(), 'hex');
|
|
59
|
+
}
|
|
60
|
+
function emptyState() {
|
|
61
|
+
return { version: STORE_VERSION, localIdentities: {}, associations: {} };
|
|
62
|
+
}
|
|
63
|
+
function parseState(raw) {
|
|
64
|
+
if (raw === null)
|
|
65
|
+
return emptyState();
|
|
66
|
+
const parsed = JSON.parse(raw);
|
|
67
|
+
if (parsed.version !== STORE_VERSION ||
|
|
68
|
+
!parsed.localIdentities || typeof parsed.localIdentities !== 'object' || Array.isArray(parsed.localIdentities) ||
|
|
69
|
+
!parsed.associations || typeof parsed.associations !== 'object' || Array.isArray(parsed.associations)) {
|
|
70
|
+
throw new Error('Borg repository identity store is malformed or unsupported');
|
|
71
|
+
}
|
|
72
|
+
for (const [key, value] of Object.entries(parsed.localIdentities)) {
|
|
73
|
+
if (!/^[a-f0-9]{64}$/.test(key) || typeof value !== 'string' || !UUID_RE.test(value)) {
|
|
74
|
+
throw new Error('Borg repository identity store is malformed or unsupported');
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
for (const [key, value] of Object.entries(parsed.associations)) {
|
|
78
|
+
if (!/^[a-f0-9]{64}$/.test(key) ||
|
|
79
|
+
!value || typeof value !== 'object' || Array.isArray(value) ||
|
|
80
|
+
typeof value.cubeId !== 'string' || !UUID_RE.test(value.cubeId) ||
|
|
81
|
+
typeof value.name !== 'string' || Buffer.byteLength(value.name, 'utf8') > 120 ||
|
|
82
|
+
!DISPLAY_NAME_RE.test(value.name) ||
|
|
83
|
+
typeof value.workingRepoName !== 'string' || Buffer.byteLength(value.workingRepoName, 'utf8') > 120 ||
|
|
84
|
+
!DISPLAY_NAME_RE.test(value.workingRepoName) ||
|
|
85
|
+
(value.template !== 'software-dev' && value.template !== 'starter' && value.template !== 'default')) {
|
|
86
|
+
throw new Error('Borg repository identity store is malformed or unsupported');
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
return parsed;
|
|
90
|
+
}
|
|
91
|
+
function digest(secret, purpose, value) {
|
|
92
|
+
return createHmac('sha256', secret).update(purpose).update('\0').update(value).digest('hex');
|
|
93
|
+
}
|
|
94
|
+
async function withIdentityState(operation, deps = {}) {
|
|
95
|
+
const root = deps.root ?? borgConfigRoot();
|
|
96
|
+
await ensurePrivateBorgConfigRoot(root);
|
|
97
|
+
const options = { secureRoot: root, rootMode: 'private' };
|
|
98
|
+
return withStoreLock(join(root, LOCK_FILE), async () => {
|
|
99
|
+
const secretPath = join(root, SECRET_FILE);
|
|
100
|
+
let secret = parseSecret(await readStoreFile(secretPath, options));
|
|
101
|
+
if (!secret) {
|
|
102
|
+
secret = randomBytes(32);
|
|
103
|
+
await atomicWrite0600(secretPath, `${secret.toString('hex')}\n`, options);
|
|
104
|
+
}
|
|
105
|
+
const statePath = join(root, STATE_FILE);
|
|
106
|
+
const state = parseState(await readStoreFile(statePath, options));
|
|
107
|
+
const outcome = await operation(secret, state);
|
|
108
|
+
if (outcome.changed) {
|
|
109
|
+
await atomicWrite0600(statePath, `${JSON.stringify(state, null, 2)}\n`, options);
|
|
110
|
+
}
|
|
111
|
+
return outcome.result;
|
|
112
|
+
}, options);
|
|
113
|
+
}
|
|
114
|
+
export async function getOrCreateRepositoryIdentity(context, deps = {}) {
|
|
115
|
+
if (context.publicRepository)
|
|
116
|
+
return context.publicRepository;
|
|
117
|
+
return withIdentityState(async (secret, state) => {
|
|
118
|
+
const key = digest(secret, 'git-common-dir', context.commonDir);
|
|
119
|
+
let value = state.localIdentities[key];
|
|
120
|
+
let changed = false;
|
|
121
|
+
if (!value) {
|
|
122
|
+
value = randomUUID();
|
|
123
|
+
state.localIdentities[key] = value;
|
|
124
|
+
changed = true;
|
|
125
|
+
}
|
|
126
|
+
return { result: { kind: 'local', value }, changed };
|
|
127
|
+
}, deps);
|
|
128
|
+
}
|
|
129
|
+
function associationBinding(secret, trustIdentity, repository) {
|
|
130
|
+
return digest(secret, 'association', `${trustIdentity}\0${repository.kind}\0${repository.value}`);
|
|
131
|
+
}
|
|
132
|
+
export async function getRepositoryAssociation(trustIdentity, repository, deps = {}) {
|
|
133
|
+
return withIdentityState(async (secret, state) => ({
|
|
134
|
+
result: state.associations[associationBinding(secret, trustIdentity, repository)] ?? null,
|
|
135
|
+
}), deps);
|
|
136
|
+
}
|
|
137
|
+
export async function saveRepositoryAssociation(trustIdentity, repository, association, deps = {}) {
|
|
138
|
+
await withIdentityState(async (secret, state) => {
|
|
139
|
+
state.associations[associationBinding(secret, trustIdentity, repository)] = association;
|
|
140
|
+
return { result: undefined, changed: true };
|
|
141
|
+
}, deps);
|
|
142
|
+
}
|
|
143
|
+
//# sourceMappingURL=repository-identity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repository-identity.js","sourceRoot":"","sources":["../src/repository-identity.ts"],"names":[],"mappings":"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"}
|
package/dist/server-errors.d.ts
CHANGED
|
@@ -46,6 +46,12 @@ export declare class BorgServerUnreachableError extends Error {
|
|
|
46
46
|
cause?: unknown;
|
|
47
47
|
});
|
|
48
48
|
}
|
|
49
|
+
export declare class CubeCreationOutcomeUnknownError extends Error {
|
|
50
|
+
constructor();
|
|
51
|
+
}
|
|
52
|
+
export declare class CubeCreationConfirmationError extends Error {
|
|
53
|
+
constructor(message?: string);
|
|
54
|
+
}
|
|
49
55
|
/** Exact retired TTL-replacement state: two saved bearers and no safe implicit winner. */
|
|
50
56
|
export declare class LegacySessionCredentialCollisionError extends Error {
|
|
51
57
|
readonly origin: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server-errors.d.ts","sourceRoot":"","sources":["../src/server-errors.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,mBAAmB,GAC3B,cAAc,GACd,qBAAqB,GACrB,qBAAqB,GACrB,oBAAoB,GACpB,iBAAiB,GACjB,kBAAkB,GAClB,iBAAiB,CAAC;AAEtB,6EAA6E;AAC7E,qBAAa,eAAgB,SAAQ,KAAK;aAEtB,IAAI,EAAE,mBAAmB;gBAAzB,IAAI,EAAE,mBAAmB,EACzC,OAAO,EAAE,MAAM;CAKlB;AAED;;;;;GAKG;AACH,qBAAa,mBAAoB,SAAQ,KAAK;aAE1B,MAAM,EAAE,MAAM;aAEd,IAAI,CAAC,EAAE,SAAS;gBAFhB,MAAM,EAAE,MAAM,EAC9B,OAAO,EAAE,MAAM,EACC,IAAI,CAAC,EAAE,SAAS,YAAA;CAKnC;AAED,qBAAa,wBAAyB,SAAQ,KAAK;aAE/B,SAAS,EAAE,MAAM;aACjB,QAAQ,EAAE,MAAM;aAChB,UAAU,EAAE,MAAM;gBAFlB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM;CAWrC;AAED,qBAAa,qCAAsC,SAAQ,KAAK;aAE5C,SAAS,EAAE,MAAM;aACjB,QAAQ,EAAE,MAAM;aAChB,UAAU,EAAE,MAAM;gBAFlB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM;CASrC;AAED;;;;;GAKG;AACH,qBAAa,oBAAqB,SAAQ,KAAK;gBACjC,OAAO,EAAE,MAAM;CAI5B;AAED;;;;GAIG;AACH,qBAAa,0BAA2B,SAAQ,KAAK;gBACvC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE;CAI3D;AAED,0FAA0F;AAC1F,qBAAa,qCAAsC,SAAQ,KAAK;aAClC,MAAM,EAAE,MAAM;gBAAd,MAAM,EAAE,MAAM;CAI3C;AACD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC"}
|
|
1
|
+
{"version":3,"file":"server-errors.d.ts","sourceRoot":"","sources":["../src/server-errors.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,mBAAmB,GAC3B,cAAc,GACd,qBAAqB,GACrB,qBAAqB,GACrB,oBAAoB,GACpB,iBAAiB,GACjB,kBAAkB,GAClB,iBAAiB,CAAC;AAEtB,6EAA6E;AAC7E,qBAAa,eAAgB,SAAQ,KAAK;aAEtB,IAAI,EAAE,mBAAmB;gBAAzB,IAAI,EAAE,mBAAmB,EACzC,OAAO,EAAE,MAAM;CAKlB;AAED;;;;;GAKG;AACH,qBAAa,mBAAoB,SAAQ,KAAK;aAE1B,MAAM,EAAE,MAAM;aAEd,IAAI,CAAC,EAAE,SAAS;gBAFhB,MAAM,EAAE,MAAM,EAC9B,OAAO,EAAE,MAAM,EACC,IAAI,CAAC,EAAE,SAAS,YAAA;CAKnC;AAED,qBAAa,wBAAyB,SAAQ,KAAK;aAE/B,SAAS,EAAE,MAAM;aACjB,QAAQ,EAAE,MAAM;aAChB,UAAU,EAAE,MAAM;gBAFlB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM;CAWrC;AAED,qBAAa,qCAAsC,SAAQ,KAAK;aAE5C,SAAS,EAAE,MAAM;aACjB,QAAQ,EAAE,MAAM;aAChB,UAAU,EAAE,MAAM;gBAFlB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM;CASrC;AAED;;;;;GAKG;AACH,qBAAa,oBAAqB,SAAQ,KAAK;gBACjC,OAAO,EAAE,MAAM;CAI5B;AAED;;;;GAIG;AACH,qBAAa,0BAA2B,SAAQ,KAAK;gBACvC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE;CAI3D;AAED,qBAAa,+BAAgC,SAAQ,KAAK;;CAKzD;AAED,qBAAa,6BAA8B,SAAQ,KAAK;gBAC1C,OAAO,SAAgE;CAIpF;AAED,0FAA0F;AAC1F,qBAAa,qCAAsC,SAAQ,KAAK;aAClC,MAAM,EAAE,MAAM;gBAAd,MAAM,EAAE,MAAM;CAI3C;AACD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC"}
|
package/dist/server-errors.js
CHANGED
|
@@ -76,6 +76,18 @@ export class BorgServerUnreachableError extends Error {
|
|
|
76
76
|
this.name = 'BorgServerUnreachableError';
|
|
77
77
|
}
|
|
78
78
|
}
|
|
79
|
+
export class CubeCreationOutcomeUnknownError extends Error {
|
|
80
|
+
constructor() {
|
|
81
|
+
super('Cube creation outcome is unknown.');
|
|
82
|
+
this.name = 'CubeCreationOutcomeUnknownError';
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
export class CubeCreationConfirmationError extends Error {
|
|
86
|
+
constructor(message = 'The Borg server returned conflicting repository cube state.') {
|
|
87
|
+
super(message);
|
|
88
|
+
this.name = 'CubeCreationConfirmationError';
|
|
89
|
+
}
|
|
90
|
+
}
|
|
79
91
|
/** Exact retired TTL-replacement state: two saved bearers and no safe implicit winner. */
|
|
80
92
|
export class LegacySessionCredentialCollisionError extends Error {
|
|
81
93
|
origin;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server-errors.js","sourceRoot":"","sources":["../src/server-errors.ts"],"names":[],"mappings":"AASA,6EAA6E;AAC7E,MAAM,OAAO,eAAgB,SAAQ,KAAK;IAEtB;IADlB,YACkB,IAAyB,EACzC,OAAe;QAEf,KAAK,CAAC,OAAO,CAAC,CAAC;QAHC,SAAI,GAAJ,IAAI,CAAqB;QAIzC,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;IAChC,CAAC;CACF;AAED;;;;;GAKG;AACH,MAAM,OAAO,mBAAoB,SAAQ,KAAK;IAE1B;IAEA;IAHlB,YACkB,MAAc,EAC9B,OAAe,EACC,IAAgB;QAEhC,KAAK,CAAC,OAAO,CAAC,CAAC;QAJC,WAAM,GAAN,MAAM,CAAQ;QAEd,SAAI,GAAJ,IAAI,CAAY;QAGhC,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;IACpC,CAAC;CACF;AAED,MAAM,OAAO,wBAAyB,SAAQ,KAAK;IAE/B;IACA;IACA;IAHlB,YACkB,SAAiB,EACjB,QAAgB,EAChB,UAAkB;QAElC,KAAK,CACH,+CAA+C,SAAS,WAAW;YACnE,qEAAqE;YACrE,kFAAkF;YAClF,GAAG,UAAU,mDAAmD;YAChE,8EAA8E,CAC/E,CAAC;QAVc,cAAS,GAAT,SAAS,CAAQ;QACjB,aAAQ,GAAR,QAAQ,CAAQ;QAChB,eAAU,GAAV,UAAU,CAAQ;QASlC,IAAI,CAAC,IAAI,GAAG,0BAA0B,CAAC;IACzC,CAAC;CACF;AAED,MAAM,OAAO,qCAAsC,SAAQ,KAAK;IAE5C;IACA;IACA;IAHlB,YACkB,SAAiB,EACjB,QAAgB,EAChB,UAAkB;QAElC,KAAK,CACH,kDAAkD,QAAQ,8BAA8B;YACxF,uBAAuB,SAAS,KAAK,UAAU,2CAA2C;YAC1F,yBAAyB,CAC1B,CAAC;QARc,cAAS,GAAT,SAAS,CAAQ;QACjB,aAAQ,GAAR,QAAQ,CAAQ;QAChB,eAAU,GAAV,UAAU,CAAQ;QAOlC,IAAI,CAAC,IAAI,GAAG,uCAAuC,CAAC;IACtD,CAAC;CACF;AAED;;;;;GAKG;AACH,MAAM,OAAO,oBAAqB,SAAQ,KAAK;IAC7C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;IACrC,CAAC;CACF;AAED;;;;GAIG;AACH,MAAM,OAAO,0BAA2B,SAAQ,KAAK;IACnD,YAAY,OAAe,EAAE,OAA6B;QACxD,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACxB,IAAI,CAAC,IAAI,GAAG,4BAA4B,CAAC;IAC3C,CAAC;CACF;AAED,0FAA0F;AAC1F,MAAM,OAAO,qCAAsC,SAAQ,KAAK;IAClC;IAA5B,YAA4B,MAAc;QACxC,KAAK,CAAC,6CAA6C,CAAC,CAAC;QAD3B,WAAM,GAAN,MAAM,CAAQ;QAExC,IAAI,CAAC,IAAI,GAAG,uCAAuC,CAAC;IACtD,CAAC;CACF"}
|
|
1
|
+
{"version":3,"file":"server-errors.js","sourceRoot":"","sources":["../src/server-errors.ts"],"names":[],"mappings":"AASA,6EAA6E;AAC7E,MAAM,OAAO,eAAgB,SAAQ,KAAK;IAEtB;IADlB,YACkB,IAAyB,EACzC,OAAe;QAEf,KAAK,CAAC,OAAO,CAAC,CAAC;QAHC,SAAI,GAAJ,IAAI,CAAqB;QAIzC,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;IAChC,CAAC;CACF;AAED;;;;;GAKG;AACH,MAAM,OAAO,mBAAoB,SAAQ,KAAK;IAE1B;IAEA;IAHlB,YACkB,MAAc,EAC9B,OAAe,EACC,IAAgB;QAEhC,KAAK,CAAC,OAAO,CAAC,CAAC;QAJC,WAAM,GAAN,MAAM,CAAQ;QAEd,SAAI,GAAJ,IAAI,CAAY;QAGhC,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;IACpC,CAAC;CACF;AAED,MAAM,OAAO,wBAAyB,SAAQ,KAAK;IAE/B;IACA;IACA;IAHlB,YACkB,SAAiB,EACjB,QAAgB,EAChB,UAAkB;QAElC,KAAK,CACH,+CAA+C,SAAS,WAAW;YACnE,qEAAqE;YACrE,kFAAkF;YAClF,GAAG,UAAU,mDAAmD;YAChE,8EAA8E,CAC/E,CAAC;QAVc,cAAS,GAAT,SAAS,CAAQ;QACjB,aAAQ,GAAR,QAAQ,CAAQ;QAChB,eAAU,GAAV,UAAU,CAAQ;QASlC,IAAI,CAAC,IAAI,GAAG,0BAA0B,CAAC;IACzC,CAAC;CACF;AAED,MAAM,OAAO,qCAAsC,SAAQ,KAAK;IAE5C;IACA;IACA;IAHlB,YACkB,SAAiB,EACjB,QAAgB,EAChB,UAAkB;QAElC,KAAK,CACH,kDAAkD,QAAQ,8BAA8B;YACxF,uBAAuB,SAAS,KAAK,UAAU,2CAA2C;YAC1F,yBAAyB,CAC1B,CAAC;QARc,cAAS,GAAT,SAAS,CAAQ;QACjB,aAAQ,GAAR,QAAQ,CAAQ;QAChB,eAAU,GAAV,UAAU,CAAQ;QAOlC,IAAI,CAAC,IAAI,GAAG,uCAAuC,CAAC;IACtD,CAAC;CACF;AAED;;;;;GAKG;AACH,MAAM,OAAO,oBAAqB,SAAQ,KAAK;IAC7C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;IACrC,CAAC;CACF;AAED;;;;GAIG;AACH,MAAM,OAAO,0BAA2B,SAAQ,KAAK;IACnD,YAAY,OAAe,EAAE,OAA6B;QACxD,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACxB,IAAI,CAAC,IAAI,GAAG,4BAA4B,CAAC;IAC3C,CAAC;CACF;AAED,MAAM,OAAO,+BAAgC,SAAQ,KAAK;IACxD;QACE,KAAK,CAAC,mCAAmC,CAAC,CAAC;QAC3C,IAAI,CAAC,IAAI,GAAG,iCAAiC,CAAC;IAChD,CAAC;CACF;AAED,MAAM,OAAO,6BAA8B,SAAQ,KAAK;IACtD,YAAY,OAAO,GAAG,6DAA6D;QACjF,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,+BAA+B,CAAC;IAC9C,CAAC;CACF;AAED,0FAA0F;AAC1F,MAAM,OAAO,qCAAsC,SAAQ,KAAK;IAClC;IAA5B,YAA4B,MAAc;QACxC,KAAK,CAAC,6CAA6C,CAAC,CAAC;QAD3B,WAAM,GAAN,MAAM,CAAQ;QAExC,IAAI,CAAC,IAAI,GAAG,uCAAuC,CAAC;IACtD,CAAC;CACF"}
|
package/dist/server-facade.d.ts
CHANGED
|
@@ -3,6 +3,11 @@ export declare const SERVER_LIFECYCLE_COMMANDS: readonly ["setup", "start", "sto
|
|
|
3
3
|
export type ServerLifecycleCommand = typeof SERVER_LIFECYCLE_COMMANDS[number];
|
|
4
4
|
export type ParsedServerFacadeArgs = {
|
|
5
5
|
kind: 'help';
|
|
6
|
+
} | {
|
|
7
|
+
kind: 'cube-init-help';
|
|
8
|
+
} | {
|
|
9
|
+
kind: 'cube-init';
|
|
10
|
+
args: string[];
|
|
6
11
|
} | {
|
|
7
12
|
kind: 'command';
|
|
8
13
|
command: ServerLifecycleCommand;
|
|
@@ -27,6 +32,10 @@ export interface ServerFacadeOutputDeps {
|
|
|
27
32
|
writeStdout(text: string): void;
|
|
28
33
|
writeStderr(text: string): void;
|
|
29
34
|
}
|
|
35
|
+
export interface ServerFacadeClientDeps {
|
|
36
|
+
cubeInit(args: readonly string[]): Promise<number>;
|
|
37
|
+
}
|
|
38
|
+
export type AssimilateDepsBuilder = typeof import('./assimilate-deps.js').buildDefaultAssimilateDeps;
|
|
30
39
|
export type ServerFacadeProcessResult = {
|
|
31
40
|
kind: 'exited';
|
|
32
41
|
code: number;
|
|
@@ -37,6 +46,7 @@ export type ServerFacadeProcessResult = {
|
|
|
37
46
|
kind: 'spawn-error';
|
|
38
47
|
error: Error;
|
|
39
48
|
};
|
|
49
|
+
export declare function buildDefaultServerFacadeClientDeps(buildDeps?: AssimilateDepsBuilder): ServerFacadeClientDeps;
|
|
40
50
|
export declare function unknownServerCommandText(command: string): string;
|
|
41
51
|
export declare function missingServerExecutableText(command: ServerLifecycleCommand): string;
|
|
42
52
|
export declare function serverCommandStartupFailureText(command: ServerLifecycleCommand): string;
|
|
@@ -45,6 +55,6 @@ export declare function runServerFacadeProcess(input: {
|
|
|
45
55
|
args: readonly string[];
|
|
46
56
|
}, deps?: ServerFacadeProcessDeps): Promise<ServerFacadeProcessResult>;
|
|
47
57
|
/** Routes every facade outcome before client initialization or network work. */
|
|
48
|
-
export declare function runEarlyServerFacade(argv: readonly string[], deps?: ServerFacadeProcessDeps, output?: ServerFacadeOutputDeps): Promise<number | null>;
|
|
58
|
+
export declare function runEarlyServerFacade(argv: readonly string[], deps?: ServerFacadeProcessDeps, output?: ServerFacadeOutputDeps, client?: ServerFacadeClientDeps): Promise<number | null>;
|
|
49
59
|
export {};
|
|
50
60
|
//# sourceMappingURL=server-facade.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server-facade.d.ts","sourceRoot":"","sources":["../src/server-facade.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAI5E,eAAO,MAAM,yBAAyB,mEAAoE,CAAC;AAC3G,MAAM,MAAM,sBAAsB,GAAG,OAAO,yBAAyB,CAAC,MAAM,CAAC,CAAC;AAE9E,MAAM,MAAM,sBAAsB,GAC9B;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,sBAAsB,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAA;CAAE,GACpE;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,iBAAiB,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAElE,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,sBAAsB,
|
|
1
|
+
{"version":3,"file":"server-facade.d.ts","sourceRoot":"","sources":["../src/server-facade.ts"],"names":[],"mappings":"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"}
|
package/dist/server-facade.js
CHANGED
|
@@ -1,12 +1,18 @@
|
|
|
1
1
|
import { spawn as spawnChild } from 'node:child_process';
|
|
2
2
|
import { constants } from 'node:os';
|
|
3
|
-
import { serverHelpText } from './cli-help.js';
|
|
3
|
+
import { cubeInitHelpText, isHelpFlag, serverHelpText } from './cli-help.js';
|
|
4
4
|
export const SERVER_LIFECYCLE_COMMANDS = ['setup', 'start', 'stop', 'status', 'update', 'invite'];
|
|
5
5
|
export function parseServerFacadeArgs(args) {
|
|
6
6
|
const [command, ...rest] = args;
|
|
7
7
|
if (command === undefined || command === '--help' || command === '-h') {
|
|
8
8
|
return { kind: 'help' };
|
|
9
9
|
}
|
|
10
|
+
if (command === 'cube' && rest[0] === 'init') {
|
|
11
|
+
const args = rest.slice(1);
|
|
12
|
+
return args.some(isHelpFlag)
|
|
13
|
+
? { kind: 'cube-init-help' }
|
|
14
|
+
: { kind: 'cube-init', args };
|
|
15
|
+
}
|
|
10
16
|
if (!SERVER_LIFECYCLE_COMMANDS.includes(command)) {
|
|
11
17
|
return { kind: 'error', reason: 'unknown-command', command };
|
|
12
18
|
}
|
|
@@ -25,6 +31,24 @@ const defaultOutputDeps = {
|
|
|
25
31
|
writeStdout: (text) => process.stdout.write(text),
|
|
26
32
|
writeStderr: (text) => process.stderr.write(text),
|
|
27
33
|
};
|
|
34
|
+
export function buildDefaultServerFacadeClientDeps(buildDeps) {
|
|
35
|
+
return {
|
|
36
|
+
cubeInit: async (args) => {
|
|
37
|
+
const [{ parseAssimilateArgs }, { buildDefaultAssimilateDeps }, { runAssimilate }] = await Promise.all([
|
|
38
|
+
import('./parse-assimilate-args.js'),
|
|
39
|
+
import('./assimilate-deps.js'),
|
|
40
|
+
import('./assimilate-cmd.js'),
|
|
41
|
+
]);
|
|
42
|
+
const parsed = parseAssimilateArgs([...args]);
|
|
43
|
+
if (!parsed.ok || parsed.role !== undefined) {
|
|
44
|
+
process.stderr.write(`${parsed.ok ? 'borg server cube init does not accept a role' : parsed.error}\n`);
|
|
45
|
+
return 1;
|
|
46
|
+
}
|
|
47
|
+
return runAssimilate({ role: undefined, flags: parsed.flags, mode: 'cube-init' }, (buildDeps ?? buildDefaultAssimilateDeps)());
|
|
48
|
+
},
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
const defaultClientDeps = buildDefaultServerFacadeClientDeps();
|
|
28
52
|
const MAX_RENDERED_COMMAND_CODE_POINTS = 80;
|
|
29
53
|
function inertCommand(command) {
|
|
30
54
|
const rendered = [];
|
|
@@ -43,7 +67,7 @@ function inertCommand(command) {
|
|
|
43
67
|
}
|
|
44
68
|
export function unknownServerCommandText(command) {
|
|
45
69
|
return (`Unknown server command: ${inertCommand(command)}.\n` +
|
|
46
|
-
`Available commands: setup, start, stop, status, update, invite.\n` +
|
|
70
|
+
`Available commands: setup, start, stop, status, update, invite, cube init.\n` +
|
|
47
71
|
`Next: run borg server --help.\n`);
|
|
48
72
|
}
|
|
49
73
|
export function missingServerExecutableText(command) {
|
|
@@ -103,7 +127,7 @@ function processResultExitCode(result) {
|
|
|
103
127
|
return 128 + (constants.signals[result.signal] ?? 1);
|
|
104
128
|
}
|
|
105
129
|
/** Routes every facade outcome before client initialization or network work. */
|
|
106
|
-
export async function runEarlyServerFacade(argv, deps = defaultProcessDeps, output = defaultOutputDeps) {
|
|
130
|
+
export async function runEarlyServerFacade(argv, deps = defaultProcessDeps, output = defaultOutputDeps, client = defaultClientDeps) {
|
|
107
131
|
if (argv[2] !== 'server')
|
|
108
132
|
return null;
|
|
109
133
|
const parsed = parseServerFacadeArgs(argv.slice(3));
|
|
@@ -111,10 +135,16 @@ export async function runEarlyServerFacade(argv, deps = defaultProcessDeps, outp
|
|
|
111
135
|
output.writeStdout(serverHelpText());
|
|
112
136
|
return 0;
|
|
113
137
|
}
|
|
138
|
+
if (parsed.kind === 'cube-init-help') {
|
|
139
|
+
output.writeStdout(cubeInitHelpText());
|
|
140
|
+
return 0;
|
|
141
|
+
}
|
|
114
142
|
if (parsed.kind === 'error') {
|
|
115
143
|
output.writeStderr(unknownServerCommandText(parsed.command));
|
|
116
144
|
return 1;
|
|
117
145
|
}
|
|
146
|
+
if (parsed.kind === 'cube-init')
|
|
147
|
+
return client.cubeInit(parsed.args);
|
|
118
148
|
const result = await runServerFacadeProcess(parsed, deps);
|
|
119
149
|
if (result.kind === 'spawn-error') {
|
|
120
150
|
output.writeStderr(isMissingServerExecutable(result.error)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server-facade.js","sourceRoot":"","sources":["../src/server-facade.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,IAAI,UAAU,EAAqB,MAAM,oBAAoB,CAAC;AAC5E,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"server-facade.js","sourceRoot":"","sources":["../src/server-facade.ts"],"names":[],"mappings":"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"}
|