@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,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,CAmiCf"}
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"}