@monotykamary/localterm-server 2.26.1 → 2.27.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/automation-store.d.ts +1 -0
- package/dist/automation-store.d.ts.map +1 -1
- package/dist/automation-store.js +25 -0
- package/dist/automation-store.js.map +1 -1
- package/dist/constants.d.ts +6 -3
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +20 -15
- package/dist/constants.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +80 -16
- package/dist/index.js.map +1 -1
- package/dist/process-store.d.ts +15 -0
- package/dist/process-store.d.ts.map +1 -0
- package/dist/process-store.js +121 -0
- package/dist/process-store.js.map +1 -0
- package/dist/protocol.d.ts +2 -2
- package/dist/protocol.d.ts.map +1 -1
- package/dist/protocol.js +1 -1
- package/dist/protocol.js.map +1 -1
- package/dist/schemas.d.ts +28 -5
- package/dist/schemas.d.ts.map +1 -1
- package/dist/schemas.js +60 -17
- package/dist/schemas.js.map +1 -1
- package/dist/secret-shims.d.ts +2 -2
- package/dist/secret-shims.d.ts.map +1 -1
- package/dist/secret-shims.js +28 -23
- package/dist/secret-shims.js.map +1 -1
- package/dist/secret-store.d.ts +1 -0
- package/dist/secret-store.d.ts.map +1 -1
- package/dist/secret-store.js +23 -32
- package/dist/secret-store.js.map +1 -1
- package/dist/types.d.ts +4 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/migrate-secrets-to-processes.d.ts +2 -0
- package/dist/utils/migrate-secrets-to-processes.d.ts.map +1 -0
- package/dist/utils/migrate-secrets-to-processes.js +109 -0
- package/dist/utils/migrate-secrets-to-processes.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { PROCESSES_FILE_VERSION, PROCESSES_FILENAME, SECRETS_FILE_VERSION } from "../constants.js";
|
|
4
|
+
import { processesFileSchema, processNameSchema, secretsFileSchema, secretsFileV1Schema, } from "../schemas.js";
|
|
5
|
+
// One-time, in-place migration from the pre-flip secret-centric model to the
|
|
6
|
+
// process-centric model. v1 secrets.json stored the binary names a secret shims
|
|
7
|
+
// directly on each entry (`programs`); v2 moves that wiring into a separate
|
|
8
|
+
// processes.json where a process names which secrets it receives (the same
|
|
9
|
+
// multi-select model automations use). The flip is a clean cut-over — the
|
|
10
|
+
// stores only know the new shapes, so this runs once at startup, before they
|
|
11
|
+
// are constructed, and rewrites both files.
|
|
12
|
+
//
|
|
13
|
+
// Idempotent: if secrets.json is already v2 (or absent) it no-ops; if it is v1,
|
|
14
|
+
// it inverts `programs` into processes, merges with any existing processes.json
|
|
15
|
+
// (union of requestedSecrets per process name, deduped, order-stable), writes
|
|
16
|
+
// processes.json, then rewrites secrets.json as v2 with `programs` stripped. A
|
|
17
|
+
// later boot parses the v2 file and no-ops.
|
|
18
|
+
export const migrateSecretsToProcesses = (stateDirectory) => {
|
|
19
|
+
const secretsPath = path.join(stateDirectory, "secrets.json");
|
|
20
|
+
const processesPath = path.join(stateDirectory, PROCESSES_FILENAME);
|
|
21
|
+
let secretsRaw;
|
|
22
|
+
try {
|
|
23
|
+
secretsRaw = fs.readFileSync(secretsPath, "utf8");
|
|
24
|
+
}
|
|
25
|
+
catch {
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
let secretsJson;
|
|
29
|
+
try {
|
|
30
|
+
secretsJson = JSON.parse(secretsRaw);
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
// Already v2 (or some future shape the store will handle) — nothing to migrate.
|
|
36
|
+
if (secretsFileSchema.safeParse(secretsJson).success)
|
|
37
|
+
return;
|
|
38
|
+
const v1 = secretsFileV1Schema.safeParse(secretsJson);
|
|
39
|
+
if (!v1.success)
|
|
40
|
+
return;
|
|
41
|
+
// Invert: for each (secret, program) pair, the program becomes a process that
|
|
42
|
+
// requests that secret. A program listed by several secrets becomes one
|
|
43
|
+
// process requesting all of them, preserving the combined shim the old model
|
|
44
|
+
// produced (buildProgramIndex already merged them per program). Program names
|
|
45
|
+
// are filtered through processNameSchema so a hand-edited v1 file with an
|
|
46
|
+
// invalid name can't produce a processes.json the store then rejects
|
|
47
|
+
// wholesale — invalid names are dropped with a warning instead.
|
|
48
|
+
const migrated = new Map();
|
|
49
|
+
for (const entry of v1.data.secrets) {
|
|
50
|
+
for (const program of entry.programs) {
|
|
51
|
+
const nameParse = processNameSchema.safeParse(program);
|
|
52
|
+
if (!nameParse.success) {
|
|
53
|
+
console.warn(`skipping invalid program name '${program}' during migration`);
|
|
54
|
+
continue;
|
|
55
|
+
}
|
|
56
|
+
const set = migrated.get(nameParse.data) ?? new Set();
|
|
57
|
+
set.add(entry.name);
|
|
58
|
+
migrated.set(nameParse.data, set);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
// Merge with any existing processes.json so a partial/manual processes file
|
|
62
|
+
// isn't clobbered. Union requestedSecrets per name; migrated entries first so
|
|
63
|
+
// an existing process keeps the migrated secrets ahead of its own.
|
|
64
|
+
const existingByName = new Map();
|
|
65
|
+
try {
|
|
66
|
+
const existingRaw = fs.readFileSync(processesPath, "utf8");
|
|
67
|
+
const existing = processesFileSchema.safeParse(JSON.parse(existingRaw));
|
|
68
|
+
if (existing.success) {
|
|
69
|
+
for (const process of existing.data.processes) {
|
|
70
|
+
const set = new Set(process.requestedSecrets);
|
|
71
|
+
existingByName.set(process.name, set);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
catch {
|
|
76
|
+
// absent or invalid — start from the migrated set only
|
|
77
|
+
}
|
|
78
|
+
const merged = new Map();
|
|
79
|
+
for (const [name, secrets] of migrated) {
|
|
80
|
+
const existing = existingByName.get(name);
|
|
81
|
+
const combined = [...secrets];
|
|
82
|
+
if (existing)
|
|
83
|
+
for (const secretName of existing)
|
|
84
|
+
if (!secrets.has(secretName))
|
|
85
|
+
combined.push(secretName);
|
|
86
|
+
merged.set(name, combined);
|
|
87
|
+
existingByName.delete(name);
|
|
88
|
+
}
|
|
89
|
+
for (const [name, secrets] of existingByName) {
|
|
90
|
+
merged.set(name, [...secrets]);
|
|
91
|
+
}
|
|
92
|
+
const processes = [...merged.entries()].map(([name, requestedSecrets]) => ({
|
|
93
|
+
name,
|
|
94
|
+
requestedSecrets,
|
|
95
|
+
}));
|
|
96
|
+
const secrets = v1.data.secrets.map((entry) => ({
|
|
97
|
+
name: entry.name,
|
|
98
|
+
envVar: entry.envVar,
|
|
99
|
+
}));
|
|
100
|
+
writeJson(processesPath, { version: PROCESSES_FILE_VERSION, processes });
|
|
101
|
+
writeJson(secretsPath, { version: SECRETS_FILE_VERSION, secrets });
|
|
102
|
+
};
|
|
103
|
+
const writeJson = (filePath, payload) => {
|
|
104
|
+
fs.mkdirSync(path.dirname(filePath), { recursive: true });
|
|
105
|
+
const tmpPath = `${filePath}.tmp`;
|
|
106
|
+
fs.writeFileSync(tmpPath, `${JSON.stringify(payload, null, 2)}\n`, "utf8");
|
|
107
|
+
fs.renameSync(tmpPath, filePath);
|
|
108
|
+
};
|
|
109
|
+
//# sourceMappingURL=migrate-secrets-to-processes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrate-secrets-to-processes.js","sourceRoot":"","sources":["../../src/utils/migrate-secrets-to-processes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AACnG,OAAO,EACL,mBAAmB,EACnB,iBAAiB,EACjB,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,eAAe,CAAC;AAGvB,6EAA6E;AAC7E,gFAAgF;AAChF,4EAA4E;AAC5E,2EAA2E;AAC3E,0EAA0E;AAC1E,6EAA6E;AAC7E,4CAA4C;AAC5C,EAAE;AACF,gFAAgF;AAChF,gFAAgF;AAChF,8EAA8E;AAC9E,+EAA+E;AAC/E,4CAA4C;AAC5C,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,cAAsB,EAAQ,EAAE;IACxE,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,cAAc,CAAC,CAAC;IAC9D,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAC;IAEpE,IAAI,UAAkB,CAAC;IACvB,IAAI,CAAC;QACH,UAAU,GAAG,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IACpD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO;IACT,CAAC;IACD,IAAI,WAAoB,CAAC;IACzB,IAAI,CAAC;QACH,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IACvC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO;IACT,CAAC;IAED,gFAAgF;IAChF,IAAI,iBAAiB,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,OAAO;QAAE,OAAO;IAE7D,MAAM,EAAE,GAAG,mBAAmB,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;IACtD,IAAI,CAAC,EAAE,CAAC,OAAO;QAAE,OAAO;IAExB,8EAA8E;IAC9E,wEAAwE;IACxE,6EAA6E;IAC7E,8EAA8E;IAC9E,0EAA0E;IAC1E,qEAAqE;IACrE,gEAAgE;IAChE,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAuB,CAAC;IAChD,KAAK,MAAM,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QACpC,KAAK,MAAM,OAAO,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YACrC,MAAM,SAAS,GAAG,iBAAiB,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;YACvD,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;gBACvB,OAAO,CAAC,IAAI,CAAC,kCAAkC,OAAO,oBAAoB,CAAC,CAAC;gBAC5E,SAAS;YACX,CAAC;YACD,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,EAAU,CAAC;YAC9D,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACpB,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;IAED,4EAA4E;IAC5E,8EAA8E;IAC9E,mEAAmE;IACnE,MAAM,cAAc,GAAG,IAAI,GAAG,EAAuB,CAAC;IACtD,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,EAAE,CAAC,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;QAC3D,MAAM,QAAQ,GAAG,mBAAmB,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC;QACxE,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;YACrB,KAAK,MAAM,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;gBAC9C,MAAM,GAAG,GAAG,IAAI,GAAG,CAAS,OAAO,CAAC,gBAAgB,CAAC,CAAC;gBACtD,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;YACxC,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,uDAAuD;IACzD,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,GAAG,EAAoB,CAAC;IAC3C,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,QAAQ,EAAE,CAAC;QACvC,MAAM,QAAQ,GAAG,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC1C,MAAM,QAAQ,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC;QAC9B,IAAI,QAAQ;YACV,KAAK,MAAM,UAAU,IAAI,QAAQ;gBAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;oBAAE,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC7F,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAC3B,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,cAAc,EAAE,CAAC;QAC7C,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IACjC,CAAC;IAED,MAAM,SAAS,GAAc,CAAC,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,gBAAgB,CAAC,EAAE,EAAE,CAAC,CAAC;QACpF,IAAI;QACJ,gBAAgB;KACjB,CAAC,CAAC,CAAC;IAEJ,MAAM,OAAO,GAAkB,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAC7D,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,MAAM,EAAE,KAAK,CAAC,MAAM;KACrB,CAAC,CAAC,CAAC;IAEJ,SAAS,CAAC,aAAa,EAAE,EAAE,OAAO,EAAE,sBAAsB,EAAE,SAAS,EAAE,CAAC,CAAC;IACzE,SAAS,CAAC,WAAW,EAAE,EAAE,OAAO,EAAE,oBAAoB,EAAE,OAAO,EAAE,CAAC,CAAC;AACrE,CAAC,CAAC;AAEF,MAAM,SAAS,GAAG,CAAC,QAAgB,EAAE,OAAgB,EAAQ,EAAE;IAC7D,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1D,MAAM,OAAO,GAAG,GAAG,QAAQ,MAAM,CAAC;IAClC,EAAE,CAAC,aAAa,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC3E,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;AACnC,CAAC,CAAC"}
|