@peterhauge/apiops-cli 0.1.7-alpha.0 → 0.2.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 (207) hide show
  1. package/LICENSE.md +22 -22
  2. package/README.md +169 -169
  3. package/dist/cli/extract-command.d.ts +0 -0
  4. package/dist/cli/extract-command.d.ts.map +0 -0
  5. package/dist/cli/extract-command.js +0 -0
  6. package/dist/cli/extract-command.js.map +0 -0
  7. package/dist/cli/index.d.ts +0 -0
  8. package/dist/cli/index.d.ts.map +0 -0
  9. package/dist/cli/index.js +0 -0
  10. package/dist/cli/index.js.map +0 -0
  11. package/dist/cli/init-command.d.ts +0 -0
  12. package/dist/cli/init-command.d.ts.map +1 -1
  13. package/dist/cli/init-command.js +2 -1
  14. package/dist/cli/init-command.js.map +1 -1
  15. package/dist/cli/publish-command.d.ts +0 -0
  16. package/dist/cli/publish-command.d.ts.map +0 -0
  17. package/dist/cli/publish-command.js +0 -0
  18. package/dist/cli/publish-command.js.map +0 -0
  19. package/dist/clients/apim-client.d.ts +25 -1
  20. package/dist/clients/apim-client.d.ts.map +1 -1
  21. package/dist/clients/apim-client.js +173 -9
  22. package/dist/clients/apim-client.js.map +1 -1
  23. package/dist/clients/artifact-store.d.ts +0 -0
  24. package/dist/clients/artifact-store.d.ts.map +0 -0
  25. package/dist/clients/artifact-store.js +0 -0
  26. package/dist/clients/artifact-store.js.map +0 -0
  27. package/dist/clients/iapim-client.d.ts +6 -0
  28. package/dist/clients/iapim-client.d.ts.map +1 -1
  29. package/dist/clients/iapim-client.js +0 -0
  30. package/dist/clients/iapim-client.js.map +0 -0
  31. package/dist/clients/iartifact-store.d.ts +0 -0
  32. package/dist/clients/iartifact-store.d.ts.map +0 -0
  33. package/dist/clients/iartifact-store.js +0 -0
  34. package/dist/clients/iartifact-store.js.map +0 -0
  35. package/dist/lib/auto-generated.d.ts +0 -0
  36. package/dist/lib/auto-generated.d.ts.map +0 -0
  37. package/dist/lib/auto-generated.js +0 -0
  38. package/dist/lib/auto-generated.js.map +0 -0
  39. package/dist/lib/cloud-config.d.ts +0 -0
  40. package/dist/lib/cloud-config.d.ts.map +0 -0
  41. package/dist/lib/cloud-config.js +0 -0
  42. package/dist/lib/cloud-config.js.map +0 -0
  43. package/dist/lib/config-loader.d.ts +0 -4
  44. package/dist/lib/config-loader.d.ts.map +1 -1
  45. package/dist/lib/config-loader.js +290 -51
  46. package/dist/lib/config-loader.js.map +1 -1
  47. package/dist/lib/dependency-graph.d.ts +0 -0
  48. package/dist/lib/dependency-graph.d.ts.map +0 -0
  49. package/dist/lib/dependency-graph.js +0 -0
  50. package/dist/lib/dependency-graph.js.map +0 -0
  51. package/dist/lib/exit-codes.d.ts +0 -0
  52. package/dist/lib/exit-codes.d.ts.map +0 -0
  53. package/dist/lib/exit-codes.js +0 -0
  54. package/dist/lib/exit-codes.js.map +0 -0
  55. package/dist/lib/logger.d.ts +0 -0
  56. package/dist/lib/logger.d.ts.map +0 -0
  57. package/dist/lib/logger.js +0 -0
  58. package/dist/lib/logger.js.map +0 -0
  59. package/dist/lib/parallel-runner.d.ts +0 -0
  60. package/dist/lib/parallel-runner.d.ts.map +0 -0
  61. package/dist/lib/parallel-runner.js +0 -0
  62. package/dist/lib/parallel-runner.js.map +0 -0
  63. package/dist/lib/resource-path.d.ts +0 -0
  64. package/dist/lib/resource-path.d.ts.map +1 -1
  65. package/dist/lib/resource-path.js +20 -2
  66. package/dist/lib/resource-path.js.map +1 -1
  67. package/dist/lib/resource-uri.d.ts +0 -0
  68. package/dist/lib/resource-uri.d.ts.map +1 -1
  69. package/dist/lib/resource-uri.js +24 -4
  70. package/dist/lib/resource-uri.js.map +1 -1
  71. package/dist/lib/user-agent.d.ts +0 -0
  72. package/dist/lib/user-agent.d.ts.map +0 -0
  73. package/dist/lib/user-agent.js +0 -0
  74. package/dist/lib/user-agent.js.map +0 -0
  75. package/dist/lib/workspace-link.d.ts +46 -0
  76. package/dist/lib/workspace-link.d.ts.map +1 -0
  77. package/dist/lib/workspace-link.js +93 -0
  78. package/dist/lib/workspace-link.js.map +1 -0
  79. package/dist/models/config.d.ts +80 -44
  80. package/dist/models/config.d.ts.map +1 -1
  81. package/dist/models/config.js +0 -0
  82. package/dist/models/config.js.map +0 -0
  83. package/dist/models/resource-types.d.ts +14 -1
  84. package/dist/models/resource-types.d.ts.map +1 -1
  85. package/dist/models/resource-types.js +11 -3
  86. package/dist/models/resource-types.js.map +1 -1
  87. package/dist/models/types.d.ts +0 -0
  88. package/dist/models/types.d.ts.map +0 -0
  89. package/dist/models/types.js +0 -0
  90. package/dist/models/types.js.map +0 -0
  91. package/dist/services/api-extractor.d.ts +19 -0
  92. package/dist/services/api-extractor.d.ts.map +1 -1
  93. package/dist/services/api-extractor.js +87 -6
  94. package/dist/services/api-extractor.js.map +1 -1
  95. package/dist/services/api-publisher.d.ts +0 -0
  96. package/dist/services/api-publisher.d.ts.map +1 -1
  97. package/dist/services/api-publisher.js +242 -62
  98. package/dist/services/api-publisher.js.map +1 -1
  99. package/dist/services/delete-unmatched-service.d.ts +0 -0
  100. package/dist/services/delete-unmatched-service.d.ts.map +0 -0
  101. package/dist/services/delete-unmatched-service.js +0 -0
  102. package/dist/services/delete-unmatched-service.js.map +0 -0
  103. package/dist/services/dry-run-reporter.d.ts +0 -0
  104. package/dist/services/dry-run-reporter.d.ts.map +0 -0
  105. package/dist/services/dry-run-reporter.js +0 -0
  106. package/dist/services/dry-run-reporter.js.map +0 -0
  107. package/dist/services/extract-service.d.ts +0 -0
  108. package/dist/services/extract-service.d.ts.map +0 -0
  109. package/dist/services/extract-service.js +0 -0
  110. package/dist/services/extract-service.js.map +0 -0
  111. package/dist/services/filter-service.d.ts +1 -0
  112. package/dist/services/filter-service.d.ts.map +1 -1
  113. package/dist/services/filter-service.js +101 -40
  114. package/dist/services/filter-service.js.map +1 -1
  115. package/dist/services/git-diff-service.d.ts +0 -0
  116. package/dist/services/git-diff-service.d.ts.map +0 -0
  117. package/dist/services/git-diff-service.js +0 -0
  118. package/dist/services/git-diff-service.js.map +0 -0
  119. package/dist/services/identity-guide-service.d.ts +1 -1
  120. package/dist/services/identity-guide-service.d.ts.map +1 -1
  121. package/dist/services/identity-guide-service.js +37 -518
  122. package/dist/services/identity-guide-service.js.map +1 -1
  123. package/dist/services/init-service.d.ts +0 -0
  124. package/dist/services/init-service.d.ts.map +1 -1
  125. package/dist/services/init-service.js +51 -19
  126. package/dist/services/init-service.js.map +1 -1
  127. package/dist/services/keyvault-checker.d.ts +0 -0
  128. package/dist/services/keyvault-checker.d.ts.map +0 -0
  129. package/dist/services/keyvault-checker.js +0 -0
  130. package/dist/services/keyvault-checker.js.map +0 -0
  131. package/dist/services/override-merger.d.ts +3 -7
  132. package/dist/services/override-merger.d.ts.map +1 -1
  133. package/dist/services/override-merger.js +198 -47
  134. package/dist/services/override-merger.js.map +1 -1
  135. package/dist/services/product-extractor.d.ts +20 -0
  136. package/dist/services/product-extractor.d.ts.map +1 -1
  137. package/dist/services/product-extractor.js +101 -5
  138. package/dist/services/product-extractor.js.map +1 -1
  139. package/dist/services/product-publisher.d.ts +0 -0
  140. package/dist/services/product-publisher.d.ts.map +1 -1
  141. package/dist/services/product-publisher.js +23 -6
  142. package/dist/services/product-publisher.js.map +1 -1
  143. package/dist/services/prompt-service.d.ts +0 -0
  144. package/dist/services/prompt-service.d.ts.map +0 -0
  145. package/dist/services/prompt-service.js +0 -0
  146. package/dist/services/prompt-service.js.map +0 -0
  147. package/dist/services/publish-service.d.ts +0 -0
  148. package/dist/services/publish-service.d.ts.map +0 -0
  149. package/dist/services/publish-service.js +38 -2
  150. package/dist/services/publish-service.js.map +1 -1
  151. package/dist/services/resource-extractor.d.ts +0 -0
  152. package/dist/services/resource-extractor.d.ts.map +0 -0
  153. package/dist/services/resource-extractor.js +0 -0
  154. package/dist/services/resource-extractor.js.map +0 -0
  155. package/dist/services/resource-publisher.d.ts +0 -0
  156. package/dist/services/resource-publisher.d.ts.map +1 -1
  157. package/dist/services/resource-publisher.js +64 -2
  158. package/dist/services/resource-publisher.js.map +1 -1
  159. package/dist/services/secret-redactor.d.ts +0 -0
  160. package/dist/services/secret-redactor.d.ts.map +0 -0
  161. package/dist/services/secret-redactor.js +0 -0
  162. package/dist/services/secret-redactor.js.map +0 -0
  163. package/dist/services/transitive-resolver.d.ts +0 -0
  164. package/dist/services/transitive-resolver.d.ts.map +1 -1
  165. package/dist/services/transitive-resolver.js +4 -4
  166. package/dist/services/transitive-resolver.js.map +1 -1
  167. package/dist/services/workspace-extractor.d.ts +0 -0
  168. package/dist/services/workspace-extractor.d.ts.map +1 -1
  169. package/dist/services/workspace-extractor.js +50 -7
  170. package/dist/services/workspace-extractor.js.map +1 -1
  171. package/dist/templates/azure-devops/extract-pipeline.d.ts +2 -1
  172. package/dist/templates/azure-devops/extract-pipeline.d.ts.map +1 -1
  173. package/dist/templates/azure-devops/extract-pipeline.js +147 -88
  174. package/dist/templates/azure-devops/extract-pipeline.js.map +1 -1
  175. package/dist/templates/azure-devops/publish-pipeline.d.ts +0 -0
  176. package/dist/templates/azure-devops/publish-pipeline.d.ts.map +1 -1
  177. package/dist/templates/azure-devops/publish-pipeline.js +116 -89
  178. package/dist/templates/azure-devops/publish-pipeline.js.map +1 -1
  179. package/dist/templates/configs/filter-config.d.ts +1 -1
  180. package/dist/templates/configs/filter-config.d.ts.map +1 -1
  181. package/dist/templates/configs/filter-config.js +109 -44
  182. package/dist/templates/configs/filter-config.js.map +1 -1
  183. package/dist/templates/configs/override-config.d.ts +0 -0
  184. package/dist/templates/configs/override-config.d.ts.map +1 -1
  185. package/dist/templates/configs/override-config.js +88 -37
  186. package/dist/templates/configs/override-config.js.map +1 -1
  187. package/dist/templates/configs/package-json.d.ts +0 -0
  188. package/dist/templates/configs/package-json.d.ts.map +0 -0
  189. package/dist/templates/configs/package-json.js +0 -0
  190. package/dist/templates/configs/package-json.js.map +0 -0
  191. package/dist/templates/copilot/identity-setup-prompt.d.ts +4 -3
  192. package/dist/templates/copilot/identity-setup-prompt.d.ts.map +1 -1
  193. package/dist/templates/copilot/identity-setup-prompt.js +59 -269
  194. package/dist/templates/copilot/identity-setup-prompt.js.map +1 -1
  195. package/dist/templates/generated/embedded-markdown.d.ts +12 -0
  196. package/dist/templates/generated/embedded-markdown.d.ts.map +1 -0
  197. package/dist/templates/generated/embedded-markdown.js +14 -0
  198. package/dist/templates/generated/embedded-markdown.js.map +1 -0
  199. package/dist/templates/github-actions/extract-workflow.d.ts +0 -0
  200. package/dist/templates/github-actions/extract-workflow.d.ts.map +0 -0
  201. package/dist/templates/github-actions/extract-workflow.js +118 -118
  202. package/dist/templates/github-actions/extract-workflow.js.map +0 -0
  203. package/dist/templates/github-actions/publish-workflow.d.ts +0 -0
  204. package/dist/templates/github-actions/publish-workflow.d.ts.map +1 -1
  205. package/dist/templates/github-actions/publish-workflow.js +104 -90
  206. package/dist/templates/github-actions/publish-workflow.js.map +1 -1
  207. package/package.json +69 -66
File without changes
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Workspace link response helpers.
3
+ *
4
+ * In workspace scope, association resources (ProductApi, ProductGroup, ApiTag,
5
+ * ProductTag) use "link" endpoints that return objects shaped like:
6
+ * { name: "opaqueLinkId", properties: { apiId: "/subscriptions/.../apis/myApi" } }
7
+ *
8
+ * This module provides helpers to extract the actual resource name from
9
+ * these link responses and to build link payloads for publishing.
10
+ */
11
+ import { ApimServiceContext } from '../models/types.js';
12
+ /**
13
+ * Extracts the resource name from a workspace link response item.
14
+ *
15
+ * Link responses store the associated resource's full ARM ID in a property
16
+ * (e.g. `properties.apiId`). This function extracts the last path segment
17
+ * (the resource name) from that ARM ID.
18
+ *
19
+ * @param json - Raw link response item from LIST
20
+ * @param linkIdProperty - Property name containing the ARM ID (e.g. 'apiId', 'groupId')
21
+ * @returns The extracted resource name, or undefined if not found
22
+ */
23
+ export declare function extractNameFromLink(json: Record<string, unknown>, linkIdProperty: string): string | undefined;
24
+ /**
25
+ * Builds the full ARM resource ID for a workspace-scoped resource.
26
+ * Used when creating link resources that reference another resource via its ARM ID.
27
+ *
28
+ * @param context - APIM service context (may be service-scoped or workspace-scoped)
29
+ * @param resourcePath - The ARM path segment (e.g. 'apis/myApi' or 'groups/myGroup')
30
+ * @param workspace - Optional workspace name; required when context is service-scoped
31
+ * @returns Full ARM resource ID
32
+ */
33
+ export declare function buildWorkspaceResourceId(context: ApimServiceContext, resourcePath: string, workspace?: string): string;
34
+ export declare function isWorkspaceScope(context: ApimServiceContext): boolean;
35
+ /**
36
+ * Builds the PUT payload for creating a workspace link resource.
37
+ *
38
+ * @param context - APIM service context (may be service-scoped or workspace-scoped)
39
+ * @param linkIdProperty - Property name for the ARM ID (e.g. 'apiId', 'groupId')
40
+ * @param resourceType - The ARM resource type segment (e.g. 'apis', 'groups', 'products')
41
+ * @param resourceName - The resource name to link to
42
+ * @param workspace - Optional workspace name; required when context is service-scoped
43
+ * @returns PUT payload for the link resource
44
+ */
45
+ export declare function buildLinkPayload(context: ApimServiceContext, linkIdProperty: string, resourceType: string, resourceName: string, workspace?: string): Record<string, unknown>;
46
+ //# sourceMappingURL=workspace-link.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,93 @@
1
+ // Copyright (c) Microsoft Corporation.
2
+ // Licensed under the MIT license.
3
+ /**
4
+ * Workspace link response helpers.
5
+ *
6
+ * In workspace scope, association resources (ProductApi, ProductGroup, ApiTag,
7
+ * ProductTag) use "link" endpoints that return objects shaped like:
8
+ * { name: "opaqueLinkId", properties: { apiId: "/subscriptions/.../apis/myApi" } }
9
+ *
10
+ * This module provides helpers to extract the actual resource name from
11
+ * these link responses and to build link payloads for publishing.
12
+ */
13
+ /**
14
+ * Extracts the resource name from a workspace link response item.
15
+ *
16
+ * Link responses store the associated resource's full ARM ID in a property
17
+ * (e.g. `properties.apiId`). This function extracts the last path segment
18
+ * (the resource name) from that ARM ID.
19
+ *
20
+ * @param json - Raw link response item from LIST
21
+ * @param linkIdProperty - Property name containing the ARM ID (e.g. 'apiId', 'groupId')
22
+ * @returns The extracted resource name, or undefined if not found
23
+ */
24
+ export function extractNameFromLink(json, linkIdProperty) {
25
+ const properties = json.properties;
26
+ if (!properties) {
27
+ return undefined;
28
+ }
29
+ const armId = properties[linkIdProperty];
30
+ if (typeof armId !== 'string' || armId.length === 0) {
31
+ return undefined;
32
+ }
33
+ // ARM resource IDs look like: /subscriptions/.../apis/myApiName
34
+ // Extract the last segment as the resource name
35
+ const segments = armId.split('/');
36
+ const lastSegment = segments[segments.length - 1];
37
+ return lastSegment && lastSegment.length > 0
38
+ ? decodeURIComponent(lastSegment)
39
+ : undefined;
40
+ }
41
+ /**
42
+ * Builds the full ARM resource ID for a workspace-scoped resource.
43
+ * Used when creating link resources that reference another resource via its ARM ID.
44
+ *
45
+ * @param context - APIM service context (may be service-scoped or workspace-scoped)
46
+ * @param resourcePath - The ARM path segment (e.g. 'apis/myApi' or 'groups/myGroup')
47
+ * @param workspace - Optional workspace name; required when context is service-scoped
48
+ * @returns Full ARM resource ID
49
+ */
50
+ export function buildWorkspaceResourceId(context, resourcePath, workspace) {
51
+ const url = new URL(context.baseUrl);
52
+ const basePath = url.pathname;
53
+ // If context already includes the workspace segment, use it directly
54
+ if (isWorkspaceScope(context)) {
55
+ return `${basePath}/${resourcePath}`;
56
+ }
57
+ // Context is service-scoped — prepend the workspace segment from the descriptor
58
+ if (workspace) {
59
+ return `${basePath}/workspaces/${encodeURIComponent(workspace)}/${resourcePath}`;
60
+ }
61
+ // Fallback: no workspace info available (should not happen in practice)
62
+ return `${basePath}/${resourcePath}`;
63
+ }
64
+ /**
65
+ * Checks whether a service context is workspace-scoped.
66
+ * Workspace-scoped contexts have `/workspaces/{name}` appended after the
67
+ * APIM service segment in their base URL. We match the specific ARM path
68
+ * structure rather than a naive substring check, so an API or resource
69
+ * named "workspaces" won't cause a false positive.
70
+ */
71
+ const WORKSPACE_SCOPE_PATTERN = /\/Microsoft\.ApiManagement\/service\/[^/]+\/workspaces\/[^/]+/i;
72
+ export function isWorkspaceScope(context) {
73
+ return WORKSPACE_SCOPE_PATTERN.test(context.baseUrl);
74
+ }
75
+ /**
76
+ * Builds the PUT payload for creating a workspace link resource.
77
+ *
78
+ * @param context - APIM service context (may be service-scoped or workspace-scoped)
79
+ * @param linkIdProperty - Property name for the ARM ID (e.g. 'apiId', 'groupId')
80
+ * @param resourceType - The ARM resource type segment (e.g. 'apis', 'groups', 'products')
81
+ * @param resourceName - The resource name to link to
82
+ * @param workspace - Optional workspace name; required when context is service-scoped
83
+ * @returns PUT payload for the link resource
84
+ */
85
+ export function buildLinkPayload(context, linkIdProperty, resourceType, resourceName, workspace) {
86
+ const resourceId = buildWorkspaceResourceId(context, `${resourceType}/${encodeURIComponent(resourceName)}`, workspace);
87
+ return {
88
+ properties: {
89
+ [linkIdProperty]: resourceId,
90
+ },
91
+ };
92
+ }
93
+ //# sourceMappingURL=workspace-link.js.map
@@ -0,0 +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"}
@@ -13,23 +13,57 @@ export interface ExtractConfig {
13
13
  logLevel: LogLevel;
14
14
  otelConfigPath?: string;
15
15
  }
16
+ /**
17
+ * Sub-resource filter for an individual API.
18
+ * Only sub-resources listed here are included; undefined means include all.
19
+ * An empty array means include NONE of that sub-resource type.
20
+ */
21
+ export interface ApiSubFilter {
22
+ operations?: string[];
23
+ diagnostics?: string[];
24
+ schemas?: string[];
25
+ releases?: string[];
26
+ }
27
+ /**
28
+ * Sub-resource filter for an individual workspace.
29
+ * Specifies exactly which workspace-scoped resources to include.
30
+ */
31
+ export interface WorkspaceSubFilter {
32
+ apis?: string[];
33
+ apiSubFilters?: Record<string, ApiSubFilter>;
34
+ backends?: string[];
35
+ diagnostics?: string[];
36
+ groups?: string[];
37
+ loggers?: string[];
38
+ namedValues?: string[];
39
+ policyFragments?: string[];
40
+ products?: string[];
41
+ subscriptions?: string[];
42
+ tags?: string[];
43
+ versionSets?: string[];
44
+ }
16
45
  export interface FilterConfig {
17
- apiNames?: string[];
18
- backendNames?: string[];
19
- productNames?: string[];
20
- namedValueNames?: string[];
21
- loggerNames?: string[];
22
- diagnosticNames?: string[];
23
- tagNames?: string[];
24
- policyFragmentNames?: string[];
25
- gatewayNames?: string[];
26
- versionSetNames?: string[];
27
- groupNames?: string[];
28
- subscriptionNames?: string[];
29
- schemaNames?: string[];
30
- policyRestrictionNames?: string[];
31
- documentationNames?: string[];
32
- workspaceNames?: string[];
46
+ apis?: string[];
47
+ /** Per-API sub-resource filters (only for APIs listed with nested object syntax) */
48
+ apiSubFilters?: Record<string, ApiSubFilter>;
49
+ backends?: string[];
50
+ products?: string[];
51
+ namedValues?: string[];
52
+ loggers?: string[];
53
+ diagnostics?: string[];
54
+ tags?: string[];
55
+ policyFragments?: string[];
56
+ gateways?: string[];
57
+ versionSets?: string[];
58
+ groups?: string[];
59
+ subscriptions?: string[];
60
+ schemas?: string[];
61
+ policies?: string[];
62
+ policyRestrictions?: string[];
63
+ documentations?: string[];
64
+ workspaces?: string[];
65
+ /** Per-workspace sub-resource filters (only for workspaces listed with nested object syntax) */
66
+ workspaceSubFilters?: Record<string, WorkspaceSubFilter>;
33
67
  }
34
68
  export interface PublishConfig {
35
69
  service: ApimServiceContext;
@@ -41,35 +75,37 @@ export interface PublishConfig {
41
75
  logLevel: LogLevel;
42
76
  otelConfigPath?: string;
43
77
  }
44
- export interface OverrideConfig {
45
- namedValues?: Record<string, NamedValueOverride>;
46
- backends?: Record<string, BackendOverride>;
47
- apis?: Record<string, ApiOverride>;
48
- diagnostics?: Record<string, DiagnosticOverride>;
49
- loggers?: Record<string, LoggerOverride>;
50
- }
51
- export interface NamedValueOverride {
52
- value?: string;
53
- displayName?: string;
54
- tags?: string[];
55
- keyVault?: {
56
- identityClientId?: string;
57
- secretIdentifier?: string;
58
- };
59
- }
60
- export interface BackendOverride {
61
- url?: string;
62
- credentials?: Record<string, unknown>;
63
- }
64
- export interface ApiOverride {
65
- serviceUrl?: string;
66
- }
67
- export interface DiagnosticOverride {
68
- loggerId?: string;
78
+ /**
79
+ * A single override entry: properties to deep-merge + optional nested child overrides.
80
+ */
81
+ export interface OverrideEntry {
82
+ /** Properties to deep-merge into the resource's ARM DTO */
83
+ properties: Record<string, unknown>;
84
+ /** Nested sub-resource override sections (e.g., diagnostics under an API) */
85
+ children?: Record<string, OverrideSection>;
69
86
  }
70
- export interface LoggerOverride {
71
- credentials?: Record<string, unknown>;
72
- resourceId?: string;
87
+ /** A section of overrides: resource name → override entry */
88
+ export type OverrideSection = Record<string, OverrideEntry>;
89
+ /**
90
+ * Environment-specific override configuration.
91
+ * Supports all Toolkit override sections with generic property passthrough.
92
+ * Nested sub-resource overrides (e.g., API diagnostics) are stored in OverrideEntry.children.
93
+ */
94
+ export interface OverrideConfig {
95
+ namedValues?: OverrideSection;
96
+ backends?: OverrideSection;
97
+ apis?: OverrideSection;
98
+ diagnostics?: OverrideSection;
99
+ loggers?: OverrideSection;
100
+ policies?: OverrideSection;
101
+ gateways?: OverrideSection;
102
+ versionSets?: OverrideSection;
103
+ groups?: OverrideSection;
104
+ subscriptions?: OverrideSection;
105
+ products?: OverrideSection;
106
+ tags?: OverrideSection;
107
+ policyFragments?: OverrideSection;
108
+ workspaces?: OverrideSection;
73
109
  }
74
110
  export interface InitConfig {
75
111
  ciProvider?: 'github-actions' | 'azure-devops';
@@ -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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"}
File without changes
File without changes
@@ -38,7 +38,7 @@ export declare enum ResourceType {
38
38
  GraphQLResolverPolicy = "GraphQLResolverPolicy",
39
39
  /** MCP (Model Context Protocol) server configuration per API. Singleton per API. */
40
40
  McpServer = "McpServer",
41
- /** Premium/PremiumV2 workspace container. */
41
+ /** Workspace container (Premium/StandardV2/PremiumV2). */
42
42
  Workspace = "Workspace"
43
43
  }
44
44
  /**
@@ -71,6 +71,19 @@ export interface ResourceTypeMetadata {
71
71
  * without maintaining a separate hardcoded list.
72
72
  */
73
73
  readonly workspaceSupported?: boolean;
74
+ /**
75
+ * Alternative ARM path suffix used in workspace scope.
76
+ * Some association resources use a different "links" endpoint pattern
77
+ * in workspace scope (e.g. `products/{0}/apiLinks/{1}` instead of
78
+ * `products/{0}/apis/{1}`).
79
+ */
80
+ readonly workspaceArmPathSuffix?: string;
81
+ /**
82
+ * The property name in a workspace link response that contains the
83
+ * linked resource's full ARM resource ID (e.g. 'apiId', 'groupId').
84
+ * Only relevant when `workspaceArmPathSuffix` is set.
85
+ */
86
+ readonly workspaceLinkIdProperty?: string;
74
87
  }
75
88
  export declare const RESOURCE_TYPE_METADATA: Record<ResourceType, ResourceTypeMetadata>;
76
89
  //# sourceMappingURL=resource-types.d.ts.map
@@ -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,6CAA6C;IAC7C,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;CACvC;AAED,eAAO,MAAM,sBAAsB,EAAE,MAAM,CAAC,YAAY,EAAE,oBAAoB,CAmO7E,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,CA2O7E,CAAC"}
@@ -41,7 +41,7 @@ export var ResourceType;
41
41
  ResourceType["GraphQLResolverPolicy"] = "GraphQLResolverPolicy";
42
42
  /** MCP (Model Context Protocol) server configuration per API. Singleton per API. */
43
43
  ResourceType["McpServer"] = "McpServer";
44
- /** Premium/PremiumV2 workspace container. */
44
+ /** Workspace container (Premium/StandardV2/PremiumV2). */
45
45
  ResourceType["Workspace"] = "Workspace";
46
46
  })(ResourceType || (ResourceType = {}));
47
47
  export const RESOURCE_TYPE_METADATA = {
@@ -70,6 +70,7 @@ export const RESOURCE_TYPE_METADATA = {
70
70
  artifactDirectory: 'versionSets/{0}',
71
71
  infoFile: 'versionSetInformation.json',
72
72
  supportsGet: true,
73
+ workspaceSupported: true,
73
74
  },
74
75
  [ResourceType.Backend]: {
75
76
  armPathSuffix: 'backends/{0}',
@@ -130,18 +131,24 @@ export const RESOURCE_TYPE_METADATA = {
130
131
  artifactDirectory: 'products/{0}',
131
132
  infoFile: 'apis.json',
132
133
  supportsGet: false,
134
+ workspaceArmPathSuffix: 'products/{0}/apiLinks/{1}',
135
+ workspaceLinkIdProperty: 'apiId',
133
136
  },
134
137
  [ResourceType.ProductGroup]: {
135
138
  armPathSuffix: 'products/{0}/groups/{1}',
136
139
  artifactDirectory: 'products/{0}',
137
140
  infoFile: 'groups.json',
138
141
  supportsGet: false,
142
+ workspaceArmPathSuffix: 'products/{0}/groupLinks/{1}',
143
+ workspaceLinkIdProperty: 'groupId',
139
144
  },
140
145
  [ResourceType.ProductTag]: {
141
146
  armPathSuffix: 'products/{0}/tags/{1}',
142
147
  artifactDirectory: 'products/{0}',
143
148
  infoFile: null, // Embedded in productInformation.json
144
149
  supportsGet: false,
150
+ workspaceArmPathSuffix: 'tags/{1}/productLinks/{0}',
151
+ workspaceLinkIdProperty: 'productId',
145
152
  },
146
153
  [ResourceType.Api]: {
147
154
  armPathSuffix: 'apis/{0}',
@@ -161,6 +168,8 @@ export const RESOURCE_TYPE_METADATA = {
161
168
  artifactDirectory: 'apis/{0}/tags/{1}',
162
169
  infoFile: 'tagInformation.json',
163
170
  supportsGet: true,
171
+ workspaceArmPathSuffix: 'tags/{1}/apiLinks/{0}',
172
+ workspaceLinkIdProperty: 'apiId',
164
173
  },
165
174
  [ResourceType.ApiDiagnostic]: {
166
175
  armPathSuffix: 'apis/{0}/diagnostics/{1}',
@@ -171,7 +180,7 @@ export const RESOURCE_TYPE_METADATA = {
171
180
  [ResourceType.ApiOperation]: {
172
181
  armPathSuffix: 'apis/{0}/operations/{1}',
173
182
  artifactDirectory: 'apis/{0}/operations/{1}',
174
- infoFile: null,
183
+ infoFile: 'operationInformation.json',
175
184
  supportsGet: true,
176
185
  },
177
186
  [ResourceType.ApiOperationPolicy]: {
@@ -211,7 +220,6 @@ export const RESOURCE_TYPE_METADATA = {
211
220
  artifactDirectory: 'documentations/{0}',
212
221
  infoFile: 'documentationInformation.json',
213
222
  supportsGet: true,
214
- workspaceSupported: true,
215
223
  },
216
224
  [ResourceType.ApiSchema]: {
217
225
  armPathSuffix: 'apis/{0}/schemas/{1}',
@@ -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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"}
File without changes
File without changes
File without changes
File without changes
@@ -34,4 +34,23 @@ export interface ApiExtractionResult {
34
34
  * This includes revisions, specifications, operations, policies, etc.
35
35
  */
36
36
  export declare function extractApiResources(client: IApimClient, store: IArtifactStore, context: ApimServiceContext, apiDescriptor: ResourceDescriptor, apiJson: Record<string, unknown>, outputDir: string, filter?: FilterConfig, workspace?: string): Promise<ApiExtractionResult>;
37
+ /**
38
+ * Extract API tag associations in workspace scope using the tag-centric
39
+ * `tags/{tag}/apiLinks` endpoint.
40
+ *
41
+ * In workspace scope the classic `apis/{api}/tags` endpoint is not available
42
+ * (HTTP 500). Instead, tag-to-API associations are exposed via each tag's
43
+ * `apiLinks` collection. This function iterates all workspace tags and
44
+ * discovers their linked APIs, then writes ApiTag artifacts.
45
+ *
46
+ * @param client - APIM REST client
47
+ * @param store - Artifact file store
48
+ * @param context - Workspace-scoped APIM context
49
+ * @param extractedTagNames - Tag names already extracted for this workspace
50
+ * @param extractedApiNames - API names already extracted for this workspace
51
+ * @param outputDir - Output directory
52
+ * @param workspace - Workspace name
53
+ * @returns Number of ApiTag artifacts written
54
+ */
55
+ export declare function extractWorkspaceApiTags(client: IApimClient, store: IArtifactStore, context: ApimServiceContext, extractedTagNames: string[], extractedApiNames: Set<string>, outputDir: string, workspace: string): Promise<number>;
37
56
  //# sourceMappingURL=api-extractor.d.ts.map
@@ -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;AAKjF;;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,CAwG9B"}
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"}
@@ -6,12 +6,13 @@
6
6
  * GraphQL resolvers & resolver policies, API tags, diagnostics, schemas,
7
7
  * releases, tag descriptions, wikis.
8
8
  */
9
- import { ResourceType } from '../models/resource-types.js';
9
+ import { ResourceType, RESOURCE_TYPE_METADATA } from '../models/resource-types.js';
10
10
  import { shouldIncludeResource } from './filter-service.js';
11
11
  import { extractResourceType } from './resource-extractor.js';
12
12
  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
+ import { isWorkspaceScope, extractNameFromLink } from '../lib/workspace-link.js';
15
16
  function getApiProperties(apiJson) {
16
17
  return apiJson.properties;
17
18
  }
@@ -143,17 +144,26 @@ export async function extractApiResources(client, store, context, apiDescriptor,
143
144
  result.operationPolicies = opsResult.operationPolicies;
144
145
  result.policies.push(...opsResult.policies);
145
146
  // Extract API tags
146
- const tagsResult = await extractResourceType(client, store, context, ResourceType.ApiTag, outputDir, filter, apiDescriptor, workspace);
147
- result.tags = tagsResult.extracted;
147
+ // In workspace scope, the classic `apis/{api}/tags` endpoint returns HTTP 500.
148
+ // Workspace uses `tags/{tag}/apiLinks` (inverted parent-child). Skip here;
149
+ // workspace-scoped API tag extraction is handled separately by
150
+ // extractWorkspaceApiTags() in the workspace extractor after all APIs/tags
151
+ // are available.
152
+ if (!isWorkspaceScope(context)) {
153
+ const tagsResult = await extractResourceType(client, store, context, ResourceType.ApiTag, outputDir, filter, apiDescriptor, workspace);
154
+ result.tags = tagsResult.extracted;
155
+ }
148
156
  // Extract API diagnostics
149
157
  const diagResult = await extractResourceType(client, store, context, ResourceType.ApiDiagnostic, outputDir, filter, apiDescriptor, workspace);
150
158
  result.diagnostics = diagResult.extracted;
151
159
  // Extract API releases
152
160
  const releaseResult = await extractResourceType(client, store, context, ResourceType.ApiRelease, outputDir, filter, apiDescriptor, workspace);
153
161
  result.releases = releaseResult.extracted;
154
- // Extract API tag descriptions
155
- const tagDescResult = await extractResourceType(client, store, context, ResourceType.ApiTagDescription, outputDir, filter, apiDescriptor, workspace);
156
- result.tagDescriptions = tagDescResult.extracted;
162
+ // Extract API tag descriptions (not supported in workspace scope)
163
+ if (!workspace) {
164
+ const tagDescResult = await extractResourceType(client, store, context, ResourceType.ApiTagDescription, outputDir, filter, apiDescriptor, workspace);
165
+ result.tagDescriptions = tagDescResult.extracted;
166
+ }
157
167
  // Extract API wiki
158
168
  result.wiki = await extractApiWiki(client, store, context, apiDescriptor, outputDir);
159
169
  // Extract MCP server configuration (singleton per API; silently skipped when not present)
@@ -235,6 +245,10 @@ async function extractApiSpecification(client, store, context, apiDescriptor, ap
235
245
  logger.debug(`Skipping spec export for MCP API "${getNamePart(apiDescriptor.nameParts, 0)}" — MCP APIs use the Model Context Protocol endpoint, not OpenAPI`);
236
246
  return false;
237
247
  }
248
+ if (apiType?.toLowerCase() === 'a2a') {
249
+ logger.debug(`Skipping spec export for A2A API "${getNamePart(apiDescriptor.nameParts, 0)}" — A2A APIs use JSON-RPC + agent card endpoints, not OpenAPI`);
250
+ return false;
251
+ }
238
252
  if (apiType?.toLowerCase() === 'graphql' && hasGraphQLSchema(extractedSchemas)) {
239
253
  logger.debug(`Skipping spec export for synthetic GraphQL API "${getNamePart(apiDescriptor.nameParts, 0)}" — schema is captured via ApiSchema`);
240
254
  return false;
@@ -447,4 +461,71 @@ async function extractApiMcpServer(client, store, context, apiDescriptor, apiJso
447
461
  logger.info(`Extracted ${buildResourceLabel(mcpDescriptor)} from API metadata`);
448
462
  return true;
449
463
  }
464
+ /**
465
+ * Extract API tag associations in workspace scope using the tag-centric
466
+ * `tags/{tag}/apiLinks` endpoint.
467
+ *
468
+ * In workspace scope the classic `apis/{api}/tags` endpoint is not available
469
+ * (HTTP 500). Instead, tag-to-API associations are exposed via each tag's
470
+ * `apiLinks` collection. This function iterates all workspace tags and
471
+ * discovers their linked APIs, then writes ApiTag artifacts.
472
+ *
473
+ * @param client - APIM REST client
474
+ * @param store - Artifact file store
475
+ * @param context - Workspace-scoped APIM context
476
+ * @param extractedTagNames - Tag names already extracted for this workspace
477
+ * @param extractedApiNames - API names already extracted for this workspace
478
+ * @param outputDir - Output directory
479
+ * @param workspace - Workspace name
480
+ * @returns Number of ApiTag artifacts written
481
+ */
482
+ export async function extractWorkspaceApiTags(client, store, context, extractedTagNames, extractedApiNames, outputDir, workspace) {
483
+ const linkProperty = RESOURCE_TYPE_METADATA[ResourceType.ApiTag].workspaceLinkIdProperty;
484
+ if (!linkProperty) {
485
+ return 0;
486
+ }
487
+ let count = 0;
488
+ for (const tagName of extractedTagNames) {
489
+ // List apiLinks under this tag.
490
+ // Do NOT set workspace on this descriptor — context.baseUrl already includes
491
+ // the workspace prefix and buildArmUri would double it.
492
+ const tagDescriptor = {
493
+ type: ResourceType.Tag,
494
+ nameParts: [tagName],
495
+ };
496
+ try {
497
+ for await (const linkJson of client.listResources(context, ResourceType.ApiTag, tagDescriptor)) {
498
+ const apiName = extractNameFromLink(linkJson, linkProperty);
499
+ if (!apiName) {
500
+ logger.warn(`Failed to extract API name from tag "${tagName}" apiLink response`);
501
+ continue;
502
+ }
503
+ // Only create ApiTag artifacts for APIs that were extracted
504
+ if (!extractedApiNames.has(apiName)) {
505
+ logger.debug(`Skipping apiLink for tag "${tagName}" → API "${apiName}" (API not extracted)`);
506
+ continue;
507
+ }
508
+ // Write the ApiTag artifact
509
+ const apiTagDescriptor = {
510
+ type: ResourceType.ApiTag,
511
+ nameParts: [apiName, tagName],
512
+ workspace,
513
+ };
514
+ // ApiTag artifacts store a minimal tag information JSON
515
+ const tagJson = {
516
+ properties: {
517
+ displayName: tagName,
518
+ },
519
+ };
520
+ await store.writeResource(outputDir, apiTagDescriptor, tagJson);
521
+ logger.info(`Extracted workspace ApiTag: ${apiName}/tags/${tagName}`);
522
+ count++;
523
+ }
524
+ }
525
+ catch (error) {
526
+ logger.warn(`Failed to list apiLinks for tag "${tagName}": ${error.message}`);
527
+ }
528
+ }
529
+ return count;
530
+ }
450
531
  //# sourceMappingURL=api-extractor.js.map