@pipeline-builder/api-core 0.0.1

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 (184) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +98 -0
  3. package/lib/constants/ai-providers.d.ts +52 -0
  4. package/lib/constants/ai-providers.js +129 -0
  5. package/lib/constants/http-status.d.ts +20 -0
  6. package/lib/constants/http-status.js +26 -0
  7. package/lib/constants/index.d.ts +3 -0
  8. package/lib/constants/index.js +6 -0
  9. package/lib/constants/time.d.ts +10 -0
  10. package/lib/constants/time.js +13 -0
  11. package/lib/errors/app-errors.d.ts +30 -0
  12. package/lib/errors/app-errors.js +53 -0
  13. package/lib/errors/index.d.ts +1 -0
  14. package/lib/errors/index.js +4 -0
  15. package/lib/helpers/access-helpers.d.ts +63 -0
  16. package/lib/helpers/access-helpers.js +82 -0
  17. package/lib/helpers/crud-helpers.d.ts +9 -0
  18. package/lib/helpers/crud-helpers.js +23 -0
  19. package/lib/helpers/index.d.ts +6 -0
  20. package/lib/helpers/index.js +9 -0
  21. package/lib/helpers/org-hierarchy-http.d.ts +74 -0
  22. package/lib/helpers/org-hierarchy-http.js +144 -0
  23. package/lib/helpers/org-hierarchy.d.ts +57 -0
  24. package/lib/helpers/org-hierarchy.js +110 -0
  25. package/lib/helpers/restore-helpers.d.ts +49 -0
  26. package/lib/helpers/restore-helpers.js +78 -0
  27. package/lib/helpers/sse-helpers.d.ts +20 -0
  28. package/lib/helpers/sse-helpers.js +45 -0
  29. package/lib/index.d.ts +58 -0
  30. package/lib/index.js +71 -0
  31. package/lib/middleware/auth.d.ts +208 -0
  32. package/lib/middleware/auth.js +588 -0
  33. package/lib/middleware/index.d.ts +3 -0
  34. package/lib/middleware/index.js +6 -0
  35. package/lib/middleware/mongo-sanitize.d.ts +32 -0
  36. package/lib/middleware/mongo-sanitize.js +100 -0
  37. package/lib/middleware/step-up.d.ts +45 -0
  38. package/lib/middleware/step-up.js +138 -0
  39. package/lib/openapi/extend-zod.d.ts +1 -0
  40. package/lib/openapi/extend-zod.js +6 -0
  41. package/lib/openapi/index.d.ts +2 -0
  42. package/lib/openapi/index.js +5 -0
  43. package/lib/openapi/registry.d.ts +17 -0
  44. package/lib/openapi/registry.js +38 -0
  45. package/lib/openapi/routes/ask-routes.d.ts +7 -0
  46. package/lib/openapi/routes/ask-routes.js +62 -0
  47. package/lib/openapi/routes/billing-routes.d.ts +1 -0
  48. package/lib/openapi/routes/billing-routes.js +66 -0
  49. package/lib/openapi/routes/image-registry-routes.d.ts +7 -0
  50. package/lib/openapi/routes/image-registry-routes.js +98 -0
  51. package/lib/openapi/routes/index.d.ts +5 -0
  52. package/lib/openapi/routes/index.js +28 -0
  53. package/lib/openapi/routes/message-routes.d.ts +1 -0
  54. package/lib/openapi/routes/message-routes.js +105 -0
  55. package/lib/openapi/routes/pipeline-routes.d.ts +1 -0
  56. package/lib/openapi/routes/pipeline-routes.js +105 -0
  57. package/lib/openapi/routes/pipeline-template-routes.d.ts +1 -0
  58. package/lib/openapi/routes/pipeline-template-routes.js +61 -0
  59. package/lib/openapi/routes/plugin-routes.d.ts +1 -0
  60. package/lib/openapi/routes/plugin-routes.js +96 -0
  61. package/lib/openapi/routes/quota-routes.d.ts +1 -0
  62. package/lib/openapi/routes/quota-routes.js +62 -0
  63. package/lib/openapi/schema-registry.d.ts +25 -0
  64. package/lib/openapi/schema-registry.js +91 -0
  65. package/lib/routes/health.d.ts +41 -0
  66. package/lib/routes/health.js +82 -0
  67. package/lib/routes/index.d.ts +1 -0
  68. package/lib/routes/index.js +4 -0
  69. package/lib/services/audit-spool.d.ts +80 -0
  70. package/lib/services/audit-spool.js +172 -0
  71. package/lib/services/cache-service.d.ts +124 -0
  72. package/lib/services/cache-service.js +276 -0
  73. package/lib/services/circuit-breaker.d.ts +45 -0
  74. package/lib/services/circuit-breaker.js +138 -0
  75. package/lib/services/compliance-client.d.ts +46 -0
  76. package/lib/services/compliance-client.js +128 -0
  77. package/lib/services/compliance-event-subscriber.d.ts +16 -0
  78. package/lib/services/compliance-event-subscriber.js +72 -0
  79. package/lib/services/durable-event-bus.d.ts +96 -0
  80. package/lib/services/durable-event-bus.js +204 -0
  81. package/lib/services/entity-events.d.ts +48 -0
  82. package/lib/services/entity-events.js +79 -0
  83. package/lib/services/env-redis.d.ts +44 -0
  84. package/lib/services/env-redis.js +94 -0
  85. package/lib/services/http-client.d.ts +143 -0
  86. package/lib/services/http-client.js +335 -0
  87. package/lib/services/index.d.ts +18 -0
  88. package/lib/services/index.js +20 -0
  89. package/lib/services/leader-lock.d.ts +45 -0
  90. package/lib/services/leader-lock.js +85 -0
  91. package/lib/services/quota.d.ts +130 -0
  92. package/lib/services/quota.js +264 -0
  93. package/lib/services/remote-audit-client.d.ts +160 -0
  94. package/lib/services/remote-audit-client.js +390 -0
  95. package/lib/services/retry-strategy.d.ts +74 -0
  96. package/lib/services/retry-strategy.js +118 -0
  97. package/lib/services/scheduler.d.ts +41 -0
  98. package/lib/services/scheduler.js +86 -0
  99. package/lib/services/service-boot.d.ts +20 -0
  100. package/lib/services/service-boot.js +28 -0
  101. package/lib/services/sse-ticket-store.d.ts +51 -0
  102. package/lib/services/sse-ticket-store.js +130 -0
  103. package/lib/services/token-revocation.d.ts +52 -0
  104. package/lib/services/token-revocation.js +120 -0
  105. package/lib/testing/tier-mock.d.ts +44 -0
  106. package/lib/testing/tier-mock.js +65 -0
  107. package/lib/types/audit-events.d.ts +69 -0
  108. package/lib/types/audit-events.js +4 -0
  109. package/lib/types/catalog-metadata.d.ts +36 -0
  110. package/lib/types/catalog-metadata.js +21 -0
  111. package/lib/types/common.d.ts +255 -0
  112. package/lib/types/common.js +41 -0
  113. package/lib/types/error-codes.d.ts +54 -0
  114. package/lib/types/error-codes.js +107 -0
  115. package/lib/types/feature-flags.d.ts +36 -0
  116. package/lib/types/feature-flags.js +128 -0
  117. package/lib/types/http.d.ts +27 -0
  118. package/lib/types/http.js +4 -0
  119. package/lib/types/index.d.ts +11 -0
  120. package/lib/types/index.js +14 -0
  121. package/lib/types/permissions.d.ts +65 -0
  122. package/lib/types/permissions.js +131 -0
  123. package/lib/types/pipeline-template.d.ts +30 -0
  124. package/lib/types/pipeline-template.js +13 -0
  125. package/lib/types/pipeline.d.ts +59 -0
  126. package/lib/types/pipeline.js +31 -0
  127. package/lib/types/quota-tiers.d.ts +79 -0
  128. package/lib/types/quota-tiers.js +221 -0
  129. package/lib/types/visibility.d.ts +20 -0
  130. package/lib/types/visibility.js +22 -0
  131. package/lib/utils/alias-resolver.d.ts +37 -0
  132. package/lib/utils/alias-resolver.js +68 -0
  133. package/lib/utils/audit.d.ts +15 -0
  134. package/lib/utils/audit.js +39 -0
  135. package/lib/utils/aws-scrub.d.ts +11 -0
  136. package/lib/utils/aws-scrub.js +67 -0
  137. package/lib/utils/compliance-attributes.d.ts +6 -0
  138. package/lib/utils/compliance-attributes.js +69 -0
  139. package/lib/utils/concurrency.d.ts +9 -0
  140. package/lib/utils/concurrency.js +29 -0
  141. package/lib/utils/crash-handlers.d.ts +18 -0
  142. package/lib/utils/crash-handlers.js +36 -0
  143. package/lib/utils/env.d.ts +28 -0
  144. package/lib/utils/env.js +54 -0
  145. package/lib/utils/headers.d.ts +18 -0
  146. package/lib/utils/headers.js +21 -0
  147. package/lib/utils/identity.d.ts +40 -0
  148. package/lib/utils/identity.js +51 -0
  149. package/lib/utils/index.d.ts +17 -0
  150. package/lib/utils/index.js +20 -0
  151. package/lib/utils/logger.d.ts +38 -0
  152. package/lib/utils/logger.js +174 -0
  153. package/lib/utils/metric-emitter.d.ts +36 -0
  154. package/lib/utils/metric-emitter.js +32 -0
  155. package/lib/utils/object.d.ts +13 -0
  156. package/lib/utils/object.js +18 -0
  157. package/lib/utils/params.d.ts +150 -0
  158. package/lib/utils/params.js +206 -0
  159. package/lib/utils/response.d.ts +117 -0
  160. package/lib/utils/response.js +223 -0
  161. package/lib/utils/safe-require.d.ts +13 -0
  162. package/lib/utils/safe-require.js +19 -0
  163. package/lib/utils/secret-encryption.d.ts +176 -0
  164. package/lib/utils/secret-encryption.js +374 -0
  165. package/lib/utils/ssrf.d.ts +30 -0
  166. package/lib/utils/ssrf.js +106 -0
  167. package/lib/validation/ai-schemas.d.ts +56 -0
  168. package/lib/validation/ai-schemas.js +78 -0
  169. package/lib/validation/common-schemas.d.ts +133 -0
  170. package/lib/validation/common-schemas.js +94 -0
  171. package/lib/validation/index.d.ts +7 -0
  172. package/lib/validation/index.js +10 -0
  173. package/lib/validation/message-schemas.d.ts +160 -0
  174. package/lib/validation/message-schemas.js +156 -0
  175. package/lib/validation/middleware.d.ts +72 -0
  176. package/lib/validation/middleware.js +65 -0
  177. package/lib/validation/pipeline-schemas.d.ts +181 -0
  178. package/lib/validation/pipeline-schemas.js +101 -0
  179. package/lib/validation/pipeline-template-schemas.d.ts +155 -0
  180. package/lib/validation/pipeline-template-schemas.js +66 -0
  181. package/lib/validation/plugin-schemas.d.ts +171 -0
  182. package/lib/validation/plugin-schemas.js +81 -0
  183. package/openapi.yaml +292 -0
  184. package/package.json +167 -0
@@ -0,0 +1,98 @@
1
+ // Copyright 2026 Pipeline Builder Contributors
2
+ // SPDX-License-Identifier: Apache-2.0
3
+ import { registry } from '../registry.js';
4
+ const tags = ['Image Registry'];
5
+ const auth = [{ bearerAuth: [] }];
6
+ /**
7
+ * OpenAPI definitions for the image-registry service (api/image-registry): the
8
+ * Docker-registry token endpoint (`/token`), the org-scoped image API
9
+ * (`/api/images`), and the admin API (`/api/admin`). Image read/write is gated by
10
+ * the `registry:read` / `registry:write` permissions.
11
+ */
12
+ export function registerImageRegistryRoutes() {
13
+ registry.registerPath({
14
+ method: 'get',
15
+ path: '/token',
16
+ summary: 'Mint a Docker registry token',
17
+ description: 'OAuth2-style token endpoint for `docker`/`crane`/`buildctl` clients. Verifies Basic-auth creds (a platform JWT or user login) and issues a scoped bearer token for pull/push.',
18
+ tags,
19
+ responses: { 200: { description: 'Registry access token' }, 401: { description: 'Invalid credentials' } },
20
+ });
21
+ registry.registerPath({
22
+ method: 'get',
23
+ path: '/api/images',
24
+ summary: 'List images',
25
+ description: "List the organization's container images in the registry.",
26
+ tags,
27
+ security: auth,
28
+ responses: { 200: { description: 'Image list' }, 403: { description: 'registry:read required' } },
29
+ });
30
+ registry.registerPath({
31
+ method: 'get',
32
+ path: '/api/images/{name}/tags',
33
+ summary: 'List image tags',
34
+ tags,
35
+ security: auth,
36
+ responses: { 200: { description: 'Tag list' }, 404: { description: 'Image not found' } },
37
+ });
38
+ registry.registerPath({
39
+ method: 'get',
40
+ path: '/api/images/{name}/manifests/{reference}',
41
+ summary: 'Get an image manifest',
42
+ tags,
43
+ security: auth,
44
+ responses: { 200: { description: 'OCI manifest / index' }, 404: { description: 'Manifest not found' } },
45
+ });
46
+ registry.registerPath({
47
+ method: 'get',
48
+ path: '/api/images/{name}/blobs/{digest}',
49
+ summary: 'Get an image blob',
50
+ tags,
51
+ security: auth,
52
+ responses: { 200: { description: 'Blob content' }, 404: { description: 'Blob not found' } },
53
+ });
54
+ registry.registerPath({
55
+ method: 'post',
56
+ path: '/api/images/copy',
57
+ summary: 'Copy an image',
58
+ description: 'Server-side copy of an image between repositories. Requires both registry:read and registry:write.',
59
+ tags,
60
+ security: auth,
61
+ responses: { 200: { description: 'Image copied' }, 403: { description: 'registry:read + registry:write required' } },
62
+ });
63
+ registry.registerPath({
64
+ method: 'delete',
65
+ path: '/api/images/{name}',
66
+ summary: 'Delete an image repository',
67
+ tags,
68
+ security: auth,
69
+ responses: { 200: { description: 'Repository deleted' }, 403: { description: 'registry:write required' } },
70
+ });
71
+ registry.registerPath({
72
+ method: 'delete',
73
+ path: '/api/images/{name}/manifests/{reference}',
74
+ summary: 'Delete an image manifest/tag',
75
+ tags,
76
+ security: auth,
77
+ responses: { 200: { description: 'Manifest deleted' }, 403: { description: 'registry:write required' } },
78
+ });
79
+ registry.registerPath({
80
+ method: 'get',
81
+ path: '/api/admin/storage/{prefix}',
82
+ summary: 'Registry storage rollup',
83
+ description: 'Storage usage rollup under a prefix (registry:read).',
84
+ tags,
85
+ security: auth,
86
+ responses: { 200: { description: 'Storage usage' }, 403: { description: 'registry:read required' } },
87
+ });
88
+ registry.registerPath({
89
+ method: 'post',
90
+ path: '/api/admin/gc',
91
+ summary: 'Run registry garbage collection',
92
+ description: 'Trigger blob/manifest garbage collection (registry:write).',
93
+ tags,
94
+ security: auth,
95
+ responses: { 202: { description: 'GC started' }, 403: { description: 'registry:write required' } },
96
+ });
97
+ }
98
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UtcmVnaXN0cnktcm91dGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL29wZW5hcGkvcm91dGVzL2ltYWdlLXJlZ2lzdHJ5LXJvdXRlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUxQyxNQUFNLElBQUksR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUM7QUFDaEMsTUFBTSxJQUFJLEdBQUcsQ0FBQyxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBRWxDOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLDJCQUEyQjtJQUN6QyxRQUFRLENBQUMsWUFBWSxDQUFDO1FBQ3BCLE1BQU0sRUFBRSxLQUFLO1FBQ2IsSUFBSSxFQUFFLFFBQVE7UUFDZCxPQUFPLEVBQUUsOEJBQThCO1FBQ3ZDLFdBQVcsRUFBRSwrS0FBK0s7UUFDNUwsSUFBSTtRQUNKLFNBQVMsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLFdBQVcsRUFBRSx1QkFBdUIsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLFdBQVcsRUFBRSxxQkFBcUIsRUFBRSxFQUFFO0tBQzFHLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxZQUFZLENBQUM7UUFDcEIsTUFBTSxFQUFFLEtBQUs7UUFDYixJQUFJLEVBQUUsYUFBYTtRQUNuQixPQUFPLEVBQUUsYUFBYTtRQUN0QixXQUFXLEVBQUUsMkRBQTJEO1FBQ3hFLElBQUk7UUFDSixRQUFRLEVBQUUsSUFBSTtRQUNkLFNBQVMsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxXQUFXLEVBQUUsd0JBQXdCLEVBQUUsRUFBRTtLQUNsRyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsWUFBWSxDQUFDO1FBQ3BCLE1BQU0sRUFBRSxLQUFLO1FBQ2IsSUFBSSxFQUFFLHlCQUF5QjtRQUMvQixPQUFPLEVBQUUsaUJBQWlCO1FBQzFCLElBQUk7UUFDSixRQUFRLEVBQUUsSUFBSTtRQUNkLFNBQVMsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxXQUFXLEVBQUUsaUJBQWlCLEVBQUUsRUFBRTtLQUN6RixDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsWUFBWSxDQUFDO1FBQ3BCLE1BQU0sRUFBRSxLQUFLO1FBQ2IsSUFBSSxFQUFFLDBDQUEwQztRQUNoRCxPQUFPLEVBQUUsdUJBQXVCO1FBQ2hDLElBQUk7UUFDSixRQUFRLEVBQUUsSUFBSTtRQUNkLFNBQVMsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLFdBQVcsRUFBRSxzQkFBc0IsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLFdBQVcsRUFBRSxvQkFBb0IsRUFBRSxFQUFFO0tBQ3hHLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxZQUFZLENBQUM7UUFDcEIsTUFBTSxFQUFFLEtBQUs7UUFDYixJQUFJLEVBQUUsbUNBQW1DO1FBQ3pDLE9BQU8sRUFBRSxtQkFBbUI7UUFDNUIsSUFBSTtRQUNKLFFBQVEsRUFBRSxJQUFJO1FBQ2QsU0FBUyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxFQUFFO0tBQzVGLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxZQUFZLENBQUM7UUFDcEIsTUFBTSxFQUFFLE1BQU07UUFDZCxJQUFJLEVBQUUsa0JBQWtCO1FBQ3hCLE9BQU8sRUFBRSxlQUFlO1FBQ3hCLFdBQVcsRUFBRSxvR0FBb0c7UUFDakgsSUFBSTtRQUNKLFFBQVEsRUFBRSxJQUFJO1FBQ2QsU0FBUyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLFdBQVcsRUFBRSx5Q0FBeUMsRUFBRSxFQUFFO0tBQ3JILENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxZQUFZLENBQUM7UUFDcEIsTUFBTSxFQUFFLFFBQVE7UUFDaEIsSUFBSSxFQUFFLG9CQUFvQjtRQUMxQixPQUFPLEVBQUUsNEJBQTRCO1FBQ3JDLElBQUk7UUFDSixRQUFRLEVBQUUsSUFBSTtRQUNkLFNBQVMsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLFdBQVcsRUFBRSxvQkFBb0IsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLFdBQVcsRUFBRSx5QkFBeUIsRUFBRSxFQUFFO0tBQzNHLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxZQUFZLENBQUM7UUFDcEIsTUFBTSxFQUFFLFFBQVE7UUFDaEIsSUFBSSxFQUFFLDBDQUEwQztRQUNoRCxPQUFPLEVBQUUsOEJBQThCO1FBQ3ZDLElBQUk7UUFDSixRQUFRLEVBQUUsSUFBSTtRQUNkLFNBQVMsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLFdBQVcsRUFBRSxrQkFBa0IsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLFdBQVcsRUFBRSx5QkFBeUIsRUFBRSxFQUFFO0tBQ3pHLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxZQUFZLENBQUM7UUFDcEIsTUFBTSxFQUFFLEtBQUs7UUFDYixJQUFJLEVBQUUsNkJBQTZCO1FBQ25DLE9BQU8sRUFBRSx5QkFBeUI7UUFDbEMsV0FBVyxFQUFFLHNEQUFzRDtRQUNuRSxJQUFJO1FBQ0osUUFBUSxFQUFFLElBQUk7UUFDZCxTQUFTLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxXQUFXLEVBQUUsZUFBZSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsV0FBVyxFQUFFLHdCQUF3QixFQUFFLEVBQUU7S0FDckcsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLFlBQVksQ0FBQztRQUNwQixNQUFNLEVBQUUsTUFBTTtRQUNkLElBQUksRUFBRSxlQUFlO1FBQ3JCLE9BQU8sRUFBRSxpQ0FBaUM7UUFDMUMsV0FBVyxFQUFFLDREQUE0RDtRQUN6RSxJQUFJO1FBQ0osUUFBUSxFQUFFLElBQUk7UUFDZCxTQUFTLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsV0FBVyxFQUFFLHlCQUF5QixFQUFFLEVBQUU7S0FDbkcsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgeyByZWdpc3RyeSB9IGZyb20gJy4uL3JlZ2lzdHJ5LmpzJztcblxuY29uc3QgdGFncyA9IFsnSW1hZ2UgUmVnaXN0cnknXTtcbmNvbnN0IGF1dGggPSBbeyBiZWFyZXJBdXRoOiBbXSB9XTtcblxuLyoqXG4gKiBPcGVuQVBJIGRlZmluaXRpb25zIGZvciB0aGUgaW1hZ2UtcmVnaXN0cnkgc2VydmljZSAoYXBpL2ltYWdlLXJlZ2lzdHJ5KTogdGhlXG4gKiBEb2NrZXItcmVnaXN0cnkgdG9rZW4gZW5kcG9pbnQgKGAvdG9rZW5gKSwgdGhlIG9yZy1zY29wZWQgaW1hZ2UgQVBJXG4gKiAoYC9hcGkvaW1hZ2VzYCksIGFuZCB0aGUgYWRtaW4gQVBJIChgL2FwaS9hZG1pbmApLiBJbWFnZSByZWFkL3dyaXRlIGlzIGdhdGVkIGJ5XG4gKiB0aGUgYHJlZ2lzdHJ5OnJlYWRgIC8gYHJlZ2lzdHJ5OndyaXRlYCBwZXJtaXNzaW9ucy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVySW1hZ2VSZWdpc3RyeVJvdXRlcygpOiB2b2lkIHtcbiAgcmVnaXN0cnkucmVnaXN0ZXJQYXRoKHtcbiAgICBtZXRob2Q6ICdnZXQnLFxuICAgIHBhdGg6ICcvdG9rZW4nLFxuICAgIHN1bW1hcnk6ICdNaW50IGEgRG9ja2VyIHJlZ2lzdHJ5IHRva2VuJyxcbiAgICBkZXNjcmlwdGlvbjogJ09BdXRoMi1zdHlsZSB0b2tlbiBlbmRwb2ludCBmb3IgYGRvY2tlcmAvYGNyYW5lYC9gYnVpbGRjdGxgIGNsaWVudHMuIFZlcmlmaWVzIEJhc2ljLWF1dGggY3JlZHMgKGEgcGxhdGZvcm0gSldUIG9yIHVzZXIgbG9naW4pIGFuZCBpc3N1ZXMgYSBzY29wZWQgYmVhcmVyIHRva2VuIGZvciBwdWxsL3B1c2guJyxcbiAgICB0YWdzLFxuICAgIHJlc3BvbnNlczogeyAyMDA6IHsgZGVzY3JpcHRpb246ICdSZWdpc3RyeSBhY2Nlc3MgdG9rZW4nIH0sIDQwMTogeyBkZXNjcmlwdGlvbjogJ0ludmFsaWQgY3JlZGVudGlhbHMnIH0gfSxcbiAgfSk7XG5cbiAgcmVnaXN0cnkucmVnaXN0ZXJQYXRoKHtcbiAgICBtZXRob2Q6ICdnZXQnLFxuICAgIHBhdGg6ICcvYXBpL2ltYWdlcycsXG4gICAgc3VtbWFyeTogJ0xpc3QgaW1hZ2VzJyxcbiAgICBkZXNjcmlwdGlvbjogXCJMaXN0IHRoZSBvcmdhbml6YXRpb24ncyBjb250YWluZXIgaW1hZ2VzIGluIHRoZSByZWdpc3RyeS5cIixcbiAgICB0YWdzLFxuICAgIHNlY3VyaXR5OiBhdXRoLFxuICAgIHJlc3BvbnNlczogeyAyMDA6IHsgZGVzY3JpcHRpb246ICdJbWFnZSBsaXN0JyB9LCA0MDM6IHsgZGVzY3JpcHRpb246ICdyZWdpc3RyeTpyZWFkIHJlcXVpcmVkJyB9IH0sXG4gIH0pO1xuXG4gIHJlZ2lzdHJ5LnJlZ2lzdGVyUGF0aCh7XG4gICAgbWV0aG9kOiAnZ2V0JyxcbiAgICBwYXRoOiAnL2FwaS9pbWFnZXMve25hbWV9L3RhZ3MnLFxuICAgIHN1bW1hcnk6ICdMaXN0IGltYWdlIHRhZ3MnLFxuICAgIHRhZ3MsXG4gICAgc2VjdXJpdHk6IGF1dGgsXG4gICAgcmVzcG9uc2VzOiB7IDIwMDogeyBkZXNjcmlwdGlvbjogJ1RhZyBsaXN0JyB9LCA0MDQ6IHsgZGVzY3JpcHRpb246ICdJbWFnZSBub3QgZm91bmQnIH0gfSxcbiAgfSk7XG5cbiAgcmVnaXN0cnkucmVnaXN0ZXJQYXRoKHtcbiAgICBtZXRob2Q6ICdnZXQnLFxuICAgIHBhdGg6ICcvYXBpL2ltYWdlcy97bmFtZX0vbWFuaWZlc3RzL3tyZWZlcmVuY2V9JyxcbiAgICBzdW1tYXJ5OiAnR2V0IGFuIGltYWdlIG1hbmlmZXN0JyxcbiAgICB0YWdzLFxuICAgIHNlY3VyaXR5OiBhdXRoLFxuICAgIHJlc3BvbnNlczogeyAyMDA6IHsgZGVzY3JpcHRpb246ICdPQ0kgbWFuaWZlc3QgLyBpbmRleCcgfSwgNDA0OiB7IGRlc2NyaXB0aW9uOiAnTWFuaWZlc3Qgbm90IGZvdW5kJyB9IH0sXG4gIH0pO1xuXG4gIHJlZ2lzdHJ5LnJlZ2lzdGVyUGF0aCh7XG4gICAgbWV0aG9kOiAnZ2V0JyxcbiAgICBwYXRoOiAnL2FwaS9pbWFnZXMve25hbWV9L2Jsb2JzL3tkaWdlc3R9JyxcbiAgICBzdW1tYXJ5OiAnR2V0IGFuIGltYWdlIGJsb2InLFxuICAgIHRhZ3MsXG4gICAgc2VjdXJpdHk6IGF1dGgsXG4gICAgcmVzcG9uc2VzOiB7IDIwMDogeyBkZXNjcmlwdGlvbjogJ0Jsb2IgY29udGVudCcgfSwgNDA0OiB7IGRlc2NyaXB0aW9uOiAnQmxvYiBub3QgZm91bmQnIH0gfSxcbiAgfSk7XG5cbiAgcmVnaXN0cnkucmVnaXN0ZXJQYXRoKHtcbiAgICBtZXRob2Q6ICdwb3N0JyxcbiAgICBwYXRoOiAnL2FwaS9pbWFnZXMvY29weScsXG4gICAgc3VtbWFyeTogJ0NvcHkgYW4gaW1hZ2UnLFxuICAgIGRlc2NyaXB0aW9uOiAnU2VydmVyLXNpZGUgY29weSBvZiBhbiBpbWFnZSBiZXR3ZWVuIHJlcG9zaXRvcmllcy4gUmVxdWlyZXMgYm90aCByZWdpc3RyeTpyZWFkIGFuZCByZWdpc3RyeTp3cml0ZS4nLFxuICAgIHRhZ3MsXG4gICAgc2VjdXJpdHk6IGF1dGgsXG4gICAgcmVzcG9uc2VzOiB7IDIwMDogeyBkZXNjcmlwdGlvbjogJ0ltYWdlIGNvcGllZCcgfSwgNDAzOiB7IGRlc2NyaXB0aW9uOiAncmVnaXN0cnk6cmVhZCArIHJlZ2lzdHJ5OndyaXRlIHJlcXVpcmVkJyB9IH0sXG4gIH0pO1xuXG4gIHJlZ2lzdHJ5LnJlZ2lzdGVyUGF0aCh7XG4gICAgbWV0aG9kOiAnZGVsZXRlJyxcbiAgICBwYXRoOiAnL2FwaS9pbWFnZXMve25hbWV9JyxcbiAgICBzdW1tYXJ5OiAnRGVsZXRlIGFuIGltYWdlIHJlcG9zaXRvcnknLFxuICAgIHRhZ3MsXG4gICAgc2VjdXJpdHk6IGF1dGgsXG4gICAgcmVzcG9uc2VzOiB7IDIwMDogeyBkZXNjcmlwdGlvbjogJ1JlcG9zaXRvcnkgZGVsZXRlZCcgfSwgNDAzOiB7IGRlc2NyaXB0aW9uOiAncmVnaXN0cnk6d3JpdGUgcmVxdWlyZWQnIH0gfSxcbiAgfSk7XG5cbiAgcmVnaXN0cnkucmVnaXN0ZXJQYXRoKHtcbiAgICBtZXRob2Q6ICdkZWxldGUnLFxuICAgIHBhdGg6ICcvYXBpL2ltYWdlcy97bmFtZX0vbWFuaWZlc3RzL3tyZWZlcmVuY2V9JyxcbiAgICBzdW1tYXJ5OiAnRGVsZXRlIGFuIGltYWdlIG1hbmlmZXN0L3RhZycsXG4gICAgdGFncyxcbiAgICBzZWN1cml0eTogYXV0aCxcbiAgICByZXNwb25zZXM6IHsgMjAwOiB7IGRlc2NyaXB0aW9uOiAnTWFuaWZlc3QgZGVsZXRlZCcgfSwgNDAzOiB7IGRlc2NyaXB0aW9uOiAncmVnaXN0cnk6d3JpdGUgcmVxdWlyZWQnIH0gfSxcbiAgfSk7XG5cbiAgcmVnaXN0cnkucmVnaXN0ZXJQYXRoKHtcbiAgICBtZXRob2Q6ICdnZXQnLFxuICAgIHBhdGg6ICcvYXBpL2FkbWluL3N0b3JhZ2Uve3ByZWZpeH0nLFxuICAgIHN1bW1hcnk6ICdSZWdpc3RyeSBzdG9yYWdlIHJvbGx1cCcsXG4gICAgZGVzY3JpcHRpb246ICdTdG9yYWdlIHVzYWdlIHJvbGx1cCB1bmRlciBhIHByZWZpeCAocmVnaXN0cnk6cmVhZCkuJyxcbiAgICB0YWdzLFxuICAgIHNlY3VyaXR5OiBhdXRoLFxuICAgIHJlc3BvbnNlczogeyAyMDA6IHsgZGVzY3JpcHRpb246ICdTdG9yYWdlIHVzYWdlJyB9LCA0MDM6IHsgZGVzY3JpcHRpb246ICdyZWdpc3RyeTpyZWFkIHJlcXVpcmVkJyB9IH0sXG4gIH0pO1xuXG4gIHJlZ2lzdHJ5LnJlZ2lzdGVyUGF0aCh7XG4gICAgbWV0aG9kOiAncG9zdCcsXG4gICAgcGF0aDogJy9hcGkvYWRtaW4vZ2MnLFxuICAgIHN1bW1hcnk6ICdSdW4gcmVnaXN0cnkgZ2FyYmFnZSBjb2xsZWN0aW9uJyxcbiAgICBkZXNjcmlwdGlvbjogJ1RyaWdnZXIgYmxvYi9tYW5pZmVzdCBnYXJiYWdlIGNvbGxlY3Rpb24gKHJlZ2lzdHJ5OndyaXRlKS4nLFxuICAgIHRhZ3MsXG4gICAgc2VjdXJpdHk6IGF1dGgsXG4gICAgcmVzcG9uc2VzOiB7IDIwMjogeyBkZXNjcmlwdGlvbjogJ0dDIHN0YXJ0ZWQnIH0sIDQwMzogeyBkZXNjcmlwdGlvbjogJ3JlZ2lzdHJ5OndyaXRlIHJlcXVpcmVkJyB9IH0sXG4gIH0pO1xufVxuIl19
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Register all OpenAPI route definitions with the shared registry.
3
+ * Call this once during spec generation initialization.
4
+ */
5
+ export declare function registerAllRoutes(): void;
@@ -0,0 +1,28 @@
1
+ // Copyright 2026 Pipeline Builder Contributors
2
+ // SPDX-License-Identifier: Apache-2.0
3
+ import { registerAskRoutes } from './ask-routes.js';
4
+ import { registerBillingRoutes } from './billing-routes.js';
5
+ import { registerImageRegistryRoutes } from './image-registry-routes.js';
6
+ import { registerMessageRoutes } from './message-routes.js';
7
+ import { registerPipelineRoutes } from './pipeline-routes.js';
8
+ import { registerPipelineTemplateRoutes } from './pipeline-template-routes.js';
9
+ import { registerPluginRoutes } from './plugin-routes.js';
10
+ import { registerQuotaRoutes } from './quota-routes.js';
11
+ /**
12
+ * Register all OpenAPI route definitions with the shared registry.
13
+ * Call this once during spec generation initialization.
14
+ */
15
+ export function registerAllRoutes() {
16
+ registerAskRoutes();
17
+ registerBillingRoutes();
18
+ registerImageRegistryRoutes();
19
+ registerMessageRoutes();
20
+ registerPipelineRoutes();
21
+ registerPipelineTemplateRoutes();
22
+ registerPluginRoutes();
23
+ registerQuotaRoutes();
24
+ // NOTE: compliance + reporting (large multi-router surfaces) and platform/auth
25
+ // are not yet registered — follow-on, and intentionally omitted rather than
26
+ // shipping inaccurate paths.
27
+ }
28
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvb3BlbmFwaS9yb3V0ZXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN6RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUMvRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUMxRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUV4RDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsaUJBQWlCO0lBQy9CLGlCQUFpQixFQUFFLENBQUM7SUFDcEIscUJBQXFCLEVBQUUsQ0FBQztJQUN4QiwyQkFBMkIsRUFBRSxDQUFDO0lBQzlCLHFCQUFxQixFQUFFLENBQUM7SUFDeEIsc0JBQXNCLEVBQUUsQ0FBQztJQUN6Qiw4QkFBOEIsRUFBRSxDQUFDO0lBQ2pDLG9CQUFvQixFQUFFLENBQUM7SUFDdkIsbUJBQW1CLEVBQUUsQ0FBQztJQUN0QiwrRUFBK0U7SUFDL0UsNEVBQTRFO0lBQzVFLDZCQUE2QjtBQUMvQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB7IHJlZ2lzdGVyQXNrUm91dGVzIH0gZnJvbSAnLi9hc2stcm91dGVzLmpzJztcbmltcG9ydCB7IHJlZ2lzdGVyQmlsbGluZ1JvdXRlcyB9IGZyb20gJy4vYmlsbGluZy1yb3V0ZXMuanMnO1xuaW1wb3J0IHsgcmVnaXN0ZXJJbWFnZVJlZ2lzdHJ5Um91dGVzIH0gZnJvbSAnLi9pbWFnZS1yZWdpc3RyeS1yb3V0ZXMuanMnO1xuaW1wb3J0IHsgcmVnaXN0ZXJNZXNzYWdlUm91dGVzIH0gZnJvbSAnLi9tZXNzYWdlLXJvdXRlcy5qcyc7XG5pbXBvcnQgeyByZWdpc3RlclBpcGVsaW5lUm91dGVzIH0gZnJvbSAnLi9waXBlbGluZS1yb3V0ZXMuanMnO1xuaW1wb3J0IHsgcmVnaXN0ZXJQaXBlbGluZVRlbXBsYXRlUm91dGVzIH0gZnJvbSAnLi9waXBlbGluZS10ZW1wbGF0ZS1yb3V0ZXMuanMnO1xuaW1wb3J0IHsgcmVnaXN0ZXJQbHVnaW5Sb3V0ZXMgfSBmcm9tICcuL3BsdWdpbi1yb3V0ZXMuanMnO1xuaW1wb3J0IHsgcmVnaXN0ZXJRdW90YVJvdXRlcyB9IGZyb20gJy4vcXVvdGEtcm91dGVzLmpzJztcblxuLyoqXG4gKiBSZWdpc3RlciBhbGwgT3BlbkFQSSByb3V0ZSBkZWZpbml0aW9ucyB3aXRoIHRoZSBzaGFyZWQgcmVnaXN0cnkuXG4gKiBDYWxsIHRoaXMgb25jZSBkdXJpbmcgc3BlYyBnZW5lcmF0aW9uIGluaXRpYWxpemF0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJBbGxSb3V0ZXMoKTogdm9pZCB7XG4gIHJlZ2lzdGVyQXNrUm91dGVzKCk7XG4gIHJlZ2lzdGVyQmlsbGluZ1JvdXRlcygpO1xuICByZWdpc3RlckltYWdlUmVnaXN0cnlSb3V0ZXMoKTtcbiAgcmVnaXN0ZXJNZXNzYWdlUm91dGVzKCk7XG4gIHJlZ2lzdGVyUGlwZWxpbmVSb3V0ZXMoKTtcbiAgcmVnaXN0ZXJQaXBlbGluZVRlbXBsYXRlUm91dGVzKCk7XG4gIHJlZ2lzdGVyUGx1Z2luUm91dGVzKCk7XG4gIHJlZ2lzdGVyUXVvdGFSb3V0ZXMoKTtcbiAgLy8gTk9URTogY29tcGxpYW5jZSArIHJlcG9ydGluZyAobGFyZ2UgbXVsdGktcm91dGVyIHN1cmZhY2VzKSBhbmQgcGxhdGZvcm0vYXV0aFxuICAvLyBhcmUgbm90IHlldCByZWdpc3RlcmVkIOKAlCBmb2xsb3ctb24sIGFuZCBpbnRlbnRpb25hbGx5IG9taXR0ZWQgcmF0aGVyIHRoYW5cbiAgLy8gc2hpcHBpbmcgaW5hY2N1cmF0ZSBwYXRocy5cbn1cbiJdfQ==
@@ -0,0 +1 @@
1
+ export declare function registerMessageRoutes(): void;
@@ -0,0 +1,105 @@
1
+ // Copyright 2026 Pipeline Builder Contributors
2
+ // SPDX-License-Identifier: Apache-2.0
3
+ import { registry } from '../registry.js';
4
+ const tags = ['Messages'];
5
+ const auth = [{ bearerAuth: [] }];
6
+ export function registerMessageRoutes() {
7
+ registry.registerPath({
8
+ method: 'get',
9
+ path: '/messages',
10
+ summary: 'List inbox messages',
11
+ description: 'List root messages (inbox) with optional filtering by type and pagination.',
12
+ tags,
13
+ security: auth,
14
+ responses: { 200: { description: 'Paginated list of messages' } },
15
+ });
16
+ registry.registerPath({
17
+ method: 'get',
18
+ path: '/messages/announcements',
19
+ summary: 'List announcements',
20
+ description: 'List announcement messages only.',
21
+ tags,
22
+ security: auth,
23
+ responses: { 200: { description: 'List of announcements' } },
24
+ });
25
+ registry.registerPath({
26
+ method: 'get',
27
+ path: '/messages/conversations',
28
+ summary: 'List conversations',
29
+ description: 'List conversation messages only.',
30
+ tags,
31
+ security: auth,
32
+ responses: { 200: { description: 'List of conversations' } },
33
+ });
34
+ registry.registerPath({
35
+ method: 'get',
36
+ path: '/messages/unread/count',
37
+ summary: 'Get unread count',
38
+ description: 'Get the number of unread messages for the current organization.',
39
+ tags,
40
+ security: auth,
41
+ responses: { 200: { description: 'Unread message count' } },
42
+ });
43
+ registry.registerPath({
44
+ method: 'get',
45
+ path: '/messages/{id}',
46
+ summary: 'Get message by ID',
47
+ tags,
48
+ security: auth,
49
+ responses: { 200: { description: 'Message details' }, 404: { description: 'Not found' } },
50
+ });
51
+ registry.registerPath({
52
+ method: 'get',
53
+ path: '/messages/{id}/thread',
54
+ summary: 'Get message thread',
55
+ description: 'Get all messages in a thread including the root message and replies.',
56
+ tags,
57
+ security: auth,
58
+ responses: { 200: { description: 'Thread messages sorted by date' } },
59
+ });
60
+ registry.registerPath({
61
+ method: 'post',
62
+ path: '/messages',
63
+ summary: 'Create a message',
64
+ description: 'Create a new announcement or conversation message.',
65
+ tags,
66
+ security: auth,
67
+ responses: { 201: { description: 'Message created' }, 400: { description: 'Validation error' } },
68
+ });
69
+ registry.registerPath({
70
+ method: 'post',
71
+ path: '/messages/{id}/reply',
72
+ summary: 'Reply to a message',
73
+ description: 'Create a reply in an existing message thread.',
74
+ tags,
75
+ security: auth,
76
+ responses: { 201: { description: 'Reply created' }, 404: { description: 'Parent message not found' } },
77
+ });
78
+ registry.registerPath({
79
+ method: 'put',
80
+ path: '/messages/{id}/read',
81
+ summary: 'Mark message as read',
82
+ tags,
83
+ security: auth,
84
+ responses: { 200: { description: 'Message marked as read' } },
85
+ });
86
+ registry.registerPath({
87
+ method: 'put',
88
+ path: '/messages/{id}/thread/read',
89
+ summary: 'Mark thread as read',
90
+ description: 'Mark all messages in a thread as read.',
91
+ tags,
92
+ security: auth,
93
+ responses: { 200: { description: 'Thread marked as read' } },
94
+ });
95
+ registry.registerPath({
96
+ method: 'delete',
97
+ path: '/messages/{id}',
98
+ summary: 'Delete a message',
99
+ description: 'Soft-delete a message.',
100
+ tags,
101
+ security: auth,
102
+ responses: { 200: { description: 'Message deleted' }, 404: { description: 'Not found' } },
103
+ });
104
+ }
105
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZS1yb3V0ZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvb3BlbmFwaS9yb3V0ZXMvbWVzc2FnZS1yb3V0ZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFMUMsTUFBTSxJQUFJLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUMxQixNQUFNLElBQUksR0FBRyxDQUFDLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFFbEMsTUFBTSxVQUFVLHFCQUFxQjtJQUNuQyxRQUFRLENBQUMsWUFBWSxDQUFDO1FBQ3BCLE1BQU0sRUFBRSxLQUFLO1FBQ2IsSUFBSSxFQUFFLFdBQVc7UUFDakIsT0FBTyxFQUFFLHFCQUFxQjtRQUM5QixXQUFXLEVBQUUsNEVBQTRFO1FBQ3pGLElBQUk7UUFDSixRQUFRLEVBQUUsSUFBSTtRQUNkLFNBQVMsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLFdBQVcsRUFBRSw0QkFBNEIsRUFBRSxFQUFFO0tBQ2xFLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxZQUFZLENBQUM7UUFDcEIsTUFBTSxFQUFFLEtBQUs7UUFDYixJQUFJLEVBQUUseUJBQXlCO1FBQy9CLE9BQU8sRUFBRSxvQkFBb0I7UUFDN0IsV0FBVyxFQUFFLGtDQUFrQztRQUMvQyxJQUFJO1FBQ0osUUFBUSxFQUFFLElBQUk7UUFDZCxTQUFTLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxXQUFXLEVBQUUsdUJBQXVCLEVBQUUsRUFBRTtLQUM3RCxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsWUFBWSxDQUFDO1FBQ3BCLE1BQU0sRUFBRSxLQUFLO1FBQ2IsSUFBSSxFQUFFLHlCQUF5QjtRQUMvQixPQUFPLEVBQUUsb0JBQW9CO1FBQzdCLFdBQVcsRUFBRSxrQ0FBa0M7UUFDL0MsSUFB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QWdCO1FBQ3RCLE9BQU8sRUFBRSxrQkFBa0I7UUFDM0IsV0FBVyxFQUFFLHdCQUF3QjtRQUNyQyxJQUFJO1FBQ0osUUFBUSxFQUFFLElBQUk7UUFDZCxTQUFTLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxXQUFXLEVBQUUsaUJBQWlCLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLEVBQUU7S0FDMUYsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgeyByZWdpc3RyeSB9IGZyb20gJy4uL3JlZ2lzdHJ5LmpzJztcblxuY29uc3QgdGFncyA9IFsnTWVzc2FnZXMnXTtcbmNvbnN0IGF1dGggPSBbeyBiZWFyZXJBdXRoOiBbXSB9XTtcblxuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyTWVzc2FnZVJvdXRlcygpOiB2b2lkIHtcbiAgcmVnaXN0cnkucmVnaXN0ZXJQYXRoKHtcbiAgICBtZXRob2Q6ICdnZXQnLFxuICAgIHBhdGg6ICcvbWVzc2FnZXMnLFxuICAgIHN1bW1hcnk6ICdMaXN0IGluYm94IG1lc3NhZ2VzJyxcbiAgICBkZXNjcmlwdGlvbjogJ0xpc3Qgcm9vdCBtZXNzYWdlcyAoaW5ib3gpIHdpdGggb3B0aW9uYWwgZmlsdGVyaW5nIGJ5IHR5cGUgYW5kIHBhZ2luYXRpb24uJyxcbiAgICB0YWdzLFxuICAgIHNlY3VyaXR5OiBhdXRoLFxuICAgIHJlc3BvbnNlczogeyAyMDA6IHsgZGVzY3JpcHRpb246ICdQYWdpbmF0ZWQgbGlzdCBvZiBtZXNzYWdlcycgfSB9LFxuICB9KTtcblxuICByZWdpc3RyeS5yZWdpc3RlclBhdGgoe1xuICAgIG1ldGhvZDogJ2dldCcsXG4gICAgcGF0aDogJy9tZXNzYWdlcy9hbm5vdW5jZW1lbnRzJyxcbiAgICBzdW1tYXJ5OiAnTGlzdCBhbm5vdW5jZW1lbnRzJyxcbiAgICBkZXNjcmlwdGlvbjogJ0xpc3QgYW5ub3VuY2VtZW50IG1lc3NhZ2VzIG9ubHkuJyxcbiAgICB0YWdzLFxuICAgIHNlY3VyaXR5OiBhdXRoLFxuICAgIHJlc3BvbnNlczogeyAyMDA6IHsgZGVzY3JpcHRpb246ICdMaXN0IG9mIGFubm91bmNlbWVudHMnIH0gfSxcbiAgfSk7XG5cbiAgcmVnaXN0cnkucmVnaXN0ZXJQYXRoKHtcbiAgICBtZXRob2Q6ICdnZXQnLFxuICAgIHBhdGg6ICcvbWVzc2FnZXMvY29udmVyc2F0aW9ucycsXG4gICAgc3VtbWFyeTogJ0xpc3QgY29udmVyc2F0aW9ucycsXG4gICAgZGVzY3JpcHRpb246ICdMaXN0IGNvbnZlcnNhdGlvbiBtZXNzYWdlcyBvbmx5LicsXG4gICAgdGFncyxcbiAgICBzZWN1cml0eTogYXV0aCxcbiAgICByZXNwb25zZXM6IHsgMjAwOiB7IGRlc2NyaXB0aW9uOiAnTGlzdCBvZiBjb252ZXJzYXRpb25zJyB9IH0sXG4gIH0pO1xuXG4gIHJlZ2lzdHJ5LnJlZ2lzdGVyUGF0aCh7XG4gICAgbWV0aG9kOiAnZ2V0JyxcbiAgICBwYXRoOiAnL21lc3NhZ2VzL3VucmVhZC9jb3VudCcsXG4gICAgc3VtbWFyeTogJ0dldCB1bnJlYWQgY291bnQnLFxuICAgIGRlc2NyaXB0aW9uOiAnR2V0IHRoZSBudW1iZXIgb2YgdW5yZWFkIG1lc3NhZ2VzIGZvciB0aGUgY3VycmVudCBvcmdhbml6YXRpb24uJyxcbiAgICB0YWdzLFxuICAgIHNlY3VyaXR5OiBhdXRoLFxuICAgIHJlc3BvbnNlczogeyAyMDA6IHsgZGVzY3JpcHRpb246ICdVbnJlYWQgbWVzc2FnZSBjb3VudCcgfSB9LFxuICB9KTtcblxuICByZWdpc3RyeS5yZWdpc3RlclBhdGgoe1xuICAgIG1ldGhvZDogJ2dldCcsXG4gICAgcGF0aDogJy9tZXNzYWdlcy97aWR9JyxcbiAgICBzdW1tYXJ5OiAnR2V0IG1lc3NhZ2UgYnkgSUQnLFxuICAgIHRhZ3MsXG4gICAgc2VjdXJpdHk6IGF1dGgsXG4gICAgcmVzcG9uc2VzOiB7IDIwMDogeyBkZXNjcmlwdGlvbjogJ01lc3NhZ2UgZGV0YWlscycgfSwgNDA0OiB7IGRlc2NyaXB0aW9uOiAnTm90IGZvdW5kJyB9IH0sXG4gIH0pO1xuXG4gIHJlZ2lzdHJ5LnJlZ2lzdGVyUGF0aCh7XG4gICAgbWV0aG9kOiAnZ2V0JyxcbiAgICBwYXRoOiAnL21lc3NhZ2VzL3tpZH0vdGhyZWFkJyxcbiAgICBzdW1tYXJ5OiAnR2V0IG1lc3NhZ2UgdGhyZWFkJyxcbiAgICBkZXNjcmlwdGlvbjogJ0dldCBhbGwgbWVzc2FnZXMgaW4gYSB0aHJlYWQgaW5jbHVkaW5nIHRoZSByb290IG1lc3NhZ2UgYW5kIHJlcGxpZXMuJyxcbiAgICB0YWdzLFxuICAgIHNlY3VyaXR5OiBhdXRoLFxuICAgIHJlc3BvbnNlczogeyAyMDA6IHsgZGVzY3JpcHRpb246ICdUaHJlYWQgbWVzc2FnZXMgc29ydGVkIGJ5IGRhdGUnIH0gfSxcbiAgfSk7XG5cbiAgcmVnaXN0cnkucmVnaXN0ZXJQYXRoKHtcbiAgICBtZXRob2Q6ICdwb3N0JyxcbiAgICBwYXRoOiAnL21lc3NhZ2VzJyxcbiAgICBzdW1tYXJ5OiAnQ3JlYXRlIGEgbWVzc2FnZScsXG4gICAgZGVzY3JpcHRpb246ICdDcmVhdGUgYSBuZXcgYW5ub3VuY2VtZW50IG9yIGNvbnZlcnNhdGlvbiBtZXNzYWdlLicsXG4gICAgdGFncyxcbiAgICBzZWN1cml0eTogYXV0aCxcbiAgICByZXNwb25zZXM6IHsgMjAxOiB7IGRlc2NyaXB0aW9uOiAnTWVzc2FnZSBjcmVhdGVkJyB9LCA0MDA6IHsgZGVzY3JpcHRpb246ICdWYWxpZGF0aW9uIGVycm9yJyB9IH0sXG4gIH0pO1xuXG4gIHJlZ2lzdHJ5LnJlZ2lzdGVyUGF0aCh7XG4gICAgbWV0aG9kOiAncG9zdCcsXG4gICAgcGF0aDogJy9tZXNzYWdlcy97aWR9L3JlcGx5JyxcbiAgICBzdW1tYXJ5OiAnUmVwbHkgdG8gYSBtZXNzYWdlJyxcbiAgICBkZXNjcmlwdGlvbjogJ0NyZWF0ZSBhIHJlcGx5IGluIGFuIGV4aXN0aW5nIG1lc3NhZ2UgdGhyZWFkLicsXG4gICAgdGFncyxcbiAgICBzZWN1cml0eTogYXV0aCxcbiAgICByZXNwb25zZXM6IHsgMjAxOiB7IGRlc2NyaXB0aW9uOiAnUmVwbHkgY3JlYXRlZCcgfSwgNDA0OiB7IGRlc2NyaXB0aW9uOiAnUGFyZW50IG1lc3NhZ2Ugbm90IGZvdW5kJyB9IH0sXG4gIH0pO1xuXG4gIHJlZ2lzdHJ5LnJlZ2lzdGVyUGF0aCh7XG4gICAgbWV0aG9kOiAncHV0JyxcbiAgICBwYXRoOiAnL21lc3NhZ2VzL3tpZH0vcmVhZCcsXG4gICAgc3VtbWFyeTogJ01hcmsgbWVzc2FnZSBhcyByZWFkJyxcbiAgICB0YWdzLFxuICAgIHNlY3VyaXR5OiBhdXRoLFxuICAgIHJlc3BvbnNlczogeyAyMDA6IHsgZGVzY3JpcHRpb246ICdNZXNzYWdlIG1hcmtlZCBhcyByZWFkJyB9IH0sXG4gIH0pO1xuXG4gIHJlZ2lzdHJ5LnJlZ2lzdGVyUGF0aCh7XG4gICAgbWV0aG9kOiAncHV0JyxcbiAgICBwYXRoOiAnL21lc3NhZ2VzL3tpZH0vdGhyZWFkL3JlYWQnLFxuICAgIHN1bW1hcnk6ICdNYXJrIHRocmVhZCBhcyByZWFkJyxcbiAgICBkZXNjcmlwdGlvbjogJ01hcmsgYWxsIG1lc3NhZ2VzIGluIGEgdGhyZWFkIGFzIHJlYWQuJyxcbiAgICB0YWdzLFxuICAgIHNlY3VyaXR5OiBhdXRoLFxuICAgIHJlc3BvbnNlczogeyAyMDA6IHsgZGVzY3JpcHRpb246ICdUaHJlYWQgbWFya2VkIGFzIHJlYWQnIH0gfSxcbiAgfSk7XG5cbiAgcmVnaXN0cnkucmVnaXN0ZXJQYXRoKHtcbiAgICBtZXRob2Q6ICdkZWxldGUnLFxuICAgIHBhdGg6ICcvbWVzc2FnZXMve2lkfScsXG4gICAgc3VtbWFyeTogJ0RlbGV0ZSBhIG1lc3NhZ2UnLFxuICAgIGRlc2NyaXB0aW9uOiAnU29mdC1kZWxldGUgYSBtZXNzYWdlLicsXG4gICAgdGFncyxcbiAgICBzZWN1cml0eTogYXV0aCxcbiAgICByZXNwb25zZXM6IHsgMjAwOiB7IGRlc2NyaXB0aW9uOiAnTWVzc2FnZSBkZWxldGVkJyB9LCA0MDQ6IHsgZGVzY3JpcHRpb246ICdOb3QgZm91bmQnIH0gfSxcbiAgfSk7XG59XG4iXX0=
@@ -0,0 +1 @@
1
+ export declare function registerPipelineRoutes(): void;
@@ -0,0 +1,105 @@
1
+ // Copyright 2026 Pipeline Builder Contributors
2
+ // SPDX-License-Identifier: Apache-2.0
3
+ import { registry } from '../registry.js';
4
+ const tags = ['Pipelines'];
5
+ const auth = [{ bearerAuth: [] }];
6
+ export function registerPipelineRoutes() {
7
+ registry.registerPath({
8
+ method: 'get',
9
+ path: '/pipelines',
10
+ summary: 'List pipelines',
11
+ description: 'List pipelines with pagination, filtering, and sorting.',
12
+ tags,
13
+ security: auth,
14
+ responses: { 200: { description: 'Paginated list of pipelines' }, 401: { description: 'Unauthorized' } },
15
+ });
16
+ registry.registerPath({
17
+ method: 'get',
18
+ path: '/pipelines/find',
19
+ summary: 'Find a single pipeline',
20
+ description: 'Find a single pipeline matching the query filters.',
21
+ tags,
22
+ security: auth,
23
+ responses: { 200: { description: 'Pipeline found' }, 404: { description: 'Not found' } },
24
+ });
25
+ registry.registerPath({
26
+ method: 'get',
27
+ path: '/pipelines/{id}',
28
+ summary: 'Get pipeline by ID',
29
+ tags,
30
+ security: auth,
31
+ responses: { 200: { description: 'Pipeline details' }, 404: { description: 'Not found' } },
32
+ });
33
+ registry.registerPath({
34
+ method: 'get',
35
+ path: '/pipelines/{id}/scorecard',
36
+ summary: 'Get a pipeline maturity scorecard',
37
+ description: 'Per-pipeline maturity scorecard blending compliance posture with DORA performance bands into a 0–100 score and letter grade. Requires the `advanced_reporting` feature.',
38
+ tags,
39
+ security: auth,
40
+ responses: { 200: { description: 'Scorecard' }, 403: { description: 'Feature not enabled' }, 404: { description: 'Not found' } },
41
+ });
42
+ registry.registerPath({
43
+ method: 'get',
44
+ path: '/pipelines/scorecard',
45
+ summary: 'Org-wide scorecard roll-up (software-health leaderboard)',
46
+ description: 'Grades every pipeline in the organization and returns a ranked leaderboard plus aggregate stats (pipeline count, average score, grade distribution). Bounded per request. Requires the `advanced_reporting` feature.',
47
+ tags,
48
+ security: auth,
49
+ responses: { 200: { description: 'Org-wide scorecard roll-up' }, 403: { description: 'Feature not enabled' } },
50
+ });
51
+ registry.registerPath({
52
+ method: 'post',
53
+ path: '/pipelines',
54
+ summary: 'Create a pipeline',
55
+ description: 'Create a new pipeline configuration. Checks pipeline quota.',
56
+ tags,
57
+ security: auth,
58
+ responses: { 201: { description: 'Pipeline created' }, 400: { description: 'Validation error' }, 429: { description: 'Quota exceeded' } },
59
+ });
60
+ registry.registerPath({
61
+ method: 'put',
62
+ path: '/pipelines/{id}',
63
+ summary: 'Update a pipeline',
64
+ tags,
65
+ security: auth,
66
+ responses: { 200: { description: 'Pipeline updated' }, 404: { description: 'Not found' } },
67
+ });
68
+ registry.registerPath({
69
+ method: 'delete',
70
+ path: '/pipelines/{id}',
71
+ summary: 'Delete a pipeline',
72
+ description: 'Soft-delete a pipeline by setting isActive to false.',
73
+ tags,
74
+ security: auth,
75
+ responses: { 200: { description: 'Pipeline deleted' }, 404: { description: 'Not found' } },
76
+ });
77
+ registry.registerPath({
78
+ method: 'get',
79
+ path: '/pipelines/providers',
80
+ summary: 'List AI providers',
81
+ description: 'List AI providers configured for pipeline generation.',
82
+ tags,
83
+ security: auth,
84
+ responses: { 200: { description: 'List of available AI providers with models' } },
85
+ });
86
+ registry.registerPath({
87
+ method: 'post',
88
+ path: '/pipelines/generate',
89
+ summary: 'Generate pipeline via AI',
90
+ description: 'Generate a BuilderProps configuration from a natural language prompt. Returns the complete result when done.',
91
+ tags,
92
+ security: auth,
93
+ responses: { 200: { description: 'Generated pipeline configuration' }, 400: { description: 'Validation error' } },
94
+ });
95
+ registry.registerPath({
96
+ method: 'post',
97
+ path: '/pipelines/generate/stream',
98
+ summary: 'Stream pipeline generation via AI',
99
+ description: 'Generate a BuilderProps configuration from a natural language prompt. Streams partial results as SSE events.',
100
+ tags,
101
+ security: auth,
102
+ responses: { 200: { description: 'SSE event stream of partial pipeline objects' }, 400: { description: 'Validation error' } },
103
+ });
104
+ }
105
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlwZWxpbmUtcm91dGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL29wZW5hcGkvcm91dGVzL3BpcGVsaW5lLXJvdXRlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUxQyxNQUFNLElBQUksR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQzNCLE1BQU0sSUFBSSxHQUFHLENBQUMsRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUVsQyxNQUFNLFVBQVUsc0JBQXNCO0lBQ3BDLFFBQVEsQ0FBQyxZQUFZLENBQUM7UUFDcEIsTUFBTSxFQUFFLEtBQUs7UUFDYixJQUFJLEVBQUUsWUFBWTtRQUNsQixPQUFPLEVBQUUsZ0JBQWdCO1FBQ3pCLFdBQVcsRUFBRSx5REFBeUQ7UUFDdEUsSUFBSTtRQUNKLFFBQVEsRUFBRSxJQUFJO1FBQ2QsU0FBUyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsV0FBVyxFQUFFLDZCQUE2QixFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxFQUFFO0tBQ3pHLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxZQUFZLENBQUM7UUFDcEIsTUFBTSxFQUFFLEtBQUs7UUFDYixJQUFJLEVBQUUsaUJBQWlCO1FBQ3ZCLE9BQU8sRUFBRSx3QkFBd0I7UUFDakMsV0FBVyxFQUFFLG9EQUFvRDtRQUNqRSxJQUFJO1FBQ0osUUFBUSxFQUFFLElBQUk7UUFDZCxTQUFTLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLEVBQUU7S0FDekYsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLFlBQVksQ0FBQztRQUNwQixNQUFNLEVBQUUs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QUVILFFBQVEsQ0FBQyxZQUFZLENBQUM7UUFDcEIsTUFBTSxFQUFFLE1BQU07UUFDZCxJQUFJLEVBQUUscUJBQXFCO1FBQzNCLE9BQU8sRUFBRSwwQkFBMEI7UUFDbkMsV0FBVyxFQUFFLDhHQUE4RztRQUMzSCxJQUFJO1FBQ0osUUFBUSxFQUFFLElBQUk7UUFDZCxTQUFTLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxXQUFXLEVBQUUsa0NBQWtDLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxXQUFXLEVBQUUsa0JBQWtCLEVBQUUsRUFBRTtLQUNsSCxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsWUFBWSxDQUFDO1FBQ3BCLE1BQU0sRUFBRSxNQUFNO1FBQ2QsSUFBSSxFQUFFLDRCQUE0QjtRQUNsQyxPQUFPLEVBQUUsbUNBQW1DO1FBQzVDLFdBQVcsRUFBRSw4R0FBOEc7UUFDM0gsSUFBSTtRQUNKLFFBQVEsRUFBRSxJQUFJO1FBQ2QsU0FBUyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsV0FBVyxFQUFFLDhDQUE4QyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsV0FBVyxFQUFFLGtCQUFrQixFQUFFLEVBQUU7S0FDOUgsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgeyByZWdpc3RyeSB9IGZyb20gJy4uL3JlZ2lzdHJ5LmpzJztcblxuY29uc3QgdGFncyA9IFsnUGlwZWxpbmVzJ107XG5jb25zdCBhdXRoID0gW3sgYmVhcmVyQXV0aDogW10gfV07XG5cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RlclBpcGVsaW5lUm91dGVzKCk6IHZvaWQge1xuICByZWdpc3RyeS5yZWdpc3RlclBhdGgoe1xuICAgIG1ldGhvZDogJ2dldCcsXG4gICAgcGF0aDogJy9waXBlbGluZXMnLFxuICAgIHN1bW1hcnk6ICdMaXN0IHBpcGVsaW5lcycsXG4gICAgZGVzY3JpcHRpb246ICdMaXN0IHBpcGVsaW5lcyB3aXRoIHBhZ2luYXRpb24sIGZpbHRlcmluZywgYW5kIHNvcnRpbmcuJyxcbiAgICB0YWdzLFxuICAgIHNlY3VyaXR5OiBhdXRoLFxuICAgIHJlc3BvbnNlczogeyAyMDA6IHsgZGVzY3JpcHRpb246ICdQYWdpbmF0ZWQgbGlzdCBvZiBwaXBlbGluZXMnIH0sIDQwMTogeyBkZXNjcmlwdGlvbjogJ1VuYXV0aG9yaXplZCcgfSB9LFxuICB9KTtcblxuICByZWdpc3RyeS5yZWdpc3RlclBhdGgoe1xuICAgIG1ldGhvZDogJ2dldCcsXG4gICAgcGF0aDogJy9waXBlbGluZXMvZmluZCcsXG4gICAgc3VtbWFyeTogJ0ZpbmQgYSBzaW5nbGUgcGlwZWxpbmUnLFxuICAgIGRlc2NyaXB0aW9uOiAnRmluZCBhIHNpbmdsZSBwaXBlbGluZSBtYXRjaGluZyB0aGUgcXVlcnkgZmlsdGVycy4nLFxuICAgIHRhZ3MsXG4gICAgc2VjdXJpdHk6IGF1dGgsXG4gICAgcmVzcG9uc2VzOiB7IDIwMDogeyBkZXNjcmlwdGlvbjogJ1BpcGVsaW5lIGZvdW5kJyB9LCA0MDQ6IHsgZGVzY3JpcHRpb246ICdOb3QgZm91bmQnIH0gfSxcbiAgfSk7XG5cbiAgcmVnaXN0cnkucmVnaXN0ZXJQYXRoKHtcbiAgICBtZXRob2Q6ICdnZXQnLFxuICAgIHBhdGg6ICcvcGlwZWxpbmVzL3tpZH0nLFxuICAgIHN1bW1hcnk6ICdHZXQgcGlwZWxpbmUgYnkgSUQnLFxuICAgIHRhZ3MsXG4gICAgc2VjdXJpdHk6IGF1dGgsXG4gICAgcmVzcG9uc2VzOiB7IDIwMDogeyBkZXNjcmlwdGlvbjogJ1BpcGVsaW5lIGRldGFpbHMnIH0sIDQwNDogeyBkZXNjcmlwdGlvbjogJ05vdCBmb3VuZCcgfSB9LFxuICB9KTtcblxuICByZWdpc3RyeS5yZWdpc3RlclBhdGgoe1xuICAgIG1ldGhvZDogJ2dldCcsXG4gICAgcGF0aDogJy9waXBlbGluZXMve2lkfS9zY29yZWNhcmQnLFxuICAgIHN1bW1hcnk6ICdHZXQgYSBwaXBlbGluZSBtYXR1cml0eSBzY29yZWNhcmQnLFxuICAgIGRlc2NyaXB0aW9uOiAnUGVyLXBpcGVsaW5lIG1hdHVyaXR5IHNjb3JlY2FyZCBibGVuZGluZyBjb21wbGlhbmNlIHBvc3R1cmUgd2l0aCBET1JBIHBlcmZvcm1hbmNlIGJhbmRzIGludG8gYSAw4oCTMTAwIHNjb3JlIGFuZCBsZXR0ZXIgZ3JhZGUuIFJlcXVpcmVzIHRoZSBgYWR2YW5jZWRfcmVwb3J0aW5nYCBmZWF0dXJlLicsXG4gICAgdGFncyxcbiAgICBzZWN1cml0eTogYXV0aCxcbiAgICByZXNwb25zZXM6IHsgMjAwOiB7IGRlc2NyaXB0aW9uOiAnU2NvcmVjYXJkJyB9LCA0MDM6IHsgZGVzY3JpcHRpb246ICdGZWF0dXJlIG5vdCBlbmFibGVkJyB9LCA0MDQ6IHsgZGVzY3JpcHRpb246ICdOb3QgZm91bmQnIH0gfSxcbiAgfSk7XG5cbiAgcmVnaXN0cnkucmVnaXN0ZXJQYXRoKHtcbiAgICBtZXRob2Q6ICdnZXQnLFxuICAgIHBhdGg6ICcvcGlwZWxpbmVzL3Njb3JlY2FyZCcsXG4gICAgc3VtbWFyeTogJ09yZy13aWRlIHNjb3JlY2FyZCByb2xsLXVwIChzb2Z0d2FyZS1oZWFsdGggbGVhZGVyYm9hcmQpJyxcbiAgICBkZXNjcmlwdGlvbjogJ0dyYWRlcyBldmVyeSBwaXBlbGluZSBpbiB0aGUgb3JnYW5pemF0aW9uIGFuZCByZXR1cm5zIGEgcmFua2VkIGxlYWRlcmJvYXJkIHBsdXMgYWdncmVnYXRlIHN0YXRzIChwaXBlbGluZSBjb3VudCwgYXZlcmFnZSBzY29yZSwgZ3JhZGUgZGlzdHJpYnV0aW9uKS4gQm91bmRlZCBwZXIgcmVxdWVzdC4gUmVxdWlyZXMgdGhlIGBhZHZhbmNlZF9yZXBvcnRpbmdgIGZlYXR1cmUuJyxcbiAgICB0YWdzLFxuICAgIHNlY3VyaXR5OiBhdXRoLFxuICAgIHJlc3BvbnNlczogeyAyMDA6IHsgZGVzY3JpcHRpb246ICdPcmctd2lkZSBzY29yZWNhcmQgcm9sbC11cCcgfSwgNDAzOiB7IGRlc2NyaXB0aW9uOiAnRmVhdHVyZSBub3QgZW5hYmxlZCcgfSB9LFxuICB9KTtcblxuICByZWdpc3RyeS5yZWdpc3RlclBhdGgoe1xuICAgIG1ldGhvZDogJ3Bvc3QnLFxuICAgIHBhdGg6ICcvcGlwZWxpbmVzJyxcbiAgICBzdW1tYXJ5OiAnQ3JlYXRlIGEgcGlwZWxpbmUnLFxuICAgIGRlc2NyaXB0aW9uOiAnQ3JlYXRlIGEgbmV3IHBpcGVsaW5lIGNvbmZpZ3VyYXRpb24uIENoZWNrcyBwaXBlbGluZSBxdW90YS4nLFxuICAgIHRhZ3MsXG4gICAgc2VjdXJpdHk6IGF1dGgsXG4gICAgcmVzcG9uc2VzOiB7IDIwMTogeyBkZXNjcmlwdGlvbjogJ1BpcGVsaW5lIGNyZWF0ZWQnIH0sIDQwMDogeyBkZXNjcmlwdGlvbjogJ1ZhbGlkYXRpb24gZXJyb3InIH0sIDQyOTogeyBkZXNjcmlwdGlvbjogJ1F1b3RhIGV4Y2VlZGVkJyB9IH0sXG4gIH0pO1xuXG4gIHJlZ2lzdHJ5LnJlZ2lzdGVyUGF0aCh7XG4gICAgbWV0aG9kOiAncHV0JyxcbiAgICBwYXRoOiAnL3BpcGVsaW5lcy97aWR9JyxcbiAgICBzdW1tYXJ5OiAnVXBkYXRlIGEgcGlwZWxpbmUnLFxuICAgIHRhZ3MsXG4gICAgc2VjdXJpdHk6IGF1dGgsXG4gICAgcmVzcG9uc2VzOiB7IDIwMDogeyBkZXNjcmlwdGlvbjogJ1BpcGVsaW5lIHVwZGF0ZWQnIH0sIDQwNDogeyBkZXNjcmlwdGlvbjogJ05vdCBmb3VuZCcgfSB9LFxuICB9KTtcblxuICByZWdpc3RyeS5yZWdpc3RlclBhdGgoe1xuICAgIG1ldGhvZDogJ2RlbGV0ZScsXG4gICAgcGF0aDogJy9waXBlbGluZXMve2lkfScsXG4gICAgc3VtbWFyeTogJ0RlbGV0ZSBhIHBpcGVsaW5lJyxcbiAgICBkZXNjcmlwdGlvbjogJ1NvZnQtZGVsZXRlIGEgcGlwZWxpbmUgYnkgc2V0dGluZyBpc0FjdGl2ZSB0byBmYWxzZS4nLFxuICAgIHRhZ3MsXG4gICAgc2VjdXJpdHk6IGF1dGgsXG4gICAgcmVzcG9uc2VzOiB7IDIwMDogeyBkZXNjcmlwdGlvbjogJ1BpcGVsaW5lIGRlbGV0ZWQnIH0sIDQwNDogeyBkZXNjcmlwdGlvbjogJ05vdCBmb3VuZCcgfSB9LFxuICB9KTtcblxuICByZWdpc3RyeS5yZWdpc3RlclBhdGgoe1xuICAgIG1ldGhvZDogJ2dldCcsXG4gICAgcGF0aDogJy9waXBlbGluZXMvcHJvdmlkZXJzJyxcbiAgICBzdW1tYXJ5OiAnTGlzdCBBSSBwcm92aWRlcnMnLFxuICAgIGRlc2NyaXB0aW9uOiAnTGlzdCBBSSBwcm92aWRlcnMgY29uZmlndXJlZCBmb3IgcGlwZWxpbmUgZ2VuZXJhdGlvbi4nLFxuICAgIHRhZ3MsXG4gICAgc2VjdXJpdHk6IGF1dGgsXG4gICAgcmVzcG9uc2VzOiB7IDIwMDogeyBkZXNjcmlwdGlvbjogJ0xpc3Qgb2YgYXZhaWxhYmxlIEFJIHByb3ZpZGVycyB3aXRoIG1vZGVscycgfSB9LFxuICB9KTtcblxuICByZWdpc3RyeS5yZWdpc3RlclBhdGgoe1xuICAgIG1ldGhvZDogJ3Bvc3QnLFxuICAgIHBhdGg6ICcvcGlwZWxpbmVzL2dlbmVyYXRlJyxcbiAgICBzdW1tYXJ5OiAnR2VuZXJhdGUgcGlwZWxpbmUgdmlhIEFJJyxcbiAgICBkZXNjcmlwdGlvbjogJ0dlbmVyYXRlIGEgQnVpbGRlclByb3BzIGNvbmZpZ3VyYXRpb24gZnJvbSBhIG5hdHVyYWwgbGFuZ3VhZ2UgcHJvbXB0LiBSZXR1cm5zIHRoZSBjb21wbGV0ZSByZXN1bHQgd2hlbiBkb25lLicsXG4gICAgdGFncyxcbiAgICBzZWN1cml0eTogYXV0aCxcbiAgICByZXNwb25zZXM6IHsgMjAwOiB7IGRlc2NyaXB0aW9uOiAnR2VuZXJhdGVkIHBpcGVsaW5lIGNvbmZpZ3VyYXRpb24nIH0sIDQwMDogeyBkZXNjcmlwdGlvbjogJ1ZhbGlkYXRpb24gZXJyb3InIH0gfSxcbiAgfSk7XG5cbiAgcmVnaXN0cnkucmVnaXN0ZXJQYXRoKHtcbiAgICBtZXRob2Q6ICdwb3N0JyxcbiAgICBwYXRoOiAnL3BpcGVsaW5lcy9nZW5lcmF0ZS9zdHJlYW0nLFxuICAgIHN1bW1hcnk6ICdTdHJlYW0gcGlwZWxpbmUgZ2VuZXJhdGlvbiB2aWEgQUknLFxuICAgIGRlc2NyaXB0aW9uOiAnR2VuZXJhdGUgYSBCdWlsZGVyUHJvcHMgY29uZmlndXJhdGlvbiBmcm9tIGEgbmF0dXJhbCBsYW5ndWFnZSBwcm9tcHQuIFN0cmVhbXMgcGFydGlhbCByZXN1bHRzIGFzIFNTRSBldmVudHMuJyxcbiAgICB0YWdzLFxuICAgIHNlY3VyaXR5OiBhdXRoLFxuICAgIHJlc3BvbnNlczogeyAyMDA6IHsgZGVzY3JpcHRpb246ICdTU0UgZXZlbnQgc3RyZWFtIG9mIHBhcnRpYWwgcGlwZWxpbmUgb2JqZWN0cycgfSwgNDAwOiB7IGRlc2NyaXB0aW9uOiAnVmFsaWRhdGlvbiBlcnJvcicgfSB9LFxuICB9KTtcbn1cbiJdfQ==
@@ -0,0 +1 @@
1
+ export declare function registerPipelineTemplateRoutes(): void;
@@ -0,0 +1,61 @@
1
+ // Copyright 2026 Pipeline Builder Contributors
2
+ // SPDX-License-Identifier: Apache-2.0
3
+ import { registry } from '../registry.js';
4
+ const tags = ['Pipeline Templates'];
5
+ const auth = [{ bearerAuth: [] }];
6
+ export function registerPipelineTemplateRoutes() {
7
+ registry.registerPath({
8
+ method: 'get',
9
+ path: '/pipeline-templates',
10
+ summary: 'List pipeline templates',
11
+ description: 'List golden-path pipeline templates with pagination and filtering. Visibility is a three-rung ladder: `private` (author only), `org` (everyone in the owning org), `public` (the org, its teams, and — for the system org — every org). Optional `visibility` query param narrows within what the caller can already see.',
12
+ tags,
13
+ security: auth,
14
+ responses: { 200: { description: 'Paginated list of templates' }, 401: { description: 'Unauthorized' } },
15
+ });
16
+ registry.registerPath({
17
+ method: 'get',
18
+ path: '/pipeline-templates/{id}',
19
+ summary: 'Get a pipeline template by ID',
20
+ tags,
21
+ security: auth,
22
+ responses: { 200: { description: 'Template details' }, 404: { description: 'Not found' } },
23
+ });
24
+ registry.registerPath({
25
+ method: 'post',
26
+ path: '/pipeline-templates/{id}/instantiate',
27
+ summary: 'Instantiate a template',
28
+ description: 'Render a template into a concrete pipeline `props` by supplying its declared inputs. The returned props are submitted through the normal pipeline-create endpoint (compliance + quota apply there).',
29
+ tags,
30
+ security: auth,
31
+ responses: { 200: { description: 'Resolved pipeline props' }, 400: { description: 'Invalid inputs' }, 404: { description: 'Not found' } },
32
+ });
33
+ registry.registerPath({
34
+ method: 'post',
35
+ path: '/pipeline-templates',
36
+ summary: 'Create a pipeline template',
37
+ description: 'Author a golden-path template. Requires `templates:write`; `visibility: public` additionally requires `templates:publish` (a caller without it is clamped to `org`). Defaults to `private` — a personal draft only the author can see.',
38
+ tags,
39
+ security: auth,
40
+ responses: { 201: { description: 'Template created' }, 400: { description: 'Validation error' }, 403: { description: 'Forbidden' }, 409: { description: 'A template with that name already exists in the organization' } },
41
+ });
42
+ registry.registerPath({
43
+ method: 'put',
44
+ path: '/pipeline-templates/{id}',
45
+ summary: 'Update a pipeline template',
46
+ description: 'Requires `templates:write`, plus `templates:publish` for a `public` template and authorship for a `private` one.',
47
+ tags,
48
+ security: auth,
49
+ responses: { 200: { description: 'Template updated' }, 403: { description: 'Forbidden' }, 404: { description: 'Not found' } },
50
+ });
51
+ registry.registerPath({
52
+ method: 'delete',
53
+ path: '/pipeline-templates/{id}',
54
+ summary: 'Delete a pipeline template',
55
+ description: 'Same authority as update: `templates:write`, plus `templates:publish` for a `public` template and authorship for a `private` one.',
56
+ tags,
57
+ security: auth,
58
+ responses: { 200: { description: 'Template deleted' }, 403: { description: 'Forbidden' }, 404: { description: 'Not found' } },
59
+ });
60
+ }
61
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlwZWxpbmUtdGVtcGxhdGUtcm91dGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL29wZW5hcGkvcm91dGVzL3BpcGVsaW5lLXRlbXBsYXRlLXJvdXRlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUxQyxNQUFNLElBQUksR0FBRyxDQUFDLG9CQUFvQixDQUFDLENBQUM7QUFDcEMsTUFBTSxJQUFJLEdBQUcsQ0FBQyxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBRWxDLE1BQU0sVUFBVSw4QkFBOEI7SUFDNUMsUUFBUSxDQUFDLFlBQVksQ0FBQztRQUNwQixNQUFNLEVBQUUsS0FBSztRQUNiLElBQUksRUFBRSxxQkFBcUI7UUFDM0IsT0FBTyxFQUFFLHlCQUF5QjtRQUNsQyxXQUFXLEVBQUUsMlRBQTJUO1FBQ3hVLElBQUk7UUFDSixRQUFRLEVBQUUsSUFBSTtRQUNkLFNBQVMsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLFdBQVcsRUFBRSw2QkFBNkIsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsRUFBRTtLQUN6RyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsWUFBWSxDQUFDO1FBQ3BCLE1BQU0sRUFBRSxLQUFLO1FBQ2IsSUFBSSxFQUFFLDBCQUEwQjtRQUNoQyxPQUFPLEVBQUUsK0JBQStCO1FBQ3hDLElBQUk7UUFDSixRQUFRLEVBQUUsSUFBSTtRQUNkLFNBQVMsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLFdBQVcsRUFBRSxrQkFBa0IsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsRUFBRTtLQUMzRixDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsWUFBWSxDQUFDO1FBQ3BCLE1BQU0sRUFBRSxNQUFNO1FBQ2QsSUFBSSxFQUFFLHNDQUFzQztRQUM1QyxPQUFPLEVBQUUsd0JBQXdCO1FBQ2pDLFdBQVcsRUFBRSxxTUFBcU07UUFDbE4sSUFBSTtRQUNKLFFBQVEsRUFBRSxJQUFJO1FBQ2QsU0FBUyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsV0FBVyxFQUFFLHlCQUF5QixFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxFQUFFO0tBQzFJLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxZQUFZLENBQUM7UUFDcEIsTUFBTSxFQUFFLE1BQU07UUFDZCxJQUFJLEVBQUUscUJBQXFCO1FBQzNCLE9BQU8sRUFBRSw0QkFBNEI7UUFDckMsV0FBVyxFQUFFLHdPQUF3TztRQUNyUCxJQUFJO1FBQ0osUUFBUSxFQUFFLElBQUk7UUFDZCxTQUFTLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxXQUFXLEVBQUUsa0JBQWtCLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxXQUFXLEVBQUUsa0JBQWtCLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsV0FBVyxFQUFFLDhEQUE4RCxFQUFFLEVBQUU7S0FDM04sQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLFlBQVksQ0FBQztRQUNwQixNQUFNLEVBQUUsS0FBSztRQUNiLElBQUksRUFBRSwwQkFBMEI7UUFDaEMsT0FBTyxFQUFFLDRCQUE0QjtRQUNyQyxXQUFXLEVBQUUsa0hBQWtIO1FBQy9ILElBQUk7UUFDSixRQUFRLEVBQUUsSUFBSTtRQUNkLFNBQVMsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLFdBQVcsRUFBRSxrQkFBa0IsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLEVBQUU7S0FDOUgsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLFlBQVksQ0FBQztRQUNwQixNQUFNLEVBQUUsUUFBUTtRQUNoQixJQUFJLEVBQUUsMEJBQTBCO1FBQ2hDLE9BQU8sRUFBRSw0QkFBNEI7UUFDckMsV0FBVyxFQUFFLG1JQUFtSTtRQUNoSixJQUFJO1FBQ0osUUFBUSxFQUFFLElBQUk7UUFDZCxTQUFTLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxXQUFXLEVBQUUsa0JBQWtCLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxFQUFFO0tBQzlILENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHsgcmVnaXN0cnkgfSBmcm9tICcuLi9yZWdpc3RyeS5qcyc7XG5cbmNvbnN0IHRhZ3MgPSBbJ1BpcGVsaW5lIFRlbXBsYXRlcyddO1xuY29uc3QgYXV0aCA9IFt7IGJlYXJlckF1dGg6IFtdIH1dO1xuXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJQaXBlbGluZVRlbXBsYXRlUm91dGVzKCk6IHZvaWQge1xuICByZWdpc3RyeS5yZWdpc3RlclBhdGgoe1xuICAgIG1ldGhvZDogJ2dldCcsXG4gICAgcGF0aDogJy9waXBlbGluZS10ZW1wbGF0ZXMnLFxuICAgIHN1bW1hcnk6ICdMaXN0IHBpcGVsaW5lIHRlbXBsYXRlcycsXG4gICAgZGVzY3JpcHRpb246ICdMaXN0IGdvbGRlbi1wYXRoIHBpcGVsaW5lIHRlbXBsYXRlcyB3aXRoIHBhZ2luYXRpb24gYW5kIGZpbHRlcmluZy4gVmlzaWJpbGl0eSBpcyBhIHRocmVlLXJ1bmcgbGFkZGVyOiBgcHJpdmF0ZWAgKGF1dGhvciBvbmx5KSwgYG9yZ2AgKGV2ZXJ5b25lIGluIHRoZSBvd25pbmcgb3JnKSwgYHB1YmxpY2AgKHRoZSBvcmcsIGl0cyB0ZWFtcywgYW5kIOKAlCBmb3IgdGhlIHN5c3RlbSBvcmcg4oCUIGV2ZXJ5IG9yZykuIE9wdGlvbmFsIGB2aXNpYmlsaXR5YCBxdWVyeSBwYXJhbSBuYXJyb3dzIHdpdGhpbiB3aGF0IHRoZSBjYWxsZXIgY2FuIGFscmVhZHkgc2VlLicsXG4gICAgdGFncyxcbiAgICBzZWN1cml0eTogYXV0aCxcbiAgICByZXNwb25zZXM6IHsgMjAwOiB7IGRlc2NyaXB0aW9uOiAnUGFnaW5hdGVkIGxpc3Qgb2YgdGVtcGxhdGVzJyB9LCA0MDE6IHsgZGVzY3JpcHRpb246ICdVbmF1dGhvcml6ZWQnIH0gfSxcbiAgfSk7XG5cbiAgcmVnaXN0cnkucmVnaXN0ZXJQYXRoKHtcbiAgICBtZXRob2Q6ICdnZXQnLFxuICAgIHBhdGg6ICcvcGlwZWxpbmUtdGVtcGxhdGVzL3tpZH0nLFxuICAgIHN1bW1hcnk6ICdHZXQgYSBwaXBlbGluZSB0ZW1wbGF0ZSBieSBJRCcsXG4gICAgdGFncyxcbiAgICBzZWN1cml0eTogYXV0aCxcbiAgICByZXNwb25zZXM6IHsgMjAwOiB7IGRlc2NyaXB0aW9uOiAnVGVtcGxhdGUgZGV0YWlscycgfSwgNDA0OiB7IGRlc2NyaXB0aW9uOiAnTm90IGZvdW5kJyB9IH0sXG4gIH0pO1xuXG4gIHJlZ2lzdHJ5LnJlZ2lzdGVyUGF0aCh7XG4gICAgbWV0aG9kOiAncG9zdCcsXG4gICAgcGF0aDogJy9waXBlbGluZS10ZW1wbGF0ZXMve2lkfS9pbnN0YW50aWF0ZScsXG4gICAgc3VtbWFyeTogJ0luc3RhbnRpYXRlIGEgdGVtcGxhdGUnLFxuICAgIGRlc2NyaXB0aW9uOiAnUmVuZGVyIGEgdGVtcGxhdGUgaW50byBhIGNvbmNyZXRlIHBpcGVsaW5lIGBwcm9wc2AgYnkgc3VwcGx5aW5nIGl0cyBkZWNsYXJlZCBpbnB1dHMuIFRoZSByZXR1cm5lZCBwcm9wcyBhcmUgc3VibWl0dGVkIHRocm91Z2ggdGhlIG5vcm1hbCBwaXBlbGluZS1jcmVhdGUgZW5kcG9pbnQgKGNvbXBsaWFuY2UgKyBxdW90YSBhcHBseSB0aGVyZSkuJyxcbiAgICB0YWdzLFxuICAgIHNlY3VyaXR5OiBhdXRoLFxuICAgIHJlc3BvbnNlczogeyAyMDA6IHsgZGVzY3JpcHRpb246ICdSZXNvbHZlZCBwaXBlbGluZSBwcm9wcycgfSwgNDAwOiB7IGRlc2NyaXB0aW9uOiAnSW52YWxpZCBpbnB1dHMnIH0sIDQwNDogeyBkZXNjcmlwdGlvbjogJ05vdCBmb3VuZCcgfSB9LFxuICB9KTtcblxuICByZWdpc3RyeS5yZWdpc3RlclBhdGgoe1xuICAgIG1ldGhvZDogJ3Bvc3QnLFxuICAgIHBhdGg6ICcvcGlwZWxpbmUtdGVtcGxhdGVzJyxcbiAgICBzdW1tYXJ5OiAnQ3JlYXRlIGEgcGlwZWxpbmUgdGVtcGxhdGUnLFxuICAgIGRlc2NyaXB0aW9uOiAnQXV0aG9yIGEgZ29sZGVuLXBhdGggdGVtcGxhdGUuIFJlcXVpcmVzIGB0ZW1wbGF0ZXM6d3JpdGVgOyBgdmlzaWJpbGl0eTogcHVibGljYCBhZGRpdGlvbmFsbHkgcmVxdWlyZXMgYHRlbXBsYXRlczpwdWJsaXNoYCAoYSBjYWxsZXIgd2l0aG91dCBpdCBpcyBjbGFtcGVkIHRvIGBvcmdgKS4gRGVmYXVsdHMgdG8gYHByaXZhdGVgIOKAlCBhIHBlcnNvbmFsIGRyYWZ0IG9ubHkgdGhlIGF1dGhvciBjYW4gc2VlLicsXG4gICAgdGFncyxcbiAgICBzZWN1cml0eTogYXV0aCxcbiAgICByZXNwb25zZXM6IHsgMjAxOiB7IGRlc2NyaXB0aW9uOiAnVGVtcGxhdGUgY3JlYXRlZCcgfSwgNDAwOiB7IGRlc2NyaXB0aW9uOiAnVmFsaWRhdGlvbiBlcnJvcicgfSwgNDAzOiB7IGRlc2NyaXB0aW9uOiAnRm9yYmlkZGVuJyB9LCA0MDk6IHsgZGVzY3JpcHRpb246ICdBIHRlbXBsYXRlIHdpdGggdGhhdCBuYW1lIGFscmVhZHkgZXhpc3RzIGluIHRoZSBvcmdhbml6YXRpb24nIH0gfSxcbiAgfSk7XG5cbiAgcmVnaXN0cnkucmVnaXN0ZXJQYXRoKHtcbiAgICBtZXRob2Q6ICdwdXQnLFxuICAgIHBhdGg6ICcvcGlwZWxpbmUtdGVtcGxhdGVzL3tpZH0nLFxuICAgIHN1bW1hcnk6ICdVcGRhdGUgYSBwaXBlbGluZSB0ZW1wbGF0ZScsXG4gICAgZGVzY3JpcHRpb246ICdSZXF1aXJlcyBgdGVtcGxhdGVzOndyaXRlYCwgcGx1cyBgdGVtcGxhdGVzOnB1Ymxpc2hgIGZvciBhIGBwdWJsaWNgIHRlbXBsYXRlIGFuZCBhdXRob3JzaGlwIGZvciBhIGBwcml2YXRlYCBvbmUuJyxcbiAgICB0YWdzLFxuICAgIHNlY3VyaXR5OiBhdXRoLFxuICAgIHJlc3BvbnNlczogeyAyMDA6IHsgZGVzY3JpcHRpb246ICdUZW1wbGF0ZSB1cGRhdGVkJyB9LCA0MDM6IHsgZGVzY3JpcHRpb246ICdGb3JiaWRkZW4nIH0sIDQwNDogeyBkZXNjcmlwdGlvbjogJ05vdCBmb3VuZCcgfSB9LFxuICB9KTtcblxuICByZWdpc3RyeS5yZWdpc3RlclBhdGgoe1xuICAgIG1ldGhvZDogJ2RlbGV0ZScsXG4gICAgcGF0aDogJy9waXBlbGluZS10ZW1wbGF0ZXMve2lkfScsXG4gICAgc3VtbWFyeTogJ0RlbGV0ZSBhIHBpcGVsaW5lIHRlbXBsYXRlJyxcbiAgICBkZXNjcmlwdGlvbjogJ1NhbWUgYXV0aG9yaXR5IGFzIHVwZGF0ZTogYHRlbXBsYXRlczp3cml0ZWAsIHBsdXMgYHRlbXBsYXRlczpwdWJsaXNoYCBmb3IgYSBgcHVibGljYCB0ZW1wbGF0ZSBhbmQgYXV0aG9yc2hpcCBmb3IgYSBgcHJpdmF0ZWAgb25lLicsXG4gICAgdGFncyxcbiAgICBzZWN1cml0eTogYXV0aCxcbiAgICByZXNwb25zZXM6IHsgMjAwOiB7IGRlc2NyaXB0aW9uOiAnVGVtcGxhdGUgZGVsZXRlZCcgfSwgNDAzOiB7IGRlc2NyaXB0aW9uOiAnRm9yYmlkZGVuJyB9LCA0MDQ6IHsgZGVzY3JpcHRpb246ICdOb3QgZm91bmQnIH0gfSxcbiAgfSk7XG59XG4iXX0=
@@ -0,0 +1 @@
1
+ export declare function registerPluginRoutes(): void;
@@ -0,0 +1,96 @@
1
+ // Copyright 2026 Pipeline Builder Contributors
2
+ // SPDX-License-Identifier: Apache-2.0
3
+ import { registry } from '../registry.js';
4
+ const tags = ['Plugins'];
5
+ const auth = [{ bearerAuth: [] }];
6
+ export function registerPluginRoutes() {
7
+ registry.registerPath({
8
+ method: 'get',
9
+ path: '/plugins',
10
+ summary: 'List plugins',
11
+ description: 'List plugins with pagination, filtering, and sorting.',
12
+ tags,
13
+ security: auth,
14
+ responses: { 200: { description: 'Paginated list of plugins' }, 401: { description: 'Unauthorized' } },
15
+ });
16
+ registry.registerPath({
17
+ method: 'get',
18
+ path: '/plugins/find',
19
+ summary: 'Find a single plugin',
20
+ description: 'Find a single plugin matching the query filters.',
21
+ tags,
22
+ security: auth,
23
+ responses: { 200: { description: 'Plugin found' }, 404: { description: 'Not found' } },
24
+ });
25
+ registry.registerPath({
26
+ method: 'get',
27
+ path: '/plugins/{id}',
28
+ summary: 'Get plugin by ID',
29
+ tags,
30
+ security: auth,
31
+ responses: { 200: { description: 'Plugin details' }, 404: { description: 'Not found' } },
32
+ });
33
+ registry.registerPath({
34
+ method: 'post',
35
+ path: '/plugins',
36
+ summary: 'Upload a plugin',
37
+ description: 'Upload a plugin ZIP file with spec. Builds Docker image and saves to database.',
38
+ tags,
39
+ security: auth,
40
+ responses: { 202: { description: 'Plugin build queued' }, 400: { description: 'Validation error' }, 429: { description: 'Quota exceeded' } },
41
+ });
42
+ registry.registerPath({
43
+ method: 'put',
44
+ path: '/plugins/{id}',
45
+ summary: 'Update a plugin',
46
+ tags,
47
+ security: auth,
48
+ responses: { 200: { description: 'Plugin updated' }, 404: { description: 'Not found' } },
49
+ });
50
+ registry.registerPath({
51
+ method: 'delete',
52
+ path: '/plugins/{id}',
53
+ summary: 'Delete a plugin',
54
+ description: 'Soft-delete a plugin by setting isActive to false.',
55
+ tags,
56
+ security: auth,
57
+ responses: { 200: { description: 'Plugin deleted' }, 404: { description: 'Not found' } },
58
+ });
59
+ registry.registerPath({
60
+ method: 'get',
61
+ path: '/plugins/providers',
62
+ summary: 'List AI providers',
63
+ description: 'List AI providers configured for plugin generation.',
64
+ tags,
65
+ security: auth,
66
+ responses: { 200: { description: 'List of available AI providers with models' } },
67
+ });
68
+ registry.registerPath({
69
+ method: 'post',
70
+ path: '/plugins/generate',
71
+ summary: 'Generate plugin via AI',
72
+ description: 'Generate a plugin configuration and Dockerfile from a natural language prompt.',
73
+ tags,
74
+ security: auth,
75
+ responses: { 200: { description: 'Generated plugin configuration and Dockerfile' }, 400: { description: 'Validation error' } },
76
+ });
77
+ registry.registerPath({
78
+ method: 'post',
79
+ path: '/plugins/generate/stream',
80
+ summary: 'Stream plugin generation via AI',
81
+ description: 'Generate plugin configuration from a natural language prompt. Streams partial results as SSE events.',
82
+ tags,
83
+ security: auth,
84
+ responses: { 200: { description: 'SSE event stream of partial plugin objects' }, 400: { description: 'Validation error' } },
85
+ });
86
+ registry.registerPath({
87
+ method: 'post',
88
+ path: '/plugins/deploy-generated',
89
+ summary: 'Deploy AI-generated plugin',
90
+ description: 'Build Docker image from AI-generated Dockerfile and save plugin to database. Requires admin.',
91
+ tags,
92
+ security: auth,
93
+ responses: { 202: { description: 'Plugin build queued' }, 400: { description: 'Validation error' }, 403: { description: 'Admin required' }, 429: { description: 'Quota exceeded' } },
94
+ });
95
+ }
96
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLXJvdXRlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9vcGVuYXBpL3JvdXRlcy9wbHVnaW4tcm91dGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTFDLE1BQU0sSUFBSSxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDekIsTUFBTSxJQUFJLEdBQUcsQ0FBQyxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBRWxDLE1BQU0sVUFBVSxvQkFBb0I7SUFDbEMsUUFBUSxDQUFDLFlBQVksQ0FBQztRQUNwQixNQUFNLEVBQUUsS0FBSztRQUNiLElBQUksRUFBRSxVQUFVO1FBQ2hCLE9BQU8sRUFBRSxjQUFjO1FBQ3ZCLFdBQVcsRUFBRSx1REFBdUQ7UUFDcEUsSUFBSTtRQUNKLFFBQVEsRUFBRSxJQUFJO1FBQ2QsU0FBUyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsV0FBVyxFQUFFLDJCQUEyQixFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxFQUFFO0tBQ3ZHLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxZQUFZLENBQUM7UUFDcEIsTUFBTSxFQUFFLEtBQUs7UUFDYixJQUFJLEVBQUUsZUFBZTtRQUNyQixPQUFPLEVBQUUsc0JBQXNCO1FBQy9CLFdBQVcsRUFBRSxrREFBa0Q7UUFDL0QsSUFBSTtRQUNKLFFBQVEsRUFBRSxJQUFJO1FBQ2QsU0FBUyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsRUFBRTtLQUN2RixDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsWUFBWSxDQUFDO1FBQ3BCLE1BQU0sRUFBRSxLQUFLO1FBQ2Is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LEVBQUUsMkJBQTJCO1FBQ2pDLE9BQU8sRUFBRSw0QkFBNEI7UUFDckMsV0FBVyxFQUFFLDhGQUE4RjtRQUMzRyxJQUFJO1FBQ0osUUFBUSxFQUFFLElBQUk7UUFDZCxTQUFTLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxXQUFXLEVBQUUscUJBQXFCLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxXQUFXLEVBQUUsa0JBQWtCLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRTtLQUNyTCxDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB7IHJlZ2lzdHJ5IH0gZnJvbSAnLi4vcmVnaXN0cnkuanMnO1xuXG5jb25zdCB0YWdzID0gWydQbHVnaW5zJ107XG5jb25zdCBhdXRoID0gW3sgYmVhcmVyQXV0aDogW10gfV07XG5cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RlclBsdWdpblJvdXRlcygpOiB2b2lkIHtcbiAgcmVnaXN0cnkucmVnaXN0ZXJQYXRoKHtcbiAgICBtZXRob2Q6ICdnZXQnLFxuICAgIHBhdGg6ICcvcGx1Z2lucycsXG4gICAgc3VtbWFyeTogJ0xpc3QgcGx1Z2lucycsXG4gICAgZGVzY3JpcHRpb246ICdMaXN0IHBsdWdpbnMgd2l0aCBwYWdpbmF0aW9uLCBmaWx0ZXJpbmcsIGFuZCBzb3J0aW5nLicsXG4gICAgdGFncyxcbiAgICBzZWN1cml0eTogYXV0aCxcbiAgICByZXNwb25zZXM6IHsgMjAwOiB7IGRlc2NyaXB0aW9uOiAnUGFnaW5hdGVkIGxpc3Qgb2YgcGx1Z2lucycgfSwgNDAxOiB7IGRlc2NyaXB0aW9uOiAnVW5hdXRob3JpemVkJyB9IH0sXG4gIH0pO1xuXG4gIHJlZ2lzdHJ5LnJlZ2lzdGVyUGF0aCh7XG4gICAgbWV0aG9kOiAnZ2V0JyxcbiAgICBwYXRoOiAnL3BsdWdpbnMvZmluZCcsXG4gICAgc3VtbWFyeTogJ0ZpbmQgYSBzaW5nbGUgcGx1Z2luJyxcbiAgICBkZXNjcmlwdGlvbjogJ0ZpbmQgYSBzaW5nbGUgcGx1Z2luIG1hdGNoaW5nIHRoZSBxdWVyeSBmaWx0ZXJzLicsXG4gICAgdGFncyxcbiAgICBzZWN1cml0eTogYXV0aCxcbiAgICByZXNwb25zZXM6IHsgMjAwOiB7IGRlc2NyaXB0aW9uOiAnUGx1Z2luIGZvdW5kJyB9LCA0MDQ6IHsgZGVzY3JpcHRpb246ICdOb3QgZm91bmQnIH0gfSxcbiAgfSk7XG5cbiAgcmVnaXN0cnkucmVnaXN0ZXJQYXRoKHtcbiAgICBtZXRob2Q6ICdnZXQnLFxuICAgIHBhdGg6ICcvcGx1Z2lucy97aWR9JyxcbiAgICBzdW1tYXJ5OiAnR2V0IHBsdWdpbiBieSBJRCcsXG4gICAgdGFncyxcbiAgICBzZWN1cml0eTogYXV0aCxcbiAgICByZXNwb25zZXM6IHsgMjAwOiB7IGRlc2NyaXB0aW9uOiAnUGx1Z2luIGRldGFpbHMnIH0sIDQwNDogeyBkZXNjcmlwdGlvbjogJ05vdCBmb3VuZCcgfSB9LFxuICB9KTtcblxuICByZWdpc3RyeS5yZWdpc3RlclBhdGgoe1xuICAgIG1ldGhvZDogJ3Bvc3QnLFxuICAgIHBhdGg6ICcvcGx1Z2lucycsXG4gICAgc3VtbWFyeTogJ1VwbG9hZCBhIHBsdWdpbicsXG4gICAgZGVzY3JpcHRpb246ICdVcGxvYWQgYSBwbHVnaW4gWklQIGZpbGUgd2l0aCBzcGVjLiBCdWlsZHMgRG9ja2VyIGltYWdlIGFuZCBzYXZlcyB0byBkYXRhYmFzZS4nLFxuICAgIHRhZ3MsXG4gICAgc2VjdXJpdHk6IGF1dGgsXG4gICAgcmVzcG9uc2VzOiB7IDIwMjogeyBkZXNjcmlwdGlvbjogJ1BsdWdpbiBidWlsZCBxdWV1ZWQnIH0sIDQwMDogeyBkZXNjcmlwdGlvbjogJ1ZhbGlkYXRpb24gZXJyb3InIH0sIDQyOTogeyBkZXNjcmlwdGlvbjogJ1F1b3RhIGV4Y2VlZGVkJyB9IH0sXG4gIH0pO1xuXG4gIHJlZ2lzdHJ5LnJlZ2lzdGVyUGF0aCh7XG4gICAgbWV0aG9kOiAncHV0JyxcbiAgICBwYXRoOiAnL3BsdWdpbnMve2lkfScsXG4gICAgc3VtbWFyeTogJ1VwZGF0ZSBhIHBsdWdpbicsXG4gICAgdGFncyxcbiAgICBzZWN1cml0eTogYXV0aCxcbiAgICByZXNwb25zZXM6IHsgMjAwOiB7IGRlc2NyaXB0aW9uOiAnUGx1Z2luIHVwZGF0ZWQnIH0sIDQwNDogeyBkZXNjcmlwdGlvbjogJ05vdCBmb3VuZCcgfSB9LFxuICB9KTtcblxuICByZWdpc3RyeS5yZWdpc3RlclBhdGgoe1xuICAgIG1ldGhvZDogJ2RlbGV0ZScsXG4gICAgcGF0aDogJy9wbHVnaW5zL3tpZH0nLFxuICAgIHN1bW1hcnk6ICdEZWxldGUgYSBwbHVnaW4nLFxuICAgIGRlc2NyaXB0aW9uOiAnU29mdC1kZWxldGUgYSBwbHVnaW4gYnkgc2V0dGluZyBpc0FjdGl2ZSB0byBmYWxzZS4nLFxuICAgIHRhZ3MsXG4gICAgc2VjdXJpdHk6IGF1dGgsXG4gICAgcmVzcG9uc2VzOiB7IDIwMDogeyBkZXNjcmlwdGlvbjogJ1BsdWdpbiBkZWxldGVkJyB9LCA0MDQ6IHsgZGVzY3JpcHRpb246ICdOb3QgZm91bmQnIH0gfSxcbiAgfSk7XG5cbiAgcmVnaXN0cnkucmVnaXN0ZXJQYXRoKHtcbiAgICBtZXRob2Q6ICdnZXQnLFxuICAgIHBhdGg6ICcvcGx1Z2lucy9wcm92aWRlcnMnLFxuICAgIHN1bW1hcnk6ICdMaXN0IEFJIHByb3ZpZGVycycsXG4gICAgZGVzY3JpcHRpb246ICdMaXN0IEFJIHByb3ZpZGVycyBjb25maWd1cmVkIGZvciBwbHVnaW4gZ2VuZXJhdGlvbi4nLFxuICAgIHRhZ3MsXG4gICAgc2VjdXJpdHk6IGF1dGgsXG4gICAgcmVzcG9uc2VzOiB7IDIwMDogeyBkZXNjcmlwdGlvbjogJ0xpc3Qgb2YgYXZhaWxhYmxlIEFJIHByb3ZpZGVycyB3aXRoIG1vZGVscycgfSB9LFxuICB9KTtcblxuICByZWdpc3RyeS5yZWdpc3RlclBhdGgoe1xuICAgIG1ldGhvZDogJ3Bvc3QnLFxuICAgIHBhdGg6ICcvcGx1Z2lucy9nZW5lcmF0ZScsXG4gICAgc3VtbWFyeTogJ0dlbmVyYXRlIHBsdWdpbiB2aWEgQUknLFxuICAgIGRlc2NyaXB0aW9uOiAnR2VuZXJhdGUgYSBwbHVnaW4gY29uZmlndXJhdGlvbiBhbmQgRG9ja2VyZmlsZSBmcm9tIGEgbmF0dXJhbCBsYW5ndWFnZSBwcm9tcHQuJyxcbiAgICB0YWdzLFxuICAgIHNlY3VyaXR5OiBhdXRoLFxuICAgIHJlc3BvbnNlczogeyAyMDA6IHsgZGVzY3JpcHRpb246ICdHZW5lcmF0ZWQgcGx1Z2luIGNvbmZpZ3VyYXRpb24gYW5kIERvY2tlcmZpbGUnIH0sIDQwMDogeyBkZXNjcmlwdGlvbjogJ1ZhbGlkYXRpb24gZXJyb3InIH0gfSxcbiAgfSk7XG5cbiAgcmVnaXN0cnkucmVnaXN0ZXJQYXRoKHtcbiAgICBtZXRob2Q6ICdwb3N0JyxcbiAgICBwYXRoOiAnL3BsdWdpbnMvZ2VuZXJhdGUvc3RyZWFtJyxcbiAgICBzdW1tYXJ5OiAnU3RyZWFtIHBsdWdpbiBnZW5lcmF0aW9uIHZpYSBBSScsXG4gICAgZGVzY3JpcHRpb246ICdHZW5lcmF0ZSBwbHVnaW4gY29uZmlndXJhdGlvbiBmcm9tIGEgbmF0dXJhbCBsYW5ndWFnZSBwcm9tcHQuIFN0cmVhbXMgcGFydGlhbCByZXN1bHRzIGFzIFNTRSBldmVudHMuJyxcbiAgICB0YWdzLFxuICAgIHNlY3VyaXR5OiBhdXRoLFxuICAgIHJlc3BvbnNlczogeyAyMDA6IHsgZGVzY3JpcHRpb246ICdTU0UgZXZlbnQgc3RyZWFtIG9mIHBhcnRpYWwgcGx1Z2luIG9iamVjdHMnIH0sIDQwMDogeyBkZXNjcmlwdGlvbjogJ1ZhbGlkYXRpb24gZXJyb3InIH0gfSxcbiAgfSk7XG5cbiAgcmVnaXN0cnkucmVnaXN0ZXJQYXRoKHtcbiAgICBtZXRob2Q6ICdwb3N0JyxcbiAgICBwYXRoOiAnL3BsdWdpbnMvZGVwbG95LWdlbmVyYXRlZCcsXG4gICAgc3VtbWFyeTogJ0RlcGxveSBBSS1nZW5lcmF0ZWQgcGx1Z2luJyxcbiAgICBkZXNjcmlwdGlvbjogJ0J1aWxkIERvY2tlciBpbWFnZSBmcm9tIEFJLWdlbmVyYXRlZCBEb2NrZXJmaWxlIGFuZCBzYXZlIHBsdWdpbiB0byBkYXRhYmFzZS4gUmVxdWlyZXMgYWRtaW4uJyxcbiAgICB0YWdzLFxuICAgIHNlY3VyaXR5OiBhdXRoLFxuICAgIHJlc3BvbnNlczogeyAyMDI6IHsgZGVzY3JpcHRpb246ICdQbHVnaW4gYnVpbGQgcXVldWVkJyB9LCA0MDA6IHsgZGVzY3JpcHRpb246ICdWYWxpZGF0aW9uIGVycm9yJyB9LCA0MDM6IHsgZGVzY3JpcHRpb246ICdBZG1pbiByZXF1aXJlZCcgfSwgNDI5OiB7IGRlc2NyaXB0aW9uOiAnUXVvdGEgZXhjZWVkZWQnIH0gfSxcbiAgfSk7XG59XG4iXX0=
@@ -0,0 +1 @@
1
+ export declare function registerQuotaRoutes(): void;