@pipeline-builder/api-core 3.1.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 (122) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +51 -0
  3. package/lib/constants/ai-providers.d.ts +41 -0
  4. package/lib/constants/ai-providers.js +88 -0
  5. package/lib/constants/http-status.d.ts +24 -0
  6. package/lib/constants/http-status.js +29 -0
  7. package/lib/constants/index.d.ts +3 -0
  8. package/lib/constants/index.js +22 -0
  9. package/lib/constants/time.d.ts +10 -0
  10. package/lib/constants/time.js +16 -0
  11. package/lib/errors/app-errors.d.ts +30 -0
  12. package/lib/errors/app-errors.js +62 -0
  13. package/lib/errors/index.d.ts +1 -0
  14. package/lib/errors/index.js +20 -0
  15. package/lib/helpers/access-helpers.d.ts +40 -0
  16. package/lib/helpers/access-helpers.js +56 -0
  17. package/lib/helpers/crud-helpers.d.ts +16 -0
  18. package/lib/helpers/crud-helpers.js +34 -0
  19. package/lib/helpers/index.d.ts +4 -0
  20. package/lib/helpers/index.js +23 -0
  21. package/lib/helpers/mask-helpers.d.ts +33 -0
  22. package/lib/helpers/mask-helpers.js +54 -0
  23. package/lib/helpers/sse-helpers.d.ts +13 -0
  24. package/lib/helpers/sse-helpers.js +40 -0
  25. package/lib/index.d.ts +57 -0
  26. package/lib/index.js +86 -0
  27. package/lib/middleware/auth.d.ts +50 -0
  28. package/lib/middleware/auth.js +171 -0
  29. package/lib/middleware/index.d.ts +1 -0
  30. package/lib/middleware/index.js +20 -0
  31. package/lib/openapi/extend-zod.d.ts +1 -0
  32. package/lib/openapi/extend-zod.js +8 -0
  33. package/lib/openapi/index.d.ts +2 -0
  34. package/lib/openapi/index.js +10 -0
  35. package/lib/openapi/registry.d.ts +17 -0
  36. package/lib/openapi/registry.js +42 -0
  37. package/lib/openapi/routes/billing-routes.d.ts +1 -0
  38. package/lib/openapi/routes/billing-routes.js +69 -0
  39. package/lib/openapi/routes/index.d.ts +5 -0
  40. package/lib/openapi/routes/index.js +22 -0
  41. package/lib/openapi/routes/message-routes.d.ts +1 -0
  42. package/lib/openapi/routes/message-routes.js +108 -0
  43. package/lib/openapi/routes/pipeline-routes.d.ts +1 -0
  44. package/lib/openapi/routes/pipeline-routes.js +90 -0
  45. package/lib/openapi/routes/plugin-routes.d.ts +1 -0
  46. package/lib/openapi/routes/plugin-routes.js +99 -0
  47. package/lib/openapi/routes/quota-routes.d.ts +1 -0
  48. package/lib/openapi/routes/quota-routes.js +65 -0
  49. package/lib/openapi/schema-registry.d.ts +25 -0
  50. package/lib/openapi/schema-registry.js +95 -0
  51. package/lib/routes/health.d.ts +47 -0
  52. package/lib/routes/health.js +81 -0
  53. package/lib/routes/index.d.ts +1 -0
  54. package/lib/routes/index.js +20 -0
  55. package/lib/services/admin-audit.d.ts +13 -0
  56. package/lib/services/admin-audit.js +31 -0
  57. package/lib/services/cache-service.d.ts +108 -0
  58. package/lib/services/cache-service.js +212 -0
  59. package/lib/services/compliance-client.d.ts +46 -0
  60. package/lib/services/compliance-client.js +102 -0
  61. package/lib/services/compliance-event-subscriber.d.ts +11 -0
  62. package/lib/services/compliance-event-subscriber.js +60 -0
  63. package/lib/services/compliance-queue.d.ts +11 -0
  64. package/lib/services/compliance-queue.js +38 -0
  65. package/lib/services/entity-events.d.ts +44 -0
  66. package/lib/services/entity-events.js +63 -0
  67. package/lib/services/http-client.d.ts +108 -0
  68. package/lib/services/http-client.js +285 -0
  69. package/lib/services/index.d.ts +10 -0
  70. package/lib/services/index.js +40 -0
  71. package/lib/services/quota.d.ts +59 -0
  72. package/lib/services/quota.js +137 -0
  73. package/lib/services/retry-strategy.d.ts +74 -0
  74. package/lib/services/retry-strategy.js +127 -0
  75. package/lib/types/billing.d.ts +47 -0
  76. package/lib/types/billing.js +5 -0
  77. package/lib/types/common.d.ts +161 -0
  78. package/lib/types/common.js +53 -0
  79. package/lib/types/error-codes.d.ts +38 -0
  80. package/lib/types/error-codes.js +77 -0
  81. package/lib/types/feature-flags.d.ts +38 -0
  82. package/lib/types/feature-flags.js +107 -0
  83. package/lib/types/http.d.ts +37 -0
  84. package/lib/types/http.js +5 -0
  85. package/lib/types/index.d.ts +7 -0
  86. package/lib/types/index.js +26 -0
  87. package/lib/types/pipeline.d.ts +70 -0
  88. package/lib/types/pipeline.js +44 -0
  89. package/lib/types/quota-tiers.d.ts +23 -0
  90. package/lib/types/quota-tiers.js +26 -0
  91. package/lib/utils/alias-resolver.d.ts +16 -0
  92. package/lib/utils/alias-resolver.js +49 -0
  93. package/lib/utils/headers.d.ts +18 -0
  94. package/lib/utils/headers.js +24 -0
  95. package/lib/utils/identity.d.ts +61 -0
  96. package/lib/utils/identity.js +75 -0
  97. package/lib/utils/index.d.ts +7 -0
  98. package/lib/utils/index.js +26 -0
  99. package/lib/utils/logger.d.ts +28 -0
  100. package/lib/utils/logger.js +77 -0
  101. package/lib/utils/object.d.ts +13 -0
  102. package/lib/utils/object.js +21 -0
  103. package/lib/utils/params.d.ts +89 -0
  104. package/lib/utils/params.js +148 -0
  105. package/lib/utils/response.d.ts +142 -0
  106. package/lib/utils/response.js +237 -0
  107. package/lib/validation/ai-schemas.d.ts +61 -0
  108. package/lib/validation/ai-schemas.js +81 -0
  109. package/lib/validation/common-schemas.d.ts +72 -0
  110. package/lib/validation/common-schemas.js +58 -0
  111. package/lib/validation/index.d.ts +6 -0
  112. package/lib/validation/index.js +25 -0
  113. package/lib/validation/message-schemas.d.ts +79 -0
  114. package/lib/validation/message-schemas.js +42 -0
  115. package/lib/validation/middleware.d.ts +60 -0
  116. package/lib/validation/middleware.js +77 -0
  117. package/lib/validation/pipeline-schemas.d.ts +135 -0
  118. package/lib/validation/pipeline-schemas.js +85 -0
  119. package/lib/validation/plugin-schemas.d.ts +127 -0
  120. package/lib/validation/plugin-schemas.js +84 -0
  121. package/openapi.yaml +292 -0
  122. package/package.json +127 -0
@@ -0,0 +1,90 @@
1
+ "use strict";
2
+ // Copyright 2026 Pipeline Builder Contributors
3
+ // SPDX-License-Identifier: Apache-2.0
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ exports.registerPipelineRoutes = registerPipelineRoutes;
6
+ const registry_1 = require("../registry");
7
+ const tags = ['Pipelines'];
8
+ const auth = [{ bearerAuth: [] }];
9
+ function registerPipelineRoutes() {
10
+ registry_1.registry.registerPath({
11
+ method: 'get',
12
+ path: '/pipelines',
13
+ summary: 'List pipelines',
14
+ description: 'List pipelines with pagination, filtering, and sorting.',
15
+ tags,
16
+ security: auth,
17
+ responses: { 200: { description: 'Paginated list of pipelines' }, 401: { description: 'Unauthorized' } },
18
+ });
19
+ registry_1.registry.registerPath({
20
+ method: 'get',
21
+ path: '/pipelines/find',
22
+ summary: 'Find a single pipeline',
23
+ description: 'Find a single pipeline matching the query filters.',
24
+ tags,
25
+ security: auth,
26
+ responses: { 200: { description: 'Pipeline found' }, 404: { description: 'Not found' } },
27
+ });
28
+ registry_1.registry.registerPath({
29
+ method: 'get',
30
+ path: '/pipelines/{id}',
31
+ summary: 'Get pipeline by ID',
32
+ tags,
33
+ security: auth,
34
+ responses: { 200: { description: 'Pipeline details' }, 404: { description: 'Not found' } },
35
+ });
36
+ registry_1.registry.registerPath({
37
+ method: 'post',
38
+ path: '/pipelines',
39
+ summary: 'Create a pipeline',
40
+ description: 'Create a new pipeline configuration. Checks pipeline quota.',
41
+ tags,
42
+ security: auth,
43
+ responses: { 201: { description: 'Pipeline created' }, 400: { description: 'Validation error' }, 429: { description: 'Quota exceeded' } },
44
+ });
45
+ registry_1.registry.registerPath({
46
+ method: 'put',
47
+ path: '/pipelines/{id}',
48
+ summary: 'Update a pipeline',
49
+ tags,
50
+ security: auth,
51
+ responses: { 200: { description: 'Pipeline updated' }, 404: { description: 'Not found' } },
52
+ });
53
+ registry_1.registry.registerPath({
54
+ method: 'delete',
55
+ path: '/pipelines/{id}',
56
+ summary: 'Delete a pipeline',
57
+ description: 'Soft-delete a pipeline by setting isActive to false.',
58
+ tags,
59
+ security: auth,
60
+ responses: { 200: { description: 'Pipeline deleted' }, 404: { description: 'Not found' } },
61
+ });
62
+ registry_1.registry.registerPath({
63
+ method: 'get',
64
+ path: '/pipelines/providers',
65
+ summary: 'List AI providers',
66
+ description: 'List AI providers configured for pipeline generation.',
67
+ tags,
68
+ security: auth,
69
+ responses: { 200: { description: 'List of available AI providers with models' } },
70
+ });
71
+ registry_1.registry.registerPath({
72
+ method: 'post',
73
+ path: '/pipelines/generate',
74
+ summary: 'Generate pipeline via AI',
75
+ description: 'Generate a BuilderProps configuration from a natural language prompt. Returns the complete result when done.',
76
+ tags,
77
+ security: auth,
78
+ responses: { 200: { description: 'Generated pipeline configuration' }, 400: { description: 'Validation error' } },
79
+ });
80
+ registry_1.registry.registerPath({
81
+ method: 'post',
82
+ path: '/pipelines/generate/stream',
83
+ summary: 'Stream pipeline generation via AI',
84
+ description: 'Generate a BuilderProps configuration from a natural language prompt. Streams partial results as SSE events.',
85
+ tags,
86
+ security: auth,
87
+ responses: { 200: { description: 'SSE event stream of partial pipeline objects' }, 400: { description: 'Validation error' } },
88
+ });
89
+ }
90
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlwZWxpbmUtcm91dGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL29wZW5hcGkvcm91dGVzL3BpcGVsaW5lLXJvdXRlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsK0NBQStDO0FBQy9DLHNDQUFzQzs7QUFPdEMsd0RBd0ZDO0FBN0ZELDBDQUF1QztBQUV2QyxNQUFNLElBQUksR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQzNCLE1BQU0sSUFBSSxHQUFHLENBQUMsRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUVsQyxTQUFnQixzQkFBc0I7SUFDcEMsbUJBQVEsQ0FBQyxZQUFZLENBQUM7UUFDcEIsTUFBTSxFQUFFLEtBQUs7UUFDYixJQUFJLEVBQUUsWUFBWTtRQUNsQixPQUFPLEVBQUUsZ0JBQWdCO1FBQ3pCLFdBQVcsRUFBRSx5REFBeUQ7UUFDdEUsSUFBSTtRQUNKLFFBQVEsRUFBRSxJQUFJO1FBQ2QsU0FBUyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsV0FBVyxFQUFFLDZCQUE2QixFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxFQUFFO0tBQ3pHLENBQUMsQ0FBQztJQUVILG1CQUFRLENBQUMsWUFBWSxDQUFDO1FBQ3BCLE1BQU0sRUFBRSxLQUFLO1FBQ2IsSUFBSSxFQUFFLGlCQUFpQjtRQUN2QixPQUFPLEVBQUUsd0JBQXdCO1FBQ2pDLFdBQVcsRUFBRSxvREFBb0Q7UUFDakUsSUFBSTtRQUNKLFFBQVEsRUFBRSxJQUFJO1FBQ2QsU0FBUyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxFQUFFO0tBQ3pGLENBQUMsQ0FBQztJQUVILG1CQUFRLENBQUMsWUFBWSxDQUFDO1FBQ3BCLE1BQU0sRUFBRSxLQUFLO1FBQ2IsSUFBSSxF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aXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHsgcmVnaXN0cnkgfSBmcm9tICcuLi9yZWdpc3RyeSc7XG5cbmNvbnN0IHRhZ3MgPSBbJ1BpcGVsaW5lcyddO1xuY29uc3QgYXV0aCA9IFt7IGJlYXJlckF1dGg6IFtdIH1dO1xuXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJQaXBlbGluZVJvdXRlcygpOiB2b2lkIHtcbiAgcmVnaXN0cnkucmVnaXN0ZXJQYXRoKHtcbiAgICBtZXRob2Q6ICdnZXQnLFxuICAgIHBhdGg6ICcvcGlwZWxpbmVzJyxcbiAgICBzdW1tYXJ5OiAnTGlzdCBwaXBlbGluZXMnLFxuICAgIGRlc2NyaXB0aW9uOiAnTGlzdCBwaXBlbGluZXMgd2l0aCBwYWdpbmF0aW9uLCBmaWx0ZXJpbmcsIGFuZCBzb3J0aW5nLicsXG4gICAgdGFncyxcbiAgICBzZWN1cml0eTogYXV0aCxcbiAgICByZXNwb25zZXM6IHsgMjAwOiB7IGRlc2NyaXB0aW9uOiAnUGFnaW5hdGVkIGxpc3Qgb2YgcGlwZWxpbmVzJyB9LCA0MDE6IHsgZGVzY3JpcHRpb246ICdVbmF1dGhvcml6ZWQnIH0gfSxcbiAgfSk7XG5cbiAgcmVnaXN0cnkucmVnaXN0ZXJQYXRoKHtcbiAgICBtZXRob2Q6ICdnZXQnLFxuICAgIHBhdGg6ICcvcGlwZWxpbmVzL2ZpbmQnLFxuICAgIHN1bW1hcnk6ICdGaW5kIGEgc2luZ2xlIHBpcGVsaW5lJyxcbiAgICBkZXNjcmlwdGlvbjogJ0ZpbmQgYSBzaW5nbGUgcGlwZWxpbmUgbWF0Y2hpbmcgdGhlIHF1ZXJ5IGZpbHRlcnMuJyxcbiAgICB0YWdzLFxuICAgIHNlY3VyaXR5OiBhdXRoLFxuICAgIHJlc3BvbnNlczogeyAyMDA6IHsgZGVzY3JpcHRpb246ICdQaXBlbGluZSBmb3VuZCcgfSwgNDA0OiB7IGRlc2NyaXB0aW9uOiAnTm90IGZvdW5kJyB9IH0sXG4gIH0pO1xuXG4gIHJlZ2lzdHJ5LnJlZ2lzdGVyUGF0aCh7XG4gICAgbWV0aG9kOiAnZ2V0JyxcbiAgICBwYXRoOiAnL3BpcGVsaW5lcy97aWR9JyxcbiAgICBzdW1tYXJ5OiAnR2V0IHBpcGVsaW5lIGJ5IElEJyxcbiAgICB0YWdzLFxuICAgIHNlY3VyaXR5OiBhdXRoLFxuICAgIHJlc3BvbnNlczogeyAyMDA6IHsgZGVzY3JpcHRpb246ICdQaXBlbGluZSBkZXRhaWxzJyB9LCA0MDQ6IHsgZGVzY3JpcHRpb246ICdOb3QgZm91bmQnIH0gfSxcbiAgfSk7XG5cbiAgcmVnaXN0cnkucmVnaXN0ZXJQYXRoKHtcbiAgICBtZXRob2Q6ICdwb3N0JyxcbiAgICBwYXRoOiAnL3BpcGVsaW5lcycsXG4gICAgc3VtbWFyeTogJ0NyZWF0ZSBhIHBpcGVsaW5lJyxcbiAgICBkZXNjcmlwdGlvbjogJ0NyZWF0ZSBhIG5ldyBwaXBlbGluZSBjb25maWd1cmF0aW9uLiBDaGVja3MgcGlwZWxpbmUgcXVvdGEuJyxcbiAgICB0YWdzLFxuICAgIHNlY3VyaXR5OiBhdXRoLFxuICAgIHJlc3BvbnNlczogeyAyMDE6IHsgZGVzY3JpcHRpb246ICdQaXBlbGluZSBjcmVhdGVkJyB9LCA0MDA6IHsgZGVzY3JpcHRpb246ICdWYWxpZGF0aW9uIGVycm9yJyB9LCA0Mjk6IHsgZGVzY3JpcHRpb246ICdRdW90YSBleGNlZWRlZCcgfSB9LFxuICB9KTtcblxuICByZWdpc3RyeS5yZWdpc3RlclBhdGgoe1xuICAgIG1ldGhvZDogJ3B1dCcsXG4gICAgcGF0aDogJy9waXBlbGluZXMve2lkfScsXG4gICAgc3VtbWFyeTogJ1VwZGF0ZSBhIHBpcGVsaW5lJyxcbiAgICB0YWdzLFxuICAgIHNlY3VyaXR5OiBhdXRoLFxuICAgIHJlc3BvbnNlczogeyAyMDA6IHsgZGVzY3JpcHRpb246ICdQaXBlbGluZSB1cGRhdGVkJyB9LCA0MDQ6IHsgZGVzY3JpcHRpb246ICdOb3QgZm91bmQnIH0gfSxcbiAgfSk7XG5cbiAgcmVnaXN0cnkucmVnaXN0ZXJQYXRoKHtcbiAgICBtZXRob2Q6ICdkZWxldGUnLFxuICAgIHBhdGg6ICcvcGlwZWxpbmVzL3tpZH0nLFxuICAgIHN1bW1hcnk6ICdEZWxldGUgYSBwaXBlbGluZScsXG4gICAgZGVzY3JpcHRpb246ICdTb2Z0LWRlbGV0ZSBhIHBpcGVsaW5lIGJ5IHNldHRpbmcgaXNBY3RpdmUgdG8gZmFsc2UuJyxcbiAgICB0YWdzLFxuICAgIHNlY3VyaXR5OiBhdXRoLFxuICAgIHJlc3BvbnNlczogeyAyMDA6IHsgZGVzY3JpcHRpb246ICdQaXBlbGluZSBkZWxldGVkJyB9LCA0MDQ6IHsgZGVzY3JpcHRpb246ICdOb3QgZm91bmQnIH0gfSxcbiAgfSk7XG5cbiAgcmVnaXN0cnkucmVnaXN0ZXJQYXRoKHtcbiAgICBtZXRob2Q6ICdnZXQnLFxuICAgIHBhdGg6ICcvcGlwZWxpbmVzL3Byb3ZpZGVycycsXG4gICAgc3VtbWFyeTogJ0xpc3QgQUkgcHJvdmlkZXJzJyxcbiAgICBkZXNjcmlwdGlvbjogJ0xpc3QgQUkgcHJvdmlkZXJzIGNvbmZpZ3VyZWQgZm9yIHBpcGVsaW5lIGdlbmVyYXRpb24uJyxcbiAgICB0YWdzLFxuICAgIHNlY3VyaXR5OiBhdXRoLFxuICAgIHJlc3BvbnNlczogeyAyMDA6IHsgZGVzY3JpcHRpb246ICdMaXN0IG9mIGF2YWlsYWJsZSBBSSBwcm92aWRlcnMgd2l0aCBtb2RlbHMnIH0gfSxcbiAgfSk7XG5cbiAgcmVnaXN0cnkucmVnaXN0ZXJQYXRoKHtcbiAgICBtZXRob2Q6ICdwb3N0JyxcbiAgICBwYXRoOiAnL3BpcGVsaW5lcy9nZW5lcmF0ZScsXG4gICAgc3VtbWFyeTogJ0dlbmVyYXRlIHBpcGVsaW5lIHZpYSBBSScsXG4gICAgZGVzY3JpcHRpb246ICdHZW5lcmF0ZSBhIEJ1aWxkZXJQcm9wcyBjb25maWd1cmF0aW9uIGZyb20gYSBuYXR1cmFsIGxhbmd1YWdlIHByb21wdC4gUmV0dXJucyB0aGUgY29tcGxldGUgcmVzdWx0IHdoZW4gZG9uZS4nLFxuICAgIHRhZ3MsXG4gICAgc2VjdXJpdHk6IGF1dGgsXG4gICAgcmVzcG9uc2VzOiB7IDIwMDogeyBkZXNjcmlwdGlvbjogJ0dlbmVyYXRlZCBwaXBlbGluZSBjb25maWd1cmF0aW9uJyB9LCA0MDA6IHsgZGVzY3JpcHRpb246ICdWYWxpZGF0aW9uIGVycm9yJyB9IH0sXG4gIH0pO1xuXG4gIHJlZ2lzdHJ5LnJlZ2lzdGVyUGF0aCh7XG4gICAgbWV0aG9kOiAncG9zdCcsXG4gICAgcGF0aDogJy9waXBlbGluZXMvZ2VuZXJhdGUvc3RyZWFtJyxcbiAgICBzdW1tYXJ5OiAnU3RyZWFtIHBpcGVsaW5lIGdlbmVyYXRpb24gdmlhIEFJJyxcbiAgICBkZXNjcmlwdGlvbjogJ0dlbmVyYXRlIGEgQnVpbGRlclByb3BzIGNvbmZpZ3VyYXRpb24gZnJvbSBhIG5hdHVyYWwgbGFuZ3VhZ2UgcHJvbXB0LiBTdHJlYW1zIHBhcnRpYWwgcmVzdWx0cyBhcyBTU0UgZXZlbnRzLicsXG4gICAgdGFncyxcbiAgICBzZWN1cml0eTogYXV0aCxcbiAgICByZXNwb25zZXM6IHsgMjAwOiB7IGRlc2NyaXB0aW9uOiAnU1NFIGV2ZW50IHN0cmVhbSBvZiBwYXJ0aWFsIHBpcGVsaW5lIG9iamVjdHMnIH0sIDQwMDogeyBkZXNjcmlwdGlvbjogJ1ZhbGlkYXRpb24gZXJyb3InIH0gfSxcbiAgfSk7XG59XG4iXX0=
@@ -0,0 +1 @@
1
+ export declare function registerPluginRoutes(): void;
@@ -0,0 +1,99 @@
1
+ "use strict";
2
+ // Copyright 2026 Pipeline Builder Contributors
3
+ // SPDX-License-Identifier: Apache-2.0
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ exports.registerPluginRoutes = registerPluginRoutes;
6
+ const registry_1 = require("../registry");
7
+ const tags = ['Plugins'];
8
+ const auth = [{ bearerAuth: [] }];
9
+ function registerPluginRoutes() {
10
+ registry_1.registry.registerPath({
11
+ method: 'get',
12
+ path: '/plugins',
13
+ summary: 'List plugins',
14
+ description: 'List plugins with pagination, filtering, and sorting.',
15
+ tags,
16
+ security: auth,
17
+ responses: { 200: { description: 'Paginated list of plugins' }, 401: { description: 'Unauthorized' } },
18
+ });
19
+ registry_1.registry.registerPath({
20
+ method: 'get',
21
+ path: '/plugins/find',
22
+ summary: 'Find a single plugin',
23
+ description: 'Find a single plugin matching the query filters.',
24
+ tags,
25
+ security: auth,
26
+ responses: { 200: { description: 'Plugin found' }, 404: { description: 'Not found' } },
27
+ });
28
+ registry_1.registry.registerPath({
29
+ method: 'get',
30
+ path: '/plugins/{id}',
31
+ summary: 'Get plugin by ID',
32
+ tags,
33
+ security: auth,
34
+ responses: { 200: { description: 'Plugin details' }, 404: { description: 'Not found' } },
35
+ });
36
+ registry_1.registry.registerPath({
37
+ method: 'post',
38
+ path: '/plugins',
39
+ summary: 'Upload a plugin',
40
+ description: 'Upload a plugin ZIP file with spec. Builds Docker image and saves to database.',
41
+ tags,
42
+ security: auth,
43
+ responses: { 202: { description: 'Plugin build queued' }, 400: { description: 'Validation error' }, 429: { description: 'Quota exceeded' } },
44
+ });
45
+ registry_1.registry.registerPath({
46
+ method: 'put',
47
+ path: '/plugins/{id}',
48
+ summary: 'Update a plugin',
49
+ tags,
50
+ security: auth,
51
+ responses: { 200: { description: 'Plugin updated' }, 404: { description: 'Not found' } },
52
+ });
53
+ registry_1.registry.registerPath({
54
+ method: 'delete',
55
+ path: '/plugins/{id}',
56
+ summary: 'Delete a plugin',
57
+ description: 'Soft-delete a plugin by setting isActive to false.',
58
+ tags,
59
+ security: auth,
60
+ responses: { 200: { description: 'Plugin deleted' }, 404: { description: 'Not found' } },
61
+ });
62
+ registry_1.registry.registerPath({
63
+ method: 'get',
64
+ path: '/plugins/providers',
65
+ summary: 'List AI providers',
66
+ description: 'List AI providers configured for plugin generation.',
67
+ tags,
68
+ security: auth,
69
+ responses: { 200: { description: 'List of available AI providers with models' } },
70
+ });
71
+ registry_1.registry.registerPath({
72
+ method: 'post',
73
+ path: '/plugins/generate',
74
+ summary: 'Generate plugin via AI',
75
+ description: 'Generate a plugin configuration and Dockerfile from a natural language prompt.',
76
+ tags,
77
+ security: auth,
78
+ responses: { 200: { description: 'Generated plugin configuration and Dockerfile' }, 400: { description: 'Validation error' } },
79
+ });
80
+ registry_1.registry.registerPath({
81
+ method: 'post',
82
+ path: '/plugins/generate/stream',
83
+ summary: 'Stream plugin generation via AI',
84
+ description: 'Generate plugin configuration from a natural language prompt. Streams partial results as SSE events.',
85
+ tags,
86
+ security: auth,
87
+ responses: { 200: { description: 'SSE event stream of partial plugin objects' }, 400: { description: 'Validation error' } },
88
+ });
89
+ registry_1.registry.registerPath({
90
+ method: 'post',
91
+ path: '/plugins/deploy-generated',
92
+ summary: 'Deploy AI-generated plugin',
93
+ description: 'Build Docker image from AI-generated Dockerfile and save plugin to database. Requires admin.',
94
+ tags,
95
+ security: auth,
96
+ responses: { 202: { description: 'Plugin build queued' }, 400: { description: 'Validation error' }, 403: { description: 'Admin required' }, 429: { description: 'Quota exceeded' } },
97
+ });
98
+ }
99
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLXJvdXRlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9vcGVuYXBpL3JvdXRlcy9wbHVnaW4tcm91dGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDOztBQU90QyxvREFrR0M7QUF2R0QsMENBQXVDO0FBRXZDLE1BQU0sSUFBSSxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDekIsTUFBTSxJQUFJLEdBQUcsQ0FBQyxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBRWxDLFNBQWdCLG9CQUFvQjtJQUNsQyxtQkFBUSxDQUFDLFlBQVksQ0FBQztRQUNwQixNQUFNLEVBQUUsS0FBSztRQUNiLElBQUksRUFBRSxVQUFVO1FBQ2hCLE9BQU8sRUFBRSxjQUFjO1FBQ3ZCLFdBQVcsRUFBRSx1REFBdUQ7UUFDcEUsSUFBSTtRQUNKLFFBQVEsRUFBRSxJQUFJO1FBQ2QsU0FBUyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsV0FBVyxFQUFFLDJCQUEyQixFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxFQUFFO0tBQ3ZHLENBQUMsQ0FBQztJQUVILG1CQUFRLENBQUMsWUFBWSxDQUFDO1FBQ3BCLE1BQU0sRUFBRSxLQUFLO1FBQ2IsSUFBSSxFQUFFLGVBQWU7UUFDckIsT0FBTyxFQUFFLHNCQUFzQjtRQUMvQixXQUFXLEVBQUUsa0RBQWtEO1FBQy9ELElBQUk7UUFDSixRQUFRLEVBQUUsSUFBSTtRQUNkLFNBQVMsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLEVBQUU7S0FDdkYsQ0FBQyxDQUFDO0lBRUgsbUJBQVEsQ0FBQyxZQUFZLENBQUM7UUFDcEIsTUFBTSxFQUFFLEtBQUs7UUFDYixJQUFJLEVBQUUsZUFBZTtR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QTJCO1FBQ2pDLE9BQU8sRUFBRSw0QkFBNEI7UUFDckMsV0FBVyxFQUFFLDhGQUE4RjtRQUMzRyxJQUFJO1FBQ0osUUFBUSxFQUFFLElBQUk7UUFDZCxTQUFTLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxXQUFXLEVBQUUscUJBQXFCLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxXQUFXLEVBQUUsa0JBQWtCLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRTtLQUNyTCxDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB7IHJlZ2lzdHJ5IH0gZnJvbSAnLi4vcmVnaXN0cnknO1xuXG5jb25zdCB0YWdzID0gWydQbHVnaW5zJ107XG5jb25zdCBhdXRoID0gW3sgYmVhcmVyQXV0aDogW10gfV07XG5cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RlclBsdWdpblJvdXRlcygpOiB2b2lkIHtcbiAgcmVnaXN0cnkucmVnaXN0ZXJQYXRoKHtcbiAgICBtZXRob2Q6ICdnZXQnLFxuICAgIHBhdGg6ICcvcGx1Z2lucycsXG4gICAgc3VtbWFyeTogJ0xpc3QgcGx1Z2lucycsXG4gICAgZGVzY3JpcHRpb246ICdMaXN0IHBsdWdpbnMgd2l0aCBwYWdpbmF0aW9uLCBmaWx0ZXJpbmcsIGFuZCBzb3J0aW5nLicsXG4gICAgdGFncyxcbiAgICBzZWN1cml0eTogYXV0aCxcbiAgICByZXNwb25zZXM6IHsgMjAwOiB7IGRlc2NyaXB0aW9uOiAnUGFnaW5hdGVkIGxpc3Qgb2YgcGx1Z2lucycgfSwgNDAxOiB7IGRlc2NyaXB0aW9uOiAnVW5hdXRob3JpemVkJyB9IH0sXG4gIH0pO1xuXG4gIHJlZ2lzdHJ5LnJlZ2lzdGVyUGF0aCh7XG4gICAgbWV0aG9kOiAnZ2V0JyxcbiAgICBwYXRoOiAnL3BsdWdpbnMvZmluZCcsXG4gICAgc3VtbWFyeTogJ0ZpbmQgYSBzaW5nbGUgcGx1Z2luJyxcbiAgICBkZXNjcmlwdGlvbjogJ0ZpbmQgYSBzaW5nbGUgcGx1Z2luIG1hdGNoaW5nIHRoZSBxdWVyeSBmaWx0ZXJzLicsXG4gICAgdGFncyxcbiAgICBzZWN1cml0eTogYXV0aCxcbiAgICByZXNwb25zZXM6IHsgMjAwOiB7IGRlc2NyaXB0aW9uOiAnUGx1Z2luIGZvdW5kJyB9LCA0MDQ6IHsgZGVzY3JpcHRpb246ICdOb3QgZm91bmQnIH0gfSxcbiAgfSk7XG5cbiAgcmVnaXN0cnkucmVnaXN0ZXJQYXRoKHtcbiAgICBtZXRob2Q6ICdnZXQnLFxuICAgIHBhdGg6ICcvcGx1Z2lucy97aWR9JyxcbiAgICBzdW1tYXJ5OiAnR2V0IHBsdWdpbiBieSBJRCcsXG4gICAgdGFncyxcbiAgICBzZWN1cml0eTogYXV0aCxcbiAgICByZXNwb25zZXM6IHsgMjAwOiB7IGRlc2NyaXB0aW9uOiAnUGx1Z2luIGRldGFpbHMnIH0sIDQwNDogeyBkZXNjcmlwdGlvbjogJ05vdCBmb3VuZCcgfSB9LFxuICB9KTtcblxuICByZWdpc3RyeS5yZWdpc3RlclBhdGgoe1xuICAgIG1ldGhvZDogJ3Bvc3QnLFxuICAgIHBhdGg6ICcvcGx1Z2lucycsXG4gICAgc3VtbWFyeTogJ1VwbG9hZCBhIHBsdWdpbicsXG4gICAgZGVzY3JpcHRpb246ICdVcGxvYWQgYSBwbHVnaW4gWklQIGZpbGUgd2l0aCBzcGVjLiBCdWlsZHMgRG9ja2VyIGltYWdlIGFuZCBzYXZlcyB0byBkYXRhYmFzZS4nLFxuICAgIHRhZ3MsXG4gICAgc2VjdXJpdHk6IGF1dGgsXG4gICAgcmVzcG9uc2VzOiB7IDIwMjogeyBkZXNjcmlwdGlvbjogJ1BsdWdpbiBidWlsZCBxdWV1ZWQnIH0sIDQwMDogeyBkZXNjcmlwdGlvbjogJ1ZhbGlkYXRpb24gZXJyb3InIH0sIDQyOTogeyBkZXNjcmlwdGlvbjogJ1F1b3RhIGV4Y2VlZGVkJyB9IH0sXG4gIH0pO1xuXG4gIHJlZ2lzdHJ5LnJlZ2lzdGVyUGF0aCh7XG4gICAgbWV0aG9kOiAncHV0JyxcbiAgICBwYXRoOiAnL3BsdWdpbnMve2lkfScsXG4gICAgc3VtbWFyeTogJ1VwZGF0ZSBhIHBsdWdpbicsXG4gICAgdGFncyxcbiAgICBzZWN1cml0eTogYXV0aCxcbiAgICByZXNwb25zZXM6IHsgMjAwOiB7IGRlc2NyaXB0aW9uOiAnUGx1Z2luIHVwZGF0ZWQnIH0sIDQwNDogeyBkZXNjcmlwdGlvbjogJ05vdCBmb3VuZCcgfSB9LFxuICB9KTtcblxuICByZWdpc3RyeS5yZWdpc3RlclBhdGgoe1xuICAgIG1ldGhvZDogJ2RlbGV0ZScsXG4gICAgcGF0aDogJy9wbHVnaW5zL3tpZH0nLFxuICAgIHN1bW1hcnk6ICdEZWxldGUgYSBwbHVnaW4nLFxuICAgIGRlc2NyaXB0aW9uOiAnU29mdC1kZWxldGUgYSBwbHVnaW4gYnkgc2V0dGluZyBpc0FjdGl2ZSB0byBmYWxzZS4nLFxuICAgIHRhZ3MsXG4gICAgc2VjdXJpdHk6IGF1dGgsXG4gICAgcmVzcG9uc2VzOiB7IDIwMDogeyBkZXNjcmlwdGlvbjogJ1BsdWdpbiBkZWxldGVkJyB9LCA0MDQ6IHsgZGVzY3JpcHRpb246ICdOb3QgZm91bmQnIH0gfSxcbiAgfSk7XG5cbiAgcmVnaXN0cnkucmVnaXN0ZXJQYXRoKHtcbiAgICBtZXRob2Q6ICdnZXQnLFxuICAgIHBhdGg6ICcvcGx1Z2lucy9wcm92aWRlcnMnLFxuICAgIHN1bW1hcnk6ICdMaXN0IEFJIHByb3ZpZGVycycsXG4gICAgZGVzY3JpcHRpb246ICdMaXN0IEFJIHByb3ZpZGVycyBjb25maWd1cmVkIGZvciBwbHVnaW4gZ2VuZXJhdGlvbi4nLFxuICAgIHRhZ3MsXG4gICAgc2VjdXJpdHk6IGF1dGgsXG4gICAgcmVzcG9uc2VzOiB7IDIwMDogeyBkZXNjcmlwdGlvbjogJ0xpc3Qgb2YgYXZhaWxhYmxlIEFJIHByb3ZpZGVycyB3aXRoIG1vZGVscycgfSB9LFxuICB9KTtcblxuICByZWdpc3RyeS5yZWdpc3RlclBhdGgoe1xuICAgIG1ldGhvZDogJ3Bvc3QnLFxuICAgIHBhdGg6ICcvcGx1Z2lucy9nZW5lcmF0ZScsXG4gICAgc3VtbWFyeTogJ0dlbmVyYXRlIHBsdWdpbiB2aWEgQUknLFxuICAgIGRlc2NyaXB0aW9uOiAnR2VuZXJhdGUgYSBwbHVnaW4gY29uZmlndXJhdGlvbiBhbmQgRG9ja2VyZmlsZSBmcm9tIGEgbmF0dXJhbCBsYW5ndWFnZSBwcm9tcHQuJyxcbiAgICB0YWdzLFxuICAgIHNlY3VyaXR5OiBhdXRoLFxuICAgIHJlc3BvbnNlczogeyAyMDA6IHsgZGVzY3JpcHRpb246ICdHZW5lcmF0ZWQgcGx1Z2luIGNvbmZpZ3VyYXRpb24gYW5kIERvY2tlcmZpbGUnIH0sIDQwMDogeyBkZXNjcmlwdGlvbjogJ1ZhbGlkYXRpb24gZXJyb3InIH0gfSxcbiAgfSk7XG5cbiAgcmVnaXN0cnkucmVnaXN0ZXJQYXRoKHtcbiAgICBtZXRob2Q6ICdwb3N0JyxcbiAgICBwYXRoOiAnL3BsdWdpbnMvZ2VuZXJhdGUvc3RyZWFtJyxcbiAgICBzdW1tYXJ5OiAnU3RyZWFtIHBsdWdpbiBnZW5lcmF0aW9uIHZpYSBBSScsXG4gICAgZGVzY3JpcHRpb246ICdHZW5lcmF0ZSBwbHVnaW4gY29uZmlndXJhdGlvbiBmcm9tIGEgbmF0dXJhbCBsYW5ndWFnZSBwcm9tcHQuIFN0cmVhbXMgcGFydGlhbCByZXN1bHRzIGFzIFNTRSBldmVudHMuJyxcbiAgICB0YWdzLFxuICAgIHNlY3VyaXR5OiBhdXRoLFxuICAgIHJlc3BvbnNlczogeyAyMDA6IHsgZGVzY3JpcHRpb246ICdTU0UgZXZlbnQgc3RyZWFtIG9mIHBhcnRpYWwgcGx1Z2luIG9iamVjdHMnIH0sIDQwMDogeyBkZXNjcmlwdGlvbjogJ1ZhbGlkYXRpb24gZXJyb3InIH0gfSxcbiAgfSk7XG5cbiAgcmVnaXN0cnkucmVnaXN0ZXJQYXRoKHtcbiAgICBtZXRob2Q6ICdwb3N0JyxcbiAgICBwYXRoOiAnL3BsdWdpbnMvZGVwbG95LWdlbmVyYXRlZCcsXG4gICAgc3VtbWFyeTogJ0RlcGxveSBBSS1nZW5lcmF0ZWQgcGx1Z2luJyxcbiAgICBkZXNjcmlwdGlvbjogJ0J1aWxkIERvY2tlciBpbWFnZSBmcm9tIEFJLWdlbmVyYXRlZCBEb2NrZXJmaWxlIGFuZCBzYXZlIHBsdWdpbiB0byBkYXRhYmFzZS4gUmVxdWlyZXMgYWRtaW4uJyxcbiAgICB0YWdzLFxuICAgIHNlY3VyaXR5OiBhdXRoLFxuICAgIHJlc3BvbnNlczogeyAyMDI6IHsgZGVzY3JpcHRpb246ICdQbHVnaW4gYnVpbGQgcXVldWVkJyB9LCA0MDA6IHsgZGVzY3JpcHRpb246ICdWYWxpZGF0aW9uIGVycm9yJyB9LCA0MDM6IHsgZGVzY3JpcHRpb246ICdBZG1pbiByZXF1aXJlZCcgfSwgNDI5OiB7IGRlc2NyaXB0aW9uOiAnUXVvdGEgZXhjZWVkZWQnIH0gfSxcbiAgfSk7XG59XG4iXX0=
@@ -0,0 +1 @@
1
+ export declare function registerQuotaRoutes(): void;
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+ // Copyright 2026 Pipeline Builder Contributors
3
+ // SPDX-License-Identifier: Apache-2.0
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ exports.registerQuotaRoutes = registerQuotaRoutes;
6
+ const registry_1 = require("../registry");
7
+ const tags = ['Quotas'];
8
+ const auth = [{ bearerAuth: [] }];
9
+ function registerQuotaRoutes() {
10
+ registry_1.registry.registerPath({
11
+ method: 'get',
12
+ path: '/quotas',
13
+ summary: 'Get own quotas',
14
+ description: 'Get quota usage and limits for the current organization (from JWT).',
15
+ tags,
16
+ security: auth,
17
+ responses: { 200: { description: 'Organization quota details' } },
18
+ });
19
+ registry_1.registry.registerPath({
20
+ method: 'get',
21
+ path: '/quotas/all',
22
+ summary: 'Get all org quotas',
23
+ description: 'Get quotas for all organizations. System admin only.',
24
+ tags,
25
+ security: auth,
26
+ responses: { 200: { description: 'All organization quotas' }, 403: { description: 'Admin required' } },
27
+ });
28
+ registry_1.registry.registerPath({
29
+ method: 'get',
30
+ path: '/quotas/{orgId}',
31
+ summary: 'Get org quotas',
32
+ description: 'Get quota usage and limits for a specific organization.',
33
+ tags,
34
+ security: auth,
35
+ responses: { 200: { description: 'Organization quota details' }, 404: { description: 'Organization not found' } },
36
+ });
37
+ registry_1.registry.registerPath({
38
+ method: 'get',
39
+ path: '/quotas/{orgId}/{quotaType}',
40
+ summary: 'Get specific quota',
41
+ description: 'Get a specific quota type for an organization.',
42
+ tags,
43
+ security: auth,
44
+ responses: { 200: { description: 'Quota type details' } },
45
+ });
46
+ registry_1.registry.registerPath({
47
+ method: 'put',
48
+ path: '/quotas/{orgId}',
49
+ summary: 'Update org quotas',
50
+ description: 'Update quota limits for an organization. System admin only.',
51
+ tags,
52
+ security: auth,
53
+ responses: { 200: { description: 'Quotas updated' }, 403: { description: 'Admin required' } },
54
+ });
55
+ registry_1.registry.registerPath({
56
+ method: 'post',
57
+ path: '/quotas/{orgId}/reset',
58
+ summary: 'Reset quota usage',
59
+ description: 'Reset usage counters for an organization. Admin only.',
60
+ tags,
61
+ security: auth,
62
+ responses: { 200: { description: 'Quota usage reset' }, 403: { description: 'Admin required' } },
63
+ });
64
+ }
65
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVvdGEtcm91dGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL29wZW5hcGkvcm91dGVzL3F1b3RhLXJvdXRlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsK0NBQStDO0FBQy9DLHNDQUFzQzs7QUFPdEMsa0RBNERDO0FBakVELDBDQUF1QztBQUV2QyxNQUFNLElBQUksR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ3hCLE1BQU0sSUFBSSxHQUFHLENBQUMsRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUVsQyxTQUFnQixtQkFBbUI7SUFDakMsbUJBQVEsQ0FBQyxZQUFZLENBQUM7UUFDcEIsTUFBTSxFQUFFLEtBQUs7UUFDYixJQUFJLEVBQUUsU0FBUztRQUNmLE9BQU8sRUFBRSxnQkFBZ0I7UUFDekIsV0FBVyxFQUFFLHFFQUFxRTtRQUNsRixJQUFJO1FBQ0osUUFBUSxFQUFFLElBQUk7UUFDZCxTQUFTLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxXQUFXLEVBQUUsNEJBQTRCLEVBQUUsRUFBRTtLQUNsRSxDQUFDLENBQUM7SUFFSCxtQkFBUSxDQUFDLFlBQVksQ0FBQztRQUNwQixNQUFNLEVBQUUsS0FBSztRQUNiLElBQUksRUFBRSxhQUFhO1FBQ25CLE9BQU8sRUFBRSxvQkFBb0I7UUFDN0IsV0FBVyxFQUFFLHNEQUFzRDtRQUNuRSxJQUFJO1FBQ0osUUFBUSxFQUFFLElBQUk7UUFDZCxTQUFTLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxXQUFXLEVBQUUseUJBQXlCLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRTtLQUN2RyxDQUFDLENBQUM7SUFFSCxtQkFBUSxDQUFDLFlBQVksQ0FBQztRQUNwQixNQUFNLEVBQUUsS0FBSztRQUNiLElBQUksRUFBRSxpQkFBaUI7UUFDdkIsT0FBTyxFQUFFLGdCQUFnQjtRQUN6QixXQUFXLEVBQUUseURBQXlEO1FBQ3RFLElBQUk7UUFDSixRQUFRLEVBQUUsSUFBSTtRQUNkLFNBQVMsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLFdBQVcsRUFBRSw0QkFBNEIsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLFdBQVcsRUFBRSx3QkFBd0IsRUFBRSxFQUFFO0tBQ2xILENBQUMsQ0FBQztJQUVILG1CQUFRLENBQUMsWUFBWSxDQUFDO1FBQ3BCLE1BQU0sRUFBRSxLQUFLO1FBQ2IsSUFBSSxFQUFFLDZCQUE2QjtRQUNuQyxPQUFPLEVBQUUsb0JBQW9CO1FBQzdCLFdBQVcsRUFBRSxnREFBZ0Q7UUFDN0QsSUFBSTtRQUNKLFFBQVEsRUFBRSxJQUFJO1FBQ2QsU0FBUyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsV0FBVyxFQUFFLG9CQUFvQixFQUFFLEVBQUU7S0FDMUQsQ0FBQyxDQUFDO0lBRUgsbUJBQVEsQ0FBQyxZQUFZLENBQUM7UUFDcEIsTUFBTSxFQUFFLEtBQUs7UUFDYixJQUFJLEVBQUUsaUJBQWlCO1FBQ3ZCLE9BQU8sRUFBRSxtQkFBbUI7UUFDNUIsV0FBVyxFQUFFLDZEQUE2RDtRQUMxRSxJQUFJO1FBQ0osUUFBUSxFQUFFLElBQUk7UUFDZCxTQUFTLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRTtLQUM5RixDQUFDLENBQUM7SUFFSCxtQkFBUSxDQUFDLFlBQVksQ0FBQztRQUNwQixNQUFNLEVBQUUsTUFBTTtRQUNkLElBQUksRUFBRSx1QkFBdUI7UUFDN0IsT0FBTyxFQUFFLG1CQUFtQjtRQUM1QixXQUFXLEVBQUUsdURBQXVEO1FBQ3BFLElBQUk7UUFDSixRQUFRLEVBQUUsSUFBSTtRQUNkLFNBQVMsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxFQUFFO0tBQ2pHLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHsgcmVnaXN0cnkgfSBmcm9tICcuLi9yZWdpc3RyeSc7XG5cbmNvbnN0IHRhZ3MgPSBbJ1F1b3RhcyddO1xuY29uc3QgYXV0aCA9IFt7IGJlYXJlckF1dGg6IFtdIH1dO1xuXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJRdW90YVJvdXRlcygpOiB2b2lkIHtcbiAgcmVnaXN0cnkucmVnaXN0ZXJQYXRoKHtcbiAgICBtZXRob2Q6ICdnZXQnLFxuICAgIHBhdGg6ICcvcXVvdGFzJyxcbiAgICBzdW1tYXJ5OiAnR2V0IG93biBxdW90YXMnLFxuICAgIGRlc2NyaXB0aW9uOiAnR2V0IHF1b3RhIHVzYWdlIGFuZCBsaW1pdHMgZm9yIHRoZSBjdXJyZW50IG9yZ2FuaXphdGlvbiAoZnJvbSBKV1QpLicsXG4gICAgdGFncyxcbiAgICBzZWN1cml0eTogYXV0aCxcbiAgICByZXNwb25zZXM6IHsgMjAwOiB7IGRlc2NyaXB0aW9uOiAnT3JnYW5pemF0aW9uIHF1b3RhIGRldGFpbHMnIH0gfSxcbiAgfSk7XG5cbiAgcmVnaXN0cnkucmVnaXN0ZXJQYXRoKHtcbiAgICBtZXRob2Q6ICdnZXQnLFxuICAgIHBhdGg6ICcvcXVvdGFzL2FsbCcsXG4gICAgc3VtbWFyeTogJ0dldCBhbGwgb3JnIHF1b3RhcycsXG4gICAgZGVzY3JpcHRpb246ICdHZXQgcXVvdGFzIGZvciBhbGwgb3JnYW5pemF0aW9ucy4gU3lzdGVtIGFkbWluIG9ubHkuJyxcbiAgICB0YWdzLFxuICAgIHNlY3VyaXR5OiBhdXRoLFxuICAgIHJlc3BvbnNlczogeyAyMDA6IHsgZGVzY3JpcHRpb246ICdBbGwgb3JnYW5pemF0aW9uIHF1b3RhcycgfSwgNDAzOiB7IGRlc2NyaXB0aW9uOiAnQWRtaW4gcmVxdWlyZWQnIH0gfSxcbiAgfSk7XG5cbiAgcmVnaXN0cnkucmVnaXN0ZXJQYXRoKHtcbiAgICBtZXRob2Q6ICdnZXQnLFxuICAgIHBhdGg6ICcvcXVvdGFzL3tvcmdJZH0nLFxuICAgIHN1bW1hcnk6ICdHZXQgb3JnIHF1b3RhcycsXG4gICAgZGVzY3JpcHRpb246ICdHZXQgcXVvdGEgdXNhZ2UgYW5kIGxpbWl0cyBmb3IgYSBzcGVjaWZpYyBvcmdhbml6YXRpb24uJyxcbiAgICB0YWdzLFxuICAgIHNlY3VyaXR5OiBhdXRoLFxuICAgIHJlc3BvbnNlczogeyAyMDA6IHsgZGVzY3JpcHRpb246ICdPcmdhbml6YXRpb24gcXVvdGEgZGV0YWlscycgfSwgNDA0OiB7IGRlc2NyaXB0aW9uOiAnT3JnYW5pemF0aW9uIG5vdCBmb3VuZCcgfSB9LFxuICB9KTtcblxuICByZWdpc3RyeS5yZWdpc3RlclBhdGgoe1xuICAgIG1ldGhvZDogJ2dldCcsXG4gICAgcGF0aDogJy9xdW90YXMve29yZ0lkfS97cXVvdGFUeXBlfScsXG4gICAgc3VtbWFyeTogJ0dldCBzcGVjaWZpYyBxdW90YScsXG4gICAgZGVzY3JpcHRpb246ICdHZXQgYSBzcGVjaWZpYyBxdW90YSB0eXBlIGZvciBhbiBvcmdhbml6YXRpb24uJyxcbiAgICB0YWdzLFxuICAgIHNlY3VyaXR5OiBhdXRoLFxuICAgIHJlc3BvbnNlczogeyAyMDA6IHsgZGVzY3JpcHRpb246ICdRdW90YSB0eXBlIGRldGFpbHMnIH0gfSxcbiAgfSk7XG5cbiAgcmVnaXN0cnkucmVnaXN0ZXJQYXRoKHtcbiAgICBtZXRob2Q6ICdwdXQnLFxuICAgIHBhdGg6ICcvcXVvdGFzL3tvcmdJZH0nLFxuICAgIHN1bW1hcnk6ICdVcGRhdGUgb3JnIHF1b3RhcycsXG4gICAgZGVzY3JpcHRpb246ICdVcGRhdGUgcXVvdGEgbGltaXRzIGZvciBhbiBvcmdhbml6YXRpb24uIFN5c3RlbSBhZG1pbiBvbmx5LicsXG4gICAgdGFncyxcbiAgICBzZWN1cml0eTogYXV0aCxcbiAgICByZXNwb25zZXM6IHsgMjAwOiB7IGRlc2NyaXB0aW9uOiAnUXVvdGFzIHVwZGF0ZWQnIH0sIDQwMzogeyBkZXNjcmlwdGlvbjogJ0FkbWluIHJlcXVpcmVkJyB9IH0sXG4gIH0pO1xuXG4gIHJlZ2lzdHJ5LnJlZ2lzdGVyUGF0aCh7XG4gICAgbWV0aG9kOiAncG9zdCcsXG4gICAgcGF0aDogJy9xdW90YXMve29yZ0lkfS9yZXNldCcsXG4gICAgc3VtbWFyeTogJ1Jlc2V0IHF1b3RhIHVzYWdlJyxcbiAgICBkZXNjcmlwdGlvbjogJ1Jlc2V0IHVzYWdlIGNvdW50ZXJzIGZvciBhbiBvcmdhbml6YXRpb24uIEFkbWluIG9ubHkuJyxcbiAgICB0YWdzLFxuICAgIHNlY3VyaXR5OiBhdXRoLFxuICAgIHJlc3BvbnNlczogeyAyMDA6IHsgZGVzY3JpcHRpb246ICdRdW90YSB1c2FnZSByZXNldCcgfSwgNDAzOiB7IGRlc2NyaXB0aW9uOiAnQWRtaW4gcmVxdWlyZWQnIH0gfSxcbiAgfSk7XG59XG4iXX0=
@@ -0,0 +1,25 @@
1
+ import { z } from 'zod';
2
+ export declare const SuccessResponseSchema: z.ZodObject<{
3
+ success: z.ZodLiteral<true>;
4
+ statusCode: z.ZodNumber;
5
+ data: z.ZodOptional<z.ZodUnknown>;
6
+ message: z.ZodOptional<z.ZodString>;
7
+ }, z.core.$strip>;
8
+ export declare const ErrorResponseSchema: z.ZodObject<{
9
+ success: z.ZodLiteral<false>;
10
+ statusCode: z.ZodNumber;
11
+ message: z.ZodString;
12
+ code: z.ZodOptional<z.ZodString>;
13
+ details: z.ZodOptional<z.ZodUnknown>;
14
+ }, z.core.$strip>;
15
+ export declare const PaginatedResponseSchema: z.ZodObject<{
16
+ success: z.ZodLiteral<true>;
17
+ statusCode: z.ZodNumber;
18
+ data: z.ZodArray<z.ZodUnknown>;
19
+ count: z.ZodNumber;
20
+ limit: z.ZodNumber;
21
+ offset: z.ZodNumber;
22
+ total: z.ZodOptional<z.ZodNumber>;
23
+ message: z.ZodOptional<z.ZodString>;
24
+ }, z.core.$strip>;
25
+ export declare function registerSchemas(): void;
@@ -0,0 +1,95 @@
1
+ "use strict";
2
+ // Copyright 2026 Pipeline Builder Contributors
3
+ // SPDX-License-Identifier: Apache-2.0
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ exports.PaginatedResponseSchema = exports.ErrorResponseSchema = exports.SuccessResponseSchema = void 0;
6
+ exports.registerSchemas = registerSchemas;
7
+ const zod_1 = require("zod");
8
+ const registry_1 = require("./registry");
9
+ const ai_schemas_1 = require("../validation/ai-schemas");
10
+ const common_schemas_1 = require("../validation/common-schemas");
11
+ const message_schemas_1 = require("../validation/message-schemas");
12
+ const pipeline_schemas_1 = require("../validation/pipeline-schemas");
13
+ const plugin_schemas_1 = require("../validation/plugin-schemas");
14
+ // Response schemas (exported for type usage)
15
+ exports.SuccessResponseSchema = zod_1.z.object({
16
+ success: zod_1.z.literal(true),
17
+ statusCode: zod_1.z.number(),
18
+ data: zod_1.z.unknown().optional(),
19
+ message: zod_1.z.string().optional(),
20
+ });
21
+ exports.ErrorResponseSchema = zod_1.z.object({
22
+ success: zod_1.z.literal(false),
23
+ statusCode: zod_1.z.number(),
24
+ message: zod_1.z.string(),
25
+ code: zod_1.z.string().optional(),
26
+ details: zod_1.z.unknown().optional(),
27
+ });
28
+ exports.PaginatedResponseSchema = zod_1.z.object({
29
+ success: zod_1.z.literal(true),
30
+ statusCode: zod_1.z.number(),
31
+ data: zod_1.z.array(zod_1.z.unknown()),
32
+ count: zod_1.z.number(),
33
+ limit: zod_1.z.number(),
34
+ offset: zod_1.z.number(),
35
+ total: zod_1.z.number().optional(),
36
+ message: zod_1.z.string().optional(),
37
+ });
38
+ function registerSchemas() {
39
+ // Common schemas
40
+ registry_1.registry.register('AccessModifier', common_schemas_1.AccessModifierSchema.openapi({
41
+ description: 'Resource visibility: "public" (visible to all) or "private" (organization only)',
42
+ example: 'private',
43
+ }));
44
+ registry_1.registry.register('PaginationParams', common_schemas_1.PaginationSchema.openapi({
45
+ description: 'Standard pagination and sorting parameters',
46
+ }));
47
+ registry_1.registry.register('BaseFilter', common_schemas_1.BaseFilterSchema.openapi({
48
+ description: 'Common filter fields shared by all entity queries',
49
+ }));
50
+ // Pipeline schemas
51
+ registry_1.registry.register('PipelineFilter', pipeline_schemas_1.PipelineFilterSchema.openapi({
52
+ description: 'Query filters for listing pipelines',
53
+ }));
54
+ registry_1.registry.register('PipelineCreate', pipeline_schemas_1.PipelineCreateSchema.openapi({
55
+ description: 'Request body for creating a new pipeline',
56
+ }));
57
+ registry_1.registry.register('PipelineUpdate', pipeline_schemas_1.PipelineUpdateSchema.openapi({
58
+ description: 'Request body for updating an existing pipeline',
59
+ }));
60
+ // Plugin schemas
61
+ registry_1.registry.register('PluginFilter', plugin_schemas_1.PluginFilterSchema.openapi({
62
+ description: 'Query filters for listing plugins',
63
+ }));
64
+ registry_1.registry.register('PluginCreate', plugin_schemas_1.PluginCreateSchema.openapi({
65
+ description: 'Request body for creating a new plugin',
66
+ }));
67
+ registry_1.registry.register('PluginUpdate', plugin_schemas_1.PluginUpdateSchema.openapi({
68
+ description: 'Request body for updating an existing plugin',
69
+ }));
70
+ registry_1.registry.register('PluginUploadBody', plugin_schemas_1.PluginUploadBodySchema.openapi({
71
+ description: 'Metadata for plugin ZIP upload (multipart form-data)',
72
+ }));
73
+ // Message schemas
74
+ registry_1.registry.register('MessageFilter', message_schemas_1.MessageFilterSchema.openapi({
75
+ description: 'Query filters for listing messages',
76
+ }));
77
+ registry_1.registry.register('MessageCreate', message_schemas_1.MessageCreateSchema.openapi({
78
+ description: 'Request body for creating a new message or announcement',
79
+ }));
80
+ registry_1.registry.register('MessageReply', message_schemas_1.MessageReplySchema.openapi({
81
+ description: 'Request body for replying to a message thread',
82
+ }));
83
+ // AI schemas
84
+ registry_1.registry.register('AIGenerateBody', ai_schemas_1.AIGenerateBodySchema.openapi({
85
+ description: 'Request body for AI-powered generation (pipeline or plugin)',
86
+ }));
87
+ registry_1.registry.register('PluginDeployGenerated', ai_schemas_1.PluginDeployGeneratedSchema.openapi({
88
+ description: 'Request body for deploying an AI-generated plugin',
89
+ }));
90
+ // Response schemas
91
+ registry_1.registry.register('SuccessResponse', exports.SuccessResponseSchema.openapi('SuccessResponse'));
92
+ registry_1.registry.register('ErrorResponse', exports.ErrorResponseSchema.openapi('ErrorResponse'));
93
+ registry_1.registry.register('PaginatedResponse', exports.PaginatedResponseSchema.openapi('PaginatedResponse'));
94
+ }
95
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZW1hLXJlZ2lzdHJ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL29wZW5hcGkvc2NoZW1hLXJlZ2lzdHJ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDOzs7QUEwRHRDLDBDQXVFQztBQS9IRCw2QkFBd0I7QUFFeEIseUNBQXNDO0FBQ3RDLHlEQUdrQztBQUNsQyxpRUFJc0M7QUFDdEMsbUVBSXVDO0FBQ3ZDLHFFQUl3QztBQUN4QyxpRUFLc0M7QUFFdEMsNkNBQTZDO0FBQ2hDLFFBQUEscUJBQXFCLEdBQUcsT0FBQyxDQUFDLE1BQU0sQ0FBQztJQUM1QyxPQUFPLEVBQUUsT0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7SUFDeEIsVUFBVSxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUU7SUFDdEIsSUFBSSxFQUFFLE9BQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDNUIsT0FBTyxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7Q0FDL0IsQ0FBQyxDQUFDO0FBRVUsUUFBQSxtQkFBbUIsR0FBRyxPQUFDLENBQUMsTUFBTSxDQUFDO0lBQzFDLE9BQU8sRUFBRSxPQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztJQUN6QixVQUFVLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRTtJQUN0QixPQUFPLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRTtJQUNuQixJQUFJLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUMzQixPQUFPLEVBQUUsT0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsRUFBRTtDQUNoQyxDQUFDLENBQUM7QUFFVSxRQUFBLHVCQUF1QixHQUFHLE9BQUMsQ0FBQyxNQUFNLENBQUM7SUFDOUMsT0FBTyxFQUFFLE9BQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO0lBQ3hCLFVBQVUsRUFB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TyxDQUFDO1FBQy9ELFdBQVcsRUFBRSw2REFBNkQ7S0FDM0UsQ0FBQyxDQUFDLENBQUM7SUFFSixtQkFBUSxDQUFDLFFBQVEsQ0FBQyx1QkFBdUIsRUFBRSx3Q0FBMkIsQ0FBQyxPQUFPLENBQUM7UUFDN0UsV0FBVyxFQUFFLG1EQUFtRDtLQUNqRSxDQUFDLENBQUMsQ0FBQztJQUVKLG1CQUFtQjtJQUNuQixtQkFBUSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsRUFBRSw2QkFBcUIsQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO0lBQ3ZGLG1CQUFRLENBQUMsUUFBUSxDQUFDLGVBQWUsRUFBRSwyQkFBbUIsQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQztJQUNqRixtQkFBUSxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsRUFBRSwrQkFBdUIsQ0FBQyxPQUFPLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDO0FBQy9GLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHsgeiB9IGZyb20gJ3pvZCc7XG5cbmltcG9ydCB7IHJlZ2lzdHJ5IH0gZnJvbSAnLi9yZWdpc3RyeSc7XG5pbXBvcnQge1xuICBBSUdlbmVyYXRlQm9keVNjaGVtYSxcbiAgUGx1Z2luRGVwbG95R2VuZXJhdGVkU2NoZW1hLFxufSBmcm9tICcuLi92YWxpZGF0aW9uL2FpLXNjaGVtYXMnO1xuaW1wb3J0IHtcbiAgQWNjZXNzTW9kaWZpZXJTY2hlbWEsXG4gIFBhZ2luYXRpb25TY2hlbWEsXG4gIEJhc2VGaWx0ZXJTY2hlbWEsXG59IGZyb20gJy4uL3ZhbGlkYXRpb24vY29tbW9uLXNjaGVtYXMnO1xuaW1wb3J0IHtcbiAgTWVzc2FnZUZpbHRlclNjaGVtYSxcbiAgTWVzc2FnZUNyZWF0ZVNjaGVtYSxcbiAgTWVzc2FnZVJlcGx5U2NoZW1hLFxufSBmcm9tICcuLi92YWxpZGF0aW9uL21lc3NhZ2Utc2NoZW1hcyc7XG5pbXBvcnQge1xuICBQaXBlbGluZUZpbHRlclNjaGVtYSxcbiAgUGlwZWxpbmVDcmVhdGVTY2hlbWEsXG4gIFBpcGVsaW5lVXBkYXRlU2NoZW1hLFxufSBmcm9tICcuLi92YWxpZGF0aW9uL3BpcGVsaW5lLXNjaGVtYXMnO1xuaW1wb3J0IHtcbiAgUGx1Z2luRmlsdGVyU2NoZW1hLFxuICBQbHVnaW5DcmVhdGVTY2hlbWEsXG4gIFBsdWdpblVwZGF0ZVNjaGVtYSxcbiAgUGx1Z2luVXBsb2FkQm9keVNjaGVtYSxcbn0gZnJvbSAnLi4vdmFsaWRhdGlvbi9wbHVnaW4tc2NoZW1hcyc7XG5cbi8vIFJlc3BvbnNlIHNjaGVtYXMgKGV4cG9ydGVkIGZvciB0eXBlIHVzYWdlKVxuZXhwb3J0IGNvbnN0IFN1Y2Nlc3NSZXNwb25zZVNjaGVtYSA9IHoub2JqZWN0KHtcbiAgc3VjY2Vzczogei5saXRlcmFsKHRydWUpLFxuICBzdGF0dXNDb2RlOiB6Lm51bWJlcigpLFxuICBkYXRhOiB6LnVua25vd24oKS5vcHRpb25hbCgpLFxuICBtZXNzYWdlOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG59KTtcblxuZXhwb3J0IGNvbnN0IEVycm9yUmVzcG9uc2VTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIHN1Y2Nlc3M6IHoubGl0ZXJhbChmYWxzZSksXG4gIHN0YXR1c0NvZGU6IHoubnVtYmVyKCksXG4gIG1lc3NhZ2U6IHouc3RyaW5nKCksXG4gIGNvZGU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZGV0YWlsczogei51bmtub3duKCkub3B0aW9uYWwoKSxcbn0pO1xuXG5leHBvcnQgY29uc3QgUGFnaW5hdGVkUmVzcG9uc2VTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIHN1Y2Nlc3M6IHoubGl0ZXJhbCh0cnVlKSxcbiAgc3RhdHVzQ29kZTogei5udW1iZXIoKSxcbiAgZGF0YTogei5hcnJheSh6LnVua25vd24oKSksXG4gIGNvdW50OiB6Lm51bWJlcigpLFxuICBsaW1pdDogei5udW1iZXIoKSxcbiAgb2Zmc2V0OiB6Lm51bWJlcigpLFxuICB0b3RhbDogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICBtZXNzYWdlOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG59KTtcblxuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyU2NoZW1hcygpOiB2b2lkIHtcbiAgLy8gQ29tbW9uIHNjaGVtYXNcbiAgcmVnaXN0cnkucmVnaXN0ZXIoJ0FjY2Vzc01vZGlmaWVyJywgQWNjZXNzTW9kaWZpZXJTY2hlbWEub3BlbmFwaSh7XG4gICAgZGVzY3JpcHRpb246ICdSZXNvdXJjZSB2aXNpYmlsaXR5OiBcInB1YmxpY1wiICh2aXNpYmxlIHRvIGFsbCkgb3IgXCJwcml2YXRlXCIgKG9yZ2FuaXphdGlvbiBvbmx5KScsXG4gICAgZXhhbXBsZTogJ3ByaXZhdGUnLFxuICB9KSk7XG5cbiAgcmVnaXN0cnkucmVnaXN0ZXIoJ1BhZ2luYXRpb25QYXJhbXMnLCBQYWdpbmF0aW9uU2NoZW1hLm9wZW5hcGkoe1xuICAgIGRlc2NyaXB0aW9uOiAnU3RhbmRhcmQgcGFnaW5hdGlvbiBhbmQgc29ydGluZyBwYXJhbWV0ZXJzJyxcbiAgfSkpO1xuXG4gIHJlZ2lzdHJ5LnJlZ2lzdGVyKCdCYXNlRmlsdGVyJywgQmFzZUZpbHRlclNjaGVtYS5vcGVuYXBpKHtcbiAgICBkZXNjcmlwdGlvbjogJ0NvbW1vbiBmaWx0ZXIgZmllbGRzIHNoYXJlZCBieSBhbGwgZW50aXR5IHF1ZXJpZXMnLFxuICB9KSk7XG5cbiAgLy8gUGlwZWxpbmUgc2NoZW1hc1xuICByZWdpc3RyeS5yZWdpc3RlcignUGlwZWxpbmVGaWx0ZXInLCBQaXBlbGluZUZpbHRlclNjaGVtYS5vcGVuYXBpKHtcbiAgICBkZXNjcmlwdGlvbjogJ1F1ZXJ5IGZpbHRlcnMgZm9yIGxpc3RpbmcgcGlwZWxpbmVzJyxcbiAgfSkpO1xuXG4gIHJlZ2lzdHJ5LnJlZ2lzdGVyKCdQaXBlbGluZUNyZWF0ZScsIFBpcGVsaW5lQ3JlYXRlU2NoZW1hLm9wZW5hcGkoe1xuICAgIGRlc2NyaXB0aW9uOiAnUmVxdWVzdCBib2R5IGZvciBjcmVhdGluZyBhIG5ldyBwaXBlbGluZScsXG4gIH0pKTtcblxuICByZWdpc3RyeS5yZWdpc3RlcignUGlwZWxpbmVVcGRhdGUnLCBQaXBlbGluZVVwZGF0ZVNjaGVtYS5vcGVuYXBpKHtcbiAgICBkZXNjcmlwdGlvbjogJ1JlcXVlc3QgYm9keSBmb3IgdXBkYXRpbmcgYW4gZXhpc3RpbmcgcGlwZWxpbmUnLFxuICB9KSk7XG5cbiAgLy8gUGx1Z2luIHNjaGVtYXNcbiAgcmVnaXN0cnkucmVnaXN0ZXIoJ1BsdWdpbkZpbHRlcicsIFBsdWdpbkZpbHRlclNjaGVtYS5vcGVuYXBpKHtcbiAgICBkZXNjcmlwdGlvbjogJ1F1ZXJ5IGZpbHRlcnMgZm9yIGxpc3RpbmcgcGx1Z2lucycsXG4gIH0pKTtcblxuICByZWdpc3RyeS5yZWdpc3RlcignUGx1Z2luQ3JlYXRlJywgUGx1Z2luQ3JlYXRlU2NoZW1hLm9wZW5hcGkoe1xuICAgIGRlc2NyaXB0aW9uOiAnUmVxdWVzdCBib2R5IGZvciBjcmVhdGluZyBhIG5ldyBwbHVnaW4nLFxuICB9KSk7XG5cbiAgcmVnaXN0cnkucmVnaXN0ZXIoJ1BsdWdpblVwZGF0ZScsIFBsdWdpblVwZGF0ZVNjaGVtYS5vcGVuYXBpKHtcbiAgICBkZXNjcmlwdGlvbjogJ1JlcXVlc3QgYm9keSBmb3IgdXBkYXRpbmcgYW4gZXhpc3RpbmcgcGx1Z2luJyxcbiAgfSkpO1xuXG4gIHJlZ2lzdHJ5LnJlZ2lzdGVyKCdQbHVnaW5VcGxvYWRCb2R5JywgUGx1Z2luVXBsb2FkQm9keVNjaGVtYS5vcGVuYXBpKHtcbiAgICBkZXNjcmlwdGlvbjogJ01ldGFkYXRhIGZvciBwbHVnaW4gWklQIHVwbG9hZCAobXVsdGlwYXJ0IGZvcm0tZGF0YSknLFxuICB9KSk7XG5cbiAgLy8gTWVzc2FnZSBzY2hlbWFzXG4gIHJlZ2lzdHJ5LnJlZ2lzdGVyKCdNZXNzYWdlRmlsdGVyJywgTWVzc2FnZUZpbHRlclNjaGVtYS5vcGVuYXBpKHtcbiAgICBkZXNjcmlwdGlvbjogJ1F1ZXJ5IGZpbHRlcnMgZm9yIGxpc3RpbmcgbWVzc2FnZXMnLFxuICB9KSk7XG5cbiAgcmVnaXN0cnkucmVnaXN0ZXIoJ01lc3NhZ2VDcmVhdGUnLCBNZXNzYWdlQ3JlYXRlU2NoZW1hLm9wZW5hcGkoe1xuICAgIGRlc2NyaXB0aW9uOiAnUmVxdWVzdCBib2R5IGZvciBjcmVhdGluZyBhIG5ldyBtZXNzYWdlIG9yIGFubm91bmNlbWVudCcsXG4gIH0pKTtcblxuICByZWdpc3RyeS5yZWdpc3RlcignTWVzc2FnZVJlcGx5JywgTWVzc2FnZVJlcGx5U2NoZW1hLm9wZW5hcGkoe1xuICAgIGRlc2NyaXB0aW9uOiAnUmVxdWVzdCBib2R5IGZvciByZXBseWluZyB0byBhIG1lc3NhZ2UgdGhyZWFkJyxcbiAgfSkpO1xuXG4gIC8vIEFJIHNjaGVtYXNcbiAgcmVnaXN0cnkucmVnaXN0ZXIoJ0FJR2VuZXJhdGVCb2R5JywgQUlHZW5lcmF0ZUJvZHlTY2hlbWEub3BlbmFwaSh7XG4gICAgZGVzY3JpcHRpb246ICdSZXF1ZXN0IGJvZHkgZm9yIEFJLXBvd2VyZWQgZ2VuZXJhdGlvbiAocGlwZWxpbmUgb3IgcGx1Z2luKScsXG4gIH0pKTtcblxuICByZWdpc3RyeS5yZWdpc3RlcignUGx1Z2luRGVwbG95R2VuZXJhdGVkJywgUGx1Z2luRGVwbG95R2VuZXJhdGVkU2NoZW1hLm9wZW5hcGkoe1xuICAgIGRlc2NyaXB0aW9uOiAnUmVxdWVzdCBib2R5IGZvciBkZXBsb3lpbmcgYW4gQUktZ2VuZXJhdGVkIHBsdWdpbicsXG4gIH0pKTtcblxuICAvLyBSZXNwb25zZSBzY2hlbWFzXG4gIHJlZ2lzdHJ5LnJlZ2lzdGVyKCdTdWNjZXNzUmVzcG9uc2UnLCBTdWNjZXNzUmVzcG9uc2VTY2hlbWEub3BlbmFwaSgnU3VjY2Vzc1Jlc3BvbnNlJykpO1xuICByZWdpc3RyeS5yZWdpc3RlcignRXJyb3JSZXNwb25zZScsIEVycm9yUmVzcG9uc2VTY2hlbWEub3BlbmFwaSgnRXJyb3JSZXNwb25zZScpKTtcbiAgcmVnaXN0cnkucmVnaXN0ZXIoJ1BhZ2luYXRlZFJlc3BvbnNlJywgUGFnaW5hdGVkUmVzcG9uc2VTY2hlbWEub3BlbmFwaSgnUGFnaW5hdGVkUmVzcG9uc2UnKSk7XG59XG4iXX0=
@@ -0,0 +1,47 @@
1
+ import { Request, Response, Router } from 'express';
2
+ /**
3
+ * Options for health check endpoint.
4
+ */
5
+ export interface HealthCheckOptions {
6
+ /** Service name */
7
+ serviceName: string;
8
+ /** Service version (optional) */
9
+ version?: string;
10
+ /** Custom health check function for dependencies */
11
+ checkDependencies?: () => Promise<Record<string, 'connected' | 'disconnected' | 'unknown'>>;
12
+ }
13
+ /**
14
+ * Create a health check request handler.
15
+ *
16
+ * @param options - Health check options
17
+ * @returns Express request handler
18
+ *
19
+ * @example
20
+ * ```typescript
21
+ * app.get('/health', createHealthCheck({
22
+ * serviceName: 'get-plugin',
23
+ * version: '1.0.0',
24
+ * checkDependencies: async () => ({
25
+ * database: dbConnection.isConnected() ? 'connected' : 'disconnected',
26
+ * }),
27
+ * }));
28
+ * ```
29
+ */
30
+ export declare function createHealthCheck(options: HealthCheckOptions): (_req: Request, res: Response) => Promise<void>;
31
+ /**
32
+ * Create a health check router with /health endpoint.
33
+ *
34
+ * @param options - Health check options
35
+ * @returns Express router with health endpoint
36
+ *
37
+ * @example
38
+ * ```typescript
39
+ * const healthRouter = createHealthRouter({
40
+ * serviceName: 'get-plugin',
41
+ * });
42
+ *
43
+ * app.use(healthRouter);
44
+ * // Endpoint available at GET /health
45
+ * ```
46
+ */
47
+ export declare function createHealthRouter(options: HealthCheckOptions): Router;
@@ -0,0 +1,81 @@
1
+ "use strict";
2
+ // Copyright 2026 Pipeline Builder Contributors
3
+ // SPDX-License-Identifier: Apache-2.0
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ exports.createHealthCheck = createHealthCheck;
6
+ exports.createHealthRouter = createHealthRouter;
7
+ const express_1 = require("express");
8
+ const response_1 = require("../utils/response");
9
+ const startTime = Date.now();
10
+ /**
11
+ * Create a health check request handler.
12
+ *
13
+ * @param options - Health check options
14
+ * @returns Express request handler
15
+ *
16
+ * @example
17
+ * ```typescript
18
+ * app.get('/health', createHealthCheck({
19
+ * serviceName: 'get-plugin',
20
+ * version: '1.0.0',
21
+ * checkDependencies: async () => ({
22
+ * database: dbConnection.isConnected() ? 'connected' : 'disconnected',
23
+ * }),
24
+ * }));
25
+ * ```
26
+ */
27
+ function createHealthCheck(options) {
28
+ return async (_req, res) => {
29
+ const { serviceName, version, checkDependencies } = options;
30
+ const response = {
31
+ status: 'healthy',
32
+ service: serviceName,
33
+ timestamp: new Date().toISOString(),
34
+ uptime: Math.floor((Date.now() - startTime) / 1000),
35
+ };
36
+ if (version) {
37
+ response.version = version;
38
+ }
39
+ if (checkDependencies) {
40
+ try {
41
+ response.dependencies = await checkDependencies();
42
+ // Mark as unhealthy if any dependency is disconnected
43
+ const hasDisconnected = Object.values(response.dependencies).some((status) => status === 'disconnected');
44
+ if (hasDisconnected) {
45
+ response.status = 'unhealthy';
46
+ (0, response_1.sendError)(res, 503, 'Service unhealthy', undefined, response);
47
+ return;
48
+ }
49
+ }
50
+ catch (error) {
51
+ response.status = 'unhealthy';
52
+ response.dependencies = { check: 'disconnected' };
53
+ (0, response_1.sendError)(res, 503, 'Service unhealthy', undefined, response);
54
+ return;
55
+ }
56
+ }
57
+ (0, response_1.sendSuccess)(res, 200, response);
58
+ };
59
+ }
60
+ /**
61
+ * Create a health check router with /health endpoint.
62
+ *
63
+ * @param options - Health check options
64
+ * @returns Express router with health endpoint
65
+ *
66
+ * @example
67
+ * ```typescript
68
+ * const healthRouter = createHealthRouter({
69
+ * serviceName: 'get-plugin',
70
+ * });
71
+ *
72
+ * app.use(healthRouter);
73
+ * // Endpoint available at GET /health
74
+ * ```
75
+ */
76
+ function createHealthRouter(options) {
77
+ const router = (0, express_1.Router)();
78
+ router.get('/health', createHealthCheck(options));
79
+ return router;
80
+ }
81
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVhbHRoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3JvdXRlcy9oZWFsdGgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7O0FBcUN0Qyw4Q0F1Q0M7QUFrQkQsZ0RBSUM7QUFoR0QscUNBQW9EO0FBRXBELGdEQUEyRDtBQUUzRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7QUFjN0I7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQkc7QUFDSCxTQUFnQixpQkFBaUIsQ0FBQyxPQUEyQjtJQUMzRCxPQUFPLEtBQUssRUFBRSxJQUFhLEVBQUUsR0FBYSxFQUFpQixFQUFFO1FBQzNELE1BQU0sRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLEdBQUcsT0FBTyxDQUFDO1FBRTVELE1BQU0sUUFBUSxHQUF3QjtZQUNwQyxNQUFNLEVBQUUsU0FBUztZQUNqQixPQUFPLEVBQUUsV0FBVztZQUNwQixTQUFTLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUU7WUFDbkMsTUFBTSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDO1NBQ3BELENBQUM7UUFFRixJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQ1osUUFBUSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDN0IsQ0FBQztRQUVELElBQUksaUJBQWlCLEVBQUUsQ0FBQztZQUN0QixJQUFJLENBQUM7Z0JBQ0gsUUFBUSxDQUFDLFlBQVksR0FBRyxNQUFNLGlCQUFpQixFQUFFLENBQUM7Z0JBRWxELHNEQUFzRDtnQkFDdEQsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUMvRCxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxLQUFLLGNBQWMsQ0FDdEMsQ0FBQztnQkFFRixJQUFJLGVBQWUsRUFBRSxDQUFDO29CQUNwQixRQUFRLENBQUMsTUFBTSxHQUFHLFdBQVcsQ0FBQztvQkFDOUIsSUFBQSxvQkFBUyxFQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsbUJBQW1CLEVBQUUsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFDO29CQUM5RCxPQUFPO2dCQUNULENBQUM7WUFDSCxDQUFDO1lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztnQkFDZixRQUFRLENBQUMsTUFBTSxHQUFHLFdBQVcsQ0FBQztnQkFDOUIsUUFBUSxDQUFDLFlBQVksR0FBRyxFQUFFLEtBQUssRUFBRSxjQUFjLEVBQUUsQ0FBQztnQkFDbEQsSUFBQSxvQkFBUyxFQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsbUJBQW1CLEVBQUUsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFDO2dCQUM5RCxPQUFPO1lBQ1QsQ0FBQztRQUNILENBQUM7UUFFRCxJQUFBLHNCQUFXLEVBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUNsQyxDQUFDLENBQUM7QUFDSixDQUFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsU0FBZ0Isa0JBQWtCLENBQUMsT0FBMkI7SUFDNUQsTUFBTSxNQUFNLEdBQUcsSUFBQSxnQkFBTSxHQUFFLENBQUM7SUFDeEIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUNsRCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB7IFJlcXVlc3QsIFJlc3BvbnNlLCBSb3V0ZXIgfSBmcm9tICdleHByZXNzJztcbmltcG9ydCB7IEhlYWx0aENoZWNrUmVzcG9uc2UgfSBmcm9tICcuLi90eXBlcy9jb21tb24nO1xuaW1wb3J0IHsgc2VuZFN1Y2Nlc3MsIHNlbmRFcnJvciB9IGZyb20gJy4uL3V0aWxzL3Jlc3BvbnNlJztcblxuY29uc3Qgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcblxuLyoqXG4gKiBPcHRpb25zIGZvciBoZWFsdGggY2hlY2sgZW5kcG9pbnQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSGVhbHRoQ2hlY2tPcHRpb25zIHtcbiAgLyoqIFNlcnZpY2UgbmFtZSAqL1xuICBzZXJ2aWNlTmFtZTogc3RyaW5nO1xuICAvKiogU2VydmljZSB2ZXJzaW9uIChvcHRpb25hbCkgKi9cbiAgdmVyc2lvbj86IHN0cmluZztcbiAgLyoqIEN1c3RvbSBoZWFsdGggY2hlY2sgZnVuY3Rpb24gZm9yIGRlcGVuZGVuY2llcyAqL1xuICBjaGVja0RlcGVuZGVuY2llcz86ICgpID0+IFByb21pc2U8UmVjb3JkPHN0cmluZywgJ2Nvbm5lY3RlZCcgfCAnZGlzY29ubmVjdGVkJyB8ICd1bmtub3duJz4+O1xufVxuXG4vKipcbiAqIENyZWF0ZSBhIGhlYWx0aCBjaGVjayByZXF1ZXN0IGhhbmRsZXIuXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBIZWFsdGggY2hlY2sgb3B0aW9uc1xuICogQHJldHVybnMgRXhwcmVzcyByZXF1ZXN0IGhhbmRsZXJcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogYXBwLmdldCgnL2hlYWx0aCcsIGNyZWF0ZUhlYWx0aENoZWNrKHtcbiAqICAgc2VydmljZU5hbWU6ICdnZXQtcGx1Z2luJyxcbiAqICAgdmVyc2lvbjogJzEuMC4wJyxcbiAqICAgY2hlY2tEZXBlbmRlbmNpZXM6IGFzeW5jICgpID0+ICh7XG4gKiAgICAgZGF0YWJhc2U6IGRiQ29ubmVjdGlvbi5pc0Nvbm5lY3RlZCgpID8gJ2Nvbm5lY3RlZCcgOiAnZGlzY29ubmVjdGVkJyxcbiAqICAgfSksXG4gKiB9KSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUhlYWx0aENoZWNrKG9wdGlvbnM6IEhlYWx0aENoZWNrT3B0aW9ucykge1xuICByZXR1cm4gYXN5bmMgKF9yZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICBjb25zdCB7IHNlcnZpY2VOYW1lLCB2ZXJzaW9uLCBjaGVja0RlcGVuZGVuY2llcyB9ID0gb3B0aW9ucztcblxuICAgIGNvbnN0IHJlc3BvbnNlOiBIZWFsdGhDaGVja1Jlc3BvbnNlID0ge1xuICAgICAgc3RhdHVzOiAnaGVhbHRoeScsXG4gICAgICBzZXJ2aWNlOiBzZXJ2aWNlTmFtZSxcbiAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgdXB0aW1lOiBNYXRoLmZsb29yKChEYXRlLm5vdygpIC0gc3RhcnRUaW1lKSAvIDEwMDApLFxuICAgIH07XG5cbiAgICBpZiAodmVyc2lvbikge1xuICAgICAgcmVzcG9uc2UudmVyc2lvbiA9IHZlcnNpb247XG4gICAgfVxuXG4gICAgaWYgKGNoZWNrRGVwZW5kZW5jaWVzKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXNwb25zZS5kZXBlbmRlbmNpZXMgPSBhd2FpdCBjaGVja0RlcGVuZGVuY2llcygpO1xuXG4gICAgICAgIC8vIE1hcmsgYXMgdW5oZWFsdGh5IGlmIGFueSBkZXBlbmRlbmN5IGlzIGRpc2Nvbm5lY3RlZFxuICAgICAgICBjb25zdCBoYXNEaXNjb25uZWN0ZWQgPSBPYmplY3QudmFsdWVzKHJlc3BvbnNlLmRlcGVuZGVuY2llcykuc29tZShcbiAgICAgICAgICAoc3RhdHVzKSA9PiBzdGF0dXMgPT09ICdkaXNjb25uZWN0ZWQnLFxuICAgICAgICApO1xuXG4gICAgICAgIGlmIChoYXNEaXNjb25uZWN0ZWQpIHtcbiAgICAgICAgICByZXNwb25zZS5zdGF0dXMgPSAndW5oZWFsdGh5JztcbiAgICAgICAgICBzZW5kRXJyb3IocmVzLCA1MDMsICdTZXJ2aWNlIHVuaGVhbHRoeScsIHVuZGVmaW5lZCwgcmVzcG9uc2UpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgcmVzcG9uc2Uuc3RhdHVzID0gJ3VuaGVhbHRoeSc7XG4gICAgICAgIHJlc3BvbnNlLmRlcGVuZGVuY2llcyA9IHsgY2hlY2s6ICdkaXNjb25uZWN0ZWQnIH07XG4gICAgICAgIHNlbmRFcnJvcihyZXMsIDUwMywgJ1NlcnZpY2UgdW5oZWFsdGh5JywgdW5kZWZpbmVkLCByZXNwb25zZSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzZW5kU3VjY2VzcyhyZXMsIDIwMCwgcmVzcG9uc2UpO1xuICB9O1xufVxuXG4vKipcbiAqIENyZWF0ZSBhIGhlYWx0aCBjaGVjayByb3V0ZXIgd2l0aCAvaGVhbHRoIGVuZHBvaW50LlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gSGVhbHRoIGNoZWNrIG9wdGlvbnNcbiAqIEByZXR1cm5zIEV4cHJlc3Mgcm91dGVyIHdpdGggaGVhbHRoIGVuZHBvaW50XG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IGhlYWx0aFJvdXRlciA9IGNyZWF0ZUhlYWx0aFJvdXRlcih7XG4gKiAgIHNlcnZpY2VOYW1lOiAnZ2V0LXBsdWdpbicsXG4gKiB9KTtcbiAqXG4gKiBhcHAudXNlKGhlYWx0aFJvdXRlcik7XG4gKiAvLyBFbmRwb2ludCBhdmFpbGFibGUgYXQgR0VUIC9oZWFsdGhcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlSGVhbHRoUm91dGVyKG9wdGlvbnM6IEhlYWx0aENoZWNrT3B0aW9ucyk6IFJvdXRlciB7XG4gIGNvbnN0IHJvdXRlciA9IFJvdXRlcigpO1xuICByb3V0ZXIuZ2V0KCcvaGVhbHRoJywgY3JlYXRlSGVhbHRoQ2hlY2sob3B0aW9ucykpO1xuICByZXR1cm4gcm91dGVyO1xufVxuIl19
@@ -0,0 +1 @@
1
+ export * from './health';
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ // Copyright 2026 Pipeline Builder Contributors
3
+ // SPDX-License-Identifier: Apache-2.0
4
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
5
+ if (k2 === undefined) k2 = k;
6
+ var desc = Object.getOwnPropertyDescriptor(m, k);
7
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
8
+ desc = { enumerable: true, get: function() { return m[k]; } };
9
+ }
10
+ Object.defineProperty(o, k2, desc);
11
+ }) : (function(o, m, k, k2) {
12
+ if (k2 === undefined) k2 = k;
13
+ o[k2] = m[k];
14
+ }));
15
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
16
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
17
+ };
18
+ Object.defineProperty(exports, "__esModule", { value: true });
19
+ __exportStar(require("./health"), exports);
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcm91dGVzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDOzs7Ozs7Ozs7Ozs7Ozs7O0FBRXRDLDJDQUF5QiIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5leHBvcnQgKiBmcm9tICcuL2hlYWx0aCc7XG4iXX0=
@@ -0,0 +1,13 @@
1
+ export interface AuditEntry {
2
+ userId: string;
3
+ userEmail?: string;
4
+ orgId?: string;
5
+ action: string;
6
+ targetType: string;
7
+ targetId?: string;
8
+ targetName?: string;
9
+ detail?: Record<string, unknown>;
10
+ ipAddress?: string;
11
+ }
12
+ export declare function logAdminAction(entry: AuditEntry): void;
13
+ export declare function getAuditQueue(): AuditEntry[];