@pipeline-builder/api-core 3.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +202 -0
- package/README.md +51 -0
- package/lib/constants/ai-providers.d.ts +41 -0
- package/lib/constants/ai-providers.js +88 -0
- package/lib/constants/http-status.d.ts +24 -0
- package/lib/constants/http-status.js +29 -0
- package/lib/constants/index.d.ts +3 -0
- package/lib/constants/index.js +22 -0
- package/lib/constants/time.d.ts +10 -0
- package/lib/constants/time.js +16 -0
- package/lib/errors/app-errors.d.ts +30 -0
- package/lib/errors/app-errors.js +62 -0
- package/lib/errors/index.d.ts +1 -0
- package/lib/errors/index.js +20 -0
- package/lib/helpers/access-helpers.d.ts +40 -0
- package/lib/helpers/access-helpers.js +56 -0
- package/lib/helpers/crud-helpers.d.ts +16 -0
- package/lib/helpers/crud-helpers.js +34 -0
- package/lib/helpers/index.d.ts +4 -0
- package/lib/helpers/index.js +23 -0
- package/lib/helpers/mask-helpers.d.ts +33 -0
- package/lib/helpers/mask-helpers.js +54 -0
- package/lib/helpers/sse-helpers.d.ts +13 -0
- package/lib/helpers/sse-helpers.js +40 -0
- package/lib/index.d.ts +57 -0
- package/lib/index.js +86 -0
- package/lib/middleware/auth.d.ts +50 -0
- package/lib/middleware/auth.js +171 -0
- package/lib/middleware/index.d.ts +1 -0
- package/lib/middleware/index.js +20 -0
- package/lib/openapi/extend-zod.d.ts +1 -0
- package/lib/openapi/extend-zod.js +8 -0
- package/lib/openapi/index.d.ts +2 -0
- package/lib/openapi/index.js +10 -0
- package/lib/openapi/registry.d.ts +17 -0
- package/lib/openapi/registry.js +42 -0
- package/lib/openapi/routes/billing-routes.d.ts +1 -0
- package/lib/openapi/routes/billing-routes.js +69 -0
- package/lib/openapi/routes/index.d.ts +5 -0
- package/lib/openapi/routes/index.js +22 -0
- package/lib/openapi/routes/message-routes.d.ts +1 -0
- package/lib/openapi/routes/message-routes.js +108 -0
- package/lib/openapi/routes/pipeline-routes.d.ts +1 -0
- package/lib/openapi/routes/pipeline-routes.js +90 -0
- package/lib/openapi/routes/plugin-routes.d.ts +1 -0
- package/lib/openapi/routes/plugin-routes.js +99 -0
- package/lib/openapi/routes/quota-routes.d.ts +1 -0
- package/lib/openapi/routes/quota-routes.js +65 -0
- package/lib/openapi/schema-registry.d.ts +25 -0
- package/lib/openapi/schema-registry.js +95 -0
- package/lib/routes/health.d.ts +47 -0
- package/lib/routes/health.js +81 -0
- package/lib/routes/index.d.ts +1 -0
- package/lib/routes/index.js +20 -0
- package/lib/services/admin-audit.d.ts +13 -0
- package/lib/services/admin-audit.js +31 -0
- package/lib/services/cache-service.d.ts +108 -0
- package/lib/services/cache-service.js +212 -0
- package/lib/services/compliance-client.d.ts +46 -0
- package/lib/services/compliance-client.js +102 -0
- package/lib/services/compliance-event-subscriber.d.ts +11 -0
- package/lib/services/compliance-event-subscriber.js +60 -0
- package/lib/services/compliance-queue.d.ts +11 -0
- package/lib/services/compliance-queue.js +38 -0
- package/lib/services/entity-events.d.ts +44 -0
- package/lib/services/entity-events.js +63 -0
- package/lib/services/http-client.d.ts +108 -0
- package/lib/services/http-client.js +285 -0
- package/lib/services/index.d.ts +10 -0
- package/lib/services/index.js +40 -0
- package/lib/services/quota.d.ts +59 -0
- package/lib/services/quota.js +137 -0
- package/lib/services/retry-strategy.d.ts +74 -0
- package/lib/services/retry-strategy.js +127 -0
- package/lib/types/billing.d.ts +47 -0
- package/lib/types/billing.js +5 -0
- package/lib/types/common.d.ts +161 -0
- package/lib/types/common.js +53 -0
- package/lib/types/error-codes.d.ts +38 -0
- package/lib/types/error-codes.js +77 -0
- package/lib/types/feature-flags.d.ts +38 -0
- package/lib/types/feature-flags.js +107 -0
- package/lib/types/http.d.ts +37 -0
- package/lib/types/http.js +5 -0
- package/lib/types/index.d.ts +7 -0
- package/lib/types/index.js +26 -0
- package/lib/types/pipeline.d.ts +70 -0
- package/lib/types/pipeline.js +44 -0
- package/lib/types/quota-tiers.d.ts +23 -0
- package/lib/types/quota-tiers.js +26 -0
- package/lib/utils/alias-resolver.d.ts +16 -0
- package/lib/utils/alias-resolver.js +49 -0
- package/lib/utils/headers.d.ts +18 -0
- package/lib/utils/headers.js +24 -0
- package/lib/utils/identity.d.ts +61 -0
- package/lib/utils/identity.js +75 -0
- package/lib/utils/index.d.ts +7 -0
- package/lib/utils/index.js +26 -0
- package/lib/utils/logger.d.ts +28 -0
- package/lib/utils/logger.js +77 -0
- package/lib/utils/object.d.ts +13 -0
- package/lib/utils/object.js +21 -0
- package/lib/utils/params.d.ts +89 -0
- package/lib/utils/params.js +148 -0
- package/lib/utils/response.d.ts +142 -0
- package/lib/utils/response.js +237 -0
- package/lib/validation/ai-schemas.d.ts +61 -0
- package/lib/validation/ai-schemas.js +81 -0
- package/lib/validation/common-schemas.d.ts +72 -0
- package/lib/validation/common-schemas.js +58 -0
- package/lib/validation/index.d.ts +6 -0
- package/lib/validation/index.js +25 -0
- package/lib/validation/message-schemas.d.ts +79 -0
- package/lib/validation/message-schemas.js +42 -0
- package/lib/validation/middleware.d.ts +60 -0
- package/lib/validation/middleware.js +77 -0
- package/lib/validation/pipeline-schemas.d.ts +135 -0
- package/lib/validation/pipeline-schemas.js +85 -0
- package/lib/validation/plugin-schemas.d.ts +127 -0
- package/lib/validation/plugin-schemas.js +84 -0
- package/openapi.yaml +292 -0
- package/package.json +127 -0
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Copyright 2026 Pipeline Builder Contributors
|
|
3
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
|
+
exports.AIGenerateFromUrlBodySchema = exports.PluginDeployGeneratedSchema = exports.AIGenerateBodySchema = void 0;
|
|
6
|
+
const zod_1 = require("zod");
|
|
7
|
+
const common_schemas_1 = require("./common-schemas");
|
|
8
|
+
const MAX_PROMPT_LENGTH = parseInt(process.env.MAX_PROMPT_LENGTH || '5000', 10);
|
|
9
|
+
// AI Generation Request
|
|
10
|
+
/**
|
|
11
|
+
* Schema for AI generation request body.
|
|
12
|
+
* Used by both POST /pipelines/generate and POST /plugins/generate.
|
|
13
|
+
*/
|
|
14
|
+
exports.AIGenerateBodySchema = zod_1.z.object({
|
|
15
|
+
/** Natural language description of what to generate. */
|
|
16
|
+
prompt: zod_1.z
|
|
17
|
+
.string()
|
|
18
|
+
.min(1, 'A prompt with a natural language description is required')
|
|
19
|
+
.max(MAX_PROMPT_LENGTH, `Prompt must be ${MAX_PROMPT_LENGTH} characters or fewer`),
|
|
20
|
+
/** AI provider identifier (e.g. "anthropic", "openai", "google"). */
|
|
21
|
+
provider: zod_1.z.string().min(1, 'A provider is required (e.g., "anthropic", "openai", "google")'),
|
|
22
|
+
/** AI model identifier (e.g. "claude-sonnet-4-20250514", "gpt-4o"). */
|
|
23
|
+
model: zod_1.z.string().min(1, 'A model is required (e.g., "claude-sonnet-4-20250514", "gpt-4o")'),
|
|
24
|
+
/** Optional custom API key to override the server/org key for this request. */
|
|
25
|
+
apiKey: zod_1.z.string().min(1).optional(),
|
|
26
|
+
/** Previous pipeline config for iterative refinement. */
|
|
27
|
+
previousConfig: zod_1.z.record(zod_1.z.string(), zod_1.z.unknown()).optional(),
|
|
28
|
+
/** Fallback AI providers if primary fails (e.g., ["openai", "google"]). */
|
|
29
|
+
fallbackProviders: zod_1.z.array(zod_1.z.string()).optional(),
|
|
30
|
+
});
|
|
31
|
+
// Plugin Deploy-Generated Request
|
|
32
|
+
/**
|
|
33
|
+
* Schema for POST /plugins/deploy-generated request body.
|
|
34
|
+
* Validates the AI-generated plugin configuration before Docker build.
|
|
35
|
+
*/
|
|
36
|
+
exports.PluginDeployGeneratedSchema = zod_1.z.object({
|
|
37
|
+
/** Plugin name (lowercase, alphanumeric with hyphens). */
|
|
38
|
+
name: zod_1.z.string().min(1, 'Plugin name is required'),
|
|
39
|
+
/** Human-readable description. */
|
|
40
|
+
description: zod_1.z.string().optional(),
|
|
41
|
+
/** Semantic version (e.g. "1.0.0"). */
|
|
42
|
+
version: zod_1.z.string().min(1, 'Version is required'),
|
|
43
|
+
/** Plugin execution type. */
|
|
44
|
+
pluginType: zod_1.z.enum(['CodeBuildStep', 'ShellStep', 'ManualApprovalStep']).default('CodeBuildStep'),
|
|
45
|
+
/** AWS CodeBuild compute size. */
|
|
46
|
+
computeType: zod_1.z.enum(['SMALL', 'MEDIUM', 'LARGE', 'X2_LARGE']).default('MEDIUM'),
|
|
47
|
+
/** Keywords for categorization. */
|
|
48
|
+
keywords: zod_1.z.array(zod_1.z.string()).optional().default([]),
|
|
49
|
+
/** Primary output directory path. */
|
|
50
|
+
primaryOutputDirectory: zod_1.z.string().nullable().optional(),
|
|
51
|
+
/** Commands to install dependencies. */
|
|
52
|
+
installCommands: zod_1.z.array(zod_1.z.string()).optional().default([]),
|
|
53
|
+
/** Build/execution commands. */
|
|
54
|
+
commands: zod_1.z.array(zod_1.z.string()).min(1, 'At least one build command is required'),
|
|
55
|
+
/** Environment variables. */
|
|
56
|
+
env: zod_1.z.record(zod_1.z.string(), zod_1.z.string()).optional(),
|
|
57
|
+
/** Docker build arguments passed via --build-arg at image build time. */
|
|
58
|
+
buildArgs: zod_1.z.record(zod_1.z.string(), zod_1.z.string()).optional(),
|
|
59
|
+
/** Complete Dockerfile content for the build environment. */
|
|
60
|
+
dockerfile: zod_1.z.string().min(1, 'Dockerfile content is required'),
|
|
61
|
+
/** Access visibility. */
|
|
62
|
+
accessModifier: common_schemas_1.AccessModifierSchema.default('private'),
|
|
63
|
+
});
|
|
64
|
+
// AI Generate From URL Request
|
|
65
|
+
/**
|
|
66
|
+
* Schema for POST /pipelines/generate/from-url/stream request body.
|
|
67
|
+
* Validates Git URL + AI provider configuration for repo-based pipeline generation.
|
|
68
|
+
*/
|
|
69
|
+
exports.AIGenerateFromUrlBodySchema = zod_1.z.object({
|
|
70
|
+
/** Git repository URL (HTTPS, SSH, or git@ format). */
|
|
71
|
+
gitUrl: zod_1.z.string().min(1, 'A Git repository URL is required').max(500, 'URL must be 500 characters or fewer'),
|
|
72
|
+
/** AI provider identifier (e.g. "anthropic", "openai", "google"). */
|
|
73
|
+
provider: zod_1.z.string().min(1, 'A provider is required'),
|
|
74
|
+
/** AI model identifier (e.g. "claude-sonnet-4-20250514", "gpt-4o"). */
|
|
75
|
+
model: zod_1.z.string().min(1, 'A model is required'),
|
|
76
|
+
/** Optional custom API key to override the server config. */
|
|
77
|
+
apiKey: zod_1.z.string().min(1).optional(),
|
|
78
|
+
/** Optional authentication token for accessing private repositories. */
|
|
79
|
+
repoToken: zod_1.z.string().min(1).optional(),
|
|
80
|
+
});
|
|
81
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWktc2NoZW1hcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy92YWxpZGF0aW9uL2FpLXNjaGVtYXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7OztBQUV0Qyw2QkFBd0I7QUFDeEIscURBQXdEO0FBRXhELE1BQU0saUJBQWlCLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLElBQUksTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBRWhGLHdCQUF3QjtBQUV4Qjs7O0dBR0c7QUFDVSxRQUFBLG9CQUFvQixHQUFHLE9BQUMsQ0FBQyxNQUFNLENBQUM7SUFDM0Msd0RBQXdEO0lBQ3hELE1BQU0sRUFBRSxPQUFDO1NBQ04sTUFBTSxFQUFFO1NBQ1IsR0FBRyxDQUFDLENBQUMsRUFBRSwwREFBMEQsQ0FBQztTQUNsRSxHQUFHLENBQUMsaUJBQWlCLEVBQUUsa0JBQWtCLGlCQUFpQixzQkFBc0IsQ0FBQztJQUVwRixxRUFBcUU7SUFDckUsUUFBUSxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLGdFQUFnRSxDQUFDO0lBRTdGLHVFQUF1RTtJQUN2RSxLQUFLLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsa0VBQWtFLENBQUM7SUFFNUYsK0VBQStFO0lBQy9FLE1BQU0sRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRTtJQUVwQyx5REFBeUQ7SUFDekQsY0FBYyxFQUFFLE9BQUMsQ0FBQyxNQUFNLENBQUMsT0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLE9BQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRTtJQUU1RCwyRUFBMkU7SUFDM0UsaUJBQWlCLEVBQUUsT0FBQyxDQUFDLEtBQUssQ0FB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QUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUU7SUFFcEMsd0VBQXdFO0lBQ3hFLFNBQVMsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRTtDQUN4QyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHsgeiB9IGZyb20gJ3pvZCc7XG5pbXBvcnQgeyBBY2Nlc3NNb2RpZmllclNjaGVtYSB9IGZyb20gJy4vY29tbW9uLXNjaGVtYXMnO1xuXG5jb25zdCBNQVhfUFJPTVBUX0xFTkdUSCA9IHBhcnNlSW50KHByb2Nlc3MuZW52Lk1BWF9QUk9NUFRfTEVOR1RIIHx8ICc1MDAwJywgMTApO1xuXG4vLyBBSSBHZW5lcmF0aW9uIFJlcXVlc3RcblxuLyoqXG4gKiBTY2hlbWEgZm9yIEFJIGdlbmVyYXRpb24gcmVxdWVzdCBib2R5LlxuICogVXNlZCBieSBib3RoIFBPU1QgL3BpcGVsaW5lcy9nZW5lcmF0ZSBhbmQgUE9TVCAvcGx1Z2lucy9nZW5lcmF0ZS5cbiAqL1xuZXhwb3J0IGNvbnN0IEFJR2VuZXJhdGVCb2R5U2NoZW1hID0gei5vYmplY3Qoe1xuICAvKiogTmF0dXJhbCBsYW5ndWFnZSBkZXNjcmlwdGlvbiBvZiB3aGF0IHRvIGdlbmVyYXRlLiAqL1xuICBwcm9tcHQ6IHpcbiAgICAuc3RyaW5nKClcbiAgICAubWluKDEsICdBIHByb21wdCB3aXRoIGEgbmF0dXJhbCBsYW5ndWFnZSBkZXNjcmlwdGlvbiBpcyByZXF1aXJlZCcpXG4gICAgLm1heChNQVhfUFJPTVBUX0xFTkdUSCwgYFByb21wdCBtdXN0IGJlICR7TUFYX1BST01QVF9MRU5HVEh9IGNoYXJhY3RlcnMgb3IgZmV3ZXJgKSxcblxuICAvKiogQUkgcHJvdmlkZXIgaWRlbnRpZmllciAoZS5nLiBcImFudGhyb3BpY1wiLCBcIm9wZW5haVwiLCBcImdvb2dsZVwiKS4gKi9cbiAgcHJvdmlkZXI6IHouc3RyaW5nKCkubWluKDEsICdBIHByb3ZpZGVyIGlzIHJlcXVpcmVkIChlLmcuLCBcImFudGhyb3BpY1wiLCBcIm9wZW5haVwiLCBcImdvb2dsZVwiKScpLFxuXG4gIC8qKiBBSSBtb2RlbCBpZGVudGlmaWVyIChlLmcuIFwiY2xhdWRlLXNvbm5ldC00LTIwMjUwNTE0XCIsIFwiZ3B0LTRvXCIpLiAqL1xuICBtb2RlbDogei5zdHJpbmcoKS5taW4oMSwgJ0EgbW9kZWwgaXMgcmVxdWlyZWQgKGUuZy4sIFwiY2xhdWRlLXNvbm5ldC00LTIwMjUwNTE0XCIsIFwiZ3B0LTRvXCIpJyksXG5cbiAgLyoqIE9wdGlvbmFsIGN1c3RvbSBBUEkga2V5IHRvIG92ZXJyaWRlIHRoZSBzZXJ2ZXIvb3JnIGtleSBmb3IgdGhpcyByZXF1ZXN0LiAqL1xuICBhcGlLZXk6IHouc3RyaW5nKCkubWluKDEpLm9wdGlvbmFsKCksXG5cbiAgLyoqIFByZXZpb3VzIHBpcGVsaW5lIGNvbmZpZyBmb3IgaXRlcmF0aXZlIHJlZmluZW1lbnQuICovXG4gIHByZXZpb3VzQ29uZmlnOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LnVua25vd24oKSkub3B0aW9uYWwoKSxcblxuICAvKiogRmFsbGJhY2sgQUkgcHJvdmlkZXJzIGlmIHByaW1hcnkgZmFpbHMgKGUuZy4sIFtcIm9wZW5haVwiLCBcImdvb2dsZVwiXSkuICovXG4gIGZhbGxiYWNrUHJvdmlkZXJzOiB6LmFycmF5KHouc3RyaW5nKCkpLm9wdGlvbmFsKCksXG59KTtcblxuLyoqIFZhbGlkYXRlZCB0eXBlIGZvciBBSSBnZW5lcmF0aW9uIHJlcXVlc3QgYm9keS4gKi9cbmV4cG9ydCB0eXBlIFZhbGlkYXRlZEFJR2VuZXJhdGVCb2R5ID0gei5pbmZlcjx0eXBlb2YgQUlHZW5lcmF0ZUJvZHlTY2hlbWE+O1xuXG4vLyBQbHVnaW4gRGVwbG95LUdlbmVyYXRlZCBSZXF1ZXN0XG5cbi8qKlxuICogU2NoZW1hIGZvciBQT1NUIC9wbHVnaW5zL2RlcGxveS1nZW5lcmF0ZWQgcmVxdWVzdCBib2R5LlxuICogVmFsaWRhdGVzIHRoZSBBSS1nZW5lcmF0ZWQgcGx1Z2luIGNvbmZpZ3VyYXRpb24gYmVmb3JlIERvY2tlciBidWlsZC5cbiAqL1xuZXhwb3J0IGNvbnN0IFBsdWdpbkRlcGxveUdlbmVyYXRlZFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgLyoqIFBsdWdpbiBuYW1lIChsb3dlcmNhc2UsIGFscGhhbnVtZXJpYyB3aXRoIGh5cGhlbnMpLiAqL1xuICBuYW1lOiB6LnN0cmluZygpLm1pbigxLCAnUGx1Z2luIG5hbWUgaXMgcmVxdWlyZWQnKSxcblxuICAvKiogSHVtYW4tcmVhZGFibGUgZGVzY3JpcHRpb24uICovXG4gIGRlc2NyaXB0aW9uOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG5cbiAgLyoqIFNlbWFudGljIHZlcnNpb24gKGUuZy4gXCIxLjAuMFwiKS4gKi9cbiAgdmVyc2lvbjogei5zdHJpbmcoKS5taW4oMSwgJ1ZlcnNpb24gaXMgcmVxdWlyZWQnKSxcblxuICAvKiogUGx1Z2luIGV4ZWN1dGlvbiB0eXBlLiAqL1xuICBwbHVnaW5UeXBlOiB6LmVudW0oWydDb2RlQnVpbGRTdGVwJywgJ1NoZWxsU3RlcCcsICdNYW51YWxBcHByb3ZhbFN0ZXAnXSkuZGVmYXVsdCgnQ29kZUJ1aWxkU3RlcCcpLFxuXG4gIC8qKiBBV1MgQ29kZUJ1aWxkIGNvbXB1dGUgc2l6ZS4gKi9cbiAgY29tcHV0ZVR5cGU6IHouZW51bShbJ1NNQUxMJywgJ01FRElVTScsICdMQVJHRScsICdYMl9MQVJHRSddKS5kZWZhdWx0KCdNRURJVU0nKSxcblxuICAvKiogS2V5d29yZHMgZm9yIGNhdGVnb3JpemF0aW9uLiAqL1xuICBrZXl3b3Jkczogei5hcnJheSh6LnN0cmluZygpKS5vcHRpb25hbCgpLmRlZmF1bHQoW10pLFxuXG4gIC8qKiBQcmltYXJ5IG91dHB1dCBkaXJlY3RvcnkgcGF0aC4gKi9cbiAgcHJpbWFyeU91dHB1dERpcmVjdG9yeTogei5zdHJpbmcoKS5udWxsYWJsZSgpLm9wdGlvbmFsKCksXG5cbiAgLyoqIENvbW1hbmRzIHRvIGluc3RhbGwgZGVwZW5kZW5jaWVzLiAqL1xuICBpbnN0YWxsQ29tbWFuZHM6IHouYXJyYXkoei5zdHJpbmcoKSkub3B0aW9uYWwoKS5kZWZhdWx0KFtdKSxcblxuICAvKiogQnVpbGQvZXhlY3V0aW9uIGNvbW1hbmRzLiAqL1xuICBjb21tYW5kczogei5hcnJheSh6LnN0cmluZygpKS5taW4oMSwgJ0F0IGxlYXN0IG9uZSBidWlsZCBjb21tYW5kIGlzIHJlcXVpcmVkJyksXG5cbiAgLyoqIEVudmlyb25tZW50IHZhcmlhYmxlcy4gKi9cbiAgZW52OiB6LnJlY29yZCh6LnN0cmluZygpLCB6LnN0cmluZygpKS5vcHRpb25hbCgpLFxuXG4gIC8qKiBEb2NrZXIgYnVpbGQgYXJndW1lbnRzIHBhc3NlZCB2aWEgLS1idWlsZC1hcmcgYXQgaW1hZ2UgYnVpbGQgdGltZS4gKi9cbiAgYnVpbGRBcmdzOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LnN0cmluZygpKS5vcHRpb25hbCgpLFxuXG4gIC8qKiBDb21wbGV0ZSBEb2NrZXJmaWxlIGNvbnRlbnQgZm9yIHRoZSBidWlsZCBlbnZpcm9ubWVudC4gKi9cbiAgZG9ja2VyZmlsZTogei5zdHJpbmcoKS5taW4oMSwgJ0RvY2tlcmZpbGUgY29udGVudCBpcyByZXF1aXJlZCcpLFxuXG4gIC8qKiBBY2Nlc3MgdmlzaWJpbGl0eS4gKi9cbiAgYWNjZXNzTW9kaWZpZXI6IEFjY2Vzc01vZGlmaWVyU2NoZW1hLmRlZmF1bHQoJ3ByaXZhdGUnKSxcbn0pO1xuXG4vKiogVmFsaWRhdGVkIHR5cGUgZm9yIHBsdWdpbiBkZXBsb3ktZ2VuZXJhdGVkIHJlcXVlc3QgYm9keS4gKi9cbmV4cG9ydCB0eXBlIFZhbGlkYXRlZFBsdWdpbkRlcGxveUdlbmVyYXRlZCA9IHouaW5mZXI8dHlwZW9mIFBsdWdpbkRlcGxveUdlbmVyYXRlZFNjaGVtYT47XG5cbi8vIEFJIEdlbmVyYXRlIEZyb20gVVJMIFJlcXVlc3RcblxuLyoqXG4gKiBTY2hlbWEgZm9yIFBPU1QgL3BpcGVsaW5lcy9nZW5lcmF0ZS9mcm9tLXVybC9zdHJlYW0gcmVxdWVzdCBib2R5LlxuICogVmFsaWRhdGVzIEdpdCBVUkwgKyBBSSBwcm92aWRlciBjb25maWd1cmF0aW9uIGZvciByZXBvLWJhc2VkIHBpcGVsaW5lIGdlbmVyYXRpb24uXG4gKi9cbmV4cG9ydCBjb25zdCBBSUdlbmVyYXRlRnJvbVVybEJvZHlTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIC8qKiBHaXQgcmVwb3NpdG9yeSBVUkwgKEhUVFBTLCBTU0gsIG9yIGdpdEAgZm9ybWF0KS4gKi9cbiAgZ2l0VXJsOiB6LnN0cmluZygpLm1pbigxLCAnQSBHaXQgcmVwb3NpdG9yeSBVUkwgaXMgcmVxdWlyZWQnKS5tYXgoNTAwLCAnVVJMIG11c3QgYmUgNTAwIGNoYXJhY3RlcnMgb3IgZmV3ZXInKSxcblxuICAvKiogQUkgcHJvdmlkZXIgaWRlbnRpZmllciAoZS5nLiBcImFudGhyb3BpY1wiLCBcIm9wZW5haVwiLCBcImdvb2dsZVwiKS4gKi9cbiAgcHJvdmlkZXI6IHouc3RyaW5nKCkubWluKDEsICdBIHByb3ZpZGVyIGlzIHJlcXVpcmVkJyksXG5cbiAgLyoqIEFJIG1vZGVsIGlkZW50aWZpZXIgKGUuZy4gXCJjbGF1ZGUtc29ubmV0LTQtMjAyNTA1MTRcIiwgXCJncHQtNG9cIikuICovXG4gIG1vZGVsOiB6LnN0cmluZygpLm1pbigxLCAnQSBtb2RlbCBpcyByZXF1aXJlZCcpLFxuXG4gIC8qKiBPcHRpb25hbCBjdXN0b20gQVBJIGtleSB0byBvdmVycmlkZSB0aGUgc2VydmVyIGNvbmZpZy4gKi9cbiAgYXBpS2V5OiB6LnN0cmluZygpLm1pbigxKS5vcHRpb25hbCgpLFxuXG4gIC8qKiBPcHRpb25hbCBhdXRoZW50aWNhdGlvbiB0b2tlbiBmb3IgYWNjZXNzaW5nIHByaXZhdGUgcmVwb3NpdG9yaWVzLiAqL1xuICByZXBvVG9rZW46IHouc3RyaW5nKCkubWluKDEpLm9wdGlvbmFsKCksXG59KTtcblxuLyoqIFZhbGlkYXRlZCB0eXBlIGZvciBBSSBnZW5lcmF0ZS1mcm9tLVVSTCByZXF1ZXN0IGJvZHkuICovXG5leHBvcnQgdHlwZSBWYWxpZGF0ZWRBSUdlbmVyYXRlRnJvbVVybEJvZHkgPSB6LmluZmVyPHR5cGVvZiBBSUdlbmVyYXRlRnJvbVVybEJvZHlTY2hlbWE+O1xuIl19
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import '../openapi/extend-zod';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
/**
|
|
4
|
+
* Access modifier schema
|
|
5
|
+
* Defines visibility of resources (public or private)
|
|
6
|
+
*/
|
|
7
|
+
export declare const AccessModifierSchema: z.ZodEnum<{
|
|
8
|
+
public: "public";
|
|
9
|
+
private: "private";
|
|
10
|
+
}>;
|
|
11
|
+
/**
|
|
12
|
+
* Sort order schema
|
|
13
|
+
*/
|
|
14
|
+
export declare const SortOrderSchema: z.ZodEnum<{
|
|
15
|
+
asc: "asc";
|
|
16
|
+
desc: "desc";
|
|
17
|
+
}>;
|
|
18
|
+
/**
|
|
19
|
+
* Pagination parameters schema
|
|
20
|
+
*/
|
|
21
|
+
export declare const MAX_PAGE_LIMIT: number;
|
|
22
|
+
export declare const PaginationSchema: z.ZodObject<{
|
|
23
|
+
limit: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
|
|
24
|
+
offset: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
|
|
25
|
+
sortBy: z.ZodOptional<z.ZodString>;
|
|
26
|
+
sortOrder: z.ZodOptional<z.ZodEnum<{
|
|
27
|
+
asc: "asc";
|
|
28
|
+
desc: "desc";
|
|
29
|
+
}>>;
|
|
30
|
+
}, z.core.$strip>;
|
|
31
|
+
/**
|
|
32
|
+
* Boolean query parameter schema
|
|
33
|
+
* Handles string "true"/"false" and boolean values
|
|
34
|
+
*/
|
|
35
|
+
export declare const BooleanQuerySchema: z.ZodUnion<readonly [z.ZodBoolean, z.ZodPipe<z.ZodEnum<{
|
|
36
|
+
true: "true";
|
|
37
|
+
false: "false";
|
|
38
|
+
}>, z.ZodTransform<boolean, "true" | "false">>, z.ZodPipe<z.ZodString, z.ZodTransform<boolean, string>>]>;
|
|
39
|
+
/**
|
|
40
|
+
* UUID schema with validation
|
|
41
|
+
*/
|
|
42
|
+
export declare const UUIDSchema: z.ZodString;
|
|
43
|
+
/**
|
|
44
|
+
* Optional UUID schema (for partial UUIDs or prefixes)
|
|
45
|
+
*/
|
|
46
|
+
export declare const UUIDPrefixSchema: z.ZodString;
|
|
47
|
+
/**
|
|
48
|
+
* Base filter schema for entities with common fields
|
|
49
|
+
*/
|
|
50
|
+
export declare const BaseFilterSchema: z.ZodObject<{
|
|
51
|
+
id: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>, z.ZodString]>>;
|
|
52
|
+
accessModifier: z.ZodOptional<z.ZodEnum<{
|
|
53
|
+
public: "public";
|
|
54
|
+
private: "private";
|
|
55
|
+
}>>;
|
|
56
|
+
isActive: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodPipe<z.ZodEnum<{
|
|
57
|
+
true: "true";
|
|
58
|
+
false: "false";
|
|
59
|
+
}>, z.ZodTransform<boolean, "true" | "false">>, z.ZodPipe<z.ZodString, z.ZodTransform<boolean, string>>]>>;
|
|
60
|
+
isDefault: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodPipe<z.ZodEnum<{
|
|
61
|
+
true: "true";
|
|
62
|
+
false: "false";
|
|
63
|
+
}>, z.ZodTransform<boolean, "true" | "false">>, z.ZodPipe<z.ZodString, z.ZodTransform<boolean, string>>]>>;
|
|
64
|
+
}, z.core.$strip>;
|
|
65
|
+
/**
|
|
66
|
+
* Infer TypeScript types from schemas
|
|
67
|
+
* Note: Prefixed with "Validated" to avoid conflicts with existing type definitions
|
|
68
|
+
*/
|
|
69
|
+
export type ValidatedAccessModifier = z.infer<typeof AccessModifierSchema>;
|
|
70
|
+
export type ValidatedSortOrder = z.infer<typeof SortOrderSchema>;
|
|
71
|
+
export type ValidatedPaginationParams = z.infer<typeof PaginationSchema>;
|
|
72
|
+
export type ValidatedBaseFilter = z.infer<typeof BaseFilterSchema>;
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Copyright 2026 Pipeline Builder Contributors
|
|
3
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
|
+
exports.BaseFilterSchema = exports.UUIDPrefixSchema = exports.UUIDSchema = exports.BooleanQuerySchema = exports.PaginationSchema = exports.MAX_PAGE_LIMIT = exports.SortOrderSchema = exports.AccessModifierSchema = void 0;
|
|
6
|
+
// Must run before any z.* schema creation — Zod 4 requires eager extension
|
|
7
|
+
require("../openapi/extend-zod");
|
|
8
|
+
const zod_1 = require("zod");
|
|
9
|
+
/**
|
|
10
|
+
* Access modifier schema
|
|
11
|
+
* Defines visibility of resources (public or private)
|
|
12
|
+
*/
|
|
13
|
+
exports.AccessModifierSchema = zod_1.z.enum(['public', 'private']);
|
|
14
|
+
/**
|
|
15
|
+
* Sort order schema
|
|
16
|
+
*/
|
|
17
|
+
exports.SortOrderSchema = zod_1.z.enum(['asc', 'desc']);
|
|
18
|
+
/**
|
|
19
|
+
* Pagination parameters schema
|
|
20
|
+
*/
|
|
21
|
+
exports.MAX_PAGE_LIMIT = parseInt(process.env.MAX_PAGE_LIMIT || '1000', 10);
|
|
22
|
+
exports.PaginationSchema = zod_1.z.object({
|
|
23
|
+
limit: zod_1.z.coerce.number().int().min(1).max(exports.MAX_PAGE_LIMIT).optional(),
|
|
24
|
+
offset: zod_1.z.coerce.number().int().min(0).optional(),
|
|
25
|
+
sortBy: zod_1.z.string().optional(),
|
|
26
|
+
sortOrder: exports.SortOrderSchema.optional(),
|
|
27
|
+
});
|
|
28
|
+
/**
|
|
29
|
+
* Boolean query parameter schema
|
|
30
|
+
* Handles string "true"/"false" and boolean values
|
|
31
|
+
*/
|
|
32
|
+
exports.BooleanQuerySchema = zod_1.z.union([
|
|
33
|
+
zod_1.z.boolean(),
|
|
34
|
+
zod_1.z.enum(['true', 'false']).transform(val => val === 'true'),
|
|
35
|
+
zod_1.z.string().transform(val => val === 'true'),
|
|
36
|
+
]);
|
|
37
|
+
/**
|
|
38
|
+
* UUID schema with validation
|
|
39
|
+
*/
|
|
40
|
+
exports.UUIDSchema = zod_1.z.string().uuid({
|
|
41
|
+
message: 'Invalid UUID format',
|
|
42
|
+
});
|
|
43
|
+
/**
|
|
44
|
+
* Optional UUID schema (for partial UUIDs or prefixes)
|
|
45
|
+
*/
|
|
46
|
+
exports.UUIDPrefixSchema = zod_1.z.string().regex(/^[0-9a-f-]+$/i, {
|
|
47
|
+
message: 'Invalid UUID prefix format',
|
|
48
|
+
});
|
|
49
|
+
/**
|
|
50
|
+
* Base filter schema for entities with common fields
|
|
51
|
+
*/
|
|
52
|
+
exports.BaseFilterSchema = zod_1.z.object({
|
|
53
|
+
id: zod_1.z.union([exports.UUIDSchema, zod_1.z.array(exports.UUIDSchema), exports.UUIDPrefixSchema]).optional(),
|
|
54
|
+
accessModifier: exports.AccessModifierSchema.optional(),
|
|
55
|
+
isActive: exports.BooleanQuerySchema.optional(),
|
|
56
|
+
isDefault: exports.BooleanQuerySchema.optional(),
|
|
57
|
+
});
|
|
58
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLXNjaGVtYXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdmFsaWRhdGlvbi9jb21tb24tc2NoZW1hcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsK0NBQStDO0FBQy9DLHNDQUFzQzs7O0FBRXRDLDJFQUEyRTtBQUMzRSxpQ0FBK0I7QUFDL0IsNkJBQXdCO0FBRXhCOzs7R0FHRztBQUNVLFFBQUEsb0JBQW9CLEdBQUcsT0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO0FBRWxFOztHQUVHO0FBQ1UsUUFBQSxlQUFlLEdBQUcsT0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBRXZEOztHQUVHO0FBQ1UsUUFBQSxjQUFjLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYyxJQUFJLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztBQUVwRSxRQUFBLGdCQUFnQixHQUFHLE9BQUMsQ0FBQyxNQUFNLENBQUM7SUFDdkMsS0FBSyxFQUFFLE9BQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxzQkFBYyxDQUFDLENBQUMsUUFBUSxFQUFFO0lBQ3BFLE1BQU0sRUFBRSxPQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUU7SUFDakQsTUFBTSxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDN0IsU0FBUyxFQUFFLHVCQUFlLENBQUMsUUFBUSxFQUFFO0NBQ3RDLENBQUMsQ0FBQztBQUVIOzs7R0FHRztBQUNVLFFBQUEsa0JBQWtCLEdBQUcsT0FBQyxDQUFDLEtBQUssQ0FBQztJQUN4QyxPQUFDLENBQUMsT0FBTyxFQUFFO0lBQ1gsT0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxNQUFNLENBQUM7SUFDMUQsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxNQUFNLENBQUM7Q0FDNUMsQ0FBQyxDQUFDO0FBRUg7O0dBRUc7QUFDVSxRQUFBLFVBQVUsR0FBRyxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDO0lBQ3hDLE9BQU8sRUFBRSxxQkFBcUI7Q0FDL0IsQ0FBQyxDQUFDO0FBRUg7O0dBRUc7QUFDVSxRQUFBLGdCQUFnQixHQUFHLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxLQUFLLENBQUMsZUFBZSxFQUFFO0lBQ2hFLE9BQU8sRUFBRSw0QkFBNEI7Q0FDdEMsQ0FBQyxDQUFDO0FBRUg7O0dBRUc7QUFDVSxRQUFBLGdCQUFnQixHQUFHLE9BQUMsQ0FBQyxNQUFNLENBQUM7SUFDdkMsRUFBRSxFQUFFLE9BQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxrQkFBVSxFQUFFLE9BQUMsQ0FBQyxLQUFLLENBQUMsa0JBQVUsQ0FBQyxFQUFFLHdCQUFnQixDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUU7SUFDM0UsY0FBYyxFQUFFLDRCQUFvQixDQUFDLFFBQVEsRUFBRTtJQUMvQyxRQUFRLEVBQUUsMEJBQWtCLENBQUMsUUFBUSxFQUFFO0lBQ3ZDLFNBQVMsRUFBRSwwQkFBa0IsQ0FBQyxRQUFRLEVBQUU7Q0FDekMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8vIE11c3QgcnVuIGJlZm9yZSBhbnkgei4qIHNjaGVtYSBjcmVhdGlvbiDigJQgWm9kIDQgcmVxdWlyZXMgZWFnZXIgZXh0ZW5zaW9uXG5pbXBvcnQgJy4uL29wZW5hcGkvZXh0ZW5kLXpvZCc7XG5pbXBvcnQgeyB6IH0gZnJvbSAnem9kJztcblxuLyoqXG4gKiBBY2Nlc3MgbW9kaWZpZXIgc2NoZW1hXG4gKiBEZWZpbmVzIHZpc2liaWxpdHkgb2YgcmVzb3VyY2VzIChwdWJsaWMgb3IgcHJpdmF0ZSlcbiAqL1xuZXhwb3J0IGNvbnN0IEFjY2Vzc01vZGlmaWVyU2NoZW1hID0gei5lbnVtKFsncHVibGljJywgJ3ByaXZhdGUnXSk7XG5cbi8qKlxuICogU29ydCBvcmRlciBzY2hlbWFcbiAqL1xuZXhwb3J0IGNvbnN0IFNvcnRPcmRlclNjaGVtYSA9IHouZW51bShbJ2FzYycsICdkZXNjJ10pO1xuXG4vKipcbiAqIFBhZ2luYXRpb24gcGFyYW1ldGVycyBzY2hlbWFcbiAqL1xuZXhwb3J0IGNvbnN0IE1BWF9QQUdFX0xJTUlUID0gcGFyc2VJbnQocHJvY2Vzcy5lbnYuTUFYX1BBR0VfTElNSVQgfHwgJzEwMDAnLCAxMCk7XG5cbmV4cG9ydCBjb25zdCBQYWdpbmF0aW9uU2NoZW1hID0gei5vYmplY3Qoe1xuICBsaW1pdDogei5jb2VyY2UubnVtYmVyKCkuaW50KCkubWluKDEpLm1heChNQVhfUEFHRV9MSU1JVCkub3B0aW9uYWwoKSxcbiAgb2Zmc2V0OiB6LmNvZXJjZS5udW1iZXIoKS5pbnQoKS5taW4oMCkub3B0aW9uYWwoKSxcbiAgc29ydEJ5OiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHNvcnRPcmRlcjogU29ydE9yZGVyU2NoZW1hLm9wdGlvbmFsKCksXG59KTtcblxuLyoqXG4gKiBCb29sZWFuIHF1ZXJ5IHBhcmFtZXRlciBzY2hlbWFcbiAqIEhhbmRsZXMgc3RyaW5nIFwidHJ1ZVwiL1wiZmFsc2VcIiBhbmQgYm9vbGVhbiB2YWx1ZXNcbiAqL1xuZXhwb3J0IGNvbnN0IEJvb2xlYW5RdWVyeVNjaGVtYSA9IHoudW5pb24oW1xuICB6LmJvb2xlYW4oKSxcbiAgei5lbnVtKFsndHJ1ZScsICdmYWxzZSddKS50cmFuc2Zvcm0odmFsID0+IHZhbCA9PT0gJ3RydWUnKSxcbiAgei5zdHJpbmcoKS50cmFuc2Zvcm0odmFsID0+IHZhbCA9PT0gJ3RydWUnKSxcbl0pO1xuXG4vKipcbiAqIFVVSUQgc2NoZW1hIHdpdGggdmFsaWRhdGlvblxuICovXG5leHBvcnQgY29uc3QgVVVJRFNjaGVtYSA9IHouc3RyaW5nKCkudXVpZCh7XG4gIG1lc3NhZ2U6ICdJbnZhbGlkIFVVSUQgZm9ybWF0Jyxcbn0pO1xuXG4vKipcbiAqIE9wdGlvbmFsIFVVSUQgc2NoZW1hIChmb3IgcGFydGlhbCBVVUlEcyBvciBwcmVmaXhlcylcbiAqL1xuZXhwb3J0IGNvbnN0IFVVSURQcmVmaXhTY2hlbWEgPSB6LnN0cmluZygpLnJlZ2V4KC9eWzAtOWEtZi1dKyQvaSwge1xuICBtZXNzYWdlOiAnSW52YWxpZCBVVUlEIHByZWZpeCBmb3JtYXQnLFxufSk7XG5cbi8qKlxuICogQmFzZSBmaWx0ZXIgc2NoZW1hIGZvciBlbnRpdGllcyB3aXRoIGNvbW1vbiBmaWVsZHNcbiAqL1xuZXhwb3J0IGNvbnN0IEJhc2VGaWx0ZXJTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIGlkOiB6LnVuaW9uKFtVVUlEU2NoZW1hLCB6LmFycmF5KFVVSURTY2hlbWEpLCBVVUlEUHJlZml4U2NoZW1hXSkub3B0aW9uYWwoKSxcbiAgYWNjZXNzTW9kaWZpZXI6IEFjY2Vzc01vZGlmaWVyU2NoZW1hLm9wdGlvbmFsKCksXG4gIGlzQWN0aXZlOiBCb29sZWFuUXVlcnlTY2hlbWEub3B0aW9uYWwoKSxcbiAgaXNEZWZhdWx0OiBCb29sZWFuUXVlcnlTY2hlbWEub3B0aW9uYWwoKSxcbn0pO1xuXG4vKipcbiAqIEluZmVyIFR5cGVTY3JpcHQgdHlwZXMgZnJvbSBzY2hlbWFzXG4gKiBOb3RlOiBQcmVmaXhlZCB3aXRoIFwiVmFsaWRhdGVkXCIgdG8gYXZvaWQgY29uZmxpY3RzIHdpdGggZXhpc3RpbmcgdHlwZSBkZWZpbml0aW9uc1xuICovXG5leHBvcnQgdHlwZSBWYWxpZGF0ZWRBY2Nlc3NNb2RpZmllciA9IHouaW5mZXI8dHlwZW9mIEFjY2Vzc01vZGlmaWVyU2NoZW1hPjtcbmV4cG9ydCB0eXBlIFZhbGlkYXRlZFNvcnRPcmRlciA9IHouaW5mZXI8dHlwZW9mIFNvcnRPcmRlclNjaGVtYT47XG5leHBvcnQgdHlwZSBWYWxpZGF0ZWRQYWdpbmF0aW9uUGFyYW1zID0gei5pbmZlcjx0eXBlb2YgUGFnaW5hdGlvblNjaGVtYT47XG5leHBvcnQgdHlwZSBWYWxpZGF0ZWRCYXNlRmlsdGVyID0gei5pbmZlcjx0eXBlb2YgQmFzZUZpbHRlclNjaGVtYT47XG4iXX0=
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Copyright 2026 Pipeline Builder Contributors
|
|
3
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
5
|
+
if (k2 === undefined) k2 = k;
|
|
6
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
7
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
8
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
9
|
+
}
|
|
10
|
+
Object.defineProperty(o, k2, desc);
|
|
11
|
+
}) : (function(o, m, k, k2) {
|
|
12
|
+
if (k2 === undefined) k2 = k;
|
|
13
|
+
o[k2] = m[k];
|
|
14
|
+
}));
|
|
15
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
16
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
17
|
+
};
|
|
18
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19
|
+
__exportStar(require("./common-schemas"), exports);
|
|
20
|
+
__exportStar(require("./pipeline-schemas"), exports);
|
|
21
|
+
__exportStar(require("./plugin-schemas"), exports);
|
|
22
|
+
__exportStar(require("./message-schemas"), exports);
|
|
23
|
+
__exportStar(require("./ai-schemas"), exports);
|
|
24
|
+
__exportStar(require("./middleware"), exports);
|
|
25
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdmFsaWRhdGlvbi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsK0NBQStDO0FBQy9DLHNDQUFzQzs7Ozs7Ozs7Ozs7Ozs7OztBQUV0QyxtREFBaUM7QUFDakMscURBQW1DO0FBQ25DLG1EQUFpQztBQUNqQyxvREFBa0M7QUFDbEMsK0NBQTZCO0FBQzdCLCtDQUE2QiIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5leHBvcnQgKiBmcm9tICcuL2NvbW1vbi1zY2hlbWFzJztcbmV4cG9ydCAqIGZyb20gJy4vcGlwZWxpbmUtc2NoZW1hcyc7XG5leHBvcnQgKiBmcm9tICcuL3BsdWdpbi1zY2hlbWFzJztcbmV4cG9ydCAqIGZyb20gJy4vbWVzc2FnZS1zY2hlbWFzJztcbmV4cG9ydCAqIGZyb20gJy4vYWktc2NoZW1hcyc7XG5leHBvcnQgKiBmcm9tICcuL21pZGRsZXdhcmUnO1xuIl19
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
/**
|
|
3
|
+
* Message type schema
|
|
4
|
+
*/
|
|
5
|
+
export declare const MessageTypeSchema: z.ZodEnum<{
|
|
6
|
+
announcement: "announcement";
|
|
7
|
+
conversation: "conversation";
|
|
8
|
+
}>;
|
|
9
|
+
/**
|
|
10
|
+
* Message priority schema
|
|
11
|
+
*/
|
|
12
|
+
export declare const MessagePrioritySchema: z.ZodEnum<{
|
|
13
|
+
normal: "normal";
|
|
14
|
+
high: "high";
|
|
15
|
+
urgent: "urgent";
|
|
16
|
+
}>;
|
|
17
|
+
/**
|
|
18
|
+
* Message filter schema for query parameters
|
|
19
|
+
*/
|
|
20
|
+
export declare const MessageFilterSchema: z.ZodObject<{
|
|
21
|
+
id: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>, z.ZodString]>>;
|
|
22
|
+
accessModifier: z.ZodOptional<z.ZodEnum<{
|
|
23
|
+
public: "public";
|
|
24
|
+
private: "private";
|
|
25
|
+
}>>;
|
|
26
|
+
isActive: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodPipe<z.ZodEnum<{
|
|
27
|
+
true: "true";
|
|
28
|
+
false: "false";
|
|
29
|
+
}>, z.ZodTransform<boolean, "true" | "false">>, z.ZodPipe<z.ZodString, z.ZodTransform<boolean, string>>]>>;
|
|
30
|
+
isDefault: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodPipe<z.ZodEnum<{
|
|
31
|
+
true: "true";
|
|
32
|
+
false: "false";
|
|
33
|
+
}>, z.ZodTransform<boolean, "true" | "false">>, z.ZodPipe<z.ZodString, z.ZodTransform<boolean, string>>]>>;
|
|
34
|
+
threadId: z.ZodOptional<z.ZodString>;
|
|
35
|
+
recipientOrgId: z.ZodOptional<z.ZodString>;
|
|
36
|
+
messageType: z.ZodOptional<z.ZodEnum<{
|
|
37
|
+
announcement: "announcement";
|
|
38
|
+
conversation: "conversation";
|
|
39
|
+
}>>;
|
|
40
|
+
isRead: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodPipe<z.ZodEnum<{
|
|
41
|
+
true: "true";
|
|
42
|
+
false: "false";
|
|
43
|
+
}>, z.ZodTransform<boolean, "true" | "false">>, z.ZodPipe<z.ZodString, z.ZodTransform<boolean, string>>]>>;
|
|
44
|
+
priority: z.ZodOptional<z.ZodEnum<{
|
|
45
|
+
normal: "normal";
|
|
46
|
+
high: "high";
|
|
47
|
+
urgent: "urgent";
|
|
48
|
+
}>>;
|
|
49
|
+
}, z.core.$strip>;
|
|
50
|
+
/**
|
|
51
|
+
* Message creation schema
|
|
52
|
+
*/
|
|
53
|
+
export declare const MessageCreateSchema: z.ZodObject<{
|
|
54
|
+
recipientOrgId: z.ZodString;
|
|
55
|
+
messageType: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
|
|
56
|
+
announcement: "announcement";
|
|
57
|
+
conversation: "conversation";
|
|
58
|
+
}>>>;
|
|
59
|
+
subject: z.ZodString;
|
|
60
|
+
content: z.ZodString;
|
|
61
|
+
priority: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
|
|
62
|
+
normal: "normal";
|
|
63
|
+
high: "high";
|
|
64
|
+
urgent: "urgent";
|
|
65
|
+
}>>>;
|
|
66
|
+
}, z.core.$strip>;
|
|
67
|
+
/**
|
|
68
|
+
* Message reply schema
|
|
69
|
+
*/
|
|
70
|
+
export declare const MessageReplySchema: z.ZodObject<{
|
|
71
|
+
content: z.ZodString;
|
|
72
|
+
}, z.core.$strip>;
|
|
73
|
+
/**
|
|
74
|
+
* Infer TypeScript types from schemas
|
|
75
|
+
* Note: Prefixed with "Validated" to avoid conflicts with existing type definitions
|
|
76
|
+
*/
|
|
77
|
+
export type ValidatedMessageFilter = z.infer<typeof MessageFilterSchema>;
|
|
78
|
+
export type ValidatedMessageCreate = z.infer<typeof MessageCreateSchema>;
|
|
79
|
+
export type ValidatedMessageReply = z.infer<typeof MessageReplySchema>;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Copyright 2026 Pipeline Builder Contributors
|
|
3
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
|
+
exports.MessageReplySchema = exports.MessageCreateSchema = exports.MessageFilterSchema = exports.MessagePrioritySchema = exports.MessageTypeSchema = void 0;
|
|
6
|
+
const zod_1 = require("zod");
|
|
7
|
+
const common_schemas_1 = require("./common-schemas");
|
|
8
|
+
/**
|
|
9
|
+
* Message type schema
|
|
10
|
+
*/
|
|
11
|
+
exports.MessageTypeSchema = zod_1.z.enum(['announcement', 'conversation']);
|
|
12
|
+
/**
|
|
13
|
+
* Message priority schema
|
|
14
|
+
*/
|
|
15
|
+
exports.MessagePrioritySchema = zod_1.z.enum(['normal', 'high', 'urgent']);
|
|
16
|
+
/**
|
|
17
|
+
* Message filter schema for query parameters
|
|
18
|
+
*/
|
|
19
|
+
exports.MessageFilterSchema = common_schemas_1.BaseFilterSchema.extend({
|
|
20
|
+
threadId: zod_1.z.string().uuid().optional(),
|
|
21
|
+
recipientOrgId: zod_1.z.string().min(1).optional(),
|
|
22
|
+
messageType: exports.MessageTypeSchema.optional(),
|
|
23
|
+
isRead: common_schemas_1.BooleanQuerySchema.optional(),
|
|
24
|
+
priority: exports.MessagePrioritySchema.optional(),
|
|
25
|
+
});
|
|
26
|
+
/**
|
|
27
|
+
* Message creation schema
|
|
28
|
+
*/
|
|
29
|
+
exports.MessageCreateSchema = zod_1.z.object({
|
|
30
|
+
recipientOrgId: zod_1.z.string().min(1, 'Recipient organization ID is required'),
|
|
31
|
+
messageType: exports.MessageTypeSchema.optional().default('conversation'),
|
|
32
|
+
subject: zod_1.z.string().min(1, 'Subject is required'),
|
|
33
|
+
content: zod_1.z.string().min(1, 'Content is required'),
|
|
34
|
+
priority: exports.MessagePrioritySchema.optional().default('normal'),
|
|
35
|
+
});
|
|
36
|
+
/**
|
|
37
|
+
* Message reply schema
|
|
38
|
+
*/
|
|
39
|
+
exports.MessageReplySchema = zod_1.z.object({
|
|
40
|
+
content: zod_1.z.string().min(1, 'Content is required'),
|
|
41
|
+
});
|
|
42
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZS1zY2hlbWFzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3ZhbGlkYXRpb24vbWVzc2FnZS1zY2hlbWFzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDOzs7QUFFdEMsNkJBQXdCO0FBQ3hCLHFEQUF3RTtBQUV4RTs7R0FFRztBQUNVLFFBQUEsaUJBQWlCLEdBQUcsT0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLGNBQWMsRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDO0FBRTFFOztHQUVHO0FBQ1UsUUFBQSxxQkFBcUIsR0FBRyxPQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO0FBRTFFOztHQUVHO0FBQ1UsUUFBQSxtQkFBbUIsR0FBRyxpQ0FBZ0IsQ0FBQyxNQUFNLENBQUM7SUFDekQsUUFBUSxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDdEMsY0FBYyxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFO0lBQzVDLFdBQVcsRUFBRSx5QkFBaUIsQ0FBQyxRQUFRLEVBQUU7SUFDekMsTUFBTSxFQUFFLG1DQUFrQixDQUFDLFFBQVEsRUFBRTtJQUNyQyxRQUFRLEVBQUUsNkJBQXFCLENBQUMsUUFBUSxFQUFFO0NBQzNDLENBQUMsQ0FBQztBQUVIOztHQUVHO0FBQ1UsUUFBQSxtQkFBbUIsR0FBRyxPQUFDLENBQUMsTUFBTSxDQUFDO0lBQzFDLGNBQWMsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSx1Q0FBdUMsQ0FBQztJQUMxRSxXQUFXLEVBQUUseUJBQWlCLENBQUMsUUFBUSxFQUFFLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQztJQUNqRSxPQUFPLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUscUJBQXFCLENBQUM7SUFDakQsT0FBTyxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLHFCQUFxQixDQUFDO0lBQ2pELFFBQVEsRUFBRSw2QkFBcUIsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDO0NBQzdELENBQUMsQ0FBQztBQUVIOztHQUVHO0FBQ1UsUUFBQSxrQkFBa0IsR0FBRyxPQUFDLENBQUMsTUFBTSxDQUFDO0lBQ3pDLE9BQU8sRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxxQkFBcUIsQ0FBQztDQUNsRCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHsgeiB9IGZyb20gJ3pvZCc7XG5pbXBvcnQgeyBCYXNlRmlsdGVyU2NoZW1hLCBCb29sZWFuUXVlcnlTY2hlbWEgfSBmcm9tICcuL2NvbW1vbi1zY2hlbWFzJztcblxuLyoqXG4gKiBNZXNzYWdlIHR5cGUgc2NoZW1hXG4gKi9cbmV4cG9ydCBjb25zdCBNZXNzYWdlVHlwZVNjaGVtYSA9IHouZW51bShbJ2Fubm91bmNlbWVudCcsICdjb252ZXJzYXRpb24nXSk7XG5cbi8qKlxuICogTWVzc2FnZSBwcmlvcml0eSBzY2hlbWFcbiAqL1xuZXhwb3J0IGNvbnN0IE1lc3NhZ2VQcmlvcml0eVNjaGVtYSA9IHouZW51bShbJ25vcm1hbCcsICdoaWdoJywgJ3VyZ2VudCddKTtcblxuLyoqXG4gKiBNZXNzYWdlIGZpbHRlciBzY2hlbWEgZm9yIHF1ZXJ5IHBhcmFtZXRlcnNcbiAqL1xuZXhwb3J0IGNvbnN0IE1lc3NhZ2VGaWx0ZXJTY2hlbWEgPSBCYXNlRmlsdGVyU2NoZW1hLmV4dGVuZCh7XG4gIHRocmVhZElkOiB6LnN0cmluZygpLnV1aWQoKS5vcHRpb25hbCgpLFxuICByZWNpcGllbnRPcmdJZDogei5zdHJpbmcoKS5taW4oMSkub3B0aW9uYWwoKSxcbiAgbWVzc2FnZVR5cGU6IE1lc3NhZ2VUeXBlU2NoZW1hLm9wdGlvbmFsKCksXG4gIGlzUmVhZDogQm9vbGVhblF1ZXJ5U2NoZW1hLm9wdGlvbmFsKCksXG4gIHByaW9yaXR5OiBNZXNzYWdlUHJpb3JpdHlTY2hlbWEub3B0aW9uYWwoKSxcbn0pO1xuXG4vKipcbiAqIE1lc3NhZ2UgY3JlYXRpb24gc2NoZW1hXG4gKi9cbmV4cG9ydCBjb25zdCBNZXNzYWdlQ3JlYXRlU2NoZW1hID0gei5vYmplY3Qoe1xuICByZWNpcGllbnRPcmdJZDogei5zdHJpbmcoKS5taW4oMSwgJ1JlY2lwaWVudCBvcmdhbml6YXRpb24gSUQgaXMgcmVxdWlyZWQnKSxcbiAgbWVzc2FnZVR5cGU6IE1lc3NhZ2VUeXBlU2NoZW1hLm9wdGlvbmFsKCkuZGVmYXVsdCgnY29udmVyc2F0aW9uJyksXG4gIHN1YmplY3Q6IHouc3RyaW5nKCkubWluKDEsICdTdWJqZWN0IGlzIHJlcXVpcmVkJyksXG4gIGNvbnRlbnQ6IHouc3RyaW5nKCkubWluKDEsICdDb250ZW50IGlzIHJlcXVpcmVkJyksXG4gIHByaW9yaXR5OiBNZXNzYWdlUHJpb3JpdHlTY2hlbWEub3B0aW9uYWwoKS5kZWZhdWx0KCdub3JtYWwnKSxcbn0pO1xuXG4vKipcbiAqIE1lc3NhZ2UgcmVwbHkgc2NoZW1hXG4gKi9cbmV4cG9ydCBjb25zdCBNZXNzYWdlUmVwbHlTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIGNvbnRlbnQ6IHouc3RyaW5nKCkubWluKDEsICdDb250ZW50IGlzIHJlcXVpcmVkJyksXG59KTtcblxuLyoqXG4gKiBJbmZlciBUeXBlU2NyaXB0IHR5cGVzIGZyb20gc2NoZW1hc1xuICogTm90ZTogUHJlZml4ZWQgd2l0aCBcIlZhbGlkYXRlZFwiIHRvIGF2b2lkIGNvbmZsaWN0cyB3aXRoIGV4aXN0aW5nIHR5cGUgZGVmaW5pdGlvbnNcbiAqL1xuZXhwb3J0IHR5cGUgVmFsaWRhdGVkTWVzc2FnZUZpbHRlciA9IHouaW5mZXI8dHlwZW9mIE1lc3NhZ2VGaWx0ZXJTY2hlbWE+O1xuZXhwb3J0IHR5cGUgVmFsaWRhdGVkTWVzc2FnZUNyZWF0ZSA9IHouaW5mZXI8dHlwZW9mIE1lc3NhZ2VDcmVhdGVTY2hlbWE+O1xuZXhwb3J0IHR5cGUgVmFsaWRhdGVkTWVzc2FnZVJlcGx5ID0gei5pbmZlcjx0eXBlb2YgTWVzc2FnZVJlcGx5U2NoZW1hPjtcbiJdfQ==
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { Request } from 'express';
|
|
2
|
+
import { ZodSchema, ZodError } from 'zod';
|
|
3
|
+
/**
|
|
4
|
+
* Result type for validation operations
|
|
5
|
+
*/
|
|
6
|
+
export type ValidationResult<T> = {
|
|
7
|
+
ok: true;
|
|
8
|
+
value: T;
|
|
9
|
+
} | {
|
|
10
|
+
ok: false;
|
|
11
|
+
error: string;
|
|
12
|
+
zodError?: ZodError;
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* Validate arbitrary data against a Zod schema.
|
|
16
|
+
*
|
|
17
|
+
* This is the core validation function used by the Express-specific helpers
|
|
18
|
+
* (`validateBody`, `validateQuery`, `validateParams`). It can also be called
|
|
19
|
+
* directly when validating data that doesn't come from a request object.
|
|
20
|
+
*
|
|
21
|
+
* @param data - Data to validate
|
|
22
|
+
* @param schema - Zod schema for validation
|
|
23
|
+
* @returns Validation result with parsed data or error
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
* ```typescript
|
|
27
|
+
* const result = validate(someData, MySchema);
|
|
28
|
+
* if (!result.ok) {
|
|
29
|
+
* return sendBadRequest(res, result.error);
|
|
30
|
+
* }
|
|
31
|
+
* const parsed = result.value;
|
|
32
|
+
* ```
|
|
33
|
+
*/
|
|
34
|
+
export declare function validate<T>(data: unknown, schema: ZodSchema<T>): ValidationResult<T>;
|
|
35
|
+
/**
|
|
36
|
+
* Validate request query parameters with a Zod schema.
|
|
37
|
+
*
|
|
38
|
+
* @example
|
|
39
|
+
* ```typescript
|
|
40
|
+
* const result = validateQuery(req, PipelineFilterSchema);
|
|
41
|
+
* if (!result.ok) return sendBadRequest(res, result.error);
|
|
42
|
+
* const filter = result.value;
|
|
43
|
+
* ```
|
|
44
|
+
*/
|
|
45
|
+
export declare function validateQuery<T>(req: Request, schema: ZodSchema<T>): ValidationResult<T>;
|
|
46
|
+
/**
|
|
47
|
+
* Validate request body with a Zod schema.
|
|
48
|
+
*
|
|
49
|
+
* @example
|
|
50
|
+
* ```typescript
|
|
51
|
+
* const result = validateBody(req, PipelineCreateSchema);
|
|
52
|
+
* if (!result.ok) return sendBadRequest(res, result.error);
|
|
53
|
+
* const data = result.value;
|
|
54
|
+
* ```
|
|
55
|
+
*/
|
|
56
|
+
export declare function validateBody<T>(req: Request, schema: ZodSchema<T>): ValidationResult<T>;
|
|
57
|
+
/**
|
|
58
|
+
* Validate request path parameters with a Zod schema.
|
|
59
|
+
*/
|
|
60
|
+
export declare function validateParams<T>(req: Request, schema: ZodSchema<T>): ValidationResult<T>;
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Copyright 2026 Pipeline Builder Contributors
|
|
3
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
|
+
exports.validate = validate;
|
|
6
|
+
exports.validateQuery = validateQuery;
|
|
7
|
+
exports.validateBody = validateBody;
|
|
8
|
+
exports.validateParams = validateParams;
|
|
9
|
+
const zod_1 = require("zod");
|
|
10
|
+
/**
|
|
11
|
+
* Validate arbitrary data against a Zod schema.
|
|
12
|
+
*
|
|
13
|
+
* This is the core validation function used by the Express-specific helpers
|
|
14
|
+
* (`validateBody`, `validateQuery`, `validateParams`). It can also be called
|
|
15
|
+
* directly when validating data that doesn't come from a request object.
|
|
16
|
+
*
|
|
17
|
+
* @param data - Data to validate
|
|
18
|
+
* @param schema - Zod schema for validation
|
|
19
|
+
* @returns Validation result with parsed data or error
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* ```typescript
|
|
23
|
+
* const result = validate(someData, MySchema);
|
|
24
|
+
* if (!result.ok) {
|
|
25
|
+
* return sendBadRequest(res, result.error);
|
|
26
|
+
* }
|
|
27
|
+
* const parsed = result.value;
|
|
28
|
+
* ```
|
|
29
|
+
*/
|
|
30
|
+
function validate(data, schema) {
|
|
31
|
+
try {
|
|
32
|
+
return { ok: true, value: schema.parse(data) };
|
|
33
|
+
}
|
|
34
|
+
catch (error) {
|
|
35
|
+
if (error instanceof zod_1.ZodError) {
|
|
36
|
+
const firstIssue = error.issues[0];
|
|
37
|
+
const message = firstIssue
|
|
38
|
+
? `${firstIssue.path.join('.')}: ${firstIssue.message}`
|
|
39
|
+
: 'Validation failed';
|
|
40
|
+
return { ok: false, error: message, zodError: error };
|
|
41
|
+
}
|
|
42
|
+
return { ok: false, error: 'Validation failed' };
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Validate request query parameters with a Zod schema.
|
|
47
|
+
*
|
|
48
|
+
* @example
|
|
49
|
+
* ```typescript
|
|
50
|
+
* const result = validateQuery(req, PipelineFilterSchema);
|
|
51
|
+
* if (!result.ok) return sendBadRequest(res, result.error);
|
|
52
|
+
* const filter = result.value;
|
|
53
|
+
* ```
|
|
54
|
+
*/
|
|
55
|
+
function validateQuery(req, schema) {
|
|
56
|
+
return validate(req.query, schema);
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Validate request body with a Zod schema.
|
|
60
|
+
*
|
|
61
|
+
* @example
|
|
62
|
+
* ```typescript
|
|
63
|
+
* const result = validateBody(req, PipelineCreateSchema);
|
|
64
|
+
* if (!result.ok) return sendBadRequest(res, result.error);
|
|
65
|
+
* const data = result.value;
|
|
66
|
+
* ```
|
|
67
|
+
*/
|
|
68
|
+
function validateBody(req, schema) {
|
|
69
|
+
return validate(req.body, schema);
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Validate request path parameters with a Zod schema.
|
|
73
|
+
*/
|
|
74
|
+
function validateParams(req, schema) {
|
|
75
|
+
return validate(req.params, schema);
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlkZGxld2FyZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy92YWxpZGF0aW9uL21pZGRsZXdhcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7O0FBZ0N0Qyw0QkFnQkM7QUFZRCxzQ0FFQztBQVlELG9DQUVDO0FBS0Qsd0NBRUM7QUFoRkQsNkJBQTBDO0FBUzFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbUJHO0FBQ0gsU0FBZ0IsUUFBUSxDQUN0QixJQUFhLEVBQ2IsTUFBb0I7SUFFcEIsSUFBSSxDQUFDO1FBQ0gsT0FBTyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztJQUNqRCxDQUFDO0lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztRQUNmLElBQUksS0FBSyxZQUFZLGNBQVEsRUFBRSxDQUFDO1lBQzlCLE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbkMsTUFBTSxPQUFPLEdBQUcsVUFBVTtnQkFDeEIsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssVUFBVSxDQUFDLE9BQU8sRUFBRTtnQkFDdkQsQ0FBQyxDQUFDLG1CQUFtQixDQUFDO1lBQ3hCLE9BQU8sRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDO1FBQ3hELENBQUM7UUFDRCxPQUFPLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsbUJBQW1CLEVBQUUsQ0FBQztJQUNuRCxDQUFDO0FBQ0gsQ0FBQztBQUVEOzs7Ozs7Ozs7R0FTRztBQUNILFNBQWdCLGFBQWEsQ0FBSSxHQUFZLEVBQUUsTUFBb0I7SUFDakUsT0FBTyxRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztBQUNyQyxDQUFDO0FBRUQ7Ozs7Ozs7OztHQVNHO0FBQ0gsU0FBZ0IsWUFBWSxDQUFJLEdBQVksRUFBRSxNQUFvQjtJQUNoRSxPQUFPLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3BDLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLGNBQWMsQ0FBSSxHQUFZLEVBQUUsTUFBb0I7SUFDbEUsT0FBTyxRQUFRLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztBQUN0QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB7IFJlcXVlc3QgfSBmcm9tICdleHByZXNzJztcbmltcG9ydCB7IFpvZFNjaGVtYSwgWm9kRXJyb3IgfSBmcm9tICd6b2QnO1xuXG4vKipcbiAqIFJlc3VsdCB0eXBlIGZvciB2YWxpZGF0aW9uIG9wZXJhdGlvbnNcbiAqL1xuZXhwb3J0IHR5cGUgVmFsaWRhdGlvblJlc3VsdDxUPiA9XG4gIHwgeyBvazogdHJ1ZTsgdmFsdWU6IFQgfVxuICB8IHsgb2s6IGZhbHNlOyBlcnJvcjogc3RyaW5nOyB6b2RFcnJvcj86IFpvZEVycm9yIH07XG5cbi8qKlxuICogVmFsaWRhdGUgYXJiaXRyYXJ5IGRhdGEgYWdhaW5zdCBhIFpvZCBzY2hlbWEuXG4gKlxuICogVGhpcyBpcyB0aGUgY29yZSB2YWxpZGF0aW9uIGZ1bmN0aW9uIHVzZWQgYnkgdGhlIEV4cHJlc3Mtc3BlY2lmaWMgaGVscGVyc1xuICogKGB2YWxpZGF0ZUJvZHlgLCBgdmFsaWRhdGVRdWVyeWAsIGB2YWxpZGF0ZVBhcmFtc2ApLiBJdCBjYW4gYWxzbyBiZSBjYWxsZWRcbiAqIGRpcmVjdGx5IHdoZW4gdmFsaWRhdGluZyBkYXRhIHRoYXQgZG9lc24ndCBjb21lIGZyb20gYSByZXF1ZXN0IG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gZGF0YSAtIERhdGEgdG8gdmFsaWRhdGVcbiAqIEBwYXJhbSBzY2hlbWEgLSBab2Qgc2NoZW1hIGZvciB2YWxpZGF0aW9uXG4gKiBAcmV0dXJucyBWYWxpZGF0aW9uIHJlc3VsdCB3aXRoIHBhcnNlZCBkYXRhIG9yIGVycm9yXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IHJlc3VsdCA9IHZhbGlkYXRlKHNvbWVEYXRhLCBNeVNjaGVtYSk7XG4gKiBpZiAoIXJlc3VsdC5vaykge1xuICogICByZXR1cm4gc2VuZEJhZFJlcXVlc3QocmVzLCByZXN1bHQuZXJyb3IpO1xuICogfVxuICogY29uc3QgcGFyc2VkID0gcmVzdWx0LnZhbHVlO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZTxUPihcbiAgZGF0YTogdW5rbm93bixcbiAgc2NoZW1hOiBab2RTY2hlbWE8VD4sXG4pOiBWYWxpZGF0aW9uUmVzdWx0PFQ+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4geyBvazogdHJ1ZSwgdmFsdWU6IHNjaGVtYS5wYXJzZShkYXRhKSB9O1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIFpvZEVycm9yKSB7XG4gICAgICBjb25zdCBmaXJzdElzc3VlID0gZXJyb3IuaXNzdWVzWzBdO1xuICAgICAgY29uc3QgbWVzc2FnZSA9IGZpcnN0SXNzdWVcbiAgICAgICAgPyBgJHtmaXJzdElzc3VlLnBhdGguam9pbignLicpfTogJHtmaXJzdElzc3VlLm1lc3NhZ2V9YFxuICAgICAgICA6ICdWYWxpZGF0aW9uIGZhaWxlZCc7XG4gICAgICByZXR1cm4geyBvazogZmFsc2UsIGVycm9yOiBtZXNzYWdlLCB6b2RFcnJvcjogZXJyb3IgfTtcbiAgICB9XG4gICAgcmV0dXJuIHsgb2s6IGZhbHNlLCBlcnJvcjogJ1ZhbGlkYXRpb24gZmFpbGVkJyB9O1xuICB9XG59XG5cbi8qKlxuICogVmFsaWRhdGUgcmVxdWVzdCBxdWVyeSBwYXJhbWV0ZXJzIHdpdGggYSBab2Qgc2NoZW1hLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCByZXN1bHQgPSB2YWxpZGF0ZVF1ZXJ5KHJlcSwgUGlwZWxpbmVGaWx0ZXJTY2hlbWEpO1xuICogaWYgKCFyZXN1bHQub2spIHJldHVybiBzZW5kQmFkUmVxdWVzdChyZXMsIHJlc3VsdC5lcnJvcik7XG4gKiBjb25zdCBmaWx0ZXIgPSByZXN1bHQudmFsdWU7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlUXVlcnk8VD4ocmVxOiBSZXF1ZXN0LCBzY2hlbWE6IFpvZFNjaGVtYTxUPik6IFZhbGlkYXRpb25SZXN1bHQ8VD4ge1xuICByZXR1cm4gdmFsaWRhdGUocmVxLnF1ZXJ5LCBzY2hlbWEpO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlIHJlcXVlc3QgYm9keSB3aXRoIGEgWm9kIHNjaGVtYS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgcmVzdWx0ID0gdmFsaWRhdGVCb2R5KHJlcSwgUGlwZWxpbmVDcmVhdGVTY2hlbWEpO1xuICogaWYgKCFyZXN1bHQub2spIHJldHVybiBzZW5kQmFkUmVxdWVzdChyZXMsIHJlc3VsdC5lcnJvcik7XG4gKiBjb25zdCBkYXRhID0gcmVzdWx0LnZhbHVlO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUJvZHk8VD4ocmVxOiBSZXF1ZXN0LCBzY2hlbWE6IFpvZFNjaGVtYTxUPik6IFZhbGlkYXRpb25SZXN1bHQ8VD4ge1xuICByZXR1cm4gdmFsaWRhdGUocmVxLmJvZHksIHNjaGVtYSk7XG59XG5cbi8qKlxuICogVmFsaWRhdGUgcmVxdWVzdCBwYXRoIHBhcmFtZXRlcnMgd2l0aCBhIFpvZCBzY2hlbWEuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVBhcmFtczxUPihyZXE6IFJlcXVlc3QsIHNjaGVtYTogWm9kU2NoZW1hPFQ+KTogVmFsaWRhdGlvblJlc3VsdDxUPiB7XG4gIHJldHVybiB2YWxpZGF0ZShyZXEucGFyYW1zLCBzY2hlbWEpO1xufVxuIl19
|