@pipeline-builder/api-core 4.1.13 → 4.1.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -2
- package/lib/constants/index.d.ts +0 -1
- package/lib/constants/index.js +1 -2
- package/lib/errors/app-errors.d.ts +8 -3
- package/lib/errors/app-errors.js +10 -5
- package/lib/helpers/access-helpers.d.ts +4 -6
- package/lib/helpers/access-helpers.js +6 -8
- package/lib/helpers/index.d.ts +3 -3
- package/lib/helpers/index.js +4 -4
- package/lib/helpers/org-hierarchy-http.d.ts +11 -10
- package/lib/helpers/org-hierarchy-http.js +24 -35
- package/lib/helpers/org-hierarchy.d.ts +37 -3
- package/lib/helpers/org-hierarchy.js +45 -4
- package/lib/helpers/restore-helpers.d.ts +44 -24
- package/lib/helpers/restore-helpers.js +41 -52
- package/lib/helpers/sse-helpers.d.ts +29 -7
- package/lib/helpers/sse-helpers.js +36 -9
- package/lib/index.d.ts +16 -14
- package/lib/index.js +17 -15
- package/lib/middleware/assurance.d.ts +116 -0
- package/lib/middleware/assurance.js +176 -0
- package/lib/middleware/auth.d.ts +5 -427
- package/lib/middleware/auth.js +36 -789
- package/lib/middleware/ecosystem-guard.d.ts +47 -0
- package/lib/middleware/ecosystem-guard.js +60 -0
- package/lib/middleware/index.d.ts +11 -4
- package/lib/middleware/index.js +12 -5
- package/lib/middleware/jwt-verify.d.ts +52 -0
- package/lib/middleware/jwt-verify.js +105 -0
- package/lib/middleware/permission-gates.d.ts +133 -0
- package/lib/middleware/permission-gates.js +260 -0
- package/lib/middleware/revocation.d.ts +96 -0
- package/lib/middleware/revocation.js +162 -0
- package/lib/middleware/route-table.d.ts +11 -0
- package/lib/middleware/route-table.js +4 -1
- package/lib/middleware/service-tokens.d.ts +83 -0
- package/lib/middleware/service-tokens.js +158 -0
- package/lib/middleware/step-up.d.ts +2 -2
- package/lib/middleware/step-up.js +8 -7
- package/lib/middleware/system-org.d.ts +20 -0
- package/lib/middleware/system-org.js +25 -0
- package/lib/openapi/routes/plugin-routes.js +133 -10
- package/lib/openapi/schema-registry.js +2 -5
- package/lib/routes/index.d.ts +1 -1
- package/lib/routes/index.js +2 -2
- package/lib/services/api-key-exchange.js +7 -5
- package/lib/services/audit-spool.d.ts +34 -10
- package/lib/services/audit-spool.js +75 -34
- package/lib/services/cache-service.d.ts +7 -0
- package/lib/services/cache-service.js +1 -1
- package/lib/services/circuit-breaker.d.ts +14 -1
- package/lib/services/circuit-breaker.js +36 -10
- package/lib/services/compliance-client.d.ts +10 -2
- package/lib/services/compliance-client.js +17 -10
- package/lib/services/compliance-event-subscriber.js +6 -6
- package/lib/services/durable-event-bus.js +8 -11
- package/lib/services/ecosystem-notify-client.d.ts +32 -0
- package/lib/services/ecosystem-notify-client.js +71 -0
- package/lib/services/env-redis.d.ts +4 -1
- package/lib/services/env-redis.js +32 -3
- package/lib/services/http-client.d.ts +19 -0
- package/lib/services/http-client.js +98 -19
- package/lib/services/index.d.ts +25 -24
- package/lib/services/index.js +25 -22
- package/lib/services/jwks-cache.js +5 -4
- package/lib/services/leader-lock.d.ts +22 -5
- package/lib/services/leader-lock.js +61 -6
- package/lib/services/quota.d.ts +9 -4
- package/lib/services/quota.js +34 -40
- package/lib/services/remote-audit-client.d.ts +28 -32
- package/lib/services/remote-audit-client.js +166 -49
- package/lib/services/retry-forever.js +5 -11
- package/lib/services/retry-strategy.d.ts +1 -1
- package/lib/services/retry-strategy.js +5 -4
- package/lib/services/scheduler.d.ts +8 -3
- package/lib/services/scheduler.js +17 -5
- package/lib/services/service-boot.d.ts +14 -13
- package/lib/services/service-boot.js +18 -15
- package/lib/services/service-keys.d.ts +1 -1
- package/lib/services/service-keys.js +12 -18
- package/lib/services/sse-ticket-store.d.ts +9 -1
- package/lib/services/sse-ticket-store.js +24 -9
- package/lib/services/system-notification.d.ts +27 -0
- package/lib/services/system-notification.js +50 -0
- package/lib/services/token-revocation.d.ts +50 -1
- package/lib/services/token-revocation.js +103 -3
- package/lib/types/audit-events.d.ts +6 -6
- package/lib/types/audit-events.js +1 -1
- package/lib/types/common.d.ts +32 -13
- package/lib/types/common.js +2 -1
- package/lib/types/ecosystem-notifications.d.ts +142 -0
- package/lib/types/ecosystem-notifications.js +210 -0
- package/lib/types/ecosystem.d.ts +77 -0
- package/lib/types/ecosystem.js +119 -0
- package/lib/types/error-codes.d.ts +81 -0
- package/lib/types/error-codes.js +108 -1
- package/lib/types/feature-flags.d.ts +21 -1
- package/lib/types/feature-flags.js +36 -2
- package/lib/types/index.d.ts +14 -9
- package/lib/types/index.js +15 -10
- package/lib/types/permissions.d.ts +46 -8
- package/lib/types/permissions.js +75 -12
- package/lib/types/plugin-catalog.d.ts +35 -0
- package/lib/types/plugin-catalog.js +39 -0
- package/lib/types/plugin-health.d.ts +102 -0
- package/lib/types/plugin-health.js +184 -0
- package/lib/types/quota-tiers.d.ts +15 -0
- package/lib/types/quota-tiers.js +23 -3
- package/lib/types/wire-vocabulary.d.ts +102 -0
- package/lib/types/wire-vocabulary.js +94 -0
- package/lib/utils/alias-resolver.js +2 -2
- package/lib/utils/audit.d.ts +5 -2
- package/lib/utils/audit.js +6 -3
- package/lib/utils/compliance-attributes.js +3 -4
- package/lib/utils/concurrency.d.ts +7 -0
- package/lib/utils/concurrency.js +13 -1
- package/lib/utils/env.d.ts +3 -4
- package/lib/utils/env.js +4 -5
- package/lib/utils/identity.d.ts +13 -4
- package/lib/utils/identity.js +18 -10
- package/lib/utils/index.d.ts +13 -10
- package/lib/utils/index.js +13 -10
- package/lib/utils/jwk.d.ts +4 -0
- package/lib/utils/jwk.js +13 -1
- package/lib/utils/logger.d.ts +1 -1
- package/lib/utils/logger.js +1 -1
- package/lib/utils/object.d.ts +11 -0
- package/lib/utils/object.js +24 -1
- package/lib/utils/params.d.ts +8 -22
- package/lib/utils/params.js +15 -43
- package/lib/utils/plugin-compliance.d.ts +98 -0
- package/lib/utils/plugin-compliance.js +78 -0
- package/lib/utils/proof-of-work.d.ts +69 -0
- package/lib/utils/proof-of-work.js +139 -0
- package/lib/utils/response.d.ts +16 -6
- package/lib/utils/response.js +18 -15
- package/lib/utils/retention.d.ts +17 -0
- package/lib/utils/retention.js +30 -0
- package/lib/utils/secret-encryption.d.ts +7 -7
- package/lib/utils/secret-encryption.js +9 -10
- package/lib/utils/secret-rotation.js +2 -2
- package/lib/utils/sensitive-patterns.js +4 -5
- package/lib/utils/service-registry.d.ts +15 -0
- package/lib/utils/service-registry.js +24 -0
- package/lib/utils/ssrf.d.ts +11 -2
- package/lib/utils/ssrf.js +112 -33
- package/lib/validation/ai-schemas.js +3 -2
- package/lib/validation/common-schemas.d.ts +0 -9
- package/lib/validation/common-schemas.js +1 -7
- package/lib/validation/dockerfile-static.d.ts +26 -0
- package/lib/validation/dockerfile-static.js +210 -0
- package/lib/validation/index.d.ts +13 -4
- package/lib/validation/index.js +14 -5
- package/lib/validation/message-schemas.js +6 -4
- package/lib/validation/pipeline-schemas.d.ts +8 -2
- package/lib/validation/pipeline-schemas.js +30 -4
- package/lib/validation/plugin-base-images.d.ts +20 -0
- package/lib/validation/plugin-base-images.js +17 -0
- package/lib/validation/plugin-catalog-detect.d.ts +86 -0
- package/lib/validation/plugin-catalog-detect.js +237 -0
- package/lib/validation/plugin-catalog-metadata.d.ts +141 -0
- package/lib/validation/plugin-catalog-metadata.js +162 -0
- package/lib/validation/plugin-heuristics.d.ts +41 -0
- package/lib/validation/plugin-heuristics.js +211 -0
- package/lib/validation/plugin-lint.d.ts +18 -0
- package/lib/validation/plugin-lint.js +136 -0
- package/lib/validation/plugin-name-confusable.d.ts +15 -0
- package/lib/validation/plugin-name-confusable.js +81 -0
- package/lib/validation/plugin-schemas.d.ts +40 -26
- package/lib/validation/plugin-schemas.js +26 -23
- package/lib/validation/plugin-spec-schema.d.ts +112 -0
- package/lib/validation/plugin-spec-schema.js +163 -0
- package/lib/validation/plugin-template-contract.d.ts +64 -0
- package/lib/validation/plugin-template-contract.js +113 -0
- package/package.json +69 -4
- package/lib/testing/mock-api-core.d.ts +0 -150
- package/lib/testing/mock-api-core.js +0 -246
- package/lib/testing/mock-drizzle.d.ts +0 -6
- package/lib/testing/mock-drizzle.js +0 -57
- package/lib/testing/route-coverage.d.ts +0 -64
- package/lib/testing/route-coverage.js +0 -183
- package/lib/testing/service-tokens.d.ts +0 -66
- package/lib/testing/service-tokens.js +0 -137
- package/lib/testing/tier-mock.d.ts +0 -44
- package/lib/testing/tier-mock.js +0 -65
- package/lib/testing/user-tokens.d.ts +0 -75
- package/lib/testing/user-tokens.js +0 -115
package/lib/types/error-codes.js
CHANGED
|
@@ -32,14 +32,48 @@ export var ErrorCode;
|
|
|
32
32
|
/** A bootstrap-admin enrolment session (`mfaEnrollmentPending`) reached a
|
|
33
33
|
* route outside the enrolment / sign-out / setup allowlist. */
|
|
34
34
|
ErrorCode["MFA_ENROLLMENT_REQUIRED"] = "MFA_ENROLLMENT_REQUIRED";
|
|
35
|
+
/** A read-only impersonation token (`impersonationReadOnly`) attempted a
|
|
36
|
+
* state-changing request (anything but GET/HEAD/OPTIONS). */
|
|
37
|
+
ErrorCode["IMPERSONATION_READ_ONLY"] = "IMPERSONATION_READ_ONLY";
|
|
38
|
+
/** A plugin-ecosystem governance route (docs/runbooks/ecosystem-moderation.md)
|
|
39
|
+
* was called from an active org other than the system org — a token minted in
|
|
40
|
+
* a tenant org is refused even for the same user. Switch to the system org. */
|
|
41
|
+
ErrorCode["SYSTEM_ORG_REQUIRED"] = "SYSTEM_ORG_REQUIRED";
|
|
42
|
+
/** The publisher hasn't accepted the CURRENT publisher terms version, so it
|
|
43
|
+
* can't submit new requests (existing listings are unaffected). */
|
|
44
|
+
ErrorCode["PUBLISHER_TERMS_REQUIRED"] = "PUBLISHER_TERMS_REQUIRED";
|
|
45
|
+
/** Publishing is done from the ROOT org; a team org can't own a publisher or
|
|
46
|
+
* submit requests. */
|
|
47
|
+
ErrorCode["PUBLISHER_ROOT_ORG_REQUIRED"] = "PUBLISHER_ROOT_ORG_REQUIRED";
|
|
48
|
+
/** The publisher is suspended by the system org. */
|
|
49
|
+
ErrorCode["PUBLISHER_SUSPENDED"] = "PUBLISHER_SUSPENDED";
|
|
50
|
+
/** Tenant publishing is switched off on this instance (`PLUGIN_PUBLISHING_ENABLED`). */
|
|
51
|
+
ErrorCode["PLUGIN_PUBLISHING_DISABLED"] = "PLUGIN_PUBLISHING_DISABLED";
|
|
52
|
+
/** Review writes are switched off on this instance (`PLUGIN_REVIEWS_ENABLED`):
|
|
53
|
+
* reviews stay readable, nothing new is written. */
|
|
54
|
+
ErrorCode["PLUGIN_REVIEWS_DISABLED"] = "PLUGIN_REVIEWS_DISABLED";
|
|
55
|
+
/** A member of the publisher's own organization tried to review (or vote on a
|
|
56
|
+
* review of) one of its listings (self-promotion). */
|
|
57
|
+
ErrorCode["REVIEW_SELF_PROMOTION"] = "REVIEW_SELF_PROMOTION";
|
|
58
|
+
/** Separation of duties: the caller may not decide this request —
|
|
59
|
+
* it came from an org they belong to, they uploaded the version, or they
|
|
60
|
+
* gave the first of two approvals. */
|
|
61
|
+
ErrorCode["SEPARATION_OF_DUTIES"] = "SEPARATION_OF_DUTIES";
|
|
35
62
|
ErrorCode["ORG_MISMATCH"] = "ORG_MISMATCH";
|
|
36
63
|
ErrorCode["COMPLIANCE_VIOLATION"] = "COMPLIANCE_VIOLATION";
|
|
37
64
|
// Not found errors (404)
|
|
38
65
|
ErrorCode["NOT_FOUND"] = "NOT_FOUND";
|
|
39
66
|
ErrorCode["ORG_NOT_FOUND"] = "ORG_NOT_FOUND";
|
|
67
|
+
/** The anonymous plugin submission API is off on this instance
|
|
68
|
+
* (`ANONYMOUS_SUBMISSIONS_ENABLED`, or outbound email isn't configured) —
|
|
69
|
+
* answered as a plain 404 (docs/plugin-publishing.md). */
|
|
70
|
+
ErrorCode["SUBMISSIONS_DISABLED"] = "SUBMISSIONS_DISABLED";
|
|
40
71
|
// Validation errors (400)
|
|
41
72
|
ErrorCode["VALIDATION_ERROR"] = "VALIDATION_ERROR";
|
|
42
73
|
ErrorCode["MISSING_REQUIRED_FIELD"] = "MISSING_REQUIRED_FIELD";
|
|
74
|
+
/** A proof-of-work answer is missing, malformed, expired, too easy, wrong,
|
|
75
|
+
* or was already used (anonymous submissions). */
|
|
76
|
+
ErrorCode["PROOF_OF_WORK_INVALID"] = "PROOF_OF_WORK_INVALID";
|
|
43
77
|
ErrorCode["TEMPLATE_UNKNOWN_PATH"] = "TEMPLATE_UNKNOWN_PATH";
|
|
44
78
|
ErrorCode["TEMPLATE_CYCLE"] = "TEMPLATE_CYCLE";
|
|
45
79
|
ErrorCode["TEMPLATE_PARSE_ERROR"] = "TEMPLATE_PARSE_ERROR";
|
|
@@ -51,6 +85,9 @@ export var ErrorCode;
|
|
|
51
85
|
// Quota/Rate limit errors (429)
|
|
52
86
|
ErrorCode["QUOTA_EXCEEDED"] = "QUOTA_EXCEEDED";
|
|
53
87
|
ErrorCode["RATE_LIMIT_EXCEEDED"] = "RATE_LIMIT_EXCEEDED";
|
|
88
|
+
/** An anonymous submitter (per verified email, or per client IP) is at the
|
|
89
|
+
* rolling 24-hour submission cap. */
|
|
90
|
+
ErrorCode["SUBMISSION_LIMIT"] = "SUBMISSION_LIMIT";
|
|
54
91
|
// Payload errors (413)
|
|
55
92
|
ErrorCode["PAYLOAD_TOO_LARGE"] = "PAYLOAD_TOO_LARGE";
|
|
56
93
|
// Conflict errors (409)
|
|
@@ -61,6 +98,50 @@ export var ErrorCode;
|
|
|
61
98
|
* not verify against the platform's plugin-signing key — the registry
|
|
62
99
|
* content no longer matches what the platform built and signed. */
|
|
63
100
|
ErrorCode["IMAGE_VERIFICATION_FAILED"] = "IMAGE_VERIFICATION_FAILED";
|
|
101
|
+
/** The plugin version is immutable — a publish request references it
|
|
102
|
+
* (`frozen_at` set) or it is published to a listing — so it can be neither
|
|
103
|
+
* re-uploaded, edited nor deleted (docs/plugin-publishing.md). */
|
|
104
|
+
ErrorCode["PLUGIN_VERSION_FROZEN"] = "PLUGIN_VERSION_FROZEN";
|
|
105
|
+
/** The plugin version is referenced by one of the org's pipelines, or published
|
|
106
|
+
* to an ecosystem listing; deleting it needs `?force=true` plus a step-up. */
|
|
107
|
+
ErrorCode["PLUGIN_VERSION_IN_USE"] = "PLUGIN_VERSION_IN_USE";
|
|
108
|
+
/** A freeze named an image digest that is not the version's stored digest
|
|
109
|
+
* (fail closed: what was requested is not what would be published). */
|
|
110
|
+
ErrorCode["PLUGIN_DIGEST_MISMATCH"] = "PLUGIN_DIGEST_MISMATCH";
|
|
111
|
+
/** A publish request needs the org's publisher profile, which doesn't exist
|
|
112
|
+
* yet (docs/plugin-publishing.md). Claim a handle first. */
|
|
113
|
+
ErrorCode["PUBLISHER_REQUIRED"] = "PUBLISHER_REQUIRED";
|
|
114
|
+
/** The requested publisher handle is reserved (Official/Verified
|
|
115
|
+
* reservations, confusables). Submit a `claim` request instead. */
|
|
116
|
+
ErrorCode["PUBLISHER_HANDLE_RESERVED"] = "PUBLISHER_HANDLE_RESERVED";
|
|
117
|
+
/** A publish request failed a submit gate (public visibility, SPDX license,
|
|
118
|
+
* README, signature, scan, vulnerability gate …); `details.gates` lists them. */
|
|
119
|
+
ErrorCode["PUBLISH_GATE_FAILED"] = "PUBLISH_GATE_FAILED";
|
|
120
|
+
/** A Verified-publisher application (or its decision) from an org whose plan
|
|
121
|
+
* lacks the `verified_publisher` feature (Team+, docs/plugin-publishing.md). */
|
|
122
|
+
ErrorCode["VERIFIED_PLAN_REQUIRED"] = "VERIFIED_PLAN_REQUIRED";
|
|
123
|
+
/** A Verified-publisher application from an org with no DNS-verified domain. */
|
|
124
|
+
ErrorCode["VERIFIED_DOMAIN_REQUIRED"] = "VERIFIED_DOMAIN_REQUIRED";
|
|
125
|
+
/** A Verified-publisher application from an org whose owner has no second
|
|
126
|
+
* factor (passkey or authenticator app). */
|
|
127
|
+
ErrorCode["VERIFIED_OWNER_MFA_REQUIRED"] = "VERIFIED_OWNER_MFA_REQUIRED";
|
|
128
|
+
/** A plugin reference names an ecosystem listing the org hasn't installed (or
|
|
129
|
+
* whose install is pending, denied, or doesn't cover the version asked for;
|
|
130
|
+
* `details.reason`) — docs/plugin-publishing.md */
|
|
131
|
+
ErrorCode["PLUGIN_NOT_INSTALLED"] = "PLUGIN_NOT_INSTALLED";
|
|
132
|
+
/** The org's consumption policy refuses the listing: its tier isn't allowed,
|
|
133
|
+
* the listing is blocked, or an advisory blocks the version (`details.reason`). */
|
|
134
|
+
ErrorCode["PLUGIN_BLOCKED_BY_POLICY"] = "PLUGIN_BLOCKED_BY_POLICY";
|
|
135
|
+
/** The listing or version can't be used: yanked, suspended, or paused for new
|
|
136
|
+
* installs (`details.reason`). */
|
|
137
|
+
ErrorCode["PLUGIN_UNAVAILABLE"] = "PLUGIN_UNAVAILABLE";
|
|
138
|
+
/** An auto-created placeholder plugin can't take the name of a listed plugin
|
|
139
|
+
* — install the listing instead. */
|
|
140
|
+
ErrorCode["PLUGIN_NAME_LISTED"] = "PLUGIN_NAME_LISTED";
|
|
141
|
+
/** An anonymous submission names a community listing another submitter owns,
|
|
142
|
+
* a reserved name, an Official/Verified listing's name, or one confusable
|
|
143
|
+
* with a top listing; `details.reason` says which. */
|
|
144
|
+
ErrorCode["NAME_TAKEN"] = "NAME_TAKEN";
|
|
64
145
|
// Billing errors
|
|
65
146
|
ErrorCode["PAYMENT_METHOD_REQUIRED"] = "PAYMENT_METHOD_REQUIRED";
|
|
66
147
|
ErrorCode["DISCOUNT_CEILING_EXCEEDED"] = "DISCOUNT_CEILING_EXCEEDED";
|
|
@@ -89,14 +170,25 @@ export const ErrorCodeStatus = {
|
|
|
89
170
|
[ErrorCode.MFA_REQUIRED]: 401,
|
|
90
171
|
[ErrorCode.REAUTH_REQUIRED]: 401,
|
|
91
172
|
[ErrorCode.INSUFFICIENT_PERMISSIONS]: 403,
|
|
173
|
+
[ErrorCode.SYSTEM_ORG_REQUIRED]: 403,
|
|
174
|
+
[ErrorCode.PUBLISHER_TERMS_REQUIRED]: 403,
|
|
175
|
+
[ErrorCode.PUBLISHER_ROOT_ORG_REQUIRED]: 403,
|
|
176
|
+
[ErrorCode.PUBLISHER_SUSPENDED]: 403,
|
|
177
|
+
[ErrorCode.PLUGIN_PUBLISHING_DISABLED]: 403,
|
|
178
|
+
[ErrorCode.PLUGIN_REVIEWS_DISABLED]: 403,
|
|
179
|
+
[ErrorCode.REVIEW_SELF_PROMOTION]: 403,
|
|
180
|
+
[ErrorCode.SEPARATION_OF_DUTIES]: 403,
|
|
92
181
|
[ErrorCode.HUMAN_SESSION_REQUIRED]: 403,
|
|
93
182
|
[ErrorCode.MFA_ENROLLMENT_REQUIRED]: 403,
|
|
183
|
+
[ErrorCode.IMPERSONATION_READ_ONLY]: 403,
|
|
94
184
|
[ErrorCode.ORG_MISMATCH]: 403,
|
|
95
185
|
[ErrorCode.COMPLIANCE_VIOLATION]: 403,
|
|
96
186
|
[ErrorCode.NOT_FOUND]: 404,
|
|
97
187
|
[ErrorCode.ORG_NOT_FOUND]: 404,
|
|
188
|
+
[ErrorCode.SUBMISSIONS_DISABLED]: 404,
|
|
98
189
|
[ErrorCode.VALIDATION_ERROR]: 400,
|
|
99
190
|
[ErrorCode.MISSING_REQUIRED_FIELD]: 400,
|
|
191
|
+
[ErrorCode.PROOF_OF_WORK_INVALID]: 400,
|
|
100
192
|
[ErrorCode.TEMPLATE_UNKNOWN_PATH]: 400,
|
|
101
193
|
[ErrorCode.TEMPLATE_CYCLE]: 400,
|
|
102
194
|
[ErrorCode.TEMPLATE_PARSE_ERROR]: 400,
|
|
@@ -107,11 +199,26 @@ export const ErrorCodeStatus = {
|
|
|
107
199
|
[ErrorCode.TEMPLATE_VALIDATION_FAILED]: 400,
|
|
108
200
|
[ErrorCode.QUOTA_EXCEEDED]: 429,
|
|
109
201
|
[ErrorCode.RATE_LIMIT_EXCEEDED]: 429,
|
|
202
|
+
[ErrorCode.SUBMISSION_LIMIT]: 429,
|
|
110
203
|
[ErrorCode.PAYLOAD_TOO_LARGE]: 413,
|
|
111
204
|
[ErrorCode.CONFLICT]: 409,
|
|
112
205
|
[ErrorCode.DUPLICATE_ENTRY]: 409,
|
|
113
206
|
[ErrorCode.SCAN_CONFLICT]: 409,
|
|
114
207
|
[ErrorCode.IMAGE_VERIFICATION_FAILED]: 409,
|
|
208
|
+
[ErrorCode.PLUGIN_VERSION_FROZEN]: 409,
|
|
209
|
+
[ErrorCode.PLUGIN_VERSION_IN_USE]: 409,
|
|
210
|
+
[ErrorCode.PLUGIN_DIGEST_MISMATCH]: 409,
|
|
211
|
+
[ErrorCode.PUBLISHER_REQUIRED]: 409,
|
|
212
|
+
[ErrorCode.PUBLISHER_HANDLE_RESERVED]: 409,
|
|
213
|
+
[ErrorCode.PUBLISH_GATE_FAILED]: 409,
|
|
214
|
+
[ErrorCode.VERIFIED_PLAN_REQUIRED]: 403,
|
|
215
|
+
[ErrorCode.VERIFIED_DOMAIN_REQUIRED]: 409,
|
|
216
|
+
[ErrorCode.VERIFIED_OWNER_MFA_REQUIRED]: 409,
|
|
217
|
+
[ErrorCode.PLUGIN_NOT_INSTALLED]: 403,
|
|
218
|
+
[ErrorCode.PLUGIN_BLOCKED_BY_POLICY]: 403,
|
|
219
|
+
[ErrorCode.PLUGIN_UNAVAILABLE]: 409,
|
|
220
|
+
[ErrorCode.PLUGIN_NAME_LISTED]: 409,
|
|
221
|
+
[ErrorCode.NAME_TAKEN]: 409,
|
|
115
222
|
[ErrorCode.PAYMENT_METHOD_REQUIRED]: 402,
|
|
116
223
|
[ErrorCode.DISCOUNT_CEILING_EXCEEDED]: 400,
|
|
117
224
|
[ErrorCode.DISCOUNT_NOT_FOUND]: 404,
|
|
@@ -130,4 +237,4 @@ export const ErrorCodeStatus = {
|
|
|
130
237
|
export function getStatusForErrorCode(code) {
|
|
131
238
|
return ErrorCodeStatus[code] ?? 500;
|
|
132
239
|
}
|
|
133
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3ItY29kZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHlwZXMvZXJyb3ItY29kZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0Qzs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxDQUFOLElBQVksU0E2RVg7QUE3RUQsV0FBWSxTQUFTO0lBQ25CLDhCQUE4QjtJQUM5QiwwQ0FBNkIsQ0FBQTtJQUM3Qiw0Q0FBK0IsQ0FBQTtJQUMvQiw0Q0FBK0IsQ0FBQTtJQUMvQiw0Q0FBK0IsQ0FBQTtJQUMvQiw0Q0FBK0IsQ0FBQTtJQUMvQjs7O3VEQUdtRDtJQUNuRCwwQ0FBNkIsQ0FBQTtJQUM3Qjs4RUFDMEU7SUFDMUUsZ0RBQW1DLENBQUE7SUFFbkMsNkJBQTZCO0lBQzdCLGtFQUFxRCxDQUFBO0lBQ3JEO3dFQUNvRTtJQUNwRSw4REFBaUQsQ0FBQTtJQUNqRDtvRUFDZ0U7SUFDaEUsZ0VBQW1ELENBQUE7SUFDbkQsMENBQTZCLENBQUE7SUFDN0IsMERBQTZDLENBQUE7SUFFN0MseUJBQXlCO0lBQ3pCLG9DQUF1QixDQUFBO0lBQ3ZCLDRDQUErQixDQUFBO0lBRS9CLDBCQUEwQjtJQUMxQixrREFBcUMsQ0FBQTtJQUNyQyw4REFBaUQsQ0FBQTtJQUNqRCw0REFBK0MsQ0FBQTtJQUMvQyw4Q0FBaUMsQ0FBQTtJQUNqQywwREFBNkMsQ0FBQTtJQUM3Qyw4REFBaUQsQ0FBQTtJQUNqRCxvRUFBdUQsQ0FBQTtJQUN2RCx3RUFBMkQsQ0FBQTtJQUMzRCw4REFBaUQsQ0FBQTtJQUNqRCxzRUFBeUQsQ0FBQTtJQUV6RCxnQ0FBZ0M7SUFDaEMsOENBQWlDLENBQUE7SUFDakMsd0RBQTJDLENBQUE7SUFFM0MsdUJBQXVCO0lBQ3ZCLG9EQUF1QyxDQUFBO0lBRXZDLHdCQUF3QjtJQUN4QixrQ0FBcUIsQ0FBQTtJQUNyQixnREFBbUMsQ0FBQTtJQUNuQyw0Q0FBK0IsQ0FBQTtJQUMvQjs7d0VB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LENBQUMsaUJBQWlCLENBQUMsRUFBRSxHQUFHO0lBQ2xDLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxFQUFFLEdBQUc7SUFDOUIsQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLEVBQUUsR0FBRztJQUMvQixDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsRUFBRSxHQUFHO0lBQy9CLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxFQUFFLEdBQUc7SUFDL0IsQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLEVBQUUsR0FBRztJQUNoQyxDQUFDLFNBQVMsQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLEdBQUc7SUFDcEMsQ0FBQyxTQUFTLENBQUMsOEJBQThCLENBQUMsRUFBRSxHQUFHO0NBQ2hELENBQUM7QUFFRjs7R0FFRztBQUNILE1BQU0sVUFBVSxxQkFBcUIsQ0FBQyxJQUFlO0lBQ25ELE9BQU8sZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQztBQUN0QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8qKlxuICogU3RhbmRhcmRpemVkIGVycm9yIGNvZGVzIHVzZWQgYWNyb3NzIGFsbCBBUEkgbWljcm9zZXJ2aWNlcy5cbiAqIFVzZSB0aGVzZSBjb2RlcyBpbiBlcnJvciByZXNwb25zZXMgZm9yIGNvbnNpc3RlbnQgY2xpZW50IGhhbmRsaW5nLlxuICpcbiAqIEVhY2ggSFRUUCBzdGF0dXMgY2F0ZWdvcnkgaGFzIG9uZSBwcmltYXJ5IGNvZGUuIFVzZSB0aGUgYGRldGFpbHNgXG4gKiBmaWVsZCBpbiBlcnJvciByZXNwb25zZXMgZm9yIHN1Yi10eXBlIGluZm9ybWF0aW9uIChlLmcuIHdoaWNoIHF1b3RhXG4gKiB3YXMgZXhjZWVkZWQsIHdoaWNoIGZpZWxkIGZhaWxlZCB2YWxpZGF0aW9uKS5cbiAqL1xuZXhwb3J0IGVudW0gRXJyb3JDb2RlIHtcbiAgLy8gQXV0aGVudGljYXRpb24gZXJyb3JzICg0MDEpXG4gIFVOQVVUSE9SSVpFRCA9ICdVTkFVVEhPUklaRUQnLFxuICBUT0tFTl9FWFBJUkVEID0gJ1RPS0VOX0VYUElSRUQnLFxuICBUT0tFTl9JTlZBTElEID0gJ1RPS0VOX0lOVkFMSUQnLFxuICBUT0tFTl9NSVNTSU5HID0gJ1RPS0VOX01JU1NJTkcnLFxuICBUT0tFTl9SRVZPS0VEID0gJ1RPS0VOX1JFVk9LRUQnLFxuICAvKiogVGhlIHNlc3Npb24gaXMgbm90IE1GQS1ncmFkZSAoYGFhbGAgYmVsb3cgdGhlIHJvdXRlJ3MgYG1pbkFzc3VyYW5jZWApLlxuICAgKiAgVGhlIGNsaWVudCBzZW5kcyB0aGUgcGVyc29uIHRvIGVucm9sIC8gc2lnbiBpbiBhZ2FpbiB3aXRoIGEgc2Vjb25kXG4gICAqICBmYWN0b3Ig4oCUIGl0IG11c3QgTk9UIHNpZ24gdGhlbSBvdXQgb3IgcmV0cnkgYSB0b2tlbiByZWZyZXNoLCBzaW5jZSBhXG4gICAqICByZWZyZXNoIGNhbiBuZXZlciByYWlzZSB0aGUgYXNzdXJhbmNlIGxldmVsLiAqL1xuICBNRkFfUkVRVUlSRUQgPSAnTUZBX1JFUVVJUkVEJyxcbiAgLyoqIFRoZSBzZXNzaW9uIGlzIE1GQS1ncmFkZSBidXQgaXRzIGBhdXRoX3RpbWVgIGlzIG9sZGVyIHRoYW4gdGhlIHJvdXRlJ3NcbiAgICogIGBtYXhBZ2VgIOKAlCB0aGUgcGVyc29uIG11c3QgYXV0aGVudGljYXRlIGFnYWluIChub3QgbWVyZWx5IHJlZnJlc2gpLiAqL1xuICBSRUFVVEhfUkVRVUlSRUQgPSAnUkVBVVRIX1JFUVVJUkVEJyxcblxuICAvLyBBdXRob3JpemF0aW9uIGVycm9ycyAoNDAzKVxuICBJTlNVRkZJQ0lFTlRfUEVSTUlTU0lPTlMgPSAnSU5TVUZGSUNJRU5UX1BFUk1JU1NJT05TJyxcbiAgLyoqIEEgbWFjaGluZSBjcmVkZW50aWFsIChzZXJ2aWNlIHByaW5jaXBhbCwgb3JnIHNlcnZpY2UgYWNjb3VudCwgb3IgYW5cbiAgICogIGV4Y2hhbmdlZCBhY2Nlc3Mga2V5KSByZWFjaGVkIGEgcm91dGUgdGhhdCByZXF1aXJlcyBhIHBlcnNvbi4gKi9cbiAgSFVNQU5fU0VTU0lPTl9SRVFVSVJFRCA9ICdIVU1BTl9TRVNTSU9OX1JFUVVJUkVEJyxcbiAgLyoqIEEgYm9vdHN0cmFwLWFkbWluIGVucm9sbWVudCBzZXNzaW9uIChgbWZhRW5yb2xsbWVudFBlbmRpbmdgKSByZWFjaGVkIGFcbiAgICogIHJvdXRlIG91dHNpZGUgdGhlIGVucm9sbWVudCAvIHNpZ24tb3V0IC8gc2V0dXAgYWxsb3dsaXN0LiAqL1xuICBNRkFfRU5ST0xMTUVOVF9SRVFVSVJFRCA9ICdNRkFfRU5ST0xMTUVOVF9SRVFVSVJFRCcsXG4gIE9SR19NSVNNQVRDSCA9ICdPUkdfTUlTTUFUQ0gnLFxuICBDT01QTElBTkNFX1ZJT0xBVElPTiA9ICdDT01QTElBTkNFX1ZJT0xBVElPTicsXG5cbiAgLy8gTm90IGZvdW5kIGVycm9ycyAoNDA0KVxuICBOT1RfRk9VTkQgPSAnTk9UX0ZPVU5EJyxcbiAgT1JHX05PVF9GT1VORCA9ICdPUkdfTk9UX0ZPVU5EJyxcblxuICAvLyBWYWxpZGF0aW9uIGVycm9ycyAoNDAwKVxuICBWQUxJREFUSU9OX0VSUk9SID0gJ1ZBTElEQVRJT05fRVJST1InLFxuICBNSVNTSU5HX1JFUVVJUkVEX0ZJRUxEID0gJ01JU1NJTkdfUkVRVUlSRURfRklFTEQnLFxuICBURU1QTEFURV9VTktOT1dOX1BBVEggPSAnVEVNUExBVEVfVU5LTk9XTl9QQVRIJyxcbiAgVEVNUExBVEVfQ1lDTEUgPSAnVEVNUExBVEVfQ1lDTEUnLFxuICBURU1QTEFURV9QQVJTRV9FUlJPUiA9ICdURU1QTEFURV9QQVJTRV9FUlJPUicsXG4gIFRFTVBMQVRFX1RZUEVfTUlTTUFUQ0ggPSAnVEVNUExBVEVfVFlQRV9NSVNNQVRDSCcsXG4gIFRFTVBMQVRFX1NFQ1JFVFNfUkVTRVJWRUQgPSAnVEVNUExBVEVfU0VDUkVUU19SRVNFUlZFRCcsXG4gIFRFTVBMQVRFX0NPTlRSQUNUX1ZJT0xBVElPTiA9ICdURU1QTEFURV9DT05UUkFDVF9WSU9MQVRJT04nLFxuICBURU1QTEFURV9TSVpFX0VYQ0VFREVEID0gJ1RFTVBMQVRFX1NJWkVfRVhDRUVERUQnLFxuICBURU1QTEFURV9WQUxJREFUSU9OX0ZBSUxFRCA9ICdURU1QTEFURV9WQUxJREFUSU9OX0ZBSUxFRCcsXG5cbiAgLy8gUXVvdGEvUmF0ZSBsaW1pdCBlcnJvcnMgKDQyOSlcbiAgUVVPVEFfRVhDRUVERUQgPSAnUVVPVEFfRVhDRUVERUQnLFxuICBSQVRFX0xJTUlUX0VYQ0VFREVEID0gJ1JBVEVfTElNSVRfRVhDRUVERUQnLFxuXG4gIC8vIFBheWxvYWQgZXJyb3JzICg0MTMpXG4gIFBBWUxPQURfVE9PX0xBUkdFID0gJ1BBWUxPQURfVE9PX0xBUkdFJyxcblxuICAvLyBDb25mbGljdCBlcnJvcnMgKDQwOSlcbiAgQ09ORkxJQ1QgPSAnQ09ORkxJQ1QnLFxuICBEVVBMSUNBVEVfRU5UUlkgPSAnRFVQTElDQVRFX0VOVFJZJyxcbiAgU0NBTl9DT05GTElDVCA9ICdTQ0FOX0NPTkZMSUNUJyxcbiAgLyoqIEEgcGx1Z2luIGltYWdlJ3MgY29zaWduIHNpZ25hdHVyZSAob3IgaXRzIHNpZ25lZCBTQk9NIGF0dGVzdGF0aW9uKSBkaWRcbiAgICogIG5vdCB2ZXJpZnkgYWdhaW5zdCB0aGUgcGxhdGZvcm0ncyBwbHVnaW4tc2lnbmluZyBrZXkg4oCUIHRoZSByZWdpc3RyeVxuICAgKiAgY29udGVudCBubyBsb25nZXIgbWF0Y2hlcyB3aGF0IHRoZSBwbGF0Zm9ybSBidWlsdCBhbmQgc2lnbmVkLiAqL1xuICBJTUFHRV9WRVJJRklDQVRJT05fRkFJTEVEID0gJ0lNQUdFX1ZFUklGSUNBVElPTl9GQUlMRUQnLFxuXG4gIC8vIEJpbGxpbmcgZXJyb3JzXG4gIFBBWU1FTlRfTUVUSE9EX1JFUVVJUkVEID0gJ1BBWU1FTlRfTUVUSE9EX1JFUVVJUkVEJywgLy8gNDAyXG4gIERJU0NPVU5UX0NFSUxJTkdfRVhDRUVERUQgPSAnRElTQ09VTlRfQ0VJTElOR19FWENFRURFRCcsIC8vIDQwMFxuICBESVNDT1VOVF9OT1RfRk9VTkQgPSAnRElTQ09VTlRfTk9UX0ZPVU5EJywgLy8gNDA0XG4gIERJU0NPVU5UX0lOQUNUSVZFID0gJ0RJU0NPVU5UX0lOQUNUSVZFJywgLy8gNDA5XG4gIFBMQU5fT1ZFUl9DQVAgPSAnUExBTl9PVkVSX0NBUCcsIC8vIDQwOVxuICBBRERPTl9PVkVSX0NBUCA9ICdBRERPTl9PVkVSX0NBUCcsIC8vIDQwOVxuXG4gIC8vIFNlcnZlciBlcnJvcnMgKDUwMClcbiAgSU5URVJOQUxfRVJST1IgPSAnSU5URVJOQUxfRVJST1InLFxuICBEQVRBQkFTRV9FUlJPUiA9ICdEQVRBQkFTRV9FUlJPUicsXG5cbiAgLy8gTm90IGltcGxlbWVudGVkICg1MDEpIOKAlCB0aGUgY29uZmlndXJlZCBwcm92aWRlciBoYXMgbm8gc3VjaCBjYXBhYmlsaXR5XG4gIE5PVF9JTVBMRU1FTlRFRCA9ICdOT1RfSU1QTEVNRU5URUQnLFxuXG4gIC8vIFNlcnZpY2UgdW5hdmFpbGFibGUgKDUwMylcbiAgU0VSVklDRV9VTkFWQUlMQUJMRSA9ICdTRVJWSUNFX1VOQVZBSUxBQkxFJyxcbiAgQ09NUExJQU5DRV9TRVJWSUNFX1VOQVZBSUxBQkxFID0gJ0NPTVBMSUFOQ0VfU0VSVklDRV9VTkFWQUlMQUJMRScsXG59XG5cbi8qKlxuICogTWFwcyBlcnJvciBjb2RlcyB0byB0aGVpciBkZWZhdWx0IEhUVFAgc3RhdHVzIGNvZGVzLlxuICovXG5leHBvcnQgY29uc3QgRXJyb3JDb2RlU3RhdHVzOiBSZWNvcmQ8RXJyb3JDb2RlLCBudW1iZXI+ID0ge1xuICBbRXJyb3JDb2RlLlVOQVVUSE9SSVpFRF06IDQwMSxcbiAgW0Vycm9yQ29kZS5UT0tFTl9FWFBJUkVEXTogNDAxLFxuICBbRXJyb3JDb2RlLlRPS0VOX0lOVkFMSURdOiA0MDEsXG4gIFtFcnJvckNvZGUuVE9LRU5fTUlTU0lOR106IDQwMSxcbiAgW0Vycm9yQ29kZS5UT0tFTl9SRVZPS0VEXTogNDAxLFxuICBbRXJyb3JDb2RlLk1GQV9SRVFVSVJFRF06IDQwMSxcbiAgW0Vycm9yQ29kZS5SRUFVVEhfUkVRVUlSRURdOiA0MDEsXG4gIFtFcnJvckNvZGUuSU5TVUZGSUNJRU5UX1BFUk1JU1NJT05TXTogNDAzLFxuICBbRXJyb3JDb2RlLkhVTUFOX1NFU1NJT05fUkVRVUlSRURdOiA0MDMsXG4gIFtFcnJvckNvZGUuTUZBX0VOUk9MTE1FTlRfUkVRVUlSRURdOiA0MDMsXG4gIFtFcnJvckNvZGUuT1JHX01JU01BVENIXTogNDAzLFxuICBbRXJyb3JDb2RlLkNPTVBMSUFOQ0VfVklPTEFUSU9OXTogNDAzLFxuICBbRXJyb3JDb2RlLk5PVF9GT1VORF06IDQwNCxcbiAgW0Vycm9yQ29kZS5PUkdfTk9UX0ZPVU5EXTogNDA0LFxuICBbRXJyb3JDb2RlLlZBTElEQVRJT05fRVJST1JdOiA0MDAsXG4gIFtFcnJvckNvZGUuTUlTU0lOR19SRVFVSVJFRF9GSUVMRF06IDQwMCxcbiAgW0Vycm9yQ29kZS5URU1QTEFURV9VTktOT1dOX1BBVEhdOiA0MDAsXG4gIFtFcnJvckNvZGUuVEVNUExBVEVfQ1lDTEVdOiA0MDAsXG4gIFtFcnJvckNvZGUuVEVNUExBVEVfUEFSU0VfRVJST1JdOiA0MDAsXG4gIFtFcnJvckNvZGUuVEVNUExBVEVfVFlQRV9NSVNNQVRDSF06IDQwMCxcbiAgW0Vycm9yQ29kZS5URU1QTEFURV9TRUNSRVRTX1JFU0VSVkVEXTogNDAwLFxuICBbRXJyb3JDb2RlLlRFTVBMQVRFX0NPTlRSQUNUX1ZJT0xBVElPTl06IDQwMCxcbiAgW0Vycm9yQ29kZS5URU1QTEFURV9TSVpFX0VYQ0VFREVEXTogNDAwLFxuICBbRXJyb3JDb2RlLlRFTVBMQVRFX1ZBTElEQVRJT05fRkFJTEVEXTogNDAwLFxuICBbRXJyb3JDb2RlLlFVT1RBX0VYQ0VFREVEXTogNDI5LFxuICBbRXJyb3JDb2RlLlJBVEVfTElNSVRfRVhDRUVERURdOiA0MjksXG4gIFtFcnJvckNvZGUuUEFZTE9BRF9UT09fTEFSR0VdOiA0MTMsXG4gIFtFcnJvckNvZGUuQ09ORkxJQ1RdOiA0MDksXG4gIFtFcnJvckNvZGUuRFVQTElDQVRFX0VOVFJZXTogNDA5LFxuICBbRXJyb3JDb2RlLlNDQU5fQ09ORkxJQ1RdOiA0MDksXG4gIFtFcnJvckNvZGUuSU1BR0VfVkVSSUZJQ0FUSU9OX0ZBSUxFRF06IDQwOSxcbiAgW0Vycm9yQ29kZS5QQVlNRU5UX01FVEhPRF9SRVFVSVJFRF06IDQwMixcbiAgW0Vycm9yQ29kZS5ESVNDT1VOVF9DRUlMSU5HX0VYQ0VFREVEXTogNDAwLFxuICBbRXJyb3JDb2RlLkRJU0NPVU5UX05PVF9GT1VORF06IDQwNCxcbiAgW0Vycm9yQ29kZS5ESVNDT1VOVF9JTkFDVElWRV06IDQwOSxcbiAgW0Vycm9yQ29kZS5QTEFOX09WRVJfQ0FQXTogNDA5LFxuICBbRXJyb3JDb2RlLkFERE9OX09WRVJfQ0FQXTogNDA5LFxuICBbRXJyb3JDb2RlLklOVEVSTkFMX0VSUk9SXTogNTAwLFxuICBbRXJyb3JDb2RlLkRBVEFCQVNFX0VSUk9SXTogNTAwLFxuICBbRXJyb3JDb2RlLk5PVF9JTVBMRU1FTlRFRF06IDUwMSxcbiAgW0Vycm9yQ29kZS5TRVJWSUNFX1VOQVZBSUxBQkxFXTogNTAzLFxuICBbRXJyb3JDb2RlLkNPTVBMSUFOQ0VfU0VSVklDRV9VTkFWQUlMQUJMRV06IDUwMyxcbn07XG5cbi8qKlxuICogR2V0IHRoZSBIVFRQIHN0YXR1cyBjb2RlIGZvciBhbiBlcnJvciBjb2RlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3RhdHVzRm9yRXJyb3JDb2RlKGNvZGU6IEVycm9yQ29kZSk6IG51bWJlciB7XG4gIHJldHVybiBFcnJvckNvZGVTdGF0dXNbY29kZV0gPz8gNTAwO1xufVxuIl19
|
|
240
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3ItY29kZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHlwZXMvZXJyb3ItY29kZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0Qzs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxDQUFOLElBQVksU0E4Slg7QUE5SkQsV0FBWSxTQUFTO0lBQ25CLDhCQUE4QjtJQUM5QiwwQ0FBNkIsQ0FBQTtJQUM3Qiw0Q0FBK0IsQ0FBQTtJQUMvQiw0Q0FBK0IsQ0FBQTtJQUMvQiw0Q0FBK0IsQ0FBQTtJQUMvQiw0Q0FBK0IsQ0FBQTtJQUMvQjs7O3VEQUdtRDtJQUNuRCwwQ0FBNkIsQ0FBQTtJQUM3Qjs4RUFDMEU7SUFDMUUsZ0RBQW1DLENBQUE7SUFFbkMsNkJBQTZCO0lBQzdCLGtFQUFxRCxDQUFBO0lBQ3JEO3dFQUNvRTtJQUNwRSw4REFBaUQsQ0FBQTtJQUNqRDtvRUFDZ0U7SUFDaEUsZ0VBQW1ELENBQUE7SUFDbkQ7a0VBQzhEO0lBQzlELGdFQUFtRCxDQUFBO0lBQ25EOztvRkFFZ0Y7SUFDaEYsd0RBQTJDLENBQUE7SUFDM0M7d0VBQ29FO0lBQ3BFLGtFQUFxRCxDQUFBO0lBQ3JEOzJCQUN1QjtJQUN2Qix3RUFBMkQsQ0FBQTtJQUMzRCxvREFBb0Q7SUFDcEQsd0RBQTJDLENBQUE7SUFDM0Msd0ZBQXdGO0lBQ3hGLHNFQUF5RCxDQUFBO0lBQ3pEO3lEQUNxRDtJQUNyRCxnRUFBbUQsQ0FBQTtJQUNuRDsyREFDdUQ7SUFDdkQsNERBQStDLENBQUE7SUFDL0M7OzJDQUV1QztJQUN2QywwREFBNkMsQ0FBQTtJQUM3QywwQ0FBNkIsQ0FBQTtJQUM3QiwwREFBNkMsQ0FBQTtJQUU3Qyx5QkFBeUI7SUFDekIsb0NBQXVCLENBQUE7SUFDdkIsNENBQStCLENBQUE7SUFDL0I7OytEQUUyRDtJQUMzRCwwREFBNkMsQ0FBQTtJQUU3QywwQkFBMEI7SUFDMUIsa0RBQXFDLENBQUE7SUFDckMs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Q0FBQyx1QkFBdUIsQ0FBQyxFQUFFLEdBQUc7SUFDeEMsQ0FBQyxTQUFTLENBQUMseUJBQXlCLENBQUMsRUFBRSxHQUFHO0lBQzFDLENBQUMsU0FBUyxDQUFDLGtCQUFrQixDQUFDLEVBQUUsR0FBRztJQUNuQyxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLEdBQUc7SUFDbEMsQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLEVBQUUsR0FBRztJQUM5QixDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsRUFBRSxHQUFHO0lBQy9CLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxFQUFFLEdBQUc7SUFDL0IsQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLEVBQUUsR0FBRztJQUMvQixDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsRUFBRSxHQUFHO0lBQ2hDLENBQUMsU0FBUyxDQUFDLG1CQUFtQixDQUFDLEVBQUUsR0FBRztJQUNwQyxDQUFDLFNBQVMsQ0FBQyw4QkFBOEIsQ0FBQyxFQUFFLEdBQUc7Q0FDaEQsQ0FBQztBQUVGOztHQUVHO0FBQ0gsTUFBTSxVQUFVLHFCQUFxQixDQUFDLElBQWU7SUFDbkQsT0FBTyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDO0FBQ3RDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLyoqXG4gKiBTdGFuZGFyZGl6ZWQgZXJyb3IgY29kZXMgdXNlZCBhY3Jvc3MgYWxsIEFQSSBtaWNyb3NlcnZpY2VzLlxuICogVXNlIHRoZXNlIGNvZGVzIGluIGVycm9yIHJlc3BvbnNlcyBmb3IgY29uc2lzdGVudCBjbGllbnQgaGFuZGxpbmcuXG4gKlxuICogRWFjaCBIVFRQIHN0YXR1cyBjYXRlZ29yeSBoYXMgb25lIHByaW1hcnkgY29kZS4gVXNlIHRoZSBgZGV0YWlsc2BcbiAqIGZpZWxkIGluIGVycm9yIHJlc3BvbnNlcyBmb3Igc3ViLXR5cGUgaW5mb3JtYXRpb24gKGUuZy4gd2hpY2ggcXVvdGFcbiAqIHdhcyBleGNlZWRlZCwgd2hpY2ggZmllbGQgZmFpbGVkIHZhbGlkYXRpb24pLlxuICovXG5leHBvcnQgZW51bSBFcnJvckNvZGUge1xuICAvLyBBdXRoZW50aWNhdGlvbiBlcnJvcnMgKDQwMSlcbiAgVU5BVVRIT1JJWkVEID0gJ1VOQVVUSE9SSVpFRCcsXG4gIFRPS0VOX0VYUElSRUQgPSAnVE9LRU5fRVhQSVJFRCcsXG4gIFRPS0VOX0lOVkFMSUQgPSAnVE9LRU5fSU5WQUxJRCcsXG4gIFRPS0VOX01JU1NJTkcgPSAnVE9LRU5fTUlTU0lORycsXG4gIFRPS0VOX1JFVk9LRUQgPSAnVE9LRU5fUkVWT0tFRCcsXG4gIC8qKiBUaGUgc2Vzc2lvbiBpcyBub3QgTUZBLWdyYWRlIChgYWFsYCBiZWxvdyB0aGUgcm91dGUncyBgbWluQXNzdXJhbmNlYCkuXG4gICAqICBUaGUgY2xpZW50IHNlbmRzIHRoZSBwZXJzb24gdG8gZW5yb2wgLyBzaWduIGluIGFnYWluIHdpdGggYSBzZWNvbmRcbiAgICogIGZhY3RvciDigJQgaXQgbXVzdCBOT1Qgc2lnbiB0aGVtIG91dCBvciByZXRyeSBhIHRva2VuIHJlZnJlc2gsIHNpbmNlIGFcbiAgICogIHJlZnJlc2ggY2FuIG5ldmVyIHJhaXNlIHRoZSBhc3N1cmFuY2UgbGV2ZWwuICovXG4gIE1GQV9SRVFVSVJFRCA9ICdNRkFfUkVRVUlSRUQnLFxuICAvKiogVGhlIHNlc3Npb24gaXMgTUZBLWdyYWRlIGJ1dCBpdHMgYGF1dGhfdGltZWAgaXMgb2xkZXIgdGhhbiB0aGUgcm91dGUnc1xuICAgKiAgYG1heEFnZWAg4oCUIHRoZSBwZXJzb24gbXVzdCBhdXRoZW50aWNhdGUgYWdhaW4gKG5vdCBtZXJlbHkgcmVmcmVzaCkuICovXG4gIFJFQVVUSF9SRVFVSVJFRCA9ICdSRUFVVEhfUkVRVUlSRUQnLFxuXG4gIC8vIEF1dGhvcml6YXRpb24gZXJyb3JzICg0MDMpXG4gIElOU1VGRklDSUVOVF9QRVJNSVNTSU9OUyA9ICdJTlNVRkZJQ0lFTlRfUEVSTUlTU0lPTlMnLFxuICAvKiogQSBtYWNoaW5lIGNyZWRlbnRpYWwgKHNlcnZpY2UgcHJpbmNpcGFsLCBvcmcgc2VydmljZSBhY2NvdW50LCBvciBhblxuICAgKiAgZXhjaGFuZ2VkIGFjY2VzcyBrZXkpIHJlYWNoZWQgYSByb3V0ZSB0aGF0IHJlcXVpcmVzIGEgcGVyc29uLiAqL1xuICBIVU1BTl9TRVNTSU9OX1JFUVVJUkVEID0gJ0hVTUFOX1NFU1NJT05fUkVRVUlSRUQnLFxuICAvKiogQSBib290c3RyYXAtYWRtaW4gZW5yb2xtZW50IHNlc3Npb24gKGBtZmFFbnJvbGxtZW50UGVuZGluZ2ApIHJlYWNoZWQgYVxuICAgKiAgcm91dGUgb3V0c2lkZSB0aGUgZW5yb2xtZW50IC8gc2lnbi1vdXQgLyBzZXR1cCBhbGxvd2xpc3QuICovXG4gIE1GQV9FTlJPTExNRU5UX1JFUVVJUkVEID0gJ01GQV9FTlJPTExNRU5UX1JFUVVJUkVEJyxcbiAgLyoqIEEgcmVhZC1vbmx5IGltcGVyc29uYXRpb24gdG9rZW4gKGBpbXBlcnNvbmF0aW9uUmVhZE9ubHlgKSBhdHRlbXB0ZWQgYVxuICAgKiAgc3RhdGUtY2hhbmdpbmcgcmVxdWVzdCAoYW55dGhpbmcgYnV0IEdFVC9IRUFEL09QVElPTlMpLiAqL1xuICBJTVBFUlNPTkFUSU9OX1JFQURfT05MWSA9ICdJTVBFUlNPTkFUSU9OX1JFQURfT05MWScsXG4gIC8qKiBBIHBsdWdpbi1lY29zeXN0ZW0gZ292ZXJuYW5jZSByb3V0ZSAoZG9jcy9ydW5ib29rcy9lY29zeXN0ZW0tbW9kZXJhdGlvbi5tZClcbiAgICogIHdhcyBjYWxsZWQgZnJvbSBhbiBhY3RpdmUgb3JnIG90aGVyIHRoYW4gdGhlIHN5c3RlbSBvcmcg4oCUIGEgdG9rZW4gbWludGVkIGluXG4gICAqICBhIHRlbmFudCBvcmcgaXMgcmVmdXNlZCBldmVuIGZvciB0aGUgc2FtZSB1c2VyLiBTd2l0Y2ggdG8gdGhlIHN5c3RlbSBvcmcuICovXG4gIFNZU1RFTV9PUkdfUkVRVUlSRUQgPSAnU1lTVEVNX09SR19SRVFVSVJFRCcsXG4gIC8qKiBUaGUgcHVibGlzaGVyIGhhc24ndCBhY2NlcHRlZCB0aGUgQ1VSUkVOVCBwdWJsaXNoZXIgdGVybXMgdmVyc2lvbiwgc28gaXRcbiAgICogIGNhbid0IHN1Ym1pdCBuZXcgcmVxdWVzdHMgKGV4aXN0aW5nIGxpc3RpbmdzIGFyZSB1bmFmZmVjdGVkKS4gKi9cbiAgUFVCTElTSEVSX1RFUk1TX1JFUVVJUkVEID0gJ1BVQkxJU0hFUl9URVJNU19SRVFVSVJFRCcsXG4gIC8qKiBQdWJsaXNoaW5nIGlzIGRvbmUgZnJvbSB0aGUgUk9PVCBvcmc7IGEgdGVhbSBvcmcgY2FuJ3Qgb3duIGEgcHVibGlzaGVyIG9yXG4gICAqICBzdWJtaXQgcmVxdWVzdHMuICovXG4gIFBVQkxJU0hFUl9ST09UX09SR19SRVFVSVJFRCA9ICdQVUJMSVNIRVJfUk9PVF9PUkdfUkVRVUlSRUQnLFxuICAvKiogVGhlIHB1Ymxpc2hlciBpcyBzdXNwZW5kZWQgYnkgdGhlIHN5c3RlbSBvcmcuICovXG4gIFBVQkxJU0hFUl9TVVNQRU5ERUQgPSAnUFVCTElTSEVSX1NVU1BFTkRFRCcsXG4gIC8qKiBUZW5hbnQgcHVibGlzaGluZyBpcyBzd2l0Y2hlZCBvZmYgb24gdGhpcyBpbnN0YW5jZSAoYFBMVUdJTl9QVUJMSVNISU5HX0VOQUJMRURgKS4gKi9cbiAgUExVR0lOX1BVQkxJU0hJTkdfRElTQUJMRUQgPSAnUExVR0lOX1BVQkxJU0hJTkdfRElTQUJMRUQnLFxuICAvKiogUmV2aWV3IHdyaXRlcyBhcmUgc3dpdGNoZWQgb2ZmIG9uIHRoaXMgaW5zdGFuY2UgKGBQTFVHSU5fUkVWSUVXU19FTkFCTEVEYCk6XG4gICAqICByZXZpZXdzIHN0YXkgcmVhZGFibGUsIG5vdGhpbmcgbmV3IGlzIHdyaXR0ZW4uICovXG4gIFBMVUdJTl9SRVZJRVdTX0RJU0FCTEVEID0gJ1BMVUdJTl9SRVZJRVdTX0RJU0FCTEVEJyxcbiAgLyoqIEEgbWVtYmVyIG9mIHRoZSBwdWJsaXNoZXIncyBvd24gb3JnYW5pemF0aW9uIHRyaWVkIHRvIHJldmlldyAob3Igdm90ZSBvbiBhXG4gICAqICByZXZpZXcgb2YpIG9uZSBvZiBpdHMgbGlzdGluZ3MgKHNlbGYtcHJvbW90aW9uKS4gKi9cbiAgUkVWSUVXX1NFTEZfUFJPTU9USU9OID0gJ1JFVklFV19TRUxGX1BST01PVElPTicsXG4gIC8qKiBTZXBhcmF0aW9uIG9mIGR1dGllczogdGhlIGNhbGxlciBtYXkgbm90IGRlY2lkZSB0aGlzIHJlcXVlc3Qg4oCUXG4gICAqICBpdCBjYW1lIGZyb20gYW4gb3JnIHRoZXkgYmVsb25nIHRvLCB0aGV5IHVwbG9hZGVkIHRoZSB2ZXJzaW9uLCBvciB0aGV5XG4gICAqICBnYXZlIHRoZSBmaXJzdCBvZiB0d28gYXBwcm92YWxzLiAqL1xuICBTRVBBUkFUSU9OX09GX0RVVElFUyA9ICdTRVBBUkFUSU9OX09GX0RVVElFUycsXG4gIE9SR19NSVNNQVRDSCA9ICdPUkdfTUlTTUFUQ0gnLFxuICBDT01QTElBTkNFX1ZJT0xBVElPTiA9ICdDT01QTElBTkNFX1ZJT0xBVElPTicsXG5cbiAgLy8gTm90IGZvdW5kIGVycm9ycyAoNDA0KVxuICBOT1RfRk9VTkQgPSAnTk9UX0ZPVU5EJyxcbiAgT1JHX05PVF9GT1VORCA9ICdPUkdfTk9UX0ZPVU5EJyxcbiAgLyoqIFRoZSBhbm9ueW1vdXMgcGx1Z2luIHN1Ym1pc3Npb24gQVBJIGlzIG9mZiBvbiB0aGlzIGluc3RhbmNlXG4gICAqICAoYEFOT05ZTU9VU19TVUJNSVNTSU9OU19FTkFCTEVEYCwgb3Igb3V0Ym91bmQgZW1haWwgaXNuJ3QgY29uZmlndXJlZCkg4oCUXG4gICAqICBhbnN3ZXJlZCBhcyBhIHBsYWluIDQwNCAoZG9jcy9wbHVnaW4tcHVibGlzaGluZy5tZCkuICovXG4gIFNVQk1JU1NJT05TX0RJU0FCTEVEID0gJ1NVQk1JU1NJT05TX0RJU0FCTEVEJyxcblxuICAvLyBWYWxpZGF0aW9uIGVycm9ycyAoNDAwKVxuICBWQUxJREFUSU9OX0VSUk9SID0gJ1ZBTElEQVRJT05fRVJST1InLFxuICBNSVNTSU5HX1JFUVVJUkVEX0ZJRUxEID0gJ01JU1NJTkdfUkVRVUlSRURfRklFTEQnLFxuICAvKiogQSBwcm9vZi1vZi13b3JrIGFuc3dlciBpcyBtaXNzaW5nLCBtYWxmb3JtZWQsIGV4cGlyZWQsIHRvbyBlYXN5LCB3cm9uZyxcbiAgICogIG9yIHdhcyBhbHJlYWR5IHVzZWQgKGFub255bW91cyBzdWJtaXNzaW9ucykuICovXG4gIFBST09GX09GX1dPUktfSU5WQUxJRCA9ICdQUk9PRl9PRl9XT1JLX0lOVkFMSUQnLFxuICBURU1QTEFURV9VTktOT1dOX1BBVEggPSAnVEVNUExBVEVfVU5LTk9XTl9QQVRIJyxcbiAgVEVNUExBVEVfQ1lDTEUgPSAnVEVNUExBVEVfQ1lDTEUnLFxuICBURU1QTEFURV9QQVJTRV9FUlJPUiA9ICdURU1QTEFURV9QQVJTRV9FUlJPUicsXG4gIFRFTVBMQVRFX1RZUEVfTUlTTUFUQ0ggPSAnVEVNUExBVEVfVFlQRV9NSVNNQVRDSCcsXG4gIFRFTVBMQVRFX1NFQ1JFVFNfUkVTRVJWRUQgPSAnVEVNUExBVEVfU0VDUkVUU19SRVNFUlZFRCcsXG4gIFRFTVBMQVRFX0NPTlRSQUNUX1ZJT0xBVElPTiA9ICdURU1QTEFURV9DT05UUkFDVF9WSU9MQVRJT04nLFxuICBURU1QTEFURV9TSVpFX0VYQ0VFREVEID0gJ1RFTVBMQVRFX1NJWkVfRVhDRUVERUQnLFxuICBURU1QTEFURV9WQUxJREFUSU9OX0ZBSUxFRCA9ICdURU1QTEFURV9WQUxJREFUSU9OX0ZBSUxFRCcsXG5cbiAgLy8gUXVvdGEvUmF0ZSBsaW1pdCBlcnJvcnMgKDQyOSlcbiAgUVVPVEFfRVhDRUVERUQgPSAnUVVPVEFfRVhDRUVERUQnLFxuICBSQVRFX0xJTUlUX0VYQ0VFREVEID0gJ1JBVEVfTElNSVRfRVhDRUVERUQnLFxuICAvKiogQW4gYW5vbnltb3VzIHN1Ym1pdHRlciAocGVyIHZlcmlmaWVkIGVtYWlsLCBvciBwZXIgY2xpZW50IElQKSBpcyBhdCB0aGVcbiAgICogIHJvbGxpbmcgMjQtaG91ciBzdWJtaXNzaW9uIGNhcC4gKi9cbiAgU1VCTUlTU0lPTl9MSU1JVCA9ICdTVUJNSVNTSU9OX0xJTUlUJyxcblxuICAvLyBQYXlsb2FkIGVycm9ycyAoNDEzKVxuICBQQVlMT0FEX1RPT19MQVJHRSA9ICdQQVlMT0FEX1RPT19MQVJHRScsXG5cbiAgLy8gQ29uZmxpY3QgZXJyb3JzICg0MDkpXG4gIENPTkZMSUNUID0gJ0NPTkZMSUNUJyxcbiAgRFVQTElDQVRFX0VOVFJZID0gJ0RVUExJQ0FURV9FTlRSWScsXG4gIFNDQU5fQ09ORkxJQ1QgPSAnU0NBTl9DT05GTElDVCcsXG4gIC8qKiBBIHBsdWdpbiBpbWFnZSdzIGNvc2lnbiBzaWduYXR1cmUgKG9yIGl0cyBzaWduZWQgU0JPTSBhdHRlc3RhdGlvbikgZGlkXG4gICAqICBub3QgdmVyaWZ5IGFnYWluc3QgdGhlIHBsYXRmb3JtJ3MgcGx1Z2luLXNpZ25pbmcga2V5IOKAlCB0aGUgcmVnaXN0cnlcbiAgICogIGNvbnRlbnQgbm8gbG9uZ2VyIG1hdGNoZXMgd2hhdCB0aGUgcGxhdGZvcm0gYnVpbHQgYW5kIHNpZ25lZC4gKi9cbiAgSU1BR0VfVkVSSUZJQ0FUSU9OX0ZBSUxFRCA9ICdJTUFHRV9WRVJJRklDQVRJT05fRkFJTEVEJyxcbiAgLyoqIFRoZSBwbHVnaW4gdmVyc2lvbiBpcyBpbW11dGFibGUg4oCUIGEgcHVibGlzaCByZXF1ZXN0IHJlZmVyZW5jZXMgaXRcbiAgICogIChgZnJvemVuX2F0YCBzZXQpIG9yIGl0IGlzIHB1Ymxpc2hlZCB0byBhIGxpc3Rpbmcg4oCUIHNvIGl0IGNhbiBiZSBuZWl0aGVyXG4gICAqICByZS11cGxvYWRlZCwgZWRpdGVkIG5vciBkZWxldGVkIChkb2NzL3BsdWdpbi1wdWJsaXNoaW5nLm1kKS4gKi9cbiAgUExVR0lOX1ZFUlNJT05fRlJPWkVOID0gJ1BMVUdJTl9WRVJTSU9OX0ZST1pFTicsXG4gIC8qKiBUaGUgcGx1Z2luIHZlcnNpb24gaXMgcmVmZXJlbmNlZCBieSBvbmUgb2YgdGhlIG9yZydzIHBpcGVsaW5lcywgb3IgcHVibGlzaGVkXG4gICAqICB0byBhbiBlY29zeXN0ZW0gbGlzdGluZzsgZGVsZXRpbmcgaXQgbmVlZHMgYD9mb3JjZT10cnVlYCBwbHVzIGEgc3RlcC11cC4gKi9cbiAgUExVR0lOX1ZFUlNJT05fSU5fVVNFID0gJ1BMVUdJTl9WRVJTSU9OX0lOX1VTRScsXG4gIC8qKiBBIGZyZWV6ZSBuYW1lZCBhbiBpbWFnZSBkaWdlc3QgdGhhdCBpcyBub3QgdGhlIHZlcnNpb24ncyBzdG9yZWQgZGlnZXN0XG4gICAqICAoZmFpbCBjbG9zZWQ6IHdoYXQgd2FzIHJlcXVlc3RlZCBpcyBub3Qgd2hhdCB3b3VsZCBiZSBwdWJsaXNoZWQpLiAqL1xuICBQTFVHSU5fRElHRVNUX01JU01BVENIID0gJ1BMVUdJTl9ESUdFU1RfTUlTTUFUQ0gnLFxuICAvKiogQSBwdWJsaXNoIHJlcXVlc3QgbmVlZHMgdGhlIG9yZydzIHB1Ymxpc2hlciBwcm9maWxlLCB3aGljaCBkb2Vzbid0IGV4aXN0XG4gICAqICB5ZXQgKGRvY3MvcGx1Z2luLXB1Ymxpc2hpbmcubWQpLiBDbGFpbSBhIGhhbmRsZSBmaXJzdC4gKi9cbiAgUFVCTElTSEVSX1JFUVVJUkVEID0gJ1BVQkxJU0hFUl9SRVFVSVJFRCcsXG4gIC8qKiBUaGUgcmVxdWVzdGVkIHB1Ymxpc2hlciBoYW5kbGUgaXMgcmVzZXJ2ZWQgKE9mZmljaWFsL1ZlcmlmaWVkXG4gICAqICByZXNlcnZhdGlvbnMsIGNvbmZ1c2FibGVzKS4gU3VibWl0IGEgYGNsYWltYCByZXF1ZXN0IGluc3RlYWQuICovXG4gIFBVQkxJU0hFUl9IQU5ETEVfUkVTRVJWRUQgPSAnUFVCTElTSEVSX0hBTkRMRV9SRVNFUlZFRCcsXG4gIC8qKiBBIHB1Ymxpc2ggcmVxdWVzdCBmYWlsZWQgYSBzdWJtaXQgZ2F0ZSAocHVibGljIHZpc2liaWxpdHksIFNQRFggbGljZW5zZSxcbiAgICogIFJFQURNRSwgc2lnbmF0dXJlLCBzY2FuLCB2dWxuZXJhYmlsaXR5IGdhdGUg4oCmKTsgYGRldGFpbHMuZ2F0ZXNgIGxpc3RzIHRoZW0uICovXG4gIFBVQkxJU0hfR0FURV9GQUlMRUQgPSAnUFVCTElTSF9HQVRFX0ZBSUxFRCcsXG4gIC8qKiBBIFZlcmlmaWVkLXB1Ymxpc2hlciBhcHBsaWNhdGlvbiAob3IgaXRzIGRlY2lzaW9uKSBmcm9tIGFuIG9yZyB3aG9zZSBwbGFuXG4gICAqICBsYWNrcyB0aGUgYHZlcmlmaWVkX3B1Ymxpc2hlcmAgZmVhdHVyZSAoVGVhbSssIGRvY3MvcGx1Z2luLXB1Ymxpc2hpbmcubWQpLiAqL1xuICBWRVJJRklFRF9QTEFOX1JFUVVJUkVEID0gJ1ZFUklGSUVEX1BMQU5fUkVRVUlSRUQnLFxuICAvKiogQSBWZXJpZmllZC1wdWJsaXNoZXIgYXBwbGljYXRpb24gZnJvbSBhbiBvcmcgd2l0aCBubyBETlMtdmVyaWZpZWQgZG9tYWluLiAqL1xuICBWRVJJRklFRF9ET01BSU5fUkVRVUlSRUQgPSAnVkVSSUZJRURfRE9NQUlOX1JFUVVJUkVEJyxcbiAgLyoqIEEgVmVyaWZpZWQtcHVibGlzaGVyIGFwcGxpY2F0aW9uIGZyb20gYW4gb3JnIHdob3NlIG93bmVyIGhhcyBubyBzZWNvbmRcbiAgICogIGZhY3RvciAocGFzc2tleSBvciBhdXRoZW50aWNhdG9yIGFwcCkuICovXG4gIFZFUklGSUVEX09XTkVSX01GQV9SRVFVSVJFRCA9ICdWRVJJRklFRF9PV05FUl9NRkFfUkVRVUlSRUQnLFxuICAvKiogQSBwbHVnaW4gcmVmZXJlbmNlIG5hbWVzIGFuIGVjb3N5c3RlbSBsaXN0aW5nIHRoZSBvcmcgaGFzbid0IGluc3RhbGxlZCAob3JcbiAgICogIHdob3NlIGluc3RhbGwgaXMgcGVuZGluZywgZGVuaWVkLCBvciBkb2Vzbid0IGNvdmVyIHRoZSB2ZXJzaW9uIGFza2VkIGZvcjtcbiAgICogIGBkZXRhaWxzLnJlYXNvbmApIOKAlCBkb2NzL3BsdWdpbi1wdWJsaXNoaW5nLm1kICovXG4gIFBMVUdJTl9OT1RfSU5TVEFMTEVEID0gJ1BMVUdJTl9OT1RfSU5TVEFMTEVEJyxcbiAgLyoqIFRoZSBvcmcncyBjb25zdW1wdGlvbiBwb2xpY3kgcmVmdXNlcyB0aGUgbGlzdGluZzogaXRzIHRpZXIgaXNuJ3QgYWxsb3dlZCxcbiAgICogIHRoZSBsaXN0aW5nIGlzIGJsb2NrZWQsIG9yIGFuIGFkdmlzb3J5IGJsb2NrcyB0aGUgdmVyc2lvbiAoYGRldGFpbHMucmVhc29uYCkuICovXG4gIFBMVUdJTl9CTE9DS0VEX0JZX1BPTElDWSA9ICdQTFVHSU5fQkxPQ0tFRF9CWV9QT0xJQ1knLFxuICAvKiogVGhlIGxpc3Rpbmcgb3IgdmVyc2lvbiBjYW4ndCBiZSB1c2VkOiB5YW5rZWQsIHN1c3BlbmRlZCwgb3IgcGF1c2VkIGZvciBuZXdcbiAgICogIGluc3RhbGxzIChgZGV0YWlscy5yZWFzb25gKS4gKi9cbiAgUExVR0lOX1VOQVZBSUxBQkxFID0gJ1BMVUdJTl9VTkFWQUlMQUJMRScsXG4gIC8qKiBBbiBhdXRvLWNyZWF0ZWQgcGxhY2Vob2xkZXIgcGx1Z2luIGNhbid0IHRha2UgdGhlIG5hbWUgb2YgYSBsaXN0ZWQgcGx1Z2luXG4gICAqIOKAlCBpbnN0YWxsIHRoZSBsaXN0aW5nIGluc3RlYWQuICovXG4gIFBMVUdJTl9OQU1FX0xJU1RFRCA9ICdQTFVHSU5fTkFNRV9MSVNURUQnLFxuICAvKiogQW4gYW5vbnltb3VzIHN1Ym1pc3Npb24gbmFtZXMgYSBjb21tdW5pdHkgbGlzdGluZyBhbm90aGVyIHN1Ym1pdHRlciBvd25zLFxuICAgKiAgYSByZXNlcnZlZCBuYW1lLCBhbiBPZmZpY2lhbC9WZXJpZmllZCBsaXN0aW5nJ3MgbmFtZSwgb3Igb25lIGNvbmZ1c2FibGVcbiAgICogIHdpdGggYSB0b3AgbGlzdGluZzsgYGRldGFpbHMucmVhc29uYCBzYXlzIHdoaWNoLiAqL1xuICBOQU1FX1RBS0VOID0gJ05BTUVfVEFLRU4nLFxuXG4gIC8vIEJpbGxpbmcgZXJyb3JzXG4gIFBBWU1FTlRfTUVUSE9EX1JFUVVJUkVEID0gJ1BBWU1FTlRfTUVUSE9EX1JFUVVJUkVEJywgLy8gNDAyXG4gIERJU0NPVU5UX0NFSUxJTkdfRVhDRUVERUQgPSAnRElTQ09VTlRfQ0VJTElOR19FWENFRURFRCcsIC8vIDQwMFxuICBESVNDT1VOVF9OT1RfRk9VTkQgPSAnRElTQ09VTlRfTk9UX0ZPVU5EJywgLy8gNDA0XG4gIERJU0NPVU5UX0lOQUNUSVZFID0gJ0RJU0NPVU5UX0lOQUNUSVZFJywgLy8gNDA5XG4gIFBMQU5fT1ZFUl9DQVAgPSAnUExBTl9PVkVSX0NBUCcsIC8vIDQwOVxuICBBRERPTl9PVkVSX0NBUCA9ICdBRERPTl9PVkVSX0NBUCcsIC8vIDQwOVxuXG4gIC8vIFNlcnZlciBlcnJvcnMgKDUwMClcbiAgSU5URVJOQUxfRVJST1IgPSAnSU5URVJOQUxfRVJST1InLFxuICBEQVRBQkFTRV9FUlJPUiA9ICdEQVRBQkFTRV9FUlJPUicsXG5cbiAgLy8gTm90IGltcGxlbWVudGVkICg1MDEpIOKAlCB0aGUgY29uZmlndXJlZCBwcm92aWRlciBoYXMgbm8gc3VjaCBjYXBhYmlsaXR5XG4gIE5PVF9JTVBMRU1FTlRFRCA9ICdOT1RfSU1QTEVNRU5URUQnLFxuXG4gIC8vIFNlcnZpY2UgdW5hdmFpbGFibGUgKDUwMylcbiAgU0VSVklDRV9VTkFWQUlMQUJMRSA9ICdTRVJWSUNFX1VOQVZBSUxBQkxFJyxcbiAgQ09NUExJQU5DRV9TRVJWSUNFX1VOQVZBSUxBQkxFID0gJ0NPTVBMSUFOQ0VfU0VSVklDRV9VTkFWQUlMQUJMRScsXG59XG5cbi8qKlxuICogTWFwcyBlcnJvciBjb2RlcyB0byB0aGVpciBkZWZhdWx0IEhUVFAgc3RhdHVzIGNvZGVzLlxuICovXG5leHBvcnQgY29uc3QgRXJyb3JDb2RlU3RhdHVzOiBSZWNvcmQ8RXJyb3JDb2RlLCBudW1iZXI+ID0ge1xuICBbRXJyb3JDb2RlLlVOQVVUSE9SSVpFRF06IDQwMSxcbiAgW0Vycm9yQ29kZS5UT0tFTl9FWFBJUkVEXTogNDAxLFxuICBbRXJyb3JDb2RlLlRPS0VOX0lOVkFMSURdOiA0MDEsXG4gIFtFcnJvckNvZGUuVE9LRU5fTUlTU0lOR106IDQwMSxcbiAgW0Vycm9yQ29kZS5UT0tFTl9SRVZPS0VEXTogNDAxLFxuICBbRXJyb3JDb2RlLk1GQV9SRVFVSVJFRF06IDQwMSxcbiAgW0Vycm9yQ29kZS5SRUFVVEhfUkVRVUlSRURdOiA0MDEsXG4gIFtFcnJvckNvZGUuSU5TVUZGSUNJRU5UX1BFUk1JU1NJT05TXTogNDAzLFxuICBbRXJyb3JDb2RlLlNZU1RFTV9PUkdfUkVRVUlSRURdOiA0MDMsXG4gIFtFcnJvckNvZGUuUFVCTElTSEVSX1RFUk1TX1JFUVVJUkVEXTogNDAzLFxuICBbRXJyb3JDb2RlLlBVQkxJU0hFUl9ST09UX09SR19SRVFVSVJFRF06IDQwMyxcbiAgW0Vycm9yQ29kZS5QVUJMSVNIRVJfU1VTUEVOREVEXTogNDAzLFxuICBbRXJyb3JDb2RlLlBMVUdJTl9QVUJMSVNISU5HX0RJU0FCTEVEXTogNDAzLFxuICBbRXJyb3JDb2RlLlBMVUdJTl9SRVZJRVdTX0RJU0FCTEVEXTogNDAzLFxuICBbRXJyb3JDb2RlLlJFVklFV19TRUxGX1BST01PVElPTl06IDQwMyxcbiAgW0Vycm9yQ29kZS5TRVBBUkFUSU9OX09GX0RVVElFU106IDQwMyxcbiAgW0Vycm9yQ29kZS5IVU1BTl9TRVNTSU9OX1JFUVVJUkVEXTogNDAzLFxuICBbRXJyb3JDb2RlLk1GQV9FTlJPTExNRU5UX1JFUVVJUkVEXTogNDAzLFxuICBbRXJyb3JDb2RlLklNUEVSU09OQVRJT05fUkVBRF9PTkxZXTogNDAzLFxuICBbRXJyb3JDb2RlLk9SR19NSVNNQVRDSF06IDQwMyxcbiAgW0Vycm9yQ29kZS5DT01QTElBTkNFX1ZJT0xBVElPTl06IDQwMyxcbiAgW0Vycm9yQ29kZS5OT1RfRk9VTkRdOiA0MDQsXG4gIFtFcnJvckNvZGUuT1JHX05PVF9GT1VORF06IDQwNCxcbiAgW0Vycm9yQ29kZS5TVUJNSVNTSU9OU19ESVNBQkxFRF06IDQwNCxcbiAgW0Vycm9yQ29kZS5WQUxJREFUSU9OX0VSUk9SXTogNDAwLFxuICBbRXJyb3JDb2RlLk1JU1NJTkdfUkVRVUlSRURfRklFTERdOiA0MDAsXG4gIFtFcnJvckNvZGUuUFJPT0ZfT0ZfV09SS19JTlZBTElEXTogNDAwLFxuICBbRXJyb3JDb2RlLlRFTVBMQVRFX1VOS05PV05fUEFUSF06IDQwMCxcbiAgW0Vycm9yQ29kZS5URU1QTEFURV9DWUNMRV06IDQwMCxcbiAgW0Vycm9yQ29kZS5URU1QTEFURV9QQVJTRV9FUlJPUl06IDQwMCxcbiAgW0Vycm9yQ29kZS5URU1QTEFURV9UWVBFX01JU01BVENIXTogNDAwLFxuICBbRXJyb3JDb2RlLlRFTVBMQVRFX1NFQ1JFVFNfUkVTRVJWRURdOiA0MDAsXG4gIFtFcnJvckNvZGUuVEVNUExBVEVfQ09OVFJBQ1RfVklPTEFUSU9OXTogNDAwLFxuICBbRXJyb3JDb2RlLlRFTVBMQVRFX1NJWkVfRVhDRUVERURdOiA0MDAsXG4gIFtFcnJvckNvZGUuVEVNUExBVEVfVkFMSURBVElPTl9GQUlMRURdOiA0MDAsXG4gIFtFcnJvckNvZGUuUVVPVEFfRVhDRUVERURdOiA0MjksXG4gIFtFcnJvckNvZGUuUkFURV9MSU1JVF9FWENFRURFRF06IDQyOSxcbiAgW0Vycm9yQ29kZS5TVUJNSVNTSU9OX0xJTUlUXTogNDI5LFxuICBbRXJyb3JDb2RlLlBBWUxPQURfVE9PX0xBUkdFXTogNDEzLFxuICBbRXJyb3JDb2RlLkNPTkZMSUNUXTogNDA5LFxuICBbRXJyb3JDb2RlLkRVUExJQ0FURV9FTlRSWV06IDQwOSxcbiAgW0Vycm9yQ29kZS5TQ0FOX0NPTkZMSUNUXTogNDA5LFxuICBbRXJyb3JDb2RlLklNQUdFX1ZFUklGSUNBVElPTl9GQUlMRURdOiA0MDksXG4gIFtFcnJvckNvZGUuUExVR0lOX1ZFUlNJT05fRlJPWkVOXTogNDA5LFxuICBbRXJyb3JDb2RlLlBMVUdJTl9WRVJTSU9OX0lOX1VTRV06IDQwOSxcbiAgW0Vycm9yQ29kZS5QTFVHSU5fRElHRVNUX01JU01BVENIXTogNDA5LFxuICBbRXJyb3JDb2RlLlBVQkxJU0hFUl9SRVFVSVJFRF06IDQwOSxcbiAgW0Vycm9yQ29kZS5QVUJMSVNIRVJfSEFORExFX1JFU0VSVkVEXTogNDA5LFxuICBbRXJyb3JDb2RlLlBVQkxJU0hfR0FURV9GQUlMRURdOiA0MDksXG4gIFtFcnJvckNvZGUuVkVSSUZJRURfUExBTl9SRVFVSVJFRF06IDQwMyxcbiAgW0Vycm9yQ29kZS5WRVJJRklFRF9ET01BSU5fUkVRVUlSRURdOiA0MDksXG4gIFtFcnJvckNvZGUuVkVSSUZJRURfT1dORVJfTUZBX1JFUVVJUkVEXTogNDA5LFxuICBbRXJyb3JDb2RlLlBMVUdJTl9OT1RfSU5TVEFMTEVEXTogNDAzLFxuICBbRXJyb3JDb2RlLlBMVUdJTl9CTE9DS0VEX0JZX1BPTElDWV06IDQwMyxcbiAgW0Vycm9yQ29kZS5QTFVHSU5fVU5BVkFJTEFCTEVdOiA0MDksXG4gIFtFcnJvckNvZGUuUExVR0lOX05BTUVfTElTVEVEXTogNDA5LFxuICBbRXJyb3JDb2RlLk5BTUVfVEFLRU5dOiA0MDksXG4gIFtFcnJvckNvZGUuUEFZTUVOVF9NRVRIT0RfUkVRVUlSRURdOiA0MDIsXG4gIFtFcnJvckNvZGUuRElTQ09VTlRfQ0VJTElOR19FWENFRURFRF06IDQwMCxcbiAgW0Vycm9yQ29kZS5ESVNDT1VOVF9OT1RfRk9VTkRdOiA0MDQsXG4gIFtFcnJvckNvZGUuRElTQ09VTlRfSU5BQ1RJVkVdOiA0MDksXG4gIFtFcnJvckNvZGUuUExBTl9PVkVSX0NBUF06IDQwOSxcbiAgW0Vycm9yQ29kZS5BRERPTl9PVkVSX0NBUF06IDQwOSxcbiAgW0Vycm9yQ29kZS5JTlRFUk5BTF9FUlJPUl06IDUwMCxcbiAgW0Vycm9yQ29kZS5EQVRBQkFTRV9FUlJPUl06IDUwMCxcbiAgW0Vycm9yQ29kZS5OT1RfSU1QTEVNRU5URURdOiA1MDEsXG4gIFtFcnJvckNvZGUuU0VSVklDRV9VTkFWQUlMQUJMRV06IDUwMyxcbiAgW0Vycm9yQ29kZS5DT01QTElBTkNFX1NFUlZJQ0VfVU5BVkFJTEFCTEVdOiA1MDMsXG59O1xuXG4vKipcbiAqIEdldCB0aGUgSFRUUCBzdGF0dXMgY29kZSBmb3IgYW4gZXJyb3IgY29kZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFN0YXR1c0ZvckVycm9yQ29kZShjb2RlOiBFcnJvckNvZGUpOiBudW1iZXIge1xuICByZXR1cm4gRXJyb3JDb2RlU3RhdHVzW2NvZGVdID8/IDUwMDtcbn1cbiJdfQ==
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { QuotaTier } from './quota-tiers.js';
|
|
2
2
|
/** Canonical feature flag identifiers. */
|
|
3
|
-
export type FeatureFlag = 'priority_support' | 'custom_integrations' | 'ai_generation' | 'bulk_operations' | 'sso' | 'advanced_reporting' | 'team_usage_analytics' | 'compliance_standard' | 'compliance_advanced';
|
|
3
|
+
export type FeatureFlag = 'priority_support' | 'custom_integrations' | 'ai_generation' | 'bulk_operations' | 'sso' | 'advanced_reporting' | 'team_usage_analytics' | 'compliance_standard' | 'compliance_advanced' | 'verified_publisher';
|
|
4
4
|
/** All valid feature flags (order determines display order). */
|
|
5
5
|
export declare const ALL_FEATURE_FLAGS: readonly FeatureFlag[];
|
|
6
6
|
/** Check whether a string is a valid FeatureFlag. */
|
|
@@ -34,3 +34,23 @@ export declare function resolveUserFeatures(tier: QuotaTier, opts?: {
|
|
|
34
34
|
isSuperAdmin?: boolean;
|
|
35
35
|
accountFeatures?: readonly string[] | null;
|
|
36
36
|
}): FeatureFlag[];
|
|
37
|
+
/**
|
|
38
|
+
* Curated compliance content sets and the feature flag each one is sold under.
|
|
39
|
+
* A set `x` is the published rules tagged `set:<x>`; an org holding the flag is
|
|
40
|
+
* entitled to them. Ordered from the lowest entitlement to the highest.
|
|
41
|
+
*/
|
|
42
|
+
export declare const COMPLIANCE_SET_FEATURES: {
|
|
43
|
+
readonly standard: 'compliance_standard';
|
|
44
|
+
readonly advanced: 'compliance_advanced';
|
|
45
|
+
};
|
|
46
|
+
export type ComplianceContentSet = keyof typeof COMPLIANCE_SET_FEATURES;
|
|
47
|
+
/** Every curated set name, lowest entitlement first. */
|
|
48
|
+
export declare const COMPLIANCE_CONTENT_SETS: ComplianceContentSet[];
|
|
49
|
+
/** The curated sets an effective feature set entitles (stable order). */
|
|
50
|
+
export declare function complianceSetsForFeatures(features: readonly string[]): ComplianceContentSet[];
|
|
51
|
+
/**
|
|
52
|
+
* The feature a published rule's `set:<x>` tags require, or `null` for an
|
|
53
|
+
* untagged (baseline) rule. The highest entitlement wins when a rule carries
|
|
54
|
+
* several. Accepts a raw jsonb `tags` value.
|
|
55
|
+
*/
|
|
56
|
+
export declare function complianceFeatureForTags(tags: unknown): FeatureFlag | null;
|
|
@@ -11,6 +11,7 @@ export const ALL_FEATURE_FLAGS = [
|
|
|
11
11
|
'team_usage_analytics',
|
|
12
12
|
'compliance_standard',
|
|
13
13
|
'compliance_advanced',
|
|
14
|
+
'verified_publisher',
|
|
14
15
|
];
|
|
15
16
|
/** Check whether a string is a valid FeatureFlag. */
|
|
16
17
|
export function isValidFeatureFlag(value) {
|
|
@@ -25,7 +26,8 @@ export const TIER_FEATURES = {
|
|
|
25
26
|
// (DORA) is NOT a Team tier feature — it's INCLUDED only in Enterprise and sold
|
|
26
27
|
// as an add-on bundle to every other tier (see billing-config
|
|
27
28
|
// `advanced_reporting`). Enterprise unlocks all.
|
|
28
|
-
|
|
29
|
+
// `verified_publisher` (eligibility to apply for Verified) starts at Team.
|
|
30
|
+
team: ['priority_support', 'ai_generation', 'bulk_operations', 'sso', 'verified_publisher'],
|
|
29
31
|
enterprise: [...ALL_FEATURE_FLAGS],
|
|
30
32
|
// Unlimited includes every feature / add-on bundle (billing-disabled default).
|
|
31
33
|
unlimited: [...ALL_FEATURE_FLAGS],
|
|
@@ -69,6 +71,10 @@ export const FEATURE_METADATA = {
|
|
|
69
71
|
label: 'Advanced Compliance',
|
|
70
72
|
description: 'Curated framework compliance libraries (SOC2 / PCI-DSS / CIS)',
|
|
71
73
|
},
|
|
74
|
+
verified_publisher: {
|
|
75
|
+
label: 'Verified Publisher Eligibility',
|
|
76
|
+
description: 'Apply for the Verified badge on your plugin-ecosystem publisher (awarded by system-org review)',
|
|
77
|
+
},
|
|
72
78
|
};
|
|
73
79
|
// Resolution logic
|
|
74
80
|
/**
|
|
@@ -120,4 +126,32 @@ export function resolveUserFeatures(tier, opts) {
|
|
|
120
126
|
// Return in canonical order
|
|
121
127
|
return ALL_FEATURE_FLAGS.filter(f => features.has(f));
|
|
122
128
|
}
|
|
123
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVhdHVyZS1mbGFncy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90eXBlcy9mZWF0dXJlLWZsYWdzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFrQ3RDLGdFQUFnRTtBQUNoRSxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBMkI7SUFDdkQsa0JBQWtCO0lBQ2xCLGVBQWU7SUFDZixpQkFBaUI7SUFDakIscUJBQXFCO0lBQ3JCLEtBQUs7SUFDTCxvQkFBb0I7SUFDcEIsc0JBQXNCO0lBQ3RCLHFCQUFxQjtJQUNyQixxQkFBcUI7Q0FDdEIsQ0FBQztBQUVGLHFEQUFxRDtBQUNyRCxNQUFNLFVBQVUsa0JBQWtCLENBQUMsS0FBYTtJQUM5QyxPQUFRLGlCQUF1QyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNsRSxDQUFDO0FBRUQsMEJBQTBCO0FBRTFCLGlEQUFpRDtBQUNqRCxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQThDO0lBQ3RFLFNBQVMsRUFBRSxFQUFFO0lBQ2IsR0FBRyxFQUFFLENBQUMsa0JBQWtCLEVBQUUsZUFBZSxFQUFFLGlCQUFpQixDQUFDO0lBQzdELGlGQUFpRjtJQUNqRixnRkFBZ0Y7SUFDaEYsOERBQThEO0lBQzlELGlEQUFpRDtJQUNqRCxJQUFJLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxlQUFlLEVBQUUsaUJBQWlCLEVBQUUsS0FBSyxDQUFDO0lBQ3JFLFVBQVUsRUFBRSxDQUFDLEdBQUcsaUJBQWlCLENBQUM7SUFDbEMsK0VBQStFO0lBQy9FLFNBQVMsRUFBRSxDQUFDLEdBQUcsaUJBQWlCLENBQUM7Q0FDbEMsQ0FBQztBQUVGLGlDQUFpQztBQUVqQyxxREFBcUQ7QUFDckQsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQWdFO0lBQzNGLGdCQUFnQixFQUFFO1FBQ2hCLEtBQUssRUFBRSxrQkFBa0I7UUFDekIsV0FBVyxFQUFFLHNEQUFzRDtLQUNwRTtJQUNELGFBQWEsRUFBRTtRQUNiLEtBQUssRUFBRSxlQUFlO1FBQ3RCLFdBQVcsRUFBRSwyQ0FBMkM7S0FDekQ7SUFDRCxlQUFlLEVBQUU7UUFDZixLQUFLLEVBQUUsaUJBQWlCO1FBQ3hCLFdBQVcsRUFBRSw0REFBNEQ7S0FDMUU7SUFDRCxtQkFBbUIsRUFBRTtRQUNuQixLQUFLLEVBQUUscUJBQXFCO1FBQzVCLFdBQVcsRUFBRSwyREFBMkQ7S0FDekU7SUFDRCxHQUFHLEVBQUU7UUFDSCxLQUFLLEVBQUUsV0FBVztRQUNsQixXQUFXLEVBQUUsOERBQThEO0tBQzVFO0lBQ0Qsa0JBQWtCLEVBQUU7UUFDbEIsS0FBSyxFQUFFLG9CQUFvQjtRQUMzQixXQUFXLEVBQUUsb0NBQW9DO0tBQ2xEO0lBQ0Qsb0JBQW9CLEVBQUU7UUFDcEIsS0FBSyxFQUFFLHNCQUFzQjtRQUM3QixXQUFXLEVBQUUsd0RBQXdEO0tBQ3RFO0lBQ0QsbUJBQW1CLEVBQUU7UUFDbkIsS0FBSyxFQUFFLHFCQUFxQjtRQUM1QixXQUFXLEVBQUUscURBQXFEO0tBQ25FO0lBQ0QsbUJBQW1CLEVBQUU7UUFDbkIsS0FBSyxFQUFFLHFCQUFxQjtRQUM1QixXQUFXLEVBQUUsK0RBQStEO0tBQzdFO0NBQ0YsQ0FBQztBQUVGLG1CQUFtQjtBQUVuQjs7Ozs7Ozs7Ozs7Ozs7OztHQWdCRztBQUNILE1BQU0sVUFBVSxtQkFBbUIsQ0FDakMsSUFBZSxFQUNmLElBSUM7SUFFRCxNQUFNLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO0lBRWxGLCtDQUErQztJQUMvQyxJQUFJLFlBQVk7UUFBRSxPQUFPLENBQUMsR0FBRyxpQkFBaUIsQ0FBQyxDQUFDO0lBRWhELDJCQUEyQjtJQUMzQixNQUFNLFFBQVEsR0FBRyxJQUFJLEdBQUcsQ0FBYyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7SUFFakUsK0VBQStFO0lBQy9FLDJFQUEyRTtJQUMzRSw2RUFBNkU7SUFDN0UsSUFBSSxlQUFlLEVBQUUsQ0FBQztRQUNwQixLQUFLLE1BQU0sR0FBRyxJQUFJLGVBQWUsRUFBRSxDQUFDO1lBQ2xDLElBQUksa0JBQWtCLENBQUMsR0FBRyxDQUFDO2dCQUFFLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDakQsQ0FBQztJQUNILENBQUM7SUFFRCwyQkFBMkI7SUFDM0IsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3JCLEtBQUssTUFBTSxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQztZQUM5RCxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDO2dCQUFFLFNBQVM7WUFDdkMsSUFBSSxPQUFPLEVBQUUsQ0FBQztnQkFDWixRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3BCLENBQUM7aUJBQU0sQ0FBQztnQkFDTixRQUFRLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3ZCLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELDRCQUE0QjtJQUM1QixPQUFPLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB0eXBlIHsgUXVvdGFUaWVyIH0gZnJvbSAnLi9xdW90YS10aWVycy5qcyc7XG5cbi8vIEZlYXR1cmUgZmxhZyBpZGVudGlmaWVyc1xuXG4vKiogQ2Fub25pY2FsIGZlYXR1cmUgZmxhZyBpZGVudGlmaWVycy4gKi9cbmV4cG9ydCB0eXBlIEZlYXR1cmVGbGFnID1cbiAgLy8gYHByaW9yaXR5X3N1cHBvcnRgIGFuZCBgY3VzdG9tX2ludGVncmF0aW9uc2AgYXJlIEVOVEVSUFJJU0UtRVhDTFVTSVZFXG4gIC8vIG1hcmtldGluZy9lbnRpdGxlbWVudCBmbGFnczogZ3JhbnRlZCBvbmx5IGJ5IHRoZSBlbnRlcnByaXNlIHRpZXIgKG5vIGFkZC1vblxuICAvLyBidW5kbGUgc2VsbHMgdGhlbSB0byBhIGxvd2VyIHRpZXIg4oCUIGludGVudGlvbmFsLCB0aGV5IGFuY2hvciB0aGUgRW50ZXJwcmlzZVxuICAvLyBwbGFuKSBhbmQgbm90IGN1cnJlbnRseSBgcmVxdWlyZUZlYXR1cmVgLWdhdGVkIG9uIGFueSByb3V0ZSAodGhleSBzdXJmYWNlIGluXG4gIC8vIHBsYW4gbWFya2V0aW5nICsgdGhlIGVudGl0bGVtZW50IHNldDsgZW5mb3JjZW1lbnQgaXMgYSBmdXR1cmUgaG9vaykuIFRoaXMgaXNcbiAgLy8gYnkgZGVzaWduLCBub3QgZGVhZCBjb2RlIOKAlCBkbyBub3QgXCJmaXhcIiBieSB3aXJpbmcgYSBidW5kbGUgd2l0aG91dCBhIHByaWNpbmdcbiAgLy8gZGVjaXNpb24uIENvbnRyYXN0IGBzc29gL2BhZHZhbmNlZF9yZXBvcnRpbmdgLCB3aGljaCBBUkUgc29sZCBhc1xuICAvLyBhZGQtb24gYnVuZGxlcyBhbmQgZ2F0ZWQgKHNlZSBiaWxsaW5nLWNvbmZpZyBgbG9hZEJ1bmRsZXNgICsgYHJlcXVpcmVGZWF0dXJlYCkuXG4gIHwgJ3ByaW9yaXR5X3N1cHBvcnQnXG4gIHwgJ2N1c3RvbV9pbnRlZ3JhdGlvbnMnXG4gIHwgJ2FpX2dlbmVyYXRpb24nXG4gIHwgJ2J1bGtfb3BlcmF0aW9ucydcbiAgfCAnc3NvJ1xuICAvLyBET1JBIC8gYWR2YW5jZWQgZGVsaXZlcnkgYW5hbHl0aWNzIChwYWlkIHRpZXJzIG9ubHkpLlxuICB8ICdhZHZhbmNlZF9yZXBvcnRpbmcnXG4gIC8vIFBlci10ZWFtIHVzYWdlIGJyZWFrZG93biBhY3Jvc3MgdGhlIG9yZ+KGknRlYW0gc3VidHJlZS4gSU5DTFVERUQgaW4gRW50ZXJwcmlzZTtcbiAgLy8gc29sZCBhcyBhbiBhZGQtb24gYnVuZGxlIHRvIFByby9UZWFtIChzZWUgYmlsbGluZy1jb25maWcgYHRlYW1fdXNhZ2VfYW5hbHl0aWNzYCkuXG4gIHwgJ3RlYW1fdXNhZ2VfYW5hbHl0aWNzJ1xuICAvLyBDdXJhdGVkIGNvbXBsaWFuY2UgcnVsZSBsaWJyYXJpZXMgc29sZCBhcyBhZGQtb24gYnVuZGxlcy4gYGNvbXBsaWFuY2Vfc3RhbmRhcmRgXG4gIC8vID0gQ0kvQ0QgYmVzdC1wcmFjdGljZSBzZXQ7IGBjb21wbGlhbmNlX2FkdmFuY2VkYCA9IFNPQzIvUENJL0NJUyBmcmFtZXdvcmtcbiAgLy8gbGlicmFyaWVzIChyZXF1aXJlcyBTdGFuZGFyZCkuIFRoZXNlIGdhdGUgU1VCU0NSSUJJTkcgdG8gdGhlIHNldCdzIHN5c3RlbS1vcmdcbiAgLy8gcHVibGlzaGVkIHJ1bGVzOyBJTkNMVURFRCBpbiBFbnRlcnByaXNlL1VubGltaXRlZCAodmlhIEFMTF9GRUFUVVJFX0ZMQUdTKSxcbiAgLy8gc29sZCB0byBEZXZlbG9wZXIvUHJvL1RlYW0gKHNlZSBiaWxsaW5nLWNvbmZpZyBgY29tcGxpYW5jZV9zdGFuZGFyZC9hZHZhbmNlZGApLlxuICB8ICdjb21wbGlhbmNlX3N0YW5kYXJkJ1xuICB8ICdjb21wbGlhbmNlX2FkdmFuY2VkJztcblxuLyoqIEFsbCB2YWxpZCBmZWF0dXJlIGZsYWdzIChvcmRlciBkZXRlcm1pbmVzIGRpc3BsYXkgb3JkZXIpLiAqL1xuZXhwb3J0IGNvbnN0IEFMTF9GRUFUVVJFX0ZMQUdTOiByZWFkb25seSBGZWF0dXJlRmxhZ1tdID0gW1xuICAncHJpb3JpdHlfc3VwcG9ydCcsXG4gICdhaV9nZW5lcmF0aW9uJyxcbiAgJ2J1bGtfb3BlcmF0aW9ucycsXG4gICdjdXN0b21faW50ZWdyYXRpb25zJyxcbiAgJ3NzbycsXG4gICdhZHZhbmNlZF9yZXBvcnRpbmcnLFxuICAndGVhbV91c2FnZV9hbmFseXRpY3MnLFxuICAnY29tcGxpYW5jZV9zdGFuZGFyZCcsXG4gICdjb21wbGlhbmNlX2FkdmFuY2VkJyxcbl07XG5cbi8qKiBDaGVjayB3aGV0aGVyIGEgc3RyaW5nIGlzIGEgdmFsaWQgRmVhdHVyZUZsYWcuICovXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZEZlYXR1cmVGbGFnKHZhbHVlOiBzdHJpbmcpOiB2YWx1ZSBpcyBGZWF0dXJlRmxhZyB7XG4gIHJldHVybiAoQUxMX0ZFQVRVUkVfRkxBR1MgYXMgcmVhZG9ubHkgc3RyaW5nW10pLmluY2x1ZGVzKHZhbHVlKTtcbn1cblxuLy8gVGllci10by1mZWF0dXJlIG1hcHBpbmdcblxuLyoqIEZlYXR1cmVzIGVuYWJsZWQgYnkgZGVmYXVsdCBmb3IgZWFjaCB0aWVyLiAqL1xuZXhwb3J0IGNvbnN0IFRJRVJfRkVBVFVSRVM6IFJlY29yZDxRdW90YVRpZXIsIHJlYWRvbmx5IEZlYXR1cmVGbGFnW10+ID0ge1xuICBkZXZlbG9wZXI6IFtdLFxuICBwcm86IFsncHJpb3JpdHlfc3VwcG9ydCcsICdhaV9nZW5lcmF0aW9uJywgJ2J1bGtfb3BlcmF0aW9ucyddLFxuICAvLyBUZWFtIGFkZHMgc3NvIChTU08vSWRQIGlzIElOQ0xVREVEIGluIFRlYW0sIG5vdCBhbiBhZGQtb24pLiBhZHZhbmNlZF9yZXBvcnRpbmdcbiAgLy8gKERPUkEpIGlzIE5PVCBhIFRlYW0gdGllciBmZWF0dXJlIOKAlCBpdCdzIElOQ0xVREVEIG9ubHkgaW4gRW50ZXJwcmlzZSBhbmQgc29sZFxuICAvLyBhcyBhbiBhZGQtb24gYnVuZGxlIHRvIGV2ZXJ5IG90aGVyIHRpZXIgKHNlZSBiaWxsaW5nLWNvbmZpZ1xuICAvLyBgYWR2YW5jZWRfcmVwb3J0aW5nYCkuIEVudGVycHJpc2UgdW5sb2NrcyBhbGwuXG4gIHRlYW06IFsncHJpb3JpdHlfc3VwcG9ydCcsICdhaV9nZW5lcmF0aW9uJywgJ2J1bGtfb3BlcmF0aW9ucycsICdzc28nXSxcbiAgZW50ZXJwcmlzZTogWy4uLkFMTF9GRUFUVVJFX0ZMQUdTXSxcbiAgLy8gVW5saW1pdGVkIGluY2x1ZGVzIGV2ZXJ5IGZlYXR1cmUgLyBhZGQtb24gYnVuZGxlIChiaWxsaW5nLWRpc2FibGVkIGRlZmF1bHQpLlxuICB1bmxpbWl0ZWQ6IFsuLi5BTExfRkVBVFVSRV9GTEFHU10sXG59O1xuXG4vLyBGZWF0dXJlIG1ldGFkYXRhIChmb3IgZGlzcGxheSlcblxuLyoqIEh1bWFuLXJlYWRhYmxlIG1ldGFkYXRhIGZvciBlYWNoIGZlYXR1cmUgZmxhZy4gKi9cbmV4cG9ydCBjb25zdCBGRUFUVVJFX01FVEFEQVRBOiBSZWNvcmQ8RmVhdHVyZUZsYWcsIHsgbGFiZWw6IHN0cmluZzsgZGVzY3JpcHRpb246IHN0cmluZyB9PiA9IHtcbiAgcHJpb3JpdHlfc3VwcG9ydDoge1xuICAgIGxhYmVsOiAnUHJpb3JpdHkgU3VwcG9ydCcsXG4gICAgZGVzY3JpcHRpb246ICdGYXN0ZXIgcmVzcG9uc2UgdGltZXMgYW5kIGRlZGljYXRlZCBzdXBwb3J0IGNoYW5uZWxzJyxcbiAgfSxcbiAgYWlfZ2VuZXJhdGlvbjoge1xuICAgIGxhYmVsOiAnQUkgR2VuZXJhdGlvbicsXG4gICAgZGVzY3JpcHRpb246ICdBSS1wb3dlcmVkIHBpcGVsaW5lIGFuZCBwbHVnaW4gZ2VuZXJhdGlvbicsXG4gIH0sXG4gIGJ1bGtfb3BlcmF0aW9uczoge1xuICAgIGxhYmVsOiAnQnVsayBPcGVyYXRpb25zJyxcbiAgICBkZXNjcmlwdGlvbjogJ0JhdGNoIGNyZWF0ZSwgdXBkYXRlLCBhbmQgZGVsZXRlIGZvciBwaXBlbGluZXMgYW5kIHBsdWdpbnMnLFxuICB9LFxuICBjdXN0b21faW50ZWdyYXRpb25zOiB7XG4gICAgbGFiZWw6ICdDdXN0b20gSW50ZWdyYXRpb25zJyxcbiAgICBkZXNjcmlwdGlvbjogJ0Nvbm5lY3QgdG8gZXh0ZXJuYWwgc2VydmljZXMgYW5kIGN1c3RvbSB3ZWJob29rIGVuZHBvaW50cycsXG4gIH0sXG4gIHNzbzoge1xuICAgIGxhYmVsOiAnU1NPIC8gSWRQJyxcbiAgICBkZXNjcmlwdGlvbjogJ1NpbmdsZSBzaWduLW9uIGFuZCBleHRlcm5hbCBpZGVudGl0eS1wcm92aWRlciBjb25maWd1cmF0aW9ucycsXG4gIH0sXG4gIGFkdmFuY2VkX3JlcG9ydGluZzoge1xuICAgIGxhYmVsOiAnQWR2YW5jZWQgUmVwb3J0aW5nJyxcbiAgICBkZXNjcmlwdGlvbjogJ0RPUkEgLyBhZHZhbmNlZCBkZWxpdmVyeSBhbmFseXRpY3MnLFxuICB9LFxuICB0ZWFtX3VzYWdlX2FuYWx5dGljczoge1xuICAgIGxhYmVsOiAnVGVhbSBVc2FnZSBBbmFseXRpY3MnLFxuICAgIGRlc2NyaXB0aW9uOiAnUGVyLXRlYW0gdXNhZ2UgYnJlYWtkb3duIGFjcm9zcyB0aGUgb3JnIOKGkiB0ZWFtIHN1YnRyZWUnLFxuICB9LFxuICBjb21wbGlhbmNlX3N0YW5kYXJkOiB7XG4gICAgbGFiZWw6ICdTdGFuZGFyZCBDb21wbGlhbmNlJyxcbiAgICBkZXNjcmlwdGlvbjogJ0N1cmF0ZWQgQ0kvQ0QgYmVzdC1wcmFjdGljZSBjb21wbGlhbmNlIHJ1bGUgbGlicmFyeScsXG4gIH0sXG4gIGNvbXBsaWFuY2VfYWR2YW5jZWQ6IHtcbiAgICBsYWJlbDogJ0FkdmFuY2VkIENvbXBsaWFuY2UnLFxuICAgIGRlc2NyaXB0aW9uOiAnQ3VyYXRlZCBmcmFtZXdvcmsgY29tcGxpYW5jZSBsaWJyYXJpZXMgKFNPQzIgLyBQQ0ktRFNTIC8gQ0lTKScsXG4gIH0sXG59O1xuXG4vLyBSZXNvbHV0aW9uIGxvZ2ljXG5cbi8qKlxuICogUmVzb2x2ZSBhIHVzZXIncyBlZmZlY3RpdmUgZmVhdHVyZSBzZXQuXG4gKlxuICogMS4gU3lzYWRtaW5zIChpc1N1cGVyQWRtaW4pIGFsd2F5cyBnZXQgQUxMIGZlYXR1cmVzLlxuICogMi4gU3RhcnQgd2l0aCB0aGUgdGllcidzIGRlZmF1bHQgZmVhdHVyZXMuXG4gKiAzLiBBcHBseSBwZXItdXNlciBvdmVycmlkZXM6IGB0cnVlYCBhZGRzIGEgZmVhdHVyZSwgYGZhbHNlYCByZW1vdmVzIGl0LlxuICogNC4gSW52YWxpZCBvdmVycmlkZSBrZXlzIGFyZSBzaWxlbnRseSBpZ25vcmVkLlxuICpcbiAqIEBwYXJhbSB0aWVyIC0gVGhlIG9yZ2FuaXphdGlvbidzIHF1b3RhIHRpZXJcbiAqIEBwYXJhbSBvcHRzIC0gUmVzb2x1dGlvbiBvcHRpb25zOlxuICogICAtIGBvdmVycmlkZXNgOiBwZXItdXNlciBvdmVycmlkZXMgKGtleSA9IGZlYXR1cmUgZmxhZywgdmFsdWUgPSBlbmFibGVkKVxuICogICAtIGBpc1N1cGVyQWRtaW5gOiB3aGV0aGVyIHRoZSB1c2VyIGhhcyB0aGUgZ2xvYmFsIHN1cGVyLWFkbWluIGZsYWdcbiAqICAgLSBgYWNjb3VudEZlYXR1cmVzYDogYWNjb3VudC1sZXZlbCBlbnRpdGxlbWVudHMgKGUuZy4gcHVyY2hhc2VkIGFkZC1vblxuICogICAgIGJ1bmRsZXMpLiBBIE5BTUVEIGZpZWxkIHNvIGl0IGNhbiBuZXZlciBiZSBzaWxlbnRseSBkcm9wcGVkIGJ5IGEgY2FsbGVyXG4gKiAgICAgdGhhdCBvbWl0cyBhIHRyYWlsaW5nIHBvc2l0aW9uYWwgYXJnLlxuICogQHJldHVybnMgU29ydGVkIGFycmF5IG9mIGVuYWJsZWQgZmVhdHVyZSBmbGFnc1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZVVzZXJGZWF0dXJlcyhcbiAgdGllcjogUXVvdGFUaWVyLFxuICBvcHRzPzoge1xuICAgIG92ZXJyaWRlcz86IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+IHwgbnVsbDtcbiAgICBpc1N1cGVyQWRtaW4/OiBib29sZWFuO1xuICAgIGFjY291bnRGZWF0dXJlcz86IHJlYWRvbmx5IHN0cmluZ1tdIHwgbnVsbDtcbiAgfSxcbik6IEZlYXR1cmVGbGFnW10ge1xuICBjb25zdCB7IG92ZXJyaWRlczogZmVhdHVyZU92ZXJyaWRlcywgaXNTdXBlckFkbWluLCBhY2NvdW50RmVhdHVyZXMgfSA9IG9wdHMgPz8ge307XG5cbiAgLy8gU3lzYWRtaW5zIGdldCBldmVyeXRoaW5nIHJlZ2FyZGxlc3Mgb2YgdGllci5cbiAgaWYgKGlzU3VwZXJBZG1pbikgcmV0dXJuIFsuLi5BTExfRkVBVFVSRV9GTEFHU107XG5cbiAgLy8gU3RhcnQgd2l0aCB0aWVyIGRlZmF1bHRzXG4gIGNvbnN0IGZlYXR1cmVzID0gbmV3IFNldDxGZWF0dXJlRmxhZz4oVElFUl9GRUFUVVJFU1t0aWVyXSA/PyBbXSk7XG5cbiAgLy8gQWNjb3VudC1sZXZlbCBlbnRpdGxlbWVudHMgKHB1cmNoYXNlZCBmZWF0dXJlIGJ1bmRsZXMg4oCUIGUuZy4gYXVkaXRfbG9nLCBzc28sXG4gIC8vIGFkdmFuY2VkX3JlcG9ydGluZywgdGVhbV91c2FnZV9hbmFseXRpY3MsIGNvbXBsaWFuY2Vfc3RhbmRhcmQvYWR2YW5jZWQpLlxuICAvLyBBcHBsaWVkIGJlZm9yZSBwZXItdXNlciBvdmVycmlkZXMgc28gYW4gZXhwbGljaXQgdXNlciBvdmVycmlkZSBzdGlsbCB3aW5zLlxuICBpZiAoYWNjb3VudEZlYXR1cmVzKSB7XG4gICAgZm9yIChjb25zdCBrZXkgb2YgYWNjb3VudEZlYXR1cmVzKSB7XG4gICAgICBpZiAoaXNWYWxpZEZlYXR1cmVGbGFnKGtleSkpIGZlYXR1cmVzLmFkZChrZXkpO1xuICAgIH1cbiAgfVxuXG4gIC8vIEFwcGx5IHBlci11c2VyIG92ZXJyaWRlc1xuICBpZiAoZmVhdHVyZU92ZXJyaWRlcykge1xuICAgIGZvciAoY29uc3QgW2tleSwgZW5hYmxlZF0gb2YgT2JqZWN0LmVudHJpZXMoZmVhdHVyZU92ZXJyaWRlcykpIHtcbiAgICAgIGlmICghaXNWYWxpZEZlYXR1cmVGbGFnKGtleSkpIGNvbnRpbnVlO1xuICAgICAgaWYgKGVuYWJsZWQpIHtcbiAgICAgICAgZmVhdHVyZXMuYWRkKGtleSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmZWF0dXJlcy5kZWxldGUoa2V5KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBSZXR1cm4gaW4gY2Fub25pY2FsIG9yZGVyXG4gIHJldHVybiBBTExfRkVBVFVSRV9GTEFHUy5maWx0ZXIoZiA9PiBmZWF0dXJlcy5oYXMoZikpO1xufVxuIl19
|
|
129
|
+
/**
|
|
130
|
+
* Curated compliance content sets and the feature flag each one is sold under.
|
|
131
|
+
* A set `x` is the published rules tagged `set:<x>`; an org holding the flag is
|
|
132
|
+
* entitled to them. Ordered from the lowest entitlement to the highest.
|
|
133
|
+
*/
|
|
134
|
+
export const COMPLIANCE_SET_FEATURES = {
|
|
135
|
+
standard: 'compliance_standard',
|
|
136
|
+
advanced: 'compliance_advanced',
|
|
137
|
+
};
|
|
138
|
+
/** Every curated set name, lowest entitlement first. */
|
|
139
|
+
export const COMPLIANCE_CONTENT_SETS = Object.keys(COMPLIANCE_SET_FEATURES);
|
|
140
|
+
/** The curated sets an effective feature set entitles (stable order). */
|
|
141
|
+
export function complianceSetsForFeatures(features) {
|
|
142
|
+
return COMPLIANCE_CONTENT_SETS.filter((set) => features.includes(COMPLIANCE_SET_FEATURES[set]));
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* The feature a published rule's `set:<x>` tags require, or `null` for an
|
|
146
|
+
* untagged (baseline) rule. The highest entitlement wins when a rule carries
|
|
147
|
+
* several. Accepts a raw jsonb `tags` value.
|
|
148
|
+
*/
|
|
149
|
+
export function complianceFeatureForTags(tags) {
|
|
150
|
+
const t = Array.isArray(tags) ? tags : [];
|
|
151
|
+
for (const set of [...COMPLIANCE_CONTENT_SETS].reverse()) {
|
|
152
|
+
if (t.includes(`set:${set}`))
|
|
153
|
+
return COMPLIANCE_SET_FEATURES[set];
|
|
154
|
+
}
|
|
155
|
+
return null;
|
|
156
|
+
}
|
|
157
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVhdHVyZS1mbGFncy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90eXBlcy9mZWF0dXJlLWZsYWdzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUF1Q3RDLGdFQUFnRTtBQUNoRSxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBMkI7SUFDdkQsa0JBQWtCO0lBQ2xCLGVBQWU7SUFDZixpQkFBaUI7SUFDakIscUJBQXFCO0lBQ3JCLEtBQUs7SUFDTCxvQkFBb0I7SUFDcEIsc0JBQXNCO0lBQ3RCLHFCQUFxQjtJQUNyQixxQkFBcUI7SUFDckIsb0JBQW9CO0NBQ3JCLENBQUM7QUFFRixxREFBcUQ7QUFDckQsTUFBTSxVQUFVLGtCQUFrQixDQUFDLEtBQWE7SUFDOUMsT0FBUSxpQkFBdUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDbEUsQ0FBQztBQUVELDBCQUEwQjtBQUUxQixpREFBaUQ7QUFDakQsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUE4QztJQUN0RSxTQUFTLEVBQUUsRUFBRTtJQUNiLEdBQUcsRUFBRSxDQUFDLGtCQUFrQixFQUFFLGVBQWUsRUFBRSxpQkFBaUIsQ0FBQztJQUM3RCxpRkFBaUY7SUFDakYsZ0ZBQWdGO0lBQ2hGLDhEQUE4RDtJQUM5RCxpREFBaUQ7SUFDakQsMkVBQTJFO0lBQzNFLElBQUksRUFBRSxDQUFDLGtCQUFrQixFQUFFLGVBQWUsRUFBRSxpQkFBaUIsRUFBRSxLQUFLLEVBQUUsb0JBQW9CLENBQUM7SUFDM0YsVUFBVSxFQUFFLENBQUMsR0FBRyxpQkFBaUIsQ0FBQztJQUNsQywrRUFBK0U7SUFDL0UsU0FBUyxFQUFFLENBQUMsR0FBRyxpQkFBaUIsQ0FBQztDQUNsQyxDQUFDO0FBRUYsaUNBQWlDO0FBRWpDLHFEQUFxRDtBQUNyRCxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBZ0U7SUFDM0YsZ0JBQWdCLEVBQUU7UUFDaEIsS0FBSyxF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QkFBdUIsQ0FBMkIsQ0FBQztBQUV0Ryx5RUFBeUU7QUFDekUsTUFBTSxVQUFVLHlCQUF5QixDQUFDLFFBQTJCO0lBQ25FLE9BQU8sdUJBQXVCLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLHVCQUF1QixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsRyxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSx3QkFBd0IsQ0FBQyxJQUFhO0lBQ3BELE1BQU0sQ0FBQyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQzFDLEtBQUssTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLHVCQUF1QixDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztRQUN6RCxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztZQUFFLE9BQU8sdUJBQXVCLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDcEUsQ0FBQztJQUNELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgdHlwZSB7IFF1b3RhVGllciB9IGZyb20gJy4vcXVvdGEtdGllcnMuanMnO1xuXG4vLyBGZWF0dXJlIGZsYWcgaWRlbnRpZmllcnNcblxuLyoqIENhbm9uaWNhbCBmZWF0dXJlIGZsYWcgaWRlbnRpZmllcnMuICovXG5leHBvcnQgdHlwZSBGZWF0dXJlRmxhZyA9XG4gIC8vIGBwcmlvcml0eV9zdXBwb3J0YCBhbmQgYGN1c3RvbV9pbnRlZ3JhdGlvbnNgIGFyZSBFTlRFUlBSSVNFLUVYQ0xVU0lWRVxuICAvLyBtYXJrZXRpbmcvZW50aXRsZW1lbnQgZmxhZ3M6IGdyYW50ZWQgb25seSBieSB0aGUgZW50ZXJwcmlzZSB0aWVyIChubyBhZGQtb25cbiAgLy8gYnVuZGxlIHNlbGxzIHRoZW0gdG8gYSBsb3dlciB0aWVyIOKAlCBpbnRlbnRpb25hbCwgdGhleSBhbmNob3IgdGhlIEVudGVycHJpc2VcbiAgLy8gcGxhbikgYW5kIG5vdCBjdXJyZW50bHkgYHJlcXVpcmVGZWF0dXJlYC1nYXRlZCBvbiBhbnkgcm91dGUgKHRoZXkgc3VyZmFjZSBpblxuICAvLyBwbGFuIG1hcmtldGluZyArIHRoZSBlbnRpdGxlbWVudCBzZXQ7IGVuZm9yY2VtZW50IGlzIGEgZnV0dXJlIGhvb2spLiBUaGlzIGlzXG4gIC8vIGJ5IGRlc2lnbiwgbm90IGRlYWQgY29kZSDigJQgZG8gbm90IFwiZml4XCIgYnkgd2lyaW5nIGEgYnVuZGxlIHdpdGhvdXQgYSBwcmljaW5nXG4gIC8vIGRlY2lzaW9uLiBDb250cmFzdCBgc3NvYC9gYWR2YW5jZWRfcmVwb3J0aW5nYCwgd2hpY2ggQVJFIHNvbGQgYXNcbiAgLy8gYWRkLW9uIGJ1bmRsZXMgYW5kIGdhdGVkIChzZWUgYmlsbGluZy1jb25maWcgYGxvYWRCdW5kbGVzYCArIGByZXF1aXJlRmVhdHVyZWApLlxuICB8ICdwcmlvcml0eV9zdXBwb3J0J1xuICB8ICdjdXN0b21faW50ZWdyYXRpb25zJ1xuICB8ICdhaV9nZW5lcmF0aW9uJ1xuICB8ICdidWxrX29wZXJhdGlvbnMnXG4gIHwgJ3NzbydcbiAgLy8gRE9SQSAvIGFkdmFuY2VkIGRlbGl2ZXJ5IGFuYWx5dGljcyAocGFpZCB0aWVycyBvbmx5KS5cbiAgfCAnYWR2YW5jZWRfcmVwb3J0aW5nJ1xuICAvLyBQZXItdGVhbSB1c2FnZSBicmVha2Rvd24gYWNyb3NzIHRoZSBvcmfihpJ0ZWFtIHN1YnRyZWUuIElOQ0xVREVEIGluIEVudGVycHJpc2U7XG4gIC8vIHNvbGQgYXMgYW4gYWRkLW9uIGJ1bmRsZSB0byBQcm8vVGVhbSAoc2VlIGJpbGxpbmctY29uZmlnIGB0ZWFtX3VzYWdlX2FuYWx5dGljc2ApLlxuICB8ICd0ZWFtX3VzYWdlX2FuYWx5dGljcydcbiAgLy8gQ3VyYXRlZCBjb21wbGlhbmNlIHJ1bGUgbGlicmFyaWVzIHNvbGQgYXMgYWRkLW9uIGJ1bmRsZXMuIGBjb21wbGlhbmNlX3N0YW5kYXJkYFxuICAvLyA9IENJL0NEIGJlc3QtcHJhY3RpY2Ugc2V0OyBgY29tcGxpYW5jZV9hZHZhbmNlZGAgPSBTT0MyL1BDSS9DSVMgZnJhbWV3b3JrXG4gIC8vIGxpYnJhcmllcyAocmVxdWlyZXMgU3RhbmRhcmQpLiBUaGVzZSBnYXRlIFNVQlNDUklCSU5HIHRvIHRoZSBzZXQncyBzeXN0ZW0tb3JnXG4gIC8vIHB1Ymxpc2hlZCBydWxlczsgSU5DTFVERUQgaW4gRW50ZXJwcmlzZS9VbmxpbWl0ZWQgKHZpYSBBTExfRkVBVFVSRV9GTEFHUyksXG4gIC8vIHNvbGQgdG8gRGV2ZWxvcGVyL1Byby9UZWFtIChzZWUgYmlsbGluZy1jb25maWcgYGNvbXBsaWFuY2Vfc3RhbmRhcmQvYWR2YW5jZWRgKS5cbiAgfCAnY29tcGxpYW5jZV9zdGFuZGFyZCdcbiAgfCAnY29tcGxpYW5jZV9hZHZhbmNlZCdcbiAgLy8gUGx1Z2luIGVjb3N5c3RlbTogdGhlIG9yZydzIHB1Ymxpc2hlciBpcyBFTElHSUJMRSB0byBhcHBseSBmb3IgVmVyaWZpZWRcbiAgLy8gc3RhdHVzIChkb2NzL3BsdWdpbi1wdWJsaXNoaW5nLm1kKS4gRWxpZ2liaWxpdHkgb25seSDigJQgdGhlIGJhZGdlXG4gIC8vIGlzIGF3YXJkZWQgKGFuZCB3aXRoZHJhd24pIGJ5IHN5c3RlbS1vcmcgcmV2aWV3LCBuZXZlciBib3VnaHQuIFRlYW0gYW5kIHVwO1xuICAvLyBubyBhZGQtb24gYnVuZGxlIHNlbGxzIGl0LlxuICB8ICd2ZXJpZmllZF9wdWJsaXNoZXInO1xuXG4vKiogQWxsIHZhbGlkIGZlYXR1cmUgZmxhZ3MgKG9yZGVyIGRldGVybWluZXMgZGlzcGxheSBvcmRlcikuICovXG5leHBvcnQgY29uc3QgQUxMX0ZFQVRVUkVfRkxBR1M6IHJlYWRvbmx5IEZlYXR1cmVGbGFnW10gPSBbXG4gICdwcmlvcml0eV9zdXBwb3J0JyxcbiAgJ2FpX2dlbmVyYXRpb24nLFxuICAnYnVsa19vcGVyYXRpb25zJyxcbiAgJ2N1c3RvbV9pbnRlZ3JhdGlvbnMnLFxuICAnc3NvJyxcbiAgJ2FkdmFuY2VkX3JlcG9ydGluZycsXG4gICd0ZWFtX3VzYWdlX2FuYWx5dGljcycsXG4gICdjb21wbGlhbmNlX3N0YW5kYXJkJyxcbiAgJ2NvbXBsaWFuY2VfYWR2YW5jZWQnLFxuICAndmVyaWZpZWRfcHVibGlzaGVyJyxcbl07XG5cbi8qKiBDaGVjayB3aGV0aGVyIGEgc3RyaW5nIGlzIGEgdmFsaWQgRmVhdHVyZUZsYWcuICovXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZEZlYXR1cmVGbGFnKHZhbHVlOiBzdHJpbmcpOiB2YWx1ZSBpcyBGZWF0dXJlRmxhZyB7XG4gIHJldHVybiAoQUxMX0ZFQVRVUkVfRkxBR1MgYXMgcmVhZG9ubHkgc3RyaW5nW10pLmluY2x1ZGVzKHZhbHVlKTtcbn1cblxuLy8gVGllci10by1mZWF0dXJlIG1hcHBpbmdcblxuLyoqIEZlYXR1cmVzIGVuYWJsZWQgYnkgZGVmYXVsdCBmb3IgZWFjaCB0aWVyLiAqL1xuZXhwb3J0IGNvbnN0IFRJRVJfRkVBVFVSRVM6IFJlY29yZDxRdW90YVRpZXIsIHJlYWRvbmx5IEZlYXR1cmVGbGFnW10+ID0ge1xuICBkZXZlbG9wZXI6IFtdLFxuICBwcm86IFsncHJpb3JpdHlfc3VwcG9ydCcsICdhaV9nZW5lcmF0aW9uJywgJ2J1bGtfb3BlcmF0aW9ucyddLFxuICAvLyBUZWFtIGFkZHMgc3NvIChTU08vSWRQIGlzIElOQ0xVREVEIGluIFRlYW0sIG5vdCBhbiBhZGQtb24pLiBhZHZhbmNlZF9yZXBvcnRpbmdcbiAgLy8gKERPUkEpIGlzIE5PVCBhIFRlYW0gdGllciBmZWF0dXJlIOKAlCBpdCdzIElOQ0xVREVEIG9ubHkgaW4gRW50ZXJwcmlzZSBhbmQgc29sZFxuICAvLyBhcyBhbiBhZGQtb24gYnVuZGxlIHRvIGV2ZXJ5IG90aGVyIHRpZXIgKHNlZSBiaWxsaW5nLWNvbmZpZ1xuICAvLyBgYWR2YW5jZWRfcmVwb3J0aW5nYCkuIEVudGVycHJpc2UgdW5sb2NrcyBhbGwuXG4gIC8vIGB2ZXJpZmllZF9wdWJsaXNoZXJgIChlbGlnaWJpbGl0eSB0byBhcHBseSBmb3IgVmVyaWZpZWQpIHN0YXJ0cyBhdCBUZWFtLlxuICB0ZWFtOiBbJ3ByaW9yaXR5X3N1cHBvcnQnLCAnYWlfZ2VuZXJhdGlvbicsICdidWxrX29wZXJhdGlvbnMnLCAnc3NvJywgJ3ZlcmlmaWVkX3B1Ymxpc2hlciddLFxuICBlbnRlcnByaXNlOiBbLi4uQUxMX0ZFQVRVUkVfRkxBR1NdLFxuICAvLyBVbmxpbWl0ZWQgaW5jbHVkZXMgZXZlcnkgZmVhdHVyZSAvIGFkZC1vbiBidW5kbGUgKGJpbGxpbmctZGlzYWJsZWQgZGVmYXVsdCkuXG4gIHVubGltaXRlZDogWy4uLkFMTF9GRUFUVVJFX0ZMQUdTXSxcbn07XG5cbi8vIEZlYXR1cmUgbWV0YWRhdGEgKGZvciBkaXNwbGF5KVxuXG4vKiogSHVtYW4tcmVhZGFibGUgbWV0YWRhdGEgZm9yIGVhY2ggZmVhdHVyZSBmbGFnLiAqL1xuZXhwb3J0IGNvbnN0IEZFQVRVUkVfTUVUQURBVEE6IFJlY29yZDxGZWF0dXJlRmxhZywgeyBsYWJlbDogc3RyaW5nOyBkZXNjcmlwdGlvbjogc3RyaW5nIH0+ID0ge1xuICBwcmlvcml0eV9zdXBwb3J0OiB7XG4gICAgbGFiZWw6ICdQcmlvcml0eSBTdXBwb3J0JyxcbiAgICBkZXNjcmlwdGlvbjogJ0Zhc3RlciByZXNwb25zZSB0aW1lcyBhbmQgZGVkaWNhdGVkIHN1cHBvcnQgY2hhbm5lbHMnLFxuICB9LFxuICBhaV9nZW5lcmF0aW9uOiB7XG4gICAgbGFiZWw6ICdBSSBHZW5lcmF0aW9uJyxcbiAgICBkZXNjcmlwdGlvbjogJ0FJLXBvd2VyZWQgcGlwZWxpbmUgYW5kIHBsdWdpbiBnZW5lcmF0aW9uJyxcbiAgfSxcbiAgYnVsa19vcGVyYXRpb25zOiB7XG4gICAgbGFiZWw6ICdCdWxrIE9wZXJhdGlvbnMnLFxuICAgIGRlc2NyaXB0aW9uOiAnQmF0Y2ggY3JlYXRlLCB1cGRhdGUsIGFuZCBkZWxldGUgZm9yIHBpcGVsaW5lcyBhbmQgcGx1Z2lucycsXG4gIH0sXG4gIGN1c3RvbV9pbnRlZ3JhdGlvbnM6IHtcbiAgICBsYWJlbDogJ0N1c3RvbSBJbnRlZ3JhdGlvbnMnLFxuICAgIGRlc2NyaXB0aW9uOiAnQ29ubmVjdCB0byBleHRlcm5hbCBzZXJ2aWNlcyBhbmQgY3VzdG9tIHdlYmhvb2sgZW5kcG9pbnRzJyxcbiAgfSxcbiAgc3NvOiB7XG4gICAgbGFiZWw6ICdTU08gLyBJZFAnLFxuICAgIGRlc2NyaXB0aW9uOiAnU2luZ2xlIHNpZ24tb24gYW5kIGV4dGVybmFsIGlkZW50aXR5LXByb3ZpZGVyIGNvbmZpZ3VyYXRpb25zJyxcbiAgfSxcbiAgYWR2YW5jZWRfcmVwb3J0aW5nOiB7XG4gICAgbGFiZWw6ICdBZHZhbmNlZCBSZXBvcnRpbmcnLFxuICAgIGRlc2NyaXB0aW9uOiAnRE9SQSAvIGFkdmFuY2VkIGRlbGl2ZXJ5IGFuYWx5dGljcycsXG4gIH0sXG4gIHRlYW1fdXNhZ2VfYW5hbHl0aWNzOiB7XG4gICAgbGFiZWw6ICdUZWFtIFVzYWdlIEFuYWx5dGljcycsXG4gICAgZGVzY3JpcHRpb246ICdQZXItdGVhbSB1c2FnZSBicmVha2Rvd24gYWNyb3NzIHRoZSBvcmcg4oaSIHRlYW0gc3VidHJlZScsXG4gIH0sXG4gIGNvbXBsaWFuY2Vfc3RhbmRhcmQ6IHtcbiAgICBsYWJlbDogJ1N0YW5kYXJkIENvbXBsaWFuY2UnLFxuICAgIGRlc2NyaXB0aW9uOiAnQ3VyYXRlZCBDSS9DRCBiZXN0LXByYWN0aWNlIGNvbXBsaWFuY2UgcnVsZSBsaWJyYXJ5JyxcbiAgfSxcbiAgY29tcGxpYW5jZV9hZHZhbmNlZDoge1xuICAgIGxhYmVsOiAnQWR2YW5jZWQgQ29tcGxpYW5jZScsXG4gICAgZGVzY3JpcHRpb246ICdDdXJhdGVkIGZyYW1ld29yayBjb21wbGlhbmNlIGxpYnJhcmllcyAoU09DMiAvIFBDSS1EU1MgLyBDSVMpJyxcbiAgfSxcbiAgdmVyaWZpZWRfcHVibGlzaGVyOiB7XG4gICAgbGFiZWw6ICdWZXJpZmllZCBQdWJsaXNoZXIgRWxpZ2liaWxpdHknLFxuICAgIGRlc2NyaXB0aW9uOiAnQXBwbHkgZm9yIHRoZSBWZXJpZmllZCBiYWRnZSBvbiB5b3VyIHBsdWdpbi1lY29zeXN0ZW0gcHVibGlzaGVyIChhd2FyZGVkIGJ5IHN5c3RlbS1vcmcgcmV2aWV3KScsXG4gIH0sXG59O1xuXG4vLyBSZXNvbHV0aW9uIGxvZ2ljXG5cbi8qKlxuICogUmVzb2x2ZSBhIHVzZXIncyBlZmZlY3RpdmUgZmVhdHVyZSBzZXQuXG4gKlxuICogMS4gU3lzYWRtaW5zIChpc1N1cGVyQWRtaW4pIGFsd2F5cyBnZXQgQUxMIGZlYXR1cmVzLlxuICogMi4gU3RhcnQgd2l0aCB0aGUgdGllcidzIGRlZmF1bHQgZmVhdHVyZXMuXG4gKiAzLiBBcHBseSBwZXItdXNlciBvdmVycmlkZXM6IGB0cnVlYCBhZGRzIGEgZmVhdHVyZSwgYGZhbHNlYCByZW1vdmVzIGl0LlxuICogNC4gSW52YWxpZCBvdmVycmlkZSBrZXlzIGFyZSBzaWxlbnRseSBpZ25vcmVkLlxuICpcbiAqIEBwYXJhbSB0aWVyIC0gVGhlIG9yZ2FuaXphdGlvbidzIHF1b3RhIHRpZXJcbiAqIEBwYXJhbSBvcHRzIC0gUmVzb2x1dGlvbiBvcHRpb25zOlxuICogICAtIGBvdmVycmlkZXNgOiBwZXItdXNlciBvdmVycmlkZXMgKGtleSA9IGZlYXR1cmUgZmxhZywgdmFsdWUgPSBlbmFibGVkKVxuICogICAtIGBpc1N1cGVyQWRtaW5gOiB3aGV0aGVyIHRoZSB1c2VyIGhhcyB0aGUgZ2xvYmFsIHN1cGVyLWFkbWluIGZsYWdcbiAqICAgLSBgYWNjb3VudEZlYXR1cmVzYDogYWNjb3VudC1sZXZlbCBlbnRpdGxlbWVudHMgKGUuZy4gcHVyY2hhc2VkIGFkZC1vblxuICogICAgIGJ1bmRsZXMpLiBBIE5BTUVEIGZpZWxkIHNvIGl0IGNhbiBuZXZlciBiZSBzaWxlbnRseSBkcm9wcGVkIGJ5IGEgY2FsbGVyXG4gKiAgICAgdGhhdCBvbWl0cyBhIHRyYWlsaW5nIHBvc2l0aW9uYWwgYXJnLlxuICogQHJldHVybnMgU29ydGVkIGFycmF5IG9mIGVuYWJsZWQgZmVhdHVyZSBmbGFnc1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZVVzZXJGZWF0dXJlcyhcbiAgdGllcjogUXVvdGFUaWVyLFxuICBvcHRzPzoge1xuICAgIG92ZXJyaWRlcz86IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+IHwgbnVsbDtcbiAgICBpc1N1cGVyQWRtaW4/OiBib29sZWFuO1xuICAgIGFjY291bnRGZWF0dXJlcz86IHJlYWRvbmx5IHN0cmluZ1tdIHwgbnVsbDtcbiAgfSxcbik6IEZlYXR1cmVGbGFnW10ge1xuICBjb25zdCB7IG92ZXJyaWRlczogZmVhdHVyZU92ZXJyaWRlcywgaXNTdXBlckFkbWluLCBhY2NvdW50RmVhdHVyZXMgfSA9IG9wdHMgPz8ge307XG5cbiAgLy8gU3lzYWRtaW5zIGdldCBldmVyeXRoaW5nIHJlZ2FyZGxlc3Mgb2YgdGllci5cbiAgaWYgKGlzU3VwZXJBZG1pbikgcmV0dXJuIFsuLi5BTExfRkVBVFVSRV9GTEFHU107XG5cbiAgLy8gU3RhcnQgd2l0aCB0aWVyIGRlZmF1bHRzXG4gIGNvbnN0IGZlYXR1cmVzID0gbmV3IFNldDxGZWF0dXJlRmxhZz4oVElFUl9GRUFUVVJFU1t0aWVyXSA/PyBbXSk7XG5cbiAgLy8gQWNjb3VudC1sZXZlbCBlbnRpdGxlbWVudHMgKHB1cmNoYXNlZCBmZWF0dXJlIGJ1bmRsZXMg4oCUIGUuZy4gYXVkaXRfbG9nLCBzc28sXG4gIC8vIGFkdmFuY2VkX3JlcG9ydGluZywgdGVhbV91c2FnZV9hbmFseXRpY3MsIGNvbXBsaWFuY2Vfc3RhbmRhcmQvYWR2YW5jZWQpLlxuICAvLyBBcHBsaWVkIGJlZm9yZSBwZXItdXNlciBvdmVycmlkZXMgc28gYW4gZXhwbGljaXQgdXNlciBvdmVycmlkZSBzdGlsbCB3aW5zLlxuICBpZiAoYWNjb3VudEZlYXR1cmVzKSB7XG4gICAgZm9yIChjb25zdCBrZXkgb2YgYWNjb3VudEZlYXR1cmVzKSB7XG4gICAgICBpZiAoaXNWYWxpZEZlYXR1cmVGbGFnKGtleSkpIGZlYXR1cmVzLmFkZChrZXkpO1xuICAgIH1cbiAgfVxuXG4gIC8vIEFwcGx5IHBlci11c2VyIG92ZXJyaWRlc1xuICBpZiAoZmVhdHVyZU92ZXJyaWRlcykge1xuICAgIGZvciAoY29uc3QgW2tleSwgZW5hYmxlZF0gb2YgT2JqZWN0LmVudHJpZXMoZmVhdHVyZU92ZXJyaWRlcykpIHtcbiAgICAgIGlmICghaXNWYWxpZEZlYXR1cmVGbGFnKGtleSkpIGNvbnRpbnVlO1xuICAgICAgaWYgKGVuYWJsZWQpIHtcbiAgICAgICAgZmVhdHVyZXMuYWRkKGtleSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmZWF0dXJlcy5kZWxldGUoa2V5KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBSZXR1cm4gaW4gY2Fub25pY2FsIG9yZGVyXG4gIHJldHVybiBBTExfRkVBVFVSRV9GTEFHUy5maWx0ZXIoZiA9PiBmZWF0dXJlcy5oYXMoZikpO1xufVxuXG4vKipcbiAqIEN1cmF0ZWQgY29tcGxpYW5jZSBjb250ZW50IHNldHMgYW5kIHRoZSBmZWF0dXJlIGZsYWcgZWFjaCBvbmUgaXMgc29sZCB1bmRlci5cbiAqIEEgc2V0IGB4YCBpcyB0aGUgcHVibGlzaGVkIHJ1bGVzIHRhZ2dlZCBgc2V0Ojx4PmA7IGFuIG9yZyBob2xkaW5nIHRoZSBmbGFnIGlzXG4gKiBlbnRpdGxlZCB0byB0aGVtLiBPcmRlcmVkIGZyb20gdGhlIGxvd2VzdCBlbnRpdGxlbWVudCB0byB0aGUgaGlnaGVzdC5cbiAqL1xuZXhwb3J0IGNvbnN0IENPTVBMSUFOQ0VfU0VUX0ZFQVRVUkVTID0ge1xuICBzdGFuZGFyZDogJ2NvbXBsaWFuY2Vfc3RhbmRhcmQnLFxuICBhZHZhbmNlZDogJ2NvbXBsaWFuY2VfYWR2YW5jZWQnLFxufSBhcyBjb25zdCBzYXRpc2ZpZXMgUmVjb3JkPHN0cmluZywgRmVhdHVyZUZsYWc+O1xuXG5leHBvcnQgdHlwZSBDb21wbGlhbmNlQ29udGVudFNldCA9IGtleW9mIHR5cGVvZiBDT01QTElBTkNFX1NFVF9GRUFUVVJFUztcblxuLyoqIEV2ZXJ5IGN1cmF0ZWQgc2V0IG5hbWUsIGxvd2VzdCBlbnRpdGxlbWVudCBmaXJzdC4gKi9cbmV4cG9ydCBjb25zdCBDT01QTElBTkNFX0NPTlRFTlRfU0VUUyA9IE9iamVjdC5rZXlzKENPTVBMSUFOQ0VfU0VUX0ZFQVRVUkVTKSBhcyBDb21wbGlhbmNlQ29udGVudFNldFtdO1xuXG4vKiogVGhlIGN1cmF0ZWQgc2V0cyBhbiBlZmZlY3RpdmUgZmVhdHVyZSBzZXQgZW50aXRsZXMgKHN0YWJsZSBvcmRlcikuICovXG5leHBvcnQgZnVuY3Rpb24gY29tcGxpYW5jZVNldHNGb3JGZWF0dXJlcyhmZWF0dXJlczogcmVhZG9ubHkgc3RyaW5nW10pOiBDb21wbGlhbmNlQ29udGVudFNldFtdIHtcbiAgcmV0dXJuIENPTVBMSUFOQ0VfQ09OVEVOVF9TRVRTLmZpbHRlcigoc2V0KSA9PiBmZWF0dXJlcy5pbmNsdWRlcyhDT01QTElBTkNFX1NFVF9GRUFUVVJFU1tzZXRdKSk7XG59XG5cbi8qKlxuICogVGhlIGZlYXR1cmUgYSBwdWJsaXNoZWQgcnVsZSdzIGBzZXQ6PHg+YCB0YWdzIHJlcXVpcmUsIG9yIGBudWxsYCBmb3IgYW5cbiAqIHVudGFnZ2VkIChiYXNlbGluZSkgcnVsZS4gVGhlIGhpZ2hlc3QgZW50aXRsZW1lbnQgd2lucyB3aGVuIGEgcnVsZSBjYXJyaWVzXG4gKiBzZXZlcmFsLiBBY2NlcHRzIGEgcmF3IGpzb25iIGB0YWdzYCB2YWx1ZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXBsaWFuY2VGZWF0dXJlRm9yVGFncyh0YWdzOiB1bmtub3duKTogRmVhdHVyZUZsYWcgfCBudWxsIHtcbiAgY29uc3QgdCA9IEFycmF5LmlzQXJyYXkodGFncykgPyB0YWdzIDogW107XG4gIGZvciAoY29uc3Qgc2V0IG9mIFsuLi5DT01QTElBTkNFX0NPTlRFTlRfU0VUU10ucmV2ZXJzZSgpKSB7XG4gICAgaWYgKHQuaW5jbHVkZXMoYHNldDoke3NldH1gKSkgcmV0dXJuIENPTVBMSUFOQ0VfU0VUX0ZFQVRVUkVTW3NldF07XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG4iXX0=
|
package/lib/types/index.d.ts
CHANGED
|
@@ -1,12 +1,17 @@
|
|
|
1
|
-
export
|
|
2
|
-
export
|
|
1
|
+
export { ErrorCode, getStatusForErrorCode } from './error-codes.js';
|
|
2
|
+
export { isValidQuotaType, type TokenScope, TOKEN_SCOPES, type PrincipalType, type TokenUse, type AuthMethod, type AssuranceLevel, type QuotaType, VALID_QUOTA_TYPES, type QuotaCheckResult, type QuotaInfo, type ApiResponse, type JwtPayload, type HealthCheckResponse, } from './common.js';
|
|
3
3
|
export * from './pipeline.js';
|
|
4
|
-
export
|
|
5
|
-
export
|
|
4
|
+
export { type Lifecycle, type Criticality, type OwnerType, type EntityLink, type EntityLabels, } from './catalog-metadata.js';
|
|
5
|
+
export { type TemplateInput, } from './pipeline-template.js';
|
|
6
6
|
export * from './visibility.js';
|
|
7
|
-
export * from './
|
|
8
|
-
export
|
|
7
|
+
export * from './wire-vocabulary.js';
|
|
8
|
+
export { PLUGIN_SUMMARY_MAX, PLUGIN_README_MAX_BYTES, PLUGIN_CHANGELOG_MAX_BYTES, PLUGIN_CATEGORIES, type PluginCatalogCategory, PLUGIN_CATALOG_FIELDS, type PluginCatalogField, PLUGIN_CATALOG_LINK_FIELDS, METADATA_SOURCES, type MetadataSource, type MetadataSources, } from './plugin-catalog.js';
|
|
9
|
+
export { type HttpRequest, } from './http.js';
|
|
10
|
+
export { tierAllowsTeams, isBillingEnabled, isValidTier, getTierLimits, type QuotaTier, type QuotaTierLimits, QUOTA_TIERS, VALID_TIERS, STANDARD_TIERS, TEAM_CAPABLE_TIERS, DEFAULT_TIER, QUOTA_RESET_DAYS, nextQuotaResetDate, } from './quota-tiers.js';
|
|
9
11
|
export * from './feature-flags.js';
|
|
10
|
-
export
|
|
11
|
-
export
|
|
12
|
-
export
|
|
12
|
+
export { permissionLabel, isValidPermission, isSystemOrgOnlyPermission, isOrgAssignablePermission, normalizePermissionSubset, intersectPermissions, resolveUserPermissions, confinePermissionsToOrg, hasPermission, type Permission, ALL_PERMISSIONS, PERMISSION_GATES, PERMISSION_CATALOG, SUPERADMIN_ONLY_PERMISSIONS, SYSTEM_ORG_ONLY_PERMISSIONS, ORG_ASSIGNABLE_PERMISSIONS, ORG_ASSIGNABLE_CATEGORIES, READ_ONLY_PERMISSIONS, ROLE_PERMISSIONS, ECOSYSTEM_MANAGER_PERMISSIONS, } from './permissions.js';
|
|
13
|
+
export { METADATA_KEY_CATALOG, MetadataKeys, type MetadataKey, type MetadataKeyOption, METADATA_KEY_GROUPS, } from './metadata-keys.js';
|
|
14
|
+
export { type AuditEvent, } from './audit-events.js';
|
|
15
|
+
export { isEcosystemNotificationEvent, parseEcosystemNotifyRequest, nextEcosystemDigestTime, renderEcosystemManagerChange, renderEcosystemDigest, type EcosystemNotificationEventId, type EcosystemNotificationChannel, ECOSYSTEM_EMAIL_PREFERENCE_FIELDS, type EcosystemEmailPreferenceField, ECOSYSTEM_EMAIL_PREFERENCE_FIELD_NAMES, ECOSYSTEM_NOTIFICATION_EVENTS, type EcosystemRecipientSpec, type EcosystemNotifyRequest, } from './ecosystem-notifications.js';
|
|
16
|
+
export { publisherTermsVersion, publisherHandleProblem, isOfficialAutoApprovalEnabled, isPluginPublishingEnabled, isAnonymousSubmissionsEnabled, isPluginReviewsEnabled, OFFICIAL_CATALOG_LOADER_ACCOUNT, DEFAULT_PUBLISHER_TERMS_VERSION, BUILTIN_RESERVED_HANDLES, TENANT_REQUEST_KINDS, PUBLISH_PERMISSION_REQUEST_KINDS, VERIFY_REQUEST_KINDS, STEP_UP_REQUEST_KINDS, REQUEST_SLA_HOURS, } from './ecosystem.js';
|
|
17
|
+
export { ageScore, vulnScore, computeHealthScore, publisherHealthScore, publisherSuccessRate, healthBand, HEALTH_COMPONENTS, HEALTH_WEIGHTS, type HealthBreakdown, type HealthResult, type HealthInputs, type HealthBand, } from './plugin-health.js';
|
package/lib/types/index.js
CHANGED
|
@@ -1,15 +1,20 @@
|
|
|
1
1
|
// Copyright 2026 Pipeline Builder Contributors
|
|
2
2
|
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
-
export
|
|
4
|
-
export
|
|
3
|
+
export { ErrorCode, getStatusForErrorCode } from './error-codes.js';
|
|
4
|
+
export { isValidQuotaType, TOKEN_SCOPES, VALID_QUOTA_TYPES, } from './common.js';
|
|
5
5
|
export * from './pipeline.js';
|
|
6
|
-
export
|
|
7
|
-
export
|
|
6
|
+
export {} from './catalog-metadata.js';
|
|
7
|
+
export {} from './pipeline-template.js';
|
|
8
8
|
export * from './visibility.js';
|
|
9
|
-
export * from './
|
|
10
|
-
export
|
|
9
|
+
export * from './wire-vocabulary.js';
|
|
10
|
+
export { PLUGIN_SUMMARY_MAX, PLUGIN_README_MAX_BYTES, PLUGIN_CHANGELOG_MAX_BYTES, PLUGIN_CATEGORIES, PLUGIN_CATALOG_FIELDS, PLUGIN_CATALOG_LINK_FIELDS, METADATA_SOURCES, } from './plugin-catalog.js';
|
|
11
|
+
export {} from './http.js';
|
|
12
|
+
export { tierAllowsTeams, isBillingEnabled, isValidTier, getTierLimits, QUOTA_TIERS, VALID_TIERS, STANDARD_TIERS, TEAM_CAPABLE_TIERS, DEFAULT_TIER, QUOTA_RESET_DAYS, nextQuotaResetDate, } from './quota-tiers.js';
|
|
11
13
|
export * from './feature-flags.js';
|
|
12
|
-
export
|
|
13
|
-
export
|
|
14
|
-
export
|
|
15
|
-
|
|
14
|
+
export { permissionLabel, isValidPermission, isSystemOrgOnlyPermission, isOrgAssignablePermission, normalizePermissionSubset, intersectPermissions, resolveUserPermissions, confinePermissionsToOrg, hasPermission, ALL_PERMISSIONS, PERMISSION_GATES, PERMISSION_CATALOG, SUPERADMIN_ONLY_PERMISSIONS, SYSTEM_ORG_ONLY_PERMISSIONS, ORG_ASSIGNABLE_PERMISSIONS, ORG_ASSIGNABLE_CATEGORIES, READ_ONLY_PERMISSIONS, ROLE_PERMISSIONS, ECOSYSTEM_MANAGER_PERMISSIONS, } from './permissions.js';
|
|
15
|
+
export { METADATA_KEY_CATALOG, MetadataKeys, METADATA_KEY_GROUPS, } from './metadata-keys.js';
|
|
16
|
+
export {} from './audit-events.js';
|
|
17
|
+
export { isEcosystemNotificationEvent, parseEcosystemNotifyRequest, nextEcosystemDigestTime, renderEcosystemManagerChange, renderEcosystemDigest, ECOSYSTEM_EMAIL_PREFERENCE_FIELDS, ECOSYSTEM_EMAIL_PREFERENCE_FIELD_NAMES, ECOSYSTEM_NOTIFICATION_EVENTS, } from './ecosystem-notifications.js';
|
|
18
|
+
export { publisherTermsVersion, publisherHandleProblem, isOfficialAutoApprovalEnabled, isPluginPublishingEnabled, isAnonymousSubmissionsEnabled, isPluginReviewsEnabled, OFFICIAL_CATALOG_LOADER_ACCOUNT, DEFAULT_PUBLISHER_TERMS_VERSION, BUILTIN_RESERVED_HANDLES, TENANT_REQUEST_KINDS, PUBLISH_PERMISSION_REQUEST_KINDS, VERIFY_REQUEST_KINDS, STEP_UP_REQUEST_KINDS, REQUEST_SLA_HOURS, } from './ecosystem.js';
|
|
19
|
+
export { ageScore, vulnScore, computeHealthScore, publisherHealthScore, publisherSuccessRate, healthBand, HEALTH_COMPONENTS, HEALTH_WEIGHTS, } from './plugin-health.js';
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHlwZXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0QyxPQUFPLEVBQUUsU0FBUyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDcEUsT0FBTyxFQUNMLGdCQUFnQixFQUVoQixZQUFZLEVBTVosaUJBQWlCLEdBTWxCLE1BQU0sYUFBYSxDQUFDO0FBQ3JCLGNBQWMsZUFBZSxDQUFDO0FBQzlCLE9BQU8sRUFNTixNQUFNLHVCQUF1QixDQUFDO0FBQy9CLE9BQU8sRUFFTixNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLGNBQWMsaUJBQWlCLENBQUM7QUFDaEMsY0FBYyxzQkFBc0IsQ0FBQztBQUNyQyxPQUFPLEVBQ0wsa0JBQWtCLEVBQ2xCLHVCQUF1QixFQUN2QiwwQkFBMEIsRUFDMUIsaUJBQWlCLEVBRWpCLHFCQUFxQixFQUVyQiwwQkFBMEIsRUFDMUIsZ0JBQWdCLEdBR2pCLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUVOLE1BQU0sV0FBVyxDQUFDO0FBQ25CLE9BQU8sRUFDTCxlQUFlLEVBQ2YsZ0JBQWdCLEVBQ2hCLFdBQVcsRUFDWCxhQUFhLEVBR2IsV0FBVyxFQUNYLFdBQVcsRUFDWCxjQUFjLEVBQ2Qsa0JBQWtCLEVBQ2xCLFlBQVksRUFDWixnQkFBZ0IsRUFDaEIsa0JBQWtCLEdBQ25CLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxPQUFPLEVBQ0wsZUFBZSxFQUNmLGlCQUFpQixFQUNqQix5QkFBeUIsRUFDekIseUJBQXlCLEVBQ3pCLHlCQUF5QixFQUN6QixvQkFBb0IsRUFDcEIsc0JBQXNCLEVBQ3RCLHVCQUF1QixFQUN2QixhQUFhLEVBRWIsZUFBZSxFQUNmLGdCQUFnQixFQUNoQixrQkFBa0IsRUFDbEIsMkJBQTJCLEVBQzNCLDJCQUEyQixFQUMzQiwwQkFBMEIsRUFDMUIseUJBQXlCLEVBQ3pCLHFCQUFxQixFQUNyQixnQkFBZ0IsRUFDaEIsNkJBQTZCLEdBQzlCLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxFQUNMLG9CQUFvQixFQUNwQixZQUFZLEVBR1osbUJBQW1CLEdBQ3BCLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUVOLE1BQU0sbUJBQW1CLENBQUM7QUFDM0IsT0FBTyxFQUNMLDRCQUE0QixFQUM1QiwyQkFBMkIsRUFDM0IsdUJBQXVCLEVBQ3ZCLDRCQUE0QixFQUM1QixxQkFBcUIsRUFHckIsaUNBQWlDLEVBRWpDLHNDQUFzQyxFQUN0Qyw2QkFBNkIsR0FHOUIsTUFBTSw4QkFBOEIsQ0FBQztBQUN0QyxPQUFPLEVBQ0wscUJBQXFCLEVBQ3JCLHNCQUFzQixFQUN0Qiw2QkFBNkIsRUFDN0IseUJBQXlCLEVBQ3pCLDZCQUE2QixFQUM3QixzQkFBc0IsRUFDdEIsK0JBQStCLEVBQy9CLCtCQUErQixFQUMvQix3QkFBd0IsRUFDeEIsb0JBQW9CLEVBQ3BCLGdDQUFnQyxFQUNoQyxvQkFBb0IsRUFDcEIscUJBQXFCLEVBQ3JCLGlCQUFpQixHQUNsQixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFDTCxRQUFRLEVBQ1IsU0FBUyxFQUNULGtCQUFrQixFQUNsQixvQkFBb0IsRUFDcEIsb0JBQW9CLEVBQ3BCLFVBQVUsRUFDVixpQkFBaUIsRUFDakIsY0FBYyxHQUtmLE1BQU0sb0JBQW9CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuZXhwb3J0IHsgRXJyb3JDb2RlLCBnZXRTdGF0dXNGb3JFcnJvckNvZGUgfSBmcm9tICcuL2Vycm9yLWNvZGVzLmpzJztcbmV4cG9ydCB7XG4gIGlzVmFsaWRRdW90YVR5cGUsXG4gIHR5cGUgVG9rZW5TY29wZSxcbiAgVE9LRU5fU0NPUEVTLFxuICB0eXBlIFByaW5jaXBhbFR5cGUsXG4gIHR5cGUgVG9rZW5Vc2UsXG4gIHR5cGUgQXV0aE1ldGhvZCxcbiAgdHlwZSBBc3N1cmFuY2VMZXZlbCxcbiAgdHlwZSBRdW90YVR5cGUsXG4gIFZBTElEX1FVT1RBX1RZUEVTLFxuICB0eXBlIFF1b3RhQ2hlY2tSZXN1bHQsXG4gIHR5cGUgUXVvdGFJbmZvLFxuICB0eXBlIEFwaVJlc3BvbnNlLFxuICB0eXBlIEp3dFBheWxvYWQsXG4gIHR5cGUgSGVhbHRoQ2hlY2tSZXNwb25zZSxcbn0gZnJvbSAnLi9jb21tb24uanMnO1xuZXhwb3J0ICogZnJvbSAnLi9waXBlbGluZS5qcyc7XG5leHBvcnQge1xuICB0eXBlIExpZmVjeWNsZSxcbiAgdHlwZSBDcml0aWNhbGl0eSxcbiAgdHlwZSBPd25lclR5cGUsXG4gIHR5cGUgRW50aXR5TGluayxcbiAgdHlwZSBFbnRpdHlMYWJlbHMsXG59IGZyb20gJy4vY2F0YWxvZy1tZXRhZGF0YS5qcyc7XG5leHBvcnQge1xuICB0eXBlIFRlbXBsYXRlSW5wdXQsXG59IGZyb20gJy4vcGlwZWxpbmUtdGVtcGxhdGUuanMnO1xuZXhwb3J0ICogZnJvbSAnLi92aXNpYmlsaXR5LmpzJztcbmV4cG9ydCAqIGZyb20gJy4vd2lyZS12b2NhYnVsYXJ5LmpzJztcbmV4cG9ydCB7XG4gIFBMVUdJTl9TVU1NQVJZX01BWCxcbiAgUExVR0lOX1JFQURNRV9NQVhfQllURVMsXG4gIFBMVUdJTl9DSEFOR0VMT0dfTUFYX0JZVEVTLFxuICBQTFVHSU5fQ0FURUdPUklFUyxcbiAgdHlwZSBQbHVnaW5DYXRhbG9nQ2F0ZWdvcnksXG4gIFBMVUdJTl9DQVRBTE9HX0ZJRUxEUyxcbiAgdHlwZSBQbHVnaW5DYXRhbG9nRmllbGQsXG4gIFBMVUdJTl9DQVRBTE9HX0xJTktfRklFTERTLFxuICBNRVRBREFUQV9TT1VSQ0VTLFxuICB0eXBlIE1ldGFkYXRhU291cmNlLFxuICB0eXBlIE1ldGFkYXRhU291cmNlcyxcbn0gZnJvbSAnLi9wbHVnaW4tY2F0YWxvZy5qcyc7XG5leHBvcnQge1xuICB0eXBlIEh0dHBSZXF1ZXN0LFxufSBmcm9tICcuL2h0dHAuanMnO1xuZXhwb3J0IHtcbiAgdGllckFsbG93c1RlYW1zLFxuICBpc0JpbGxpbmdFbmFibGVkLFxuICBpc1ZhbGlkVGllcixcbiAgZ2V0VGllckxpbWl0cyxcbiAgdHlwZSBRdW90YVRpZXIsXG4gIHR5cGUgUXVvdGFUaWVyTGltaXRzLFxuICBRVU9UQV9USUVSUyxcbiAgVkFMSURfVElFUlMsXG4gIFNUQU5EQVJEX1RJRVJTLFxuICBURUFNX0NBUEFCTEVfVElFUlMsXG4gIERFRkFVTFRfVElFUixcbiAgUVVPVEFfUkVTRVRfREFZUyxcbiAgbmV4dFF1b3RhUmVzZXREYXRlLFxufSBmcm9tICcuL3F1b3RhLXRpZXJzLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vZmVhdHVyZS1mbGFncy5qcyc7XG5leHBvcnQge1xuICBwZXJtaXNzaW9uTGFiZWwsXG4gIGlzVmFsaWRQZXJtaXNzaW9uLFxuICBpc1N5c3RlbU9yZ09ubHlQZXJtaXNzaW9uLFxuICBpc09yZ0Fzc2lnbmFibGVQZXJtaXNzaW9uLFxuICBub3JtYWxpemVQZXJtaXNzaW9uU3Vic2V0LFxuICBpbnRlcnNlY3RQZXJtaXNzaW9ucyxcbiAgcmVzb2x2ZVVzZXJQZXJtaXNzaW9ucyxcbiAgY29uZmluZVBlcm1pc3Npb25zVG9PcmcsXG4gIGhhc1Blcm1pc3Npb24sXG4gIHR5cGUgUGVybWlzc2lvbixcbiAgQUxMX1BFUk1JU1NJT05TLFxuICBQRVJNSVNTSU9OX0dBVEVTLFxuICBQRVJNSVNTSU9OX0NBVEFMT0csXG4gIFNVUEVSQURNSU5fT05MWV9QRVJNSVNTSU9OUyxcbiAgU1lTVEVNX09SR19PTkxZX1BFUk1JU1NJT05TLFxuICBPUkdfQVNTSUdOQUJMRV9QRVJNSVNTSU9OUyxcbiAgT1JHX0FTU0lHTkFCTEVfQ0FURUdPUklFUyxcbiAgUkVBRF9PTkxZX1BFUk1JU1NJT05TLFxuICBST0xFX1BFUk1JU1NJT05TLFxuICBFQ09TWVNURU1fTUFOQUdFUl9QRVJNSVNTSU9OUyxcbn0gZnJvbSAnLi9wZXJtaXNzaW9ucy5qcyc7XG5leHBvcnQge1xuICBNRVRBREFUQV9LRVlfQ0FUQUxPRyxcbiAgTWV0YWRhdGFLZXlzLFxuICB0eXBlIE1ldGFkYXRhS2V5LFxuICB0eXBlIE1ldGFkYXRhS2V5T3B0aW9uLFxuICBNRVRBREFUQV9LRVlfR1JPVVBTLFxufSBmcm9tICcuL21ldGFkYXRhLWtleXMuanMnO1xuZXhwb3J0IHtcbiAgdHlwZSBBdWRpdEV2ZW50LFxufSBmcm9tICcuL2F1ZGl0LWV2ZW50cy5qcyc7XG5leHBvcnQge1xuICBpc0Vjb3N5c3RlbU5vdGlmaWNhdGlvbkV2ZW50LFxuICBwYXJzZUVjb3N5c3RlbU5vdGlmeVJlcXVlc3QsXG4gIG5leHRFY29zeXN0ZW1EaWdlc3RUaW1lLFxuICByZW5kZXJFY29zeXN0ZW1NYW5hZ2VyQ2hhbmdlLFxuICByZW5kZXJFY29zeXN0ZW1EaWdlc3QsXG4gIHR5cGUgRWNvc3lzdGVtTm90aWZpY2F0aW9uRXZlbnRJZCxcbiAgdHlwZSBFY29zeXN0ZW1Ob3RpZmljYXRpb25DaGFubmVsLFxuICBFQ09TWVNURU1fRU1BSUxfUFJFRkVSRU5DRV9GSUVMRFMsXG4gIHR5cGUgRWNvc3lzdGVtRW1haWxQcmVmZXJlbmNlRmllbGQsXG4gIEVDT1NZU1RFTV9FTUFJTF9QUkVGRVJFTkNFX0ZJRUxEX05BTUVTLFxuICBFQ09TWVNURU1fTk9USUZJQ0FUSU9OX0VWRU5UUyxcbiAgdHlwZSBFY29zeXN0ZW1SZWNpcGllbnRTcGVjLFxuICB0eXBlIEVjb3N5c3RlbU5vdGlmeVJlcXVlc3QsXG59IGZyb20gJy4vZWNvc3lzdGVtLW5vdGlmaWNhdGlvbnMuanMnO1xuZXhwb3J0IHtcbiAgcHVibGlzaGVyVGVybXNWZXJzaW9uLFxuICBwdWJsaXNoZXJIYW5kbGVQcm9ibGVtLFxuICBpc09mZmljaWFsQXV0b0FwcHJvdmFsRW5hYmxlZCxcbiAgaXNQbHVnaW5QdWJsaXNoaW5nRW5hYmxlZCxcbiAgaXNBbm9ueW1vdXNTdWJtaXNzaW9uc0VuYWJsZWQsXG4gIGlzUGx1Z2luUmV2aWV3c0VuYWJsZWQsXG4gIE9GRklDSUFMX0NBVEFMT0dfTE9BREVSX0FDQ09VTlQsXG4gIERFRkFVTFRfUFVCTElTSEVSX1RFUk1TX1ZFUlNJT04sXG4gIEJVSUxUSU5fUkVTRVJWRURfSEFORExFUyxcbiAgVEVOQU5UX1JFUVVFU1RfS0lORFMsXG4gIFBVQkxJU0hfUEVSTUlTU0lPTl9SRVFVRVNUX0tJTkRTLFxuICBWRVJJRllfUkVRVUVTVF9LSU5EUyxcbiAgU1RFUF9VUF9SRVFVRVNUX0tJTkRTLFxuICBSRVFVRVNUX1NMQV9IT1VSUyxcbn0gZnJvbSAnLi9lY29zeXN0ZW0uanMnO1xuZXhwb3J0IHtcbiAgYWdlU2NvcmUsXG4gIHZ1bG5TY29yZSxcbiAgY29tcHV0ZUhlYWx0aFNjb3JlLFxuICBwdWJsaXNoZXJIZWFsdGhTY29yZSxcbiAgcHVibGlzaGVyU3VjY2Vzc1JhdGUsXG4gIGhlYWx0aEJhbmQsXG4gIEhFQUxUSF9DT01QT05FTlRTLFxuICBIRUFMVEhfV0VJR0hUUyxcbiAgdHlwZSBIZWFsdGhCcmVha2Rvd24sXG4gIHR5cGUgSGVhbHRoUmVzdWx0LFxuICB0eXBlIEhlYWx0aElucHV0cyxcbiAgdHlwZSBIZWFsdGhCYW5kLFxufSBmcm9tICcuL3BsdWdpbi1oZWFsdGguanMnO1xuIl19
|
|
@@ -12,18 +12,18 @@ import type { OrgRole } from './common.js';
|
|
|
12
12
|
* global `isSuperAdmin` flag, not a per-org permission; and `requireStepUp`
|
|
13
13
|
* (MFA) / `requireFeature` (plan entitlements) remain orthogonal gates.
|
|
14
14
|
*/
|
|
15
|
-
export type Permission = 'pipelines:read' | 'pipelines:write' | 'pipelines:publish' | 'templates:read' | 'templates:write' | 'templates:publish' | 'plugins:read' | 'plugins:write' | 'plugins:publish' | 'compliance:read' | 'compliance:write' | 'members:manage' | 'roles:manage' | 'invitations:manage' | 'service_accounts:manage' | 'dashboards:read' | 'dashboards:write' | 'observability:read' | 'observability:write' | 'logs:export' | 'reports:read' | 'reports:rollup' | 'messages:read' | 'messages:write' | 'billing:read' | 'billing:manage' | 'quotas:read' | 'registry:read' | 'registry:write' | 'org:settings' | 'org:idp' | 'org:kms' | 'org:impersonation';
|
|
15
|
+
export type Permission = 'pipelines:read' | 'pipelines:write' | 'pipelines:publish' | 'templates:read' | 'templates:write' | 'templates:publish' | 'plugins:read' | 'plugins:write' | 'plugins:publish' | 'plugins:install' | 'plugin_installs:manage' | 'publishers:manage' | 'plugins:moderate' | 'publishers:verify' | 'compliance:read' | 'compliance:write' | 'members:manage' | 'roles:manage' | 'invitations:manage' | 'service_accounts:manage' | 'dashboards:read' | 'dashboards:write' | 'observability:read' | 'observability:write' | 'logs:export' | 'reports:read' | 'reports:rollup' | 'messages:read' | 'messages:write' | 'billing:read' | 'billing:manage' | 'quotas:read' | 'registry:read' | 'registry:write' | 'org:settings' | 'org:idp' | 'org:kms' | 'org:impersonation';
|
|
16
16
|
/** All valid permissions (order determines display order in the picker). */
|
|
17
17
|
export declare const ALL_PERMISSIONS: readonly Permission[];
|
|
18
18
|
/**
|
|
19
19
|
* The CLOSED set of functions that take a {@link Permission} and decide access.
|
|
20
20
|
*
|
|
21
|
-
* "Is permission X enforced anywhere?" has to be answerable statically,
|
|
22
|
-
*
|
|
21
|
+
* "Is permission X enforced anywhere?" has to be answerable statically, which
|
|
22
|
+
* a grep can't do: four different call shapes consume a permission id
|
|
23
23
|
* (`requirePermission('x')` at a route, `userHasPermission(req, 'x')` inside a
|
|
24
24
|
* controller, and `resolveVisibility(req, v, 'x')` /
|
|
25
25
|
* `requireVisibilityWriteAccess(…, 'x')` in the visibility helpers), so a naive
|
|
26
|
-
* grep for a route-level gate
|
|
26
|
+
* grep for a route-level gate reports `templates:publish` as UNENFORCED when it
|
|
27
27
|
* is in fact enforced on every template publish.
|
|
28
28
|
*
|
|
29
29
|
* They all bottom out in `userHasPermission`, so the RUNTIME primitive was
|
|
@@ -74,17 +74,31 @@ export declare function isValidPermission(value: string): value is Permission;
|
|
|
74
74
|
* them (see platform `sanitizePermissions`).
|
|
75
75
|
*/
|
|
76
76
|
export declare const SUPERADMIN_ONLY_PERMISSIONS: readonly Permission[];
|
|
77
|
+
/**
|
|
78
|
+
* Permissions that govern the PLUGIN ECOSYSTEM and may be held only inside the
|
|
79
|
+
* system org (docs/plugin-publishing.md). Like
|
|
80
|
+
* {@link SUPERADMIN_ONLY_PERMISSIONS} they are in no member/admin/owner bundle
|
|
81
|
+
* and are never grantable through a custom Role in ANY org (platform
|
|
82
|
+
* `sanitizePermissions` refuses them). The only holders are superadmins
|
|
83
|
+
* (implicit-all) and members of the built-in "Ecosystem Manager" Role, which is
|
|
84
|
+
* seeded in the system org alone from {@link ECOSYSTEM_MANAGER_PERMISSIONS} and
|
|
85
|
+
* assignable only by a superadmin.
|
|
86
|
+
*/
|
|
87
|
+
export declare const SYSTEM_ORG_ONLY_PERMISSIONS: readonly Permission[];
|
|
88
|
+
/** Whether `permission` may be held only inside the system org. */
|
|
89
|
+
export declare function isSystemOrgOnlyPermission(permission: string): boolean;
|
|
77
90
|
/**
|
|
78
91
|
* Permissions an org may assign via a CUSTOM Role — every permission except the
|
|
79
|
-
* {@link SUPERADMIN_ONLY_PERMISSIONS}
|
|
80
|
-
* requested permission set against this
|
|
92
|
+
* {@link SUPERADMIN_ONLY_PERMISSIONS} and {@link SYSTEM_ORG_ONLY_PERMISSIONS}.
|
|
93
|
+
* Custom-Role create/update validates the requested permission set against this
|
|
94
|
+
* (see platform roles-service).
|
|
81
95
|
*/
|
|
82
96
|
export declare const ORG_ASSIGNABLE_PERMISSIONS: readonly Permission[];
|
|
83
97
|
/** Whether `permission` may be granted through a user-authored custom Role. */
|
|
84
98
|
export declare function isOrgAssignablePermission(permission: Permission): boolean;
|
|
85
99
|
/**
|
|
86
100
|
* Category → permissions for the custom-Role AUTHORING picker: the catalog minus
|
|
87
|
-
* the
|
|
101
|
+
* the non-assignable permissions, with any now-empty category dropped
|
|
88
102
|
* (so "Registry" disappears). The grouped view of
|
|
89
103
|
* {@link ORG_ASSIGNABLE_PERMISSIONS}.
|
|
90
104
|
*/
|
|
@@ -118,6 +132,15 @@ export declare function intersectPermissions(effective: readonly string[], subse
|
|
|
118
132
|
* {@link resolveUserPermissions}.
|
|
119
133
|
*/
|
|
120
134
|
export declare const ROLE_PERMISSIONS: Record<OrgRole, readonly Permission[]>;
|
|
135
|
+
/**
|
|
136
|
+
* Seed bundle for the built-in "Ecosystem Manager" Role — seeded ONLY in the
|
|
137
|
+
* system org (docs/plugin-publishing.md). It carries the
|
|
138
|
+
* {@link SYSTEM_ORG_ONLY_PERMISSIONS} plus the reads a moderator needs (the
|
|
139
|
+
* in-app catalog, in-app notices, the moderation-SLA dashboard) and nothing
|
|
140
|
+
* tenant-facing: no `registry:*`, no `members:manage`. The Role grants the
|
|
141
|
+
* coarse `member` label and never sets `isSuperAdmin`.
|
|
142
|
+
*/
|
|
143
|
+
export declare const ECOSYSTEM_MANAGER_PERMISSIONS: readonly Permission[];
|
|
121
144
|
/**
|
|
122
145
|
* Resolve a user's effective org permissions from the Roles assigned to them.
|
|
123
146
|
*
|
|
@@ -125,7 +148,7 @@ export declare const ROLE_PERMISSIONS: Record<OrgRole, readonly Permission[]>;
|
|
|
125
148
|
* permissions carried by the Roles they hold (a Role = a named permission set;
|
|
126
149
|
* built-in Roles carry their bundle explicitly, seeded from
|
|
127
150
|
* {@link ROLE_PERMISSIONS}). There is no separate role-derived baseline — the
|
|
128
|
-
* coarse `role` label
|
|
151
|
+
* coarse `role` label grants nothing on its own.
|
|
129
152
|
*
|
|
130
153
|
* 1. Platform superadmins (`isSuperAdmin`) always get ALL permissions.
|
|
131
154
|
* 2. Otherwise, union every permission granted by the user's assigned Roles.
|
|
@@ -136,5 +159,20 @@ export declare const ROLE_PERMISSIONS: Record<OrgRole, readonly Permission[]>;
|
|
|
136
159
|
* @returns Effective permissions in canonical order
|
|
137
160
|
*/
|
|
138
161
|
export declare function resolveUserPermissions(assignedPermissions?: readonly string[] | null, isSuperAdmin?: boolean): Permission[];
|
|
162
|
+
/**
|
|
163
|
+
* Confine a resolved permission list to what may be held in the token's ACTIVE
|
|
164
|
+
* org: outside the system org every {@link SYSTEM_ORG_ONLY_PERMISSIONS} entry is
|
|
165
|
+
* dropped (docs/plugin-publishing.md). Applied at token issue on
|
|
166
|
+
* top of {@link resolveUserPermissions} — including a superadmin's implicit-all —
|
|
167
|
+
* so a token minted in a tenant org never CLAIMS `plugins:moderate` /
|
|
168
|
+
* `publishers:verify`, even if a hand-written Role document somehow carried
|
|
169
|
+
* them there. (Superadmins still pass `hasPermission` via the flag; the
|
|
170
|
+
* ecosystem route gate additionally requires the system org, so that bypass
|
|
171
|
+
* never reaches a governance route from a tenant org either.)
|
|
172
|
+
*
|
|
173
|
+
* Takes a boolean rather than an org id so this module stays dependency-free
|
|
174
|
+
* (the frontend imports it); callers decide with api-core `isSystemOrgId`.
|
|
175
|
+
*/
|
|
176
|
+
export declare function confinePermissionsToOrg<P extends string>(permissions: readonly P[], activeOrgIsSystemOrg: boolean): P[];
|
|
139
177
|
/** Whether a resolved permission list grants `permission` (superadmin ⇒ always). */
|
|
140
178
|
export declare function hasPermission(granted: readonly string[] | null | undefined, permission: Permission, isSuperAdmin?: boolean): boolean;
|