@peterhauge/apiops-cli 0.2.1-alpha.0 → 0.3.0-alpha.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 (126) hide show
  1. package/README.md +167 -169
  2. package/dist/cli/extract-command.d.ts +2 -2
  3. package/dist/cli/extract-command.d.ts.map +1 -1
  4. package/dist/cli/extract-command.js +3 -5
  5. package/dist/cli/extract-command.js.map +1 -1
  6. package/dist/cli/index.js +2 -3
  7. package/dist/cli/index.js.map +1 -1
  8. package/dist/cli/init-command.d.ts +1 -1
  9. package/dist/cli/init-command.js +1 -1
  10. package/dist/cli/publish-command.d.ts +2 -2
  11. package/dist/cli/publish-command.js +3 -3
  12. package/dist/clients/apim-client.d.ts +16 -5
  13. package/dist/clients/apim-client.d.ts.map +1 -1
  14. package/dist/clients/apim-client.js +22 -7
  15. package/dist/clients/apim-client.js.map +1 -1
  16. package/dist/clients/artifact-store.d.ts +4 -4
  17. package/dist/clients/artifact-store.d.ts.map +1 -1
  18. package/dist/clients/artifact-store.js +10 -4
  19. package/dist/clients/artifact-store.js.map +1 -1
  20. package/dist/clients/iapim-client.d.ts +14 -2
  21. package/dist/clients/iapim-client.d.ts.map +1 -1
  22. package/dist/clients/iapim-client.js +1 -1
  23. package/dist/clients/iartifact-store.d.ts +10 -5
  24. package/dist/clients/iartifact-store.d.ts.map +1 -1
  25. package/dist/clients/iartifact-store.js +1 -1
  26. package/dist/lib/cloud-config.d.ts +1 -1
  27. package/dist/lib/cloud-config.js +1 -1
  28. package/dist/lib/config-loader.d.ts +2 -7
  29. package/dist/lib/config-loader.d.ts.map +1 -1
  30. package/dist/lib/config-loader.js +3 -22
  31. package/dist/lib/config-loader.js.map +1 -1
  32. package/dist/lib/dependency-graph.d.ts +1 -1
  33. package/dist/lib/dependency-graph.js +1 -1
  34. package/dist/lib/exit-codes.d.ts +1 -1
  35. package/dist/lib/exit-codes.js +1 -1
  36. package/dist/lib/logger.js +1 -1
  37. package/dist/lib/parallel-runner.d.ts +2 -2
  38. package/dist/lib/parallel-runner.js +2 -2
  39. package/dist/lib/resource-path.d.ts +1 -1
  40. package/dist/lib/resource-path.js +1 -1
  41. package/dist/lib/resource-uri.d.ts +1 -1
  42. package/dist/lib/resource-uri.js +1 -1
  43. package/dist/lib/workspace-link.d.ts +31 -3
  44. package/dist/lib/workspace-link.d.ts.map +1 -1
  45. package/dist/lib/workspace-link.js +49 -3
  46. package/dist/lib/workspace-link.js.map +1 -1
  47. package/dist/models/config.d.ts +2 -4
  48. package/dist/models/config.d.ts.map +1 -1
  49. package/dist/models/config.js +1 -1
  50. package/dist/models/resource-types.d.ts +1 -1
  51. package/dist/models/resource-types.d.ts.map +1 -1
  52. package/dist/models/resource-types.js +5 -3
  53. package/dist/models/resource-types.js.map +1 -1
  54. package/dist/models/types.d.ts +22 -1
  55. package/dist/models/types.d.ts.map +1 -1
  56. package/dist/models/types.js +1 -1
  57. package/dist/services/api-extractor.d.ts +1 -1
  58. package/dist/services/api-extractor.d.ts.map +1 -1
  59. package/dist/services/api-extractor.js +29 -127
  60. package/dist/services/api-extractor.js.map +1 -1
  61. package/dist/services/api-publisher.d.ts +1 -1
  62. package/dist/services/api-publisher.d.ts.map +1 -1
  63. package/dist/services/api-publisher.js +50 -18
  64. package/dist/services/api-publisher.js.map +1 -1
  65. package/dist/services/delete-unmatched-service.d.ts +1 -1
  66. package/dist/services/delete-unmatched-service.js +1 -1
  67. package/dist/services/dry-run-reporter.d.ts +1 -1
  68. package/dist/services/dry-run-reporter.js +1 -1
  69. package/dist/services/extract-service.d.ts +1 -1
  70. package/dist/services/extract-service.js +1 -1
  71. package/dist/services/filter-service.d.ts +19 -1
  72. package/dist/services/filter-service.d.ts.map +1 -1
  73. package/dist/services/filter-service.js +40 -2
  74. package/dist/services/filter-service.js.map +1 -1
  75. package/dist/services/git-diff-service.d.ts +1 -1
  76. package/dist/services/git-diff-service.js +1 -1
  77. package/dist/services/identity-guide-service.d.ts +1 -1
  78. package/dist/services/identity-guide-service.js +12 -12
  79. package/dist/services/init-service.d.ts +1 -1
  80. package/dist/services/init-service.js +1 -1
  81. package/dist/services/override-merger.d.ts +1 -1
  82. package/dist/services/override-merger.js +1 -1
  83. package/dist/services/product-extractor.d.ts +1 -1
  84. package/dist/services/product-extractor.d.ts.map +1 -1
  85. package/dist/services/product-extractor.js +27 -26
  86. package/dist/services/product-extractor.js.map +1 -1
  87. package/dist/services/product-publisher.d.ts.map +1 -1
  88. package/dist/services/product-publisher.js +25 -9
  89. package/dist/services/product-publisher.js.map +1 -1
  90. package/dist/services/prompt-service.d.ts +1 -1
  91. package/dist/services/prompt-service.js +1 -1
  92. package/dist/services/publish-service.d.ts +1 -1
  93. package/dist/services/publish-service.js +1 -1
  94. package/dist/services/resource-extractor.d.ts +1 -1
  95. package/dist/services/resource-extractor.js +1 -1
  96. package/dist/services/resource-publisher.d.ts +9 -1
  97. package/dist/services/resource-publisher.d.ts.map +1 -1
  98. package/dist/services/resource-publisher.js +30 -9
  99. package/dist/services/resource-publisher.js.map +1 -1
  100. package/dist/services/secret-redactor.d.ts +1 -1
  101. package/dist/services/secret-redactor.js +1 -1
  102. package/dist/services/transitive-resolver.d.ts +1 -1
  103. package/dist/services/transitive-resolver.js +1 -1
  104. package/dist/services/workspace-extractor.d.ts +7 -1
  105. package/dist/services/workspace-extractor.d.ts.map +1 -1
  106. package/dist/services/workspace-extractor.js +75 -10
  107. package/dist/services/workspace-extractor.js.map +1 -1
  108. package/dist/templates/azure-devops/extract-pipeline.d.ts +1 -1
  109. package/dist/templates/azure-devops/extract-pipeline.js +142 -142
  110. package/dist/templates/azure-devops/publish-pipeline.d.ts +1 -1
  111. package/dist/templates/azure-devops/publish-pipeline.js +114 -114
  112. package/dist/templates/configs/filter-config.d.ts +1 -1
  113. package/dist/templates/configs/filter-config.d.ts.map +1 -1
  114. package/dist/templates/configs/filter-config.js +118 -109
  115. package/dist/templates/configs/filter-config.js.map +1 -1
  116. package/dist/templates/configs/override-config.d.ts +1 -1
  117. package/dist/templates/configs/override-config.d.ts.map +1 -1
  118. package/dist/templates/configs/override-config.js +92 -91
  119. package/dist/templates/configs/override-config.js.map +1 -1
  120. package/dist/templates/github-actions/extract-workflow.d.ts +1 -1
  121. package/dist/templates/github-actions/extract-workflow.js +119 -119
  122. package/dist/templates/github-actions/publish-workflow.d.ts +1 -1
  123. package/dist/templates/github-actions/publish-workflow.d.ts.map +1 -1
  124. package/dist/templates/github-actions/publish-workflow.js +147 -104
  125. package/dist/templates/github-actions/publish-workflow.js.map +1 -1
  126. package/package.json +69 -69
@@ -1,11 +1,11 @@
1
1
  /**
2
- * T018: Parallel execution runner with concurrency control.
2
+ * Parallel execution runner with concurrency control.
3
3
  *
4
4
  * Custom implementation (no external dependencies such as p-limit) to limit
5
5
  * concurrent APIM REST API calls and avoid 429 rate limiting. Azure APIM has
6
6
  * strict per-second request limits, so unbounded Promise.all() would fire all
7
7
  * requests simultaneously, triggering throttling. Bounded concurrency is a
8
- * requirement from research.md R8 and justified in tasks.md T018.
8
+ * requirement from research.md.
9
9
  *
10
10
  * Built-in implementation without external dependencies (no p-limit).
11
11
  */
@@ -1,13 +1,13 @@
1
1
  // Copyright (c) Microsoft Corporation.
2
2
  // Licensed under the MIT license.
3
3
  /**
4
- * T018: Parallel execution runner with concurrency control.
4
+ * Parallel execution runner with concurrency control.
5
5
  *
6
6
  * Custom implementation (no external dependencies such as p-limit) to limit
7
7
  * concurrent APIM REST API calls and avoid 429 rate limiting. Azure APIM has
8
8
  * strict per-second request limits, so unbounded Promise.all() would fire all
9
9
  * requests simultaneously, triggering throttling. Bounded concurrency is a
10
- * requirement from research.md R8 and justified in tasks.md T018.
10
+ * requirement from research.md.
11
11
  *
12
12
  * Built-in implementation without external dependencies (no p-limit).
13
13
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * T013: Resource descriptor ↔ artifact file path mapping
2
+ * Resource descriptor ↔ artifact file path mapping
3
3
  * Map descriptor to directory/file paths per data-model.md artifact conventions
4
4
  */
5
5
  import { ResourceDescriptor } from '../models/types.js';
@@ -1,7 +1,7 @@
1
1
  // Copyright (c) Microsoft Corporation.
2
2
  // Licensed under the MIT license.
3
3
  /**
4
- * T013: Resource descriptor ↔ artifact file path mapping
4
+ * Resource descriptor ↔ artifact file path mapping
5
5
  * Map descriptor to directory/file paths per data-model.md artifact conventions
6
6
  */
7
7
  import * as path from 'node:path';
@@ -1,5 +1,5 @@
1
1
  /**
2
- * T012: Resource descriptor ↔ ARM URI mapping
2
+ * Resource descriptor ↔ ARM URI mapping
3
3
  * Build full ARM URL from ApimServiceContext + ResourceDescriptor
4
4
  */
5
5
  import { ApimServiceContext, ResourceDescriptor } from '../models/types.js';
@@ -1,7 +1,7 @@
1
1
  // Copyright (c) Microsoft Corporation.
2
2
  // Licensed under the MIT license.
3
3
  /**
4
- * T012: Resource descriptor ↔ ARM URI mapping
4
+ * Resource descriptor ↔ ARM URI mapping
5
5
  * Build full ARM URL from ApimServiceContext + ResourceDescriptor
6
6
  */
7
7
  import { RESOURCE_TYPE_METADATA } from '../models/resource-types.js';
@@ -8,7 +8,31 @@
8
8
  * This module provides helpers to extract the actual resource name from
9
9
  * these link responses and to build link payloads for publishing.
10
10
  */
11
- import { ApimServiceContext } from '../models/types.js';
11
+ import { ApimServiceContext, AssociationScope } from '../models/types.js';
12
+ /**
13
+ * Determines whether an ARM resource ID refers to a workspace-scoped or a
14
+ * service-scoped resource.
15
+ *
16
+ * Workspace-scoped IDs contain a `/workspaces/{name}/` segment after the APIM
17
+ * service segment (e.g. `.../service/apim/workspaces/ws/groups/g`). Service-scoped
18
+ * IDs do not (e.g. `.../service/apim/groups/administrators`).
19
+ */
20
+ export declare function extractScopeFromLinkId(armId: string): AssociationScope;
21
+ /**
22
+ * Extracts both the resource name and its scope from a workspace link response.
23
+ *
24
+ * Like {@link extractNameFromLink}, but also reports whether the linked
25
+ * resource lives at service or workspace scope (derived from its ARM ID), so
26
+ * publish can rebuild the link target at the correct scope.
27
+ *
28
+ * @param json - Raw link response item from LIST
29
+ * @param linkIdProperty - Property name containing the ARM ID (e.g. 'apiId', 'groupId')
30
+ * @returns The name and scope, or undefined if no ARM ID is present
31
+ */
32
+ export declare function extractLinkTarget(json: Record<string, unknown>, linkIdProperty: string): {
33
+ name: string;
34
+ scope: AssociationScope;
35
+ } | undefined;
12
36
  /**
13
37
  * Extracts the resource name from a workspace link response item.
14
38
  *
@@ -28,9 +52,12 @@ export declare function extractNameFromLink(json: Record<string, unknown>, linkI
28
52
  * @param context - APIM service context (may be service-scoped or workspace-scoped)
29
53
  * @param resourcePath - The ARM path segment (e.g. 'apis/myApi' or 'groups/myGroup')
30
54
  * @param workspace - Optional workspace name; required when context is service-scoped
55
+ * @param scope - Scope of the linked resource. When 'service', the workspace
56
+ * segment is omitted so the ID points at a service-level resource (e.g. the
57
+ * built-in `administrators` group) even within a workspace link.
31
58
  * @returns Full ARM resource ID
32
59
  */
33
- export declare function buildWorkspaceResourceId(context: ApimServiceContext, resourcePath: string, workspace?: string): string;
60
+ export declare function buildWorkspaceResourceId(context: ApimServiceContext, resourcePath: string, workspace?: string, scope?: AssociationScope): string;
34
61
  export declare function isWorkspaceScope(context: ApimServiceContext): boolean;
35
62
  /**
36
63
  * Builds the PUT payload for creating a workspace link resource.
@@ -40,7 +67,8 @@ export declare function isWorkspaceScope(context: ApimServiceContext): boolean;
40
67
  * @param resourceType - The ARM resource type segment (e.g. 'apis', 'groups', 'products')
41
68
  * @param resourceName - The resource name to link to
42
69
  * @param workspace - Optional workspace name; required when context is service-scoped
70
+ * @param scope - Scope of the linked resource (defaults to 'workspace')
43
71
  * @returns PUT payload for the link resource
44
72
  */
45
- export declare function buildLinkPayload(context: ApimServiceContext, linkIdProperty: string, resourceType: string, resourceName: string, workspace?: string): Record<string, unknown>;
73
+ export declare function buildLinkPayload(context: ApimServiceContext, linkIdProperty: string, resourceType: string, resourceName: string, workspace?: string, scope?: AssociationScope): Record<string, unknown>;
46
74
  //# sourceMappingURL=workspace-link.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"workspace-link.d.ts","sourceRoot":"","sources":["../../src/lib/workspace-link.ts"],"names":[],"mappings":"AAEA;;;;;;;;;GASG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAExD;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,cAAc,EAAE,MAAM,GACrB,MAAM,GAAG,SAAS,CAkBpB;AAED;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,kBAAkB,EAC3B,YAAY,EAAE,MAAM,EACpB,SAAS,CAAC,EAAE,MAAM,GACjB,MAAM,CAgBR;AAWD,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAErE;AAED;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,kBAAkB,EAC3B,cAAc,EAAE,MAAM,EACtB,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,EACpB,SAAS,CAAC,EAAE,MAAM,GACjB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAYzB"}
1
+ {"version":3,"file":"workspace-link.d.ts","sourceRoot":"","sources":["../../src/lib/workspace-link.ts"],"names":[],"mappings":"AAEA;;;;;;;;;GASG;AAEH,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAE1E;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,gBAAgB,CAItE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,cAAc,EAAE,MAAM,GACrB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,gBAAgB,CAAA;CAAE,GAAG,SAAS,CAavD;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,cAAc,EAAE,MAAM,GACrB,MAAM,GAAG,SAAS,CAkBpB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,kBAAkB,EAC3B,YAAY,EAAE,MAAM,EACpB,SAAS,CAAC,EAAE,MAAM,EAClB,KAAK,GAAE,gBAA8B,GACpC,MAAM,CAuBR;AAWD,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAErE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,kBAAkB,EAC3B,cAAc,EAAE,MAAM,EACtB,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,EACpB,SAAS,CAAC,EAAE,MAAM,EAClB,KAAK,GAAE,gBAA8B,GACpC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAazB"}
@@ -10,6 +10,42 @@
10
10
  * This module provides helpers to extract the actual resource name from
11
11
  * these link responses and to build link payloads for publishing.
12
12
  */
13
+ /**
14
+ * Determines whether an ARM resource ID refers to a workspace-scoped or a
15
+ * service-scoped resource.
16
+ *
17
+ * Workspace-scoped IDs contain a `/workspaces/{name}/` segment after the APIM
18
+ * service segment (e.g. `.../service/apim/workspaces/ws/groups/g`). Service-scoped
19
+ * IDs do not (e.g. `.../service/apim/groups/administrators`).
20
+ */
21
+ export function extractScopeFromLinkId(armId) {
22
+ return /\/Microsoft\.ApiManagement\/service\/[^/]+\/workspaces\/[^/]+/i.test(armId)
23
+ ? 'workspace'
24
+ : 'service';
25
+ }
26
+ /**
27
+ * Extracts both the resource name and its scope from a workspace link response.
28
+ *
29
+ * Like {@link extractNameFromLink}, but also reports whether the linked
30
+ * resource lives at service or workspace scope (derived from its ARM ID), so
31
+ * publish can rebuild the link target at the correct scope.
32
+ *
33
+ * @param json - Raw link response item from LIST
34
+ * @param linkIdProperty - Property name containing the ARM ID (e.g. 'apiId', 'groupId')
35
+ * @returns The name and scope, or undefined if no ARM ID is present
36
+ */
37
+ export function extractLinkTarget(json, linkIdProperty) {
38
+ const properties = json.properties;
39
+ const armId = properties?.[linkIdProperty];
40
+ if (typeof armId !== 'string' || armId.length === 0) {
41
+ return undefined;
42
+ }
43
+ const name = extractNameFromLink(json, linkIdProperty);
44
+ if (!name) {
45
+ return undefined;
46
+ }
47
+ return { name, scope: extractScopeFromLinkId(armId) };
48
+ }
13
49
  /**
14
50
  * Extracts the resource name from a workspace link response item.
15
51
  *
@@ -45,11 +81,20 @@ export function extractNameFromLink(json, linkIdProperty) {
45
81
  * @param context - APIM service context (may be service-scoped or workspace-scoped)
46
82
  * @param resourcePath - The ARM path segment (e.g. 'apis/myApi' or 'groups/myGroup')
47
83
  * @param workspace - Optional workspace name; required when context is service-scoped
84
+ * @param scope - Scope of the linked resource. When 'service', the workspace
85
+ * segment is omitted so the ID points at a service-level resource (e.g. the
86
+ * built-in `administrators` group) even within a workspace link.
48
87
  * @returns Full ARM resource ID
49
88
  */
50
- export function buildWorkspaceResourceId(context, resourcePath, workspace) {
89
+ export function buildWorkspaceResourceId(context, resourcePath, workspace, scope = 'workspace') {
51
90
  const url = new URL(context.baseUrl);
52
91
  const basePath = url.pathname;
92
+ // Service-scoped target: strip any workspace segment so the ID resolves at
93
+ // the service level regardless of the current context scope.
94
+ if (scope === 'service') {
95
+ const servicePath = basePath.replace(/\/workspaces\/[^/]+/i, '');
96
+ return `${servicePath}/${resourcePath}`;
97
+ }
53
98
  // If context already includes the workspace segment, use it directly
54
99
  if (isWorkspaceScope(context)) {
55
100
  return `${basePath}/${resourcePath}`;
@@ -80,10 +125,11 @@ export function isWorkspaceScope(context) {
80
125
  * @param resourceType - The ARM resource type segment (e.g. 'apis', 'groups', 'products')
81
126
  * @param resourceName - The resource name to link to
82
127
  * @param workspace - Optional workspace name; required when context is service-scoped
128
+ * @param scope - Scope of the linked resource (defaults to 'workspace')
83
129
  * @returns PUT payload for the link resource
84
130
  */
85
- export function buildLinkPayload(context, linkIdProperty, resourceType, resourceName, workspace) {
86
- const resourceId = buildWorkspaceResourceId(context, `${resourceType}/${encodeURIComponent(resourceName)}`, workspace);
131
+ export function buildLinkPayload(context, linkIdProperty, resourceType, resourceName, workspace, scope = 'workspace') {
132
+ const resourceId = buildWorkspaceResourceId(context, `${resourceType}/${encodeURIComponent(resourceName)}`, workspace, scope);
87
133
  return {
88
134
  properties: {
89
135
  [linkIdProperty]: resourceId,
@@ -1 +1 @@
1
- {"version":3,"file":"workspace-link.js","sourceRoot":"","sources":["../../src/lib/workspace-link.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAClC;;;;;;;;;GASG;AAIH;;;;;;;;;;GAUG;AACH,MAAM,UAAU,mBAAmB,CACjC,IAA6B,EAC7B,cAAsB;IAEtB,MAAM,UAAU,GAAG,IAAI,CAAC,UAAiD,CAAC;IAC1E,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,KAAK,GAAG,UAAU,CAAC,cAAc,CAAC,CAAC;IACzC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACpD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,gEAAgE;IAChE,gDAAgD;IAChD,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAClC,MAAM,WAAW,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAClD,OAAO,WAAW,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC;QAC1C,CAAC,CAAC,kBAAkB,CAAC,WAAW,CAAC;QACjC,CAAC,CAAC,SAAS,CAAC;AAChB,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,wBAAwB,CACtC,OAA2B,EAC3B,YAAoB,EACpB,SAAkB;IAElB,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACrC,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;IAE9B,qEAAqE;IACrE,IAAI,gBAAgB,CAAC,OAAO,CAAC,EAAE,CAAC;QAC9B,OAAO,GAAG,QAAQ,IAAI,YAAY,EAAE,CAAC;IACvC,CAAC;IAED,gFAAgF;IAChF,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,GAAG,QAAQ,eAAe,kBAAkB,CAAC,SAAS,CAAC,IAAI,YAAY,EAAE,CAAC;IACnF,CAAC;IAED,wEAAwE;IACxE,OAAO,GAAG,QAAQ,IAAI,YAAY,EAAE,CAAC;AACvC,CAAC;AAED;;;;;;GAMG;AACH,MAAM,uBAAuB,GAAG,gEAAgE,CAAC;AAEjG,MAAM,UAAU,gBAAgB,CAAC,OAA2B;IAC1D,OAAO,uBAAuB,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AACvD,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,gBAAgB,CAC9B,OAA2B,EAC3B,cAAsB,EACtB,YAAoB,EACpB,YAAoB,EACpB,SAAkB;IAElB,MAAM,UAAU,GAAG,wBAAwB,CACzC,OAAO,EACP,GAAG,YAAY,IAAI,kBAAkB,CAAC,YAAY,CAAC,EAAE,EACrD,SAAS,CACV,CAAC;IAEF,OAAO;QACL,UAAU,EAAE;YACV,CAAC,cAAc,CAAC,EAAE,UAAU;SAC7B;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"workspace-link.js","sourceRoot":"","sources":["../../src/lib/workspace-link.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * T008: Config interfaces
2
+ * Config interfaces
3
3
  * ExtractConfig, FilterConfig, PublishConfig, OverrideConfig, InitConfig
4
4
  */
5
5
  import { ApimServiceContext } from './types.js';
@@ -9,9 +9,7 @@ export interface ExtractConfig {
9
9
  outputDir: string;
10
10
  filter?: FilterConfig;
11
11
  includeTransitive: boolean;
12
- specFormat?: string;
13
12
  logLevel: LogLevel;
14
- otelConfigPath?: string;
15
13
  }
16
14
  /**
17
15
  * Sub-resource filter for an individual API.
@@ -38,6 +36,7 @@ export interface WorkspaceSubFilter {
38
36
  namedValues?: string[];
39
37
  policyFragments?: string[];
40
38
  products?: string[];
39
+ schemas?: string[];
41
40
  subscriptions?: string[];
42
41
  tags?: string[];
43
42
  versionSets?: string[];
@@ -73,7 +72,6 @@ export interface PublishConfig {
73
72
  deleteUnmatched: boolean;
74
73
  commitId?: string;
75
74
  logLevel: LogLevel;
76
- otelConfigPath?: string;
77
75
  }
78
76
  /**
79
77
  * A single override entry: properties to deep-merge + optional nested child overrides.
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/models/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/models/config.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  // Copyright (c) Microsoft Corporation.
2
2
  // Licensed under the MIT license.
3
3
  /**
4
- * T008: Config interfaces
4
+ * Config interfaces
5
5
  * ExtractConfig, FilterConfig, PublishConfig, OverrideConfig, InitConfig
6
6
  */
7
7
  export {};
@@ -1,5 +1,5 @@
1
1
  /**
2
- * T006: ResourceType enum and metadata
2
+ * ResourceType enum and metadata
3
3
  * All 34 APIM resource types with ARM path suffixes, artifact directories, and info file names
4
4
  */
5
5
  export declare enum ResourceType {
@@ -1 +1 @@
1
- {"version":3,"file":"resource-types.d.ts","sourceRoot":"","sources":["../../src/models/resource-types.ts"],"names":[],"mappings":"AAEA;;;GAGG;AAEH,oBAAY,YAAY;IACtB,UAAU,eAAe;IACzB,GAAG,QAAQ;IACX,OAAO,YAAY;IACnB,UAAU,eAAe;IACzB,OAAO,YAAY;IACnB,MAAM,WAAW;IACjB,KAAK,UAAU;IACf,UAAU,eAAe;IACzB,cAAc,mBAAmB;IACjC,aAAa,kBAAkB;IAC/B,OAAO,YAAY;IACnB,aAAa,kBAAkB;IAC/B,UAAU,eAAe;IACzB,YAAY,iBAAiB;IAC7B,UAAU,eAAe;IACzB,GAAG,QAAQ;IACX,SAAS,cAAc;IACvB,MAAM,WAAW;IACjB,aAAa,kBAAkB;IAC/B,YAAY,iBAAiB;IAC7B,kBAAkB,uBAAuB;IACzC,UAAU,eAAe;IACzB,YAAY,iBAAiB;IAC7B,YAAY,iBAAiB;IAC7B,iBAAiB,sBAAsB;IACvC,aAAa,kBAAkB;IAC/B,SAAS,cAAc;IACvB,UAAU,eAAe;IACzB,iBAAiB,sBAAsB;IACvC,OAAO,YAAY;IACnB,WAAW,gBAAgB;IAC3B,eAAe,oBAAoB;IACnC,qBAAqB,0BAA0B;IAC/C,oFAAoF;IACpF,SAAS,cAAc;IACvB,0DAA0D;IAC1D,SAAS,cAAc;CACxB;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B;;;;OAIG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC;IACnC;;;;OAIG;IACH,QAAQ,CAAC,kBAAkB,CAAC,EAAE,OAAO,CAAC;IACtC;;;;;OAKG;IACH,QAAQ,CAAC,sBAAsB,CAAC,EAAE,MAAM,CAAC;IACzC;;;;OAIG;IACH,QAAQ,CAAC,uBAAuB,CAAC,EAAE,MAAM,CAAC;CAC3C;AAED,eAAO,MAAM,sBAAsB,EAAE,MAAM,CAAC,YAAY,EAAE,oBAAoB,CA2O7E,CAAC"}
1
+ {"version":3,"file":"resource-types.d.ts","sourceRoot":"","sources":["../../src/models/resource-types.ts"],"names":[],"mappings":"AAEA;;;GAGG;AAEH,oBAAY,YAAY;IACtB,UAAU,eAAe;IACzB,GAAG,QAAQ;IACX,OAAO,YAAY;IACnB,UAAU,eAAe;IACzB,OAAO,YAAY;IACnB,MAAM,WAAW;IACjB,KAAK,UAAU;IACf,UAAU,eAAe;IACzB,cAAc,mBAAmB;IACjC,aAAa,kBAAkB;IAC/B,OAAO,YAAY;IACnB,aAAa,kBAAkB;IAC/B,UAAU,eAAe;IACzB,YAAY,iBAAiB;IAC7B,UAAU,eAAe;IACzB,GAAG,QAAQ;IACX,SAAS,cAAc;IACvB,MAAM,WAAW;IACjB,aAAa,kBAAkB;IAC/B,YAAY,iBAAiB;IAC7B,kBAAkB,uBAAuB;IACzC,UAAU,eAAe;IACzB,YAAY,iBAAiB;IAC7B,YAAY,iBAAiB;IAC7B,iBAAiB,sBAAsB;IACvC,aAAa,kBAAkB;IAC/B,SAAS,cAAc;IACvB,UAAU,eAAe;IACzB,iBAAiB,sBAAsB;IACvC,OAAO,YAAY;IACnB,WAAW,gBAAgB;IAC3B,eAAe,oBAAoB;IACnC,qBAAqB,0BAA0B;IAC/C,oFAAoF;IACpF,SAAS,cAAc;IACvB,0DAA0D;IAC1D,SAAS,cAAc;CACxB;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B;;;;OAIG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC;IACnC;;;;OAIG;IACH,QAAQ,CAAC,kBAAkB,CAAC,EAAE,OAAO,CAAC;IACtC;;;;;OAKG;IACH,QAAQ,CAAC,sBAAsB,CAAC,EAAE,MAAM,CAAC;IACzC;;;;OAIG;IACH,QAAQ,CAAC,uBAAuB,CAAC,EAAE,MAAM,CAAC;CAC3C;AAED,eAAO,MAAM,sBAAsB,EAAE,MAAM,CAAC,YAAY,EAAE,oBAAoB,CA6O7E,CAAC"}
@@ -1,7 +1,7 @@
1
1
  // Copyright (c) Microsoft Corporation.
2
2
  // Licensed under the MIT license.
3
3
  /**
4
- * T006: ResourceType enum and metadata
4
+ * ResourceType enum and metadata
5
5
  * All 34 APIM resource types with ARM path suffixes, artifact directories, and info file names
6
6
  */
7
7
  export var ResourceType;
@@ -267,10 +267,12 @@ export const RESOURCE_TYPE_METADATA = {
267
267
  },
268
268
  [ResourceType.McpServer]: {
269
269
  // Singleton MCP (Model Context Protocol) server configuration per API.
270
- // ARM path: apis/{apiId}/mcpServers/default
270
+ // Artifact data is embedded in apiInformation.json; retain the descriptor
271
+ // only for ARM URI/dependency modeling. With infoFile unset, extract/publish
272
+ // no longer read or write the legacy mcpServerInformation.json sidecar.
271
273
  armPathSuffix: 'apis/{0}/mcpServers/default',
272
274
  artifactDirectory: 'apis/{0}',
273
- infoFile: 'mcpServerInformation.json',
275
+ infoFile: null, // Embedded in apiInformation.json
274
276
  supportsGet: true,
275
277
  },
276
278
  [ResourceType.Workspace]: {
@@ -1 +1 @@
1
- {"version":3,"file":"resource-types.js","sourceRoot":"","sources":["../../src/models/resource-types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"resource-types.js","sourceRoot":"","sources":["../../src/models/resource-types.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * T007: Core TypeScript interfaces
2
+ * Core TypeScript interfaces
3
3
  * ResourceDescriptor, ResourcePayload, ApimServiceContext, DependencyEdge
4
4
  */
5
5
  import { ResourceType } from './resource-types.js';
@@ -24,6 +24,27 @@ export interface ResourcePayload {
24
24
  /** Raw JSON from APIM GET response (properties envelope). Never parsed into typed fields. */
25
25
  json: Record<string, unknown>;
26
26
  }
27
+ /**
28
+ * Scope of a resource referenced by a workspace association link.
29
+ *
30
+ * Workspace products (and other workspace association parents) can link to
31
+ * resources that live either inside the workspace (`workspace`) or at the
32
+ * service level (`service`, e.g. the built-in `administrators`/`developers`/
33
+ * `guests` groups). The scope must be preserved so publish can rebuild the
34
+ * link target's ARM path at the correct scope.
35
+ */
36
+ export type AssociationScope = 'service' | 'workspace';
37
+ /**
38
+ * An entry in an association file (apis.json, groups.json, tags.json).
39
+ *
40
+ * `scope` is optional for backward compatibility: legacy artifacts and
41
+ * service-scoped associations store only `{ name }`. When present, it records
42
+ * whether the linked resource lives at service or workspace scope.
43
+ */
44
+ export interface AssociationEntry {
45
+ name: string;
46
+ scope?: AssociationScope;
47
+ }
27
48
  export interface ApimServiceContext {
28
49
  subscriptionId: string;
29
50
  resourceGroup: string;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/models/types.ts"],"names":[],"mappings":"AAEA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,YAAY,CAAC;IACnB;;;;;;;;;OASG;IACH,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,yCAAyC;IACzC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,kBAAkB,CAAC;IAC/B,6FAA6F;IAC7F,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC/B;AAED,MAAM,WAAW,kBAAkB;IACjC,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,YAAY,CAAC;IACnB,EAAE,EAAE,YAAY,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,KAAK,GAAG,QAAQ,CAAC;IACvB,UAAU,EAAE,kBAAkB,CAAC;IAC/B,8CAA8C;IAC9C,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,+CAA+C;IAC/C,WAAW,EAAE,MAAM,CAAC;CACrB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/models/types.ts"],"names":[],"mappings":"AAEA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,YAAY,CAAC;IACnB;;;;;;;;;OASG;IACH,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,yCAAyC;IACzC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,kBAAkB,CAAC;IAC/B,6FAA6F;IAC7F,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC/B;AAED;;;;;;;;GAQG;AACH,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,WAAW,CAAC;AAEvD;;;;;;GAMG;AACH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,gBAAgB,CAAC;CAC1B;AAED,MAAM,WAAW,kBAAkB;IACjC,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,YAAY,CAAC;IACnB,EAAE,EAAE,YAAY,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,KAAK,GAAG,QAAQ,CAAC;IACvB,UAAU,EAAE,kBAAkB,CAAC;IAC/B,8CAA8C;IAC9C,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,+CAA+C;IAC/C,WAAW,EAAE,MAAM,CAAC;CACrB"}
@@ -1,7 +1,7 @@
1
1
  // Copyright (c) Microsoft Corporation.
2
2
  // Licensed under the MIT license.
3
3
  /**
4
- * T007: Core TypeScript interfaces
4
+ * Core TypeScript interfaces
5
5
  * ResourceDescriptor, ResourcePayload, ApimServiceContext, DependencyEdge
6
6
  */
7
7
  export {};
@@ -1,5 +1,5 @@
1
1
  /**
2
- * T022: API-specific extraction logic
2
+ * API-specific extraction logic
3
3
  * API revisions, API specifications, operations & operation policies,
4
4
  * GraphQL resolvers & resolver policies, API tags, diagnostics, schemas,
5
5
  * releases, tag descriptions, wikis.
@@ -1 +1 @@
1
- {"version":3,"file":"api-extractor.d.ts","sourceRoot":"","sources":["../../src/services/api-extractor.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAE5E,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD,OAAO,EAAuB,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAMjF;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,iBAAiB,EAAE,CAAC;IAC/B,aAAa,EAAE,OAAO,CAAC;IACvB,UAAU,EAAE,iBAAiB,EAAE,CAAC;IAChC,iBAAiB,EAAE,iBAAiB,EAAE,CAAC;IACvC,IAAI,EAAE,iBAAiB,EAAE,CAAC;IAC1B,WAAW,EAAE,iBAAiB,EAAE,CAAC;IACjC,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAC7B,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAC9B,eAAe,EAAE,iBAAiB,EAAE,CAAC;IACrC,IAAI,EAAE,OAAO,CAAC;IACd,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,iBAAiB,EAAE,CAAC;IAC/B,gBAAgB,EAAE,iBAAiB,EAAE,CAAC;IACtC,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AA6GD;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,WAAW,EACnB,KAAK,EAAE,cAAc,EACrB,OAAO,EAAE,kBAAkB,EAC3B,aAAa,EAAE,kBAAkB,EACjC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,SAAS,EAAE,MAAM,EACjB,MAAM,CAAC,EAAE,YAAY,EACrB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,mBAAmB,CAAC,CAiH9B;AAwZD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,uBAAuB,CAC3C,MAAM,EAAE,WAAW,EACnB,KAAK,EAAE,cAAc,EACrB,OAAO,EAAE,kBAAkB,EAC3B,iBAAiB,EAAE,MAAM,EAAE,EAC3B,iBAAiB,EAAE,GAAG,CAAC,MAAM,CAAC,EAC9B,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,MAAM,CAAC,CAuDjB"}
1
+ {"version":3,"file":"api-extractor.d.ts","sourceRoot":"","sources":["../../src/services/api-extractor.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AAEH,OAAO,EAAE,WAAW,EAAkB,MAAM,4BAA4B,CAAC;AACzE,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAE5E,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD,OAAO,EAAuB,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAMjF;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,iBAAiB,EAAE,CAAC;IAC/B,aAAa,EAAE,OAAO,CAAC;IACvB,UAAU,EAAE,iBAAiB,EAAE,CAAC;IAChC,iBAAiB,EAAE,iBAAiB,EAAE,CAAC;IACvC,IAAI,EAAE,iBAAiB,EAAE,CAAC;IAC1B,WAAW,EAAE,iBAAiB,EAAE,CAAC;IACjC,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAC7B,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAC9B,eAAe,EAAE,iBAAiB,EAAE,CAAC;IACrC,IAAI,EAAE,OAAO,CAAC;IACd,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,iBAAiB,EAAE,CAAC;IAC/B,gBAAgB,EAAE,iBAAiB,EAAE,CAAC;IACtC,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,WAAW,EACnB,KAAK,EAAE,cAAc,EACrB,OAAO,EAAE,kBAAkB,EAC3B,aAAa,EAAE,kBAAkB,EACjC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,SAAS,EAAE,MAAM,EACjB,MAAM,CAAC,EAAE,YAAY,EACrB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,mBAAmB,CAAC,CA4G9B;AAgYD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,uBAAuB,CAC3C,MAAM,EAAE,WAAW,EACnB,KAAK,EAAE,cAAc,EACrB,OAAO,EAAE,kBAAkB,EAC3B,iBAAiB,EAAE,MAAM,EAAE,EAC3B,iBAAiB,EAAE,GAAG,CAAC,MAAM,CAAC,EAC9B,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,MAAM,CAAC,CAuDjB"}
@@ -1,7 +1,7 @@
1
1
  // Copyright (c) Microsoft Corporation.
2
2
  // Licensed under the MIT license.
3
3
  /**
4
- * T022: API-specific extraction logic
4
+ * API-specific extraction logic
5
5
  * API revisions, API specifications, operations & operation policies,
6
6
  * GraphQL resolvers & resolver policies, API tags, diagnostics, schemas,
7
7
  * releases, tag descriptions, wikis.
@@ -13,92 +13,6 @@ import { logger } from '../lib/logger.js';
13
13
  import { buildResourceLabel } from '../lib/resource-uri.js';
14
14
  import { getNamePart } from '../lib/resource-path.js';
15
15
  import { isWorkspaceScope, extractNameFromLink } from '../lib/workspace-link.js';
16
- function getApiProperties(apiJson) {
17
- return apiJson.properties;
18
- }
19
- function hasEmbeddedMcpConfiguration(apiJson) {
20
- const properties = getApiProperties(apiJson);
21
- if (!properties) {
22
- return false;
23
- }
24
- // Check if mcpTools has actual content (non-empty array), excluding null
25
- const mcpTools = properties.mcpTools;
26
- if (Array.isArray(mcpTools) && mcpTools.length > 0) {
27
- return true;
28
- }
29
- // Check if mcpProperties exists and is not null or undefined
30
- if (properties.mcpProperties != null) {
31
- return true;
32
- }
33
- // MCP APIs created from an existing MCP server are wired purely via
34
- // backendId + (optionally absent) mcpProperties. A non-null backendId on a
35
- // type='mcp' API is itself an MCP server configuration we must capture.
36
- if (typeof properties.backendId === 'string' && properties.backendId.length > 0) {
37
- return true;
38
- }
39
- return false;
40
- }
41
- function buildEmbeddedMcpServerResource(apiJson, backendUrl) {
42
- const properties = getApiProperties(apiJson) ?? {};
43
- const resourceProperties = {};
44
- // Clone mcpProperties so we can augment it with serverUrl without mutating
45
- // the caller's apiJson.
46
- let mcpProperties;
47
- if (properties.mcpProperties && typeof properties.mcpProperties === 'object') {
48
- mcpProperties = { ...properties.mcpProperties };
49
- }
50
- else if (backendUrl) {
51
- mcpProperties = {};
52
- }
53
- if (mcpProperties && backendUrl && mcpProperties.serverUrl === undefined) {
54
- mcpProperties.serverUrl = backendUrl;
55
- }
56
- if (mcpProperties !== undefined) {
57
- resourceProperties.mcpProperties = mcpProperties;
58
- }
59
- if (properties.mcpTools !== undefined) {
60
- resourceProperties.mcpTools = properties.mcpTools;
61
- }
62
- // Preserve the link to the upstream backend so the MCP server sidecar is
63
- // self-describing for MCP-from-existing-MCP-server APIs.
64
- if (typeof properties.backendId === 'string' && properties.backendId.length > 0) {
65
- resourceProperties.backendId = properties.backendId;
66
- }
67
- return {
68
- name: 'default',
69
- properties: resourceProperties,
70
- };
71
- }
72
- /**
73
- * For an MCP API wired to a backend via `backendId`, fetch that backend and
74
- * return its `properties.url` so the MCP sidecar can carry the actual upstream
75
- * server URL. Returns undefined when the API has no backendId, the backend
76
- * cannot be fetched, or the backend has no url.
77
- */
78
- async function resolveLinkedBackendUrl(client, context, apiJson, workspace) {
79
- const properties = getApiProperties(apiJson);
80
- const backendId = properties?.backendId;
81
- if (typeof backendId !== 'string' || backendId.length === 0) {
82
- return undefined;
83
- }
84
- // backendId may be either a bare resource name or a full ARM resource id.
85
- // We only consume the trailing name segment for descriptor lookup.
86
- const backendName = backendId.includes('/') ? backendId.split('/').pop() : backendId;
87
- try {
88
- const backendJson = await client.getResource(context, {
89
- type: ResourceType.Backend,
90
- nameParts: [backendName],
91
- workspace,
92
- });
93
- const url = backendJson?.properties?.url;
94
- return typeof url === 'string' && url.length > 0 ? url : undefined;
95
- }
96
- catch (error) {
97
- const errorMessage = error instanceof Error ? error.message : String(error);
98
- logger.debug(`Could not resolve backend "${backendName}" for MCP server URL: ${errorMessage}`);
99
- return undefined;
100
- }
101
- }
102
16
  /**
103
17
  * Extract all API-specific resources for a single API.
104
18
  * This includes revisions, specifications, operations, policies, etc.
@@ -166,8 +80,6 @@ export async function extractApiResources(client, store, context, apiDescriptor,
166
80
  }
167
81
  // Extract API wiki
168
82
  result.wiki = await extractApiWiki(client, store, context, apiDescriptor, outputDir);
169
- // Extract MCP server configuration (singleton per API; silently skipped when not present)
170
- result.mcpServer = await extractApiMcpServer(client, store, context, apiDescriptor, apiJson, outputDir);
171
83
  // Extract GraphQL resolvers and their policies
172
84
  const resolverResult = await extractGraphQLResolvers(client, store, context, apiDescriptor, apiJson, outputDir, filter, workspace);
173
85
  result.resolvers = resolverResult.resolvers;
@@ -253,8 +165,16 @@ async function extractApiSpecification(client, store, context, apiDescriptor, ap
253
165
  logger.debug(`Skipping spec export for synthetic GraphQL API "${getNamePart(apiDescriptor.nameParts, 0)}" — schema is captured via ApiSchema`);
254
166
  return false;
255
167
  }
168
+ // REST APIs natively imported as Swagger 2.0 expose auto-generated schemas
169
+ // with the Swagger-definitions content type. Export them in their native
170
+ // dialect so the exported spec matches the API's source format (OpenAPI 3.0
171
+ // export would convert schema content types and drop parameter-level metadata
172
+ // like `format`).
173
+ const specDialect = hasSwaggerDefinitionSchema(extractedSchemas)
174
+ ? 'swagger2'
175
+ : 'openapi3';
256
176
  try {
257
- const spec = await client.getApiSpecification(context, getNamePart(apiDescriptor.nameParts, 0), apiType);
177
+ const spec = await client.getApiSpecification(context, getNamePart(apiDescriptor.nameParts, 0), apiType, specDialect);
258
178
  if (!spec) {
259
179
  logger.debug(`No specification found for API "${getNamePart(apiDescriptor.nameParts, 0)}"`);
260
180
  return false;
@@ -286,6 +206,24 @@ function hasGraphQLSchema(schemas) {
286
206
  }
287
207
  return false;
288
208
  }
209
+ /**
210
+ * Returns true if any already-extracted ApiSchema resource has the Swagger 2.0
211
+ * definitions content type (`application/vnd.ms-azure-apim.swagger.definitions+json`).
212
+ * APIM stamps this content type on the auto-generated schema of APIs that were
213
+ * natively imported as Swagger 2.0, whereas OpenAPI 3.0 APIs use
214
+ * `application/vnd.oai.openapi.components+json`. Used to select Swagger 2.0
215
+ * export so the original spec format round-trips faithfully.
216
+ */
217
+ function hasSwaggerDefinitionSchema(schemas) {
218
+ for (const schema of schemas) {
219
+ const props = schema.json.properties;
220
+ const contentType = props?.contentType?.toLowerCase() ?? '';
221
+ if (contentType.includes('swagger.definitions')) {
222
+ return true;
223
+ }
224
+ }
225
+ return false;
226
+ }
289
227
  /**
290
228
  * Extract API-level policy.
291
229
  */
@@ -390,7 +328,7 @@ async function extractGraphQLResolvers(client, store, context, apiDescriptor, ap
390
328
  const resolverPolicies = [];
391
329
  const policies = [];
392
330
  // Only extract resolvers for GraphQL APIs — use the already-fetched apiJson
393
- const properties = getApiProperties(apiJson);
331
+ const properties = apiJson.properties;
394
332
  const apiType = properties?.type;
395
333
  if (apiType?.toLowerCase() !== 'graphql') {
396
334
  return { resolvers, resolverPolicies, policies };
@@ -425,42 +363,6 @@ async function extractGraphQLResolvers(client, store, context, apiDescriptor, ap
425
363
  }
426
364
  return { resolvers, resolverPolicies, policies };
427
365
  }
428
- /**
429
- * Extract MCP (Model Context Protocol) server configuration for an API.
430
- *
431
- * MCP configuration is embedded directly on the API resource
432
- * (`properties.mcpTools`, `properties.mcpProperties`, `properties.backendId`).
433
- * There is no separate child resource served by ARM — the
434
- * `apis/{id}/mcpServers/default` endpoint returns 404 even on working MCP APIs,
435
- * and `apis/{id}/mcpServers` returns 500 (no such collection). All MCP data
436
- * therefore comes from the API JSON itself.
437
- *
438
- * For MCP APIs created from an existing MCP server (the `backendId` pattern),
439
- * the upstream URL lives on the linked backend, not on the API. To make the
440
- * extracted `mcpServerInformation.json` self-describing, the extractor
441
- * resolves that backend and surfaces its URL as `mcpProperties.serverUrl`.
442
- */
443
- async function extractApiMcpServer(client, store, context, apiDescriptor, apiJson, outputDir) {
444
- const apiType = getApiProperties(apiJson)?.type?.toLowerCase();
445
- // Avoid creating MCP artifacts for non-MCP APIs unless they carry meaningful MCP metadata.
446
- if (apiType !== 'mcp' && !hasEmbeddedMcpConfiguration(apiJson)) {
447
- return false;
448
- }
449
- if (!hasEmbeddedMcpConfiguration(apiJson)) {
450
- return false;
451
- }
452
- const mcpDescriptor = {
453
- type: ResourceType.McpServer,
454
- nameParts: [...apiDescriptor.nameParts],
455
- workspace: apiDescriptor.workspace,
456
- };
457
- // Resolve the upstream backend URL so the MCP sidecar carries the actual
458
- // server URL (not just a backendId reference + uri template).
459
- const backendUrl = await resolveLinkedBackendUrl(client, context, apiJson, apiDescriptor.workspace);
460
- await store.writeResource(outputDir, mcpDescriptor, buildEmbeddedMcpServerResource(apiJson, backendUrl));
461
- logger.info(`Extracted ${buildResourceLabel(mcpDescriptor)} from API metadata`);
462
- return true;
463
- }
464
366
  /**
465
367
  * Extract API tag associations in workspace scope using the tag-centric
466
368
  * `tags/{tag}/apiLinks` endpoint.