@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,171 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Copyright 2026 Pipeline Builder Contributors
|
|
3
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
5
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
6
|
+
};
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.SYSTEM_ORG_ID = void 0;
|
|
9
|
+
exports.requireAuth = requireAuth;
|
|
10
|
+
exports.requireOrganization = requireOrganization;
|
|
11
|
+
exports.requireAdmin = requireAdmin;
|
|
12
|
+
exports.isSystemOrgId = isSystemOrgId;
|
|
13
|
+
exports.isSystemOrg = isSystemOrg;
|
|
14
|
+
exports.isSystemAdmin = isSystemAdmin;
|
|
15
|
+
exports.requireSystemAdmin = requireSystemAdmin;
|
|
16
|
+
exports.requireFeature = requireFeature;
|
|
17
|
+
exports.resolveAccessModifier = resolveAccessModifier;
|
|
18
|
+
const jsonwebtoken_1 = __importDefault(require("jsonwebtoken"));
|
|
19
|
+
const http_status_1 = require("../constants/http-status");
|
|
20
|
+
const error_codes_1 = require("../types/error-codes");
|
|
21
|
+
const headers_1 = require("../utils/headers");
|
|
22
|
+
const logger_1 = require("../utils/logger");
|
|
23
|
+
const response_1 = require("../utils/response");
|
|
24
|
+
const logger = (0, logger_1.createLogger)('auth-middleware');
|
|
25
|
+
/** Cached JWT secret with periodic refresh from env var. */
|
|
26
|
+
let _jwtSecret;
|
|
27
|
+
let _jwtSecretRefreshedAt = 0;
|
|
28
|
+
const JWT_SECRET_REFRESH_INTERVAL_MS = 300_000; // 5 minutes
|
|
29
|
+
function getJwtSecret() {
|
|
30
|
+
const now = Date.now();
|
|
31
|
+
if (!_jwtSecret || now - _jwtSecretRefreshedAt > JWT_SECRET_REFRESH_INTERVAL_MS) {
|
|
32
|
+
const secret = process.env.JWT_SECRET;
|
|
33
|
+
if (!secret) {
|
|
34
|
+
logger.error('JWT_SECRET environment variable is not set');
|
|
35
|
+
throw new Error('JWT_SECRET environment variable is required');
|
|
36
|
+
}
|
|
37
|
+
if (_jwtSecret && _jwtSecret !== secret) {
|
|
38
|
+
logger.info('JWT secret rotated');
|
|
39
|
+
}
|
|
40
|
+
_jwtSecret = secret;
|
|
41
|
+
_jwtSecretRefreshedAt = now;
|
|
42
|
+
}
|
|
43
|
+
return _jwtSecret;
|
|
44
|
+
}
|
|
45
|
+
function requireAuth(reqOrOptions, res, next) {
|
|
46
|
+
if (reqOrOptions && res && next && 'headers' in reqOrOptions) {
|
|
47
|
+
return _requireAuth({}, reqOrOptions, res, next);
|
|
48
|
+
}
|
|
49
|
+
const options = reqOrOptions || {};
|
|
50
|
+
return (req, resInner, nextInner) => {
|
|
51
|
+
_requireAuth(options, req, resInner, nextInner);
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
function _requireAuth(options, req, res, next) {
|
|
55
|
+
const authHeader = req.headers.authorization;
|
|
56
|
+
if (!authHeader) {
|
|
57
|
+
return (0, response_1.sendError)(res, http_status_1.HttpStatus.UNAUTHORIZED, 'Authorization header required', error_codes_1.ErrorCode.TOKEN_MISSING);
|
|
58
|
+
}
|
|
59
|
+
const parts = authHeader.split(' ');
|
|
60
|
+
if (parts.length !== 2 || parts[0] !== 'Bearer') {
|
|
61
|
+
return (0, response_1.sendError)(res, http_status_1.HttpStatus.UNAUTHORIZED, 'Invalid authorization format. Use: Bearer <token>', error_codes_1.ErrorCode.TOKEN_INVALID);
|
|
62
|
+
}
|
|
63
|
+
try {
|
|
64
|
+
const decoded = jsonwebtoken_1.default.verify(parts[1], getJwtSecret());
|
|
65
|
+
if (decoded.type !== 'access') {
|
|
66
|
+
return (0, response_1.sendError)(res, http_status_1.HttpStatus.UNAUTHORIZED, 'Only access tokens can be used for API requests', error_codes_1.ErrorCode.TOKEN_INVALID);
|
|
67
|
+
}
|
|
68
|
+
if (!decoded.sub || !decoded.role) {
|
|
69
|
+
return (0, response_1.sendError)(res, http_status_1.HttpStatus.UNAUTHORIZED, 'Token missing required fields', error_codes_1.ErrorCode.TOKEN_INVALID);
|
|
70
|
+
}
|
|
71
|
+
req.user = { ...decoded };
|
|
72
|
+
if (options.allowOrgHeaderOverride) {
|
|
73
|
+
const headerOrgId = (0, headers_1.getHeaderString)(req.headers['x-org-id']);
|
|
74
|
+
const headerOrgName = (0, headers_1.getHeaderString)(req.headers['x-org-name']);
|
|
75
|
+
if (headerOrgId)
|
|
76
|
+
req.user.organizationId = headerOrgId;
|
|
77
|
+
if (headerOrgName)
|
|
78
|
+
req.user.organizationName = headerOrgName;
|
|
79
|
+
}
|
|
80
|
+
next();
|
|
81
|
+
}
|
|
82
|
+
catch (error) {
|
|
83
|
+
if (error instanceof jsonwebtoken_1.default.TokenExpiredError) {
|
|
84
|
+
return (0, response_1.sendError)(res, http_status_1.HttpStatus.UNAUTHORIZED, 'Token has expired', error_codes_1.ErrorCode.TOKEN_EXPIRED);
|
|
85
|
+
}
|
|
86
|
+
if (error instanceof jsonwebtoken_1.default.JsonWebTokenError) {
|
|
87
|
+
return (0, response_1.sendError)(res, http_status_1.HttpStatus.UNAUTHORIZED, 'Invalid token', error_codes_1.ErrorCode.TOKEN_INVALID);
|
|
88
|
+
}
|
|
89
|
+
return (0, response_1.sendError)(res, http_status_1.HttpStatus.UNAUTHORIZED, 'Authentication failed', error_codes_1.ErrorCode.UNAUTHORIZED);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
/** Requires organization membership. Use after requireAuth. */
|
|
93
|
+
function requireOrganization(req, res, next) {
|
|
94
|
+
if (!req.user) {
|
|
95
|
+
return (0, response_1.sendError)(res, http_status_1.HttpStatus.UNAUTHORIZED, 'Authentication required', error_codes_1.ErrorCode.UNAUTHORIZED);
|
|
96
|
+
}
|
|
97
|
+
if (!req.user.organizationId) {
|
|
98
|
+
return (0, response_1.sendError)(res, http_status_1.HttpStatus.BAD_REQUEST, 'Organization membership required', error_codes_1.ErrorCode.ORG_MISMATCH);
|
|
99
|
+
}
|
|
100
|
+
next();
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Requires admin role. Use after requireAuth.
|
|
104
|
+
* Permits users whose per-org role is 'admin' or 'owner'.
|
|
105
|
+
*/
|
|
106
|
+
function requireAdmin(req, res, next) {
|
|
107
|
+
if (!req.user) {
|
|
108
|
+
return (0, response_1.sendError)(res, http_status_1.HttpStatus.UNAUTHORIZED, 'Authentication required', error_codes_1.ErrorCode.UNAUTHORIZED);
|
|
109
|
+
}
|
|
110
|
+
if (req.user.role !== 'admin' && req.user.role !== 'owner') {
|
|
111
|
+
return (0, response_1.sendError)(res, http_status_1.HttpStatus.FORBIDDEN, 'Admin access required', error_codes_1.ErrorCode.INSUFFICIENT_PERMISSIONS);
|
|
112
|
+
}
|
|
113
|
+
next();
|
|
114
|
+
}
|
|
115
|
+
/** Organization ID/name that identifies the system (super-admin) tenant. */
|
|
116
|
+
exports.SYSTEM_ORG_ID = (process.env.SYSTEM_ORG_ID || 'system').toLowerCase();
|
|
117
|
+
/**
|
|
118
|
+
* Check if an orgId or orgName matches the system org.
|
|
119
|
+
* Use this instead of comparing directly against SYSTEM_ORG_ID,
|
|
120
|
+
* because the JWT orgId is a database ID (e.g. MongoDB ObjectId)
|
|
121
|
+
* while SYSTEM_ORG_ID is the well-known name "system".
|
|
122
|
+
*/
|
|
123
|
+
function isSystemOrgId(orgId, orgName) {
|
|
124
|
+
return orgId?.toLowerCase() === exports.SYSTEM_ORG_ID || orgName?.toLowerCase() === exports.SYSTEM_ORG_ID;
|
|
125
|
+
}
|
|
126
|
+
function isSystemOrg(req) {
|
|
127
|
+
if (!req.user)
|
|
128
|
+
return false;
|
|
129
|
+
return isSystemOrgId(req.user.organizationId, req.user.organizationName);
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Check if the request is from a system admin.
|
|
133
|
+
* A system admin has per-org role 'admin' or 'owner' in the system organization.
|
|
134
|
+
*/
|
|
135
|
+
function isSystemAdmin(req) {
|
|
136
|
+
return (req.user?.role === 'admin' || req.user?.role === 'owner') && isSystemOrg(req);
|
|
137
|
+
}
|
|
138
|
+
/** Requires system admin (admin role + system organization). */
|
|
139
|
+
function requireSystemAdmin(req, res, next) {
|
|
140
|
+
if (!isSystemAdmin(req)) {
|
|
141
|
+
return (0, response_1.sendError)(res, http_status_1.HttpStatus.FORBIDDEN, 'Access denied. Only system administrators can perform this action.', error_codes_1.ErrorCode.INSUFFICIENT_PERMISSIONS);
|
|
142
|
+
}
|
|
143
|
+
next();
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Require a specific feature flag. Use after requireAuth.
|
|
147
|
+
* Checks the `features` array in the JWT payload (set at token issuance).
|
|
148
|
+
* System org users always pass (all features enabled).
|
|
149
|
+
*/
|
|
150
|
+
function requireFeature(feature) {
|
|
151
|
+
return (req, res, next) => {
|
|
152
|
+
if (!req.user) {
|
|
153
|
+
return (0, response_1.sendError)(res, http_status_1.HttpStatus.UNAUTHORIZED, 'Authentication required', error_codes_1.ErrorCode.UNAUTHORIZED);
|
|
154
|
+
}
|
|
155
|
+
// System org always has all features
|
|
156
|
+
if (isSystemOrg(req))
|
|
157
|
+
return next();
|
|
158
|
+
if (!req.user.features?.includes(feature)) {
|
|
159
|
+
return (0, response_1.sendError)(res, http_status_1.HttpStatus.FORBIDDEN, `This feature requires a higher plan (${feature})`, error_codes_1.ErrorCode.INSUFFICIENT_PERMISSIONS);
|
|
160
|
+
}
|
|
161
|
+
next();
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
/** Only system admins can set access to 'public'; everyone else gets 'private'. */
|
|
165
|
+
function resolveAccessModifier(req, requested) {
|
|
166
|
+
if (requested === 'public' && isSystemAdmin(req)) {
|
|
167
|
+
return 'public';
|
|
168
|
+
}
|
|
169
|
+
return 'private';
|
|
170
|
+
}
|
|
171
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9taWRkbGV3YXJlL2F1dGgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7Ozs7OztBQTJEdEMsa0NBYUM7QUF1REQsa0RBY0M7QUFNRCxvQ0FjQztBQVdELHNDQUVDO0FBRUQsa0NBR0M7QUFNRCxzQ0FFQztBQUdELGdEQWFDO0FBT0Qsd0NBbUJDO0FBR0Qsc0RBS0M7QUExT0QsZ0VBQStCO0FBQy9CLDBEQUFzRDtBQUV0RCxzREFBaUQ7QUFDakQsOENBQW1EO0FBQ25ELDRDQUErQztBQUMvQyxnREFBOEM7QUFFOUMsTUFBTSxNQUFNLEdBQUcsSUFBQSxxQkFBWSxFQUFDLGlCQUFpQixDQUFDLENBQUM7QUFFL0MsNERBQTREO0FBQzVELElBQUksVUFBOEIsQ0FBQztBQUNuQyxJQUFJLHFCQUFxQixHQUFHLENBQUMsQ0FBQztBQUM5QixNQUFNLDhCQUE4QixHQUFHLE9BQU8sQ0FBQyxDQUFDLFlBQVk7QUFFNUQsU0FBUyxZQUFZO0lBQ25CLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUN2QixJQUFJLENBQUMsVUFBVSxJQUFJLEdBQUcsR0FBRyxxQkFBcUIsR0FBRyw4QkFBOEIsRUFBRSxDQUFDO1FBQ2hGLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDO1FBQ3RDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNaLE1BQU0sQ0FBQyxLQUFLLENBQUMsNENBQTRDLENBQUMsQ0FBQztZQUMzRCxNQUFNLElBQUksS0FBSyxDQUFDLDZDQUE2QyxDQUFDLENBQUM7UUFDakUsQ0FBQztRQUNELElBQUksVUFBVSxJQUFJLFVBQVUsS0FBSyxNQUFNLEVBQUUsQ0FBQztZQUN4QyxNQUFNLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDcEMsQ0FBQztRQUNELFVB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LENBQUMsR0FBWSxFQUFFLFNBQTZCO0lBQy9FLElBQUksU0FBUyxLQUFLLFFBQVEsSUFBSSxhQUFhLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUNqRCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBQ0QsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgeyBSZXF1ZXN0LCBSZXNwb25zZSwgTmV4dEZ1bmN0aW9uIH0gZnJvbSAnZXhwcmVzcyc7XG5pbXBvcnQgand0IGZyb20gJ2pzb253ZWJ0b2tlbic7XG5pbXBvcnQgeyBIdHRwU3RhdHVzIH0gZnJvbSAnLi4vY29uc3RhbnRzL2h0dHAtc3RhdHVzJztcbmltcG9ydCB7IEp3dFBheWxvYWQgfSBmcm9tICcuLi90eXBlcy9jb21tb24nO1xuaW1wb3J0IHsgRXJyb3JDb2RlIH0gZnJvbSAnLi4vdHlwZXMvZXJyb3ItY29kZXMnO1xuaW1wb3J0IHsgZ2V0SGVhZGVyU3RyaW5nIH0gZnJvbSAnLi4vdXRpbHMvaGVhZGVycyc7XG5pbXBvcnQgeyBjcmVhdGVMb2dnZXIgfSBmcm9tICcuLi91dGlscy9sb2dnZXInO1xuaW1wb3J0IHsgc2VuZEVycm9yIH0gZnJvbSAnLi4vdXRpbHMvcmVzcG9uc2UnO1xuXG5jb25zdCBsb2dnZXIgPSBjcmVhdGVMb2dnZXIoJ2F1dGgtbWlkZGxld2FyZScpO1xuXG4vKiogQ2FjaGVkIEpXVCBzZWNyZXQgd2l0aCBwZXJpb2RpYyByZWZyZXNoIGZyb20gZW52IHZhci4gKi9cbmxldCBfand0U2VjcmV0OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5sZXQgX2p3dFNlY3JldFJlZnJlc2hlZEF0ID0gMDtcbmNvbnN0IEpXVF9TRUNSRVRfUkVGUkVTSF9JTlRFUlZBTF9NUyA9IDMwMF8wMDA7IC8vIDUgbWludXRlc1xuXG5mdW5jdGlvbiBnZXRKd3RTZWNyZXQoKTogc3RyaW5nIHtcbiAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgaWYgKCFfand0U2VjcmV0IHx8IG5vdyAtIF9qd3RTZWNyZXRSZWZyZXNoZWRBdCA+IEpXVF9TRUNSRVRfUkVGUkVTSF9JTlRFUlZBTF9NUykge1xuICAgIGNvbnN0IHNlY3JldCA9IHByb2Nlc3MuZW52LkpXVF9TRUNSRVQ7XG4gICAgaWYgKCFzZWNyZXQpIHtcbiAgICAgIGxvZ2dlci5lcnJvcignSldUX1NFQ1JFVCBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBub3Qgc2V0Jyk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0pXVF9TRUNSRVQgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgcmVxdWlyZWQnKTtcbiAgICB9XG4gICAgaWYgKF9qd3RTZWNyZXQgJiYgX2p3dFNlY3JldCAhPT0gc2VjcmV0KSB7XG4gICAgICBsb2dnZXIuaW5mbygnSldUIHNlY3JldCByb3RhdGVkJyk7XG4gICAgfVxuICAgIF9qd3RTZWNyZXQgPSBzZWNyZXQ7XG4gICAgX2p3dFNlY3JldFJlZnJlc2hlZEF0ID0gbm93O1xuICB9XG4gIHJldHVybiBfand0U2VjcmV0O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlcXVpcmVBdXRoT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBBbGxvdyB4LW9yZy1pZC94LW9yZy1uYW1lIGhlYWRlcnMgdG8gb3ZlcnJpZGUgdGhlIEpXVCdzIG9yZ2FuaXphdGlvbiBmaWVsZHMuXG4gICAqXG4gICAqICoqU0VDVVJJVFkgV0FSTklORzoqKiBXaGVuIGVuYWJsZWQsIGEgY2FsbGVyIGNhbiBzZXQgYHgtb3JnLWlkYCB0byBBTllcbiAgICogb3JnYW5pemF0aW9uIElELCBlZmZlY3RpdmVseSBpbXBlcnNvbmF0aW5nIHRoYXQgb3JnLiBUaGlzIE1VU1Qgb25seSBiZVxuICAgKiB1c2VkIG9uIHJvdXRlcyB0aGF0IGFyZTpcbiAgICogICAxLiBJbnRlcm5hbCBzZXJ2aWNlLXRvLXNlcnZpY2Ugcm91dGVzIChub3QgZXhwb3NlZCB0byBlbmQgdXNlcnMpXG4gICAqICAgMi4gQmVoaW5kIG5ldHdvcmsgaXNvbGF0aW9uIChjb250YWluZXIgbmV0d29yaywgVlBDLCBldGMuKVxuICAgKlxuICAgKiBORVZFUiBlbmFibGUgdGhpcyBvbiB1c2VyLWZhY2luZyBBUEkgcm91dGVzLiBJZiB1bnN1cmUsIGxlYXZlIGl0IGRpc2FibGVkLlxuICAgKi9cbiAgYWxsb3dPcmdIZWFkZXJPdmVycmlkZT86IGJvb2xlYW47XG59XG5cbi8qKiBKV1QgYXV0aCBtaWRkbGV3YXJlLiBVc2UgZGlyZWN0bHkgb3IgY2FsbCB3aXRoIG9wdGlvbnMuICovXG5leHBvcnQgZnVuY3Rpb24gcmVxdWlyZUF1dGgoXG4gIHJlcTogUmVxdWVzdCxcbiAgcmVzOiBSZXNwb25zZSxcbiAgbmV4dDogTmV4dEZ1bmN0aW9uLFxuKTogdm9pZDtcbmV4cG9ydCBmdW5jdGlvbiByZXF1aXJlQXV0aChcbiAgb3B0aW9ucz86IFJlcXVpcmVBdXRoT3B0aW9ucyxcbik6IChyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UsIG5leHQ6IE5leHRGdW5jdGlvbikgPT4gdm9pZDtcbmV4cG9ydCBmdW5jdGlvbiByZXF1aXJlQXV0aChcbiAgcmVxT3JPcHRpb25zPzogUmVxdWVzdCB8IFJlcXVpcmVBdXRoT3B0aW9ucyxcbiAgcmVzPzogUmVzcG9uc2UsXG4gIG5leHQ/OiBOZXh0RnVuY3Rpb24sXG4pOiB2b2lkIHwgKChyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UsIG5leHQ6IE5leHRGdW5jdGlvbikgPT4gdm9pZCkge1xuICBpZiAocmVxT3JPcHRpb25zICYmIHJlcyAmJiBuZXh0ICYmICdoZWFkZXJzJyBpbiByZXFPck9wdGlvbnMpIHtcbiAgICByZXR1cm4gX3JlcXVpcmVBdXRoKHt9LCByZXFPck9wdGlvbnMgYXMgUmVxdWVzdCwgcmVzLCBuZXh0KTtcbiAgfVxuXG4gIGNvbnN0IG9wdGlvbnMgPSAocmVxT3JPcHRpb25zIGFzIFJlcXVpcmVBdXRoT3B0aW9ucykgfHwge307XG4gIHJldHVybiAocmVxOiBSZXF1ZXN0LCByZXNJbm5lcjogUmVzcG9uc2UsIG5leHRJbm5lcjogTmV4dEZ1bmN0aW9uKSA9PiB7XG4gICAgX3JlcXVpcmVBdXRoKG9wdGlvbnMsIHJlcSwgcmVzSW5uZXIsIG5leHRJbm5lcik7XG4gIH07XG59XG5cbmZ1bmN0aW9uIF9yZXF1aXJlQXV0aChcbiAgb3B0aW9uczogUmVxdWlyZUF1dGhPcHRpb25zLFxuICByZXE6IFJlcXVlc3QsXG4gIHJlczogUmVzcG9uc2UsXG4gIG5leHQ6IE5leHRGdW5jdGlvbixcbik6IHZvaWQge1xuICBjb25zdCBhdXRoSGVhZGVyID0gcmVxLmhlYWRlcnMuYXV0aG9yaXphdGlvbjtcblxuICBpZiAoIWF1dGhIZWFkZXIpIHtcbiAgICByZXR1cm4gc2VuZEVycm9yKHJlcywgSHR0cFN0YXR1cy5VTkFVVEhPUklaRUQsICdBdXRob3JpemF0aW9uIGhlYWRlciByZXF1aXJlZCcsIEVycm9yQ29kZS5UT0tFTl9NSVNTSU5HKTtcbiAgfVxuXG4gIGNvbnN0IHBhcnRzID0gYXV0aEhlYWRlci5zcGxpdCgnICcpO1xuICBpZiAocGFydHMubGVuZ3RoICE9PSAyIHx8IHBhcnRzWzBdICE9PSAnQmVhcmVyJykge1xuICAgIHJldHVybiBzZW5kRXJyb3IocmVzLCBIdHRwU3RhdHVzLlVOQVVUSE9SSVpFRCwgJ0ludmFsaWQgYXV0aG9yaXphdGlvbiBmb3JtYXQuIFVzZTogQmVhcmVyIDx0b2tlbj4nLCBFcnJvckNvZGUuVE9LRU5fSU5WQUxJRCk7XG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IGRlY29kZWQgPSBqd3QudmVyaWZ5KHBhcnRzWzFdLCBnZXRKd3RTZWNyZXQoKSkgYXMgSnd0UGF5bG9hZDtcblxuICAgIGlmIChkZWNvZGVkLnR5cGUgIT09ICdhY2Nlc3MnKSB7XG4gICAgICByZXR1cm4gc2VuZEVycm9yKHJlcywgSHR0cFN0YXR1cy5VTkFVVEhPUklaRUQsICdPbmx5IGFjY2VzcyB0b2tlbnMgY2FuIGJlIHVzZWQgZm9yIEFQSSByZXF1ZXN0cycsIEVycm9yQ29kZS5UT0tFTl9JTlZBTElEKTtcbiAgICB9XG5cbiAgICBpZiAoIWRlY29kZWQuc3ViIHx8ICFkZWNvZGVkLnJvbGUpIHtcbiAgICAgIHJldHVybiBzZW5kRXJyb3IocmVzLCBIdHRwU3RhdHVzLlVOQVVUSE9SSVpFRCwgJ1Rva2VuIG1pc3NpbmcgcmVxdWlyZWQgZmllbGRzJywgRXJyb3JDb2RlLlRPS0VOX0lOVkFMSUQpO1xuICAgIH1cblxuICAgIHJlcS51c2VyID0geyAuLi5kZWNvZGVkIH07XG5cbiAgICBpZiAob3B0aW9ucy5hbGxvd09yZ0hlYWRlck92ZXJyaWRlKSB7XG4gICAgICBjb25zdCBoZWFkZXJPcmdJZCA9IGdldEhlYWRlclN0cmluZyhyZXEuaGVhZGVyc1sneC1vcmctaWQnXSk7XG4gICAgICBjb25zdCBoZWFkZXJPcmdOYW1lID0gZ2V0SGVhZGVyU3RyaW5nKHJlcS5oZWFkZXJzWyd4LW9yZy1uYW1lJ10pO1xuICAgICAgaWYgKGhlYWRlck9yZ0lkKSByZXEudXNlci5vcmdhbml6YXRpb25JZCA9IGhlYWRlck9yZ0lkO1xuICAgICAgaWYgKGhlYWRlck9yZ05hbWUpIHJlcS51c2VyLm9yZ2FuaXphdGlvbk5hbWUgPSBoZWFkZXJPcmdOYW1lO1xuICAgIH1cblxuICAgIG5leHQoKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBqd3QuVG9rZW5FeHBpcmVkRXJyb3IpIHtcbiAgICAgIHJldHVybiBzZW5kRXJyb3IocmVzLCBIdHRwU3RhdHVzLlVOQVVUSE9SSVpFRCwgJ1Rva2VuIGhhcyBleHBpcmVkJywgRXJyb3JDb2RlLlRPS0VOX0VYUElSRUQpO1xuICAgIH1cblxuICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIGp3dC5Kc29uV2ViVG9rZW5FcnJvcikge1xuICAgICAgcmV0dXJuIHNlbmRFcnJvcihyZXMsIEh0dHBTdGF0dXMuVU5BVVRIT1JJWkVELCAnSW52YWxpZCB0b2tlbicsIEVycm9yQ29kZS5UT0tFTl9JTlZBTElEKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc2VuZEVycm9yKHJlcywgSHR0cFN0YXR1cy5VTkFVVEhPUklaRUQsICdBdXRoZW50aWNhdGlvbiBmYWlsZWQnLCBFcnJvckNvZGUuVU5BVVRIT1JJWkVEKTtcbiAgfVxufVxuXG5cbi8qKiBSZXF1aXJlcyBvcmdhbml6YXRpb24gbWVtYmVyc2hpcC4gVXNlIGFmdGVyIHJlcXVpcmVBdXRoLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlcXVpcmVPcmdhbml6YXRpb24oXG4gIHJlcTogUmVxdWVzdCxcbiAgcmVzOiBSZXNwb25zZSxcbiAgbmV4dDogTmV4dEZ1bmN0aW9uLFxuKTogdm9pZCB7XG4gIGlmICghcmVxLnVzZXIpIHtcbiAgICByZXR1cm4gc2VuZEVycm9yKHJlcywgSHR0cFN0YXR1cy5VTkFVVEhPUklaRUQsICdBdXRoZW50aWNhdGlvbiByZXF1aXJlZCcsIEVycm9yQ29kZS5VTkFVVEhPUklaRUQpO1xuICB9XG5cbiAgaWYgKCFyZXEudXNlci5vcmdhbml6YXRpb25JZCkge1xuICAgIHJldHVybiBzZW5kRXJyb3IocmVzLCBIdHRwU3RhdHVzLkJBRF9SRVFVRVNULCAnT3JnYW5pemF0aW9uIG1lbWJlcnNoaXAgcmVxdWlyZWQnLCBFcnJvckNvZGUuT1JHX01JU01BVENIKTtcbiAgfVxuXG4gIG5leHQoKTtcbn1cblxuLyoqXG4gKiBSZXF1aXJlcyBhZG1pbiByb2xlLiBVc2UgYWZ0ZXIgcmVxdWlyZUF1dGguXG4gKiBQZXJtaXRzIHVzZXJzIHdob3NlIHBlci1vcmcgcm9sZSBpcyAnYWRtaW4nIG9yICdvd25lcicuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXF1aXJlQWRtaW4oXG4gIHJlcTogUmVxdWVzdCxcbiAgcmVzOiBSZXNwb25zZSxcbiAgbmV4dDogTmV4dEZ1bmN0aW9uLFxuKTogdm9pZCB7XG4gIGlmICghcmVxLnVzZXIpIHtcbiAgICByZXR1cm4gc2VuZEVycm9yKHJlcywgSHR0cFN0YXR1cy5VTkFVVEhPUklaRUQsICdBdXRoZW50aWNhdGlvbiByZXF1aXJlZCcsIEVycm9yQ29kZS5VTkFVVEhPUklaRUQpO1xuICB9XG5cbiAgaWYgKHJlcS51c2VyLnJvbGUgIT09ICdhZG1pbicgJiYgcmVxLnVzZXIucm9sZSAhPT0gJ293bmVyJykge1xuICAgIHJldHVybiBzZW5kRXJyb3IocmVzLCBIdHRwU3RhdHVzLkZPUkJJRERFTiwgJ0FkbWluIGFjY2VzcyByZXF1aXJlZCcsIEVycm9yQ29kZS5JTlNVRkZJQ0lFTlRfUEVSTUlTU0lPTlMpO1xuICB9XG5cbiAgbmV4dCgpO1xufVxuXG4vKiogT3JnYW5pemF0aW9uIElEL25hbWUgdGhhdCBpZGVudGlmaWVzIHRoZSBzeXN0ZW0gKHN1cGVyLWFkbWluKSB0ZW5hbnQuICovXG5leHBvcnQgY29uc3QgU1lTVEVNX09SR19JRCA9IChwcm9jZXNzLmVudi5TWVNURU1fT1JHX0lEIHx8ICdzeXN0ZW0nKS50b0xvd2VyQ2FzZSgpO1xuXG4vKipcbiAqIENoZWNrIGlmIGFuIG9yZ0lkIG9yIG9yZ05hbWUgbWF0Y2hlcyB0aGUgc3lzdGVtIG9yZy5cbiAqIFVzZSB0aGlzIGluc3RlYWQgb2YgY29tcGFyaW5nIGRpcmVjdGx5IGFnYWluc3QgU1lTVEVNX09SR19JRCxcbiAqIGJlY2F1c2UgdGhlIEpXVCBvcmdJZCBpcyBhIGRhdGFiYXNlIElEIChlLmcuIE1vbmdvREIgT2JqZWN0SWQpXG4gKiB3aGlsZSBTWVNURU1fT1JHX0lEIGlzIHRoZSB3ZWxsLWtub3duIG5hbWUgXCJzeXN0ZW1cIi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzU3lzdGVtT3JnSWQob3JnSWQ/OiBzdHJpbmcsIG9yZ05hbWU/OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIG9yZ0lkPy50b0xvd2VyQ2FzZSgpID09PSBTWVNURU1fT1JHX0lEIHx8IG9yZ05hbWU/LnRvTG93ZXJDYXNlKCkgPT09IFNZU1RFTV9PUkdfSUQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1N5c3RlbU9yZyhyZXE6IFJlcXVlc3QpOiBib29sZWFuIHtcbiAgaWYgKCFyZXEudXNlcikgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gaXNTeXN0ZW1PcmdJZChyZXEudXNlci5vcmdhbml6YXRpb25JZCwgcmVxLnVzZXIub3JnYW5pemF0aW9uTmFtZSk7XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgdGhlIHJlcXVlc3QgaXMgZnJvbSBhIHN5c3RlbSBhZG1pbi5cbiAqIEEgc3lzdGVtIGFkbWluIGhhcyBwZXItb3JnIHJvbGUgJ2FkbWluJyBvciAnb3duZXInIGluIHRoZSBzeXN0ZW0gb3JnYW5pemF0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNTeXN0ZW1BZG1pbihyZXE6IFJlcXVlc3QpOiBib29sZWFuIHtcbiAgcmV0dXJuIChyZXEudXNlcj8ucm9sZSA9PT0gJ2FkbWluJyB8fCByZXEudXNlcj8ucm9sZSA9PT0gJ293bmVyJykgJiYgaXNTeXN0ZW1PcmcocmVxKTtcbn1cblxuLyoqIFJlcXVpcmVzIHN5c3RlbSBhZG1pbiAoYWRtaW4gcm9sZSArIHN5c3RlbSBvcmdhbml6YXRpb24pLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlcXVpcmVTeXN0ZW1BZG1pbihcbiAgcmVxOiBSZXF1ZXN0LFxuICByZXM6IFJlc3BvbnNlLFxuICBuZXh0OiBOZXh0RnVuY3Rpb24sXG4pOiB2b2lkIHtcbiAgaWYgKCFpc1N5c3RlbUFkbWluKHJlcSkpIHtcbiAgICByZXR1cm4gc2VuZEVycm9yKFxuICAgICAgcmVzLCBIdHRwU3RhdHVzLkZPUkJJRERFTixcbiAgICAgICdBY2Nlc3MgZGVuaWVkLiBPbmx5IHN5c3RlbSBhZG1pbmlzdHJhdG9ycyBjYW4gcGVyZm9ybSB0aGlzIGFjdGlvbi4nLFxuICAgICAgRXJyb3JDb2RlLklOU1VGRklDSUVOVF9QRVJNSVNTSU9OUyxcbiAgICApO1xuICB9XG4gIG5leHQoKTtcbn1cblxuLyoqXG4gKiBSZXF1aXJlIGEgc3BlY2lmaWMgZmVhdHVyZSBmbGFnLiBVc2UgYWZ0ZXIgcmVxdWlyZUF1dGguXG4gKiBDaGVja3MgdGhlIGBmZWF0dXJlc2AgYXJyYXkgaW4gdGhlIEpXVCBwYXlsb2FkIChzZXQgYXQgdG9rZW4gaXNzdWFuY2UpLlxuICogU3lzdGVtIG9yZyB1c2VycyBhbHdheXMgcGFzcyAoYWxsIGZlYXR1cmVzIGVuYWJsZWQpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVxdWlyZUZlYXR1cmUoZmVhdHVyZTogc3RyaW5nKSB7XG4gIHJldHVybiAocmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlLCBuZXh0OiBOZXh0RnVuY3Rpb24pOiB2b2lkID0+IHtcbiAgICBpZiAoIXJlcS51c2VyKSB7XG4gICAgICByZXR1cm4gc2VuZEVycm9yKHJlcywgSHR0cFN0YXR1cy5VTkFVVEhPUklaRUQsICdBdXRoZW50aWNhdGlvbiByZXF1aXJlZCcsIEVycm9yQ29kZS5VTkFVVEhPUklaRUQpO1xuICAgIH1cblxuICAgIC8vIFN5c3RlbSBvcmcgYWx3YXlzIGhhcyBhbGwgZmVhdHVyZXNcbiAgICBpZiAoaXNTeXN0ZW1PcmcocmVxKSkgcmV0dXJuIG5leHQoKTtcblxuICAgIGlmICghcmVxLnVzZXIuZmVhdHVyZXM/LmluY2x1ZGVzKGZlYXR1cmUpKSB7XG4gICAgICByZXR1cm4gc2VuZEVycm9yKFxuICAgICAgICByZXMsIEh0dHBTdGF0dXMuRk9SQklEREVOLFxuICAgICAgICBgVGhpcyBmZWF0dXJlIHJlcXVpcmVzIGEgaGlnaGVyIHBsYW4gKCR7ZmVhdHVyZX0pYCxcbiAgICAgICAgRXJyb3JDb2RlLklOU1VGRklDSUVOVF9QRVJNSVNTSU9OUyxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgbmV4dCgpO1xuICB9O1xufVxuXG4vKiogT25seSBzeXN0ZW0gYWRtaW5zIGNhbiBzZXQgYWNjZXNzIHRvICdwdWJsaWMnOyBldmVyeW9uZSBlbHNlIGdldHMgJ3ByaXZhdGUnLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVBY2Nlc3NNb2RpZmllcihyZXE6IFJlcXVlc3QsIHJlcXVlc3RlZDogc3RyaW5nIHwgdW5kZWZpbmVkKTogJ3B1YmxpYycgfCAncHJpdmF0ZScge1xuICBpZiAocmVxdWVzdGVkID09PSAncHVibGljJyAmJiBpc1N5c3RlbUFkbWluKHJlcSkpIHtcbiAgICByZXR1cm4gJ3B1YmxpYyc7XG4gIH1cbiAgcmV0dXJuICdwcml2YXRlJztcbn1cbiJdfQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './auth';
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Copyright 2026 Pipeline Builder Contributors
|
|
3
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
5
|
+
if (k2 === undefined) k2 = k;
|
|
6
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
7
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
8
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
9
|
+
}
|
|
10
|
+
Object.defineProperty(o, k2, desc);
|
|
11
|
+
}) : (function(o, m, k, k2) {
|
|
12
|
+
if (k2 === undefined) k2 = k;
|
|
13
|
+
o[k2] = m[k];
|
|
14
|
+
}));
|
|
15
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
16
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
17
|
+
};
|
|
18
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19
|
+
__exportStar(require("./auth"), exports);
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbWlkZGxld2FyZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsK0NBQStDO0FBQy9DLHNDQUFzQzs7Ozs7Ozs7Ozs7Ozs7OztBQUV0Qyx5Q0FBdUIiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuZXhwb3J0ICogZnJvbSAnLi9hdXRoJztcbiJdfQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Copyright 2026 Pipeline Builder Contributors
|
|
3
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
|
+
const zod_to_openapi_1 = require("@asteasolutions/zod-to-openapi");
|
|
6
|
+
const zod_1 = require("zod");
|
|
7
|
+
(0, zod_to_openapi_1.extendZodWithOpenApi)(zod_1.z);
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXh0ZW5kLXpvZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9vcGVuYXBpL2V4dGVuZC16b2QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7O0FBRXRDLG1FQUFzRTtBQUN0RSw2QkFBd0I7QUFFeEIsSUFBQSxxQ0FBb0IsRUFBQyxPQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgeyBleHRlbmRab2RXaXRoT3BlbkFwaSB9IGZyb20gJ0Bhc3RlYXNvbHV0aW9ucy96b2QtdG8tb3BlbmFwaSc7XG5pbXBvcnQgeyB6IH0gZnJvbSAnem9kJztcblxuZXh0ZW5kWm9kV2l0aE9wZW5BcGkoeik7XG4iXX0=
|
|
@@ -0,0 +1,10 @@
|
|
|
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.generateOpenApiSpec = exports.registry = void 0;
|
|
6
|
+
// Public API
|
|
7
|
+
var registry_1 = require("./registry");
|
|
8
|
+
Object.defineProperty(exports, "registry", { enumerable: true, get: function () { return registry_1.registry; } });
|
|
9
|
+
Object.defineProperty(exports, "generateOpenApiSpec", { enumerable: true, get: function () { return registry_1.generateOpenApiSpec; } });
|
|
10
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvb3BlbmFwaS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsK0NBQStDO0FBQy9DLHNDQUFzQzs7O0FBRXRDLGFBQWE7QUFDYix1Q0FBMkQ7QUFBbEQsb0dBQUEsUUFBUSxPQUFBO0FBQUUsK0dBQUEsbUJBQW1CLE9BQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLy8gUHVibGljIEFQSVxuZXhwb3J0IHsgcmVnaXN0cnksIGdlbmVyYXRlT3BlbkFwaVNwZWMgfSBmcm9tICcuL3JlZ2lzdHJ5JztcbmV4cG9ydCB0eXBlIHsgT3BlbkFwaVNwZWNPcHRpb25zIH0gZnJvbSAnLi9yZWdpc3RyeSc7XG4iXX0=
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { OpenAPIRegistry, OpenApiGeneratorV31 } from '@asteasolutions/zod-to-openapi';
|
|
2
|
+
/** Shared OpenAPI registry for all schema and path registrations. */
|
|
3
|
+
export declare const registry: OpenAPIRegistry;
|
|
4
|
+
/** Options for customizing the generated OpenAPI spec. */
|
|
5
|
+
export interface OpenApiSpecOptions {
|
|
6
|
+
title?: string;
|
|
7
|
+
version?: string;
|
|
8
|
+
description?: string;
|
|
9
|
+
serverUrl?: string;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Generate the complete OpenAPI 3.1.0 specification document.
|
|
13
|
+
*
|
|
14
|
+
* @param options - Optional overrides for spec metadata
|
|
15
|
+
* @returns OpenAPI 3.1 specification object
|
|
16
|
+
*/
|
|
17
|
+
export declare function generateOpenApiSpec(options?: OpenApiSpecOptions): ReturnType<OpenApiGeneratorV31['generateDocument']>;
|
|
@@ -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.registry = void 0;
|
|
6
|
+
exports.generateOpenApiSpec = generateOpenApiSpec;
|
|
7
|
+
const zod_to_openapi_1 = require("@asteasolutions/zod-to-openapi");
|
|
8
|
+
const routes_1 = require("./routes");
|
|
9
|
+
const schema_registry_1 = require("./schema-registry");
|
|
10
|
+
/** Shared OpenAPI registry for all schema and path registrations. */
|
|
11
|
+
exports.registry = new zod_to_openapi_1.OpenAPIRegistry();
|
|
12
|
+
let _initialized = false;
|
|
13
|
+
/** Execute all registrations once. */
|
|
14
|
+
function ensureInitialized() {
|
|
15
|
+
if (_initialized)
|
|
16
|
+
return;
|
|
17
|
+
_initialized = true;
|
|
18
|
+
(0, schema_registry_1.registerSchemas)();
|
|
19
|
+
(0, routes_1.registerAllRoutes)();
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Generate the complete OpenAPI 3.1.0 specification document.
|
|
23
|
+
*
|
|
24
|
+
* @param options - Optional overrides for spec metadata
|
|
25
|
+
* @returns OpenAPI 3.1 specification object
|
|
26
|
+
*/
|
|
27
|
+
function generateOpenApiSpec(options) {
|
|
28
|
+
ensureInitialized();
|
|
29
|
+
const generator = new zod_to_openapi_1.OpenApiGeneratorV31(exports.registry.definitions);
|
|
30
|
+
return generator.generateDocument({
|
|
31
|
+
openapi: '3.1.0',
|
|
32
|
+
info: {
|
|
33
|
+
title: options?.title ?? 'Pipeline Builder API',
|
|
34
|
+
version: options?.version ?? '1.0.0',
|
|
35
|
+
description: options?.description ?? 'CI/CD Pipeline Builder Platform API — manage pipelines, plugins, messages, quotas, and billing.',
|
|
36
|
+
},
|
|
37
|
+
servers: [
|
|
38
|
+
{ url: options?.serverUrl ?? '/api', description: 'API base path' },
|
|
39
|
+
],
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0cnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvb3BlbmFwaS9yZWdpc3RyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsK0NBQStDO0FBQy9DLHNDQUFzQzs7O0FBa0N0QyxrREFpQkM7QUFqREQsbUVBQXNGO0FBRXRGLHFDQUE2QztBQUM3Qyx1REFBb0Q7QUFFcEQscUVBQXFFO0FBQ3hELFFBQUEsUUFBUSxHQUFHLElBQUksZ0NBQWUsRUFBRSxDQUFDO0FBVTlDLElBQUksWUFBWSxHQUFHLEtBQUssQ0FBQztBQUV6QixzQ0FBc0M7QUFDdEMsU0FBUyxpQkFBaUI7SUFDeEIsSUFBSSxZQUFZO1FBQUUsT0FBTztJQUN6QixZQUFZLEdBQUcsSUFBSSxDQUFDO0lBQ3BCLElBQUEsaUNBQWUsR0FBRSxDQUFDO0lBQ2xCLElBQUEsMEJBQWlCLEdBQUUsQ0FBQztBQUN0QixDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFnQixtQkFBbUIsQ0FDakMsT0FBNEI7SUFFNUIsaUJBQWlCLEVBQUUsQ0FBQztJQUVwQixNQUFNLFNBQVMsR0FBRyxJQUFJLG9DQUFtQixDQUFDLGdCQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDaEUsT0FBTyxTQUFTLENBQUMsZ0JBQWdCLENBQUM7UUFDaEMsT0FBTyxFQUFFLE9BQU87UUFDaEIsSUFBSSxFQUFFO1lBQ0osS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLLElBQUksc0JBQXNCO1lBQy9DLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxJQUFJLE9BQU87WUFDcEMsV0FBVyxFQUFFLE9BQU8sRUFBRSxXQUFXLElBQUksaUdBQWlHO1NBQ3ZJO1FBQ0QsT0FBTyxFQUFFO1lBQ1AsRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLFNBQVMsSUFBSSxNQUFNLEVBQUUsV0FBVyxFQUFFLGVBQWUsRUFBRTtTQUNwRTtLQUNGLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHsgT3BlbkFQSVJlZ2lzdHJ5LCBPcGVuQXBpR2VuZXJhdG9yVjMxIH0gZnJvbSAnQGFzdGVhc29sdXRpb25zL3pvZC10by1vcGVuYXBpJztcblxuaW1wb3J0IHsgcmVnaXN0ZXJBbGxSb3V0ZXMgfSBmcm9tICcuL3JvdXRlcyc7XG5pbXBvcnQgeyByZWdpc3RlclNjaGVtYXMgfSBmcm9tICcuL3NjaGVtYS1yZWdpc3RyeSc7XG5cbi8qKiBTaGFyZWQgT3BlbkFQSSByZWdpc3RyeSBmb3IgYWxsIHNjaGVtYSBhbmQgcGF0aCByZWdpc3RyYXRpb25zLiAqL1xuZXhwb3J0IGNvbnN0IHJlZ2lzdHJ5ID0gbmV3IE9wZW5BUElSZWdpc3RyeSgpO1xuXG4vKiogT3B0aW9ucyBmb3IgY3VzdG9taXppbmcgdGhlIGdlbmVyYXRlZCBPcGVuQVBJIHNwZWMuICovXG5leHBvcnQgaW50ZXJmYWNlIE9wZW5BcGlTcGVjT3B0aW9ucyB7XG4gIHRpdGxlPzogc3RyaW5nO1xuICB2ZXJzaW9uPzogc3RyaW5nO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgc2VydmVyVXJsPzogc3RyaW5nO1xufVxuXG5sZXQgX2luaXRpYWxpemVkID0gZmFsc2U7XG5cbi8qKiBFeGVjdXRlIGFsbCByZWdpc3RyYXRpb25zIG9uY2UuICovXG5mdW5jdGlvbiBlbnN1cmVJbml0aWFsaXplZCgpOiB2b2lkIHtcbiAgaWYgKF9pbml0aWFsaXplZCkgcmV0dXJuO1xuICBfaW5pdGlhbGl6ZWQgPSB0cnVlO1xuICByZWdpc3RlclNjaGVtYXMoKTtcbiAgcmVnaXN0ZXJBbGxSb3V0ZXMoKTtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZSB0aGUgY29tcGxldGUgT3BlbkFQSSAzLjEuMCBzcGVjaWZpY2F0aW9uIGRvY3VtZW50LlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwgb3ZlcnJpZGVzIGZvciBzcGVjIG1ldGFkYXRhXG4gKiBAcmV0dXJucyBPcGVuQVBJIDMuMSBzcGVjaWZpY2F0aW9uIG9iamVjdFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVPcGVuQXBpU3BlYyhcbiAgb3B0aW9ucz86IE9wZW5BcGlTcGVjT3B0aW9ucyxcbik6IFJldHVyblR5cGU8T3BlbkFwaUdlbmVyYXRvclYzMVsnZ2VuZXJhdGVEb2N1bWVudCddPiB7XG4gIGVuc3VyZUluaXRpYWxpemVkKCk7XG5cbiAgY29uc3QgZ2VuZXJhdG9yID0gbmV3IE9wZW5BcGlHZW5lcmF0b3JWMzEocmVnaXN0cnkuZGVmaW5pdGlvbnMpO1xuICByZXR1cm4gZ2VuZXJhdG9yLmdlbmVyYXRlRG9jdW1lbnQoe1xuICAgIG9wZW5hcGk6ICczLjEuMCcsXG4gICAgaW5mbzoge1xuICAgICAgdGl0bGU6IG9wdGlvbnM/LnRpdGxlID8/ICdQaXBlbGluZSBCdWlsZGVyIEFQSScsXG4gICAgICB2ZXJzaW9uOiBvcHRpb25zPy52ZXJzaW9uID8/ICcxLjAuMCcsXG4gICAgICBkZXNjcmlwdGlvbjogb3B0aW9ucz8uZGVzY3JpcHRpb24gPz8gJ0NJL0NEIFBpcGVsaW5lIEJ1aWxkZXIgUGxhdGZvcm0gQVBJIOKAlCBtYW5hZ2UgcGlwZWxpbmVzLCBwbHVnaW5zLCBtZXNzYWdlcywgcXVvdGFzLCBhbmQgYmlsbGluZy4nLFxuICAgIH0sXG4gICAgc2VydmVyczogW1xuICAgICAgeyB1cmw6IG9wdGlvbnM/LnNlcnZlclVybCA/PyAnL2FwaScsIGRlc2NyaXB0aW9uOiAnQVBJIGJhc2UgcGF0aCcgfSxcbiAgICBdLFxuICB9KTtcbn1cbiJdfQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function registerBillingRoutes(): void;
|
|
@@ -0,0 +1,69 @@
|
|
|
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.registerBillingRoutes = registerBillingRoutes;
|
|
6
|
+
const registry_1 = require("../registry");
|
|
7
|
+
const tags = ['Billing'];
|
|
8
|
+
const auth = [{ bearerAuth: [] }];
|
|
9
|
+
function registerBillingRoutes() {
|
|
10
|
+
registry_1.registry.registerPath({
|
|
11
|
+
method: 'get',
|
|
12
|
+
path: '/billing/plans',
|
|
13
|
+
summary: 'List active plans',
|
|
14
|
+
description: 'List all active billing plans. No authentication required.',
|
|
15
|
+
tags,
|
|
16
|
+
responses: { 200: { description: 'List of active billing plans' } },
|
|
17
|
+
});
|
|
18
|
+
registry_1.registry.registerPath({
|
|
19
|
+
method: 'get',
|
|
20
|
+
path: '/billing/plans/{planId}',
|
|
21
|
+
summary: 'Get plan by ID',
|
|
22
|
+
tags,
|
|
23
|
+
responses: { 200: { description: 'Plan details' }, 404: { description: 'Plan not found' } },
|
|
24
|
+
});
|
|
25
|
+
registry_1.registry.registerPath({
|
|
26
|
+
method: 'post',
|
|
27
|
+
path: '/billing/subscriptions',
|
|
28
|
+
summary: 'Create subscription',
|
|
29
|
+
description: 'Create a new billing subscription for the current organization.',
|
|
30
|
+
tags,
|
|
31
|
+
security: auth,
|
|
32
|
+
responses: { 201: { description: 'Subscription created' }, 400: { description: 'Validation error' } },
|
|
33
|
+
});
|
|
34
|
+
registry_1.registry.registerPath({
|
|
35
|
+
method: 'get',
|
|
36
|
+
path: '/billing/subscriptions',
|
|
37
|
+
summary: 'List subscriptions',
|
|
38
|
+
description: 'List billing subscriptions for the current organization.',
|
|
39
|
+
tags,
|
|
40
|
+
security: auth,
|
|
41
|
+
responses: { 200: { description: 'List of subscriptions' } },
|
|
42
|
+
});
|
|
43
|
+
registry_1.registry.registerPath({
|
|
44
|
+
method: 'put',
|
|
45
|
+
path: '/billing/subscriptions/{id}',
|
|
46
|
+
summary: 'Update subscription',
|
|
47
|
+
tags,
|
|
48
|
+
security: auth,
|
|
49
|
+
responses: { 200: { description: 'Subscription updated' }, 404: { description: 'Not found' } },
|
|
50
|
+
});
|
|
51
|
+
registry_1.registry.registerPath({
|
|
52
|
+
method: 'delete',
|
|
53
|
+
path: '/billing/subscriptions/{id}',
|
|
54
|
+
summary: 'Cancel subscription',
|
|
55
|
+
tags,
|
|
56
|
+
security: auth,
|
|
57
|
+
responses: { 200: { description: 'Subscription cancelled' }, 404: { description: 'Not found' } },
|
|
58
|
+
});
|
|
59
|
+
registry_1.registry.registerPath({
|
|
60
|
+
method: 'post',
|
|
61
|
+
path: '/billing/marketplace',
|
|
62
|
+
summary: 'AWS Marketplace integration',
|
|
63
|
+
description: 'Handle AWS Marketplace subscription events.',
|
|
64
|
+
tags,
|
|
65
|
+
security: auth,
|
|
66
|
+
responses: { 200: { description: 'Marketplace event processed' } },
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmlsbGluZy1yb3V0ZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvb3BlbmFwaS9yb3V0ZXMvYmlsbGluZy1yb3V0ZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7O0FBT3RDLHNEQWlFQztBQXRFRCwwQ0FBdUM7QUFFdkMsTUFBTSxJQUFJLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUN6QixNQUFNLElBQUksR0FBRyxDQUFDLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFFbEMsU0FBZ0IscUJBQXFCO0lBQ25DLG1CQUFRLENBQUMsWUFBWSxDQUFDO1FBQ3BCLE1BQU0sRUFBRSxLQUFLO1FBQ2IsSUFBSSxFQUFFLGdCQUFnQjtRQUN0QixPQUFPLEVBQUUsbUJBQW1CO1FBQzVCLFdBQVcsRUFBRSw0REFBNEQ7UUFDekUsSUFBSTtRQUNKLFNBQVMsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLFdBQVcsRUFBRSw4QkFBOEIsRUFBRSxFQUFFO0tBQ3BFLENBQUMsQ0FBQztJQUVILG1CQUFRLENBQUMsWUFBWSxDQUFDO1FBQ3BCLE1BQU0sRUFBRSxLQUFLO1FBQ2IsSUFBSSxFQUFFLHlCQUF5QjtRQUMvQixPQUFPLEVBQUUsZ0JBQWdCO1FBQ3pCLElBQUk7UUFDSixTQUFTLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixFQUFFLEVBQUU7S0FDNUYsQ0FBQyxDQUFDO0lBRUgsbUJBQVEsQ0FBQyxZQUFZLENBQUM7UUFDcEIsTUFBTSxFQUFFLE1BQU07UUFDZCxJQUFJLEVBQUUsd0JBQXdCO1FBQzlCLE9BQU8sRUFBRSxxQkFBcUI7UUFDOUIsV0FBVyxFQUFFLGlFQUFpRTtRQUM5RSxJQUFJO1FBQ0osUUFBUSxFQUFFLElBQUk7UUFDZCxTQUFTLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxXQUFXLEVBQUUsc0JBQXNCLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxXQUFXLEVBQUUsa0JBQWtCLEVBQUUsRUFBRTtLQUN0RyxDQUFDLENBQUM7SUFFSCxtQkFBUSxDQUFDLFlBQVksQ0FBQztRQUNwQixNQUFNLEVBQUUsS0FBSztRQUNiLElBQUksRUFBRSx3QkFBd0I7UUFDOUIsT0FBTyxFQUFFLG9CQUFvQjtRQUM3QixXQUFXLEVBQUUsMERBQTBEO1FBQ3ZFLElBQUk7UUFDSixRQUFRLEVBQUUsSUFBSTtRQUNkLFNBQVMsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLFdBQVcsRUFBRSx1QkFBdUIsRUFBRSxFQUFFO0tBQzdELENBQUMsQ0FBQztJQUVILG1CQUFRLENBQUMsWUFBWSxDQUFDO1FBQ3BCLE1BQU0sRUFBRSxLQUFLO1FBQ2IsSUFBSSxFQUFFLDZCQUE2QjtRQUNuQyxPQUFPLEVBQUUscUJBQXFCO1FBQzlCLElBQUk7UUFDSixRQUFRLEVBQUUsSUFBSTtRQUNkLFNBQVMsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLFdBQVcsRUFBRSxzQkFBc0IsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsRUFBRTtLQUMvRixDQUFDLENBQUM7SUFFSCxtQkFBUSxDQUFDLFlBQVksQ0FBQztRQUNwQixNQUFNLEVBQUUsUUFBUTtRQUNoQixJQUFJLEVBQUUsNkJBQTZCO1FBQ25DLE9BQU8sRUFBRSxxQkFBcUI7UUFDOUIsSUFBSTtRQUNKLFFBQVEsRUFBRSxJQUFJO1FBQ2QsU0FBUyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsV0FBVyxFQUFFLHdCQUF3QixFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxFQUFFO0tBQ2pHLENBQUMsQ0FBQztJQUVILG1CQUFRLENBQUMsWUFBWSxDQUFDO1FBQ3BCLE1BQU0sRUFBRSxNQUFNO1FBQ2QsSUFBSSxFQUFFLHNCQUFzQjtRQUM1QixPQUFPLEVBQUUsNkJBQTZCO1FBQ3RDLFdBQVcsRUFBRSw2Q0FBNkM7UUFDMUQsSUFBSTtRQUNKLFFBQVEsRUFBRSxJQUFJO1FBQ2QsU0FBUyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsV0FBVyxFQUFFLDZCQUE2QixFQUFFLEVBQUU7S0FDbkUsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgeyByZWdpc3RyeSB9IGZyb20gJy4uL3JlZ2lzdHJ5JztcblxuY29uc3QgdGFncyA9IFsnQmlsbGluZyddO1xuY29uc3QgYXV0aCA9IFt7IGJlYXJlckF1dGg6IFtdIH1dO1xuXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJCaWxsaW5nUm91dGVzKCk6IHZvaWQge1xuICByZWdpc3RyeS5yZWdpc3RlclBhdGgoe1xuICAgIG1ldGhvZDogJ2dldCcsXG4gICAgcGF0aDogJy9iaWxsaW5nL3BsYW5zJyxcbiAgICBzdW1tYXJ5OiAnTGlzdCBhY3RpdmUgcGxhbnMnLFxuICAgIGRlc2NyaXB0aW9uOiAnTGlzdCBhbGwgYWN0aXZlIGJpbGxpbmcgcGxhbnMuIE5vIGF1dGhlbnRpY2F0aW9uIHJlcXVpcmVkLicsXG4gICAgdGFncyxcbiAgICByZXNwb25zZXM6IHsgMjAwOiB7IGRlc2NyaXB0aW9uOiAnTGlzdCBvZiBhY3RpdmUgYmlsbGluZyBwbGFucycgfSB9LFxuICB9KTtcblxuICByZWdpc3RyeS5yZWdpc3RlclBhdGgoe1xuICAgIG1ldGhvZDogJ2dldCcsXG4gICAgcGF0aDogJy9iaWxsaW5nL3BsYW5zL3twbGFuSWR9JyxcbiAgICBzdW1tYXJ5OiAnR2V0IHBsYW4gYnkgSUQnLFxuICAgIHRhZ3MsXG4gICAgcmVzcG9uc2VzOiB7IDIwMDogeyBkZXNjcmlwdGlvbjogJ1BsYW4gZGV0YWlscycgfSwgNDA0OiB7IGRlc2NyaXB0aW9uOiAnUGxhbiBub3QgZm91bmQnIH0gfSxcbiAgfSk7XG5cbiAgcmVnaXN0cnkucmVnaXN0ZXJQYXRoKHtcbiAgICBtZXRob2Q6ICdwb3N0JyxcbiAgICBwYXRoOiAnL2JpbGxpbmcvc3Vic2NyaXB0aW9ucycsXG4gICAgc3VtbWFyeTogJ0NyZWF0ZSBzdWJzY3JpcHRpb24nLFxuICAgIGRlc2NyaXB0aW9uOiAnQ3JlYXRlIGEgbmV3IGJpbGxpbmcgc3Vic2NyaXB0aW9uIGZvciB0aGUgY3VycmVudCBvcmdhbml6YXRpb24uJyxcbiAgICB0YWdzLFxuICAgIHNlY3VyaXR5OiBhdXRoLFxuICAgIHJlc3BvbnNlczogeyAyMDE6IHsgZGVzY3JpcHRpb246ICdTdWJzY3JpcHRpb24gY3JlYXRlZCcgfSwgNDAwOiB7IGRlc2NyaXB0aW9uOiAnVmFsaWRhdGlvbiBlcnJvcicgfSB9LFxuICB9KTtcblxuICByZWdpc3RyeS5yZWdpc3RlclBhdGgoe1xuICAgIG1ldGhvZDogJ2dldCcsXG4gICAgcGF0aDogJy9iaWxsaW5nL3N1YnNjcmlwdGlvbnMnLFxuICAgIHN1bW1hcnk6ICdMaXN0IHN1YnNjcmlwdGlvbnMnLFxuICAgIGRlc2NyaXB0aW9uOiAnTGlzdCBiaWxsaW5nIHN1YnNjcmlwdGlvbnMgZm9yIHRoZSBjdXJyZW50IG9yZ2FuaXphdGlvbi4nLFxuICAgIHRhZ3MsXG4gICAgc2VjdXJpdHk6IGF1dGgsXG4gICAgcmVzcG9uc2VzOiB7IDIwMDogeyBkZXNjcmlwdGlvbjogJ0xpc3Qgb2Ygc3Vic2NyaXB0aW9ucycgfSB9LFxuICB9KTtcblxuICByZWdpc3RyeS5yZWdpc3RlclBhdGgoe1xuICAgIG1ldGhvZDogJ3B1dCcsXG4gICAgcGF0aDogJy9iaWxsaW5nL3N1YnNjcmlwdGlvbnMve2lkfScsXG4gICAgc3VtbWFyeTogJ1VwZGF0ZSBzdWJzY3JpcHRpb24nLFxuICAgIHRhZ3MsXG4gICAgc2VjdXJpdHk6IGF1dGgsXG4gICAgcmVzcG9uc2VzOiB7IDIwMDogeyBkZXNjcmlwdGlvbjogJ1N1YnNjcmlwdGlvbiB1cGRhdGVkJyB9LCA0MDQ6IHsgZGVzY3JpcHRpb246ICdOb3QgZm91bmQnIH0gfSxcbiAgfSk7XG5cbiAgcmVnaXN0cnkucmVnaXN0ZXJQYXRoKHtcbiAgICBtZXRob2Q6ICdkZWxldGUnLFxuICAgIHBhdGg6ICcvYmlsbGluZy9zdWJzY3JpcHRpb25zL3tpZH0nLFxuICAgIHN1bW1hcnk6ICdDYW5jZWwgc3Vic2NyaXB0aW9uJyxcbiAgICB0YWdzLFxuICAgIHNlY3VyaXR5OiBhdXRoLFxuICAgIHJlc3BvbnNlczogeyAyMDA6IHsgZGVzY3JpcHRpb246ICdTdWJzY3JpcHRpb24gY2FuY2VsbGVkJyB9LCA0MDQ6IHsgZGVzY3JpcHRpb246ICdOb3QgZm91bmQnIH0gfSxcbiAgfSk7XG5cbiAgcmVnaXN0cnkucmVnaXN0ZXJQYXRoKHtcbiAgICBtZXRob2Q6ICdwb3N0JyxcbiAgICBwYXRoOiAnL2JpbGxpbmcvbWFya2V0cGxhY2UnLFxuICAgIHN1bW1hcnk6ICdBV1MgTWFya2V0cGxhY2UgaW50ZWdyYXRpb24nLFxuICAgIGRlc2NyaXB0aW9uOiAnSGFuZGxlIEFXUyBNYXJrZXRwbGFjZSBzdWJzY3JpcHRpb24gZXZlbnRzLicsXG4gICAgdGFncyxcbiAgICBzZWN1cml0eTogYXV0aCxcbiAgICByZXNwb25zZXM6IHsgMjAwOiB7IGRlc2NyaXB0aW9uOiAnTWFya2V0cGxhY2UgZXZlbnQgcHJvY2Vzc2VkJyB9IH0sXG4gIH0pO1xufVxuIl19
|
|
@@ -0,0 +1,22 @@
|
|
|
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.registerAllRoutes = registerAllRoutes;
|
|
6
|
+
const billing_routes_1 = require("./billing-routes");
|
|
7
|
+
const message_routes_1 = require("./message-routes");
|
|
8
|
+
const pipeline_routes_1 = require("./pipeline-routes");
|
|
9
|
+
const plugin_routes_1 = require("./plugin-routes");
|
|
10
|
+
const quota_routes_1 = require("./quota-routes");
|
|
11
|
+
/**
|
|
12
|
+
* Register all OpenAPI route definitions with the shared registry.
|
|
13
|
+
* Call this once during spec generation initialization.
|
|
14
|
+
*/
|
|
15
|
+
function registerAllRoutes() {
|
|
16
|
+
(0, billing_routes_1.registerBillingRoutes)();
|
|
17
|
+
(0, message_routes_1.registerMessageRoutes)();
|
|
18
|
+
(0, pipeline_routes_1.registerPipelineRoutes)();
|
|
19
|
+
(0, plugin_routes_1.registerPluginRoutes)();
|
|
20
|
+
(0, quota_routes_1.registerQuotaRoutes)();
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvb3BlbmFwaS9yb3V0ZXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7O0FBWXRDLDhDQU1DO0FBaEJELHFEQUF5RDtBQUN6RCxxREFBeUQ7QUFDekQsdURBQTJEO0FBQzNELG1EQUF1RDtBQUN2RCxpREFBcUQ7QUFFckQ7OztHQUdHO0FBQ0gsU0FBZ0IsaUJBQWlCO0lBQy9CLElBQUEsc0NBQXFCLEdBQUUsQ0FBQztJQUN4QixJQUFBLHNDQUFxQixHQUFFLENBQUM7SUFDeEIsSUFBQSx3Q0FBc0IsR0FBRSxDQUFDO0lBQ3pCLElBQUEsb0NBQW9CLEdBQUUsQ0FBQztJQUN2QixJQUFBLGtDQUFtQixHQUFFLENBQUM7QUFDeEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgeyByZWdpc3RlckJpbGxpbmdSb3V0ZXMgfSBmcm9tICcuL2JpbGxpbmctcm91dGVzJztcbmltcG9ydCB7IHJlZ2lzdGVyTWVzc2FnZVJvdXRlcyB9IGZyb20gJy4vbWVzc2FnZS1yb3V0ZXMnO1xuaW1wb3J0IHsgcmVnaXN0ZXJQaXBlbGluZVJvdXRlcyB9IGZyb20gJy4vcGlwZWxpbmUtcm91dGVzJztcbmltcG9ydCB7IHJlZ2lzdGVyUGx1Z2luUm91dGVzIH0gZnJvbSAnLi9wbHVnaW4tcm91dGVzJztcbmltcG9ydCB7IHJlZ2lzdGVyUXVvdGFSb3V0ZXMgfSBmcm9tICcuL3F1b3RhLXJvdXRlcyc7XG5cbi8qKlxuICogUmVnaXN0ZXIgYWxsIE9wZW5BUEkgcm91dGUgZGVmaW5pdGlvbnMgd2l0aCB0aGUgc2hhcmVkIHJlZ2lzdHJ5LlxuICogQ2FsbCB0aGlzIG9uY2UgZHVyaW5nIHNwZWMgZ2VuZXJhdGlvbiBpbml0aWFsaXphdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyQWxsUm91dGVzKCk6IHZvaWQge1xuICByZWdpc3RlckJpbGxpbmdSb3V0ZXMoKTtcbiAgcmVnaXN0ZXJNZXNzYWdlUm91dGVzKCk7XG4gIHJlZ2lzdGVyUGlwZWxpbmVSb3V0ZXMoKTtcbiAgcmVnaXN0ZXJQbHVnaW5Sb3V0ZXMoKTtcbiAgcmVnaXN0ZXJRdW90YVJvdXRlcygpO1xufVxuIl19
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function registerMessageRoutes(): void;
|
|
@@ -0,0 +1,108 @@
|
|
|
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.registerMessageRoutes = registerMessageRoutes;
|
|
6
|
+
const registry_1 = require("../registry");
|
|
7
|
+
const tags = ['Messages'];
|
|
8
|
+
const auth = [{ bearerAuth: [] }];
|
|
9
|
+
function registerMessageRoutes() {
|
|
10
|
+
registry_1.registry.registerPath({
|
|
11
|
+
method: 'get',
|
|
12
|
+
path: '/messages',
|
|
13
|
+
summary: 'List inbox messages',
|
|
14
|
+
description: 'List root messages (inbox) with optional filtering by type and pagination.',
|
|
15
|
+
tags,
|
|
16
|
+
security: auth,
|
|
17
|
+
responses: { 200: { description: 'Paginated list of messages' } },
|
|
18
|
+
});
|
|
19
|
+
registry_1.registry.registerPath({
|
|
20
|
+
method: 'get',
|
|
21
|
+
path: '/messages/announcements',
|
|
22
|
+
summary: 'List announcements',
|
|
23
|
+
description: 'List announcement messages only.',
|
|
24
|
+
tags,
|
|
25
|
+
security: auth,
|
|
26
|
+
responses: { 200: { description: 'List of announcements' } },
|
|
27
|
+
});
|
|
28
|
+
registry_1.registry.registerPath({
|
|
29
|
+
method: 'get',
|
|
30
|
+
path: '/messages/conversations',
|
|
31
|
+
summary: 'List conversations',
|
|
32
|
+
description: 'List conversation messages only.',
|
|
33
|
+
tags,
|
|
34
|
+
security: auth,
|
|
35
|
+
responses: { 200: { description: 'List of conversations' } },
|
|
36
|
+
});
|
|
37
|
+
registry_1.registry.registerPath({
|
|
38
|
+
method: 'get',
|
|
39
|
+
path: '/messages/unread/count',
|
|
40
|
+
summary: 'Get unread count',
|
|
41
|
+
description: 'Get the number of unread messages for the current organization.',
|
|
42
|
+
tags,
|
|
43
|
+
security: auth,
|
|
44
|
+
responses: { 200: { description: 'Unread message count' } },
|
|
45
|
+
});
|
|
46
|
+
registry_1.registry.registerPath({
|
|
47
|
+
method: 'get',
|
|
48
|
+
path: '/messages/{id}',
|
|
49
|
+
summary: 'Get message by ID',
|
|
50
|
+
tags,
|
|
51
|
+
security: auth,
|
|
52
|
+
responses: { 200: { description: 'Message details' }, 404: { description: 'Not found' } },
|
|
53
|
+
});
|
|
54
|
+
registry_1.registry.registerPath({
|
|
55
|
+
method: 'get',
|
|
56
|
+
path: '/messages/{id}/thread',
|
|
57
|
+
summary: 'Get message thread',
|
|
58
|
+
description: 'Get all messages in a thread including the root message and replies.',
|
|
59
|
+
tags,
|
|
60
|
+
security: auth,
|
|
61
|
+
responses: { 200: { description: 'Thread messages sorted by date' } },
|
|
62
|
+
});
|
|
63
|
+
registry_1.registry.registerPath({
|
|
64
|
+
method: 'post',
|
|
65
|
+
path: '/messages',
|
|
66
|
+
summary: 'Create a message',
|
|
67
|
+
description: 'Create a new announcement or conversation message.',
|
|
68
|
+
tags,
|
|
69
|
+
security: auth,
|
|
70
|
+
responses: { 201: { description: 'Message created' }, 400: { description: 'Validation error' } },
|
|
71
|
+
});
|
|
72
|
+
registry_1.registry.registerPath({
|
|
73
|
+
method: 'post',
|
|
74
|
+
path: '/messages/{id}/reply',
|
|
75
|
+
summary: 'Reply to a message',
|
|
76
|
+
description: 'Create a reply in an existing message thread.',
|
|
77
|
+
tags,
|
|
78
|
+
security: auth,
|
|
79
|
+
responses: { 201: { description: 'Reply created' }, 404: { description: 'Parent message not found' } },
|
|
80
|
+
});
|
|
81
|
+
registry_1.registry.registerPath({
|
|
82
|
+
method: 'put',
|
|
83
|
+
path: '/messages/{id}/read',
|
|
84
|
+
summary: 'Mark message as read',
|
|
85
|
+
tags,
|
|
86
|
+
security: auth,
|
|
87
|
+
responses: { 200: { description: 'Message marked as read' } },
|
|
88
|
+
});
|
|
89
|
+
registry_1.registry.registerPath({
|
|
90
|
+
method: 'put',
|
|
91
|
+
path: '/messages/{id}/thread/read',
|
|
92
|
+
summary: 'Mark thread as read',
|
|
93
|
+
description: 'Mark all messages in a thread as read.',
|
|
94
|
+
tags,
|
|
95
|
+
security: auth,
|
|
96
|
+
responses: { 200: { description: 'Thread marked as read' } },
|
|
97
|
+
});
|
|
98
|
+
registry_1.registry.registerPath({
|
|
99
|
+
method: 'delete',
|
|
100
|
+
path: '/messages/{id}',
|
|
101
|
+
summary: 'Delete a message',
|
|
102
|
+
description: 'Soft-delete a message.',
|
|
103
|
+
tags,
|
|
104
|
+
security: auth,
|
|
105
|
+
responses: { 200: { description: 'Message deleted' }, 404: { description: 'Not found' } },
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZS1yb3V0ZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvb3BlbmFwaS9yb3V0ZXMvbWVzc2FnZS1yb3V0ZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7O0FBT3RDLHNEQTRHQztBQWpIRCwwQ0FBdUM7QUFFdkMsTUFBTSxJQUFJLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUMxQixNQUFNLElBQUksR0FBRyxDQUFDLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFFbEMsU0FBZ0IscUJBQXFCO0lBQ25DLG1CQUFRLENBQUMsWUFBWSxDQUFDO1FBQ3BCLE1BQU0sRUFBRSxLQUFLO1FBQ2IsSUFBSSxFQUFFLFdBQVc7UUFDakIsT0FBTyxFQUFFLHFCQUFxQjtRQUM5QixXQUFXLEVBQUUsNEVBQTRFO1FBQ3pGLElBQUk7UUFDSixRQUFRLEVBQUUsSUFBSTtRQUNkLFNBQVMsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLFdBQVcsRUFBRSw0QkFBNEIsRUFBRSxFQUFFO0tBQ2xFLENBQUMsQ0FBQztJQUVILG1CQUFRLENBQUMsWUFBWSxDQUFDO1FBQ3BCLE1BQU0sRUFBRSxLQUFLO1FBQ2IsSUFBSSxFQUFFLHlCQUF5QjtRQUMvQixPQUFPLEVBQUUsb0JBQW9CO1FBQzdCLFdBQVcsRUFBRSxrQ0FBa0M7UUFDL0MsSUFBSTtRQUNKLFFBQVEsRUFBRSxJQUFJO1FBQ2QsU0FBUyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsV0FBVyxFQUFFLHVCQUF1QixFQUFFLEVBQUU7S0FDN0QsQ0FBQyxDQUFDO0lBRUgsbUJBQVEsQ0FBQyxZQUFZLENBQUM7UUFDcEIsTUFBTSxFQUFFLEtBQUs7UUFDYixJQUFJLEVBQUUseUJBQXlCO1FBQy9CLE9BQU8sRUFBRSxvQkFBb0I7UUFDN0IsV0FBVyxFQUFFLGtDQUFrQztRQUMvQyxJQUFJO1FBQ0osUUFBUSxFQUFF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QixPQUFPLEVBQUUsa0JBQWtCO1FBQzNCLFdBQVcsRUFBRSx3QkFBd0I7UUFDckMsSUFBSTtRQUNKLFFBQVEsRUFBRSxJQUFJO1FBQ2QsU0FBUyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsV0FBVyxFQUFFLGlCQUFpQixFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxFQUFFO0tBQzFGLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHsgcmVnaXN0cnkgfSBmcm9tICcuLi9yZWdpc3RyeSc7XG5cbmNvbnN0IHRhZ3MgPSBbJ01lc3NhZ2VzJ107XG5jb25zdCBhdXRoID0gW3sgYmVhcmVyQXV0aDogW10gfV07XG5cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3Rlck1lc3NhZ2VSb3V0ZXMoKTogdm9pZCB7XG4gIHJlZ2lzdHJ5LnJlZ2lzdGVyUGF0aCh7XG4gICAgbWV0aG9kOiAnZ2V0JyxcbiAgICBwYXRoOiAnL21lc3NhZ2VzJyxcbiAgICBzdW1tYXJ5OiAnTGlzdCBpbmJveCBtZXNzYWdlcycsXG4gICAgZGVzY3JpcHRpb246ICdMaXN0IHJvb3QgbWVzc2FnZXMgKGluYm94KSB3aXRoIG9wdGlvbmFsIGZpbHRlcmluZyBieSB0eXBlIGFuZCBwYWdpbmF0aW9uLicsXG4gICAgdGFncyxcbiAgICBzZWN1cml0eTogYXV0aCxcbiAgICByZXNwb25zZXM6IHsgMjAwOiB7IGRlc2NyaXB0aW9uOiAnUGFnaW5hdGVkIGxpc3Qgb2YgbWVzc2FnZXMnIH0gfSxcbiAgfSk7XG5cbiAgcmVnaXN0cnkucmVnaXN0ZXJQYXRoKHtcbiAgICBtZXRob2Q6ICdnZXQnLFxuICAgIHBhdGg6ICcvbWVzc2FnZXMvYW5ub3VuY2VtZW50cycsXG4gICAgc3VtbWFyeTogJ0xpc3QgYW5ub3VuY2VtZW50cycsXG4gICAgZGVzY3JpcHRpb246ICdMaXN0IGFubm91bmNlbWVudCBtZXNzYWdlcyBvbmx5LicsXG4gICAgdGFncyxcbiAgICBzZWN1cml0eTogYXV0aCxcbiAgICByZXNwb25zZXM6IHsgMjAwOiB7IGRlc2NyaXB0aW9uOiAnTGlzdCBvZiBhbm5vdW5jZW1lbnRzJyB9IH0sXG4gIH0pO1xuXG4gIHJlZ2lzdHJ5LnJlZ2lzdGVyUGF0aCh7XG4gICAgbWV0aG9kOiAnZ2V0JyxcbiAgICBwYXRoOiAnL21lc3NhZ2VzL2NvbnZlcnNhdGlvbnMnLFxuICAgIHN1bW1hcnk6ICdMaXN0IGNvbnZlcnNhdGlvbnMnLFxuICAgIGRlc2NyaXB0aW9uOiAnTGlzdCBjb252ZXJzYXRpb24gbWVzc2FnZXMgb25seS4nLFxuICAgIHRhZ3MsXG4gICAgc2VjdXJpdHk6IGF1dGgsXG4gICAgcmVzcG9uc2VzOiB7IDIwMDogeyBkZXNjcmlwdGlvbjogJ0xpc3Qgb2YgY29udmVyc2F0aW9ucycgfSB9LFxuICB9KTtcblxuICByZWdpc3RyeS5yZWdpc3RlclBhdGgoe1xuICAgIG1ldGhvZDogJ2dldCcsXG4gICAgcGF0aDogJy9tZXNzYWdlcy91bnJlYWQvY291bnQnLFxuICAgIHN1bW1hcnk6ICdHZXQgdW5yZWFkIGNvdW50JyxcbiAgICBkZXNjcmlwdGlvbjogJ0dldCB0aGUgbnVtYmVyIG9mIHVucmVhZCBtZXNzYWdlcyBmb3IgdGhlIGN1cnJlbnQgb3JnYW5pemF0aW9uLicsXG4gICAgdGFncyxcbiAgICBzZWN1cml0eTogYXV0aCxcbiAgICByZXNwb25zZXM6IHsgMjAwOiB7IGRlc2NyaXB0aW9uOiAnVW5yZWFkIG1lc3NhZ2UgY291bnQnIH0gfSxcbiAgfSk7XG5cbiAgcmVnaXN0cnkucmVnaXN0ZXJQYXRoKHtcbiAgICBtZXRob2Q6ICdnZXQnLFxuICAgIHBhdGg6ICcvbWVzc2FnZXMve2lkfScsXG4gICAgc3VtbWFyeTogJ0dldCBtZXNzYWdlIGJ5IElEJyxcbiAgICB0YWdzLFxuICAgIHNlY3VyaXR5OiBhdXRoLFxuICAgIHJlc3BvbnNlczogeyAyMDA6IHsgZGVzY3JpcHRpb246ICdNZXNzYWdlIGRldGFpbHMnIH0sIDQwNDogeyBkZXNjcmlwdGlvbjogJ05vdCBmb3VuZCcgfSB9LFxuICB9KTtcblxuICByZWdpc3RyeS5yZWdpc3RlclBhdGgoe1xuICAgIG1ldGhvZDogJ2dldCcsXG4gICAgcGF0aDogJy9tZXNzYWdlcy97aWR9L3RocmVhZCcsXG4gICAgc3VtbWFyeTogJ0dldCBtZXNzYWdlIHRocmVhZCcsXG4gICAgZGVzY3JpcHRpb246ICdHZXQgYWxsIG1lc3NhZ2VzIGluIGEgdGhyZWFkIGluY2x1ZGluZyB0aGUgcm9vdCBtZXNzYWdlIGFuZCByZXBsaWVzLicsXG4gICAgdGFncyxcbiAgICBzZWN1cml0eTogYXV0aCxcbiAgICByZXNwb25zZXM6IHsgMjAwOiB7IGRlc2NyaXB0aW9uOiAnVGhyZWFkIG1lc3NhZ2VzIHNvcnRlZCBieSBkYXRlJyB9IH0sXG4gIH0pO1xuXG4gIHJlZ2lzdHJ5LnJlZ2lzdGVyUGF0aCh7XG4gICAgbWV0aG9kOiAncG9zdCcsXG4gICAgcGF0aDogJy9tZXNzYWdlcycsXG4gICAgc3VtbWFyeTogJ0NyZWF0ZSBhIG1lc3NhZ2UnLFxuICAgIGRlc2NyaXB0aW9uOiAnQ3JlYXRlIGEgbmV3IGFubm91bmNlbWVudCBvciBjb252ZXJzYXRpb24gbWVzc2FnZS4nLFxuICAgIHRhZ3MsXG4gICAgc2VjdXJpdHk6IGF1dGgsXG4gICAgcmVzcG9uc2VzOiB7IDIwMTogeyBkZXNjcmlwdGlvbjogJ01lc3NhZ2UgY3JlYXRlZCcgfSwgNDAwOiB7IGRlc2NyaXB0aW9uOiAnVmFsaWRhdGlvbiBlcnJvcicgfSB9LFxuICB9KTtcblxuICByZWdpc3RyeS5yZWdpc3RlclBhdGgoe1xuICAgIG1ldGhvZDogJ3Bvc3QnLFxuICAgIHBhdGg6ICcvbWVzc2FnZXMve2lkfS9yZXBseScsXG4gICAgc3VtbWFyeTogJ1JlcGx5IHRvIGEgbWVzc2FnZScsXG4gICAgZGVzY3JpcHRpb246ICdDcmVhdGUgYSByZXBseSBpbiBhbiBleGlzdGluZyBtZXNzYWdlIHRocmVhZC4nLFxuICAgIHRhZ3MsXG4gICAgc2VjdXJpdHk6IGF1dGgsXG4gICAgcmVzcG9uc2VzOiB7IDIwMTogeyBkZXNjcmlwdGlvbjogJ1JlcGx5IGNyZWF0ZWQnIH0sIDQwNDogeyBkZXNjcmlwdGlvbjogJ1BhcmVudCBtZXNzYWdlIG5vdCBmb3VuZCcgfSB9LFxuICB9KTtcblxuICByZWdpc3RyeS5yZWdpc3RlclBhdGgoe1xuICAgIG1ldGhvZDogJ3B1dCcsXG4gICAgcGF0aDogJy9tZXNzYWdlcy97aWR9L3JlYWQnLFxuICAgIHN1bW1hcnk6ICdNYXJrIG1lc3NhZ2UgYXMgcmVhZCcsXG4gICAgdGFncyxcbiAgICBzZWN1cml0eTogYXV0aCxcbiAgICByZXNwb25zZXM6IHsgMjAwOiB7IGRlc2NyaXB0aW9uOiAnTWVzc2FnZSBtYXJrZWQgYXMgcmVhZCcgfSB9LFxuICB9KTtcblxuICByZWdpc3RyeS5yZWdpc3RlclBhdGgoe1xuICAgIG1ldGhvZDogJ3B1dCcsXG4gICAgcGF0aDogJy9tZXNzYWdlcy97aWR9L3RocmVhZC9yZWFkJyxcbiAgICBzdW1tYXJ5OiAnTWFyayB0aHJlYWQgYXMgcmVhZCcsXG4gICAgZGVzY3JpcHRpb246ICdNYXJrIGFsbCBtZXNzYWdlcyBpbiBhIHRocmVhZCBhcyByZWFkLicsXG4gICAgdGFncyxcbiAgICBzZWN1cml0eTogYXV0aCxcbiAgICByZXNwb25zZXM6IHsgMjAwOiB7IGRlc2NyaXB0aW9uOiAnVGhyZWFkIG1hcmtlZCBhcyByZWFkJyB9IH0sXG4gIH0pO1xuXG4gIHJlZ2lzdHJ5LnJlZ2lzdGVyUGF0aCh7XG4gICAgbWV0aG9kOiAnZGVsZXRlJyxcbiAgICBwYXRoOiAnL21lc3NhZ2VzL3tpZH0nLFxuICAgIHN1bW1hcnk6ICdEZWxldGUgYSBtZXNzYWdlJyxcbiAgICBkZXNjcmlwdGlvbjogJ1NvZnQtZGVsZXRlIGEgbWVzc2FnZS4nLFxuICAgIHRhZ3MsXG4gICAgc2VjdXJpdHk6IGF1dGgsXG4gICAgcmVzcG9uc2VzOiB7IDIwMDogeyBkZXNjcmlwdGlvbjogJ01lc3NhZ2UgZGVsZXRlZCcgfSwgNDA0OiB7IGRlc2NyaXB0aW9uOiAnTm90IGZvdW5kJyB9IH0sXG4gIH0pO1xufVxuIl19
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function registerPipelineRoutes(): void;
|