@sfdxy/anypoint-connect 0.11.0 → 0.12.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 CHANGED
@@ -62,7 +62,7 @@ Working across several organizations? Use named profiles —
62
62
  | Monitoring | Request metrics, percentiles, time series, per-replica, JVM memory and GC, freeform AMQL |
63
63
  | Exchange | Search, asset detail, spec download, JAR publication, environment comparison |
64
64
  | API Manager | Instances, policies, SLA tiers, alerts |
65
- | Design Center | Projects, files, read, update, publish |
65
+ | Design Center | Projects, branches, safe file sync, governed publication |
66
66
  | Platform | Environments, entitlements, audit log |
67
67
  | Anypoint MQ | Queues, depth and throughput, dead-letter browsing, test publishing |
68
68
  | Object Store v2 | Stores, keys, values |
@@ -72,7 +72,7 @@ Every command is documented in the
72
72
 
73
73
  ## MCP server
74
74
 
75
- 56 tools for AI agents. Set up credentials first — the server has nothing to offer an unauthenticated
75
+ 65 tools for AI agents. Set up credentials first — the server has nothing to offer an unauthenticated
76
76
  session.
77
77
 
78
78
  ```bash
@@ -165,7 +165,7 @@ Published at **<https://avinava.github.io/anypoint-connect/>** with search.
165
165
  | [Access readiness](docs/readiness.md) | The six access states and their fixes |
166
166
  | [CLI reference](docs/cli-reference.md) | Every command group |
167
167
  | [MCP server](docs/mcp.md) | Host setup, prompts, resources |
168
- | [Tool catalog](docs/tools.md) | All 56 tools, and how to choose between overlapping ones |
168
+ | [Tool catalog](docs/tools.md) | All 65 tools, and how to choose between overlapping ones |
169
169
  | [Safety model](docs/safety.md) | Dry runs, narrow updates, bound deletion |
170
170
  | [Deploying a JAR](docs/deployment-tools.md) | Build, publish, deploy, roll back |
171
171
  | [Library API](docs/library.md) | Programmatic use |
@@ -174,17 +174,11 @@ Published at **<https://avinava.github.io/anypoint-connect/>** with search.
174
174
 
175
175
  ## Ecosystem
176
176
 
177
- One of four MuleSoft tools that work together, and the only one that needs credentials.
178
-
179
- | Project | Role |
180
- | --- | --- |
181
- | `anypoint-connect` | Authorized Anypoint evidence and lifecycle operations |
182
- | [`mule-build`](https://github.com/Avinava/mule-build) | Validate, test, package, run locally, and release |
183
- | [`mule-lint`](https://github.com/Avinava/mule-lint) | Static analysis of Mule XML, DataWeave, YAML, and project structure |
184
- | [`mule-skills`](https://github.com/Avinava/mule-skills) | Agent workflows that drive all three |
185
-
186
- A complete release crosses two tools: `mule-build` produces and versions the artifact, this one puts it in
187
- an environment. Details on the [ecosystem page](docs/ecosystem.md).
177
+ The canonical package matrix and supported combination live in the
178
+ [`mule-skills` ecosystem hub](https://avinava.github.io/mule-skills/ecosystem/). This is the only tool
179
+ in the set that needs Anypoint credentials. A complete release crosses two boundaries: `mule-build`
180
+ produces and versions the artifact, while this package puts it in an environment. More detail is on
181
+ the local [ecosystem page](docs/ecosystem.md).
188
182
 
189
183
  ## Development
190
184
 
@@ -31,6 +31,10 @@ export interface DesignCenterBranch {
31
31
  commitId?: string;
32
32
  isDefault?: boolean;
33
33
  }
34
+ export interface DesignCenterSaveFile {
35
+ path: string;
36
+ content: string;
37
+ }
34
38
  export interface PublishToExchangeOptions {
35
39
  name: string;
36
40
  apiVersion: string;
@@ -56,24 +60,25 @@ export declare class DesignCenterApi {
56
60
  /**
57
61
  * List all Design Center projects in the organization.
58
62
  */
59
- getProjects(orgId: string): Promise<DesignCenterProject[]>;
63
+ getProjects(orgId: string, refresh?: boolean): Promise<DesignCenterProject[]>;
60
64
  /**
61
65
  * Get project details by ID.
62
66
  */
63
67
  getProject(orgId: string, projectId: string): Promise<DesignCenterProject>;
64
- /**
65
- * Find a project by name (case-insensitive partial match).
66
- */
68
+ /** Find a project by exact name. Partial project matching is intentionally unsafe. */
67
69
  findByName(orgId: string, name: string): Promise<DesignCenterProject | null>;
68
70
  /**
69
71
  * Find a project by name, throwing if not found.
70
72
  * Preferred over findByName when the project must exist.
71
73
  */
72
74
  findByNameOrThrow(orgId: string, name: string): Promise<DesignCenterProject>;
75
+ /** Create a new API design project after an exact collision check. */
76
+ createProject(orgId: string, name: string, classifier: 'raml' | 'oas'): Promise<DesignCenterProject>;
73
77
  /**
74
78
  * List branches for a project.
75
79
  */
76
80
  getBranches(orgId: string, projectId: string): Promise<DesignCenterBranch[]>;
81
+ createBranch(orgId: string, projectId: string, name: string, commitId?: string): Promise<DesignCenterBranch>;
77
82
  /**
78
83
  * List all files in a project branch.
79
84
  */
@@ -97,10 +102,15 @@ export declare class DesignCenterApi {
97
102
  * Release the write lock on a project branch.
98
103
  */
99
104
  releaseLock(orgId: string, projectId: string, branch?: string): Promise<void>;
105
+ /** Refresh a branch lock before the service's approximately one-minute expiry. */
106
+ maintainLock(orgId: string, projectId: string, branch?: string): Promise<void>;
100
107
  /**
101
108
  * Save a file to a project branch. Requires the lock to be held.
102
109
  */
103
110
  saveFile(orgId: string, projectId: string, filePath: string, content: string, branch?: string, commitMessage?: string): Promise<void>;
111
+ /** Save multiple files in the API's single batch operation. Requires a held lock. */
112
+ saveFiles(orgId: string, projectId: string, files: DesignCenterSaveFile[], branch?: string, commitMessage?: string): Promise<void>;
113
+ withLock<T>(orgId: string, projectId: string, branch: string, operation: () => Promise<T>): Promise<T>;
104
114
  /**
105
115
  * Atomically update a file: acquires lock → saves → releases lock.
106
116
  * Uses try/finally to always release the lock, even on failure.
@@ -112,7 +122,8 @@ export declare class DesignCenterApi {
112
122
  */
113
123
  getExchangeJson(orgId: string, projectId: string, branch?: string): Promise<Record<string, unknown> | null>;
114
124
  /**
115
- * Publish a Design Center project to Anypoint Exchange.
125
+ * Legacy direct publication path retained for compatibility.
126
+ * New callers should use the preview-bound DesignCenterWorkflow.
116
127
  *
117
128
  * The DC XP API expects all publish parameters in the JSON body, NOT in the URL path.
118
129
  * Endpoint: POST /designcenter/api-designer/projects/{projectId}/branches/{branch}/publish/exchange
@@ -125,5 +136,11 @@ export declare class DesignCenterApi {
125
136
  assetId: string;
126
137
  version: string;
127
138
  }>;
139
+ /** Publish while the caller holds the branch lock. */
140
+ publishToExchangeLocked(orgId: string, projectId: string, options: PublishToExchangeOptions, branch?: string): Promise<{
141
+ groupId: string;
142
+ assetId: string;
143
+ version: string;
144
+ }>;
128
145
  }
129
146
  //# sourceMappingURL=DesignCenterApi.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"DesignCenterApi.d.ts","sourceRoot":"","sources":["../../src/api/DesignCenterApi.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAKhD,MAAM,WAAW,mBAAmB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;CACzE;AAED,MAAM,WAAW,gBAAgB;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,kBAAkB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,wBAAwB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB;AAMD,qBAAa,eAAe;IAEpB,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,KAAK;gBADL,IAAI,EAAE,UAAU,EAChB,KAAK,EAAE,KAAK;IAGjC;;;OAGG;IACH,OAAO,CAAC,SAAS;IAQjB;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC;IASnC;;OAEG;IACG,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC;IAUhE;;OAEG;IACG,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAOhF;;OAEG;IACG,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC;IAMlF;;;OAGG;IACG,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAUlF;;OAEG;IACG,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC;IASlF;;OAEG;IACG,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,SAAW,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAOhG;;;;OAIG;IACG,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,SAAW,GAAG,OAAO,CAAC,MAAM,CAAC;IAsB5G;;;OAGG;IACG,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,SAAW,GAAG,OAAO,CAAC,MAAM,CAAC;IAqC9G;;OAEG;IACG,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,SAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAerF;;OAEG;IACG,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,SAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAerF;;OAEG;IACG,QAAQ,CACV,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,MAAM,SAAW,EACjB,aAAa,CAAC,EAAE,MAAM,GACvB,OAAO,CAAC,IAAI,CAAC;IAqBhB;;;OAGG;IACG,UAAU,CACZ,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,MAAM,SAAW,EACjB,aAAa,CAAC,EAAE,MAAM,GACvB,OAAO,CAAC,IAAI,CAAC;IAchB;;;OAGG;IACG,eAAe,CACjB,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,MAAM,SAAW,GAClB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAS1C;;;;;;;;OAQG;IACG,iBAAiB,CACnB,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,wBAAwB,EACjC,MAAM,SAAW,GAClB,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;CAsCpE"}
1
+ {"version":3,"file":"DesignCenterApi.d.ts","sourceRoot":"","sources":["../../src/api/DesignCenterApi.ts"],"names":[],"mappings":"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"}
@@ -40,9 +40,11 @@ export class DesignCenterApi {
40
40
  /**
41
41
  * List all Design Center projects in the organization.
42
42
  */
43
- async getProjects(orgId) {
43
+ async getProjects(orgId, refresh = false) {
44
44
  const ownerId = await this.getOwnerId();
45
45
  const cacheKey = `dc:projects:${orgId}`;
46
+ if (refresh)
47
+ this.cache.delete(cacheKey);
46
48
  return this.cache.getOrCompute(cacheKey, async () => {
47
49
  return this.http.get(`${BASE}/projects`, {
48
50
  headers: this.dcHeaders(orgId, ownerId),
@@ -58,25 +60,42 @@ export class DesignCenterApi {
58
60
  headers: this.dcHeaders(orgId, ownerId),
59
61
  });
60
62
  }
61
- /**
62
- * Find a project by name (case-insensitive partial match).
63
- */
63
+ /** Find a project by exact name. Partial project matching is intentionally unsafe. */
64
64
  async findByName(orgId, name) {
65
65
  const projects = await this.getProjects(orgId);
66
- const lower = name.toLowerCase();
67
- return projects.find((p) => p.name.toLowerCase().includes(lower)) || null;
66
+ const exact = projects.find((project) => project.name === name);
67
+ if (exact)
68
+ return exact;
69
+ const insensitive = projects.filter((project) => project.name.toLowerCase() === name.toLowerCase());
70
+ if (insensitive.length > 1) {
71
+ throw new Error(`Multiple projects have the same case-insensitive name "${name}"; use the project ID.`);
72
+ }
73
+ return insensitive[0] || null;
68
74
  }
69
75
  /**
70
76
  * Find a project by name, throwing if not found.
71
77
  * Preferred over findByName when the project must exist.
72
78
  */
73
79
  async findByNameOrThrow(orgId, name) {
74
- const project = await this.findByName(orgId, name);
80
+ const projects = await this.getProjects(orgId);
81
+ const byId = projects.find((candidate) => candidate.id === name);
82
+ const project = byId || (await this.findByName(orgId, name));
75
83
  if (!project) {
76
84
  throw new Error(`Project "${name}" not found. Use list_design_center_projects to see available projects.`);
77
85
  }
78
86
  return project;
79
87
  }
88
+ /** Create a new API design project after an exact collision check. */
89
+ async createProject(orgId, name, classifier) {
90
+ const projects = await this.getProjects(orgId, true);
91
+ if (projects.some((project) => project.name.toLowerCase() === name.toLowerCase())) {
92
+ throw new Error(`A Design Center project named "${name}" already exists.`);
93
+ }
94
+ const ownerId = await this.getOwnerId();
95
+ const project = await this.http.post(`${BASE}/projects`, { name, classifier }, { headers: this.dcHeaders(orgId, ownerId, { Accept: 'application/json' }) });
96
+ this.cache.delete(`dc:projects:${orgId}`);
97
+ return project;
98
+ }
80
99
  // ── Branches ───────────────────────────────────
81
100
  /**
82
101
  * List branches for a project.
@@ -87,6 +106,10 @@ export class DesignCenterApi {
87
106
  headers: this.dcHeaders(orgId, ownerId),
88
107
  });
89
108
  }
109
+ async createBranch(orgId, projectId, name, commitId) {
110
+ const ownerId = await this.getOwnerId();
111
+ return this.http.post(`${BASE}/projects/${projectId}/branches`, { name, ...(commitId ? { commitId } : {}) }, { headers: this.dcHeaders(orgId, ownerId, { Accept: 'application/json' }) });
112
+ }
90
113
  // ── Files ──────────────────────────────────────
91
114
  /**
92
115
  * List all files in a project branch.
@@ -182,24 +205,44 @@ export class DesignCenterApi {
182
205
  throw new Error(`Failed to release lock: ${errorMessage(e)}`);
183
206
  }
184
207
  }
208
+ /** Refresh a branch lock before the service's approximately one-minute expiry. */
209
+ async maintainLock(orgId, projectId, branch = 'master') {
210
+ const ownerId = await this.getOwnerId();
211
+ await this.http.post(`${BASE}/projects/${projectId}/branches/${branch}/status`, {}, { headers: this.dcHeaders(orgId, ownerId) });
212
+ }
185
213
  /**
186
214
  * Save a file to a project branch. Requires the lock to be held.
187
215
  */
188
216
  async saveFile(orgId, projectId, filePath, content, branch = 'master', commitMessage) {
217
+ await this.saveFiles(orgId, projectId, [{ path: filePath, content }], branch, commitMessage);
218
+ }
219
+ /** Save multiple files in the API's single batch operation. Requires a held lock. */
220
+ async saveFiles(orgId, projectId, files, branch = 'master', commitMessage) {
189
221
  const ownerId = await this.getOwnerId();
190
222
  try {
191
- await this.http.post(`${BASE}/projects/${projectId}/branches/${branch}/save`, [
192
- {
193
- path: filePath,
194
- content,
195
- type: 'file',
196
- },
197
- ], {
223
+ await this.http.post(`${BASE}/projects/${projectId}/branches/${branch}/save`, files.map((file) => ({ path: file.path, content: file.content, type: 'FILE' })), {
198
224
  headers: this.dcHeaders(orgId, ownerId, commitMessage ? { 'x-commit-message': commitMessage } : {}),
199
225
  });
200
226
  }
201
227
  catch (e) {
202
- throw new Error(`Failed to save file: ${errorMessage(e)}`);
228
+ throw new Error(`Failed to save files: ${errorMessage(e)}`);
229
+ }
230
+ }
231
+ async withLock(orgId, projectId, branch, operation) {
232
+ await this.acquireLock(orgId, projectId, branch);
233
+ try {
234
+ const result = await operation();
235
+ await this.releaseLock(orgId, projectId, branch);
236
+ return result;
237
+ }
238
+ catch (operationError) {
239
+ try {
240
+ await this.releaseLock(orgId, projectId, branch);
241
+ }
242
+ catch {
243
+ // Preserve the operation failure; the branch lock expires server-side.
244
+ }
245
+ throw operationError;
203
246
  }
204
247
  }
205
248
  /**
@@ -209,13 +252,7 @@ export class DesignCenterApi {
209
252
  async updateFile(orgId, projectId, filePath, content, branch = 'master', commitMessage) {
210
253
  // Clear project cache since we're modifying
211
254
  this.cache.delete(`dc:projects:${orgId}`);
212
- await this.acquireLock(orgId, projectId, branch);
213
- try {
214
- await this.saveFile(orgId, projectId, filePath, content, branch, commitMessage);
215
- }
216
- finally {
217
- await this.releaseLock(orgId, projectId, branch);
218
- }
255
+ await this.withLock(orgId, projectId, branch, () => this.saveFile(orgId, projectId, filePath, content, branch, commitMessage));
219
256
  }
220
257
  // ── Publish ────────────────────────────────────
221
258
  /**
@@ -232,7 +269,8 @@ export class DesignCenterApi {
232
269
  }
233
270
  }
234
271
  /**
235
- * Publish a Design Center project to Anypoint Exchange.
272
+ * Legacy direct publication path retained for compatibility.
273
+ * New callers should use the preview-bound DesignCenterWorkflow.
236
274
  *
237
275
  * The DC XP API expects all publish parameters in the JSON body, NOT in the URL path.
238
276
  * Endpoint: POST /designcenter/api-designer/projects/{projectId}/branches/{branch}/publish/exchange
@@ -241,35 +279,31 @@ export class DesignCenterApi {
241
279
  * If assetId or main file aren't specified, we auto-detect them from exchange.json.
242
280
  */
243
281
  async publishToExchange(orgId, projectId, options, branch = 'master') {
282
+ return this.withLock(orgId, projectId, branch, () => this.publishToExchangeLocked(orgId, projectId, options, branch));
283
+ }
284
+ /** Publish while the caller holds the branch lock. */
285
+ async publishToExchangeLocked(orgId, projectId, options, branch = 'master') {
244
286
  const ownerId = await this.getOwnerId();
245
287
  // Read exchange.json for defaults (assetId, main file, etc.)
246
288
  const exchangeMeta = await this.getExchangeJson(orgId, projectId, branch);
247
289
  const groupId = options.groupId || exchangeMeta?.groupId || orgId;
248
290
  const assetId = options.assetId || exchangeMeta?.assetId || options.name;
249
291
  const mainFile = options.main || exchangeMeta?.main;
250
- // Acquire lock before publishing (required by DC API)
251
- await this.acquireLock(orgId, projectId, branch);
252
- try {
253
- const response = await this.http
254
- .post(`${BASE}/projects/${projectId}/branches/${branch}/publish/exchange`, {
255
- name: options.name,
256
- apiVersion: options.apiVersion,
257
- version: options.version,
258
- classifier: options.classifier,
259
- main: mainFile,
260
- assetId,
261
- groupId,
262
- }, {
263
- headers: this.dcHeaders(orgId, ownerId),
264
- })
265
- .catch((e) => {
266
- throw new Error(`Failed to publish: ${errorMessage(e)}`);
267
- });
268
- return response;
269
- }
270
- finally {
271
- await this.releaseLock(orgId, projectId, branch);
272
- }
292
+ return this.http
293
+ .post(`${BASE}/projects/${projectId}/branches/${branch}/publish/exchange`, {
294
+ name: options.name,
295
+ apiVersion: options.apiVersion,
296
+ version: options.version,
297
+ classifier: options.classifier,
298
+ main: mainFile,
299
+ assetId,
300
+ groupId,
301
+ }, {
302
+ headers: this.dcHeaders(orgId, ownerId),
303
+ })
304
+ .catch((e) => {
305
+ throw new Error(`Failed to publish: ${errorMessage(e)}`);
306
+ });
273
307
  }
274
308
  }
275
309
  //# sourceMappingURL=DesignCenterApi.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DesignCenterApi.js","sourceRoot":"","sources":["../../src/api/DesignCenterApi.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"DesignCenterApi.js","sourceRoot":"","sources":["../../src/api/DesignCenterApi.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,65 @@
1
+ import type { DesignCenterApi, PublishToExchangeOptions } from './DesignCenterApi.js';
2
+ import type { ExchangeApi } from './ExchangeApi.js';
3
+ export interface DesignCenterFileInput {
4
+ path: string;
5
+ content: string;
6
+ }
7
+ export interface SyncPlanEntry {
8
+ path: string;
9
+ action: 'create' | 'update' | 'unchanged';
10
+ localHash: string;
11
+ remoteHash: string | null;
12
+ }
13
+ export declare class DesignCenterWorkflow {
14
+ private readonly designCenter;
15
+ private readonly exchange;
16
+ private readonly previews;
17
+ constructor(designCenter: DesignCenterApi, exchange: ExchangeApi);
18
+ private issue;
19
+ private consume;
20
+ previewProjectCreate(orgId: string, name: string, classifier: 'raml' | 'oas'): Promise<{
21
+ previewToken: string;
22
+ expiresAt: string;
23
+ action: "create";
24
+ name: string;
25
+ classifier: "raml" | "oas";
26
+ }>;
27
+ createProject(previewToken: string): Promise<import("./DesignCenterApi.js").DesignCenterProject>;
28
+ previewSync(orgId: string, projectNameOrId: string, files: DesignCenterFileInput[], branch?: string, commitMessage?: string): Promise<{
29
+ previewToken: string;
30
+ expiresAt: string;
31
+ project: string;
32
+ branch: string;
33
+ entries: SyncPlanEntry[];
34
+ }>;
35
+ sync(previewToken: string): Promise<{
36
+ project: string;
37
+ branch: string;
38
+ changed: number;
39
+ entries: SyncPlanEntry[];
40
+ }>;
41
+ previewPublication(orgId: string, projectNameOrId: string, options: PublishToExchangeOptions, branch?: string): Promise<{
42
+ previewToken: string;
43
+ expiresAt: string;
44
+ project: string;
45
+ branch: string;
46
+ coordinates: {
47
+ groupId: string | undefined;
48
+ assetId: string | undefined;
49
+ version: string;
50
+ };
51
+ apiVersion: string;
52
+ classifier: string;
53
+ mainFile: string;
54
+ sourceHash: string;
55
+ }>;
56
+ publish(previewToken: string): Promise<{
57
+ sourceHash: string;
58
+ exchangeArtifactHash: string;
59
+ verified: boolean;
60
+ groupId: string;
61
+ assetId: string;
62
+ version: string;
63
+ }>;
64
+ }
65
+ //# sourceMappingURL=DesignCenterWorkflow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DesignCenterWorkflow.d.ts","sourceRoot":"","sources":["../../src/api/DesignCenterWorkflow.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AACtF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAYpD,MAAM,WAAW,qBAAqB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,QAAQ,GAAG,QAAQ,GAAG,WAAW,CAAC;IAC1C,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AA8CD,qBAAa,oBAAoB;IAIzB,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAJ7B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA6C;gBAGjD,YAAY,EAAE,eAAe,EAC7B,QAAQ,EAAE,WAAW;IAG1C,OAAO,CAAC,KAAK;IAOb,OAAO,CAAC,OAAO;IAQT,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,KAAK;sBAfjB,MAAM;mBAAa,MAAM;;;;;IA4BpF,aAAa,CAAC,YAAY,EAAE,MAAM;IAKlC,WAAW,CACb,KAAK,EAAE,MAAM,EACb,eAAe,EAAE,MAAM,EACvB,KAAK,EAAE,qBAAqB,EAAE,EAC9B,MAAM,SAAW,EACjB,aAAa,CAAC,EAAE,MAAM;sBAtCuC,MAAM;mBAAa,MAAM;;;;;IA+EpF,IAAI,CAAC,YAAY,EAAE,MAAM;;;;;;IA4DzB,kBAAkB,CACpB,KAAK,EAAE,MAAM,EACb,eAAe,EAAE,MAAM,EACvB,OAAO,EAAE,wBAAwB,EACjC,MAAM,SAAW;sBA/I4C,MAAM;mBAAa,MAAM;;;;;;;;;;;;;IAoLpF,OAAO,CAAC,YAAY,EAAE,MAAM;;;;;;;;CAuBrC"}
@@ -0,0 +1,186 @@
1
+ import { createHash, randomBytes } from 'node:crypto';
2
+ const PREVIEW_TTL_MS = 10 * 60 * 1000;
3
+ function hash(content, algorithm = 'sha256') {
4
+ return createHash(algorithm).update(content).digest('hex');
5
+ }
6
+ function safePath(requested) {
7
+ if (!requested || requested.includes('\\') || requested.startsWith('/')) {
8
+ throw new Error(`Unsafe Design Center path: ${requested}`);
9
+ }
10
+ const segments = requested.split('/');
11
+ if (segments.some((segment) => segment === '' || segment === '.' || segment === '..')) {
12
+ throw new Error(`Unsafe Design Center path: ${requested}`);
13
+ }
14
+ if (segments[0]?.toLowerCase() === 'exchange_modules') {
15
+ throw new Error('Managed exchange_modules content cannot be synchronized.');
16
+ }
17
+ return segments.join('/');
18
+ }
19
+ export class DesignCenterWorkflow {
20
+ designCenter;
21
+ exchange;
22
+ previews = new Map();
23
+ constructor(designCenter, exchange) {
24
+ this.designCenter = designCenter;
25
+ this.exchange = exchange;
26
+ }
27
+ issue(kind, payload) {
28
+ const previewToken = randomBytes(24).toString('base64url');
29
+ const expiresAt = Date.now() + PREVIEW_TTL_MS;
30
+ this.previews.set(previewToken, { kind, payload, expiresAt });
31
+ return { previewToken, expiresAt: new Date(expiresAt).toISOString() };
32
+ }
33
+ consume(kind, token) {
34
+ const preview = this.previews.get(token);
35
+ this.previews.delete(token);
36
+ if (!preview || preview.kind !== kind)
37
+ throw new Error('Preview token is invalid or already used.');
38
+ if (preview.expiresAt <= Date.now())
39
+ throw new Error('Preview token expired; generate a new preview.');
40
+ return preview.payload;
41
+ }
42
+ async previewProjectCreate(orgId, name, classifier) {
43
+ const projects = await this.designCenter.getProjects(orgId, true);
44
+ if (projects.some((project) => project.name.toLowerCase() === name.toLowerCase())) {
45
+ throw new Error(`A Design Center project named "${name}" already exists.`);
46
+ }
47
+ return {
48
+ action: 'create',
49
+ name,
50
+ classifier,
51
+ ...this.issue('create-project', { orgId, name, classifier }),
52
+ };
53
+ }
54
+ async createProject(previewToken) {
55
+ const payload = this.consume('create-project', previewToken);
56
+ return this.designCenter.createProject(payload.orgId, payload.name, payload.classifier);
57
+ }
58
+ async previewSync(orgId, projectNameOrId, files, branch = 'master', commitMessage) {
59
+ const project = await this.designCenter.findByNameOrThrow(orgId, projectNameOrId);
60
+ const normalized = files.map((file) => ({ path: safePath(file.path), content: file.content }));
61
+ if (new Set(normalized.map((file) => file.path)).size !== normalized.length) {
62
+ throw new Error('The sync input contains duplicate paths.');
63
+ }
64
+ const remoteFiles = await this.designCenter.getFiles(orgId, project.id, branch);
65
+ const remotePaths = new Set(remoteFiles
66
+ .filter((file) => file.type.toLowerCase() === 'file')
67
+ .map((file) => file.path.replace(/^\//, '')));
68
+ const entries = [];
69
+ for (const file of normalized) {
70
+ const localHash = hash(file.content);
71
+ if (!remotePaths.has(file.path)) {
72
+ entries.push({ path: file.path, action: 'create', localHash, remoteHash: null });
73
+ continue;
74
+ }
75
+ const remoteContent = await this.designCenter.getFileContent(orgId, project.id, file.path, branch);
76
+ const remoteHash = hash(remoteContent);
77
+ entries.push({
78
+ path: file.path,
79
+ action: remoteHash === localHash ? 'unchanged' : 'update',
80
+ localHash,
81
+ remoteHash,
82
+ });
83
+ }
84
+ const payload = {
85
+ orgId,
86
+ projectId: project.id,
87
+ projectName: project.name,
88
+ branch,
89
+ files: normalized,
90
+ entries,
91
+ ...(commitMessage ? { commitMessage } : {}),
92
+ };
93
+ return { project: project.name, branch, entries, ...this.issue('sync-files', payload) };
94
+ }
95
+ async sync(previewToken) {
96
+ const payload = this.consume('sync-files', previewToken);
97
+ return this.designCenter.withLock(payload.orgId, payload.projectId, payload.branch, async () => {
98
+ const currentFiles = await this.designCenter.getFiles(payload.orgId, payload.projectId, payload.branch);
99
+ const currentPaths = new Set(currentFiles
100
+ .filter((file) => file.type.toLowerCase() === 'file')
101
+ .map((file) => file.path.replace(/^\//, '')));
102
+ const conflicts = [];
103
+ for (const entry of payload.entries) {
104
+ const exists = currentPaths.has(entry.path);
105
+ if (!exists && entry.remoteHash !== null) {
106
+ conflicts.push(entry.path);
107
+ continue;
108
+ }
109
+ if (exists) {
110
+ const content = await this.designCenter.getFileContent(payload.orgId, payload.projectId, entry.path, payload.branch);
111
+ if (hash(content) !== entry.remoteHash)
112
+ conflicts.push(entry.path);
113
+ }
114
+ }
115
+ if (conflicts.length > 0) {
116
+ throw new Error(`Design Center changed after preview; sync aborted for: ${conflicts.join(', ')}`);
117
+ }
118
+ const changed = payload.entries.filter((entry) => entry.action !== 'unchanged');
119
+ if (changed.length > 0) {
120
+ await this.designCenter.maintainLock(payload.orgId, payload.projectId, payload.branch);
121
+ const byPath = new Map(payload.files.map((file) => [file.path, file]));
122
+ await this.designCenter.saveFiles(payload.orgId, payload.projectId, changed.map((entry) => byPath.get(entry.path)), payload.branch, payload.commitMessage);
123
+ for (const entry of changed) {
124
+ const saved = await this.designCenter.getFileContent(payload.orgId, payload.projectId, entry.path, payload.branch);
125
+ if (hash(saved) !== entry.localHash)
126
+ throw new Error(`Post-save verification failed for ${entry.path}.`);
127
+ }
128
+ }
129
+ return {
130
+ project: payload.projectName,
131
+ branch: payload.branch,
132
+ changed: changed.length,
133
+ entries: payload.entries,
134
+ };
135
+ });
136
+ }
137
+ async previewPublication(orgId, projectNameOrId, options, branch = 'master') {
138
+ const project = await this.designCenter.findByNameOrThrow(orgId, projectNameOrId);
139
+ const exchangeMeta = await this.designCenter.getExchangeJson(orgId, project.id, branch);
140
+ const mainFile = safePath(options.main || exchangeMeta?.main || '');
141
+ const source = await this.designCenter.getFileContent(orgId, project.id, mainFile, branch);
142
+ const resolvedOptions = {
143
+ ...options,
144
+ main: mainFile,
145
+ groupId: options.groupId || exchangeMeta?.groupId || orgId,
146
+ assetId: options.assetId || exchangeMeta?.assetId || options.name,
147
+ };
148
+ const payload = {
149
+ orgId,
150
+ projectId: project.id,
151
+ projectName: project.name,
152
+ branch,
153
+ options: resolvedOptions,
154
+ mainFile,
155
+ sourceHash: hash(source),
156
+ };
157
+ return {
158
+ project: project.name,
159
+ branch,
160
+ coordinates: {
161
+ groupId: resolvedOptions.groupId,
162
+ assetId: resolvedOptions.assetId,
163
+ version: resolvedOptions.version,
164
+ },
165
+ apiVersion: resolvedOptions.apiVersion,
166
+ classifier: resolvedOptions.classifier,
167
+ mainFile,
168
+ sourceHash: payload.sourceHash,
169
+ ...this.issue('publish-exchange', payload),
170
+ };
171
+ }
172
+ async publish(previewToken) {
173
+ const payload = this.consume('publish-exchange', previewToken);
174
+ const result = await this.designCenter.withLock(payload.orgId, payload.projectId, payload.branch, async () => {
175
+ const current = await this.designCenter.getFileContent(payload.orgId, payload.projectId, payload.mainFile, payload.branch);
176
+ if (hash(current) !== payload.sourceHash)
177
+ throw new Error('The main contract changed after publication preview.');
178
+ return this.designCenter.publishToExchangeLocked(payload.orgId, payload.projectId, payload.options, payload.branch);
179
+ });
180
+ const downloaded = await this.exchange.downloadSpecArtifact(result.groupId, result.assetId, result.version);
181
+ if (!downloaded.metadataHashMatches)
182
+ throw new Error('Exchange artifact hash verification failed after publication.');
183
+ return { ...result, sourceHash: payload.sourceHash, exchangeArtifactHash: downloaded.sha256, verified: true };
184
+ }
185
+ }
186
+ //# sourceMappingURL=DesignCenterWorkflow.js.map