@x12i/memorix-service 3.2.0 → 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.
Files changed (116) hide show
  1. package/README.md +43 -2
  2. package/dist/app.d.ts.map +1 -1
  3. package/dist/app.js +4 -0
  4. package/dist/app.js.map +1 -1
  5. package/dist/catalog/catalog-service.d.ts +48 -0
  6. package/dist/catalog/catalog-service.d.ts.map +1 -0
  7. package/dist/catalog/catalog-service.js +397 -0
  8. package/dist/catalog/catalog-service.js.map +1 -0
  9. package/dist/catalog/package-list-source.d.ts +35 -0
  10. package/dist/catalog/package-list-source.d.ts.map +1 -0
  11. package/dist/catalog/package-list-source.js +47 -0
  12. package/dist/catalog/package-list-source.js.map +1 -0
  13. package/dist/catalog/types.d.ts +65 -0
  14. package/dist/catalog/types.d.ts.map +1 -0
  15. package/dist/catalog/types.js +16 -0
  16. package/dist/catalog/types.js.map +1 -0
  17. package/dist/catalog-store-cli.d.ts +20 -0
  18. package/dist/catalog-store-cli.d.ts.map +1 -0
  19. package/dist/catalog-store-cli.js +206 -0
  20. package/dist/catalog-store-cli.js.map +1 -0
  21. package/dist/cli.d.ts +3 -1
  22. package/dist/cli.d.ts.map +1 -1
  23. package/dist/cli.js +48 -18
  24. package/dist/cli.js.map +1 -1
  25. package/dist/connector-catalog.d.ts +11 -0
  26. package/dist/connector-catalog.d.ts.map +1 -1
  27. package/dist/connector-catalog.js +28 -0
  28. package/dist/connector-catalog.js.map +1 -1
  29. package/dist/connector-ops/attempt-store.d.ts +5 -0
  30. package/dist/connector-ops/attempt-store.d.ts.map +1 -0
  31. package/dist/connector-ops/attempt-store.js +186 -0
  32. package/dist/connector-ops/attempt-store.js.map +1 -0
  33. package/dist/connector-ops/index.d.ts +5 -0
  34. package/dist/connector-ops/index.d.ts.map +1 -0
  35. package/dist/connector-ops/index.js +5 -0
  36. package/dist/connector-ops/index.js.map +1 -0
  37. package/dist/connector-ops/override-store.d.ts +7 -0
  38. package/dist/connector-ops/override-store.d.ts.map +1 -0
  39. package/dist/connector-ops/override-store.js +123 -0
  40. package/dist/connector-ops/override-store.js.map +1 -0
  41. package/dist/connector-ops/sanitize.d.ts +16 -0
  42. package/dist/connector-ops/sanitize.d.ts.map +1 -0
  43. package/dist/connector-ops/sanitize.js +48 -0
  44. package/dist/connector-ops/sanitize.js.map +1 -0
  45. package/dist/connector-ops/types.d.ts +76 -0
  46. package/dist/connector-ops/types.d.ts.map +1 -0
  47. package/dist/connector-ops/types.js +12 -0
  48. package/dist/connector-ops/types.js.map +1 -0
  49. package/dist/effective-listing.d.ts +11 -0
  50. package/dist/effective-listing.d.ts.map +1 -0
  51. package/dist/effective-listing.js +41 -0
  52. package/dist/effective-listing.js.map +1 -0
  53. package/dist/errors.d.ts +5 -1
  54. package/dist/errors.d.ts.map +1 -1
  55. package/dist/errors.js +10 -3
  56. package/dist/errors.js.map +1 -1
  57. package/dist/execution-target.d.ts +16 -0
  58. package/dist/execution-target.d.ts.map +1 -1
  59. package/dist/execution-target.js +54 -0
  60. package/dist/execution-target.js.map +1 -1
  61. package/dist/generic-connectors.d.ts +7 -5
  62. package/dist/generic-connectors.d.ts.map +1 -1
  63. package/dist/generic-connectors.js +44 -4
  64. package/dist/generic-connectors.js.map +1 -1
  65. package/dist/index.d.ts +3 -1
  66. package/dist/index.d.ts.map +1 -1
  67. package/dist/index.js +3 -1
  68. package/dist/index.js.map +1 -1
  69. package/dist/magit/magit-pack-service.d.ts +262 -0
  70. package/dist/magit/magit-pack-service.d.ts.map +1 -1
  71. package/dist/magit/magit-pack-service.js +585 -9
  72. package/dist/magit/magit-pack-service.js.map +1 -1
  73. package/dist/magit/pack-to-patchset.d.ts +37 -0
  74. package/dist/magit/pack-to-patchset.d.ts.map +1 -1
  75. package/dist/magit/pack-to-patchset.js +75 -0
  76. package/dist/magit/pack-to-patchset.js.map +1 -1
  77. package/dist/magit/package-catalog-bridge.d.ts +3 -13
  78. package/dist/magit/package-catalog-bridge.d.ts.map +1 -1
  79. package/dist/magit/package-catalog-bridge.js +0 -19
  80. package/dist/magit/package-catalog-bridge.js.map +1 -1
  81. package/dist/mgc-packages.d.ts +12 -0
  82. package/dist/mgc-packages.d.ts.map +1 -0
  83. package/dist/mgc-packages.js +12 -0
  84. package/dist/mgc-packages.js.map +1 -0
  85. package/dist/openapi/openapi.json +1716 -137
  86. package/dist/optional-companion-url.d.ts +72 -0
  87. package/dist/optional-companion-url.d.ts.map +1 -0
  88. package/dist/optional-companion-url.js +148 -0
  89. package/dist/optional-companion-url.js.map +1 -0
  90. package/dist/pipeline-compile.d.ts +11 -2
  91. package/dist/pipeline-compile.d.ts.map +1 -1
  92. package/dist/pipeline-compile.js +64 -19
  93. package/dist/pipeline-compile.js.map +1 -1
  94. package/dist/platform.d.ts +11 -0
  95. package/dist/platform.d.ts.map +1 -1
  96. package/dist/platform.js +87 -3
  97. package/dist/platform.js.map +1 -1
  98. package/dist/routes/catalog.d.ts +4 -0
  99. package/dist/routes/catalog.d.ts.map +1 -0
  100. package/dist/routes/catalog.js +103 -0
  101. package/dist/routes/catalog.js.map +1 -0
  102. package/dist/routes/connector-ops.d.ts +12 -0
  103. package/dist/routes/connector-ops.d.ts.map +1 -0
  104. package/dist/routes/connector-ops.js +160 -0
  105. package/dist/routes/connector-ops.js.map +1 -0
  106. package/dist/routes/memory.d.ts.map +1 -1
  107. package/dist/routes/memory.js +14 -2
  108. package/dist/routes/memory.js.map +1 -1
  109. package/dist/routes/metadata.d.ts.map +1 -1
  110. package/dist/routes/metadata.js +146 -66
  111. package/dist/routes/metadata.js.map +1 -1
  112. package/dist/routes/pipelines.d.ts.map +1 -1
  113. package/dist/routes/pipelines.js +3 -2
  114. package/dist/routes/pipelines.js.map +1 -1
  115. package/openapi/openapi.json +1716 -137
  116. package/package.json +34 -6
@@ -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"}
@@ -0,0 +1,123 @@
1
+ import { MCO_COLLECTIONS } from "./types.js";
2
+ export function isOverrideActive(doc, nowIso = new Date().toISOString()) {
3
+ if (doc.expiresAt == null || doc.expiresAt === "")
4
+ return true;
5
+ return doc.expiresAt > nowIso;
6
+ }
7
+ export function validateSetOverride(body) {
8
+ if (typeof body.enabled !== "boolean") {
9
+ throw new Error("enabled must be a boolean");
10
+ }
11
+ if (body.enabled === false) {
12
+ const reason = typeof body.reason === "string" ? body.reason.trim() : "";
13
+ if (!reason) {
14
+ throw new Error("reason is required (non-empty) when enabled is false");
15
+ }
16
+ }
17
+ }
18
+ function operationalDbName(orgId) {
19
+ return `${orgId}_operational`;
20
+ }
21
+ export function createMongoMcoOverrideStore(client, orgId) {
22
+ const db = client.db(operationalDbName(orgId));
23
+ const col = () => db.collection(MCO_COLLECTIONS.overrides);
24
+ let indexesReady = null;
25
+ const ensureIndexes = async () => {
26
+ if (!indexesReady) {
27
+ indexesReady = (async () => {
28
+ await col().createIndex({ connectorId: 1, opId: 1 }, { unique: true, name: "mco_override_connector_op_unique" });
29
+ await col().createIndex({ connectorId: 1 }, { name: "mco_override_connector" });
30
+ })();
31
+ }
32
+ await indexesReady;
33
+ };
34
+ return {
35
+ async getOverride(connectorId, opId) {
36
+ await ensureIndexes();
37
+ const doc = await col().findOne({ connectorId, opId });
38
+ if (!doc)
39
+ return null;
40
+ if (!isOverrideActive(doc))
41
+ return null;
42
+ return stripMongo(doc);
43
+ },
44
+ async setOverride(connectorId, opId, body) {
45
+ await ensureIndexes();
46
+ validateSetOverride(body);
47
+ const now = new Date().toISOString();
48
+ const reason = typeof body.reason === "string" ? body.reason.trim() : body.enabled ? "" : "";
49
+ const doc = {
50
+ orgId,
51
+ connectorId,
52
+ opId,
53
+ enabled: body.enabled,
54
+ reason,
55
+ updatedAt: now,
56
+ ...(body.updatedBy != null && body.updatedBy !== ""
57
+ ? { updatedBy: String(body.updatedBy) }
58
+ : {}),
59
+ expiresAt: body.expiresAt === undefined ? null : body.expiresAt,
60
+ };
61
+ await col().replaceOne({ connectorId, opId }, doc, { upsert: true });
62
+ return { ...doc };
63
+ },
64
+ async clearOverride(connectorId, opId) {
65
+ await ensureIndexes();
66
+ const res = await col().deleteOne({ connectorId, opId });
67
+ return res.deletedCount > 0;
68
+ },
69
+ async listOverrides(connectorId) {
70
+ await ensureIndexes();
71
+ const rows = await col().find({ connectorId }).toArray();
72
+ return rows
73
+ .filter((d) => isOverrideActive(d))
74
+ .map(stripMongo)
75
+ .sort((a, b) => a.opId.localeCompare(b.opId));
76
+ },
77
+ };
78
+ }
79
+ export function createInMemoryMcoOverrideStore(orgId) {
80
+ const byKey = new Map();
81
+ const key = (c, o) => `${c}\0${o}`;
82
+ return {
83
+ async getOverride(connectorId, opId) {
84
+ const doc = byKey.get(key(connectorId, opId));
85
+ if (!doc || !isOverrideActive(doc))
86
+ return null;
87
+ return { ...doc };
88
+ },
89
+ async setOverride(connectorId, opId, body) {
90
+ validateSetOverride(body);
91
+ const now = new Date().toISOString();
92
+ const reason = typeof body.reason === "string" ? body.reason.trim() : body.enabled ? "" : "";
93
+ const doc = {
94
+ orgId,
95
+ connectorId,
96
+ opId,
97
+ enabled: body.enabled,
98
+ reason,
99
+ updatedAt: now,
100
+ ...(body.updatedBy != null && body.updatedBy !== ""
101
+ ? { updatedBy: String(body.updatedBy) }
102
+ : {}),
103
+ expiresAt: body.expiresAt === undefined ? null : body.expiresAt,
104
+ };
105
+ byKey.set(key(connectorId, opId), doc);
106
+ return { ...doc };
107
+ },
108
+ async clearOverride(connectorId, opId) {
109
+ return byKey.delete(key(connectorId, opId));
110
+ },
111
+ async listOverrides(connectorId) {
112
+ return [...byKey.values()]
113
+ .filter((d) => d.connectorId === connectorId && isOverrideActive(d))
114
+ .map((d) => ({ ...d }))
115
+ .sort((a, b) => a.opId.localeCompare(b.opId));
116
+ },
117
+ };
118
+ }
119
+ function stripMongo(doc) {
120
+ const { _id: _drop, ...rest } = doc;
121
+ return rest;
122
+ }
123
+ //# sourceMappingURL=override-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"override-store.js","sourceRoot":"","sources":["../../src/connector-ops/override-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Reject connector-op payloads that look like secrets / sample bodies.
3
+ */
4
+ export type SanitizeIssue = {
5
+ path: string;
6
+ reason: string;
7
+ };
8
+ /** Returns issues found; empty means acceptable after secret-key rejection. */
9
+ export declare function findSecretPayloadIssues(value: unknown, path?: string): SanitizeIssue[];
10
+ /** Throw-friendly check: true when payload must be rejected. */
11
+ export declare function hasSecretPayload(value: unknown): boolean;
12
+ /**
13
+ * Soft-redact free-text error fields for storage (never store full dumps with tokens).
14
+ */
15
+ export declare function sanitizeErrorText(value: string | undefined): string | undefined;
16
+ //# sourceMappingURL=sanitize.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sanitize.d.ts","sourceRoot":"","sources":["../../src/connector-ops/sanitize.ts"],"names":[],"mappings":"AAAA;;GAEG;AAQH,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,+EAA+E;AAC/E,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,OAAO,EACd,IAAI,SAAK,GACR,aAAa,EAAE,CAwBjB;AAED,gEAAgE;AAChE,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAExD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAS/E"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Reject connector-op payloads that look like secrets / sample bodies.
3
+ */
4
+ const SECRET_KEY = /^(password|secret|token|api[_-]?key|credential|authorization|bearer|mongoUri|storeSelector|body|response|sample|payload)$/i;
5
+ const SECRET_IN_STRING = /password|secret|api[_-]?key|credential|bearer\s+[a-z0-9._~+/=-]{8,}|authorization\s*:/i;
6
+ /** Returns issues found; empty means acceptable after secret-key rejection. */
7
+ export function findSecretPayloadIssues(value, path = "") {
8
+ if (value == null)
9
+ return [];
10
+ if (typeof value === "string") {
11
+ if (SECRET_IN_STRING.test(value)) {
12
+ return [{ path: path || "(root)", reason: "string matches secret pattern" }];
13
+ }
14
+ return [];
15
+ }
16
+ if (Array.isArray(value)) {
17
+ return value.flatMap((v, i) => findSecretPayloadIssues(v, `${path}[${i}]`));
18
+ }
19
+ if (typeof value === "object") {
20
+ const issues = [];
21
+ for (const [k, v] of Object.entries(value)) {
22
+ const child = path ? `${path}.${k}` : k;
23
+ if (SECRET_KEY.test(k)) {
24
+ issues.push({ path: child, reason: "forbidden secret/body field key" });
25
+ continue;
26
+ }
27
+ issues.push(...findSecretPayloadIssues(v, child));
28
+ }
29
+ return issues;
30
+ }
31
+ return [];
32
+ }
33
+ /** Throw-friendly check: true when payload must be rejected. */
34
+ export function hasSecretPayload(value) {
35
+ return findSecretPayloadIssues(value).length > 0;
36
+ }
37
+ /**
38
+ * Soft-redact free-text error fields for storage (never store full dumps with tokens).
39
+ */
40
+ export function sanitizeErrorText(value) {
41
+ if (value == null)
42
+ return undefined;
43
+ let s = value.slice(0, 2000);
44
+ s = s.replace(/\bBearer\s+[A-Za-z0-9._~+/=-]+\b/gi, "Bearer [REDACTED]");
45
+ s = s.replace(/\b(api[_-]?key|token|password|secret)\s*[=:]\s*\S+/gi, "$1=[REDACTED]");
46
+ return s;
47
+ }
48
+ //# sourceMappingURL=sanitize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sanitize.js","sourceRoot":"","sources":["../../src/connector-ops/sanitize.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,UAAU,GACd,4HAA4H,CAAC;AAE/H,MAAM,gBAAgB,GACpB,wFAAwF,CAAC;AAO3F,+EAA+E;AAC/E,MAAM,UAAU,uBAAuB,CACrC,KAAc,EACd,IAAI,GAAG,EAAE;IAET,IAAI,KAAK,IAAI,IAAI;QAAE,OAAO,EAAE,CAAC;IAC7B,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,IAAI,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YACjC,OAAO,CAAC,EAAE,IAAI,EAAE,IAAI,IAAI,QAAQ,EAAE,MAAM,EAAE,+BAA+B,EAAE,CAAC,CAAC;QAC/E,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,uBAAuB,CAAC,CAAC,EAAE,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9E,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,MAAM,GAAoB,EAAE,CAAC;QACnC,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAgC,CAAC,EAAE,CAAC;YACtE,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YACxC,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;gBACvB,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,iCAAiC,EAAE,CAAC,CAAC;gBACxE,SAAS;YACX,CAAC;YACD,MAAM,CAAC,IAAI,CAAC,GAAG,uBAAuB,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;QACpD,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,gEAAgE;AAChE,MAAM,UAAU,gBAAgB,CAAC,KAAc;IAC7C,OAAO,uBAAuB,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;AACnD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAAyB;IACzD,IAAI,KAAK,IAAI,IAAI;QAAE,OAAO,SAAS,CAAC;IACpC,IAAI,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IAC7B,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,oCAAoC,EAAE,mBAAmB,CAAC,CAAC;IACzE,CAAC,GAAG,CAAC,CAAC,OAAO,CACX,sDAAsD,EACtD,eAAe,CAChB,CAAC;IACF,OAAO,CAAC,CAAC;AACX,CAAC"}
@@ -0,0 +1,76 @@
1
+ /**
2
+ * MCO-01 / MCO-02 — org-scoped connector op overrides and attempt stats.
3
+ */
4
+ export type OpAttemptStatus = "ok" | "fail" | "skip" | "disabled";
5
+ export type OpOverride = {
6
+ orgId: string;
7
+ connectorId: string;
8
+ opId: string;
9
+ /** false = org kill-switch; true = explicit enable document (prefer DELETE to clear). */
10
+ enabled: boolean;
11
+ reason: string;
12
+ updatedAt: string;
13
+ updatedBy?: string;
14
+ expiresAt?: string | null;
15
+ };
16
+ export type SetOpOverride = {
17
+ enabled: boolean;
18
+ reason?: string;
19
+ updatedBy?: string;
20
+ expiresAt?: string | null;
21
+ };
22
+ export type OpAttemptInput = {
23
+ at: string;
24
+ status: OpAttemptStatus;
25
+ httpStatus?: number;
26
+ error?: string;
27
+ durationMs?: number;
28
+ runId?: string;
29
+ source?: string;
30
+ };
31
+ export type OpAttempt = OpAttemptInput & {
32
+ orgId: string;
33
+ connectorId: string;
34
+ opId: string;
35
+ attemptId: string;
36
+ };
37
+ export type OpStats = {
38
+ orgId: string;
39
+ connectorId: string;
40
+ opId: string;
41
+ attemptCount: number;
42
+ okCount: number;
43
+ failCount: number;
44
+ skipCount: number;
45
+ disabledCount: number;
46
+ lastSuccessAt?: string | null;
47
+ lastFailAt?: string | null;
48
+ lastAttemptAt?: string | null;
49
+ lastStatus?: OpAttemptStatus | null;
50
+ recent?: Array<OpAttemptInput & {
51
+ attemptId?: string;
52
+ }>;
53
+ };
54
+ export type McoOverrideStore = {
55
+ getOverride(connectorId: string, opId: string): Promise<OpOverride | null>;
56
+ setOverride(connectorId: string, opId: string, body: SetOpOverride): Promise<OpOverride>;
57
+ clearOverride(connectorId: string, opId: string): Promise<boolean>;
58
+ listOverrides(connectorId: string): Promise<OpOverride[]>;
59
+ };
60
+ export type McoAttemptStore = {
61
+ recordAttempt(connectorId: string, opId: string, attempt: OpAttemptInput): Promise<OpAttempt>;
62
+ getStats(connectorId: string, opId: string): Promise<OpStats | null>;
63
+ listStats(connectorId: string): Promise<OpStats[]>;
64
+ listAttempts(connectorId: string, opId: string, opts?: {
65
+ limit?: number;
66
+ }): Promise<OpAttempt[]>;
67
+ };
68
+ export declare const MCO_RECENT_CAP = 50;
69
+ export declare const MCO_ATTEMPTS_DEFAULT_LIMIT = 50;
70
+ export declare const MCO_ATTEMPTS_MAX_LIMIT = 200;
71
+ export declare const MCO_COLLECTIONS: {
72
+ readonly overrides: "mco_op_overrides";
73
+ readonly attempts: "mco_op_attempts";
74
+ readonly stats: "mco_op_stats";
75
+ };
76
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/connector-ops/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * MCO-01 / MCO-02 — org-scoped connector op overrides and attempt stats.
3
+ */
4
+ export const MCO_RECENT_CAP = 50;
5
+ export const MCO_ATTEMPTS_DEFAULT_LIMIT = 50;
6
+ export const MCO_ATTEMPTS_MAX_LIMIT = 200;
7
+ export const MCO_COLLECTIONS = {
8
+ overrides: "mco_op_overrides",
9
+ attempts: "mco_op_attempts",
10
+ stats: "mco_op_stats",
11
+ };
12
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/connector-ops/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAkFH,MAAM,CAAC,MAAM,cAAc,GAAG,EAAE,CAAC;AACjC,MAAM,CAAC,MAAM,0BAA0B,GAAG,EAAE,CAAC;AAC7C,MAAM,CAAC,MAAM,sBAAsB,GAAG,GAAG,CAAC;AAE1C,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,SAAS,EAAE,kBAAkB;IAC7B,QAAQ,EAAE,iBAAiB;IAC3B,KAAK,EAAE,cAAc;CACb,CAAC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Listing-oriented effective metadata: when multi-agent (Any / `*`) joint
3
+ * resolve fail-closes on abstract conflicts, fan out per agent and union
4
+ * definitions so Design catalogs still show everything.
5
+ *
6
+ * Joint resolve is preferred when it succeeds (inheritance stays correct).
7
+ * Union keys include owning agent so two packs can both contribute "People".
8
+ */
9
+ import type { EffectiveMetadataResult } from "@x12i/memorix-metadata";
10
+ export declare function resolveEffectiveForListing(resolve: (agentIds: string[]) => EffectiveMetadataResult, agentIds: string[]): EffectiveMetadataResult;
11
+ //# sourceMappingURL=effective-listing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"effective-listing.d.ts","sourceRoot":"","sources":["../src/effective-listing.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAEtE,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,uBAAuB,EACxD,QAAQ,EAAE,MAAM,EAAE,GACjB,uBAAuB,CA6CzB"}
@@ -0,0 +1,41 @@
1
+ export function resolveEffectiveForListing(resolve, agentIds) {
2
+ const joint = resolve(agentIds);
3
+ if (joint.ok)
4
+ return joint;
5
+ const roots = [
6
+ ...new Set((joint.selectedAgentIds?.length
7
+ ? joint.selectedAgentIds
8
+ : agentIds.filter((id) => id !== "*")).map((id) => id.trim()).filter(Boolean)),
9
+ ];
10
+ if (roots.length <= 1)
11
+ return joint;
12
+ const byKey = new Map();
13
+ const collapsed = [];
14
+ for (const root of roots) {
15
+ const alone = resolve([root]);
16
+ if (!alone.ok)
17
+ continue;
18
+ collapsed.push(root);
19
+ for (const e of alone.effective ?? []) {
20
+ const owner = e.provenance?.definedByAgentId ??
21
+ e.provenance?.selectedAgentId ??
22
+ root;
23
+ const key = `${e.kind}::${e.id}::${owner}`;
24
+ if (!byKey.has(key))
25
+ byKey.set(key, e);
26
+ }
27
+ }
28
+ if (!byKey.size)
29
+ return joint;
30
+ return {
31
+ ok: true,
32
+ selectedAgentIds: roots,
33
+ collapsedAgentIds: collapsed,
34
+ issues: [],
35
+ conflicts: joint.conflicts ?? [],
36
+ referenceIssues: [],
37
+ effective: [...byKey.values()],
38
+ effectivePack: null,
39
+ };
40
+ }
41
+ //# sourceMappingURL=effective-listing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"effective-listing.js","sourceRoot":"","sources":["../src/effective-listing.ts"],"names":[],"mappings":"AAUA,MAAM,UAAU,0BAA0B,CACxC,OAAwD,EACxD,QAAkB;IAElB,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IAChC,IAAI,KAAK,CAAC,EAAE;QAAE,OAAO,KAAK,CAAC;IAE3B,MAAM,KAAK,GAAG;QACZ,GAAG,IAAI,GAAG,CACR,CAAC,KAAK,CAAC,gBAAgB,EAAE,MAAM;YAC7B,CAAC,CAAC,KAAK,CAAC,gBAAgB;YACxB,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,GAAG,CAAC,CACtC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CACzC;KACF,CAAC;IACF,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IAEpC,MAAM,KAAK,GAAG,IAAI,GAAG,EAGlB,CAAC;IACJ,MAAM,SAAS,GAAa,EAAE,CAAC;IAC/B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAC9B,IAAI,CAAC,KAAK,CAAC,EAAE;YAAE,SAAS;QACxB,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrB,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,SAAS,IAAI,EAAE,EAAE,CAAC;YACtC,MAAM,KAAK,GACT,CAAC,CAAC,UAAU,EAAE,gBAAgB;gBAC9B,CAAC,CAAC,UAAU,EAAE,eAAe;gBAC7B,IAAI,CAAC;YACP,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,EAAE,KAAK,KAAK,EAAE,CAAC;YAC3C,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;gBAAE,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;IAED,IAAI,CAAC,KAAK,CAAC,IAAI;QAAE,OAAO,KAAK,CAAC;IAE9B,OAAO;QACL,EAAE,EAAE,IAAI;QACR,gBAAgB,EAAE,KAAK;QACvB,iBAAiB,EAAE,SAAS;QAC5B,MAAM,EAAE,EAAE;QACV,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,EAAE;QAChC,eAAe,EAAE,EAAE;QACnB,SAAS,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;QAC9B,aAAa,EAAE,IAAI;KACpB,CAAC;AACJ,CAAC"}
package/dist/errors.d.ts CHANGED
@@ -20,6 +20,10 @@ export declare function mapErrorToHttp(err: unknown, correlationId: string): {
20
20
  status: number;
21
21
  body: ServiceErrorBody;
22
22
  };
23
- /** Never put secrets into error/log payloads. */
23
+ /**
24
+ * Never put secrets into error/log payloads.
25
+ * Also redacts Magit store selectors (`mgs_…`) and store-id values when they
26
+ * appear as free-standing tokens (recovery material — not for client dumps).
27
+ */
24
28
  export declare function redactSecrets(value: unknown): unknown;
25
29
  //# sourceMappingURL=errors.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,gBAAgB,GAAG;IAC7B,KAAK,EAAE;QACL,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,aAAa,EAAE,MAAM,CAAC;QACtB,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,KAAK,CAAC,EAAE;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;SAAE,CAAC;KAC/C,CAAC;CACH,CAAC;AAEF,qBAAa,YAAa,SAAQ,KAAK;IACrC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;gBAEf,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,SAAM,EAAE,OAAO,CAAC,EAAE,OAAO;CAO/E;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,GAAG;IACnE,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,gBAAgB,CAAC;CACxB,CAsCA;AAED,iDAAiD;AACjD,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAoBrD"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,gBAAgB,GAAG;IAC7B,KAAK,EAAE;QACL,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,aAAa,EAAE,MAAM,CAAC;QACtB,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,KAAK,CAAC,EAAE;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;SAAE,CAAC;KAC/C,CAAC;CACH,CAAC;AAEF,qBAAa,YAAa,SAAQ,KAAK;IACrC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;gBAEf,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,SAAM,EAAE,OAAO,CAAC,EAAE,OAAO;CAO/E;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,GAAG;IACnE,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,gBAAgB,CAAC;CACxB,CAsCA;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CA2BrD"}