@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.
- package/README.md +23 -6
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js +10 -0
- package/dist/app.js.map +1 -1
- package/dist/blob-store/config.d.ts +31 -0
- package/dist/blob-store/config.d.ts.map +1 -0
- package/dist/blob-store/config.js +68 -0
- package/dist/blob-store/config.js.map +1 -0
- package/dist/blob-store/disk.d.ts +10 -0
- package/dist/blob-store/disk.d.ts.map +1 -0
- package/dist/blob-store/disk.js +104 -0
- package/dist/blob-store/disk.js.map +1 -0
- package/dist/blob-store/index.d.ts +6 -0
- package/dist/blob-store/index.d.ts.map +1 -0
- package/dist/blob-store/index.js +6 -0
- package/dist/blob-store/index.js.map +1 -0
- package/dist/blob-store/memory.d.ts +4 -0
- package/dist/blob-store/memory.d.ts.map +1 -0
- package/dist/blob-store/memory.js +47 -0
- package/dist/blob-store/memory.js.map +1 -0
- package/dist/blob-store/s3.d.ts +52 -0
- package/dist/blob-store/s3.d.ts.map +1 -0
- package/dist/blob-store/s3.js +151 -0
- package/dist/blob-store/s3.js.map +1 -0
- package/dist/blob-store/types.d.ts +30 -0
- package/dist/blob-store/types.d.ts.map +1 -0
- package/dist/blob-store/types.js +38 -0
- package/dist/blob-store/types.js.map +1 -0
- package/dist/catalog-store-cli.d.ts.map +1 -1
- package/dist/catalog-store-cli.js +35 -4
- package/dist/catalog-store-cli.js.map +1 -1
- package/dist/connector-ops/checkpoint-store.d.ts +7 -0
- package/dist/connector-ops/checkpoint-store.d.ts.map +1 -0
- package/dist/connector-ops/checkpoint-store.js +135 -0
- package/dist/connector-ops/checkpoint-store.js.map +1 -0
- package/dist/connector-ops/checkpoint-types.d.ts +46 -0
- package/dist/connector-ops/checkpoint-types.d.ts.map +1 -0
- package/dist/connector-ops/checkpoint-types.js +14 -0
- package/dist/connector-ops/checkpoint-types.js.map +1 -0
- package/dist/connector-ops/continuous-types.d.ts +141 -0
- package/dist/connector-ops/continuous-types.d.ts.map +1 -0
- package/dist/connector-ops/continuous-types.js +13 -0
- package/dist/connector-ops/continuous-types.js.map +1 -0
- package/dist/connector-ops/coordinator.d.ts +88 -0
- package/dist/connector-ops/coordinator.d.ts.map +1 -0
- package/dist/connector-ops/coordinator.js +174 -0
- package/dist/connector-ops/coordinator.js.map +1 -0
- package/dist/connector-ops/index.d.ts +6 -0
- package/dist/connector-ops/index.d.ts.map +1 -1
- package/dist/connector-ops/index.js +6 -0
- package/dist/connector-ops/index.js.map +1 -1
- package/dist/connector-ops/run-store.d.ts +16 -0
- package/dist/connector-ops/run-store.d.ts.map +1 -0
- package/dist/connector-ops/run-store.js +249 -0
- package/dist/connector-ops/run-store.js.map +1 -0
- package/dist/connector-ops/schedule-lease-store.d.ts +8 -0
- package/dist/connector-ops/schedule-lease-store.d.ts.map +1 -0
- package/dist/connector-ops/schedule-lease-store.js +318 -0
- package/dist/connector-ops/schedule-lease-store.js.map +1 -0
- package/dist/incremental-state/index.d.ts +3 -0
- package/dist/incremental-state/index.d.ts.map +1 -0
- package/dist/incremental-state/index.js +3 -0
- package/dist/incremental-state/index.js.map +1 -0
- package/dist/incremental-state/state-store.d.ts +7 -0
- package/dist/incremental-state/state-store.d.ts.map +1 -0
- package/dist/incremental-state/state-store.js +183 -0
- package/dist/incremental-state/state-store.js.map +1 -0
- package/dist/incremental-state/types.d.ts +104 -0
- package/dist/incremental-state/types.d.ts.map +1 -0
- package/dist/incremental-state/types.js +8 -0
- package/dist/incremental-state/types.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/integrations/index.d.ts +3 -0
- package/dist/integrations/index.d.ts.map +1 -0
- package/dist/integrations/index.js +3 -0
- package/dist/integrations/index.js.map +1 -0
- package/dist/integrations/instance-store.d.ts +5 -0
- package/dist/integrations/instance-store.d.ts.map +1 -0
- package/dist/integrations/instance-store.js +327 -0
- package/dist/integrations/instance-store.js.map +1 -0
- package/dist/integrations/types.d.ts +92 -0
- package/dist/integrations/types.d.ts.map +1 -0
- package/dist/integrations/types.js +40 -0
- package/dist/integrations/types.js.map +1 -0
- package/dist/magit/magit-pack-service.d.ts +187 -3
- package/dist/magit/magit-pack-service.d.ts.map +1 -1
- package/dist/magit/magit-pack-service.js +401 -8
- package/dist/magit/magit-pack-service.js.map +1 -1
- package/dist/openapi/openapi.json +1348 -2
- package/dist/platform.d.ts +44 -1
- package/dist/platform.d.ts.map +1 -1
- package/dist/platform.js +172 -1
- package/dist/platform.js.map +1 -1
- package/dist/restricted-store/crypto.d.ts +10 -0
- package/dist/restricted-store/crypto.d.ts.map +1 -0
- package/dist/restricted-store/crypto.js +43 -0
- package/dist/restricted-store/crypto.js.map +1 -0
- package/dist/restricted-store/index.d.ts +4 -0
- package/dist/restricted-store/index.d.ts.map +1 -0
- package/dist/restricted-store/index.js +4 -0
- package/dist/restricted-store/index.js.map +1 -0
- package/dist/restricted-store/object-store.d.ts +12 -0
- package/dist/restricted-store/object-store.d.ts.map +1 -0
- package/dist/restricted-store/object-store.js +233 -0
- package/dist/restricted-store/object-store.js.map +1 -0
- package/dist/restricted-store/types.d.ts +78 -0
- package/dist/restricted-store/types.d.ts.map +1 -0
- package/dist/restricted-store/types.js +12 -0
- package/dist/restricted-store/types.js.map +1 -0
- package/dist/routes/continuous-acquisition.d.ts +5 -0
- package/dist/routes/continuous-acquisition.d.ts.map +1 -0
- package/dist/routes/continuous-acquisition.js +259 -0
- package/dist/routes/continuous-acquisition.js.map +1 -0
- package/dist/routes/incremental-state.d.ts +5 -0
- package/dist/routes/incremental-state.d.ts.map +1 -0
- package/dist/routes/incremental-state.js +173 -0
- package/dist/routes/incremental-state.js.map +1 -0
- package/dist/routes/integrations.d.ts +5 -0
- package/dist/routes/integrations.d.ts.map +1 -0
- package/dist/routes/integrations.js +126 -0
- package/dist/routes/integrations.js.map +1 -0
- package/dist/routes/metadata.d.ts.map +1 -1
- package/dist/routes/metadata.js +328 -4
- package/dist/routes/metadata.js.map +1 -1
- package/dist/routes/restricted-store.d.ts +5 -0
- package/dist/routes/restricted-store.d.ts.map +1 -0
- package/dist/routes/restricted-store.js +117 -0
- package/dist/routes/restricted-store.js.map +1 -0
- package/openapi/openapi.json +1348 -2
- package/package.json +3 -2
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
import { ServiceError } from "../errors.js";
|
|
2
|
+
import { resolveConnectorOpsOrg } from "./connector-ops.js";
|
|
3
|
+
import { hasSecretPayload } from "../connector-ops/sanitize.js";
|
|
4
|
+
function requireScopeIds(params) {
|
|
5
|
+
const instanceId = typeof params.instanceId === "string" ? params.instanceId.trim() : "";
|
|
6
|
+
const scopeKey = typeof params.scopeKey === "string" ? params.scopeKey.trim() : "";
|
|
7
|
+
if (!instanceId || !scopeKey) {
|
|
8
|
+
throw new ServiceError("VALIDATION_ERROR", "instanceId and scopeKey required", 400);
|
|
9
|
+
}
|
|
10
|
+
return { instanceId, scopeKey };
|
|
11
|
+
}
|
|
12
|
+
function mapErr(err) {
|
|
13
|
+
if (err instanceof ServiceError)
|
|
14
|
+
throw err;
|
|
15
|
+
throw new ServiceError("VALIDATION_ERROR", err instanceof Error ? err.message : String(err), 400);
|
|
16
|
+
}
|
|
17
|
+
/** MX-INC-01 versioned state refs + CAS + apply-commit. */
|
|
18
|
+
export async function registerIncrementalStateRoutes(app, platform) {
|
|
19
|
+
const prefix = "/api/incremental-state/v1";
|
|
20
|
+
const scopeBase = `${prefix}/orgs/:orgId/instances/:instanceId/scopes/:scopeKey`;
|
|
21
|
+
app.get(`${scopeBase}`, async (req) => {
|
|
22
|
+
const orgId = resolveConnectorOpsOrg(req);
|
|
23
|
+
const { instanceId, scopeKey } = requireScopeIds(req.params);
|
|
24
|
+
const doc = await platform.incrementalStateFor(orgId).get(instanceId, scopeKey);
|
|
25
|
+
if (!doc) {
|
|
26
|
+
throw new ServiceError("NOT_FOUND", "no incremental state for scope", 404);
|
|
27
|
+
}
|
|
28
|
+
return doc;
|
|
29
|
+
});
|
|
30
|
+
app.get(`${scopeBase}/content`, async (req) => {
|
|
31
|
+
const orgId = resolveConnectorOpsOrg(req);
|
|
32
|
+
const { instanceId, scopeKey } = requireScopeIds(req.params);
|
|
33
|
+
const got = await platform
|
|
34
|
+
.incrementalStateFor(orgId)
|
|
35
|
+
.getContent(instanceId, scopeKey);
|
|
36
|
+
if (!got) {
|
|
37
|
+
throw new ServiceError("NOT_FOUND", "no incremental state content", 404);
|
|
38
|
+
}
|
|
39
|
+
return {
|
|
40
|
+
...got.meta,
|
|
41
|
+
bodyBase64: got.body.toString("base64"),
|
|
42
|
+
};
|
|
43
|
+
});
|
|
44
|
+
app.post(`${scopeBase}/cas-publish`, async (req) => {
|
|
45
|
+
const orgId = resolveConnectorOpsOrg(req);
|
|
46
|
+
const { instanceId, scopeKey } = requireScopeIds(req.params);
|
|
47
|
+
const body = (req.body ?? {});
|
|
48
|
+
if (typeof body.expectedBaseVersion !== "number") {
|
|
49
|
+
throw new ServiceError("VALIDATION_ERROR", "expectedBaseVersion required", 400);
|
|
50
|
+
}
|
|
51
|
+
try {
|
|
52
|
+
return await platform
|
|
53
|
+
.incrementalStateFor(orgId)
|
|
54
|
+
.casPublish(instanceId, scopeKey, body);
|
|
55
|
+
}
|
|
56
|
+
catch (err) {
|
|
57
|
+
mapErr(err);
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
app.get(`${scopeBase}/apply-ledger`, async (req) => {
|
|
61
|
+
const orgId = resolveConnectorOpsOrg(req);
|
|
62
|
+
const { instanceId, scopeKey } = requireScopeIds(req.params);
|
|
63
|
+
const q = (req.query ?? {});
|
|
64
|
+
const limit = Math.min(200, Math.max(1, Number(q.limit ?? 50) || 50));
|
|
65
|
+
const items = await platform
|
|
66
|
+
.incrementalStateFor(orgId)
|
|
67
|
+
.listApplyLedger(instanceId, scopeKey, { limit });
|
|
68
|
+
return { orgId, instanceId, scopeKey, items, limit };
|
|
69
|
+
});
|
|
70
|
+
/**
|
|
71
|
+
* Atomic apply handoff: CAS-publish snapshot then commit stream checkpoint.
|
|
72
|
+
* Failure at either step → no checkpoint advance (and no silent state bump
|
|
73
|
+
* beyond what CAS already rejected).
|
|
74
|
+
*/
|
|
75
|
+
app.post(`${scopeBase}/apply-commit`, async (req) => {
|
|
76
|
+
const orgId = resolveConnectorOpsOrg(req);
|
|
77
|
+
const { instanceId, scopeKey } = requireScopeIds(req.params);
|
|
78
|
+
const body = (req.body ?? {});
|
|
79
|
+
if (!body.runId?.trim()) {
|
|
80
|
+
throw new ServiceError("VALIDATION_ERROR", "runId required", 400);
|
|
81
|
+
}
|
|
82
|
+
if (typeof body.expectedBaseVersion !== "number") {
|
|
83
|
+
throw new ServiceError("VALIDATION_ERROR", "expectedBaseVersion required", 400);
|
|
84
|
+
}
|
|
85
|
+
if (!body.checkpoint?.connectorId || !body.checkpoint?.streamId) {
|
|
86
|
+
throw new ServiceError("VALIDATION_ERROR", "checkpoint.connectorId and checkpoint.streamId required", 400);
|
|
87
|
+
}
|
|
88
|
+
if (hasSecretPayload({ ...body, bodyBase64: undefined })) {
|
|
89
|
+
throw new ServiceError("PAYLOAD_REJECTED", "apply-commit must not contain secret field keys", 400);
|
|
90
|
+
}
|
|
91
|
+
const store = platform.incrementalStateFor(orgId);
|
|
92
|
+
const existing = await store.getApplyByRunId(instanceId, scopeKey, body.runId);
|
|
93
|
+
if (existing?.outcome === "ok") {
|
|
94
|
+
const state = await store.get(instanceId, scopeKey);
|
|
95
|
+
const checkpoint = await platform
|
|
96
|
+
.streamCheckpointsFor(orgId)
|
|
97
|
+
.get(body.checkpoint.connectorId, body.checkpoint.instanceId || instanceId, body.checkpoint.streamId);
|
|
98
|
+
if (state && checkpoint) {
|
|
99
|
+
return { state, checkpoint, applyLedger: existing, replayed: true };
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
const before = await store.get(instanceId, scopeKey);
|
|
103
|
+
const baseBefore = before?.baseVersion ?? 0;
|
|
104
|
+
let state;
|
|
105
|
+
try {
|
|
106
|
+
state = await store.casPublish(instanceId, scopeKey, {
|
|
107
|
+
expectedBaseVersion: body.expectedBaseVersion,
|
|
108
|
+
bodyBase64: body.bodyBase64,
|
|
109
|
+
contentType: body.contentType,
|
|
110
|
+
contentHash: body.contentHash,
|
|
111
|
+
producerRunId: body.runId,
|
|
112
|
+
incomplete: body.incomplete,
|
|
113
|
+
shrinkGuardFailed: body.shrinkGuardFailed,
|
|
114
|
+
tombstones: body.tombstones,
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
catch (err) {
|
|
118
|
+
await store.recordApply({
|
|
119
|
+
orgId,
|
|
120
|
+
instanceId,
|
|
121
|
+
scopeKey,
|
|
122
|
+
runId: body.runId,
|
|
123
|
+
at: new Date().toISOString(),
|
|
124
|
+
outcome: "conflict",
|
|
125
|
+
baseVersionBefore: baseBefore,
|
|
126
|
+
errorClass: err instanceof ServiceError ? err.code : "cas_failed",
|
|
127
|
+
errorMessage: err instanceof Error ? err.message : String(err),
|
|
128
|
+
});
|
|
129
|
+
mapErr(err);
|
|
130
|
+
}
|
|
131
|
+
try {
|
|
132
|
+
const checkpoint = await platform.streamCheckpointsFor(orgId).put(body.checkpoint.connectorId, body.checkpoint.instanceId || instanceId, body.checkpoint.streamId, {
|
|
133
|
+
method: body.checkpoint.method,
|
|
134
|
+
watermark: body.checkpoint.watermark,
|
|
135
|
+
revision: body.checkpoint.revision,
|
|
136
|
+
fullScanHash: body.checkpoint.fullScanHash,
|
|
137
|
+
cursor: body.checkpoint.cursor,
|
|
138
|
+
contentHash: body.checkpoint.contentHash,
|
|
139
|
+
producerRunId: body.runId,
|
|
140
|
+
expectedCheckpointRevision: body.checkpoint.expectedCheckpointRevision,
|
|
141
|
+
});
|
|
142
|
+
const applyLedger = await store.recordApply({
|
|
143
|
+
orgId,
|
|
144
|
+
instanceId,
|
|
145
|
+
scopeKey,
|
|
146
|
+
runId: body.runId,
|
|
147
|
+
at: new Date().toISOString(),
|
|
148
|
+
outcome: "ok",
|
|
149
|
+
baseVersionBefore: baseBefore,
|
|
150
|
+
baseVersionAfter: state.baseVersion,
|
|
151
|
+
});
|
|
152
|
+
return { state, checkpoint, applyLedger, replayed: false };
|
|
153
|
+
}
|
|
154
|
+
catch (err) {
|
|
155
|
+
await store.recordApply({
|
|
156
|
+
orgId,
|
|
157
|
+
instanceId,
|
|
158
|
+
scopeKey,
|
|
159
|
+
runId: body.runId,
|
|
160
|
+
at: new Date().toISOString(),
|
|
161
|
+
outcome: "failed",
|
|
162
|
+
baseVersionBefore: baseBefore,
|
|
163
|
+
baseVersionAfter: state.baseVersion,
|
|
164
|
+
errorClass: "checkpoint_commit_failed",
|
|
165
|
+
errorMessage: err instanceof Error ? err.message : String(err),
|
|
166
|
+
});
|
|
167
|
+
// State already published; checkpoint not advanced — resume uses new
|
|
168
|
+
// baseVersion; host must not invent a further checkpoint skip-ahead.
|
|
169
|
+
mapErr(err);
|
|
170
|
+
}
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
//# sourceMappingURL=incremental-state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"incremental-state.js","sourceRoot":"","sources":["../../src/routes/incremental-state.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { FastifyInstance } from "fastify";
|
|
2
|
+
import type { MemorixPlatform } from "../platform.js";
|
|
3
|
+
/** Stage −1 integration instance registry. */
|
|
4
|
+
export declare function registerIntegrationRoutes(app: FastifyInstance, platform: MemorixPlatform): Promise<void>;
|
|
5
|
+
//# sourceMappingURL=integrations.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"integrations.d.ts","sourceRoot":"","sources":["../../src/routes/integrations.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAC/C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAoCtD,8CAA8C;AAC9C,wBAAsB,yBAAyB,CAC7C,GAAG,EAAE,eAAe,EACpB,QAAQ,EAAE,eAAe,GACxB,OAAO,CAAC,IAAI,CAAC,CAyHf"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import { ServiceError } from "../errors.js";
|
|
2
|
+
import { hasRegistrySecretPayload, } from "../integrations/index.js";
|
|
3
|
+
import { resolveConnectorOpsOrg } from "./connector-ops.js";
|
|
4
|
+
function header(headers, name) {
|
|
5
|
+
const v = headers[name] ?? headers[name.toLowerCase()];
|
|
6
|
+
if (Array.isArray(v))
|
|
7
|
+
return v[0];
|
|
8
|
+
return typeof v === "string" ? v : undefined;
|
|
9
|
+
}
|
|
10
|
+
function mapStoreError(err) {
|
|
11
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
12
|
+
const code = err.code;
|
|
13
|
+
if (code === "ETAG_MISMATCH" || /etag mismatch/i.test(msg)) {
|
|
14
|
+
throw new ServiceError("ETAG_MISMATCH", msg, 412);
|
|
15
|
+
}
|
|
16
|
+
if (/already exists/i.test(msg)) {
|
|
17
|
+
throw new ServiceError("CONFLICT", msg, 409);
|
|
18
|
+
}
|
|
19
|
+
if (/secret|credentialRef is required|connectorId is required/i.test(msg)) {
|
|
20
|
+
throw new ServiceError(msg.includes("secret") ? "PAYLOAD_REJECTED" : "VALIDATION_ERROR", msg, 400);
|
|
21
|
+
}
|
|
22
|
+
throw new ServiceError("VALIDATION_ERROR", msg, 400);
|
|
23
|
+
}
|
|
24
|
+
/** Stage −1 integration instance registry. */
|
|
25
|
+
export async function registerIntegrationRoutes(app, platform) {
|
|
26
|
+
const prefix = "/api/integrations/v1";
|
|
27
|
+
app.get(`${prefix}/orgs/:orgId/instances`, async (req) => {
|
|
28
|
+
const orgId = resolveConnectorOpsOrg(req);
|
|
29
|
+
const q = (req.query ?? {});
|
|
30
|
+
const connectorId = typeof q.connectorId === "string" ? q.connectorId.trim() : undefined;
|
|
31
|
+
const enabled = q.enabled === "true" ? true : q.enabled === "false" ? false : undefined;
|
|
32
|
+
return platform.integrationInstancesFor(orgId).list({
|
|
33
|
+
...(connectorId ? { connectorId } : {}),
|
|
34
|
+
...(enabled != null ? { enabled } : {}),
|
|
35
|
+
});
|
|
36
|
+
});
|
|
37
|
+
app.post(`${prefix}/orgs/:orgId/instances`, async (req, reply) => {
|
|
38
|
+
const orgId = resolveConnectorOpsOrg(req);
|
|
39
|
+
const body = (req.body ?? {});
|
|
40
|
+
if (hasRegistrySecretPayload(body)) {
|
|
41
|
+
throw new ServiceError("PAYLOAD_REJECTED", "instance payload must not contain secrets; credentialRef only", 400);
|
|
42
|
+
}
|
|
43
|
+
try {
|
|
44
|
+
const created = await platform
|
|
45
|
+
.integrationInstancesFor(orgId)
|
|
46
|
+
.create(body);
|
|
47
|
+
return reply.code(201).send(created);
|
|
48
|
+
}
|
|
49
|
+
catch (err) {
|
|
50
|
+
mapStoreError(err);
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
app.get(`${prefix}/orgs/:orgId/instances/:instanceId`, async (req) => {
|
|
54
|
+
const orgId = resolveConnectorOpsOrg(req);
|
|
55
|
+
const params = req.params;
|
|
56
|
+
const instanceId = params.instanceId?.trim() ?? "";
|
|
57
|
+
if (!instanceId) {
|
|
58
|
+
throw new ServiceError("VALIDATION_ERROR", "instanceId required", 400);
|
|
59
|
+
}
|
|
60
|
+
const doc = await platform
|
|
61
|
+
.integrationInstancesFor(orgId)
|
|
62
|
+
.get(instanceId);
|
|
63
|
+
if (!doc) {
|
|
64
|
+
throw new ServiceError("NOT_FOUND", "integration instance not found", 404);
|
|
65
|
+
}
|
|
66
|
+
return doc;
|
|
67
|
+
});
|
|
68
|
+
app.put(`${prefix}/orgs/:orgId/instances/:instanceId`, async (req) => {
|
|
69
|
+
const orgId = resolveConnectorOpsOrg(req);
|
|
70
|
+
const params = req.params;
|
|
71
|
+
const instanceId = params.instanceId?.trim() ?? "";
|
|
72
|
+
if (!instanceId) {
|
|
73
|
+
throw new ServiceError("VALIDATION_ERROR", "instanceId required", 400);
|
|
74
|
+
}
|
|
75
|
+
const body = (req.body ?? {});
|
|
76
|
+
if (hasRegistrySecretPayload(body)) {
|
|
77
|
+
throw new ServiceError("PAYLOAD_REJECTED", "instance payload must not contain secrets; credentialRef only", 400);
|
|
78
|
+
}
|
|
79
|
+
const ifMatch = header(req.headers, "if-match") ??
|
|
80
|
+
header(req.headers, "If-Match") ??
|
|
81
|
+
null;
|
|
82
|
+
try {
|
|
83
|
+
return await platform
|
|
84
|
+
.integrationInstancesFor(orgId)
|
|
85
|
+
.put(instanceId, body, { ifMatch });
|
|
86
|
+
}
|
|
87
|
+
catch (err) {
|
|
88
|
+
mapStoreError(err);
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
app.delete(`${prefix}/orgs/:orgId/instances/:instanceId`, async (req, reply) => {
|
|
92
|
+
const orgId = resolveConnectorOpsOrg(req);
|
|
93
|
+
const params = req.params;
|
|
94
|
+
const instanceId = params.instanceId?.trim() ?? "";
|
|
95
|
+
if (!instanceId) {
|
|
96
|
+
throw new ServiceError("VALIDATION_ERROR", "instanceId required", 400);
|
|
97
|
+
}
|
|
98
|
+
const ifMatch = header(req.headers, "if-match") ??
|
|
99
|
+
header(req.headers, "If-Match") ??
|
|
100
|
+
null;
|
|
101
|
+
try {
|
|
102
|
+
const ok = await platform
|
|
103
|
+
.integrationInstancesFor(orgId)
|
|
104
|
+
.delete(instanceId, { ifMatch });
|
|
105
|
+
if (!ok) {
|
|
106
|
+
throw new ServiceError("NOT_FOUND", "integration instance not found", 404);
|
|
107
|
+
}
|
|
108
|
+
return reply.code(204).send();
|
|
109
|
+
}
|
|
110
|
+
catch (err) {
|
|
111
|
+
if (err instanceof ServiceError)
|
|
112
|
+
throw err;
|
|
113
|
+
mapStoreError(err);
|
|
114
|
+
}
|
|
115
|
+
});
|
|
116
|
+
app.get(`${prefix}/orgs/:orgId/mutations`, async (req) => {
|
|
117
|
+
const orgId = resolveConnectorOpsOrg(req);
|
|
118
|
+
const q = (req.query ?? {});
|
|
119
|
+
const limit = q.limit != null ? Number(q.limit) : undefined;
|
|
120
|
+
const items = await platform
|
|
121
|
+
.integrationInstancesFor(orgId)
|
|
122
|
+
.listMutations({ limit });
|
|
123
|
+
return { orgId, mutations: items };
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
//# sourceMappingURL=integrations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"integrations.js","sourceRoot":"","sources":["../../src/routes/integrations.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metadata.d.ts","sourceRoot":"","sources":["../../src/routes/metadata.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAQ/C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAsMtD,wBAAsB,sBAAsB,CAC1C,GAAG,EAAE,eAAe,EACpB,QAAQ,EAAE,eAAe,GACxB,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"metadata.d.ts","sourceRoot":"","sources":["../../src/routes/metadata.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAQ/C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAsMtD,wBAAsB,sBAAsB,CAC1C,GAAG,EAAE,eAAe,EACpB,QAAQ,EAAE,eAAe,GACxB,OAAO,CAAC,IAAI,CAAC,CAq8Cf"}
|