@pipeline-builder/api-core 3.4.63 → 3.4.64

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 (93) hide show
  1. package/README.md +91 -60
  2. package/lib/constants/ai-providers.js +7 -12
  3. package/lib/constants/http-status.js +2 -5
  4. package/lib/constants/index.d.ts +3 -3
  5. package/lib/constants/index.js +4 -20
  6. package/lib/constants/time.js +4 -7
  7. package/lib/errors/app-errors.d.ts +1 -1
  8. package/lib/errors/app-errors.js +13 -22
  9. package/lib/errors/index.d.ts +1 -1
  10. package/lib/errors/index.js +2 -18
  11. package/lib/helpers/access-helpers.js +8 -11
  12. package/lib/helpers/crud-helpers.js +6 -10
  13. package/lib/helpers/index.d.ts +4 -4
  14. package/lib/helpers/index.js +5 -21
  15. package/lib/helpers/org-hierarchy.js +10 -18
  16. package/lib/helpers/sse-helpers.js +7 -11
  17. package/lib/index.d.ts +10 -10
  18. package/lib/index.js +11 -27
  19. package/lib/middleware/auth.d.ts +1 -1
  20. package/lib/middleware/auth.js +38 -54
  21. package/lib/middleware/index.d.ts +2 -2
  22. package/lib/middleware/index.js +3 -19
  23. package/lib/middleware/mongo-sanitize.js +2 -5
  24. package/lib/openapi/extend-zod.js +4 -6
  25. package/lib/openapi/index.d.ts +2 -2
  26. package/lib/openapi/index.js +2 -7
  27. package/lib/openapi/registry.js +9 -13
  28. package/lib/openapi/routes/billing-routes.js +10 -13
  29. package/lib/openapi/routes/index.js +12 -15
  30. package/lib/openapi/routes/message-routes.js +14 -17
  31. package/lib/openapi/routes/pipeline-routes.js +12 -15
  32. package/lib/openapi/routes/plugin-routes.js +13 -16
  33. package/lib/openapi/routes/quota-routes.js +9 -12
  34. package/lib/openapi/schema-registry.js +47 -51
  35. package/lib/routes/health.d.ts +1 -1
  36. package/lib/routes/health.js +10 -15
  37. package/lib/routes/index.d.ts +1 -1
  38. package/lib/routes/index.js +2 -18
  39. package/lib/services/cache-service.js +3 -8
  40. package/lib/services/compliance-client.d.ts +1 -1
  41. package/lib/services/compliance-client.js +6 -9
  42. package/lib/services/compliance-event-subscriber.d.ts +1 -1
  43. package/lib/services/compliance-event-subscriber.js +13 -15
  44. package/lib/services/compliance-queue.js +5 -9
  45. package/lib/services/entity-events.js +4 -7
  46. package/lib/services/http-client.d.ts +1 -1
  47. package/lib/services/http-client.js +15 -53
  48. package/lib/services/index.d.ts +10 -10
  49. package/lib/services/index.js +10 -37
  50. package/lib/services/quota.d.ts +2 -2
  51. package/lib/services/quota.js +18 -24
  52. package/lib/services/remote-audit-client.js +8 -11
  53. package/lib/services/retry-strategy.js +12 -21
  54. package/lib/types/audit-events.js +2 -3
  55. package/lib/types/common.js +6 -11
  56. package/lib/types/error-codes.js +6 -10
  57. package/lib/types/feature-flags.d.ts +1 -1
  58. package/lib/types/feature-flags.js +13 -19
  59. package/lib/types/http.js +2 -3
  60. package/lib/types/index.d.ts +7 -7
  61. package/lib/types/index.js +8 -24
  62. package/lib/types/pipeline.js +4 -7
  63. package/lib/types/quota-tiers.js +8 -13
  64. package/lib/utils/alias-resolver.js +5 -9
  65. package/lib/utils/audit.d.ts +1 -1
  66. package/lib/utils/audit.js +2 -5
  67. package/lib/utils/concurrency.js +2 -5
  68. package/lib/utils/crash-handlers.js +3 -6
  69. package/lib/utils/headers.js +2 -5
  70. package/lib/utils/identity.d.ts +1 -1
  71. package/lib/utils/identity.js +8 -12
  72. package/lib/utils/index.d.ts +13 -13
  73. package/lib/utils/index.js +14 -30
  74. package/lib/utils/logger.js +12 -19
  75. package/lib/utils/metric-emitter.js +4 -9
  76. package/lib/utils/object.js +2 -5
  77. package/lib/utils/org-aws-credentials.js +4 -10
  78. package/lib/utils/params.d.ts +1 -1
  79. package/lib/utils/params.js +15 -28
  80. package/lib/utils/response.d.ts +3 -3
  81. package/lib/utils/response.js +18 -30
  82. package/lib/utils/secret-encryption.js +17 -29
  83. package/lib/validation/ai-schemas.js +30 -33
  84. package/lib/validation/common-schemas.d.ts +1 -1
  85. package/lib/validation/common-schemas.js +22 -25
  86. package/lib/validation/index.d.ts +6 -6
  87. package/lib/validation/index.js +7 -23
  88. package/lib/validation/message-schemas.js +22 -25
  89. package/lib/validation/middleware.d.ts +2 -2
  90. package/lib/validation/middleware.js +7 -13
  91. package/lib/validation/pipeline-schemas.js +46 -49
  92. package/lib/validation/plugin-schemas.js +57 -60
  93. package/package.json +18 -11
package/README.md CHANGED
@@ -2,66 +2,97 @@
2
2
 
3
3
  📖 **[View documentation](https://mwashburn160.github.io/pipeline-builder/)**
4
4
 
5
- Core server-side utilities shared by every backend service in [Pipeline Builder](https://mwashburn160.github.io/pipeline-builder/): JWT authentication middleware, structured logging, response helpers, error codes, quota enforcement, parameter parsing, validation schemas, an internal HTTP client, and the AI provider catalog.
6
-
7
- ## Key Exports
8
-
9
- ### Authentication Middleware
10
- - `requireAuth` — JWT authentication middleware (also accepts `RequireAuthOptions` for `allowOrgHeaderOverride` on internal-service routes)
11
- - `requireAdmin`, `requireSystemAdmin` role gates (admin/owner; system-org admin/owner)
12
- - `requireFeature` — feature-flag gate
13
- - `isSystemOrg`, `isSystemAdmin`, `isServicePrincipal` — authorization checks (last one is true when `req.user.sub` starts with `service:`)
14
- - `resolveAccessModifier(req, requested)` — coerces `requested='public'` to `'private'` unless caller is admin/owner
15
-
16
- ### Service-to-Service Tokens
17
- - `signServiceToken({ serviceName, orgId?, orgName?, ttlSeconds? })` — mints a short-lived JWT identifying the calling service. Default TTL 5 minutes.
18
- - `getServiceAuthHeader(opts)` convenience wrapper returning `Bearer <token>` for direct use in fetch/axios headers.
19
-
20
- Tokens satisfy the standard `requireAuth` middleware unmodified (sub: `service:<name>`, role: `owner`, type: `access`). Use for inter-service HTTP calls (billing → message renewals, platform → billing on register, etc.).
21
-
22
- ### Request/Response Utilities
23
- - `sendSuccess`, `sendError`, `sendBadRequest`, `sendInternalError`, `sendQuotaExceeded`, `sendPaginated`, `sendPaginatedNested`
24
- - `extractDbError` — Extract database error details
25
- - `ErrorCode`, `getStatusForErrorCode` Standard error codes
26
- - `AppError`, `NotFoundError`, `ForbiddenError`, `ValidationError`, `ConflictError`, `UnauthorizedError` — Typed HTTP error classes
27
-
28
- ### Parameter Parsing
29
- - `getParam`, `getRequiredParam`, `getParams`, `getOrgId`, `getAuthHeader`
30
- - `parseQueryBoolean`, `parseQueryInt`, `parseQueryString`
31
-
32
- ### Validation Schemas (Zod)
33
- - `AIGenerateBodySchema` — Validates AI generation requests (prompt, provider, model)
34
- - `AIGenerateFromUrlBodySchema` Validates Git URL generation requests (gitUrl, provider, model, apiKey?, repoToken?)
35
- - Plugin, pipeline, and message schemas (`PluginCreateSchema`, `PipelineFilterSchema`, `MessageCreateSchema`, etc.) plus shared building blocks (`PaginationSchema`, `UUIDSchema`, `AccessModifierSchema`)
36
-
37
- ### Internal HTTP Client
38
- - `InternalHttpClient`, `createSafeClient` Service-to-service HTTP communication
39
- - `ServiceConfig`, `RequestOptions` Client types
40
- - `createComplianceClient` / `ComplianceClient` — Typed client for the compliance service, built on the safe HTTP client
41
-
42
- ### AI Provider Constants
43
- - `AI_PROVIDER_CATALOG` Static provider/model catalog
44
- - `AI_PROVIDER_ENV_VARS` Provider-to-env-var mapping
45
- - `getAIProviderModels` Get models for a provider
46
-
47
- ### Logging
48
- - `createLogger` Winston logger factory
49
-
50
- ### Caching & Events
51
- - `CacheService`, `createCacheService` In-memory TTL cache with an optional Redis backend
52
- - `entityEvents` Process-local domain event pub/sub for entity changes
53
-
54
- ### OpenAPI
55
- - `registry`, `generateOpenApiSpec` Shared schema registry and OpenAPI spec generation, so services expose consistent API documentation
56
-
57
- ### Quota Service
58
- - `QuotaService` (type), `createQuotaService` — Quota enforcement client
59
- - `QuotaType` — `'plugins' | 'pipelines' | 'apiCalls' | 'aiCalls' | 'storageBytes' | 'dashboards' | 'alertRules' | 'alertDestinations' | 'idpConfigs'`
60
- - `QuotaCheckResult`, `QuotaTier` (`'developer' | 'pro' | 'unlimited'`), `QUOTA_TIERS`, `getTierLimits` — Quota domain types and tier presets
61
-
62
- ### Health Endpoints
63
- - `createHealthRouter({ serviceName, version?, checkDependencies? })` — registers `GET /health` (liveness; always 200 unless process is dead) and `GET /ready` (readiness; 503 when any dependency is `'disconnected'`). Use as Kubernetes/ECS liveness + readiness probes respectively.
5
+ Core server-side utilities (auth middleware, response helpers, error codes, quota service, HTTP client, logging, AI provider catalog) shared by every [Pipeline Builder](https://mwashburn160.github.io/pipeline-builder/) backend service.
6
+
7
+ > Internal workspace package — consumed by other packages via `workspace:*`. Not published or used standalone.
8
+
9
+ ## Responsibilities
10
+
11
+ Provides the cross-cutting primitives every backend service depends on: JWT authentication and authorization middleware, inter-service token minting, standardized HTTP response and error helpers, request parameter/identity parsing, Zod validation schemas with an OpenAPI registry, a safe service-to-service HTTP client, quota enforcement types and client, structured Winston logging, an in-memory/Redis cache, domain event pub/sub, and the static AI provider catalog.
12
+
13
+ ## Key exports
14
+
15
+ ### Authentication & authorization (`./middleware`)
16
+ | Export | Purpose |
17
+ | --- | --- |
18
+ | `requireAuth` | JWT authentication middleware (accepts `RequireAuthOptions`, e.g. `allowOrgHeaderOverride` for internal routes) |
19
+ | `requireAdmin`, `requireSystemAdmin` | Role gates (admin/owner; system-org admin/owner) |
20
+ | `requireFeature` | Feature-flag gate |
21
+ | `isSystemOrgId`, `isSystemAdmin`, `isServicePrincipal` | Authorization helpers (`isServicePrincipal` is true when `req.user.sub` starts with `service:`) |
22
+ | `resolveAccessModifier` | Coerces requested `'public'` to `'private'` unless caller is admin/owner |
23
+ | `signServiceToken`, `getServiceAuthHeader` | Mint short-lived inter-service JWTs (default TTL 5 min) accepted unmodified by `requireAuth` |
24
+
25
+ ### Responses & errors (`./utils`, `./errors`)
26
+ | Export | Purpose |
27
+ | --- | --- |
28
+ | `sendSuccess`, `sendError`, `sendBadRequest`, `sendInternalError`, `sendQuotaExceeded` | Standardized JSON responses |
29
+ | `sendPaginated`, `sendPaginatedNested`, `parsePaginationParams` | Paginated response helpers |
30
+ | `extractDbError`, `errorMessage` | Safe DB-error and error-to-string extraction |
31
+ | `ErrorCode`, `getStatusForErrorCode` | Standard error code enum and HTTP status mapping |
32
+ | `AppError`, `NotFoundError`, `ForbiddenError`, `ValidationError`, `ConflictError`, `UnauthorizedError` | Typed HTTP error classes |
33
+
34
+ ### Request parsing (`./utils`)
35
+ | Export | Purpose |
36
+ | --- | --- |
37
+ | `getParam`, `getRequiredParam`, `getParams`, `getOrgId`, `getAuthHeader` | Request parameter/header extraction |
38
+ | `parseQueryBoolean`, `parseQueryInt`, `parseQueryString` | Query-string coercion |
39
+ | `getIdentity`, `validateIdentity` | Parsed JWT identity (`RequestIdentity`) helpers |
40
+
41
+ ### HTTP client & services (`./services`)
42
+ | Export | Purpose |
43
+ | --- | --- |
44
+ | `InternalHttpClient`, `createSafeClient` | Service-to-service HTTP client (`ServiceConfig`, `RequestOptions`) |
45
+ | `createComplianceClient` / `ComplianceClient` | Typed compliance-service client built on the safe client |
46
+ | `QuotaService`, `createQuotaService`, `QuotaType`, `QuotaCheckResult`, `QuotaTier`, `QUOTA_TIERS`, `getTierLimits` | Quota enforcement client and tier presets |
47
+ | `CacheService`, `createCacheService` | In-memory TTL cache with optional Redis backend |
48
+ | `entityEvents` | Process-local domain event pub/sub for entity changes |
49
+
50
+ ### Logging, validation & OpenAPI
51
+ | Export | Purpose |
52
+ | --- | --- |
53
+ | `createLogger`, `logger` | Winston structured logger factory and default instance |
54
+ | `AIGenerateBodySchema`, `AIGenerateFromUrlBodySchema`, `PluginCreateSchema`, `PipelineFilterSchema`, `MessageCreateSchema`, plus `PaginationSchema`, `UUIDSchema`, `AccessModifierSchema` | Zod request-validation schemas and shared building blocks |
55
+ | `registry`, `generateOpenApiSpec` | Shared schema registry and OpenAPI spec generation |
56
+
57
+ ### AI provider catalog (`./constants`)
58
+ | Export | Purpose |
59
+ | --- | --- |
60
+ | `AI_PROVIDER_CATALOG` | Static provider/model catalog |
61
+ | `AI_PROVIDER_ENV_VARS` | Provider-to-env-var mapping |
62
+ | `getAIProviderModels`, `getAIProviderName` | Lookup helpers for a provider's models/name |
63
+
64
+ ### Health (`./routes`)
65
+ | Export | Purpose |
66
+ | --- | --- |
67
+ | `createHealthRouter` | Registers `GET /health` (liveness) and `GET /ready` (readiness; 503 when a dependency is `'disconnected'`) |
68
+
69
+ ## Usage
70
+
71
+ ```ts
72
+ import {
73
+ requireAuth,
74
+ sendSuccess,
75
+ sendError,
76
+ NotFoundError,
77
+ createLogger,
78
+ } from '@pipeline-builder/api-core';
79
+
80
+ const log = createLogger('plugin-service');
81
+
82
+ router.get('/plugins/:id', requireAuth(), async (req, res) => {
83
+ const plugin = await plugins.findById(req.params.id);
84
+ if (!plugin) throw new NotFoundError('plugin not found');
85
+ return sendSuccess(res, plugin);
86
+ });
87
+ ```
88
+
89
+ ## Development
90
+
91
+ ```bash
92
+ pnpm build # projen build (compile + lint + test)
93
+ pnpm test # run the Jest test suite
94
+ ```
64
95
 
65
96
  ## License
66
97
 
67
- Apache-2.0. See [LICENSE](./LICENSE).
98
+ Apache-2.0. See [LICENSE](./LICENSE).
@@ -1,17 +1,12 @@
1
- "use strict";
2
1
  // Copyright 2026 Pipeline Builder Contributors
3
2
  // SPDX-License-Identifier: Apache-2.0
4
- Object.defineProperty(exports, "__esModule", { value: true });
5
- exports.AI_PROVIDER_ENV_VARS = exports.AI_PROVIDER_CATALOG = void 0;
6
- exports.getAIProviderModels = getAIProviderModels;
7
- exports.getAIProviderName = getAIProviderName;
8
3
  // Catalog
9
4
  /**
10
5
  * Standard AI provider catalog — single source of truth for all supported
11
6
  * providers and their models. Used by both backend services and frontend
12
7
  * components.
13
8
  */
14
- exports.AI_PROVIDER_CATALOG = {
9
+ export const AI_PROVIDER_CATALOG = {
15
10
  'anthropic': {
16
11
  id: 'anthropic',
17
12
  name: 'Anthropic',
@@ -59,7 +54,7 @@ exports.AI_PROVIDER_CATALOG = {
59
54
  * Environment variable names for each AI provider's API key.
60
55
  * Used by backend services to initialize the provider registry.
61
56
  */
62
- exports.AI_PROVIDER_ENV_VARS = {
57
+ export const AI_PROVIDER_ENV_VARS = {
63
58
  'anthropic': 'ANTHROPIC_API_KEY',
64
59
  'openai': 'OPENAI_API_KEY',
65
60
  'google': 'GOOGLE_GENERATIVE_AI_API_KEY',
@@ -73,8 +68,8 @@ exports.AI_PROVIDER_ENV_VARS = {
73
68
  * @param providerId - Provider identifier (e.g. "anthropic")
74
69
  * @returns Array of models, or empty array if the provider is unknown
75
70
  */
76
- function getAIProviderModels(providerId) {
77
- return exports.AI_PROVIDER_CATALOG[providerId]?.models ?? [];
71
+ export function getAIProviderModels(providerId) {
72
+ return AI_PROVIDER_CATALOG[providerId]?.models ?? [];
78
73
  }
79
74
  /**
80
75
  * Get the display name for a provider ID.
@@ -82,7 +77,7 @@ function getAIProviderModels(providerId) {
82
77
  * @param providerId - Provider identifier (e.g. "anthropic")
83
78
  * @returns Display name, or the raw ID if the provider is unknown
84
79
  */
85
- function getAIProviderName(providerId) {
86
- return exports.AI_PROVIDER_CATALOG[providerId]?.name ?? providerId;
80
+ export function getAIProviderName(providerId) {
81
+ return AI_PROVIDER_CATALOG[providerId]?.name ?? providerId;
87
82
  }
88
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWktcHJvdmlkZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbnN0YW50cy9haS1wcm92aWRlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7OztBQThGdEMsa0RBRUM7QUFRRCw4Q0FFQztBQXBGRCxVQUFVO0FBRVY7Ozs7R0FJRztBQUNVLFFBQUEsbUJBQW1CLEdBQW1DO0lBQ2pFLFdBQVcsRUFBRTtRQUNYLEVBQUUsRUFBRSxXQUFXO1FBQ2YsSUFBSSxFQUFFLFdBQVc7UUFDakIsTUFBTSxFQUFFO1lBQ04sRUFBRSxFQUFFLEVBQUUsMEJBQTBCLEVBQUUsSUFBSSxFQUFFLGlCQUFpQixFQUFFO1lBQzNELEVBQUUsRUFBRSxFQUFFLDJCQUEyQixFQUFFLElBQUksRUFBRSxrQkFBa0IsRUFBRTtTQUM5RDtLQUNGO0lBQ0QsUUFBUSxFQUFFO1FBQ1IsRUFBRSxFQUFFLFFBQVE7UUFDWixJQUFJLEVBQUUsUUFBUTtRQUNkLE1BQU0sRUFBRTtZQUNOLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFO1lBQ2hDLEVBQUUsRUFBRSxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFO1NBQzNDO0tBQ0Y7SUFDRCxRQUFRLEVBQUU7UUFDUixFQUFFLEVBQUUsUUFBUTtRQUNaLElBQUksRUFBRSxRQUFRO1FBQ2QsTUFBTSxFQUFFO1lBQ04sRUFBRSxFQUFFLEVBQUUsa0JBQWtCLEVBQUUsSUFBSSxFQUFFLGtCQUFrQixFQUFFO1lBQ3BELEVBQUUsRUFBRSxFQUFFLDhCQUE4QixFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRTtTQUMvRDtLQUNGO0lBQ0QsS0FBSyxFQUFFO1FBQ0wsRUFBRSxFQUFFLEtBQUs7UUFDVCxJQUFJLEVBQUUsWUFBWTtRQUNsQixNQUFNLEVBQUU7WUFDTixFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRTtZQUNoQyxFQUFFLEVBQUUsRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRTtZQUMxQyxFQUFFLEVBQUUsRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRTtTQUMzQztLQUNGO0lBQ0QsZ0JBQWdCLEVBQUU7UUFDaEIsRUFBRSxFQUFFLGdCQUFnQjtRQUNwQixJQUFJLEVBQUUsZ0JBQWdCO1FBQ3RCLE1BQU0sRUFBRTtZQUNOLEVBQUUsRUFBRSxFQUFFLDJDQUEyQyxFQUFFLElBQUksRUFBRSxzQkFBc0IsRUFBRTtZQUNqRixFQUFFLEVBQUUsRUFBRSx5QkFBeUIsRUFBRSxJQUFJLEVBQUUsaUJBQWlCLEVBQUU7WUFDMUQsRUFBRSxFQUFFLEVBQUUsMEJBQTBCLEVBQUUsSUFBSSxFQUFFLGtCQUFrQixFQUFFO1NBQzdEO0tBQ0Y7Q0FDRixDQUFDO0FBRUY7OztHQUdHO0FBQ1UsUUFBQSxvQkFBb0IsR0FBMkI7SUFDMUQsV0FBVyxFQUFFLG1CQUFtQjtJQUNoQyxRQUFRLEVBQUUsZ0JBQWdCO0lBQzFCLFFBQVEsRUFBRSw4QkFBOEI7SUFDeEMsS0FBSyxFQUFFLGFBQWE7SUFDcEIsZ0JBQWdCLEVBQUUsbUJBQW1CO0NBQ3RDLENBQUM7QUFFRixVQUFVO0FBRVY7Ozs7O0dBS0c7QUFDSCxTQUFnQixtQkFBbUIsQ0FBQyxVQUFrQjtJQUNwRCxPQUFPLDJCQUFtQixDQUFDLFVBQVUsQ0FBQyxFQUFFLE1BQU0sSUFBSSxFQUFFLENBQUM7QUFDdkQsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsU0FBZ0IsaUJBQWlCLENBQUMsVUFBa0I7SUFDbEQsT0FBTywyQkFBbUIsQ0FBQyxVQUFVLENBQUMsRUFBRSxJQUFJLElBQUksVUFBVSxDQUFDO0FBQzdELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLy8gVHlwZXNcblxuLyoqIE1ldGFkYXRhIGZvciBhIHNpbmdsZSBBSSBtb2RlbC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQUlNb2RlbEluZm8ge1xuICAvKiogTW9kZWwgaWRlbnRpZmllciB1c2VkIGluIEFQSSBjYWxscyAoZS5nLiBcImNsYXVkZS1zb25uZXQtNC0yMDI1MDUxNFwiKS4gKi9cbiAgaWQ6IHN0cmluZztcbiAgLyoqIEh1bWFuLXJlYWRhYmxlIGRpc3BsYXkgbmFtZSAoZS5nLiBcIkNsYXVkZSBTb25uZXQgNFwiKS4gKi9cbiAgbmFtZTogc3RyaW5nO1xufVxuXG4vKiogTWV0YWRhdGEgZm9yIGFuIEFJIHByb3ZpZGVyIHdpdGggaXRzIGF2YWlsYWJsZSBtb2RlbHMuICovXG5leHBvcnQgaW50ZXJmYWNlIEFJUHJvdmlkZXJJbmZvIHtcbiAgLyoqIFByb3ZpZGVyIGlkZW50aWZpZXIgKGUuZy4gXCJhbnRocm9waWNcIiwgXCJvcGVuYWlcIiwgXCJnb29nbGVcIikuICovXG4gIGlkOiBzdHJpbmc7XG4gIC8qKiBIdW1hbi1yZWFkYWJsZSBkaXNwbGF5IG5hbWUgKGUuZy4gXCJBbnRocm9waWNcIikuICovXG4gIG5hbWU6IHN0cmluZztcbiAgLyoqIE1vZGVscyBhdmFpbGFibGUgZm9yIHRoaXMgcHJvdmlkZXIuICovXG4gIG1vZGVsczogQUlNb2RlbEluZm9bXTtcbn1cblxuLy8gQ2F0YWxvZ1xuXG4vKipcbiAqIFN0YW5kYXJkIEFJIHByb3ZpZGVyIGNhdGFsb2cg4oCUIHNpbmdsZSBzb3VyY2Ugb2YgdHJ1dGggZm9yIGFsbCBzdXBwb3J0ZWRcbiAqIHByb3ZpZGVycyBhbmQgdGhlaXIgbW9kZWxzLiBVc2VkIGJ5IGJvdGggYmFja2VuZCBzZXJ2aWNlcyBhbmQgZnJvbnRlbmRcbiAqIGNvbXBvbmVudHMuXG4gKi9cbmV4cG9ydCBjb25zdCBBSV9QUk9WSURFUl9DQVRBTE9HOiBSZWNvcmQ8c3RyaW5nLCBBSVByb3ZpZGVySW5mbz4gPSB7XG4gICdhbnRocm9waWMnOiB7XG4gICAgaWQ6ICdhbnRocm9waWMnLFxuICAgIG5hbWU6ICdBbnRocm9waWMnLFxuICAgIG1vZGVsczogW1xuICAgICAgeyBpZDogJ2NsYXVkZS1zb25uZXQtNC0yMDI1MDUxNCcsIG5hbWU6ICdDbGF1ZGUgU29ubmV0IDQnIH0sXG4gICAgICB7IGlkOiAnY2xhdWRlLWhhaWt1LTQtNS0yMDI1MTAwMScsIG5hbWU6ICdDbGF1ZGUgSGFpa3UgNC41JyB9LFxuICAgIF0sXG4gIH0sXG4gICdvcGVuYWknOiB7XG4gICAgaWQ6ICdvcGVuYWknLFxuICAgIG5hbWU6ICdPcGVuQUknLFxuICAgIG1vZGVsczogW1xuICAgICAgeyBpZDogJ2dwdC00bycsIG5hbWU6ICdHUFQtNG8nIH0sXG4gICAgICB7IGlkOiAnZ3B0LTRvLW1pbmknLCBuYW1lOiAnR1BULTRvIE1pbmknIH0sXG4gICAgXSxcbiAgfSxcbiAgJ2dvb2dsZSc6IHtcbiAgICBpZDogJ2dvb2dsZScsXG4gICAgbmFtZTogJ0dvb2dsZScsXG4gICAgbW9kZWxzOiBbXG4gICAgICB7IGlkOiAnZ2VtaW5pLTIuMC1mbGFzaCcsIG5hbWU6ICdHZW1pbmkgMi4wIEZsYXNoJyB9LFxuICAgICAgeyBpZDogJ2dlbWluaS0yLjUtcHJvLXByZXZpZXctMDYtMDUnLCBuYW1lOiAnR2VtaW5pIDIuNSBQcm8nIH0sXG4gICAgXSxcbiAgfSxcbiAgJ3hhaSc6IHtcbiAgICBpZDogJ3hhaScsXG4gICAgbmFtZTogJ3hBSSAoR3JvayknLFxuICAgIG1vZGVsczogW1xuICAgICAgeyBpZDogJ2dyb2stMycsIG5hbWU6ICdHcm9rIDMnIH0sXG4gICAgICB7IGlkOiAnZ3Jvay0zLWZhc3QnLCBuYW1lOiAnR3JvayAzIEZhc3QnIH0sXG4gICAgICB7IGlkOiAnZ3Jvay0zLW1pbmknLCBuYW1lOiAnR3JvayAzIE1pbmknIH0sXG4gICAgXSxcbiAgfSxcbiAgJ2FtYXpvbi1iZWRyb2NrJzoge1xuICAgIGlkOiAnYW1hem9uLWJlZHJvY2snLFxuICAgIG5hbWU6ICdBbWF6b24gQmVkcm9jaycsXG4gICAgbW9kZWxzOiBbXG4gICAgICB7IGlkOiAnYW50aHJvcGljLmNsYXVkZS0zLTUtc29ubmV0LTIwMjQxMDIyLXYyOjAnLCBuYW1lOiAnQ2xhdWRlIDMuNSBTb25uZXQgdjInIH0sXG4gICAgICB7IGlkOiAndXMuYW1hem9uLm5vdmEtcHJvLXYxOjAnLCBuYW1lOiAnQW1hem9uIE5vdmEgUHJvJyB9LFxuICAgICAgeyBpZDogJ3VzLmFtYXpvbi5ub3ZhLWxpdGUtdjE6MCcsIG5hbWU6ICdBbWF6b24gTm92YSBMaXRlJyB9LFxuICAgIF0sXG4gIH0sXG59O1xuXG4vKipcbiAqIEVudmlyb25tZW50IHZhcmlhYmxlIG5hbWVzIGZvciBlYWNoIEFJIHByb3ZpZGVyJ3MgQVBJIGtleS5cbiAqIFVzZWQgYnkgYmFja2VuZCBzZXJ2aWNlcyB0byBpbml0aWFsaXplIHRoZSBwcm92aWRlciByZWdpc3RyeS5cbiAqL1xuZXhwb3J0IGNvbnN0IEFJX1BST1ZJREVSX0VOVl9WQVJTOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAnYW50aHJvcGljJzogJ0FOVEhST1BJQ19BUElfS0VZJyxcbiAgJ29wZW5haSc6ICdPUEVOQUlfQVBJX0tFWScsXG4gICdnb29nbGUnOiAnR09PR0xFX0dFTkVSQVRJVkVfQUlfQVBJX0tFWScsXG4gICd4YWknOiAnWEFJX0FQSV9LRVknLFxuICAnYW1hem9uLWJlZHJvY2snOiAnQVdTX0FDQ0VTU19LRVlfSUQnLFxufTtcblxuLy8gSGVscGVyc1xuXG4vKipcbiAqIEdldCB0aGUgbW9kZWwgbGlzdCBmb3IgYSBnaXZlbiBwcm92aWRlciBJRC5cbiAqXG4gKiBAcGFyYW0gcHJvdmlkZXJJZCAtIFByb3ZpZGVyIGlkZW50aWZpZXIgKGUuZy4gXCJhbnRocm9waWNcIilcbiAqIEByZXR1cm5zIEFycmF5IG9mIG1vZGVscywgb3IgZW1wdHkgYXJyYXkgaWYgdGhlIHByb3ZpZGVyIGlzIHVua25vd25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEFJUHJvdmlkZXJNb2RlbHMocHJvdmlkZXJJZDogc3RyaW5nKTogQUlNb2RlbEluZm9bXSB7XG4gIHJldHVybiBBSV9QUk9WSURFUl9DQVRBTE9HW3Byb3ZpZGVySWRdPy5tb2RlbHMgPz8gW107XG59XG5cbi8qKlxuICogR2V0IHRoZSBkaXNwbGF5IG5hbWUgZm9yIGEgcHJvdmlkZXIgSUQuXG4gKlxuICogQHBhcmFtIHByb3ZpZGVySWQgLSBQcm92aWRlciBpZGVudGlmaWVyIChlLmcuIFwiYW50aHJvcGljXCIpXG4gKiBAcmV0dXJucyBEaXNwbGF5IG5hbWUsIG9yIHRoZSByYXcgSUQgaWYgdGhlIHByb3ZpZGVyIGlzIHVua25vd25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEFJUHJvdmlkZXJOYW1lKHByb3ZpZGVySWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBBSV9QUk9WSURFUl9DQVRBTE9HW3Byb3ZpZGVySWRdPy5uYW1lID8/IHByb3ZpZGVySWQ7XG59XG4iXX0=
83
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWktcHJvdmlkZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbnN0YW50cy9haS1wcm92aWRlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQXNCdEMsVUFBVTtBQUVWOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBbUM7SUFDakUsV0FBVyxFQUFFO1FBQ1gsRUFBRSxFQUFFLFdBQVc7UUFDZixJQUFJLEVBQUUsV0FBVztRQUNqQixNQUFNLEVBQUU7WUFDTixFQUFFLEVBQUUsRUFBRSwwQkFBMEIsRUFBRSxJQUFJLEVBQUUsaUJBQWlCLEVBQUU7WUFDM0QsRUFBRSxFQUFFLEVBQUUsMkJBQTJCLEVBQUUsSUFBSSxFQUFFLGtCQUFrQixFQUFFO1NBQzlEO0tBQ0Y7SUFDRCxRQUFRLEVBQUU7UUFDUixFQUFFLEVBQUUsUUFBUTtRQUNaLElBQUksRUFBRSxRQUFRO1FBQ2QsTUFBTSxFQUFFO1lBQ04sRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUU7WUFDaEMsRUFBRSxFQUFFLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUU7U0FDM0M7S0FDRjtJQUNELFFBQVEsRUFBRTtRQUNSLEVBQUUsRUFBRSxRQUFRO1FBQ1osSUFBSSxFQUFFLFFBQVE7UUFDZCxNQUFNLEVBQUU7WUFDTixFQUFFLEVBQUUsRUFBRSxrQkFBa0IsRUFBRSxJQUFJLEVBQUUsa0JBQWtCLEVBQUU7WUFDcEQsRUFBRSxFQUFFLEVBQUUsOEJBQThCLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFO1NBQy9EO0tBQ0Y7SUFDRCxLQUFLLEVBQUU7UUFDTCxFQUFFLEVBQUUsS0FBSztRQUNULElBQUksRUFBRSxZQUFZO1FBQ2xCLE1BQU0sRUFBRTtZQUNOLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFO1lBQ2hDLEVBQUUsRUFBRSxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFO1lBQzFDLEVBQUUsRUFBRSxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFO1NBQzNDO0tBQ0Y7SUFDRCxnQkFBZ0IsRUFBRTtRQUNoQixFQUFFLEVBQUUsZ0JBQWdCO1FBQ3BCLElBQUksRUFBRSxnQkFBZ0I7UUFDdEIsTUFBTSxFQUFFO1lBQ04sRUFBRSxFQUFFLEVBQUUsMkNBQTJDLEVBQUUsSUFBSSxFQUFFLHNCQUFzQixFQUFFO1lBQ2pGLEVBQUUsRUFBRSxFQUFFLHlCQUF5QixFQUFFLElBQUksRUFBRSxpQkFBaUIsRUFBRTtZQUMxRCxFQUFFLEVBQUUsRUFBRSwwQkFBMEIsRUFBRSxJQUFJLEVBQUUsa0JBQWtCLEVBQUU7U0FDN0Q7S0FDRjtDQUNGLENBQUM7QUFFRjs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBMkI7SUFDMUQsV0FBVyxFQUFFLG1CQUFtQjtJQUNoQyxRQUFRLEVBQUUsZ0JBQWdCO0lBQzFCLFFBQVEsRUFBRSw4QkFBOEI7SUFDeEMsS0FBSyxFQUFFLGFBQWE7SUFDcEIsZ0JBQWdCLEVBQUUsbUJBQW1CO0NBQ3RDLENBQUM7QUFFRixVQUFVO0FBRVY7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsbUJBQW1CLENBQUMsVUFBa0I7SUFDcEQsT0FBTyxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsRUFBRSxNQUFNLElBQUksRUFBRSxDQUFDO0FBQ3ZELENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxVQUFrQjtJQUNsRCxPQUFPLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxFQUFFLElBQUksSUFBSSxVQUFVLENBQUM7QUFDN0QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vLyBUeXBlc1xuXG4vKiogTWV0YWRhdGEgZm9yIGEgc2luZ2xlIEFJIG1vZGVsLiAqL1xuZXhwb3J0IGludGVyZmFjZSBBSU1vZGVsSW5mbyB7XG4gIC8qKiBNb2RlbCBpZGVudGlmaWVyIHVzZWQgaW4gQVBJIGNhbGxzIChlLmcuIFwiY2xhdWRlLXNvbm5ldC00LTIwMjUwNTE0XCIpLiAqL1xuICBpZDogc3RyaW5nO1xuICAvKiogSHVtYW4tcmVhZGFibGUgZGlzcGxheSBuYW1lIChlLmcuIFwiQ2xhdWRlIFNvbm5ldCA0XCIpLiAqL1xuICBuYW1lOiBzdHJpbmc7XG59XG5cbi8qKiBNZXRhZGF0YSBmb3IgYW4gQUkgcHJvdmlkZXIgd2l0aCBpdHMgYXZhaWxhYmxlIG1vZGVscy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQUlQcm92aWRlckluZm8ge1xuICAvKiogUHJvdmlkZXIgaWRlbnRpZmllciAoZS5nLiBcImFudGhyb3BpY1wiLCBcIm9wZW5haVwiLCBcImdvb2dsZVwiKS4gKi9cbiAgaWQ6IHN0cmluZztcbiAgLyoqIEh1bWFuLXJlYWRhYmxlIGRpc3BsYXkgbmFtZSAoZS5nLiBcIkFudGhyb3BpY1wiKS4gKi9cbiAgbmFtZTogc3RyaW5nO1xuICAvKiogTW9kZWxzIGF2YWlsYWJsZSBmb3IgdGhpcyBwcm92aWRlci4gKi9cbiAgbW9kZWxzOiBBSU1vZGVsSW5mb1tdO1xufVxuXG4vLyBDYXRhbG9nXG5cbi8qKlxuICogU3RhbmRhcmQgQUkgcHJvdmlkZXIgY2F0YWxvZyDigJQgc2luZ2xlIHNvdXJjZSBvZiB0cnV0aCBmb3IgYWxsIHN1cHBvcnRlZFxuICogcHJvdmlkZXJzIGFuZCB0aGVpciBtb2RlbHMuIFVzZWQgYnkgYm90aCBiYWNrZW5kIHNlcnZpY2VzIGFuZCBmcm9udGVuZFxuICogY29tcG9uZW50cy5cbiAqL1xuZXhwb3J0IGNvbnN0IEFJX1BST1ZJREVSX0NBVEFMT0c6IFJlY29yZDxzdHJpbmcsIEFJUHJvdmlkZXJJbmZvPiA9IHtcbiAgJ2FudGhyb3BpYyc6IHtcbiAgICBpZDogJ2FudGhyb3BpYycsXG4gICAgbmFtZTogJ0FudGhyb3BpYycsXG4gICAgbW9kZWxzOiBbXG4gICAgICB7IGlkOiAnY2xhdWRlLXNvbm5ldC00LTIwMjUwNTE0JywgbmFtZTogJ0NsYXVkZSBTb25uZXQgNCcgfSxcbiAgICAgIHsgaWQ6ICdjbGF1ZGUtaGFpa3UtNC01LTIwMjUxMDAxJywgbmFtZTogJ0NsYXVkZSBIYWlrdSA0LjUnIH0sXG4gICAgXSxcbiAgfSxcbiAgJ29wZW5haSc6IHtcbiAgICBpZDogJ29wZW5haScsXG4gICAgbmFtZTogJ09wZW5BSScsXG4gICAgbW9kZWxzOiBbXG4gICAgICB7IGlkOiAnZ3B0LTRvJywgbmFtZTogJ0dQVC00bycgfSxcbiAgICAgIHsgaWQ6ICdncHQtNG8tbWluaScsIG5hbWU6ICdHUFQtNG8gTWluaScgfSxcbiAgICBdLFxuICB9LFxuICAnZ29vZ2xlJzoge1xuICAgIGlkOiAnZ29vZ2xlJyxcbiAgICBuYW1lOiAnR29vZ2xlJyxcbiAgICBtb2RlbHM6IFtcbiAgICAgIHsgaWQ6ICdnZW1pbmktMi4wLWZsYXNoJywgbmFtZTogJ0dlbWluaSAyLjAgRmxhc2gnIH0sXG4gICAgICB7IGlkOiAnZ2VtaW5pLTIuNS1wcm8tcHJldmlldy0wNi0wNScsIG5hbWU6ICdHZW1pbmkgMi41IFBybycgfSxcbiAgICBdLFxuICB9LFxuICAneGFpJzoge1xuICAgIGlkOiAneGFpJyxcbiAgICBuYW1lOiAneEFJIChHcm9rKScsXG4gICAgbW9kZWxzOiBbXG4gICAgICB7IGlkOiAnZ3Jvay0zJywgbmFtZTogJ0dyb2sgMycgfSxcbiAgICAgIHsgaWQ6ICdncm9rLTMtZmFzdCcsIG5hbWU6ICdHcm9rIDMgRmFzdCcgfSxcbiAgICAgIHsgaWQ6ICdncm9rLTMtbWluaScsIG5hbWU6ICdHcm9rIDMgTWluaScgfSxcbiAgICBdLFxuICB9LFxuICAnYW1hem9uLWJlZHJvY2snOiB7XG4gICAgaWQ6ICdhbWF6b24tYmVkcm9jaycsXG4gICAgbmFtZTogJ0FtYXpvbiBCZWRyb2NrJyxcbiAgICBtb2RlbHM6IFtcbiAgICAgIHsgaWQ6ICdhbnRocm9waWMuY2xhdWRlLTMtNS1zb25uZXQtMjAyNDEwMjItdjI6MCcsIG5hbWU6ICdDbGF1ZGUgMy41IFNvbm5ldCB2MicgfSxcbiAgICAgIHsgaWQ6ICd1cy5hbWF6b24ubm92YS1wcm8tdjE6MCcsIG5hbWU6ICdBbWF6b24gTm92YSBQcm8nIH0sXG4gICAgICB7IGlkOiAndXMuYW1hem9uLm5vdmEtbGl0ZS12MTowJywgbmFtZTogJ0FtYXpvbiBOb3ZhIExpdGUnIH0sXG4gICAgXSxcbiAgfSxcbn07XG5cbi8qKlxuICogRW52aXJvbm1lbnQgdmFyaWFibGUgbmFtZXMgZm9yIGVhY2ggQUkgcHJvdmlkZXIncyBBUEkga2V5LlxuICogVXNlZCBieSBiYWNrZW5kIHNlcnZpY2VzIHRvIGluaXRpYWxpemUgdGhlIHByb3ZpZGVyIHJlZ2lzdHJ5LlxuICovXG5leHBvcnQgY29uc3QgQUlfUFJPVklERVJfRU5WX1ZBUlM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICdhbnRocm9waWMnOiAnQU5USFJPUElDX0FQSV9LRVknLFxuICAnb3BlbmFpJzogJ09QRU5BSV9BUElfS0VZJyxcbiAgJ2dvb2dsZSc6ICdHT09HTEVfR0VORVJBVElWRV9BSV9BUElfS0VZJyxcbiAgJ3hhaSc6ICdYQUlfQVBJX0tFWScsXG4gICdhbWF6b24tYmVkcm9jayc6ICdBV1NfQUNDRVNTX0tFWV9JRCcsXG59O1xuXG4vLyBIZWxwZXJzXG5cbi8qKlxuICogR2V0IHRoZSBtb2RlbCBsaXN0IGZvciBhIGdpdmVuIHByb3ZpZGVyIElELlxuICpcbiAqIEBwYXJhbSBwcm92aWRlcklkIC0gUHJvdmlkZXIgaWRlbnRpZmllciAoZS5nLiBcImFudGhyb3BpY1wiKVxuICogQHJldHVybnMgQXJyYXkgb2YgbW9kZWxzLCBvciBlbXB0eSBhcnJheSBpZiB0aGUgcHJvdmlkZXIgaXMgdW5rbm93blxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QUlQcm92aWRlck1vZGVscyhwcm92aWRlcklkOiBzdHJpbmcpOiBBSU1vZGVsSW5mb1tdIHtcbiAgcmV0dXJuIEFJX1BST1ZJREVSX0NBVEFMT0dbcHJvdmlkZXJJZF0/Lm1vZGVscyA/PyBbXTtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIGRpc3BsYXkgbmFtZSBmb3IgYSBwcm92aWRlciBJRC5cbiAqXG4gKiBAcGFyYW0gcHJvdmlkZXJJZCAtIFByb3ZpZGVyIGlkZW50aWZpZXIgKGUuZy4gXCJhbnRocm9waWNcIilcbiAqIEByZXR1cm5zIERpc3BsYXkgbmFtZSwgb3IgdGhlIHJhdyBJRCBpZiB0aGUgcHJvdmlkZXIgaXMgdW5rbm93blxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QUlQcm92aWRlck5hbWUocHJvdmlkZXJJZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIEFJX1BST1ZJREVSX0NBVEFMT0dbcHJvdmlkZXJJZF0/Lm5hbWUgPz8gcHJvdmlkZXJJZDtcbn1cbiJdfQ==
@@ -1,12 +1,9 @@
1
- "use strict";
2
1
  // Copyright 2026 Pipeline Builder Contributors
3
2
  // SPDX-License-Identifier: Apache-2.0
4
- Object.defineProperty(exports, "__esModule", { value: true });
5
- exports.HttpStatus = void 0;
6
3
  /**
7
4
  * HTTP status codes organized by category.
8
5
  */
9
- exports.HttpStatus = {
6
+ export const HttpStatus = {
10
7
  // Success 2xx
11
8
  OK: 200,
12
9
  CREATED: 201,
@@ -26,4 +23,4 @@ exports.HttpStatus = {
26
23
  SERVICE_UNAVAILABLE: 503,
27
24
  GATEWAY_TIMEOUT: 504,
28
25
  };
29
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC1zdGF0dXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29uc3RhbnRzL2h0dHAtc3RhdHVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDOzs7QUFFdEM7O0dBRUc7QUFDVSxRQUFBLFVBQVUsR0FBRztJQUN4QixjQUFjO0lBQ2QsRUFBRSxFQUFFLEdBQUc7SUFDUCxPQUFPLEVBQUUsR0FBRztJQUNaLFFBQVEsRUFBRSxHQUFHO0lBQ2IsVUFBVSxFQUFFLEdBQUc7SUFFZixvQkFBb0I7SUFDcEIsV0FBVyxFQUFFLEdBQUc7SUFDaEIsWUFBWSxFQUFFLEdBQUc7SUFDakIsU0FBUyxFQUFFLEdBQUc7SUFDZCxTQUFTLEVBQUUsR0FBRztJQUNkLFFBQVEsRUFBRSxHQUFHO0lBQ2Isb0JBQW9CLEVBQUUsR0FBRztJQUN6QixpQkFBaUIsRUFBRSxHQUFHO0lBRXRCLG9CQUFvQjtJQUNwQixxQkFBcUIsRUFBRSxHQUFHO0lBQzFCLFdBQVcsRUFBRSxHQUFHO0lBQ2hCLG1CQUFtQixFQUFFLEdBQUc7SUFDeEIsZUFBZSxFQUFFLEdBQUc7Q0FDWixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8qKlxuICogSFRUUCBzdGF0dXMgY29kZXMgb3JnYW5pemVkIGJ5IGNhdGVnb3J5LlxuICovXG5leHBvcnQgY29uc3QgSHR0cFN0YXR1cyA9IHtcbiAgLy8gU3VjY2VzcyAyeHhcbiAgT0s6IDIwMCxcbiAgQ1JFQVRFRDogMjAxLFxuICBBQ0NFUFRFRDogMjAyLFxuICBOT19DT05URU5UOiAyMDQsXG5cbiAgLy8gQ2xpZW50IEVycm9ycyA0eHhcbiAgQkFEX1JFUVVFU1Q6IDQwMCxcbiAgVU5BVVRIT1JJWkVEOiA0MDEsXG4gIEZPUkJJRERFTjogNDAzLFxuICBOT1RfRk9VTkQ6IDQwNCxcbiAgQ09ORkxJQ1Q6IDQwOSxcbiAgVU5QUk9DRVNTQUJMRV9FTlRJVFk6IDQyMixcbiAgVE9PX01BTllfUkVRVUVTVFM6IDQyOSxcblxuICAvLyBTZXJ2ZXIgRXJyb3JzIDV4eFxuICBJTlRFUk5BTF9TRVJWRVJfRVJST1I6IDUwMCxcbiAgQkFEX0dBVEVXQVk6IDUwMixcbiAgU0VSVklDRV9VTkFWQUlMQUJMRTogNTAzLFxuICBHQVRFV0FZX1RJTUVPVVQ6IDUwNCxcbn0gYXMgY29uc3Q7XG5cbi8qKlxuICogVHlwZSBmb3IgdmFsaWQgSFRUUCBzdGF0dXMgY29kZXMuXG4gKi9cbmV4cG9ydCB0eXBlIEh0dHBTdGF0dXNDb2RlID0gKHR5cGVvZiBIdHRwU3RhdHVzKVtrZXlvZiB0eXBlb2YgSHR0cFN0YXR1c107XG4iXX0=
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC1zdGF0dXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29uc3RhbnRzL2h0dHAtc3RhdHVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEM7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUc7SUFDeEIsY0FBYztJQUNkLEVBQUUsRUFBRSxHQUFHO0lBQ1AsT0FBTyxFQUFFLEdBQUc7SUFDWixRQUFRLEVBQUUsR0FBRztJQUNiLFVBQVUsRUFBRSxHQUFHO0lBRWYsb0JBQW9CO0lBQ3BCLFdBQVcsRUFBRSxHQUFHO0lBQ2hCLFlBQVksRUFBRSxHQUFHO0lBQ2pCLFNBQVMsRUFBRSxHQUFHO0lBQ2QsU0FBUyxFQUFFLEdBQUc7SUFDZCxRQUFRLEVBQUUsR0FBRztJQUNiLG9CQUFvQixFQUFFLEdBQUc7SUFDekIsaUJBQWlCLEVBQUUsR0FBRztJQUV0QixvQkFBb0I7SUFDcEIscUJBQXFCLEVBQUUsR0FBRztJQUMxQixXQUFXLEVBQUUsR0FBRztJQUNoQixtQkFBbUIsRUFBRSxHQUFHO0lBQ3hCLGVBQWUsRUFBRSxHQUFHO0NBQ1osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKipcbiAqIEhUVFAgc3RhdHVzIGNvZGVzIG9yZ2FuaXplZCBieSBjYXRlZ29yeS5cbiAqL1xuZXhwb3J0IGNvbnN0IEh0dHBTdGF0dXMgPSB7XG4gIC8vIFN1Y2Nlc3MgMnh4XG4gIE9LOiAyMDAsXG4gIENSRUFURUQ6IDIwMSxcbiAgQUNDRVBURUQ6IDIwMixcbiAgTk9fQ09OVEVOVDogMjA0LFxuXG4gIC8vIENsaWVudCBFcnJvcnMgNHh4XG4gIEJBRF9SRVFVRVNUOiA0MDAsXG4gIFVOQVVUSE9SSVpFRDogNDAxLFxuICBGT1JCSURERU46IDQwMyxcbiAgTk9UX0ZPVU5EOiA0MDQsXG4gIENPTkZMSUNUOiA0MDksXG4gIFVOUFJPQ0VTU0FCTEVfRU5USVRZOiA0MjIsXG4gIFRPT19NQU5ZX1JFUVVFU1RTOiA0MjksXG5cbiAgLy8gU2VydmVyIEVycm9ycyA1eHhcbiAgSU5URVJOQUxfU0VSVkVSX0VSUk9SOiA1MDAsXG4gIEJBRF9HQVRFV0FZOiA1MDIsXG4gIFNFUlZJQ0VfVU5BVkFJTEFCTEU6IDUwMyxcbiAgR0FURVdBWV9USU1FT1VUOiA1MDQsXG59IGFzIGNvbnN0O1xuXG4vKipcbiAqIFR5cGUgZm9yIHZhbGlkIEhUVFAgc3RhdHVzIGNvZGVzLlxuICovXG5leHBvcnQgdHlwZSBIdHRwU3RhdHVzQ29kZSA9ICh0eXBlb2YgSHR0cFN0YXR1cylba2V5b2YgdHlwZW9mIEh0dHBTdGF0dXNdO1xuIl19
@@ -1,3 +1,3 @@
1
- export * from './http-status';
2
- export * from './ai-providers';
3
- export * from './time';
1
+ export * from './http-status.js';
2
+ export * from './ai-providers.js';
3
+ export * from './time.js';
@@ -1,22 +1,6 @@
1
- "use strict";
2
1
  // Copyright 2026 Pipeline Builder Contributors
3
2
  // 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("./http-status"), exports);
20
- __exportStar(require("./ai-providers"), exports);
21
- __exportStar(require("./time"), exports);
22
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29uc3RhbnRzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDOzs7Ozs7Ozs7Ozs7Ozs7O0FBRXRDLGdEQUE4QjtBQUM5QixpREFBK0I7QUFDL0IseUNBQXVCIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmV4cG9ydCAqIGZyb20gJy4vaHR0cC1zdGF0dXMnO1xuZXhwb3J0ICogZnJvbSAnLi9haS1wcm92aWRlcnMnO1xuZXhwb3J0ICogZnJvbSAnLi90aW1lJztcbiJdfQ==
3
+ export * from './http-status.js';
4
+ export * from './ai-providers.js';
5
+ export * from './time.js';
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29uc3RhbnRzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEMsY0FBYyxrQkFBa0IsQ0FBQztBQUNqQyxjQUFjLG1CQUFtQixDQUFDO0FBQ2xDLGNBQWMsV0FBVyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmV4cG9ydCAqIGZyb20gJy4vaHR0cC1zdGF0dXMuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9haS1wcm92aWRlcnMuanMnO1xuZXhwb3J0ICogZnJvbSAnLi90aW1lLmpzJztcbiJdfQ==
@@ -1,16 +1,13 @@
1
- "use strict";
2
1
  // Copyright 2026 Pipeline Builder Contributors
3
2
  // SPDX-License-Identifier: Apache-2.0
4
- Object.defineProperty(exports, "__esModule", { value: true });
5
- exports.TEMP_DIR_MAX_AGE_MS = exports.CACHE_TTL_BILLING_PLANS_SECS = exports.SSE_TICKET_TTL_MS = void 0;
6
3
  /**
7
4
  * Named time constants to prevent magic-number confusion.
8
5
  * All values include their unit in the name to avoid ms/s ambiguity.
9
6
  */
10
7
  /** 30 seconds in milliseconds — default SSE ticket TTL. */
11
- exports.SSE_TICKET_TTL_MS = 30_000;
8
+ export const SSE_TICKET_TTL_MS = 30_000;
12
9
  /** 4 hours in seconds — billing plan cache TTL. */
13
- exports.CACHE_TTL_BILLING_PLANS_SECS = 14_400;
10
+ export const CACHE_TTL_BILLING_PLANS_SECS = 14_400;
14
11
  /** 4 hours in milliseconds — temp directory cleanup threshold. */
15
- exports.TEMP_DIR_MAX_AGE_MS = 14_400_000;
16
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb25zdGFudHMvdGltZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsK0NBQStDO0FBQy9DLHNDQUFzQzs7O0FBRXRDOzs7R0FHRztBQUVILDJEQUEyRDtBQUM5QyxRQUFBLGlCQUFpQixHQUFHLE1BQU0sQ0FBQztBQUV4QyxtREFBbUQ7QUFDdEMsUUFBQSw0QkFBNEIsR0FBRyxNQUFNLENBQUM7QUFFbkQsa0VBQWtFO0FBQ3JELFFBQUEsbUJBQW1CLEdBQUcsVUFBVSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8qKlxuICogTmFtZWQgdGltZSBjb25zdGFudHMgdG8gcHJldmVudCBtYWdpYy1udW1iZXIgY29uZnVzaW9uLlxuICogQWxsIHZhbHVlcyBpbmNsdWRlIHRoZWlyIHVuaXQgaW4gdGhlIG5hbWUgdG8gYXZvaWQgbXMvcyBhbWJpZ3VpdHkuXG4gKi9cblxuLyoqIDMwIHNlY29uZHMgaW4gbWlsbGlzZWNvbmRzIOKAlCBkZWZhdWx0IFNTRSB0aWNrZXQgVFRMLiAqL1xuZXhwb3J0IGNvbnN0IFNTRV9USUNLRVRfVFRMX01TID0gMzBfMDAwO1xuXG4vKiogNCBob3VycyBpbiBzZWNvbmRzIOKAlCBiaWxsaW5nIHBsYW4gY2FjaGUgVFRMLiAqL1xuZXhwb3J0IGNvbnN0IENBQ0hFX1RUTF9CSUxMSU5HX1BMQU5TX1NFQ1MgPSAxNF80MDA7XG5cbi8qKiA0IGhvdXJzIGluIG1pbGxpc2Vjb25kcyDigJQgdGVtcCBkaXJlY3RvcnkgY2xlYW51cCB0aHJlc2hvbGQuICovXG5leHBvcnQgY29uc3QgVEVNUF9ESVJfTUFYX0FHRV9NUyA9IDE0XzQwMF8wMDA7XG4iXX0=
12
+ export const TEMP_DIR_MAX_AGE_MS = 14_400_000;
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb25zdGFudHMvdGltZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDOzs7R0FHRztBQUVILDJEQUEyRDtBQUMzRCxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxNQUFNLENBQUM7QUFFeEMsbURBQW1EO0FBQ25ELE1BQU0sQ0FBQyxNQUFNLDRCQUE0QixHQUFHLE1BQU0sQ0FBQztBQUVuRCxrRUFBa0U7QUFDbEUsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsVUFBVSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8qKlxuICogTmFtZWQgdGltZSBjb25zdGFudHMgdG8gcHJldmVudCBtYWdpYy1udW1iZXIgY29uZnVzaW9uLlxuICogQWxsIHZhbHVlcyBpbmNsdWRlIHRoZWlyIHVuaXQgaW4gdGhlIG5hbWUgdG8gYXZvaWQgbXMvcyBhbWJpZ3VpdHkuXG4gKi9cblxuLyoqIDMwIHNlY29uZHMgaW4gbWlsbGlzZWNvbmRzIOKAlCBkZWZhdWx0IFNTRSB0aWNrZXQgVFRMLiAqL1xuZXhwb3J0IGNvbnN0IFNTRV9USUNLRVRfVFRMX01TID0gMzBfMDAwO1xuXG4vKiogNCBob3VycyBpbiBzZWNvbmRzIOKAlCBiaWxsaW5nIHBsYW4gY2FjaGUgVFRMLiAqL1xuZXhwb3J0IGNvbnN0IENBQ0hFX1RUTF9CSUxMSU5HX1BMQU5TX1NFQ1MgPSAxNF80MDA7XG5cbi8qKiA0IGhvdXJzIGluIG1pbGxpc2Vjb25kcyDigJQgdGVtcCBkaXJlY3RvcnkgY2xlYW51cCB0aHJlc2hvbGQuICovXG5leHBvcnQgY29uc3QgVEVNUF9ESVJfTUFYX0FHRV9NUyA9IDE0XzQwMF8wMDA7XG4iXX0=
@@ -1,4 +1,4 @@
1
- import { ErrorCode } from '../types/error-codes';
1
+ import { ErrorCode } from '../types/error-codes.js';
2
2
  /**
3
3
  * Base application error with HTTP status code and error code.
4
4
  * Extend this for domain-specific error types.
@@ -1,14 +1,11 @@
1
- "use strict";
2
1
  // Copyright 2026 Pipeline Builder Contributors
3
2
  // SPDX-License-Identifier: Apache-2.0
4
- Object.defineProperty(exports, "__esModule", { value: true });
5
- exports.UnauthorizedError = exports.ConflictError = exports.ValidationError = exports.ForbiddenError = exports.NotFoundError = exports.AppError = void 0;
6
- const error_codes_1 = require("../types/error-codes");
3
+ import { ErrorCode, getStatusForErrorCode } from '../types/error-codes.js';
7
4
  /**
8
5
  * Base application error with HTTP status code and error code.
9
6
  * Extend this for domain-specific error types.
10
7
  */
11
- class AppError extends Error {
8
+ export class AppError extends Error {
12
9
  statusCode;
13
10
  code;
14
11
  constructor(statusCode, code, message) {
@@ -18,45 +15,39 @@ class AppError extends Error {
18
15
  this.name = 'AppError';
19
16
  }
20
17
  }
21
- exports.AppError = AppError;
22
18
  /** 404 — Resource not found. */
23
- class NotFoundError extends AppError {
19
+ export class NotFoundError extends AppError {
24
20
  constructor(message) {
25
- super((0, error_codes_1.getStatusForErrorCode)(error_codes_1.ErrorCode.NOT_FOUND), error_codes_1.ErrorCode.NOT_FOUND, message);
21
+ super(getStatusForErrorCode(ErrorCode.NOT_FOUND), ErrorCode.NOT_FOUND, message);
26
22
  this.name = 'NotFoundError';
27
23
  }
28
24
  }
29
- exports.NotFoundError = NotFoundError;
30
25
  /** 403 — Insufficient permissions. */
31
- class ForbiddenError extends AppError {
26
+ export class ForbiddenError extends AppError {
32
27
  constructor(message) {
33
- super((0, error_codes_1.getStatusForErrorCode)(error_codes_1.ErrorCode.INSUFFICIENT_PERMISSIONS), error_codes_1.ErrorCode.INSUFFICIENT_PERMISSIONS, message);
28
+ super(getStatusForErrorCode(ErrorCode.INSUFFICIENT_PERMISSIONS), ErrorCode.INSUFFICIENT_PERMISSIONS, message);
34
29
  this.name = 'ForbiddenError';
35
30
  }
36
31
  }
37
- exports.ForbiddenError = ForbiddenError;
38
32
  /** 400 — Validation / bad request. */
39
- class ValidationError extends AppError {
33
+ export class ValidationError extends AppError {
40
34
  constructor(message) {
41
- super((0, error_codes_1.getStatusForErrorCode)(error_codes_1.ErrorCode.VALIDATION_ERROR), error_codes_1.ErrorCode.VALIDATION_ERROR, message);
35
+ super(getStatusForErrorCode(ErrorCode.VALIDATION_ERROR), ErrorCode.VALIDATION_ERROR, message);
42
36
  this.name = 'ValidationError';
43
37
  }
44
38
  }
45
- exports.ValidationError = ValidationError;
46
39
  /** 409 — Conflict / duplicate. */
47
- class ConflictError extends AppError {
40
+ export class ConflictError extends AppError {
48
41
  constructor(message) {
49
- super((0, error_codes_1.getStatusForErrorCode)(error_codes_1.ErrorCode.CONFLICT), error_codes_1.ErrorCode.CONFLICT, message);
42
+ super(getStatusForErrorCode(ErrorCode.CONFLICT), ErrorCode.CONFLICT, message);
50
43
  this.name = 'ConflictError';
51
44
  }
52
45
  }
53
- exports.ConflictError = ConflictError;
54
46
  /** 401 — Unauthorized / authentication required. */
55
- class UnauthorizedError extends AppError {
47
+ export class UnauthorizedError extends AppError {
56
48
  constructor(message) {
57
- super((0, error_codes_1.getStatusForErrorCode)(error_codes_1.ErrorCode.UNAUTHORIZED), error_codes_1.ErrorCode.UNAUTHORIZED, message);
49
+ super(getStatusForErrorCode(ErrorCode.UNAUTHORIZED), ErrorCode.UNAUTHORIZED, message);
58
50
  this.name = 'UnauthorizedError';
59
51
  }
60
52
  }
61
- exports.UnauthorizedError = UnauthorizedError;
62
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLWVycm9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lcnJvcnMvYXBwLWVycm9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsK0NBQStDO0FBQy9DLHNDQUFzQzs7O0FBRXRDLHNEQUF3RTtBQUV4RTs7O0dBR0c7QUFDSCxNQUFhLFFBQVMsU0FBUSxLQUFLO0lBRWY7SUFDQTtJQUZsQixZQUNrQixVQUFrQixFQUNsQixJQUFlLEVBQy9CLE9BQWU7UUFFZixLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFKQyxlQUFVLEdBQVYsVUFBVSxDQUFRO1FBQ2xCLFNBQUksR0FBSixJQUFJLENBQVc7UUFJL0IsSUFBSSxDQUFDLElBQUksR0FBRyxVQUFVLENBQUM7SUFDekIsQ0FBQztDQUNGO0FBVEQsNEJBU0M7QUFFRCxnQ0FBZ0M7QUFDaEMsTUFBYSxhQUFjLFNBQVEsUUFBUTtJQUN6QyxZQUFZLE9BQWU7UUFDekIsS0FBSyxDQUFDLElBQUEsbUNBQXFCLEVBQUMsdUJBQVMsQ0FBQyxTQUFTLENBQUMsRUFBRSx1QkFBUyxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNoRixJQUFJLENBQUMsSUFBSSxHQUFHLGVBQWUsQ0FBQztJQUM5QixDQUFDO0NBQ0Y7QUFMRCxzQ0FLQztBQUVELHNDQUFzQztBQUN0QyxNQUFhLGNBQWUsU0FBUSxRQUFRO0lBQzFDLFlBQVksT0FBZTtRQUN6QixLQUFLLENBQUMsSUFBQSxtQ0FBcUIsRUFBQyx1QkFBUyxDQUFDLHdCQUF3QixDQUFDLEVBQUUsdUJBQVMsQ0FBQyx3QkFBd0IsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUM5RyxJQUFJLENBQUMsSUFBSSxHQUFHLGdCQUFnQixDQUFDO0lBQy9CLENBQUM7Q0FDRjtBQUxELHdDQUtDO0FBRUQsc0NBQXNDO0FBQ3RDLE1BQWEsZUFBZ0IsU0FBUSxRQUFRO0lBQzNDLFlBQVksT0FBZTtRQUN6QixLQUFLLENBQUMsSUFBQSxtQ0FBcUIsRUFBQyx1QkFBUyxDQUFDLGdCQUFnQixDQUFDLEVBQUUsdUJBQVMsQ0FBQyxnQkFBZ0IsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUM5RixJQUFJLENBQUMsSUFBSSxHQUFHLGlCQUFpQixDQUFDO0lBQ2hDLENBQUM7Q0FDRjtBQUxELDBDQUtDO0FBRUQsa0NBQWtDO0FBQ2xDLE1BQWEsYUFBYyxTQUFRLFFBQVE7SUFDekMsWUFBWSxPQUFlO1FBQ3pCLEtBQUssQ0FBQyxJQUFBLG1DQUFxQixFQUFDLHVCQUFTLENBQUMsUUFBUSxDQUFDLEVBQUUsdUJBQVMsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDOUUsSUFBSSxDQUFDLElBQUksR0FBRyxlQUFlLENBQUM7SUFDOUIsQ0FBQztDQUNGO0FBTEQsc0NBS0M7QUFFRCxvREFBb0Q7QUFDcEQsTUFBYSxpQkFBa0IsU0FBUSxRQUFRO0lBQzdDLFlBQVksT0FBZTtRQUN6QixLQUFLLENBQUMsSUFBQSxtQ0FBcUIsRUFBQyx1QkFBUyxDQUFDLFlBQVksQ0FBQyxFQUFFLHVCQUFTLENBQUMsWUFBWSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3RGLElBQUksQ0FBQyxJQUFJLEdBQUcsbUJBQW1CLENBQUM7SUFDbEMsQ0FBQztDQUNGO0FBTEQsOENBS0MiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHsgRXJyb3JDb2RlLCBnZXRTdGF0dXNGb3JFcnJvckNvZGUgfSBmcm9tICcuLi90eXBlcy9lcnJvci1jb2Rlcyc7XG5cbi8qKlxuICogQmFzZSBhcHBsaWNhdGlvbiBlcnJvciB3aXRoIEhUVFAgc3RhdHVzIGNvZGUgYW5kIGVycm9yIGNvZGUuXG4gKiBFeHRlbmQgdGhpcyBmb3IgZG9tYWluLXNwZWNpZmljIGVycm9yIHR5cGVzLlxuICovXG5leHBvcnQgY2xhc3MgQXBwRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyByZWFkb25seSBzdGF0dXNDb2RlOiBudW1iZXIsXG4gICAgcHVibGljIHJlYWRvbmx5IGNvZGU6IEVycm9yQ29kZSxcbiAgICBtZXNzYWdlOiBzdHJpbmcsXG4gICkge1xuICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgIHRoaXMubmFtZSA9ICdBcHBFcnJvcic7XG4gIH1cbn1cblxuLyoqIDQwNCDigJQgUmVzb3VyY2Ugbm90IGZvdW5kLiAqL1xuZXhwb3J0IGNsYXNzIE5vdEZvdW5kRXJyb3IgZXh0ZW5kcyBBcHBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZykge1xuICAgIHN1cGVyKGdldFN0YXR1c0ZvckVycm9yQ29kZShFcnJvckNvZGUuTk9UX0ZPVU5EKSwgRXJyb3JDb2RlLk5PVF9GT1VORCwgbWVzc2FnZSk7XG4gICAgdGhpcy5uYW1lID0gJ05vdEZvdW5kRXJyb3InO1xuICB9XG59XG5cbi8qKiA0MDMg4oCUIEluc3VmZmljaWVudCBwZXJtaXNzaW9ucy4gKi9cbmV4cG9ydCBjbGFzcyBGb3JiaWRkZW5FcnJvciBleHRlbmRzIEFwcEVycm9yIHtcbiAgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nKSB7XG4gICAgc3VwZXIoZ2V0U3RhdHVzRm9yRXJyb3JDb2RlKEVycm9yQ29kZS5JTlNVRkZJQ0lFTlRfUEVSTUlTU0lPTlMpLCBFcnJvckNvZGUuSU5TVUZGSUNJRU5UX1BFUk1JU1NJT05TLCBtZXNzYWdlKTtcbiAgICB0aGlzLm5hbWUgPSAnRm9yYmlkZGVuRXJyb3InO1xuICB9XG59XG5cbi8qKiA0MDAg4oCUIFZhbGlkYXRpb24gLyBiYWQgcmVxdWVzdC4gKi9cbmV4cG9ydCBjbGFzcyBWYWxpZGF0aW9uRXJyb3IgZXh0ZW5kcyBBcHBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZykge1xuICAgIHN1cGVyKGdldFN0YXR1c0ZvckVycm9yQ29kZShFcnJvckNvZGUuVkFMSURBVElPTl9FUlJPUiksIEVycm9yQ29kZS5WQUxJREFUSU9OX0VSUk9SLCBtZXNzYWdlKTtcbiAgICB0aGlzLm5hbWUgPSAnVmFsaWRhdGlvbkVycm9yJztcbiAgfVxufVxuXG4vKiogNDA5IOKAlCBDb25mbGljdCAvIGR1cGxpY2F0ZS4gKi9cbmV4cG9ydCBjbGFzcyBDb25mbGljdEVycm9yIGV4dGVuZHMgQXBwRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICBzdXBlcihnZXRTdGF0dXNGb3JFcnJvckNvZGUoRXJyb3JDb2RlLkNPTkZMSUNUKSwgRXJyb3JDb2RlLkNPTkZMSUNULCBtZXNzYWdlKTtcbiAgICB0aGlzLm5hbWUgPSAnQ29uZmxpY3RFcnJvcic7XG4gIH1cbn1cblxuLyoqIDQwMSDigJQgVW5hdXRob3JpemVkIC8gYXV0aGVudGljYXRpb24gcmVxdWlyZWQuICovXG5leHBvcnQgY2xhc3MgVW5hdXRob3JpemVkRXJyb3IgZXh0ZW5kcyBBcHBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZykge1xuICAgIHN1cGVyKGdldFN0YXR1c0ZvckVycm9yQ29kZShFcnJvckNvZGUuVU5BVVRIT1JJWkVEKSwgRXJyb3JDb2RlLlVOQVVUSE9SSVpFRCwgbWVzc2FnZSk7XG4gICAgdGhpcy5uYW1lID0gJ1VuYXV0aG9yaXplZEVycm9yJztcbiAgfVxufVxuIl19
53
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLWVycm9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lcnJvcnMvYXBwLWVycm9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sRUFBRSxTQUFTLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUUzRTs7O0dBR0c7QUFDSCxNQUFNLE9BQU8sUUFBUyxTQUFRLEtBQUs7SUFFZjtJQUNBO0lBRmxCLFlBQ2tCLFVBQWtCLEVBQ2xCLElBQWUsRUFDL0IsT0FBZTtRQUVmLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUpDLGVBQVUsR0FBVixVQUFVLENBQVE7UUFDbEIsU0FBSSxHQUFKLElBQUksQ0FBVztRQUkvQixJQUFJLENBQUMsSUFBSSxHQUFHLFVBQVUsQ0FBQztJQUN6QixDQUFDO0NBQ0Y7QUFFRCxnQ0FBZ0M7QUFDaEMsTUFBTSxPQUFPLGFBQWMsU0FBUSxRQUFRO0lBQ3pDLFlBQVksT0FBZTtRQUN6QixLQUFLLENBQUMscUJBQXFCLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDaEYsSUFBSSxDQUFDLElBQUksR0FBRyxlQUFlLENBQUM7SUFDOUIsQ0FBQztDQUNGO0FBRUQsc0NBQXNDO0FBQ3RDLE1BQU0sT0FBTyxjQUFlLFNBQVEsUUFBUTtJQUMxQyxZQUFZLE9BQWU7UUFDekIsS0FBSyxDQUFDLHFCQUFxQixDQUFDLFNBQVMsQ0FBQyx3QkFBd0IsQ0FBQyxFQUFFLFNBQVMsQ0FBQyx3QkFBd0IsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUM5RyxJQUFJLENBQUMsSUFBSSxHQUFHLGdCQUFnQixDQUFDO0lBQy9CLENBQUM7Q0FDRjtBQUVELHNDQUFzQztBQUN0QyxNQUFNLE9BQU8sZUFBZ0IsU0FBUSxRQUFRO0lBQzNDLFlBQVksT0FBZTtRQUN6QixLQUFLLENBQUMscUJBQXFCLENBQUMsU0FBUyxDQUFDLGdCQUFnQixDQUFDLEVBQUUsU0FBUyxDQUFDLGdCQUFnQixFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQzlGLElBQUksQ0FBQyxJQUFJLEdBQUcsaUJBQWlCLENBQUM7SUFDaEMsQ0FBQztDQUNGO0FBRUQsa0NBQWtDO0FBQ2xDLE1BQU0sT0FBTyxhQUFjLFNBQVEsUUFBUTtJQUN6QyxZQUFZLE9BQWU7UUFDekIsS0FBSyxDQUFDLHFCQUFxQixDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsRUFBRSxTQUFTLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQzlFLElBQUksQ0FBQyxJQUFJLEdBQUcsZUFBZSxDQUFDO0lBQzlCLENBQUM7Q0FDRjtBQUVELG9EQUFvRDtBQUNwRCxNQUFNLE9BQU8saUJBQWtCLFNBQVEsUUFBUTtJQUM3QyxZQUFZLE9BQWU7UUFDekIsS0FBSyxDQUFDLHFCQUFxQixDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsRUFBRSxTQUFTLENBQUMsWUFBWSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3RGLElBQUksQ0FBQyxJQUFJLEdBQUcsbUJBQW1CLENBQUM7SUFDbEMsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB7IEVycm9yQ29kZSwgZ2V0U3RhdHVzRm9yRXJyb3JDb2RlIH0gZnJvbSAnLi4vdHlwZXMvZXJyb3ItY29kZXMuanMnO1xuXG4vKipcbiAqIEJhc2UgYXBwbGljYXRpb24gZXJyb3Igd2l0aCBIVFRQIHN0YXR1cyBjb2RlIGFuZCBlcnJvciBjb2RlLlxuICogRXh0ZW5kIHRoaXMgZm9yIGRvbWFpbi1zcGVjaWZpYyBlcnJvciB0eXBlcy5cbiAqL1xuZXhwb3J0IGNsYXNzIEFwcEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgcmVhZG9ubHkgc3RhdHVzQ29kZTogbnVtYmVyLFxuICAgIHB1YmxpYyByZWFkb25seSBjb2RlOiBFcnJvckNvZGUsXG4gICAgbWVzc2FnZTogc3RyaW5nLFxuICApIHtcbiAgICBzdXBlcihtZXNzYWdlKTtcbiAgICB0aGlzLm5hbWUgPSAnQXBwRXJyb3InO1xuICB9XG59XG5cbi8qKiA0MDQg4oCUIFJlc291cmNlIG5vdCBmb3VuZC4gKi9cbmV4cG9ydCBjbGFzcyBOb3RGb3VuZEVycm9yIGV4dGVuZHMgQXBwRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICBzdXBlcihnZXRTdGF0dXNGb3JFcnJvckNvZGUoRXJyb3JDb2RlLk5PVF9GT1VORCksIEVycm9yQ29kZS5OT1RfRk9VTkQsIG1lc3NhZ2UpO1xuICAgIHRoaXMubmFtZSA9ICdOb3RGb3VuZEVycm9yJztcbiAgfVxufVxuXG4vKiogNDAzIOKAlCBJbnN1ZmZpY2llbnQgcGVybWlzc2lvbnMuICovXG5leHBvcnQgY2xhc3MgRm9yYmlkZGVuRXJyb3IgZXh0ZW5kcyBBcHBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZykge1xuICAgIHN1cGVyKGdldFN0YXR1c0ZvckVycm9yQ29kZShFcnJvckNvZGUuSU5TVUZGSUNJRU5UX1BFUk1JU1NJT05TKSwgRXJyb3JDb2RlLklOU1VGRklDSUVOVF9QRVJNSVNTSU9OUywgbWVzc2FnZSk7XG4gICAgdGhpcy5uYW1lID0gJ0ZvcmJpZGRlbkVycm9yJztcbiAgfVxufVxuXG4vKiogNDAwIOKAlCBWYWxpZGF0aW9uIC8gYmFkIHJlcXVlc3QuICovXG5leHBvcnQgY2xhc3MgVmFsaWRhdGlvbkVycm9yIGV4dGVuZHMgQXBwRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICBzdXBlcihnZXRTdGF0dXNGb3JFcnJvckNvZGUoRXJyb3JDb2RlLlZBTElEQVRJT05fRVJST1IpLCBFcnJvckNvZGUuVkFMSURBVElPTl9FUlJPUiwgbWVzc2FnZSk7XG4gICAgdGhpcy5uYW1lID0gJ1ZhbGlkYXRpb25FcnJvcic7XG4gIH1cbn1cblxuLyoqIDQwOSDigJQgQ29uZmxpY3QgLyBkdXBsaWNhdGUuICovXG5leHBvcnQgY2xhc3MgQ29uZmxpY3RFcnJvciBleHRlbmRzIEFwcEVycm9yIHtcbiAgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nKSB7XG4gICAgc3VwZXIoZ2V0U3RhdHVzRm9yRXJyb3JDb2RlKEVycm9yQ29kZS5DT05GTElDVCksIEVycm9yQ29kZS5DT05GTElDVCwgbWVzc2FnZSk7XG4gICAgdGhpcy5uYW1lID0gJ0NvbmZsaWN0RXJyb3InO1xuICB9XG59XG5cbi8qKiA0MDEg4oCUIFVuYXV0aG9yaXplZCAvIGF1dGhlbnRpY2F0aW9uIHJlcXVpcmVkLiAqL1xuZXhwb3J0IGNsYXNzIFVuYXV0aG9yaXplZEVycm9yIGV4dGVuZHMgQXBwRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICBzdXBlcihnZXRTdGF0dXNGb3JFcnJvckNvZGUoRXJyb3JDb2RlLlVOQVVUSE9SSVpFRCksIEVycm9yQ29kZS5VTkFVVEhPUklaRUQsIG1lc3NhZ2UpO1xuICAgIHRoaXMubmFtZSA9ICdVbmF1dGhvcml6ZWRFcnJvcic7XG4gIH1cbn1cbiJdfQ==
@@ -1 +1 @@
1
- export * from './app-errors';
1
+ export * from './app-errors.js';
@@ -1,20 +1,4 @@
1
- "use strict";
2
1
  // Copyright 2026 Pipeline Builder Contributors
3
2
  // 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("./app-errors"), exports);
20
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZXJyb3JzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDOzs7Ozs7Ozs7Ozs7Ozs7O0FBRXRDLCtDQUE2QiIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5leHBvcnQgKiBmcm9tICcuL2FwcC1lcnJvcnMnO1xuIl19
3
+ export * from './app-errors.js';
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZXJyb3JzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEMsY0FBYyxpQkFBaUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5leHBvcnQgKiBmcm9tICcuL2FwcC1lcnJvcnMuanMnO1xuIl19
@@ -1,12 +1,9 @@
1
- "use strict";
2
1
  // Copyright 2026 Pipeline Builder Contributors
3
2
  // SPDX-License-Identifier: Apache-2.0
4
- Object.defineProperty(exports, "__esModule", { value: true });
5
- exports.requirePublicAccess = requirePublicAccess;
6
- const auth_1 = require("../middleware/auth");
7
- const error_codes_1 = require("../types/error-codes");
8
- const pipeline_1 = require("../types/pipeline");
9
- const response_1 = require("../utils/response");
3
+ import { isSystemAdmin } from '../middleware/auth.js';
4
+ import { ErrorCode } from '../types/error-codes.js';
5
+ import { AccessModifier } from '../types/pipeline.js';
6
+ import { sendError } from '../utils/response.js';
10
7
  /**
11
8
  * Check whether a non-admin user may modify a public resource.
12
9
  *
@@ -24,11 +21,11 @@ const response_1 = require("../utils/response");
24
21
  * await pipelineService.delete(id, orgId, userId);
25
22
  * ```
26
23
  */
27
- function requirePublicAccess(req, res, resource) {
28
- if (!(0, auth_1.isSystemAdmin)(req) && resource.accessModifier !== pipeline_1.AccessModifier.PRIVATE) {
29
- (0, response_1.sendError)(res, 403, 'Only system admins can modify public resources.', error_codes_1.ErrorCode.INSUFFICIENT_PERMISSIONS);
24
+ export function requirePublicAccess(req, res, resource) {
25
+ if (!isSystemAdmin(req) && resource.accessModifier !== AccessModifier.PRIVATE) {
26
+ sendError(res, 403, 'Only system admins can modify public resources.', ErrorCode.INSUFFICIENT_PERMISSIONS);
30
27
  return false;
31
28
  }
32
29
  return true;
33
30
  }
34
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjZXNzLWhlbHBlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaGVscGVycy9hY2Nlc3MtaGVscGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsK0NBQStDO0FBQy9DLHNDQUFzQzs7QUF5QnRDLGtEQWVDO0FBckNELDZDQUFtRDtBQUNuRCxzREFBaUQ7QUFDakQsZ0RBQW1EO0FBQ25ELGdEQUE4QztBQUU5Qzs7Ozs7Ozs7Ozs7Ozs7OztHQWdCRztBQUNILFNBQWdCLG1CQUFtQixDQUNqQyxHQUFZLEVBQ1osR0FBYSxFQUNiLFFBQXFDO0lBRXJDLElBQUksQ0FBQyxJQUFBLG9CQUFhLEVBQUMsR0FBRyxDQUFDLElBQUksUUFBUSxDQUFDLGNBQWMsS0FBSyx5QkFBYyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzlFLElBQUEsb0JBQVMsRUFDUCxHQUFHLEVBQ0gsR0FBRyxFQUNILGlEQUFpRCxFQUNqRCx1QkFBUyxDQUFDLHdCQUF3QixDQUNuQyxDQUFDO1FBQ0YsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBQ0QsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB0eXBlIHsgUmVxdWVzdCwgUmVzcG9uc2UgfSBmcm9tICdleHByZXNzJztcbmltcG9ydCB7IGlzU3lzdGVtQWRtaW4gfSBmcm9tICcuLi9taWRkbGV3YXJlL2F1dGgnO1xuaW1wb3J0IHsgRXJyb3JDb2RlIH0gZnJvbSAnLi4vdHlwZXMvZXJyb3ItY29kZXMnO1xuaW1wb3J0IHsgQWNjZXNzTW9kaWZpZXIgfSBmcm9tICcuLi90eXBlcy9waXBlbGluZSc7XG5pbXBvcnQgeyBzZW5kRXJyb3IgfSBmcm9tICcuLi91dGlscy9yZXNwb25zZSc7XG5cbi8qKlxuICogQ2hlY2sgd2hldGhlciBhIG5vbi1hZG1pbiB1c2VyIG1heSBtb2RpZnkgYSBwdWJsaWMgcmVzb3VyY2UuXG4gKlxuICogUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHJlcXVlc3QgbWF5IHByb2NlZWQuIFJldHVybnMgYGZhbHNlYCBhbmQgc2VuZHNcbiAqIGEgNDAzIHJlc3BvbnNlIGlmIHRoZSB1c2VyIGxhY2tzIHBlcm1pc3Npb24uXG4gKlxuICogQHBhcmFtIHJlcSAtIEV4cHJlc3MgcmVxdWVzdFxuICogQHBhcmFtIHJlcyAtIEV4cHJlc3MgcmVzcG9uc2VcbiAqIEBwYXJhbSByZXNvdXJjZSAtIFJlc291cmNlIHdpdGggYW4gYWNjZXNzTW9kaWZpZXIgZmllbGRcbiAqIEByZXR1cm5zIGB0cnVlYCBpZiBhY2Nlc3MgaXMgYWxsb3dlZCwgYGZhbHNlYCBpZiBibG9ja2VkIChyZXNwb25zZSBhbHJlYWR5IHNlbnQpXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGlmICghcmVxdWlyZVB1YmxpY0FjY2VzcyhyZXEsIHJlcywgcGlwZWxpbmUpKSByZXR1cm47XG4gKiBhd2FpdCBwaXBlbGluZVNlcnZpY2UuZGVsZXRlKGlkLCBvcmdJZCwgdXNlcklkKTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVxdWlyZVB1YmxpY0FjY2VzcyhcbiAgcmVxOiBSZXF1ZXN0LFxuICByZXM6IFJlc3BvbnNlLFxuICByZXNvdXJjZTogeyBhY2Nlc3NNb2RpZmllcj86IHN0cmluZyB9LFxuKTogYm9vbGVhbiB7XG4gIGlmICghaXNTeXN0ZW1BZG1pbihyZXEpICYmIHJlc291cmNlLmFjY2Vzc01vZGlmaWVyICE9PSBBY2Nlc3NNb2RpZmllci5QUklWQVRFKSB7XG4gICAgc2VuZEVycm9yKFxuICAgICAgcmVzLFxuICAgICAgNDAzLFxuICAgICAgJ09ubHkgc3lzdGVtIGFkbWlucyBjYW4gbW9kaWZ5IHB1YmxpYyByZXNvdXJjZXMuJyxcbiAgICAgIEVycm9yQ29kZS5JTlNVRkZJQ0lFTlRfUEVSTUlTU0lPTlMsXG4gICAgKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG4iXX0=
31
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjZXNzLWhlbHBlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaGVscGVycy9hY2Nlc3MtaGVscGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBR3RDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDcEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUVqRDs7Ozs7Ozs7Ozs7Ozs7OztHQWdCRztBQUNILE1BQU0sVUFBVSxtQkFBbUIsQ0FDakMsR0FBWSxFQUNaLEdBQWEsRUFDYixRQUFxQztJQUVyQyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxjQUFjLEtBQUssY0FBYyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzlFLFNBQVMsQ0FDUCxHQUFHLEVBQ0gsR0FBRyxFQUNILGlEQUFpRCxFQUNqRCxTQUFTLENBQUMsd0JBQXdCLENBQ25DLENBQUM7UUFDRixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFDRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHR5cGUgeyBSZXF1ZXN0LCBSZXNwb25zZSB9IGZyb20gJ2V4cHJlc3MnO1xuaW1wb3J0IHsgaXNTeXN0ZW1BZG1pbiB9IGZyb20gJy4uL21pZGRsZXdhcmUvYXV0aC5qcyc7XG5pbXBvcnQgeyBFcnJvckNvZGUgfSBmcm9tICcuLi90eXBlcy9lcnJvci1jb2Rlcy5qcyc7XG5pbXBvcnQgeyBBY2Nlc3NNb2RpZmllciB9IGZyb20gJy4uL3R5cGVzL3BpcGVsaW5lLmpzJztcbmltcG9ydCB7IHNlbmRFcnJvciB9IGZyb20gJy4uL3V0aWxzL3Jlc3BvbnNlLmpzJztcblxuLyoqXG4gKiBDaGVjayB3aGV0aGVyIGEgbm9uLWFkbWluIHVzZXIgbWF5IG1vZGlmeSBhIHB1YmxpYyByZXNvdXJjZS5cbiAqXG4gKiBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgcmVxdWVzdCBtYXkgcHJvY2VlZC4gUmV0dXJucyBgZmFsc2VgIGFuZCBzZW5kc1xuICogYSA0MDMgcmVzcG9uc2UgaWYgdGhlIHVzZXIgbGFja3MgcGVybWlzc2lvbi5cbiAqXG4gKiBAcGFyYW0gcmVxIC0gRXhwcmVzcyByZXF1ZXN0XG4gKiBAcGFyYW0gcmVzIC0gRXhwcmVzcyByZXNwb25zZVxuICogQHBhcmFtIHJlc291cmNlIC0gUmVzb3VyY2Ugd2l0aCBhbiBhY2Nlc3NNb2RpZmllciBmaWVsZFxuICogQHJldHVybnMgYHRydWVgIGlmIGFjY2VzcyBpcyBhbGxvd2VkLCBgZmFsc2VgIGlmIGJsb2NrZWQgKHJlc3BvbnNlIGFscmVhZHkgc2VudClcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogaWYgKCFyZXF1aXJlUHVibGljQWNjZXNzKHJlcSwgcmVzLCBwaXBlbGluZSkpIHJldHVybjtcbiAqIGF3YWl0IHBpcGVsaW5lU2VydmljZS5kZWxldGUoaWQsIG9yZ0lkLCB1c2VySWQpO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXF1aXJlUHVibGljQWNjZXNzKFxuICByZXE6IFJlcXVlc3QsXG4gIHJlczogUmVzcG9uc2UsXG4gIHJlc291cmNlOiB7IGFjY2Vzc01vZGlmaWVyPzogc3RyaW5nIH0sXG4pOiBib29sZWFuIHtcbiAgaWYgKCFpc1N5c3RlbUFkbWluKHJlcSkgJiYgcmVzb3VyY2UuYWNjZXNzTW9kaWZpZXIgIT09IEFjY2Vzc01vZGlmaWVyLlBSSVZBVEUpIHtcbiAgICBzZW5kRXJyb3IoXG4gICAgICByZXMsXG4gICAgICA0MDMsXG4gICAgICAnT25seSBzeXN0ZW0gYWRtaW5zIGNhbiBtb2RpZnkgcHVibGljIHJlc291cmNlcy4nLFxuICAgICAgRXJyb3JDb2RlLklOU1VGRklDSUVOVF9QRVJNSVNTSU9OUyxcbiAgICApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cbiJdfQ==
@@ -1,17 +1,13 @@
1
- "use strict";
2
1
  // Copyright 2026 Pipeline Builder Contributors
3
2
  // SPDX-License-Identifier: Apache-2.0
4
- Object.defineProperty(exports, "__esModule", { value: true });
5
- exports.normalizeArrayFields = normalizeArrayFields;
6
- exports.sendEntityNotFound = sendEntityNotFound;
7
- const error_codes_1 = require("../types/error-codes");
8
- const response_1 = require("../utils/response");
3
+ import { ErrorCode } from '../types/error-codes.js';
4
+ import { sendError } from '../utils/response.js';
9
5
  /**
10
6
  * Coerce listed fields on a DB-returned record to arrays. Drizzle/pg sometimes
11
7
  * returns `null` for jsonb columns when the row was inserted with a missing
12
8
  * key — callers expect `[]` so map iteration doesn't crash.
13
9
  */
14
- function normalizeArrayFields(record, arrayFields) {
10
+ export function normalizeArrayFields(record, arrayFields) {
15
11
  const normalized = { ...record };
16
12
  for (const field of arrayFields) {
17
13
  if (field in normalized && !Array.isArray(normalized[field])) {
@@ -21,7 +17,7 @@ function normalizeArrayFields(record, arrayFields) {
21
17
  return normalized;
22
18
  }
23
19
  /** Send a 404 NOT_FOUND error with a standard `${entityName} not found.` message. */
24
- function sendEntityNotFound(res, entityName) {
25
- (0, response_1.sendError)(res, 404, `${entityName} not found.`, error_codes_1.ErrorCode.NOT_FOUND);
20
+ export function sendEntityNotFound(res, entityName) {
21
+ sendError(res, 404, `${entityName} not found.`, ErrorCode.NOT_FOUND);
26
22
  }
27
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3J1ZC1oZWxwZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2hlbHBlcnMvY3J1ZC1oZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDOztBQVd0QyxvREFXQztBQUdELGdEQUVDO0FBeEJELHNEQUFpRDtBQUNqRCxnREFBOEM7QUFFOUM7Ozs7R0FJRztBQUNILFNBQWdCLG9CQUFvQixDQUNsQyxNQUFTLEVBQ1QsV0FBd0I7SUFFeEIsTUFBTSxVQUFVLEdBQUcsRUFBRSxHQUFHLE1BQU0sRUFBRSxDQUFDO0lBQ2pDLEtBQUssTUFBTSxLQUFLLElBQUksV0FBVyxFQUFFLENBQUM7UUFDaEMsSUFBSSxLQUFLLElBQUksVUFBVSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQzVELFVBQXNDLENBQUMsS0FBZSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ2hFLENBQUM7SUFDSCxDQUFDO0lBQ0QsT0FBTyxVQUFVLENBQUM7QUFDcEIsQ0FBQztBQUVELHFGQUFxRjtBQUNyRixTQUFnQixrQkFBa0IsQ0FBQyxHQUFhLEVBQUUsVUFBa0I7SUFDbEUsSUFBQSxvQkFBUyxFQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxVQUFVLGFBQWEsRUFBRSx1QkFBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ3ZFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHR5cGUgeyBSZXNwb25zZSB9IGZyb20gJ2V4cHJlc3MnO1xuaW1wb3J0IHsgRXJyb3JDb2RlIH0gZnJvbSAnLi4vdHlwZXMvZXJyb3ItY29kZXMnO1xuaW1wb3J0IHsgc2VuZEVycm9yIH0gZnJvbSAnLi4vdXRpbHMvcmVzcG9uc2UnO1xuXG4vKipcbiAqIENvZXJjZSBsaXN0ZWQgZmllbGRzIG9uIGEgREItcmV0dXJuZWQgcmVjb3JkIHRvIGFycmF5cy4gRHJpenpsZS9wZyBzb21ldGltZXNcbiAqIHJldHVybnMgYG51bGxgIGZvciBqc29uYiBjb2x1bW5zIHdoZW4gdGhlIHJvdyB3YXMgaW5zZXJ0ZWQgd2l0aCBhIG1pc3NpbmdcbiAqIGtleSDigJQgY2FsbGVycyBleHBlY3QgYFtdYCBzbyBtYXAgaXRlcmF0aW9uIGRvZXNuJ3QgY3Jhc2guXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVBcnJheUZpZWxkczxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+KFxuICByZWNvcmQ6IFQsXG4gIGFycmF5RmllbGRzOiAoa2V5b2YgVClbXSxcbik6IFQge1xuICBjb25zdCBub3JtYWxpemVkID0geyAuLi5yZWNvcmQgfTtcbiAgZm9yIChjb25zdCBmaWVsZCBvZiBhcnJheUZpZWxkcykge1xuICAgIGlmIChmaWVsZCBpbiBub3JtYWxpemVkICYmICFBcnJheS5pc0FycmF5KG5vcm1hbGl6ZWRbZmllbGRdKSkge1xuICAgICAgKG5vcm1hbGl6ZWQgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pW2ZpZWxkIGFzIHN0cmluZ10gPSBbXTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG5vcm1hbGl6ZWQ7XG59XG5cbi8qKiBTZW5kIGEgNDA0IE5PVF9GT1VORCBlcnJvciB3aXRoIGEgc3RhbmRhcmQgYCR7ZW50aXR5TmFtZX0gbm90IGZvdW5kLmAgbWVzc2FnZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZW5kRW50aXR5Tm90Rm91bmQocmVzOiBSZXNwb25zZSwgZW50aXR5TmFtZTogc3RyaW5nKTogdm9pZCB7XG4gIHNlbmRFcnJvcihyZXMsIDQwNCwgYCR7ZW50aXR5TmFtZX0gbm90IGZvdW5kLmAsIEVycm9yQ29kZS5OT1RfRk9VTkQpO1xufVxuIl19
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3J1ZC1oZWxwZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2hlbHBlcnMvY3J1ZC1oZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFHdEMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3BELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUVqRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLG9CQUFvQixDQUNsQyxNQUFTLEVBQ1QsV0FBd0I7SUFFeEIsTUFBTSxVQUFVLEdBQUcsRUFBRSxHQUFHLE1BQU0sRUFBRSxDQUFDO0lBQ2pDLEtBQUssTUFBTSxLQUFLLElBQUksV0FBVyxFQUFFLENBQUM7UUFDaEMsSUFBSSxLQUFLLElBQUksVUFBVSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQzVELFVBQXNDLENBQUMsS0FBZSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ2hFLENBQUM7SUFDSCxDQUFDO0lBQ0QsT0FBTyxVQUFVLENBQUM7QUFDcEIsQ0FBQztBQUVELHFGQUFxRjtBQUNyRixNQUFNLFVBQVUsa0JBQWtCLENBQUMsR0FBYSxFQUFFLFVBQWtCO0lBQ2xFLFNBQVMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsVUFBVSxhQUFhLEVBQUUsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ3ZFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHR5cGUgeyBSZXNwb25zZSB9IGZyb20gJ2V4cHJlc3MnO1xuaW1wb3J0IHsgRXJyb3JDb2RlIH0gZnJvbSAnLi4vdHlwZXMvZXJyb3ItY29kZXMuanMnO1xuaW1wb3J0IHsgc2VuZEVycm9yIH0gZnJvbSAnLi4vdXRpbHMvcmVzcG9uc2UuanMnO1xuXG4vKipcbiAqIENvZXJjZSBsaXN0ZWQgZmllbGRzIG9uIGEgREItcmV0dXJuZWQgcmVjb3JkIHRvIGFycmF5cy4gRHJpenpsZS9wZyBzb21ldGltZXNcbiAqIHJldHVybnMgYG51bGxgIGZvciBqc29uYiBjb2x1bW5zIHdoZW4gdGhlIHJvdyB3YXMgaW5zZXJ0ZWQgd2l0aCBhIG1pc3NpbmdcbiAqIGtleSDigJQgY2FsbGVycyBleHBlY3QgYFtdYCBzbyBtYXAgaXRlcmF0aW9uIGRvZXNuJ3QgY3Jhc2guXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVBcnJheUZpZWxkczxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+KFxuICByZWNvcmQ6IFQsXG4gIGFycmF5RmllbGRzOiAoa2V5b2YgVClbXSxcbik6IFQge1xuICBjb25zdCBub3JtYWxpemVkID0geyAuLi5yZWNvcmQgfTtcbiAgZm9yIChjb25zdCBmaWVsZCBvZiBhcnJheUZpZWxkcykge1xuICAgIGlmIChmaWVsZCBpbiBub3JtYWxpemVkICYmICFBcnJheS5pc0FycmF5KG5vcm1hbGl6ZWRbZmllbGRdKSkge1xuICAgICAgKG5vcm1hbGl6ZWQgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pW2ZpZWxkIGFzIHN0cmluZ10gPSBbXTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG5vcm1hbGl6ZWQ7XG59XG5cbi8qKiBTZW5kIGEgNDA0IE5PVF9GT1VORCBlcnJvciB3aXRoIGEgc3RhbmRhcmQgYCR7ZW50aXR5TmFtZX0gbm90IGZvdW5kLmAgbWVzc2FnZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZW5kRW50aXR5Tm90Rm91bmQocmVzOiBSZXNwb25zZSwgZW50aXR5TmFtZTogc3RyaW5nKTogdm9pZCB7XG4gIHNlbmRFcnJvcihyZXMsIDQwNCwgYCR7ZW50aXR5TmFtZX0gbm90IGZvdW5kLmAsIEVycm9yQ29kZS5OT1RfRk9VTkQpO1xufVxuIl19
@@ -1,4 +1,4 @@
1
- export * from './crud-helpers';
2
- export * from './access-helpers';
3
- export * from './sse-helpers';
4
- export * from './org-hierarchy';
1
+ export * from './crud-helpers.js';
2
+ export * from './access-helpers.js';
3
+ export * from './sse-helpers.js';
4
+ export * from './org-hierarchy.js';
@@ -1,23 +1,7 @@
1
- "use strict";
2
1
  // Copyright 2026 Pipeline Builder Contributors
3
2
  // 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("./crud-helpers"), exports);
20
- __exportStar(require("./access-helpers"), exports);
21
- __exportStar(require("./sse-helpers"), exports);
22
- __exportStar(require("./org-hierarchy"), exports);
23
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaGVscGVycy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsK0NBQStDO0FBQy9DLHNDQUFzQzs7Ozs7Ozs7Ozs7Ozs7OztBQUV0QyxpREFBK0I7QUFDL0IsbURBQWlDO0FBQ2pDLGdEQUE4QjtBQUM5QixrREFBZ0MiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuZXhwb3J0ICogZnJvbSAnLi9jcnVkLWhlbHBlcnMnO1xuZXhwb3J0ICogZnJvbSAnLi9hY2Nlc3MtaGVscGVycyc7XG5leHBvcnQgKiBmcm9tICcuL3NzZS1oZWxwZXJzJztcbmV4cG9ydCAqIGZyb20gJy4vb3JnLWhpZXJhcmNoeSc7XG4iXX0=
3
+ export * from './crud-helpers.js';
4
+ export * from './access-helpers.js';
5
+ export * from './sse-helpers.js';
6
+ export * from './org-hierarchy.js';
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaGVscGVycy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMsb0JBQW9CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuZXhwb3J0ICogZnJvbSAnLi9jcnVkLWhlbHBlcnMuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9hY2Nlc3MtaGVscGVycy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3NzZS1oZWxwZXJzLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vb3JnLWhpZXJhcmNoeS5qcyc7XG4iXX0=