@x12i/memorix-service 3.2.1 → 3.4.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.
Files changed (164) hide show
  1. package/README.md +61 -3
  2. package/dist/app.d.ts.map +1 -1
  3. package/dist/app.js +8 -0
  4. package/dist/app.js.map +1 -1
  5. package/dist/blob-store/config.d.ts +31 -0
  6. package/dist/blob-store/config.d.ts.map +1 -0
  7. package/dist/blob-store/config.js +68 -0
  8. package/dist/blob-store/config.js.map +1 -0
  9. package/dist/blob-store/disk.d.ts +10 -0
  10. package/dist/blob-store/disk.d.ts.map +1 -0
  11. package/dist/blob-store/disk.js +104 -0
  12. package/dist/blob-store/disk.js.map +1 -0
  13. package/dist/blob-store/index.d.ts +6 -0
  14. package/dist/blob-store/index.d.ts.map +1 -0
  15. package/dist/blob-store/index.js +6 -0
  16. package/dist/blob-store/index.js.map +1 -0
  17. package/dist/blob-store/memory.d.ts +4 -0
  18. package/dist/blob-store/memory.d.ts.map +1 -0
  19. package/dist/blob-store/memory.js +47 -0
  20. package/dist/blob-store/memory.js.map +1 -0
  21. package/dist/blob-store/s3.d.ts +52 -0
  22. package/dist/blob-store/s3.d.ts.map +1 -0
  23. package/dist/blob-store/s3.js +151 -0
  24. package/dist/blob-store/s3.js.map +1 -0
  25. package/dist/blob-store/types.d.ts +30 -0
  26. package/dist/blob-store/types.d.ts.map +1 -0
  27. package/dist/blob-store/types.js +38 -0
  28. package/dist/blob-store/types.js.map +1 -0
  29. package/dist/catalog/catalog-service.d.ts +48 -0
  30. package/dist/catalog/catalog-service.d.ts.map +1 -0
  31. package/dist/catalog/catalog-service.js +397 -0
  32. package/dist/catalog/catalog-service.js.map +1 -0
  33. package/dist/catalog/package-list-source.d.ts +35 -0
  34. package/dist/catalog/package-list-source.d.ts.map +1 -0
  35. package/dist/catalog/package-list-source.js +47 -0
  36. package/dist/catalog/package-list-source.js.map +1 -0
  37. package/dist/catalog/types.d.ts +65 -0
  38. package/dist/catalog/types.d.ts.map +1 -0
  39. package/dist/catalog/types.js +16 -0
  40. package/dist/catalog/types.js.map +1 -0
  41. package/dist/catalog-store-cli.d.ts +20 -0
  42. package/dist/catalog-store-cli.d.ts.map +1 -0
  43. package/dist/catalog-store-cli.js +237 -0
  44. package/dist/catalog-store-cli.js.map +1 -0
  45. package/dist/cli.d.ts +3 -1
  46. package/dist/cli.d.ts.map +1 -1
  47. package/dist/cli.js +48 -18
  48. package/dist/cli.js.map +1 -1
  49. package/dist/connector-ops/attempt-store.d.ts +5 -0
  50. package/dist/connector-ops/attempt-store.d.ts.map +1 -0
  51. package/dist/connector-ops/attempt-store.js +186 -0
  52. package/dist/connector-ops/attempt-store.js.map +1 -0
  53. package/dist/connector-ops/index.d.ts +5 -0
  54. package/dist/connector-ops/index.d.ts.map +1 -0
  55. package/dist/connector-ops/index.js +5 -0
  56. package/dist/connector-ops/index.js.map +1 -0
  57. package/dist/connector-ops/override-store.d.ts +7 -0
  58. package/dist/connector-ops/override-store.d.ts.map +1 -0
  59. package/dist/connector-ops/override-store.js +123 -0
  60. package/dist/connector-ops/override-store.js.map +1 -0
  61. package/dist/connector-ops/sanitize.d.ts +16 -0
  62. package/dist/connector-ops/sanitize.d.ts.map +1 -0
  63. package/dist/connector-ops/sanitize.js +48 -0
  64. package/dist/connector-ops/sanitize.js.map +1 -0
  65. package/dist/connector-ops/types.d.ts +76 -0
  66. package/dist/connector-ops/types.d.ts.map +1 -0
  67. package/dist/connector-ops/types.js +12 -0
  68. package/dist/connector-ops/types.js.map +1 -0
  69. package/dist/effective-listing.d.ts +11 -0
  70. package/dist/effective-listing.d.ts.map +1 -0
  71. package/dist/effective-listing.js +41 -0
  72. package/dist/effective-listing.js.map +1 -0
  73. package/dist/errors.d.ts +5 -1
  74. package/dist/errors.d.ts.map +1 -1
  75. package/dist/errors.js +10 -3
  76. package/dist/errors.js.map +1 -1
  77. package/dist/execution-target.d.ts +16 -0
  78. package/dist/execution-target.d.ts.map +1 -1
  79. package/dist/execution-target.js +54 -0
  80. package/dist/execution-target.js.map +1 -1
  81. package/dist/index.d.ts +6 -1
  82. package/dist/index.d.ts.map +1 -1
  83. package/dist/index.js +6 -1
  84. package/dist/index.js.map +1 -1
  85. package/dist/integrations/index.d.ts +3 -0
  86. package/dist/integrations/index.d.ts.map +1 -0
  87. package/dist/integrations/index.js +3 -0
  88. package/dist/integrations/index.js.map +1 -0
  89. package/dist/integrations/instance-store.d.ts +5 -0
  90. package/dist/integrations/instance-store.d.ts.map +1 -0
  91. package/dist/integrations/instance-store.js +327 -0
  92. package/dist/integrations/instance-store.js.map +1 -0
  93. package/dist/integrations/types.d.ts +92 -0
  94. package/dist/integrations/types.d.ts.map +1 -0
  95. package/dist/integrations/types.js +40 -0
  96. package/dist/integrations/types.js.map +1 -0
  97. package/dist/magit/magit-pack-service.d.ts +436 -70
  98. package/dist/magit/magit-pack-service.d.ts.map +1 -1
  99. package/dist/magit/magit-pack-service.js +949 -202
  100. package/dist/magit/magit-pack-service.js.map +1 -1
  101. package/dist/magit/pack-to-patchset.d.ts +21 -0
  102. package/dist/magit/pack-to-patchset.d.ts.map +1 -1
  103. package/dist/magit/pack-to-patchset.js +29 -0
  104. package/dist/magit/pack-to-patchset.js.map +1 -1
  105. package/dist/magit/package-catalog-bridge.d.ts +4 -14
  106. package/dist/magit/package-catalog-bridge.d.ts.map +1 -1
  107. package/dist/magit/package-catalog-bridge.js +2 -21
  108. package/dist/magit/package-catalog-bridge.js.map +1 -1
  109. package/dist/mgc-packages.d.ts +4 -3
  110. package/dist/mgc-packages.d.ts.map +1 -1
  111. package/dist/mgc-packages.js +4 -3
  112. package/dist/mgc-packages.js.map +1 -1
  113. package/dist/openapi/openapi.json +3060 -135
  114. package/dist/optional-companion-url.d.ts +72 -0
  115. package/dist/optional-companion-url.d.ts.map +1 -0
  116. package/dist/optional-companion-url.js +148 -0
  117. package/dist/optional-companion-url.js.map +1 -0
  118. package/dist/platform.d.ts +29 -0
  119. package/dist/platform.d.ts.map +1 -1
  120. package/dist/platform.js +138 -2
  121. package/dist/platform.js.map +1 -1
  122. package/dist/restricted-store/crypto.d.ts +10 -0
  123. package/dist/restricted-store/crypto.d.ts.map +1 -0
  124. package/dist/restricted-store/crypto.js +43 -0
  125. package/dist/restricted-store/crypto.js.map +1 -0
  126. package/dist/restricted-store/index.d.ts +4 -0
  127. package/dist/restricted-store/index.d.ts.map +1 -0
  128. package/dist/restricted-store/index.js +4 -0
  129. package/dist/restricted-store/index.js.map +1 -0
  130. package/dist/restricted-store/object-store.d.ts +12 -0
  131. package/dist/restricted-store/object-store.d.ts.map +1 -0
  132. package/dist/restricted-store/object-store.js +233 -0
  133. package/dist/restricted-store/object-store.js.map +1 -0
  134. package/dist/restricted-store/types.d.ts +78 -0
  135. package/dist/restricted-store/types.d.ts.map +1 -0
  136. package/dist/restricted-store/types.js +12 -0
  137. package/dist/restricted-store/types.js.map +1 -0
  138. package/dist/routes/catalog.d.ts +4 -0
  139. package/dist/routes/catalog.d.ts.map +1 -0
  140. package/dist/routes/catalog.js +103 -0
  141. package/dist/routes/catalog.js.map +1 -0
  142. package/dist/routes/connector-ops.d.ts +12 -0
  143. package/dist/routes/connector-ops.d.ts.map +1 -0
  144. package/dist/routes/connector-ops.js +160 -0
  145. package/dist/routes/connector-ops.js.map +1 -0
  146. package/dist/routes/integrations.d.ts +5 -0
  147. package/dist/routes/integrations.d.ts.map +1 -0
  148. package/dist/routes/integrations.js +126 -0
  149. package/dist/routes/integrations.js.map +1 -0
  150. package/dist/routes/memory.d.ts.map +1 -1
  151. package/dist/routes/memory.js +9 -2
  152. package/dist/routes/memory.js.map +1 -1
  153. package/dist/routes/metadata.d.ts.map +1 -1
  154. package/dist/routes/metadata.js +459 -186
  155. package/dist/routes/metadata.js.map +1 -1
  156. package/dist/routes/pipelines.d.ts.map +1 -1
  157. package/dist/routes/pipelines.js +3 -2
  158. package/dist/routes/pipelines.js.map +1 -1
  159. package/dist/routes/restricted-store.d.ts +5 -0
  160. package/dist/routes/restricted-store.d.ts.map +1 -0
  161. package/dist/routes/restricted-store.js +117 -0
  162. package/dist/routes/restricted-store.js.map +1 -0
  163. package/openapi/openapi.json +3060 -135
  164. package/package.json +31 -7
@@ -0,0 +1,237 @@
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, DEFAULT_TYPED_STORE_ALLOWED_KINDS, 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>
103
+ [--force] [--package-type-id <id>]
104
+ --allowed-kinds agent,connector,service,agent-bundle
105
+ | --confirm-allowed-kinds (accept default kinds above)
106
+ memorix-service catalog-store verify
107
+ memorix-service catalog-store recover --store-id <id> --out <file>
108
+ memorix-service catalog-store list
109
+
110
+ allowedKinds is write-once on createGlobalStore — a forgotten kind needs a second store.
111
+ Secrets (MAGIT_PACKAGE_STORE_SELECTOR, tokens) are never printed on stdout.
112
+ Provision/recover write selector lines to --out with mode 0600.`);
113
+ return 1;
114
+ }
115
+ catch (err) {
116
+ const message = err instanceof ServiceError
117
+ ? err.message
118
+ : err instanceof Error
119
+ ? err.message
120
+ : String(err);
121
+ io.error(message);
122
+ return 1;
123
+ }
124
+ }
125
+ async function provision(argv, deps) {
126
+ const out = parseFlag(argv, "--out");
127
+ if (!out) {
128
+ deps.io.error("provision requires --out <file> so the selector is never printed on stdout");
129
+ return 2;
130
+ }
131
+ const force = hasFlag(argv, "--force");
132
+ const packageTypeId = parseFlag(argv, "--package-type-id");
133
+ const allowedKindsRaw = parseFlag(argv, "--allowed-kinds");
134
+ const confirmDefault = hasFlag(argv, "--confirm-allowed-kinds");
135
+ let allowedKinds;
136
+ if (allowedKindsRaw) {
137
+ allowedKinds = allowedKindsRaw
138
+ .split(",")
139
+ .map((k) => k.trim())
140
+ .filter(Boolean);
141
+ if (allowedKinds.length === 0) {
142
+ deps.io.error("--allowed-kinds must list at least one kind");
143
+ return 2;
144
+ }
145
+ }
146
+ else if (confirmDefault) {
147
+ allowedKinds = [...DEFAULT_TYPED_STORE_ALLOWED_KINDS];
148
+ }
149
+ else {
150
+ deps.io.error([
151
+ "provision freezes allowedKinds forever on the Magit store (write-once).",
152
+ `Default would be: ${DEFAULT_TYPED_STORE_ALLOWED_KINDS.join(",")}`,
153
+ "Pass --allowed-kinds agent,connector,... OR --confirm-allowed-kinds to accept the default.",
154
+ ].join("\n"));
155
+ return 2;
156
+ }
157
+ const magitSvc = deps.createMagit();
158
+ const result = await magitSvc.provisionTypedPackageStore({
159
+ packageTypeId: packageTypeId || undefined,
160
+ allowedKinds,
161
+ force,
162
+ });
163
+ deps.writeSecretEnvFile(out, publisherEnv(result));
164
+ const abs = resolve(out);
165
+ deps.io.error(`[catalog-store] wrote secrets to ${abs} (mode 0600)`);
166
+ deps.io.error("[catalog-store] stdout contains no secrets — only next steps");
167
+ deps.io.log(JSON.stringify({
168
+ ok: true,
169
+ action: "provision",
170
+ packageTypeId: result.packageTypeId,
171
+ storeId: result.storeId,
172
+ allowedKinds: result.allowedKinds,
173
+ pushed: result.pushed,
174
+ existingStoreCount: result.existingStoreCount,
175
+ secretsFile: abs,
176
+ next: [
177
+ `Install ${out} into the service secret env (never commit).`,
178
+ "Set MAGIT_CATALOG_TENANT=x12i MAGIT_CATALOG_REPO=memorix (defaults).",
179
+ "Mint Authix store grants: publisher write + consumer read (repoIds empty on consumer).",
180
+ "Run: memorix-service catalog-store verify",
181
+ "Optional: node scripts/magit-backfill-pack-catalog.mjs",
182
+ ],
183
+ }, null, 2));
184
+ return 0;
185
+ }
186
+ async function verify(deps) {
187
+ const magitSvc = deps.createMagit();
188
+ const result = await magitSvc.verifyTypedPackageStore();
189
+ deps.io.log(JSON.stringify({
190
+ ok: true,
191
+ action: "verify",
192
+ mode: result.mode,
193
+ packageTypeId: result.packageTypeId,
194
+ reachable: result.reachable,
195
+ selectorConfigured: Boolean(process.env.MAGIT_PACKAGE_STORE_SELECTOR?.trim()),
196
+ }, null, 2));
197
+ return 0;
198
+ }
199
+ async function recover(argv, deps) {
200
+ const storeId = parseFlag(argv, "--store-id");
201
+ if (!storeId) {
202
+ deps.io.error("recover requires --store-id <id>");
203
+ return 2;
204
+ }
205
+ const out = parseFlag(argv, "--out");
206
+ if (!out) {
207
+ deps.io.error("recover requires --out <file> so the new selector is never printed on stdout");
208
+ return 2;
209
+ }
210
+ const magitSvc = deps.createMagit();
211
+ const result = await magitSvc.recoverStoreSelector({ storeId });
212
+ deps.writeSecretEnvFile(out, publisherEnv(result));
213
+ const abs = resolve(out);
214
+ deps.io.error(`[catalog-store] wrote secrets to ${abs} (mode 0600)`);
215
+ deps.io.error("[catalog-store] stdout contains no secrets — only next steps");
216
+ deps.io.log(JSON.stringify({
217
+ ok: true,
218
+ action: "recover",
219
+ packageTypeId: result.packageTypeId,
220
+ storeId: result.storeId,
221
+ pushed: result.pushed,
222
+ secretsFile: abs,
223
+ next: [
224
+ "Rotate installed MAGIT_PACKAGE_STORE_SELECTOR to the new secret file.",
225
+ "Re-mint consumer tokens if they relied on the revoked selector.",
226
+ "Run: memorix-service catalog-store verify",
227
+ ],
228
+ }, null, 2));
229
+ return 0;
230
+ }
231
+ async function list(deps) {
232
+ const magitSvc = deps.createMagit();
233
+ const stores = await magitSvc.listPackageStores();
234
+ deps.io.log(JSON.stringify({ ok: true, action: "list", count: stores.length, stores }, null, 2));
235
+ return 0;
236
+ }
237
+ //# 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":"AAAA;;;GAGG;AACH,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC9D,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EACL,sBAAsB,EACtB,iCAAiC,EACjC,sBAAsB,EACtB,0BAA0B,EAC1B,2BAA2B,GAE5B,MAAM,+BAA+B,CAAC;AAavC,MAAM,UAAU,SAAS,CAAC,IAAc,EAAE,IAAY;IACpD,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7B,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,SAAS,CAAC;IAC5B,OAAO,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,IAAc,EAAE,IAAY;IAClD,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,uBAAuB;IACrC,IAAI,CAAC,sBAAsB,EAAE,EAAE,CAAC;QAC9B,MAAM,IAAI,YAAY,CACpB,YAAY,EACZ,wEAAwE,EACxE,GAAG,CACJ,CAAC;IACJ,CAAC;IACD,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC;IAC/C,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,YAAY,CACpB,YAAY,EACZ,kDAAkD,EAClD,GAAG,CACJ,CAAC;IACJ,CAAC;IACD,MAAM,QAAQ,GAAG,2BAA2B,EAAE,CAAC;IAC/C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC;QACnC,MAAM,IAAI,YAAY,CACpB,YAAY,EACZ,qBAAqB,QAAQ,qDAAqD,EAClF,GAAG,CACJ,CAAC;IACJ,CAAC;IACD,MAAM,UAAU,GACd,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,IAAI,EAAE;QACvC,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,IAAI,EAAE;QACtC,kBAAkB,CAAC;IACrB,OAAO,sBAAsB,CAAC;QAC5B,cAAc,EAAE,0BAA0B,EAAE;QAC5C,WAAW,EAAE,WAAW;QACxB,QAAQ;QACR,UAAU;QACV,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,IAAI,EAAE,IAAI,SAAS;QAC9D,eAAe,EAAE,QAAQ;QACzB,GAAG,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;YAClB,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CACpC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,iCAAiC,CAAC,IAAI,CAAC,CAAC,CAAC,CAClD,CAAC;gBACF,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAClD,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACrB,CAAC;QACH,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,OAAe,EAAE,GAA2B;IAC7E,MAAM,KAAK,GAAG;QACZ,8DAA8D;QAC9D,wEAAwE;QACxE,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;KACpD,CAAC;IACF,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC7B,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7C,aAAa,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC/E,IAAI,CAAC;QACH,SAAS,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACxB,CAAC;IAAC,MAAM,CAAC;QACP,4CAA4C;IAC9C,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAC,OAAmC;IACtD,OAAO;QACL,WAAW,EAAE,OAAO,EAAE,WAAW,IAAI,uBAAuB;QAC5D,kBAAkB,EAAE,OAAO,EAAE,kBAAkB,IAAI,kBAAkB;QACrE,EAAE,EAAE,OAAO,EAAE,EAAE,IAAI;YACjB,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;YAChC,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC;SACrC;KACF,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,MAGrB;IACC,OAAO;QACL,qBAAqB,EAAE,MAAM,CAAC,aAAa;QAC3C,4BAA4B,EAAE,MAAM,CAAC,aAAa;QAClD,0BAA0B,EACxB,OAAO,CAAC,GAAG,CAAC,0BAA0B,EAAE,IAAI,EAAE,IAAI,SAAS;QAC7D,8BAA8B,EAC5B,OAAO,CAAC,GAAG,CAAC,8BAA8B,EAAE,IAAI,EAAE,IAAI,iBAAiB;KAC1E,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,GAAuB,EACvB,IAAc,EACd,WAAuC;IAEvC,MAAM,IAAI,GAAG,WAAW,CAAC,WAAW,CAAC,CAAC;IACtC,MAAM,EAAE,EAAE,EAAE,GAAG,IAAI,CAAC;IAEpB,IAAI,CAAC;QACH,IAAI,GAAG,KAAK,WAAW;YAAE,OAAO,MAAM,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC5D,IAAI,GAAG,KAAK,QAAQ;YAAE,OAAO,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;QAChD,IAAI,GAAG,KAAK,SAAS;YAAE,OAAO,MAAM,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACxD,IAAI,GAAG,KAAK,MAAM;YAAE,OAAO,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5C,EAAE,CAAC,KAAK,CAAC;;;;;;;;;;;gEAWmD,CAAC,CAAC;QAC9D,OAAO,CAAC,CAAC;IACX,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,OAAO,GACX,GAAG,YAAY,YAAY;YACzB,CAAC,CAAC,GAAG,CAAC,OAAO;YACb,CAAC,CAAC,GAAG,YAAY,KAAK;gBACpB,CAAC,CAAC,GAAG,CAAC,OAAO;gBACb,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACpB,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAClB,OAAO,CAAC,CAAC;IACX,CAAC;AACH,CAAC;AAED,KAAK,UAAU,SAAS,CACtB,IAAc,EACd,IAAsB;IAEtB,MAAM,GAAG,GAAG,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACrC,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,IAAI,CAAC,EAAE,CAAC,KAAK,CACX,4EAA4E,CAC7E,CAAC;QACF,OAAO,CAAC,CAAC;IACX,CAAC;IACD,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IACvC,MAAM,aAAa,GAAG,SAAS,CAAC,IAAI,EAAE,mBAAmB,CAAC,CAAC;IAC3D,MAAM,eAAe,GAAG,SAAS,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAC;IAC3D,MAAM,cAAc,GAAG,OAAO,CAAC,IAAI,EAAE,yBAAyB,CAAC,CAAC;IAChE,IAAI,YAAkC,CAAC;IACvC,IAAI,eAAe,EAAE,CAAC;QACpB,YAAY,GAAG,eAAe;aAC3B,KAAK,CAAC,GAAG,CAAC;aACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;aACpB,MAAM,CAAC,OAAO,CAAC,CAAC;QACnB,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC9B,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,6CAA6C,CAAC,CAAC;YAC7D,OAAO,CAAC,CAAC;QACX,CAAC;IACH,CAAC;SAAM,IAAI,cAAc,EAAE,CAAC;QAC1B,YAAY,GAAG,CAAC,GAAG,iCAAiC,CAAC,CAAC;IACxD,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,EAAE,CAAC,KAAK,CACX;YACE,yEAAyE;YACzE,qBAAqB,iCAAiC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;YAClE,4FAA4F;SAC7F,CAAC,IAAI,CAAC,IAAI,CAAC,CACb,CAAC;QACF,OAAO,CAAC,CAAC;IACX,CAAC;IACD,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IACpC,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,0BAA0B,CAAC;QACvD,aAAa,EAAE,aAAa,IAAI,SAAS;QACzC,YAAY;QACZ,KAAK;KACN,CAAC,CAAC;IACH,IAAI,CAAC,kBAAkB,CAAC,GAAG,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;IACnD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IACzB,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,oCAAoC,GAAG,cAAc,CAAC,CAAC;IACrE,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,8DAA8D,CAAC,CAAC;IAC9E,IAAI,CAAC,EAAE,CAAC,GAAG,CACT,IAAI,CAAC,SAAS,CACZ;QACE,EAAE,EAAE,IAAI;QACR,MAAM,EAAE,WAAW;QACnB,aAAa,EAAE,MAAM,CAAC,aAAa;QACnC,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,kBAAkB,EAAE,MAAM,CAAC,kBAAkB;QAC7C,WAAW,EAAE,GAAG;QAChB,IAAI,EAAE;YACJ,WAAW,GAAG,8CAA8C;YAC5D,sEAAsE;YACtE,wFAAwF;YACxF,2CAA2C;YAC3C,wDAAwD;SACzD;KACF,EACD,IAAI,EACJ,CAAC,CACF,CACF,CAAC;IACF,OAAO,CAAC,CAAC;AACX,CAAC;AAED,KAAK,UAAU,MAAM,CAAC,IAAsB;IAC1C,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IACpC,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,uBAAuB,EAAE,CAAC;IACxD,IAAI,CAAC,EAAE,CAAC,GAAG,CACT,IAAI,CAAC,SAAS,CACZ;QACE,EAAE,EAAE,IAAI;QACR,MAAM,EAAE,QAAQ;QAChB,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,aAAa,EAAE,MAAM,CAAC,aAAa;QACnC,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,kBAAkB,EAAE,OAAO,CACzB,OAAO,CAAC,GAAG,CAAC,4BAA4B,EAAE,IAAI,EAAE,CACjD;KACF,EACD,IAAI,EACJ,CAAC,CACF,CACF,CAAC;IACF,OAAO,CAAC,CAAC;AACX,CAAC;AAED,KAAK,UAAU,OAAO,CACpB,IAAc,EACd,IAAsB;IAEtB,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IAC9C,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;QAClD,OAAO,CAAC,CAAC;IACX,CAAC;IACD,MAAM,GAAG,GAAG,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACrC,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,IAAI,CAAC,EAAE,CAAC,KAAK,CACX,8EAA8E,CAC/E,CAAC;QACF,OAAO,CAAC,CAAC;IACX,CAAC;IACD,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IACpC,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,oBAAoB,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;IAChE,IAAI,CAAC,kBAAkB,CAAC,GAAG,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;IACnD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IACzB,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,oCAAoC,GAAG,cAAc,CAAC,CAAC;IACrE,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,8DAA8D,CAAC,CAAC;IAC9E,IAAI,CAAC,EAAE,CAAC,GAAG,CACT,IAAI,CAAC,SAAS,CACZ;QACE,EAAE,EAAE,IAAI;QACR,MAAM,EAAE,SAAS;QACjB,aAAa,EAAE,MAAM,CAAC,aAAa;QACnC,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,WAAW,EAAE,GAAG;QAChB,IAAI,EAAE;YACJ,uEAAuE;YACvE,iEAAiE;YACjE,2CAA2C;SAC5C;KACF,EACD,IAAI,EACJ,CAAC,CACF,CACF,CAAC;IACF,OAAO,CAAC,CAAC;AACX,CAAC;AAED,KAAK,UAAU,IAAI,CAAC,IAAsB;IACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IACpC,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,iBAAiB,EAAE,CAAC;IAClD,IAAI,CAAC,EAAE,CAAC,GAAG,CACT,IAAI,CAAC,SAAS,CACZ,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,EAC1D,IAAI,EACJ,CAAC,CACF,CACF,CAAC;IACF,OAAO,CAAC,CAAC;AACX,CAAC"}
package/dist/cli.d.ts CHANGED
@@ -1,3 +1,5 @@
1
1
  #!/usr/bin/env node
2
- export {};
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 main() {
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 mode = (process.env.MEMORIX_SERVICE_MODE ?? "prod");
47
- const mongoUri = loadMongoUri();
48
- const { port, host } = await startMemorixServiceHttp({
49
- mode,
50
- mongoUri,
51
- logger: true,
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":"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"}
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"}
@@ -0,0 +1,186 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { sanitizeErrorText } from "./sanitize.js";
3
+ import { MCO_ATTEMPTS_DEFAULT_LIMIT, MCO_ATTEMPTS_MAX_LIMIT, MCO_COLLECTIONS, MCO_RECENT_CAP, } from "./types.js";
4
+ function operationalDbName(orgId) {
5
+ return `${orgId}_operational`;
6
+ }
7
+ function clampLimit(raw) {
8
+ const n = raw ?? MCO_ATTEMPTS_DEFAULT_LIMIT;
9
+ if (!Number.isFinite(n) || n < 1)
10
+ return MCO_ATTEMPTS_DEFAULT_LIMIT;
11
+ return Math.min(Math.floor(n), MCO_ATTEMPTS_MAX_LIMIT);
12
+ }
13
+ function emptyStats(orgId, connectorId, opId) {
14
+ return {
15
+ orgId,
16
+ connectorId,
17
+ opId,
18
+ attemptCount: 0,
19
+ okCount: 0,
20
+ failCount: 0,
21
+ skipCount: 0,
22
+ disabledCount: 0,
23
+ lastSuccessAt: null,
24
+ lastFailAt: null,
25
+ lastAttemptAt: null,
26
+ lastStatus: null,
27
+ recent: [],
28
+ };
29
+ }
30
+ function rollStats(prev, attempt) {
31
+ const recent = [
32
+ {
33
+ at: attempt.at,
34
+ status: attempt.status,
35
+ httpStatus: attempt.httpStatus,
36
+ error: attempt.error,
37
+ durationMs: attempt.durationMs,
38
+ runId: attempt.runId,
39
+ source: attempt.source,
40
+ attemptId: attempt.attemptId,
41
+ },
42
+ ...(prev.recent ?? []),
43
+ ].slice(0, MCO_RECENT_CAP);
44
+ const next = {
45
+ ...prev,
46
+ attemptCount: prev.attemptCount + 1,
47
+ okCount: prev.okCount + (attempt.status === "ok" ? 1 : 0),
48
+ failCount: prev.failCount + (attempt.status === "fail" ? 1 : 0),
49
+ skipCount: prev.skipCount + (attempt.status === "skip" ? 1 : 0),
50
+ disabledCount: prev.disabledCount + (attempt.status === "disabled" ? 1 : 0),
51
+ lastAttemptAt: attempt.at,
52
+ lastStatus: attempt.status,
53
+ lastSuccessAt: attempt.status === "ok" ? attempt.at : (prev.lastSuccessAt ?? null),
54
+ lastFailAt: attempt.status === "fail" ? attempt.at : (prev.lastFailAt ?? null),
55
+ recent,
56
+ };
57
+ return next;
58
+ }
59
+ function normalizeAttemptInput(input) {
60
+ const status = input.status;
61
+ if (!["ok", "fail", "skip", "disabled"].includes(status)) {
62
+ throw new Error("status must be ok|fail|skip|disabled");
63
+ }
64
+ const at = typeof input.at === "string" && input.at.trim()
65
+ ? input.at.trim()
66
+ : new Date().toISOString();
67
+ return {
68
+ at,
69
+ status,
70
+ ...(input.httpStatus != null ? { httpStatus: Number(input.httpStatus) } : {}),
71
+ ...(input.error != null
72
+ ? { error: sanitizeErrorText(String(input.error)) }
73
+ : {}),
74
+ ...(input.durationMs != null
75
+ ? { durationMs: Number(input.durationMs) }
76
+ : {}),
77
+ ...(input.runId != null ? { runId: String(input.runId).slice(0, 200) } : {}),
78
+ ...(input.source != null
79
+ ? { source: String(input.source).slice(0, 200) }
80
+ : {}),
81
+ };
82
+ }
83
+ function stripMongo(doc) {
84
+ const { _id: _drop, ...rest } = doc;
85
+ return rest;
86
+ }
87
+ export function createMongoMcoAttemptStore(client, orgId) {
88
+ const db = client.db(operationalDbName(orgId));
89
+ const attempts = () => db.collection(MCO_COLLECTIONS.attempts);
90
+ const statsCol = () => db.collection(MCO_COLLECTIONS.stats);
91
+ let indexesReady = null;
92
+ const ensureIndexes = async () => {
93
+ if (!indexesReady) {
94
+ indexesReady = (async () => {
95
+ await attempts().createIndex({ connectorId: 1, opId: 1, at: -1 }, { name: "mco_attempt_connector_op_at" });
96
+ await attempts().createIndex({ attemptId: 1 }, { unique: true, name: "mco_attempt_id_unique" });
97
+ await statsCol().createIndex({ connectorId: 1, opId: 1 }, { unique: true, name: "mco_stats_connector_op_unique" });
98
+ await statsCol().createIndex({ connectorId: 1 }, { name: "mco_stats_connector" });
99
+ })();
100
+ }
101
+ await indexesReady;
102
+ };
103
+ return {
104
+ async recordAttempt(connectorId, opId, input) {
105
+ await ensureIndexes();
106
+ const normalized = normalizeAttemptInput(input);
107
+ const attempt = {
108
+ orgId,
109
+ connectorId,
110
+ opId,
111
+ attemptId: randomUUID(),
112
+ ...normalized,
113
+ };
114
+ await attempts().insertOne(attempt);
115
+ const existing = (await statsCol().findOne({ connectorId, opId })) ??
116
+ emptyStats(orgId, connectorId, opId);
117
+ const next = rollStats(stripMongo(existing), attempt);
118
+ await statsCol().replaceOne({ connectorId, opId }, next, { upsert: true });
119
+ return attempt;
120
+ },
121
+ async getStats(connectorId, opId) {
122
+ await ensureIndexes();
123
+ const doc = await statsCol().findOne({ connectorId, opId });
124
+ return doc ? stripMongo(doc) : null;
125
+ },
126
+ async listStats(connectorId) {
127
+ await ensureIndexes();
128
+ const rows = await statsCol().find({ connectorId }).toArray();
129
+ return rows
130
+ .map(stripMongo)
131
+ .sort((a, b) => a.opId.localeCompare(b.opId));
132
+ },
133
+ async listAttempts(connectorId, opId, opts) {
134
+ await ensureIndexes();
135
+ const limit = clampLimit(opts?.limit);
136
+ const rows = await attempts()
137
+ .find({ connectorId, opId })
138
+ .sort({ at: -1 })
139
+ .limit(limit)
140
+ .toArray();
141
+ return rows.map(stripMongo);
142
+ },
143
+ };
144
+ }
145
+ export function createInMemoryMcoAttemptStore(orgId) {
146
+ const attempts = [];
147
+ const stats = new Map();
148
+ const sk = (c, o) => `${c}\0${o}`;
149
+ return {
150
+ async recordAttempt(connectorId, opId, input) {
151
+ const normalized = normalizeAttemptInput(input);
152
+ const attempt = {
153
+ orgId,
154
+ connectorId,
155
+ opId,
156
+ attemptId: randomUUID(),
157
+ ...normalized,
158
+ };
159
+ attempts.push(attempt);
160
+ const prev = stats.get(sk(connectorId, opId)) ??
161
+ emptyStats(orgId, connectorId, opId);
162
+ stats.set(sk(connectorId, opId), rollStats(prev, attempt));
163
+ return { ...attempt };
164
+ },
165
+ async getStats(connectorId, opId) {
166
+ const s = stats.get(sk(connectorId, opId));
167
+ return s ? structuredClone(s) : null;
168
+ },
169
+ async listStats(connectorId) {
170
+ return [...stats.values()]
171
+ .filter((s) => s.connectorId === connectorId)
172
+ .map((s) => structuredClone(s))
173
+ .sort((a, b) => a.opId.localeCompare(b.opId));
174
+ },
175
+ async listAttempts(connectorId, opId, opts) {
176
+ const limit = clampLimit(opts?.limit);
177
+ return attempts
178
+ .filter((a) => a.connectorId === connectorId && a.opId === opId)
179
+ .slice()
180
+ .sort((a, b) => b.at.localeCompare(a.at))
181
+ .slice(0, limit)
182
+ .map((a) => ({ ...a }));
183
+ },
184
+ };
185
+ }
186
+ //# sourceMappingURL=attempt-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attempt-store.js","sourceRoot":"","sources":["../../src/connector-ops/attempt-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export * from "./types.js";
2
+ export * from "./sanitize.js";
3
+ export { createInMemoryMcoOverrideStore, createMongoMcoOverrideStore, isOverrideActive, validateSetOverride, } from "./override-store.js";
4
+ export { createInMemoryMcoAttemptStore, createMongoMcoAttemptStore, } from "./attempt-store.js";
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/connector-ops/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,OAAO,EACL,8BAA8B,EAC9B,2BAA2B,EAC3B,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,6BAA6B,EAC7B,0BAA0B,GAC3B,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,5 @@
1
+ export * from "./types.js";
2
+ export * from "./sanitize.js";
3
+ export { createInMemoryMcoOverrideStore, createMongoMcoOverrideStore, isOverrideActive, validateSetOverride, } from "./override-store.js";
4
+ export { createInMemoryMcoAttemptStore, createMongoMcoAttemptStore, } from "./attempt-store.js";
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/connector-ops/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,OAAO,EACL,8BAA8B,EAC9B,2BAA2B,EAC3B,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,6BAA6B,EAC7B,0BAA0B,GAC3B,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { MongoClient } from "mongodb";
2
+ import { type McoOverrideStore, type OpOverride, type SetOpOverride } from "./types.js";
3
+ export declare function isOverrideActive(doc: OpOverride, nowIso?: string): boolean;
4
+ export declare function validateSetOverride(body: SetOpOverride): void;
5
+ export declare function createMongoMcoOverrideStore(client: MongoClient, orgId: string): McoOverrideStore;
6
+ export declare function createInMemoryMcoOverrideStore(orgId: string): McoOverrideStore;
7
+ //# sourceMappingURL=override-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"override-store.d.ts","sourceRoot":"","sources":["../../src/connector-ops/override-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAM,WAAW,EAAE,MAAM,SAAS,CAAC;AAC/C,OAAO,EAAmB,KAAK,gBAAgB,EAAE,KAAK,UAAU,EAAE,KAAK,aAAa,EAAE,MAAM,YAAY,CAAC;AAEzG,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,UAAU,EACf,MAAM,SAA2B,GAChC,OAAO,CAGT;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI,CAU7D;AAMD,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,WAAW,EACnB,KAAK,EAAE,MAAM,GACZ,gBAAgB,CAmElB;AAED,wBAAgB,8BAA8B,CAAC,KAAK,EAAE,MAAM,GAAG,gBAAgB,CA2C9E"}