@x12i/memorix-service 3.3.0 → 3.6.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 (133) hide show
  1. package/README.md +23 -6
  2. package/dist/app.d.ts.map +1 -1
  3. package/dist/app.js +10 -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-store-cli.d.ts.map +1 -1
  30. package/dist/catalog-store-cli.js +35 -4
  31. package/dist/catalog-store-cli.js.map +1 -1
  32. package/dist/connector-ops/checkpoint-store.d.ts +7 -0
  33. package/dist/connector-ops/checkpoint-store.d.ts.map +1 -0
  34. package/dist/connector-ops/checkpoint-store.js +135 -0
  35. package/dist/connector-ops/checkpoint-store.js.map +1 -0
  36. package/dist/connector-ops/checkpoint-types.d.ts +46 -0
  37. package/dist/connector-ops/checkpoint-types.d.ts.map +1 -0
  38. package/dist/connector-ops/checkpoint-types.js +14 -0
  39. package/dist/connector-ops/checkpoint-types.js.map +1 -0
  40. package/dist/connector-ops/continuous-types.d.ts +141 -0
  41. package/dist/connector-ops/continuous-types.d.ts.map +1 -0
  42. package/dist/connector-ops/continuous-types.js +13 -0
  43. package/dist/connector-ops/continuous-types.js.map +1 -0
  44. package/dist/connector-ops/coordinator.d.ts +88 -0
  45. package/dist/connector-ops/coordinator.d.ts.map +1 -0
  46. package/dist/connector-ops/coordinator.js +174 -0
  47. package/dist/connector-ops/coordinator.js.map +1 -0
  48. package/dist/connector-ops/index.d.ts +6 -0
  49. package/dist/connector-ops/index.d.ts.map +1 -1
  50. package/dist/connector-ops/index.js +6 -0
  51. package/dist/connector-ops/index.js.map +1 -1
  52. package/dist/connector-ops/run-store.d.ts +16 -0
  53. package/dist/connector-ops/run-store.d.ts.map +1 -0
  54. package/dist/connector-ops/run-store.js +249 -0
  55. package/dist/connector-ops/run-store.js.map +1 -0
  56. package/dist/connector-ops/schedule-lease-store.d.ts +8 -0
  57. package/dist/connector-ops/schedule-lease-store.d.ts.map +1 -0
  58. package/dist/connector-ops/schedule-lease-store.js +318 -0
  59. package/dist/connector-ops/schedule-lease-store.js.map +1 -0
  60. package/dist/incremental-state/index.d.ts +3 -0
  61. package/dist/incremental-state/index.d.ts.map +1 -0
  62. package/dist/incremental-state/index.js +3 -0
  63. package/dist/incremental-state/index.js.map +1 -0
  64. package/dist/incremental-state/state-store.d.ts +7 -0
  65. package/dist/incremental-state/state-store.d.ts.map +1 -0
  66. package/dist/incremental-state/state-store.js +183 -0
  67. package/dist/incremental-state/state-store.js.map +1 -0
  68. package/dist/incremental-state/types.d.ts +104 -0
  69. package/dist/incremental-state/types.d.ts.map +1 -0
  70. package/dist/incremental-state/types.js +8 -0
  71. package/dist/incremental-state/types.js.map +1 -0
  72. package/dist/index.d.ts +3 -0
  73. package/dist/index.d.ts.map +1 -1
  74. package/dist/index.js +3 -0
  75. package/dist/index.js.map +1 -1
  76. package/dist/integrations/index.d.ts +3 -0
  77. package/dist/integrations/index.d.ts.map +1 -0
  78. package/dist/integrations/index.js +3 -0
  79. package/dist/integrations/index.js.map +1 -0
  80. package/dist/integrations/instance-store.d.ts +5 -0
  81. package/dist/integrations/instance-store.d.ts.map +1 -0
  82. package/dist/integrations/instance-store.js +327 -0
  83. package/dist/integrations/instance-store.js.map +1 -0
  84. package/dist/integrations/types.d.ts +92 -0
  85. package/dist/integrations/types.d.ts.map +1 -0
  86. package/dist/integrations/types.js +40 -0
  87. package/dist/integrations/types.js.map +1 -0
  88. package/dist/magit/magit-pack-service.d.ts +187 -3
  89. package/dist/magit/magit-pack-service.d.ts.map +1 -1
  90. package/dist/magit/magit-pack-service.js +401 -8
  91. package/dist/magit/magit-pack-service.js.map +1 -1
  92. package/dist/openapi/openapi.json +1348 -2
  93. package/dist/platform.d.ts +44 -1
  94. package/dist/platform.d.ts.map +1 -1
  95. package/dist/platform.js +172 -1
  96. package/dist/platform.js.map +1 -1
  97. package/dist/restricted-store/crypto.d.ts +10 -0
  98. package/dist/restricted-store/crypto.d.ts.map +1 -0
  99. package/dist/restricted-store/crypto.js +43 -0
  100. package/dist/restricted-store/crypto.js.map +1 -0
  101. package/dist/restricted-store/index.d.ts +4 -0
  102. package/dist/restricted-store/index.d.ts.map +1 -0
  103. package/dist/restricted-store/index.js +4 -0
  104. package/dist/restricted-store/index.js.map +1 -0
  105. package/dist/restricted-store/object-store.d.ts +12 -0
  106. package/dist/restricted-store/object-store.d.ts.map +1 -0
  107. package/dist/restricted-store/object-store.js +233 -0
  108. package/dist/restricted-store/object-store.js.map +1 -0
  109. package/dist/restricted-store/types.d.ts +78 -0
  110. package/dist/restricted-store/types.d.ts.map +1 -0
  111. package/dist/restricted-store/types.js +12 -0
  112. package/dist/restricted-store/types.js.map +1 -0
  113. package/dist/routes/continuous-acquisition.d.ts +5 -0
  114. package/dist/routes/continuous-acquisition.d.ts.map +1 -0
  115. package/dist/routes/continuous-acquisition.js +259 -0
  116. package/dist/routes/continuous-acquisition.js.map +1 -0
  117. package/dist/routes/incremental-state.d.ts +5 -0
  118. package/dist/routes/incremental-state.d.ts.map +1 -0
  119. package/dist/routes/incremental-state.js +173 -0
  120. package/dist/routes/incremental-state.js.map +1 -0
  121. package/dist/routes/integrations.d.ts +5 -0
  122. package/dist/routes/integrations.d.ts.map +1 -0
  123. package/dist/routes/integrations.js +126 -0
  124. package/dist/routes/integrations.js.map +1 -0
  125. package/dist/routes/metadata.d.ts.map +1 -1
  126. package/dist/routes/metadata.js +328 -4
  127. package/dist/routes/metadata.js.map +1 -1
  128. package/dist/routes/restricted-store.d.ts +5 -0
  129. package/dist/routes/restricted-store.d.ts.map +1 -0
  130. package/dist/routes/restricted-store.js +117 -0
  131. package/dist/routes/restricted-store.js.map +1 -0
  132. package/openapi/openapi.json +1348 -2
  133. package/package.json +3 -2
@@ -0,0 +1,151 @@
1
+ import { createHash } from "node:crypto";
2
+ import { assertSafeBlobKey, assertSafeOrgId, } from "./types.js";
3
+ function objectKey(prefix, orgId, key) {
4
+ const org = assertSafeOrgId(orgId);
5
+ const safeKey = assertSafeBlobKey(key);
6
+ const p = (prefix ?? "").replace(/^\/+|\/+$/g, "");
7
+ const rest = `${org}/${safeKey}`;
8
+ return p ? `${p}/${rest}` : rest;
9
+ }
10
+ /**
11
+ * Cloud object store (S3-compatible). Bodies never touch local disk.
12
+ * Pass a real AWS SDK client or a test double via `client`.
13
+ */
14
+ export function createS3BlobStore(opts) {
15
+ if (!opts.bucket?.trim())
16
+ throw new Error("S3 bucket required");
17
+ const bucket = opts.bucket.trim();
18
+ const prefix = opts.prefix;
19
+ const sse = opts.serverSideEncryption === false
20
+ ? undefined
21
+ : (opts.serverSideEncryption ?? "AES256");
22
+ return {
23
+ backend: "s3",
24
+ async put(orgId, key, body, putOpts) {
25
+ const Key = objectKey(prefix, orgId, key);
26
+ const out = await opts.client.putObject({
27
+ Bucket: bucket,
28
+ Key,
29
+ Body: body,
30
+ ContentType: putOpts?.contentType,
31
+ ...(sse
32
+ ? {
33
+ ServerSideEncryption: sse,
34
+ ...(sse === "aws:kms" && opts.sseKmsKeyId
35
+ ? { SSEKMSKeyId: opts.sseKmsKeyId }
36
+ : {}),
37
+ }
38
+ : {}),
39
+ });
40
+ const digest = createHash("sha256").update(body).digest("hex");
41
+ return {
42
+ backend: "s3",
43
+ orgId: assertSafeOrgId(orgId),
44
+ key: assertSafeBlobKey(key),
45
+ sizeBytes: body.byteLength,
46
+ contentType: putOpts?.contentType,
47
+ etag: out.ETag?.replace(/"/g, "") ?? `sha256:${digest}`,
48
+ };
49
+ },
50
+ async get(orgId, key) {
51
+ const Key = objectKey(prefix, orgId, key);
52
+ const out = await opts.client.getObject({ Bucket: bucket, Key });
53
+ if (!out?.Body)
54
+ return null;
55
+ return Buffer.isBuffer(out.Body)
56
+ ? out.Body
57
+ : Buffer.from(out.Body);
58
+ },
59
+ async head(orgId, key) {
60
+ const Key = objectKey(prefix, orgId, key);
61
+ const out = await opts.client.headObject({ Bucket: bucket, Key });
62
+ if (!out)
63
+ return null;
64
+ return {
65
+ orgId: assertSafeOrgId(orgId),
66
+ key: assertSafeBlobKey(key),
67
+ sizeBytes: out.ContentLength ?? 0,
68
+ contentType: out.ContentType,
69
+ etag: out.ETag?.replace(/"/g, ""),
70
+ };
71
+ },
72
+ async delete(orgId, key) {
73
+ const Key = objectKey(prefix, orgId, key);
74
+ const existing = await opts.client.headObject({ Bucket: bucket, Key });
75
+ if (!existing)
76
+ return false;
77
+ await opts.client.deleteObject({ Bucket: bucket, Key });
78
+ return true;
79
+ },
80
+ };
81
+ }
82
+ /**
83
+ * Build SDK client from env when backend=s3. Lazy-imports @aws-sdk/client-s3.
84
+ */
85
+ export async function createAwsS3BlobClientFromEnv(env = process.env) {
86
+ const { S3Client, PutObjectCommand, GetObjectCommand, HeadObjectCommand, DeleteObjectCommand } = await import("@aws-sdk/client-s3");
87
+ const region = env.MEMORIX_S3_REGION?.trim() || env.AWS_REGION?.trim() || "us-east-1";
88
+ const endpoint = env.MEMORIX_S3_ENDPOINT?.trim() || undefined;
89
+ const client = new S3Client({
90
+ region,
91
+ ...(endpoint
92
+ ? {
93
+ endpoint,
94
+ forcePathStyle: env.MEMORIX_S3_FORCE_PATH_STYLE === "1" ||
95
+ env.MEMORIX_S3_FORCE_PATH_STYLE === "true",
96
+ }
97
+ : {}),
98
+ });
99
+ return {
100
+ async putObject(input) {
101
+ const out = await client.send(new PutObjectCommand({
102
+ Bucket: input.Bucket,
103
+ Key: input.Key,
104
+ Body: input.Body,
105
+ ContentType: input.ContentType,
106
+ ServerSideEncryption: input.ServerSideEncryption,
107
+ SSEKMSKeyId: input.SSEKMSKeyId,
108
+ }));
109
+ return { ETag: out.ETag };
110
+ },
111
+ async getObject(input) {
112
+ try {
113
+ const out = await client.send(new GetObjectCommand(input));
114
+ if (!out.Body)
115
+ return { Body: null, ContentType: out.ContentType };
116
+ const bytes = await out.Body.transformToByteArray();
117
+ return { Body: Buffer.from(bytes), ContentType: out.ContentType };
118
+ }
119
+ catch (err) {
120
+ if (err.name === "NoSuchKey")
121
+ return null;
122
+ if (err.$metadata
123
+ ?.httpStatusCode === 404)
124
+ return null;
125
+ throw err;
126
+ }
127
+ },
128
+ async headObject(input) {
129
+ try {
130
+ const out = await client.send(new HeadObjectCommand(input));
131
+ return {
132
+ ContentLength: out.ContentLength,
133
+ ContentType: out.ContentType,
134
+ ETag: out.ETag,
135
+ };
136
+ }
137
+ catch (err) {
138
+ if (err.name === "NotFound")
139
+ return null;
140
+ if (err.$metadata
141
+ ?.httpStatusCode === 404)
142
+ return null;
143
+ throw err;
144
+ }
145
+ },
146
+ async deleteObject(input) {
147
+ await client.send(new DeleteObjectCommand(input));
148
+ },
149
+ };
150
+ }
151
+ //# sourceMappingURL=s3.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"s3.js","sourceRoot":"","sources":["../../src/blob-store/s3.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Dual-mode object/blob plane: cloud (S3-compatible) vs on-prem local disk.
3
+ * Any org/connector object payload that would use cloud buckets MUST use disk when
4
+ * MEMORIX_BLOB_BACKEND=disk (on-prem). Not Magit/metadata.
5
+ */
6
+ export type BlobBackendKind = "s3" | "disk" | "memory";
7
+ export type BlobHead = {
8
+ orgId: string;
9
+ key: string;
10
+ sizeBytes: number;
11
+ contentType?: string;
12
+ /** Opaque integrity / storage etag when available. */
13
+ etag?: string;
14
+ };
15
+ export type BlobPutResult = BlobHead & {
16
+ backend: BlobBackendKind;
17
+ };
18
+ export type BlobObjectStore = {
19
+ readonly backend: BlobBackendKind;
20
+ put(orgId: string, key: string, body: Buffer, opts?: {
21
+ contentType?: string;
22
+ }): Promise<BlobPutResult>;
23
+ get(orgId: string, key: string): Promise<Buffer | null>;
24
+ head(orgId: string, key: string): Promise<BlobHead | null>;
25
+ delete(orgId: string, key: string): Promise<boolean>;
26
+ };
27
+ /** Reject path traversal / empty segments. Keys are relative object ids. */
28
+ export declare function assertSafeBlobKey(key: string): string;
29
+ export declare function assertSafeOrgId(orgId: string): string;
30
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/blob-store/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,MAAM,eAAe,GAAG,IAAI,GAAG,MAAM,GAAG,QAAQ,CAAC;AAEvD,MAAM,MAAM,QAAQ,GAAG;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,sDAAsD;IACtD,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG;IACrC,OAAO,EAAE,eAAe,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC;IAClC,GAAG,CACD,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,GAC9B,OAAO,CAAC,aAAa,CAAC,CAAC;IAC1B,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACxD,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC;IAC3D,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACtD,CAAC;AAEF,4EAA4E;AAC5E,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAoBrD;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAOrD"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Dual-mode object/blob plane: cloud (S3-compatible) vs on-prem local disk.
3
+ * Any org/connector object payload that would use cloud buckets MUST use disk when
4
+ * MEMORIX_BLOB_BACKEND=disk (on-prem). Not Magit/metadata.
5
+ */
6
+ /** Reject path traversal / empty segments. Keys are relative object ids. */
7
+ export function assertSafeBlobKey(key) {
8
+ const k = key.trim();
9
+ if (!k)
10
+ throw new Error("blob key required");
11
+ if (k.length > 512)
12
+ throw new Error("blob key too long");
13
+ if (k.includes("\0"))
14
+ throw new Error("blob key invalid");
15
+ if (k.startsWith("/") || k.endsWith("/")) {
16
+ throw new Error("blob key must not start or end with /");
17
+ }
18
+ const parts = k.split("/");
19
+ for (const p of parts) {
20
+ if (!p || p === "." || p === "..") {
21
+ throw new Error("blob key path escape rejected");
22
+ }
23
+ if (!/^[A-Za-z0-9._-]+$/.test(p)) {
24
+ throw new Error("blob key segments must be [A-Za-z0-9._-]+ (no path escape)");
25
+ }
26
+ }
27
+ return k;
28
+ }
29
+ export function assertSafeOrgId(orgId) {
30
+ const o = orgId.trim();
31
+ if (!o)
32
+ throw new Error("orgId required");
33
+ if (!/^[A-Za-z0-9._-]+$/.test(o)) {
34
+ throw new Error("orgId must match [A-Za-z0-9._-]+");
35
+ }
36
+ return o;
37
+ }
38
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/blob-store/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AA8BH,4EAA4E;AAC5E,MAAM,UAAU,iBAAiB,CAAC,GAAW;IAC3C,MAAM,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IACrB,IAAI,CAAC,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;IAC7C,IAAI,CAAC,CAAC,MAAM,GAAG,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACzD,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;IAC1D,IAAI,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACzC,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;IAC3D,CAAC;IACD,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC3B,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;YAClC,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;QACnD,CAAC;QACD,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CACb,4DAA4D,CAC7D,CAAC;QACJ,CAAC;IACH,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,KAAa;IAC3C,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IACvB,IAAI,CAAC,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC;IAC1C,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QACjC,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;IACtD,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC"}
@@ -1 +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"}
1
+ {"version":3,"file":"catalog-store-cli.d.ts","sourceRoot":"","sources":["../src/catalog-store-cli.ts"],"names":[],"mappings":"AAOA,OAAO,EAML,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,CAgCjB"}
@@ -5,7 +5,7 @@
5
5
  import { chmodSync, mkdirSync, writeFileSync } from "node:fs";
6
6
  import { dirname, resolve } from "node:path";
7
7
  import { ServiceError } from "./errors.js";
8
- import { createMagitPackService, isMetadataMagitEnabled, resolveMagitRepoRootParent, resolveMagitStorageTokenEnv, } from "./magit/magit-pack-service.js";
8
+ import { createMagitPackService, DEFAULT_TYPED_STORE_ALLOWED_KINDS, isMetadataMagitEnabled, resolveMagitRepoRootParent, resolveMagitStorageTokenEnv, } from "./magit/magit-pack-service.js";
9
9
  export function parseFlag(argv, name) {
10
10
  const i = argv.indexOf(name);
11
11
  if (i < 0)
@@ -99,11 +99,15 @@ export async function runCatalogStoreCommand(sub, argv, partialDeps) {
99
99
  if (sub === "list")
100
100
  return await list(deps);
101
101
  io.error(`Usage:
102
- memorix-service catalog-store provision [--out <file>] [--force] [--package-type-id <id>]
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)
103
106
  memorix-service catalog-store verify
104
- memorix-service catalog-store recover --store-id <id> [--out <file>]
107
+ memorix-service catalog-store recover --store-id <id> --out <file>
105
108
  memorix-service catalog-store list
106
109
 
110
+ allowedKinds is write-once on createGlobalStore — a forgotten kind needs a second store.
107
111
  Secrets (MAGIT_PACKAGE_STORE_SELECTOR, tokens) are never printed on stdout.
108
112
  Provision/recover write selector lines to --out with mode 0600.`);
109
113
  return 1;
@@ -126,9 +130,34 @@ async function provision(argv, deps) {
126
130
  }
127
131
  const force = hasFlag(argv, "--force");
128
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
+ }
129
157
  const magitSvc = deps.createMagit();
130
158
  const result = await magitSvc.provisionTypedPackageStore({
131
159
  packageTypeId: packageTypeId || undefined,
160
+ allowedKinds,
132
161
  force,
133
162
  });
134
163
  deps.writeSecretEnvFile(out, publisherEnv(result));
@@ -140,12 +169,14 @@ async function provision(argv, deps) {
140
169
  action: "provision",
141
170
  packageTypeId: result.packageTypeId,
142
171
  storeId: result.storeId,
172
+ allowedKinds: result.allowedKinds,
143
173
  pushed: result.pushed,
144
174
  existingStoreCount: result.existingStoreCount,
145
175
  secretsFile: abs,
146
176
  next: [
147
177
  `Install ${out} into the service secret env (never commit).`,
148
- "Mint Authix store grants: publisher write + consumer read.",
178
+ "Set MAGIT_CATALOG_TENANT=x12i MAGIT_CATALOG_REPO=memorix (defaults).",
179
+ "Mint Authix store grants: publisher write + consumer read (repoIds empty on consumer).",
149
180
  "Run: memorix-service catalog-store verify",
150
181
  "Optional: node scripts/magit-backfill-pack-catalog.mjs",
151
182
  ],
@@ -1 +1 @@
1
- {"version":3,"file":"catalog-store-cli.js","sourceRoot":"","sources":["../src/catalog-store-cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"catalog-store-cli.js","sourceRoot":"","sources":["../src/catalog-store-cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { MongoClient } from "mongodb";
2
+ import { type PutStreamCheckpoint, type StreamCheckpointMethod, type StreamCheckpointStore } from "./checkpoint-types.js";
3
+ export declare function assertCheckpointMethod(raw: unknown): StreamCheckpointMethod;
4
+ export declare function validatePutCheckpoint(body: PutStreamCheckpoint): void;
5
+ export declare function createInMemoryStreamCheckpointStore(orgId: string): StreamCheckpointStore;
6
+ export declare function createMongoStreamCheckpointStore(client: MongoClient, orgId: string): StreamCheckpointStore;
7
+ //# sourceMappingURL=checkpoint-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkpoint-store.d.ts","sourceRoot":"","sources":["../../src/connector-ops/checkpoint-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAM,WAAW,EAAE,MAAM,SAAS,CAAC;AAG/C,OAAO,EAGL,KAAK,mBAAmB,EAExB,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,EAC3B,MAAM,uBAAuB,CAAC;AAW/B,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,OAAO,GACX,sBAAsB,CAUxB;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,mBAAmB,GAAG,IAAI,CAoBrE;AAUD,wBAAgB,mCAAmC,CACjD,KAAK,EAAE,MAAM,GACZ,qBAAqB,CA+CvB;AAED,wBAAgB,gCAAgC,CAC9C,MAAM,EAAE,WAAW,EACnB,KAAK,EAAE,MAAM,GACZ,qBAAqB,CAyEvB"}
@@ -0,0 +1,135 @@
1
+ import { ServiceError } from "../errors.js";
2
+ import { hasSecretPayload } from "./sanitize.js";
3
+ import { MCO_COLLECTIONS_CHECKPOINT, STREAM_CHECKPOINT_METHODS, } from "./checkpoint-types.js";
4
+ function operationalDbName(orgId) {
5
+ return `${orgId}_operational`;
6
+ }
7
+ function stripMongo(doc) {
8
+ const { _id: _drop, ...rest } = doc;
9
+ return rest;
10
+ }
11
+ export function assertCheckpointMethod(raw) {
12
+ if (typeof raw === "string" &&
13
+ STREAM_CHECKPOINT_METHODS.includes(raw)) {
14
+ return raw;
15
+ }
16
+ throw new Error(`method must be one of: ${STREAM_CHECKPOINT_METHODS.join(", ")}`);
17
+ }
18
+ export function validatePutCheckpoint(body) {
19
+ assertCheckpointMethod(body.method);
20
+ if (hasSecretPayload(body)) {
21
+ throw new Error("checkpoint payload must not contain secrets or response bodies");
22
+ }
23
+ const method = body.method;
24
+ if (method === "watermark" && body.watermark == null) {
25
+ throw new Error("watermark required when method is watermark");
26
+ }
27
+ if (method === "revision" && body.revision == null) {
28
+ throw new Error("revision required when method is revision");
29
+ }
30
+ if (method === "fullScanHash" && body.fullScanHash == null) {
31
+ throw new Error("fullScanHash required when method is fullScanHash");
32
+ }
33
+ if (method === "cursor" && (body.cursor == null || body.cursor === "")) {
34
+ throw new Error("cursor required when method is cursor");
35
+ }
36
+ }
37
+ function streamKey(connectorId, instanceId, streamId) {
38
+ return `${connectorId}\0${instanceId}\0${streamId}`;
39
+ }
40
+ export function createInMemoryStreamCheckpointStore(orgId) {
41
+ const byKey = new Map();
42
+ return {
43
+ async get(connectorId, instanceId, streamId) {
44
+ const doc = byKey.get(streamKey(connectorId, instanceId, streamId));
45
+ return doc ? { ...doc } : null;
46
+ },
47
+ async put(connectorId, instanceId, streamId, body) {
48
+ validatePutCheckpoint(body);
49
+ const k = streamKey(connectorId, instanceId, streamId);
50
+ const existing = byKey.get(k);
51
+ if (body.expectedCheckpointRevision != null &&
52
+ (existing?.checkpointRevision ?? 0) !== body.expectedCheckpointRevision) {
53
+ throw new ServiceError("CHECKPOINT_REVISION_CONFLICT", `checkpoint revision conflict: expected ${body.expectedCheckpointRevision}, got ${existing?.checkpointRevision ?? 0}`, 409);
54
+ }
55
+ const now = new Date().toISOString();
56
+ const doc = {
57
+ orgId,
58
+ connectorId,
59
+ instanceId,
60
+ streamId,
61
+ method: body.method,
62
+ watermark: body.watermark ?? null,
63
+ revision: body.revision ?? null,
64
+ fullScanHash: body.fullScanHash ?? null,
65
+ cursor: body.cursor ?? null,
66
+ contentHash: body.contentHash ?? null,
67
+ producerRunId: body.producerRunId ?? null,
68
+ checkpointRevision: (existing?.checkpointRevision ?? 0) + 1,
69
+ updatedAt: now,
70
+ };
71
+ byKey.set(k, doc);
72
+ return { ...doc };
73
+ },
74
+ async clear(connectorId, instanceId, streamId) {
75
+ return byKey.delete(streamKey(connectorId, instanceId, streamId));
76
+ },
77
+ };
78
+ }
79
+ export function createMongoStreamCheckpointStore(client, orgId) {
80
+ const db = client.db(operationalDbName(orgId));
81
+ const col = () => db.collection(MCO_COLLECTIONS_CHECKPOINT.checkpoints);
82
+ let indexesReady = null;
83
+ const ensureIndexes = async () => {
84
+ if (!indexesReady) {
85
+ indexesReady = (async () => {
86
+ await col().createIndex({ connectorId: 1, instanceId: 1, streamId: 1 }, { unique: true, name: "mco_stream_checkpoint_unique" });
87
+ })();
88
+ }
89
+ await indexesReady;
90
+ };
91
+ return {
92
+ async get(connectorId, instanceId, streamId) {
93
+ await ensureIndexes();
94
+ const doc = await col().findOne({ connectorId, instanceId, streamId });
95
+ return doc ? stripMongo(doc) : null;
96
+ },
97
+ async put(connectorId, instanceId, streamId, body) {
98
+ await ensureIndexes();
99
+ validatePutCheckpoint(body);
100
+ const existing = await col().findOne({
101
+ connectorId,
102
+ instanceId,
103
+ streamId,
104
+ });
105
+ if (body.expectedCheckpointRevision != null &&
106
+ (existing?.checkpointRevision ?? 0) !== body.expectedCheckpointRevision) {
107
+ throw new ServiceError("CHECKPOINT_REVISION_CONFLICT", `checkpoint revision conflict: expected ${body.expectedCheckpointRevision}, got ${existing?.checkpointRevision ?? 0}`, 409);
108
+ }
109
+ const now = new Date().toISOString();
110
+ const doc = {
111
+ orgId,
112
+ connectorId,
113
+ instanceId,
114
+ streamId,
115
+ method: body.method,
116
+ watermark: body.watermark ?? null,
117
+ revision: body.revision ?? null,
118
+ fullScanHash: body.fullScanHash ?? null,
119
+ cursor: body.cursor ?? null,
120
+ contentHash: body.contentHash ?? null,
121
+ producerRunId: body.producerRunId ?? null,
122
+ checkpointRevision: (existing?.checkpointRevision ?? 0) + 1,
123
+ updatedAt: now,
124
+ };
125
+ await col().replaceOne({ connectorId, instanceId, streamId }, doc, { upsert: true });
126
+ return { ...doc };
127
+ },
128
+ async clear(connectorId, instanceId, streamId) {
129
+ await ensureIndexes();
130
+ const res = await col().deleteOne({ connectorId, instanceId, streamId });
131
+ return res.deletedCount > 0;
132
+ },
133
+ };
134
+ }
135
+ //# sourceMappingURL=checkpoint-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkpoint-store.js","sourceRoot":"","sources":["../../src/connector-ops/checkpoint-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * INC-01 stream checkpoints — offsets/cursors for continuous acquisition.
3
+ * Distinct from Memory OT source checkpoints (sourceId × mode × workRef).
4
+ */
5
+ export type StreamCheckpointMethod = "watermark" | "revision" | "fullScanHash" | "cursor";
6
+ export type StreamCheckpoint = {
7
+ orgId: string;
8
+ connectorId: string;
9
+ instanceId: string;
10
+ streamId: string;
11
+ method: StreamCheckpointMethod;
12
+ /** Splunk-style _indextime / time watermark. */
13
+ watermark?: string | number | null;
14
+ /** FortiGate revision / sequence. */
15
+ revision?: string | number | null;
16
+ /** Full-scan content hash gate. */
17
+ fullScanHash?: string | null;
18
+ /** Opaque cursor (Entra @odata.deltaLink, Falcon offset, …). */
19
+ cursor?: string | null;
20
+ contentHash?: string | null;
21
+ producerRunId?: string | null;
22
+ /** Checkpoint document revision for optional CAS on put. */
23
+ checkpointRevision: number;
24
+ updatedAt: string;
25
+ };
26
+ export type PutStreamCheckpoint = {
27
+ method: StreamCheckpointMethod;
28
+ watermark?: string | number | null;
29
+ revision?: string | number | null;
30
+ fullScanHash?: string | null;
31
+ cursor?: string | null;
32
+ contentHash?: string | null;
33
+ producerRunId?: string | null;
34
+ /** When set, put fails unless current checkpointRevision matches. */
35
+ expectedCheckpointRevision?: number;
36
+ };
37
+ export type StreamCheckpointStore = {
38
+ get(connectorId: string, instanceId: string, streamId: string): Promise<StreamCheckpoint | null>;
39
+ put(connectorId: string, instanceId: string, streamId: string, body: PutStreamCheckpoint): Promise<StreamCheckpoint>;
40
+ clear(connectorId: string, instanceId: string, streamId: string): Promise<boolean>;
41
+ };
42
+ export declare const STREAM_CHECKPOINT_METHODS: readonly StreamCheckpointMethod[];
43
+ export declare const MCO_COLLECTIONS_CHECKPOINT: {
44
+ readonly checkpoints: "mco_stream_checkpoints";
45
+ };
46
+ //# sourceMappingURL=checkpoint-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkpoint-types.d.ts","sourceRoot":"","sources":["../../src/connector-ops/checkpoint-types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,MAAM,sBAAsB,GAC9B,WAAW,GACX,UAAU,GACV,cAAc,GACd,QAAQ,CAAC;AAEb,MAAM,MAAM,gBAAgB,GAAG;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,sBAAsB,CAAC;IAC/B,gDAAgD;IAChD,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IACnC,qCAAqC;IACrC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAClC,mCAAmC;IACnC,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,gEAAgE;IAChE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,4DAA4D;IAC5D,kBAAkB,EAAE,MAAM,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,MAAM,EAAE,sBAAsB,CAAC;IAC/B,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IACnC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAClC,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,qEAAqE;IACrE,0BAA0B,CAAC,EAAE,MAAM,CAAC;CACrC,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,GAAG,CACD,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAAC;IACpC,GAAG,CACD,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,mBAAmB,GACxB,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAC7B,KAAK,CACH,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,OAAO,CAAC,CAAC;CACrB,CAAC;AAEF,eAAO,MAAM,yBAAyB,EAAE,SAAS,sBAAsB,EAK7D,CAAC;AAEX,eAAO,MAAM,0BAA0B;;CAE7B,CAAC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * INC-01 stream checkpoints — offsets/cursors for continuous acquisition.
3
+ * Distinct from Memory OT source checkpoints (sourceId × mode × workRef).
4
+ */
5
+ export const STREAM_CHECKPOINT_METHODS = [
6
+ "watermark",
7
+ "revision",
8
+ "fullScanHash",
9
+ "cursor",
10
+ ];
11
+ export const MCO_COLLECTIONS_CHECKPOINT = {
12
+ checkpoints: "mco_stream_checkpoints",
13
+ };
14
+ //# sourceMappingURL=checkpoint-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkpoint-types.js","sourceRoot":"","sources":["../../src/connector-ops/checkpoint-types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AA4DH,MAAM,CAAC,MAAM,yBAAyB,GAAsC;IAC1E,WAAW;IACX,UAAU;IACV,cAAc;IACd,QAAQ;CACA,CAAC;AAEX,MAAM,CAAC,MAAM,0BAA0B,GAAG;IACxC,WAAW,EAAE,wBAAwB;CAC7B,CAAC"}