@pipeline-builder/api-core 3.4.63 → 3.4.65
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.
- package/README.md +91 -60
- package/lib/constants/ai-providers.js +7 -12
- package/lib/constants/http-status.js +2 -5
- package/lib/constants/index.d.ts +3 -3
- package/lib/constants/index.js +4 -20
- package/lib/constants/time.js +4 -7
- package/lib/errors/app-errors.d.ts +1 -1
- package/lib/errors/app-errors.js +13 -22
- package/lib/errors/index.d.ts +1 -1
- package/lib/errors/index.js +2 -18
- package/lib/helpers/access-helpers.js +8 -11
- package/lib/helpers/crud-helpers.js +6 -10
- package/lib/helpers/index.d.ts +4 -4
- package/lib/helpers/index.js +5 -21
- package/lib/helpers/org-hierarchy.js +10 -18
- package/lib/helpers/sse-helpers.js +7 -11
- package/lib/index.d.ts +10 -10
- package/lib/index.js +11 -27
- package/lib/middleware/auth.d.ts +1 -1
- package/lib/middleware/auth.js +38 -54
- package/lib/middleware/index.d.ts +2 -2
- package/lib/middleware/index.js +3 -19
- package/lib/middleware/mongo-sanitize.js +2 -5
- package/lib/openapi/extend-zod.js +4 -6
- package/lib/openapi/index.d.ts +2 -2
- package/lib/openapi/index.js +2 -7
- package/lib/openapi/registry.js +9 -13
- package/lib/openapi/routes/billing-routes.js +10 -13
- package/lib/openapi/routes/index.js +12 -15
- package/lib/openapi/routes/message-routes.js +14 -17
- package/lib/openapi/routes/pipeline-routes.js +12 -15
- package/lib/openapi/routes/plugin-routes.js +13 -16
- package/lib/openapi/routes/quota-routes.js +9 -12
- package/lib/openapi/schema-registry.js +47 -51
- package/lib/routes/health.d.ts +1 -1
- package/lib/routes/health.js +10 -15
- package/lib/routes/index.d.ts +1 -1
- package/lib/routes/index.js +2 -18
- package/lib/services/cache-service.js +3 -8
- package/lib/services/compliance-client.d.ts +1 -1
- package/lib/services/compliance-client.js +6 -9
- package/lib/services/compliance-event-subscriber.d.ts +1 -1
- package/lib/services/compliance-event-subscriber.js +13 -15
- package/lib/services/compliance-queue.js +5 -9
- package/lib/services/entity-events.js +4 -7
- package/lib/services/http-client.d.ts +1 -1
- package/lib/services/http-client.js +15 -53
- package/lib/services/index.d.ts +10 -10
- package/lib/services/index.js +10 -37
- package/lib/services/quota.d.ts +2 -2
- package/lib/services/quota.js +18 -24
- package/lib/services/remote-audit-client.js +8 -11
- package/lib/services/retry-strategy.js +12 -21
- package/lib/types/audit-events.js +2 -3
- package/lib/types/common.js +6 -11
- package/lib/types/error-codes.js +6 -10
- package/lib/types/feature-flags.d.ts +1 -1
- package/lib/types/feature-flags.js +13 -19
- package/lib/types/http.js +2 -3
- package/lib/types/index.d.ts +7 -7
- package/lib/types/index.js +8 -24
- package/lib/types/pipeline.js +4 -7
- package/lib/types/quota-tiers.js +8 -13
- package/lib/utils/alias-resolver.js +5 -9
- package/lib/utils/audit.d.ts +1 -1
- package/lib/utils/audit.js +2 -5
- package/lib/utils/concurrency.js +2 -5
- package/lib/utils/crash-handlers.js +3 -6
- package/lib/utils/headers.js +2 -5
- package/lib/utils/identity.d.ts +1 -1
- package/lib/utils/identity.js +8 -12
- package/lib/utils/index.d.ts +13 -13
- package/lib/utils/index.js +14 -30
- package/lib/utils/logger.js +17 -19
- package/lib/utils/metric-emitter.js +4 -9
- package/lib/utils/object.js +2 -5
- package/lib/utils/org-aws-credentials.js +4 -10
- package/lib/utils/params.d.ts +1 -1
- package/lib/utils/params.js +15 -28
- package/lib/utils/response.d.ts +3 -3
- package/lib/utils/response.js +18 -30
- package/lib/utils/secret-encryption.js +17 -29
- package/lib/validation/ai-schemas.js +30 -33
- package/lib/validation/common-schemas.d.ts +1 -1
- package/lib/validation/common-schemas.js +22 -25
- package/lib/validation/index.d.ts +6 -6
- package/lib/validation/index.js +7 -23
- package/lib/validation/message-schemas.js +22 -25
- package/lib/validation/middleware.d.ts +2 -2
- package/lib/validation/middleware.js +7 -13
- package/lib/validation/pipeline-schemas.js +46 -49
- package/lib/validation/plugin-schemas.js +57 -60
- 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
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
###
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
###
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
|
80
|
+
export function getAIProviderName(providerId) {
|
|
81
|
+
return AI_PROVIDER_CATALOG[providerId]?.name ?? providerId;
|
|
87
82
|
}
|
|
88
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
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
|
-
|
|
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,
|
|
26
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC1zdGF0dXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29uc3RhbnRzL2h0dHAtc3RhdHVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEM7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUc7SUFDeEIsY0FBYztJQUNkLEVBQUUsRUFBRSxHQUFHO0lBQ1AsT0FBTyxFQUFFLEdBQUc7SUFDWixRQUFRLEVBQUUsR0FBRztJQUNiLFVBQVUsRUFBRSxHQUFHO0lBRWYsb0JBQW9CO0lBQ3BCLFdBQVcsRUFBRSxHQUFHO0lBQ2hCLFlBQVksRUFBRSxHQUFHO0lBQ2pCLFNBQVMsRUFBRSxHQUFHO0lBQ2QsU0FBUyxFQUFFLEdBQUc7SUFDZCxRQUFRLEVBQUUsR0FBRztJQUNiLG9CQUFvQixFQUFFLEdBQUc7SUFDekIsaUJBQWlCLEVBQUUsR0FBRztJQUV0QixvQkFBb0I7SUFDcEIscUJBQXFCLEVBQUUsR0FBRztJQUMxQixXQUFXLEVBQUUsR0FBRztJQUNoQixtQkFBbUIsRUFBRSxHQUFHO0lBQ3hCLGVBQWUsRUFBRSxHQUFHO0NBQ1osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKipcbiAqIEhUVFAgc3RhdHVzIGNvZGVzIG9yZ2FuaXplZCBieSBjYXRlZ29yeS5cbiAqL1xuZXhwb3J0IGNvbnN0IEh0dHBTdGF0dXMgPSB7XG4gIC8vIFN1Y2Nlc3MgMnh4XG4gIE9LOiAyMDAsXG4gIENSRUFURUQ6IDIwMSxcbiAgQUNDRVBURUQ6IDIwMixcbiAgTk9fQ09OVEVOVDogMjA0LFxuXG4gIC8vIENsaWVudCBFcnJvcnMgNHh4XG4gIEJBRF9SRVFVRVNUOiA0MDAsXG4gIFVOQVVUSE9SSVpFRDogNDAxLFxuICBGT1JCSURERU46IDQwMyxcbiAgTk9UX0ZPVU5EOiA0MDQsXG4gIENPTkZMSUNUOiA0MDksXG4gIFVOUFJPQ0VTU0FCTEVfRU5USVRZOiA0MjIsXG4gIFRPT19NQU5ZX1JFUVVFU1RTOiA0MjksXG5cbiAgLy8gU2VydmVyIEVycm9ycyA1eHhcbiAgSU5URVJOQUxfU0VSVkVSX0VSUk9SOiA1MDAsXG4gIEJBRF9HQVRFV0FZOiA1MDIsXG4gIFNFUlZJQ0VfVU5BVkFJTEFCTEU6IDUwMyxcbiAgR0FURVdBWV9USU1FT1VUOiA1MDQsXG59IGFzIGNvbnN0O1xuXG4vKipcbiAqIFR5cGUgZm9yIHZhbGlkIEhUVFAgc3RhdHVzIGNvZGVzLlxuICovXG5leHBvcnQgdHlwZSBIdHRwU3RhdHVzQ29kZSA9ICh0eXBlb2YgSHR0cFN0YXR1cylba2V5b2YgdHlwZW9mIEh0dHBTdGF0dXNdO1xuIl19
|
package/lib/constants/index.d.ts
CHANGED
|
@@ -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';
|
package/lib/constants/index.js
CHANGED
|
@@ -1,22 +1,6 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
// Copyright 2026 Pipeline Builder Contributors
|
|
3
2
|
// SPDX-License-Identifier: Apache-2.0
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
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==
|
package/lib/constants/time.js
CHANGED
|
@@ -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
|
-
|
|
8
|
+
export const SSE_TICKET_TTL_MS = 30_000;
|
|
12
9
|
/** 4 hours in seconds — billing plan cache TTL. */
|
|
13
|
-
|
|
10
|
+
export const CACHE_TTL_BILLING_PLANS_SECS = 14_400;
|
|
14
11
|
/** 4 hours in milliseconds — temp directory cleanup threshold. */
|
|
15
|
-
|
|
16
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
12
|
+
export const TEMP_DIR_MAX_AGE_MS = 14_400_000;
|
|
13
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb25zdGFudHMvdGltZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDOzs7R0FHRztBQUVILDJEQUEyRDtBQUMzRCxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxNQUFNLENBQUM7QUFFeEMsbURBQW1EO0FBQ25ELE1BQU0sQ0FBQyxNQUFNLDRCQUE0QixHQUFHLE1BQU0sQ0FBQztBQUVuRCxrRUFBa0U7QUFDbEUsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsVUFBVSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8qKlxuICogTmFtZWQgdGltZSBjb25zdGFudHMgdG8gcHJldmVudCBtYWdpYy1udW1iZXIgY29uZnVzaW9uLlxuICogQWxsIHZhbHVlcyBpbmNsdWRlIHRoZWlyIHVuaXQgaW4gdGhlIG5hbWUgdG8gYXZvaWQgbXMvcyBhbWJpZ3VpdHkuXG4gKi9cblxuLyoqIDMwIHNlY29uZHMgaW4gbWlsbGlzZWNvbmRzIOKAlCBkZWZhdWx0IFNTRSB0aWNrZXQgVFRMLiAqL1xuZXhwb3J0IGNvbnN0IFNTRV9USUNLRVRfVFRMX01TID0gMzBfMDAwO1xuXG4vKiogNCBob3VycyBpbiBzZWNvbmRzIOKAlCBiaWxsaW5nIHBsYW4gY2FjaGUgVFRMLiAqL1xuZXhwb3J0IGNvbnN0IENBQ0hFX1RUTF9CSUxMSU5HX1BMQU5TX1NFQ1MgPSAxNF80MDA7XG5cbi8qKiA0IGhvdXJzIGluIG1pbGxpc2Vjb25kcyDigJQgdGVtcCBkaXJlY3RvcnkgY2xlYW51cCB0aHJlc2hvbGQuICovXG5leHBvcnQgY29uc3QgVEVNUF9ESVJfTUFYX0FHRV9NUyA9IDE0XzQwMF8wMDA7XG4iXX0=
|
package/lib/errors/app-errors.js
CHANGED
|
@@ -1,14 +1,11 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
// Copyright 2026 Pipeline Builder Contributors
|
|
3
2
|
// SPDX-License-Identifier: Apache-2.0
|
|
4
|
-
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
49
|
+
super(getStatusForErrorCode(ErrorCode.UNAUTHORIZED), ErrorCode.UNAUTHORIZED, message);
|
|
58
50
|
this.name = 'UnauthorizedError';
|
|
59
51
|
}
|
|
60
52
|
}
|
|
61
|
-
|
|
62
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLWVycm9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lcnJvcnMvYXBwLWVycm9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsK0NBQStDO0FBQy9DLHNDQUFzQzs7O0FBRXRDLHNEQUF3RTtBQUV4RTs7O0dBR0c7QUFDSCxNQUFhLFFBQVMsU0FBUSxLQUFLO0lBRWY7SUFDQTtJQUZsQixZQUNrQixVQUFrQixFQUNsQixJQUFlLEVBQy9CLE9BQWU7UUFFZixLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFKQyxlQUFVLEdBQVYsVUFBVSxDQUFRO1FBQ2xCLFNBQUksR0FBSixJQUFJLENBQVc7UUFJL0IsSUFBSSxDQUFDLElBQUksR0FBRyxVQUFVLENBQUM7SUFDekIsQ0FBQztDQUNGO0FBVEQsNEJBU0M7QUFFRCxnQ0FBZ0M7QUFDaEMsTUFBYSxhQUFjLFNBQVEsUUFBUTtJQUN6QyxZQUFZLE9BQWU7UUFDekIsS0FBSyxDQUFDLElBQUEsbUNBQXFCLEVBQUMsdUJBQVMsQ0FBQyxTQUFTLENBQUMsRUFBRSx1QkFBUyxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNoRixJQUFJLENBQUMsSUFBSSxHQUFHLGVBQWUsQ0FBQztJQUM5QixDQUFDO0NBQ0Y7QUFMRCxzQ0FLQztBQUVELHNDQUFzQztBQUN0QyxNQUFhLGNBQWUsU0FBUSxRQUFRO0lBQzFDLFlBQVksT0FBZTtRQUN6QixLQUFLLENBQUMsSUFBQSxtQ0FBcUIsRUFBQyx1QkFBUyxDQUFDLHdCQUF3QixDQUFDLEVBQUUsdUJBQVMsQ0FBQyx3QkFBd0IsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUM5RyxJQUFJLENBQUMsSUFBSSxHQUFHLGdCQUFnQixDQUFDO0lBQy9CLENBQUM7Q0FDRjtBQUxELHdDQUtDO0FBRUQsc0NBQXNDO0FBQ3RDLE1BQWEsZUFBZ0IsU0FBUSxRQUFRO0lBQzNDLFlBQVksT0FBZTtRQUN6QixLQUFLLENBQUMsSUFBQSxtQ0FBcUIsRUFBQyx1QkFBUyxDQUFDLGdCQUFnQixDQUFDLEVBQUUsdUJBQVMsQ0FBQyxnQkFBZ0IsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUM5RixJQUFJLENBQUMsSUFBSSxHQUFHLGlCQUFpQixDQUFDO0lBQ2hDLENBQUM7Q0FDRjtBQUxELDBDQUtDO0FBRUQsa0NBQWtDO0FBQ2xDLE1BQWEsYUFBYyxTQUFRLFFBQVE7SUFDekMsWUFBWSxPQUFlO1FBQ3pCLEtBQUssQ0FBQyxJQUFBLG1DQUFxQixFQUFDLHVCQUFTLENBQUMsUUFBUSxDQUFDLEVBQUUsdUJBQVMsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDOUUsSUFBSSxDQUFDLElBQUksR0FBRyxlQUFlLENBQUM7SUFDOUIsQ0FBQztDQUNGO0FBTEQsc0NBS0M7QUFFRCxvREFBb0Q7QUFDcEQsTUFBYSxpQkFBa0IsU0FBUSxRQUFRO0lBQzdDLFlBQVksT0FBZTtRQUN6QixLQUFLLENBQUMsSUFBQSxtQ0FBcUIsRUFBQyx1QkFBUyxDQUFDLFlBQVksQ0FBQyxFQUFFLHVCQUFTLENBQUMsWUFBWSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3RGLElBQUksQ0FBQyxJQUFJLEdBQUcsbUJBQW1CLENBQUM7SUFDbEMsQ0FBQztDQUNGO0FBTEQsOENBS0MiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHsgRXJyb3JDb2RlLCBnZXRTdGF0dXNGb3JFcnJvckNvZGUgfSBmcm9tICcuLi90eXBlcy9lcnJvci1jb2Rlcyc7XG5cbi8qKlxuICogQmFzZSBhcHBsaWNhdGlvbiBlcnJvciB3aXRoIEhUVFAgc3RhdHVzIGNvZGUgYW5kIGVycm9yIGNvZGUuXG4gKiBFeHRlbmQgdGhpcyBmb3IgZG9tYWluLXNwZWNpZmljIGVycm9yIHR5cGVzLlxuICovXG5leHBvcnQgY2xhc3MgQXBwRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyByZWFkb25seSBzdGF0dXNDb2RlOiBudW1iZXIsXG4gICAgcHVibGljIHJlYWRvbmx5IGNvZGU6IEVycm9yQ29kZSxcbiAgICBtZXNzYWdlOiBzdHJpbmcsXG4gICkge1xuICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgIHRoaXMubmFtZSA9ICdBcHBFcnJvcic7XG4gIH1cbn1cblxuLyoqIDQwNCDigJQgUmVzb3VyY2Ugbm90IGZvdW5kLiAqL1xuZXhwb3J0IGNsYXNzIE5vdEZvdW5kRXJyb3IgZXh0ZW5kcyBBcHBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZykge1xuICAgIHN1cGVyKGdldFN0YXR1c0ZvckVycm9yQ29kZShFcnJvckNvZGUuTk9UX0ZPVU5EKSwgRXJyb3JDb2RlLk5PVF9GT1VORCwgbWVzc2FnZSk7XG4gICAgdGhpcy5uYW1lID0gJ05vdEZvdW5kRXJyb3InO1xuICB9XG59XG5cbi8qKiA0MDMg4oCUIEluc3VmZmljaWVudCBwZXJtaXNzaW9ucy4gKi9cbmV4cG9ydCBjbGFzcyBGb3JiaWRkZW5FcnJvciBleHRlbmRzIEFwcEVycm9yIHtcbiAgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nKSB7XG4gICAgc3VwZXIoZ2V0U3RhdHVzRm9yRXJyb3JDb2RlKEVycm9yQ29kZS5JTlNVRkZJQ0lFTlRfUEVSTUlTU0lPTlMpLCBFcnJvckNvZGUuSU5TVUZGSUNJRU5UX1BFUk1JU1NJT05TLCBtZXNzYWdlKTtcbiAgICB0aGlzLm5hbWUgPSAnRm9yYmlkZGVuRXJyb3InO1xuICB9XG59XG5cbi8qKiA0MDAg4oCUIFZhbGlkYXRpb24gLyBiYWQgcmVxdWVzdC4gKi9cbmV4cG9ydCBjbGFzcyBWYWxpZGF0aW9uRXJyb3IgZXh0ZW5kcyBBcHBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZykge1xuICAgIHN1cGVyKGdldFN0YXR1c0ZvckVycm9yQ29kZShFcnJvckNvZGUuVkFMSURBVElPTl9FUlJPUiksIEVycm9yQ29kZS5WQUxJREFUSU9OX0VSUk9SLCBtZXNzYWdlKTtcbiAgICB0aGlzLm5hbWUgPSAnVmFsaWRhdGlvbkVycm9yJztcbiAgfVxufVxuXG4vKiogNDA5IOKAlCBDb25mbGljdCAvIGR1cGxpY2F0ZS4gKi9cbmV4cG9ydCBjbGFzcyBDb25mbGljdEVycm9yIGV4dGVuZHMgQXBwRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICBzdXBlcihnZXRTdGF0dXNGb3JFcnJvckNvZGUoRXJyb3JDb2RlLkNPTkZMSUNUKSwgRXJyb3JDb2RlLkNPTkZMSUNULCBtZXNzYWdlKTtcbiAgICB0aGlzLm5hbWUgPSAnQ29uZmxpY3RFcnJvcic7XG4gIH1cbn1cblxuLyoqIDQwMSDigJQgVW5hdXRob3JpemVkIC8gYXV0aGVudGljYXRpb24gcmVxdWlyZWQuICovXG5leHBvcnQgY2xhc3MgVW5hdXRob3JpemVkRXJyb3IgZXh0ZW5kcyBBcHBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZykge1xuICAgIHN1cGVyKGdldFN0YXR1c0ZvckVycm9yQ29kZShFcnJvckNvZGUuVU5BVVRIT1JJWkVEKSwgRXJyb3JDb2RlLlVOQVVUSE9SSVpFRCwgbWVzc2FnZSk7XG4gICAgdGhpcy5uYW1lID0gJ1VuYXV0aG9yaXplZEVycm9yJztcbiAgfVxufVxuIl19
|
|
53
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLWVycm9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lcnJvcnMvYXBwLWVycm9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sRUFBRSxTQUFTLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUUzRTs7O0dBR0c7QUFDSCxNQUFNLE9BQU8sUUFBUyxTQUFRLEtBQUs7SUFFZjtJQUNBO0lBRmxCLFlBQ2tCLFVBQWtCLEVBQ2xCLElBQWUsRUFDL0IsT0FBZTtRQUVmLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUpDLGVBQVUsR0FBVixVQUFVLENBQVE7UUFDbEIsU0FBSSxHQUFKLElBQUksQ0FBVztRQUkvQixJQUFJLENBQUMsSUFBSSxHQUFHLFVBQVUsQ0FBQztJQUN6QixDQUFDO0NBQ0Y7QUFFRCxnQ0FBZ0M7QUFDaEMsTUFBTSxPQUFPLGFBQWMsU0FBUSxRQUFRO0lBQ3pDLFlBQVksT0FBZTtRQUN6QixLQUFLLENBQUMscUJBQXFCLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDaEYsSUFBSSxDQUFDLElBQUksR0FBRyxlQUFlLENBQUM7SUFDOUIsQ0FBQztDQUNGO0FBRUQsc0NBQXNDO0FBQ3RDLE1BQU0sT0FBTyxjQUFlLFNBQVEsUUFBUTtJQUMxQyxZQUFZLE9BQWU7UUFDekIsS0FBSyxDQUFDLHFCQUFxQixDQUFDLFNBQVMsQ0FBQyx3QkFBd0IsQ0FBQyxFQUFFLFNBQVMsQ0FBQyx3QkFBd0IsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUM5RyxJQUFJLENBQUMsSUFBSSxHQUFHLGdCQUFnQixDQUFDO0lBQy9CLENBQUM7Q0FDRjtBQUVELHNDQUFzQztBQUN0QyxNQUFNLE9BQU8sZUFBZ0IsU0FBUSxRQUFRO0lBQzNDLFlBQVksT0FBZTtRQUN6QixLQUFLLENBQUMscUJBQXFCLENBQUMsU0FBUyxDQUFDLGdCQUFnQixDQUFDLEVBQUUsU0FBUyxDQUFDLGdCQUFnQixFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQzlGLElBQUksQ0FBQyxJQUFJLEdBQUcsaUJBQWlCLENBQUM7SUFDaEMsQ0FBQztDQUNGO0FBRUQsa0NBQWtDO0FBQ2xDLE1BQU0sT0FBTyxhQUFjLFNBQVEsUUFBUTtJQUN6QyxZQUFZLE9BQWU7UUFDekIsS0FBSyxDQUFDLHFCQUFxQixDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsRUFBRSxTQUFTLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQzlFLElBQUksQ0FBQyxJQUFJLEdBQUcsZUFBZSxDQUFDO0lBQzlCLENBQUM7Q0FDRjtBQUVELG9EQUFvRDtBQUNwRCxNQUFNLE9BQU8saUJBQWtCLFNBQVEsUUFBUTtJQUM3QyxZQUFZLE9BQWU7UUFDekIsS0FBSyxDQUFDLHFCQUFxQixDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsRUFBRSxTQUFTLENBQUMsWUFBWSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3RGLElBQUksQ0FBQyxJQUFJLEdBQUcsbUJBQW1CLENBQUM7SUFDbEMsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB7IEVycm9yQ29kZSwgZ2V0U3RhdHVzRm9yRXJyb3JDb2RlIH0gZnJvbSAnLi4vdHlwZXMvZXJyb3ItY29kZXMuanMnO1xuXG4vKipcbiAqIEJhc2UgYXBwbGljYXRpb24gZXJyb3Igd2l0aCBIVFRQIHN0YXR1cyBjb2RlIGFuZCBlcnJvciBjb2RlLlxuICogRXh0ZW5kIHRoaXMgZm9yIGRvbWFpbi1zcGVjaWZpYyBlcnJvciB0eXBlcy5cbiAqL1xuZXhwb3J0IGNsYXNzIEFwcEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgcmVhZG9ubHkgc3RhdHVzQ29kZTogbnVtYmVyLFxuICAgIHB1YmxpYyByZWFkb25seSBjb2RlOiBFcnJvckNvZGUsXG4gICAgbWVzc2FnZTogc3RyaW5nLFxuICApIHtcbiAgICBzdXBlcihtZXNzYWdlKTtcbiAgICB0aGlzLm5hbWUgPSAnQXBwRXJyb3InO1xuICB9XG59XG5cbi8qKiA0MDQg4oCUIFJlc291cmNlIG5vdCBmb3VuZC4gKi9cbmV4cG9ydCBjbGFzcyBOb3RGb3VuZEVycm9yIGV4dGVuZHMgQXBwRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICBzdXBlcihnZXRTdGF0dXNGb3JFcnJvckNvZGUoRXJyb3JDb2RlLk5PVF9GT1VORCksIEVycm9yQ29kZS5OT1RfRk9VTkQsIG1lc3NhZ2UpO1xuICAgIHRoaXMubmFtZSA9ICdOb3RGb3VuZEVycm9yJztcbiAgfVxufVxuXG4vKiogNDAzIOKAlCBJbnN1ZmZpY2llbnQgcGVybWlzc2lvbnMuICovXG5leHBvcnQgY2xhc3MgRm9yYmlkZGVuRXJyb3IgZXh0ZW5kcyBBcHBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZykge1xuICAgIHN1cGVyKGdldFN0YXR1c0ZvckVycm9yQ29kZShFcnJvckNvZGUuSU5TVUZGSUNJRU5UX1BFUk1JU1NJT05TKSwgRXJyb3JDb2RlLklOU1VGRklDSUVOVF9QRVJNSVNTSU9OUywgbWVzc2FnZSk7XG4gICAgdGhpcy5uYW1lID0gJ0ZvcmJpZGRlbkVycm9yJztcbiAgfVxufVxuXG4vKiogNDAwIOKAlCBWYWxpZGF0aW9uIC8gYmFkIHJlcXVlc3QuICovXG5leHBvcnQgY2xhc3MgVmFsaWRhdGlvbkVycm9yIGV4dGVuZHMgQXBwRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICBzdXBlcihnZXRTdGF0dXNGb3JFcnJvckNvZGUoRXJyb3JDb2RlLlZBTElEQVRJT05fRVJST1IpLCBFcnJvckNvZGUuVkFMSURBVElPTl9FUlJPUiwgbWVzc2FnZSk7XG4gICAgdGhpcy5uYW1lID0gJ1ZhbGlkYXRpb25FcnJvcic7XG4gIH1cbn1cblxuLyoqIDQwOSDigJQgQ29uZmxpY3QgLyBkdXBsaWNhdGUuICovXG5leHBvcnQgY2xhc3MgQ29uZmxpY3RFcnJvciBleHRlbmRzIEFwcEVycm9yIHtcbiAgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nKSB7XG4gICAgc3VwZXIoZ2V0U3RhdHVzRm9yRXJyb3JDb2RlKEVycm9yQ29kZS5DT05GTElDVCksIEVycm9yQ29kZS5DT05GTElDVCwgbWVzc2FnZSk7XG4gICAgdGhpcy5uYW1lID0gJ0NvbmZsaWN0RXJyb3InO1xuICB9XG59XG5cbi8qKiA0MDEg4oCUIFVuYXV0aG9yaXplZCAvIGF1dGhlbnRpY2F0aW9uIHJlcXVpcmVkLiAqL1xuZXhwb3J0IGNsYXNzIFVuYXV0aG9yaXplZEVycm9yIGV4dGVuZHMgQXBwRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICBzdXBlcihnZXRTdGF0dXNGb3JFcnJvckNvZGUoRXJyb3JDb2RlLlVOQVVUSE9SSVpFRCksIEVycm9yQ29kZS5VTkFVVEhPUklaRUQsIG1lc3NhZ2UpO1xuICAgIHRoaXMubmFtZSA9ICdVbmF1dGhvcml6ZWRFcnJvcic7XG4gIH1cbn1cbiJdfQ==
|
package/lib/errors/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export * from './app-errors';
|
|
1
|
+
export * from './app-errors.js';
|
package/lib/errors/index.js
CHANGED
|
@@ -1,20 +1,4 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
// Copyright 2026 Pipeline Builder Contributors
|
|
3
2
|
// SPDX-License-Identifier: Apache-2.0
|
|
4
|
-
|
|
5
|
-
|
|
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
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
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 (!
|
|
29
|
-
|
|
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,
|
|
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
|
-
|
|
5
|
-
|
|
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
|
-
|
|
20
|
+
export function sendEntityNotFound(res, entityName) {
|
|
21
|
+
sendError(res, 404, `${entityName} not found.`, ErrorCode.NOT_FOUND);
|
|
26
22
|
}
|
|
27
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3J1ZC1oZWxwZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2hlbHBlcnMvY3J1ZC1oZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFHdEMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3BELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUVqRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLG9CQUFvQixDQUNsQyxNQUFTLEVBQ1QsV0FBd0I7SUFFeEIsTUFBTSxVQUFVLEdBQUcsRUFBRSxHQUFHLE1BQU0sRUFBRSxDQUFDO0lBQ2pDLEtBQUssTUFBTSxLQUFLLElBQUksV0FBVyxFQUFFLENBQUM7UUFDaEMsSUFBSSxLQUFLLElBQUksVUFBVSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQzVELFVBQXNDLENBQUMsS0FBZSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ2hFLENBQUM7SUFDSCxDQUFDO0lBQ0QsT0FBTyxVQUFVLENBQUM7QUFDcEIsQ0FBQztBQUVELHFGQUFxRjtBQUNyRixNQUFNLFVBQVUsa0JBQWtCLENBQUMsR0FBYSxFQUFFLFVBQWtCO0lBQ2xFLFNBQVMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsVUFBVSxhQUFhLEVBQUUsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ3ZFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHR5cGUgeyBSZXNwb25zZSB9IGZyb20gJ2V4cHJlc3MnO1xuaW1wb3J0IHsgRXJyb3JDb2RlIH0gZnJvbSAnLi4vdHlwZXMvZXJyb3ItY29kZXMuanMnO1xuaW1wb3J0IHsgc2VuZEVycm9yIH0gZnJvbSAnLi4vdXRpbHMvcmVzcG9uc2UuanMnO1xuXG4vKipcbiAqIENvZXJjZSBsaXN0ZWQgZmllbGRzIG9uIGEgREItcmV0dXJuZWQgcmVjb3JkIHRvIGFycmF5cy4gRHJpenpsZS9wZyBzb21ldGltZXNcbiAqIHJldHVybnMgYG51bGxgIGZvciBqc29uYiBjb2x1bW5zIHdoZW4gdGhlIHJvdyB3YXMgaW5zZXJ0ZWQgd2l0aCBhIG1pc3NpbmdcbiAqIGtleSDigJQgY2FsbGVycyBleHBlY3QgYFtdYCBzbyBtYXAgaXRlcmF0aW9uIGRvZXNuJ3QgY3Jhc2guXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVBcnJheUZpZWxkczxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+KFxuICByZWNvcmQ6IFQsXG4gIGFycmF5RmllbGRzOiAoa2V5b2YgVClbXSxcbik6IFQge1xuICBjb25zdCBub3JtYWxpemVkID0geyAuLi5yZWNvcmQgfTtcbiAgZm9yIChjb25zdCBmaWVsZCBvZiBhcnJheUZpZWxkcykge1xuICAgIGlmIChmaWVsZCBpbiBub3JtYWxpemVkICYmICFBcnJheS5pc0FycmF5KG5vcm1hbGl6ZWRbZmllbGRdKSkge1xuICAgICAgKG5vcm1hbGl6ZWQgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pW2ZpZWxkIGFzIHN0cmluZ10gPSBbXTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG5vcm1hbGl6ZWQ7XG59XG5cbi8qKiBTZW5kIGEgNDA0IE5PVF9GT1VORCBlcnJvciB3aXRoIGEgc3RhbmRhcmQgYCR7ZW50aXR5TmFtZX0gbm90IGZvdW5kLmAgbWVzc2FnZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZW5kRW50aXR5Tm90Rm91bmQocmVzOiBSZXNwb25zZSwgZW50aXR5TmFtZTogc3RyaW5nKTogdm9pZCB7XG4gIHNlbmRFcnJvcihyZXMsIDQwNCwgYCR7ZW50aXR5TmFtZX0gbm90IGZvdW5kLmAsIEVycm9yQ29kZS5OT1RfRk9VTkQpO1xufVxuIl19
|
package/lib/helpers/index.d.ts
CHANGED
|
@@ -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';
|
package/lib/helpers/index.js
CHANGED
|
@@ -1,23 +1,7 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
// Copyright 2026 Pipeline Builder Contributors
|
|
3
2
|
// SPDX-License-Identifier: Apache-2.0
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
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=
|