@x12i/memorix-service 3.2.1 → 3.3.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 +43 -2
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js +4 -0
- package/dist/app.js.map +1 -1
- package/dist/catalog/catalog-service.d.ts +48 -0
- package/dist/catalog/catalog-service.d.ts.map +1 -0
- package/dist/catalog/catalog-service.js +397 -0
- package/dist/catalog/catalog-service.js.map +1 -0
- package/dist/catalog/package-list-source.d.ts +35 -0
- package/dist/catalog/package-list-source.d.ts.map +1 -0
- package/dist/catalog/package-list-source.js +47 -0
- package/dist/catalog/package-list-source.js.map +1 -0
- package/dist/catalog/types.d.ts +65 -0
- package/dist/catalog/types.d.ts.map +1 -0
- package/dist/catalog/types.js +16 -0
- package/dist/catalog/types.js.map +1 -0
- package/dist/catalog-store-cli.d.ts +20 -0
- package/dist/catalog-store-cli.d.ts.map +1 -0
- package/dist/catalog-store-cli.js +206 -0
- package/dist/catalog-store-cli.js.map +1 -0
- package/dist/cli.d.ts +3 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +48 -18
- package/dist/cli.js.map +1 -1
- package/dist/connector-ops/attempt-store.d.ts +5 -0
- package/dist/connector-ops/attempt-store.d.ts.map +1 -0
- package/dist/connector-ops/attempt-store.js +186 -0
- package/dist/connector-ops/attempt-store.js.map +1 -0
- package/dist/connector-ops/index.d.ts +5 -0
- package/dist/connector-ops/index.d.ts.map +1 -0
- package/dist/connector-ops/index.js +5 -0
- package/dist/connector-ops/index.js.map +1 -0
- package/dist/connector-ops/override-store.d.ts +7 -0
- package/dist/connector-ops/override-store.d.ts.map +1 -0
- package/dist/connector-ops/override-store.js +123 -0
- package/dist/connector-ops/override-store.js.map +1 -0
- package/dist/connector-ops/sanitize.d.ts +16 -0
- package/dist/connector-ops/sanitize.d.ts.map +1 -0
- package/dist/connector-ops/sanitize.js +48 -0
- package/dist/connector-ops/sanitize.js.map +1 -0
- package/dist/connector-ops/types.d.ts +76 -0
- package/dist/connector-ops/types.d.ts.map +1 -0
- package/dist/connector-ops/types.js +12 -0
- package/dist/connector-ops/types.js.map +1 -0
- package/dist/effective-listing.d.ts +11 -0
- package/dist/effective-listing.d.ts.map +1 -0
- package/dist/effective-listing.js +41 -0
- package/dist/effective-listing.js.map +1 -0
- package/dist/errors.d.ts +5 -1
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +10 -3
- package/dist/errors.js.map +1 -1
- package/dist/execution-target.d.ts +16 -0
- package/dist/execution-target.d.ts.map +1 -1
- package/dist/execution-target.js +54 -0
- package/dist/execution-target.js.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/magit/magit-pack-service.d.ts +252 -70
- package/dist/magit/magit-pack-service.d.ts.map +1 -1
- package/dist/magit/magit-pack-service.js +556 -202
- package/dist/magit/magit-pack-service.js.map +1 -1
- package/dist/magit/pack-to-patchset.d.ts +21 -0
- package/dist/magit/pack-to-patchset.d.ts.map +1 -1
- package/dist/magit/pack-to-patchset.js +29 -0
- package/dist/magit/pack-to-patchset.js.map +1 -1
- package/dist/magit/package-catalog-bridge.d.ts +4 -14
- package/dist/magit/package-catalog-bridge.d.ts.map +1 -1
- package/dist/magit/package-catalog-bridge.js +2 -21
- package/dist/magit/package-catalog-bridge.js.map +1 -1
- package/dist/mgc-packages.d.ts +4 -3
- package/dist/mgc-packages.d.ts.map +1 -1
- package/dist/mgc-packages.js +4 -3
- package/dist/mgc-packages.js.map +1 -1
- package/dist/openapi/openapi.json +1716 -137
- package/dist/optional-companion-url.d.ts +72 -0
- package/dist/optional-companion-url.d.ts.map +1 -0
- package/dist/optional-companion-url.js +148 -0
- package/dist/optional-companion-url.js.map +1 -0
- package/dist/platform.d.ts +11 -0
- package/dist/platform.d.ts.map +1 -1
- package/dist/platform.js +77 -2
- package/dist/platform.js.map +1 -1
- package/dist/routes/catalog.d.ts +4 -0
- package/dist/routes/catalog.d.ts.map +1 -0
- package/dist/routes/catalog.js +103 -0
- package/dist/routes/catalog.js.map +1 -0
- package/dist/routes/connector-ops.d.ts +12 -0
- package/dist/routes/connector-ops.d.ts.map +1 -0
- package/dist/routes/connector-ops.js +160 -0
- package/dist/routes/connector-ops.js.map +1 -0
- package/dist/routes/memory.d.ts.map +1 -1
- package/dist/routes/memory.js +9 -2
- package/dist/routes/memory.js.map +1 -1
- package/dist/routes/metadata.d.ts.map +1 -1
- package/dist/routes/metadata.js +135 -186
- package/dist/routes/metadata.js.map +1 -1
- package/dist/routes/pipelines.d.ts.map +1 -1
- package/dist/routes/pipelines.js +3 -2
- package/dist/routes/pipelines.js.map +1 -1
- package/openapi/openapi.json +1716 -137
- package/package.json +30 -7
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure helpers for GET /api/metadata/packages ?source= selection.
|
|
3
|
+
* Mirrors packages-list-shape.test.ts contracts.
|
|
4
|
+
*/
|
|
5
|
+
export function collapseCatalogVersions(items) {
|
|
6
|
+
const byKey = new Map();
|
|
7
|
+
for (const v of items) {
|
|
8
|
+
const key = `${v.kind}::${v.id}`;
|
|
9
|
+
const prev = byKey.get(key);
|
|
10
|
+
if (prev && prev.createdAt >= v.createdAt)
|
|
11
|
+
continue;
|
|
12
|
+
byKey.set(key, {
|
|
13
|
+
kind: v.kind,
|
|
14
|
+
id: v.id,
|
|
15
|
+
agentId: v.kind === "agent" ? v.id : "",
|
|
16
|
+
version: v.version,
|
|
17
|
+
createdAt: v.createdAt,
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
return [...byKey.values()].map(({ kind, id, agentId, version }) => ({
|
|
21
|
+
kind,
|
|
22
|
+
id,
|
|
23
|
+
agentId,
|
|
24
|
+
version,
|
|
25
|
+
}));
|
|
26
|
+
}
|
|
27
|
+
export function selectPackagesBySource(opts) {
|
|
28
|
+
const wantPackable = opts.source === "packable" || opts.source === "all";
|
|
29
|
+
const packable = wantPackable ? opts.packable : [];
|
|
30
|
+
let packages = opts.source === "catalog" || opts.source === "all" ? opts.packages : [];
|
|
31
|
+
if (opts.source === "packable") {
|
|
32
|
+
packages = packable.map((e) => ({
|
|
33
|
+
kind: e.kind,
|
|
34
|
+
id: e.id,
|
|
35
|
+
agentId: e.agentId,
|
|
36
|
+
...(e.label ? { label: e.label } : {}),
|
|
37
|
+
}));
|
|
38
|
+
}
|
|
39
|
+
return { packages, packable };
|
|
40
|
+
}
|
|
41
|
+
export function parsePackagesSource(raw) {
|
|
42
|
+
const s = (raw ?? "packable").trim().toLowerCase();
|
|
43
|
+
if (s === "catalog" || s === "all")
|
|
44
|
+
return s;
|
|
45
|
+
return "packable";
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=package-list-source.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package-list-source.js","sourceRoot":"","sources":["../../src/catalog/package-list-source.ts"],"names":[],"mappings":"AAAA;;;GAGG;AA0BH,MAAM,UAAU,uBAAuB,CACrC,KAA0B;IAE1B,MAAM,KAAK,GAAG,IAAI,GAAG,EAGlB,CAAC;IACJ,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;QACjC,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC5B,IAAI,IAAI,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,CAAC,SAAS;YAAE,SAAS;QACpD,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE;YACb,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,EAAE,EAAE,CAAC,CAAC,EAAE;YACR,OAAO,EAAE,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;YACvC,OAAO,EAAE,CAAC,CAAC,OAAO;YAClB,SAAS,EAAE,CAAC,CAAC,SAAS;SACvB,CAAC,CAAC;IACL,CAAC;IACD,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;QAClE,IAAI;QACJ,EAAE;QACF,OAAO;QACP,OAAO;KACR,CAAC,CAAC,CAAC;AACN,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,IAItC;IACC,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,KAAK,UAAU,IAAI,IAAI,CAAC,MAAM,KAAK,KAAK,CAAC;IACzE,MAAM,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;IACnD,IAAI,QAAQ,GACV,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;IAC1E,IAAI,IAAI,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;QAC/B,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC9B,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,EAAE,EAAE,CAAC,CAAC,EAAE;YACR,OAAO,EAAE,CAAC,CAAC,OAAO;YAClB,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACvC,CAAC,CAAC,CAAC;IACN,CAAC;IACD,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,GAAuB;IAEvB,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,UAAU,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACnD,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,KAAK;QAAE,OAAO,CAAC,CAAC;IAC7C,OAAO,UAAU,CAAC;AACpB,CAAC"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Memorix product catalog domain (M1).
|
|
3
|
+
* Existence of Magit-backed kinds comes from Magit store/flat list;
|
|
4
|
+
* deployments are env-local only — never Magit.
|
|
5
|
+
*/
|
|
6
|
+
export type CatalogComponentKind = "agent" | "service" | "connector" | "pipeline" | "runtime-service";
|
|
7
|
+
/** Magit package kinds that listPackagesFR understands for FR-CPS. */
|
|
8
|
+
export declare const MAGIT_CATALOG_KINDS: readonly ["agent", "connector", "service"];
|
|
9
|
+
export type MagitCatalogKind = (typeof MAGIT_CATALOG_KINDS)[number];
|
|
10
|
+
export type CatalogPublisher = {
|
|
11
|
+
id: string;
|
|
12
|
+
appId?: string;
|
|
13
|
+
workspaceId?: string;
|
|
14
|
+
displayName?: string;
|
|
15
|
+
};
|
|
16
|
+
export type CatalogReleaseSummary = {
|
|
17
|
+
version: string;
|
|
18
|
+
checksum: string | null;
|
|
19
|
+
message?: string | null;
|
|
20
|
+
createdAt?: string;
|
|
21
|
+
mode?: "narrow" | "full";
|
|
22
|
+
};
|
|
23
|
+
export type CatalogRelease = CatalogReleaseSummary & {
|
|
24
|
+
packageTypeId: string | null;
|
|
25
|
+
publisher: CatalogPublisher | null;
|
|
26
|
+
kind: CatalogComponentKind;
|
|
27
|
+
id: string;
|
|
28
|
+
magitRef?: string;
|
|
29
|
+
associations?: {
|
|
30
|
+
kind: CatalogComponentKind;
|
|
31
|
+
id: string;
|
|
32
|
+
publisher?: string;
|
|
33
|
+
version?: string;
|
|
34
|
+
}[];
|
|
35
|
+
};
|
|
36
|
+
export type CatalogDeployment = {
|
|
37
|
+
orgId?: string;
|
|
38
|
+
environment?: string;
|
|
39
|
+
status: "installed" | "configured" | "reachable" | "missing" | "degraded";
|
|
40
|
+
installedVersion?: string;
|
|
41
|
+
endpoint?: string;
|
|
42
|
+
lastSeen?: string;
|
|
43
|
+
health?: "up" | "down" | "unknown";
|
|
44
|
+
notes?: string;
|
|
45
|
+
};
|
|
46
|
+
export type CatalogComponent = {
|
|
47
|
+
schema: "memorix-catalog/v1";
|
|
48
|
+
packageTypeId: string | null;
|
|
49
|
+
publisher: CatalogPublisher | null;
|
|
50
|
+
kind: CatalogComponentKind;
|
|
51
|
+
id: string;
|
|
52
|
+
name?: string;
|
|
53
|
+
lifecycle?: "active" | "deprecated";
|
|
54
|
+
associations?: {
|
|
55
|
+
kind: CatalogComponentKind;
|
|
56
|
+
id: string;
|
|
57
|
+
publisher?: string;
|
|
58
|
+
version?: string;
|
|
59
|
+
}[];
|
|
60
|
+
latestRelease?: CatalogReleaseSummary;
|
|
61
|
+
deployments?: CatalogDeployment[];
|
|
62
|
+
};
|
|
63
|
+
export declare function isMagitCatalogKind(kind: string): kind is MagitCatalogKind;
|
|
64
|
+
export declare function isCatalogComponentKind(kind: string): kind is CatalogComponentKind;
|
|
65
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/catalog/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,MAAM,oBAAoB,GAC5B,OAAO,GACP,SAAS,GACT,WAAW,GACX,UAAU,GACV,iBAAiB,CAAC;AAEtB,sEAAsE;AACtE,eAAO,MAAM,mBAAmB,4CAA6C,CAAC;AAC9E,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,mBAAmB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEpE,MAAM,MAAM,gBAAgB,GAAG;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG,qBAAqB,GAAG;IACnD,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,SAAS,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACnC,IAAI,EAAE,oBAAoB,CAAC;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE;QACb,IAAI,EAAE,oBAAoB,CAAC;QAC3B,EAAE,EAAE,MAAM,CAAC;QACX,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,EAAE,CAAC;CACL,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,WAAW,GAAG,YAAY,GAAG,WAAW,GAAG,SAAS,GAAG,UAAU,CAAC;IAC1E,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,IAAI,GAAG,MAAM,GAAG,SAAS,CAAC;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,EAAE,oBAAoB,CAAC;IAC7B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,SAAS,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACnC,IAAI,EAAE,oBAAoB,CAAC;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,QAAQ,GAAG,YAAY,CAAC;IACpC,YAAY,CAAC,EAAE;QACb,IAAI,EAAE,oBAAoB,CAAC;QAC3B,EAAE,EAAE,MAAM,CAAC;QACX,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,EAAE,CAAC;IACJ,aAAa,CAAC,EAAE,qBAAqB,CAAC;IACtC,WAAW,CAAC,EAAE,iBAAiB,EAAE,CAAC;CACnC,CAAC;AAEF,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,IAAI,gBAAgB,CAEzE;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,IAAI,oBAAoB,CAMjF"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Memorix product catalog domain (M1).
|
|
3
|
+
* Existence of Magit-backed kinds comes from Magit store/flat list;
|
|
4
|
+
* deployments are env-local only — never Magit.
|
|
5
|
+
*/
|
|
6
|
+
/** Magit package kinds that listPackagesFR understands for FR-CPS. */
|
|
7
|
+
export const MAGIT_CATALOG_KINDS = ["agent", "connector", "service"];
|
|
8
|
+
export function isMagitCatalogKind(kind) {
|
|
9
|
+
return MAGIT_CATALOG_KINDS.includes(kind);
|
|
10
|
+
}
|
|
11
|
+
export function isCatalogComponentKind(kind) {
|
|
12
|
+
return (isMagitCatalogKind(kind) ||
|
|
13
|
+
kind === "pipeline" ||
|
|
14
|
+
kind === "runtime-service");
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/catalog/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AASH,sEAAsE;AACtE,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,OAAO,EAAE,WAAW,EAAE,SAAS,CAAU,CAAC;AA6D9E,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,OAAQ,mBAAyC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AACnE,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,IAAY;IACjD,OAAO,CACL,kBAAkB,CAAC,IAAI,CAAC;QACxB,IAAI,KAAK,UAAU;QACnB,IAAI,KAAK,iBAAiB,CAC3B,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { type MagitPackService } from "./magit/magit-pack-service.js";
|
|
2
|
+
export type CatalogStoreIo = {
|
|
3
|
+
log: (line: string) => void;
|
|
4
|
+
error: (line: string) => void;
|
|
5
|
+
};
|
|
6
|
+
export type CatalogStoreDeps = {
|
|
7
|
+
createMagit: () => MagitPackService;
|
|
8
|
+
writeSecretEnvFile: (outPath: string, env: Record<string, string>) => void;
|
|
9
|
+
io: CatalogStoreIo;
|
|
10
|
+
};
|
|
11
|
+
export declare function parseFlag(argv: string[], name: string): string | undefined;
|
|
12
|
+
export declare function hasFlag(argv: string[], name: string): boolean;
|
|
13
|
+
export declare function createDefaultAdminMagit(): MagitPackService;
|
|
14
|
+
export declare function writeSecretEnvFile(outPath: string, env: Record<string, string>): void;
|
|
15
|
+
/**
|
|
16
|
+
* Run catalog-store subcommands. Returns process exit code (0/1/2).
|
|
17
|
+
* Never prints selector values to stdout/stderr.
|
|
18
|
+
*/
|
|
19
|
+
export declare function runCatalogStoreCommand(sub: string | undefined, argv: string[], partialDeps?: Partial<CatalogStoreDeps>): Promise<number>;
|
|
20
|
+
//# sourceMappingURL=catalog-store-cli.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"catalog-store-cli.d.ts","sourceRoot":"","sources":["../src/catalog-store-cli.ts"],"names":[],"mappings":"AAOA,OAAO,EAKL,KAAK,gBAAgB,EACtB,MAAM,+BAA+B,CAAC;AAEvC,MAAM,MAAM,cAAc,GAAG;IAC3B,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5B,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAC/B,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,WAAW,EAAE,MAAM,gBAAgB,CAAC;IACpC,kBAAkB,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,IAAI,CAAC;IAC3E,EAAE,EAAE,cAAc,CAAC;CACpB,CAAC;AAEF,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAI1E;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAE7D;AAED,wBAAgB,uBAAuB,IAAI,gBAAgB,CA8C1D;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAcrF;AA2BD;;;GAGG;AACH,wBAAsB,sBAAsB,CAC1C,GAAG,EAAE,MAAM,GAAG,SAAS,EACvB,IAAI,EAAE,MAAM,EAAE,EACd,WAAW,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,GACtC,OAAO,CAAC,MAAM,CAAC,CA4BjB"}
|
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Testable catalog-store admin CLI core.
|
|
3
|
+
* Selectors are written only to --out (mode 0600); stdout is safe metadata JSON.
|
|
4
|
+
*/
|
|
5
|
+
import { chmodSync, mkdirSync, writeFileSync } from "node:fs";
|
|
6
|
+
import { dirname, resolve } from "node:path";
|
|
7
|
+
import { ServiceError } from "./errors.js";
|
|
8
|
+
import { createMagitPackService, isMetadataMagitEnabled, resolveMagitRepoRootParent, resolveMagitStorageTokenEnv, } from "./magit/magit-pack-service.js";
|
|
9
|
+
export function parseFlag(argv, name) {
|
|
10
|
+
const i = argv.indexOf(name);
|
|
11
|
+
if (i < 0)
|
|
12
|
+
return undefined;
|
|
13
|
+
return argv[i + 1];
|
|
14
|
+
}
|
|
15
|
+
export function hasFlag(argv, name) {
|
|
16
|
+
return argv.includes(name);
|
|
17
|
+
}
|
|
18
|
+
export function createDefaultAdminMagit() {
|
|
19
|
+
if (!isMetadataMagitEnabled()) {
|
|
20
|
+
throw new ServiceError("VALIDATION", "METADATA_MAGIT is disabled; enable Magit to run catalog-store commands", 400);
|
|
21
|
+
}
|
|
22
|
+
const mongoUri = process.env.MONGO_URI?.trim();
|
|
23
|
+
if (!mongoUri) {
|
|
24
|
+
throw new ServiceError("VALIDATION", "MONGO_URI is required for catalog-store commands", 400);
|
|
25
|
+
}
|
|
26
|
+
const tokenEnv = resolveMagitStorageTokenEnv();
|
|
27
|
+
if (!process.env[tokenEnv]?.trim()) {
|
|
28
|
+
throw new ServiceError("VALIDATION", `Storage token env ${tokenEnv} is not set (owner/publisher Authix token required)`, 400);
|
|
29
|
+
}
|
|
30
|
+
const metadataDb = process.env.MEMORIX_METADATA_DB?.trim() ||
|
|
31
|
+
process.env.MEMORIX_CATALOX_DB?.trim() ||
|
|
32
|
+
"memorix_metadata";
|
|
33
|
+
return createMagitPackService({
|
|
34
|
+
repoRootParent: resolveMagitRepoRootParent(),
|
|
35
|
+
mongoUrlEnv: "MONGO_URI",
|
|
36
|
+
mongoUri,
|
|
37
|
+
metadataDb,
|
|
38
|
+
storageUrl: process.env.MAGIT_STORAGE_URL?.trim() || undefined,
|
|
39
|
+
storageTokenEnv: tokenEnv,
|
|
40
|
+
log: (msg, extra) => {
|
|
41
|
+
if (extra) {
|
|
42
|
+
const keys = Object.keys(extra).filter((k) => !/selector|token|secret|password/i.test(k));
|
|
43
|
+
console.error(msg, keys.length ? { keys } : "");
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
console.error(msg);
|
|
47
|
+
}
|
|
48
|
+
},
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
export function writeSecretEnvFile(outPath, env) {
|
|
52
|
+
const lines = [
|
|
53
|
+
"# Generated by memorix-service catalog-store — DO NOT COMMIT",
|
|
54
|
+
"# mode 0600; contains MAGIT_PACKAGE_STORE_SELECTOR (capability secret)",
|
|
55
|
+
...Object.entries(env).map(([k, v]) => `${k}=${v}`),
|
|
56
|
+
];
|
|
57
|
+
const abs = resolve(outPath);
|
|
58
|
+
mkdirSync(dirname(abs), { recursive: true });
|
|
59
|
+
writeFileSync(abs, `${lines.join("\n")}\n`, { encoding: "utf8", mode: 0o600 });
|
|
60
|
+
try {
|
|
61
|
+
chmodSync(abs, 0o600);
|
|
62
|
+
}
|
|
63
|
+
catch {
|
|
64
|
+
// best-effort on platforms that ignore mode
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
function defaultDeps(partial) {
|
|
68
|
+
return {
|
|
69
|
+
createMagit: partial?.createMagit ?? createDefaultAdminMagit,
|
|
70
|
+
writeSecretEnvFile: partial?.writeSecretEnvFile ?? writeSecretEnvFile,
|
|
71
|
+
io: partial?.io ?? {
|
|
72
|
+
log: (line) => console.log(line),
|
|
73
|
+
error: (line) => console.error(line),
|
|
74
|
+
},
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
function publisherEnv(result) {
|
|
78
|
+
return {
|
|
79
|
+
MAGIT_PACKAGE_TYPE_ID: result.packageTypeId,
|
|
80
|
+
MAGIT_PACKAGE_STORE_SELECTOR: result.storeSelector,
|
|
81
|
+
MAGIT_PACKAGE_PUBLISHER_ID: process.env.MAGIT_PACKAGE_PUBLISHER_ID?.trim() || "memorix",
|
|
82
|
+
MAGIT_PACKAGE_PUBLISHER_APP_ID: process.env.MAGIT_PACKAGE_PUBLISHER_APP_ID?.trim() || "memorix-service",
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Run catalog-store subcommands. Returns process exit code (0/1/2).
|
|
87
|
+
* Never prints selector values to stdout/stderr.
|
|
88
|
+
*/
|
|
89
|
+
export async function runCatalogStoreCommand(sub, argv, partialDeps) {
|
|
90
|
+
const deps = defaultDeps(partialDeps);
|
|
91
|
+
const { io } = deps;
|
|
92
|
+
try {
|
|
93
|
+
if (sub === "provision")
|
|
94
|
+
return await provision(argv, deps);
|
|
95
|
+
if (sub === "verify")
|
|
96
|
+
return await verify(deps);
|
|
97
|
+
if (sub === "recover")
|
|
98
|
+
return await recover(argv, deps);
|
|
99
|
+
if (sub === "list")
|
|
100
|
+
return await list(deps);
|
|
101
|
+
io.error(`Usage:
|
|
102
|
+
memorix-service catalog-store provision [--out <file>] [--force] [--package-type-id <id>]
|
|
103
|
+
memorix-service catalog-store verify
|
|
104
|
+
memorix-service catalog-store recover --store-id <id> [--out <file>]
|
|
105
|
+
memorix-service catalog-store list
|
|
106
|
+
|
|
107
|
+
Secrets (MAGIT_PACKAGE_STORE_SELECTOR, tokens) are never printed on stdout.
|
|
108
|
+
Provision/recover write selector lines to --out with mode 0600.`);
|
|
109
|
+
return 1;
|
|
110
|
+
}
|
|
111
|
+
catch (err) {
|
|
112
|
+
const message = err instanceof ServiceError
|
|
113
|
+
? err.message
|
|
114
|
+
: err instanceof Error
|
|
115
|
+
? err.message
|
|
116
|
+
: String(err);
|
|
117
|
+
io.error(message);
|
|
118
|
+
return 1;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
async function provision(argv, deps) {
|
|
122
|
+
const out = parseFlag(argv, "--out");
|
|
123
|
+
if (!out) {
|
|
124
|
+
deps.io.error("provision requires --out <file> so the selector is never printed on stdout");
|
|
125
|
+
return 2;
|
|
126
|
+
}
|
|
127
|
+
const force = hasFlag(argv, "--force");
|
|
128
|
+
const packageTypeId = parseFlag(argv, "--package-type-id");
|
|
129
|
+
const magitSvc = deps.createMagit();
|
|
130
|
+
const result = await magitSvc.provisionTypedPackageStore({
|
|
131
|
+
packageTypeId: packageTypeId || undefined,
|
|
132
|
+
force,
|
|
133
|
+
});
|
|
134
|
+
deps.writeSecretEnvFile(out, publisherEnv(result));
|
|
135
|
+
const abs = resolve(out);
|
|
136
|
+
deps.io.error(`[catalog-store] wrote secrets to ${abs} (mode 0600)`);
|
|
137
|
+
deps.io.error("[catalog-store] stdout contains no secrets — only next steps");
|
|
138
|
+
deps.io.log(JSON.stringify({
|
|
139
|
+
ok: true,
|
|
140
|
+
action: "provision",
|
|
141
|
+
packageTypeId: result.packageTypeId,
|
|
142
|
+
storeId: result.storeId,
|
|
143
|
+
pushed: result.pushed,
|
|
144
|
+
existingStoreCount: result.existingStoreCount,
|
|
145
|
+
secretsFile: abs,
|
|
146
|
+
next: [
|
|
147
|
+
`Install ${out} into the service secret env (never commit).`,
|
|
148
|
+
"Mint Authix store grants: publisher write + consumer read.",
|
|
149
|
+
"Run: memorix-service catalog-store verify",
|
|
150
|
+
"Optional: node scripts/magit-backfill-pack-catalog.mjs",
|
|
151
|
+
],
|
|
152
|
+
}, null, 2));
|
|
153
|
+
return 0;
|
|
154
|
+
}
|
|
155
|
+
async function verify(deps) {
|
|
156
|
+
const magitSvc = deps.createMagit();
|
|
157
|
+
const result = await magitSvc.verifyTypedPackageStore();
|
|
158
|
+
deps.io.log(JSON.stringify({
|
|
159
|
+
ok: true,
|
|
160
|
+
action: "verify",
|
|
161
|
+
mode: result.mode,
|
|
162
|
+
packageTypeId: result.packageTypeId,
|
|
163
|
+
reachable: result.reachable,
|
|
164
|
+
selectorConfigured: Boolean(process.env.MAGIT_PACKAGE_STORE_SELECTOR?.trim()),
|
|
165
|
+
}, null, 2));
|
|
166
|
+
return 0;
|
|
167
|
+
}
|
|
168
|
+
async function recover(argv, deps) {
|
|
169
|
+
const storeId = parseFlag(argv, "--store-id");
|
|
170
|
+
if (!storeId) {
|
|
171
|
+
deps.io.error("recover requires --store-id <id>");
|
|
172
|
+
return 2;
|
|
173
|
+
}
|
|
174
|
+
const out = parseFlag(argv, "--out");
|
|
175
|
+
if (!out) {
|
|
176
|
+
deps.io.error("recover requires --out <file> so the new selector is never printed on stdout");
|
|
177
|
+
return 2;
|
|
178
|
+
}
|
|
179
|
+
const magitSvc = deps.createMagit();
|
|
180
|
+
const result = await magitSvc.recoverStoreSelector({ storeId });
|
|
181
|
+
deps.writeSecretEnvFile(out, publisherEnv(result));
|
|
182
|
+
const abs = resolve(out);
|
|
183
|
+
deps.io.error(`[catalog-store] wrote secrets to ${abs} (mode 0600)`);
|
|
184
|
+
deps.io.error("[catalog-store] stdout contains no secrets — only next steps");
|
|
185
|
+
deps.io.log(JSON.stringify({
|
|
186
|
+
ok: true,
|
|
187
|
+
action: "recover",
|
|
188
|
+
packageTypeId: result.packageTypeId,
|
|
189
|
+
storeId: result.storeId,
|
|
190
|
+
pushed: result.pushed,
|
|
191
|
+
secretsFile: abs,
|
|
192
|
+
next: [
|
|
193
|
+
"Rotate installed MAGIT_PACKAGE_STORE_SELECTOR to the new secret file.",
|
|
194
|
+
"Re-mint consumer tokens if they relied on the revoked selector.",
|
|
195
|
+
"Run: memorix-service catalog-store verify",
|
|
196
|
+
],
|
|
197
|
+
}, null, 2));
|
|
198
|
+
return 0;
|
|
199
|
+
}
|
|
200
|
+
async function list(deps) {
|
|
201
|
+
const magitSvc = deps.createMagit();
|
|
202
|
+
const stores = await magitSvc.listPackageStores();
|
|
203
|
+
deps.io.log(JSON.stringify({ ok: true, action: "list", count: stores.length, stores }, null, 2));
|
|
204
|
+
return 0;
|
|
205
|
+
}
|
|
206
|
+
//# sourceMappingURL=catalog-store-cli.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"catalog-store-cli.js","sourceRoot":"","sources":["../src/catalog-store-cli.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.d.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
|
|
2
|
+
/** Hydrate unset process.env keys from memorix-service/.env (internal URLs + secrets). */
|
|
3
|
+
export declare function loadDotEnv(): void;
|
|
4
|
+
export declare function runCli(argv?: string[]): Promise<number>;
|
|
3
5
|
//# sourceMappingURL=cli.d.ts.map
|
package/dist/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAcA,0FAA0F;AAC1F,wBAAgB,UAAU,IAAI,IAAI,CAuBjC;AAOD,wBAAsB,MAAM,CAAC,IAAI,GAAE,MAAM,EAA0B,GAAG,OAAO,CAAC,MAAM,CAAC,CA2BpF"}
|
package/dist/cli.js
CHANGED
|
@@ -1,9 +1,18 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* memorix-service CLI.
|
|
4
|
+
*
|
|
5
|
+
* memorix-service serve
|
|
6
|
+
* memorix-service catalog-store provision|verify|recover|list
|
|
7
|
+
*/
|
|
2
8
|
import { readFileSync } from "node:fs";
|
|
3
9
|
import { resolve } from "node:path";
|
|
10
|
+
import { pathToFileURL } from "node:url";
|
|
4
11
|
import { startMemorixServiceHttp } from "./app.js";
|
|
12
|
+
import { ServiceError } from "./errors.js";
|
|
13
|
+
import { runCatalogStoreCommand } from "./catalog-store-cli.js";
|
|
5
14
|
/** Hydrate unset process.env keys from memorix-service/.env (internal URLs + secrets). */
|
|
6
|
-
function loadDotEnv() {
|
|
15
|
+
export function loadDotEnv() {
|
|
7
16
|
try {
|
|
8
17
|
const text = readFileSync(resolve(process.cwd(), "./.env"), "utf8");
|
|
9
18
|
for (const raw of text.split(/\r?\n/)) {
|
|
@@ -36,24 +45,45 @@ function loadMongoUri() {
|
|
|
36
45
|
return process.env.MONGO_URI.trim();
|
|
37
46
|
return undefined;
|
|
38
47
|
}
|
|
39
|
-
async function
|
|
40
|
-
const cmd = process.argv[2] ?? "serve";
|
|
41
|
-
if (cmd !== "serve") {
|
|
42
|
-
console.error("Usage: memorix-service serve");
|
|
43
|
-
process.exit(1);
|
|
44
|
-
}
|
|
48
|
+
export async function runCli(argv = process.argv.slice(2)) {
|
|
45
49
|
loadDotEnv();
|
|
46
|
-
const
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
50
|
+
const cmd = argv[0] ?? "serve";
|
|
51
|
+
if (cmd === "serve") {
|
|
52
|
+
const mode = (process.env.MEMORIX_SERVICE_MODE ?? "prod");
|
|
53
|
+
const mongoUri = loadMongoUri();
|
|
54
|
+
const { port, host } = await startMemorixServiceHttp({
|
|
55
|
+
mode,
|
|
56
|
+
mongoUri,
|
|
57
|
+
logger: true,
|
|
58
|
+
});
|
|
59
|
+
console.log(`memorix-service listening on http://${host}:${port} (mode=${mode})`);
|
|
60
|
+
return 0;
|
|
61
|
+
}
|
|
62
|
+
if (cmd === "catalog-store") {
|
|
63
|
+
return runCatalogStoreCommand(argv[1], argv.slice(2));
|
|
64
|
+
}
|
|
65
|
+
console.error(`Usage:
|
|
66
|
+
memorix-service serve
|
|
67
|
+
memorix-service catalog-store provision [--out <file>] [--force] [--package-type-id <id>]
|
|
68
|
+
memorix-service catalog-store verify
|
|
69
|
+
memorix-service catalog-store recover --store-id <id> [--out <file>]
|
|
70
|
+
memorix-service catalog-store list`);
|
|
71
|
+
return 1;
|
|
72
|
+
}
|
|
73
|
+
const entry = process.argv[1] ? pathToFileURL(resolve(process.argv[1])).href : "";
|
|
74
|
+
const isMain = entry !== "" && import.meta.url === entry;
|
|
75
|
+
if (isMain) {
|
|
76
|
+
runCli().then((code) => {
|
|
77
|
+
if (code !== 0)
|
|
78
|
+
process.exit(code);
|
|
79
|
+
}, (err) => {
|
|
80
|
+
const message = err instanceof ServiceError
|
|
81
|
+
? err.message
|
|
82
|
+
: err instanceof Error
|
|
83
|
+
? err.message
|
|
84
|
+
: String(err);
|
|
85
|
+
console.error(message);
|
|
86
|
+
process.exit(1);
|
|
52
87
|
});
|
|
53
|
-
console.log(`memorix-service listening on http://${host}:${port} (mode=${mode})`);
|
|
54
88
|
}
|
|
55
|
-
main().catch((err) => {
|
|
56
|
-
console.error(err);
|
|
57
|
-
process.exit(1);
|
|
58
|
-
});
|
|
59
89
|
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,uBAAuB,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { MongoClient } from "mongodb";
|
|
2
|
+
import { type McoAttemptStore } from "./types.js";
|
|
3
|
+
export declare function createMongoMcoAttemptStore(client: MongoClient, orgId: string): McoAttemptStore;
|
|
4
|
+
export declare function createInMemoryMcoAttemptStore(orgId: string): McoAttemptStore;
|
|
5
|
+
//# sourceMappingURL=attempt-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attempt-store.d.ts","sourceRoot":"","sources":["../../src/connector-ops/attempt-store.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAM,WAAW,EAAE,MAAM,SAAS,CAAC;AAE/C,OAAO,EAKL,KAAK,eAAe,EAKrB,MAAM,YAAY,CAAC;AAqGpB,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,WAAW,EACnB,KAAK,EAAE,MAAM,GACZ,eAAe,CA4EjB;AAED,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,MAAM,GAAG,eAAe,CA6C5E"}
|