@pipeline-builder/api-core 3.4.82 → 3.4.84

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/lib/constants/http-status.d.ts +0 -4
  2. package/lib/constants/http-status.js +1 -1
  3. package/lib/helpers/index.d.ts +1 -0
  4. package/lib/helpers/index.js +2 -1
  5. package/lib/helpers/org-hierarchy-http.d.ts +34 -0
  6. package/lib/helpers/org-hierarchy-http.js +64 -0
  7. package/lib/middleware/auth.d.ts +43 -5
  8. package/lib/middleware/auth.js +78 -8
  9. package/lib/middleware/mongo-sanitize.d.ts +17 -4
  10. package/lib/middleware/mongo-sanitize.js +56 -14
  11. package/lib/services/cache-service.js +6 -3
  12. package/lib/services/compliance-event-subscriber.js +2 -1
  13. package/lib/services/compliance-queue.d.ts +3 -0
  14. package/lib/services/compliance-queue.js +1 -1
  15. package/lib/services/entity-events.d.ts +4 -0
  16. package/lib/services/entity-events.js +1 -1
  17. package/lib/services/leader-lock.d.ts +3 -0
  18. package/lib/services/leader-lock.js +12 -3
  19. package/lib/types/common.d.ts +19 -1
  20. package/lib/types/common.js +1 -1
  21. package/lib/types/feature-flags.d.ts +7 -4
  22. package/lib/types/feature-flags.js +21 -12
  23. package/lib/types/index.d.ts +1 -0
  24. package/lib/types/index.js +2 -1
  25. package/lib/types/permissions.d.ts +36 -0
  26. package/lib/types/permissions.js +87 -0
  27. package/lib/types/quota-tiers.js +13 -13
  28. package/lib/utils/alias-resolver.js +1 -14
  29. package/lib/utils/params.js +11 -8
  30. package/lib/utils/secret-encryption.js +11 -2
  31. package/lib/validation/ai-schemas.d.ts +0 -6
  32. package/lib/validation/ai-schemas.js +1 -1
  33. package/lib/validation/common-schemas.d.ts +0 -8
  34. package/lib/validation/common-schemas.js +1 -1
  35. package/lib/validation/message-schemas.d.ts +0 -7
  36. package/lib/validation/message-schemas.js +1 -1
  37. package/lib/validation/pipeline-schemas.d.ts +0 -7
  38. package/lib/validation/pipeline-schemas.js +1 -1
  39. package/lib/validation/plugin-schemas.d.ts +0 -8
  40. package/lib/validation/plugin-schemas.js +1 -1
  41. package/package.json +1 -1
@@ -7,6 +7,7 @@ export const ALL_FEATURE_FLAGS = [
7
7
  'bulk_operations',
8
8
  'custom_integrations',
9
9
  'audit_log',
10
+ 'sso',
10
11
  ];
11
12
  /** Check whether a string is a valid FeatureFlag. */
12
13
  export function isValidFeatureFlag(value) {
@@ -45,6 +46,10 @@ export const FEATURE_METADATA = {
45
46
  label: 'Audit Log',
46
47
  description: 'Detailed audit trail of all user and system actions',
47
48
  },
49
+ sso: {
50
+ label: 'SSO / IdP',
51
+ description: 'Single sign-on and external identity-provider configurations',
52
+ },
48
53
  };
49
54
  // Resolution logic
50
55
  /**
@@ -60,12 +65,20 @@ export const FEATURE_METADATA = {
60
65
  * @param isSuperAdmin - Whether the user has the global super-admin flag
61
66
  * @returns Sorted array of enabled feature flags
62
67
  */
63
- export function resolveUserFeatures(tier, featureOverrides, isSuperAdmin) {
68
+ export function resolveUserFeatures(tier, featureOverrides, isSuperAdmin, accountFeatures) {
64
69
  // Sysadmins get everything regardless of tier.
65
70
  if (isSuperAdmin)
66
71
  return [...ALL_FEATURE_FLAGS];
67
72
  // Start with tier defaults
68
73
  const features = new Set(TIER_FEATURES[tier] ?? []);
74
+ // Account-level entitlements (purchased feature bundles — audit_log/sso).
75
+ // Applied before per-user overrides so an explicit user override still wins.
76
+ if (accountFeatures) {
77
+ for (const key of accountFeatures) {
78
+ if (isValidFeatureFlag(key))
79
+ features.add(key);
80
+ }
81
+ }
69
82
  // Apply per-user overrides
70
83
  if (featureOverrides) {
71
84
  for (const [key, enabled] of Object.entries(featureOverrides)) {
@@ -83,22 +96,18 @@ export function resolveUserFeatures(tier, featureOverrides, isSuperAdmin) {
83
96
  return ALL_FEATURE_FLAGS.filter(f => features.has(f));
84
97
  }
85
98
  /**
86
- * Check if a specific feature is enabled for a user.
99
+ * Check if a specific feature is enabled for a user. Delegates to
100
+ * {@link resolveUserFeatures} so it stays in lockstep — including account-level
101
+ * entitlements purchased via add-on bundles (`accountFeatures`).
87
102
  *
88
103
  * @param tier - The organization's quota tier
89
104
  * @param feature - The feature flag to check
90
105
  * @param featureOverrides - Per-user overrides
91
106
  * @param isSuperAdmin - Whether the user has the global super-admin flag
107
+ * @param accountFeatures - Account-level entitlements (e.g. bundle-granted)
92
108
  * @returns true if the feature is enabled
93
109
  */
94
- export function hasFeature(tier, feature, featureOverrides, isSuperAdmin) {
95
- if (isSuperAdmin)
96
- return true;
97
- // Check override first
98
- if (featureOverrides && feature in featureOverrides) {
99
- return featureOverrides[feature];
100
- }
101
- // Fall back to tier default
102
- return (TIER_FEATURES[tier] ?? []).includes(feature);
110
+ export function hasFeature(tier, feature, featureOverrides, isSuperAdmin, accountFeatures) {
111
+ return resolveUserFeatures(tier, featureOverrides, isSuperAdmin, accountFeatures).includes(feature);
103
112
  }
104
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVhdHVyZS1mbGFncy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90eXBlcy9mZWF0dXJlLWZsYWdzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFjdEMsZ0VBQWdFO0FBQ2hFLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUEyQjtJQUN2RCxrQkFBa0I7SUFDbEIsZUFBZTtJQUNmLGlCQUFpQjtJQUNqQixxQkFBcUI7SUFDckIsV0FBVztDQUNaLENBQUM7QUFFRixxREFBcUQ7QUFDckQsTUFBTSxVQUFVLGtCQUFrQixDQUFDLEtBQWE7SUFDOUMsT0FBUSxpQkFBdUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDbEUsQ0FBQztBQUVELDBCQUEwQjtBQUUxQixpREFBaUQ7QUFDakQsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUE4QztJQUN0RSxTQUFTLEVBQUUsRUFBRTtJQUNiLEdBQUcsRUFBRSxDQUFDLGtCQUFrQixFQUFFLGVBQWUsRUFBRSxpQkFBaUIsQ0FBQztJQUM3RCwwRUFBMEU7SUFDMUUsaUNBQWlDO0lBQ2pDLElBQUksRUFBRSxDQUFDLGtCQUFrQixFQUFFLGVBQWUsRUFBRSxpQkFBaUIsRUFBRSxXQUFXLENBQUM7SUFDM0UsVUFBVSxFQUFFLENBQUMsR0FBRyxpQkFBaUIsQ0FBQztDQUNuQyxDQUFDO0FBRUYsaUNBQWlDO0FBRWpDLHFEQUFxRDtBQUNyRCxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBZ0U7SUFDM0YsZ0JBQWdCLEVBQUU7UUFDaEIsS0FBSyxFQUFFLGtCQUFrQjtRQUN6QixXQUFXLEVBQUUsc0RBQXNEO0tBQ3BFO0lBQ0QsYUFBYSxFQUFFO1FBQ2IsS0FBSyxFQUFFLGVBQWU7UUFDdEIsV0FBVyxFQUFFLDJDQUEyQztLQUN6RDtJQUNELGVBQWUsRUFBRTtRQUNmLEtBQUssRUFBRSxpQkFBaUI7UUFDeEIsV0FBVyxFQUFFLDREQUE0RDtLQUMxRTtJQUNELG1CQUFtQixFQUFFO1FBQ25CLEtBQUssRUFBRSxxQkFBcUI7UUFDNUIsV0FBVyxFQUFFLDJEQUEyRDtLQUN6RTtJQUNELFNBQVMsRUFBRTtRQUNULEtBQUssRUFBRSxXQUFXO1FBQ2xCLFdBQVcsRUFBRSxxREFBcUQ7S0FDbkU7Q0FDRixDQUFDO0FBRUYsbUJBQW1CO0FBRW5COzs7Ozs7Ozs7Ozs7R0FZRztBQUNILE1BQU0sVUFBVSxtQkFBbUIsQ0FDakMsSUFBZSxFQUNmLGdCQUFpRCxFQUNqRCxZQUFzQjtJQUV0QiwrQ0FBK0M7SUFDL0MsSUFBSSxZQUFZO1FBQUUsT0FBTyxDQUFDLEdBQUcsaUJBQWlCLENBQUMsQ0FBQztJQUVoRCwyQkFBMkI7SUFDM0IsTUFBTSxRQUFRLEdBQUcsSUFBSSxHQUFHLENBQWMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBRWpFLDJCQUEyQjtJQUMzQixJQUFJLGdCQUFnQixFQUFFLENBQUM7UUFDckIsS0FBSyxNQUFNLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDO1lBQzlELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUM7Z0JBQUUsU0FBUztZQUN2QyxJQUFJLE9BQU8sRUFBRSxDQUFDO2dCQUNaLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDcEIsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLFFBQVEsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDdkIsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsNEJBQTRCO0lBQzVCLE9BQU8saUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hELENBQUM7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sVUFBVSxVQUFVLENBQ3hCLElBQWUsRUFDZixPQUFvQixFQUNwQixnQkFBaUQsRUFDakQsWUFBc0I7SUFFdEIsSUFBSSxZQUFZO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFFOUIsdUJBQXVCO0lBQ3ZCLElBQUksZ0JBQWdCLElBQUksT0FBTyxJQUFJLGdCQUFnQixFQUFFLENBQUM7UUFDcEQsT0FBTyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRUQsNEJBQTRCO0lBQzVCLE9BQU8sQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ3ZELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHR5cGUgeyBRdW90YVRpZXIgfSBmcm9tICcuL3F1b3RhLXRpZXJzLmpzJztcblxuLy8gRmVhdHVyZSBmbGFnIGlkZW50aWZpZXJzXG5cbi8qKiBDYW5vbmljYWwgZmVhdHVyZSBmbGFnIGlkZW50aWZpZXJzLiAqL1xuZXhwb3J0IHR5cGUgRmVhdHVyZUZsYWcgPVxuICB8ICdwcmlvcml0eV9zdXBwb3J0J1xuICB8ICdjdXN0b21faW50ZWdyYXRpb25zJ1xuICB8ICdhaV9nZW5lcmF0aW9uJ1xuICB8ICdidWxrX29wZXJhdGlvbnMnXG4gIHwgJ2F1ZGl0X2xvZyc7XG5cbi8qKiBBbGwgdmFsaWQgZmVhdHVyZSBmbGFncyAob3JkZXIgZGV0ZXJtaW5lcyBkaXNwbGF5IG9yZGVyKS4gKi9cbmV4cG9ydCBjb25zdCBBTExfRkVBVFVSRV9GTEFHUzogcmVhZG9ubHkgRmVhdHVyZUZsYWdbXSA9IFtcbiAgJ3ByaW9yaXR5X3N1cHBvcnQnLFxuICAnYWlfZ2VuZXJhdGlvbicsXG4gICdidWxrX29wZXJhdGlvbnMnLFxuICAnY3VzdG9tX2ludGVncmF0aW9ucycsXG4gICdhdWRpdF9sb2cnLFxuXTtcblxuLyoqIENoZWNrIHdoZXRoZXIgYSBzdHJpbmcgaXMgYSB2YWxpZCBGZWF0dXJlRmxhZy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkRmVhdHVyZUZsYWcodmFsdWU6IHN0cmluZyk6IHZhbHVlIGlzIEZlYXR1cmVGbGFnIHtcbiAgcmV0dXJuIChBTExfRkVBVFVSRV9GTEFHUyBhcyByZWFkb25seSBzdHJpbmdbXSkuaW5jbHVkZXModmFsdWUpO1xufVxuXG4vLyBUaWVyLXRvLWZlYXR1cmUgbWFwcGluZ1xuXG4vKiogRmVhdHVyZXMgZW5hYmxlZCBieSBkZWZhdWx0IGZvciBlYWNoIHRpZXIuICovXG5leHBvcnQgY29uc3QgVElFUl9GRUFUVVJFUzogUmVjb3JkPFF1b3RhVGllciwgcmVhZG9ubHkgRmVhdHVyZUZsYWdbXT4gPSB7XG4gIGRldmVsb3BlcjogW10sXG4gIHBybzogWydwcmlvcml0eV9zdXBwb3J0JywgJ2FpX2dlbmVyYXRpb24nLCAnYnVsa19vcGVyYXRpb25zJ10sXG4gIC8vIFRlYW0gYWRkcyBhdWRpdF9sb2cgKGNvbGxhYm9yYXRpb24vZ292ZXJuYW5jZSk7IEVudGVycHJpc2UgdW5sb2NrcyBhbGwsXG4gIC8vIGluY2x1ZGluZyBjdXN0b21faW50ZWdyYXRpb25zLlxuICB0ZWFtOiBbJ3ByaW9yaXR5X3N1cHBvcnQnLCAnYWlfZ2VuZXJhdGlvbicsICdidWxrX29wZXJhdGlvbnMnLCAnYXVkaXRfbG9nJ10sXG4gIGVudGVycHJpc2U6IFsuLi5BTExfRkVBVFVSRV9GTEFHU10sXG59O1xuXG4vLyBGZWF0dXJlIG1ldGFkYXRhIChmb3IgZGlzcGxheSlcblxuLyoqIEh1bWFuLXJlYWRhYmxlIG1ldGFkYXRhIGZvciBlYWNoIGZlYXR1cmUgZmxhZy4gKi9cbmV4cG9ydCBjb25zdCBGRUFUVVJFX01FVEFEQVRBOiBSZWNvcmQ8RmVhdHVyZUZsYWcsIHsgbGFiZWw6IHN0cmluZzsgZGVzY3JpcHRpb246IHN0cmluZyB9PiA9IHtcbiAgcHJpb3JpdHlfc3VwcG9ydDoge1xuICAgIGxhYmVsOiAnUHJpb3JpdHkgU3VwcG9ydCcsXG4gICAgZGVzY3JpcHRpb246ICdGYXN0ZXIgcmVzcG9uc2UgdGltZXMgYW5kIGRlZGljYXRlZCBzdXBwb3J0IGNoYW5uZWxzJyxcbiAgfSxcbiAgYWlfZ2VuZXJhdGlvbjoge1xuICAgIGxhYmVsOiAnQUkgR2VuZXJhdGlvbicsXG4gICAgZGVzY3JpcHRpb246ICdBSS1wb3dlcmVkIHBpcGVsaW5lIGFuZCBwbHVnaW4gZ2VuZXJhdGlvbicsXG4gIH0sXG4gIGJ1bGtfb3BlcmF0aW9uczoge1xuICAgIGxhYmVsOiAnQnVsayBPcGVyYXRpb25zJyxcbiAgICBkZXNjcmlwdGlvbjogJ0JhdGNoIGNyZWF0ZSwgdXBkYXRlLCBhbmQgZGVsZXRlIGZvciBwaXBlbGluZXMgYW5kIHBsdWdpbnMnLFxuICB9LFxuICBjdXN0b21faW50ZWdyYXRpb25zOiB7XG4gICAgbGFiZWw6ICdDdXN0b20gSW50ZWdyYXRpb25zJyxcbiAgICBkZXNjcmlwdGlvbjogJ0Nvbm5lY3QgdG8gZXh0ZXJuYWwgc2VydmljZXMgYW5kIGN1c3RvbSB3ZWJob29rIGVuZHBvaW50cycsXG4gIH0sXG4gIGF1ZGl0X2xvZzoge1xuICAgIGxhYmVsOiAnQXVkaXQgTG9nJyxcbiAgICBkZXNjcmlwdGlvbjogJ0RldGFpbGVkIGF1ZGl0IHRyYWlsIG9mIGFsbCB1c2VyIGFuZCBzeXN0ZW0gYWN0aW9ucycsXG4gIH0sXG59O1xuXG4vLyBSZXNvbHV0aW9uIGxvZ2ljXG5cbi8qKlxuICogUmVzb2x2ZSBhIHVzZXIncyBlZmZlY3RpdmUgZmVhdHVyZSBzZXQuXG4gKlxuICogMS4gU3lzYWRtaW5zIChpc1N1cGVyQWRtaW4pIGFsd2F5cyBnZXQgQUxMIGZlYXR1cmVzLlxuICogMi4gU3RhcnQgd2l0aCB0aGUgdGllcidzIGRlZmF1bHQgZmVhdHVyZXMuXG4gKiAzLiBBcHBseSBwZXItdXNlciBvdmVycmlkZXM6IGB0cnVlYCBhZGRzIGEgZmVhdHVyZSwgYGZhbHNlYCByZW1vdmVzIGl0LlxuICogNC4gSW52YWxpZCBvdmVycmlkZSBrZXlzIGFyZSBzaWxlbnRseSBpZ25vcmVkLlxuICpcbiAqIEBwYXJhbSB0aWVyIC0gVGhlIG9yZ2FuaXphdGlvbidzIHF1b3RhIHRpZXJcbiAqIEBwYXJhbSBmZWF0dXJlT3ZlcnJpZGVzIC0gUGVyLXVzZXIgb3ZlcnJpZGVzIChrZXkgPSBmZWF0dXJlIGZsYWcsIHZhbHVlID0gZW5hYmxlZClcbiAqIEBwYXJhbSBpc1N1cGVyQWRtaW4gLSBXaGV0aGVyIHRoZSB1c2VyIGhhcyB0aGUgZ2xvYmFsIHN1cGVyLWFkbWluIGZsYWdcbiAqIEByZXR1cm5zIFNvcnRlZCBhcnJheSBvZiBlbmFibGVkIGZlYXR1cmUgZmxhZ3NcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVVc2VyRmVhdHVyZXMoXG4gIHRpZXI6IFF1b3RhVGllcixcbiAgZmVhdHVyZU92ZXJyaWRlcz86IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+IHwgbnVsbCxcbiAgaXNTdXBlckFkbWluPzogYm9vbGVhbixcbik6IEZlYXR1cmVGbGFnW10ge1xuICAvLyBTeXNhZG1pbnMgZ2V0IGV2ZXJ5dGhpbmcgcmVnYXJkbGVzcyBvZiB0aWVyLlxuICBpZiAoaXNTdXBlckFkbWluKSByZXR1cm4gWy4uLkFMTF9GRUFUVVJFX0ZMQUdTXTtcblxuICAvLyBTdGFydCB3aXRoIHRpZXIgZGVmYXVsdHNcbiAgY29uc3QgZmVhdHVyZXMgPSBuZXcgU2V0PEZlYXR1cmVGbGFnPihUSUVSX0ZFQVRVUkVTW3RpZXJdID8/IFtdKTtcblxuICAvLyBBcHBseSBwZXItdXNlciBvdmVycmlkZXNcbiAgaWYgKGZlYXR1cmVPdmVycmlkZXMpIHtcbiAgICBmb3IgKGNvbnN0IFtrZXksIGVuYWJsZWRdIG9mIE9iamVjdC5lbnRyaWVzKGZlYXR1cmVPdmVycmlkZXMpKSB7XG4gICAgICBpZiAoIWlzVmFsaWRGZWF0dXJlRmxhZyhrZXkpKSBjb250aW51ZTtcbiAgICAgIGlmIChlbmFibGVkKSB7XG4gICAgICAgIGZlYXR1cmVzLmFkZChrZXkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZmVhdHVyZXMuZGVsZXRlKGtleSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gUmV0dXJuIGluIGNhbm9uaWNhbCBvcmRlclxuICByZXR1cm4gQUxMX0ZFQVRVUkVfRkxBR1MuZmlsdGVyKGYgPT4gZmVhdHVyZXMuaGFzKGYpKTtcbn1cblxuLyoqXG4gKiBDaGVjayBpZiBhIHNwZWNpZmljIGZlYXR1cmUgaXMgZW5hYmxlZCBmb3IgYSB1c2VyLlxuICpcbiAqIEBwYXJhbSB0aWVyIC0gVGhlIG9yZ2FuaXphdGlvbidzIHF1b3RhIHRpZXJcbiAqIEBwYXJhbSBmZWF0dXJlIC0gVGhlIGZlYXR1cmUgZmxhZyB0byBjaGVja1xuICogQHBhcmFtIGZlYXR1cmVPdmVycmlkZXMgLSBQZXItdXNlciBvdmVycmlkZXNcbiAqIEBwYXJhbSBpc1N1cGVyQWRtaW4gLSBXaGV0aGVyIHRoZSB1c2VyIGhhcyB0aGUgZ2xvYmFsIHN1cGVyLWFkbWluIGZsYWdcbiAqIEByZXR1cm5zIHRydWUgaWYgdGhlIGZlYXR1cmUgaXMgZW5hYmxlZFxuICovXG5leHBvcnQgZnVuY3Rpb24gaGFzRmVhdHVyZShcbiAgdGllcjogUXVvdGFUaWVyLFxuICBmZWF0dXJlOiBGZWF0dXJlRmxhZyxcbiAgZmVhdHVyZU92ZXJyaWRlcz86IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+IHwgbnVsbCxcbiAgaXNTdXBlckFkbWluPzogYm9vbGVhbixcbik6IGJvb2xlYW4ge1xuICBpZiAoaXNTdXBlckFkbWluKSByZXR1cm4gdHJ1ZTtcblxuICAvLyBDaGVjayBvdmVycmlkZSBmaXJzdFxuICBpZiAoZmVhdHVyZU92ZXJyaWRlcyAmJiBmZWF0dXJlIGluIGZlYXR1cmVPdmVycmlkZXMpIHtcbiAgICByZXR1cm4gZmVhdHVyZU92ZXJyaWRlc1tmZWF0dXJlXTtcbiAgfVxuXG4gIC8vIEZhbGwgYmFjayB0byB0aWVyIGRlZmF1bHRcbiAgcmV0dXJuIChUSUVSX0ZFQVRVUkVTW3RpZXJdID8/IFtdKS5pbmNsdWRlcyhmZWF0dXJlKTtcbn1cbiJdfQ==
113
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVhdHVyZS1mbGFncy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90eXBlcy9mZWF0dXJlLWZsYWdzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFldEMsZ0VBQWdFO0FBQ2hFLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUEyQjtJQUN2RCxrQkFBa0I7SUFDbEIsZUFBZTtJQUNmLGlCQUFpQjtJQUNqQixxQkFBcUI7SUFDckIsV0FBVztJQUNYLEtBQUs7Q0FDTixDQUFDO0FBRUYscURBQXFEO0FBQ3JELE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxLQUFhO0lBQzlDLE9BQVEsaUJBQXVDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ2xFLENBQUM7QUFFRCwwQkFBMEI7QUFFMUIsaURBQWlEO0FBQ2pELE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBOEM7SUFDdEUsU0FBUyxFQUFFLEVBQUU7SUFDYixHQUFHLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxlQUFlLEVBQUUsaUJBQWlCLENBQUM7SUFDN0QsMEVBQTBFO0lBQzFFLGlDQUFpQztJQUNqQyxJQUFJLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxlQUFlLEVBQUUsaUJBQWlCLEVBQUUsV0FBVyxDQUFDO0lBQzNFLFVBQVUsRUFBRSxDQUFDLEdBQUcsaUJBQWlCLENBQUM7Q0FDbkMsQ0FBQztBQUVGLGlDQUFpQztBQUVqQyxxREFBcUQ7QUFDckQsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQWdFO0lBQzNGLGdCQUFnQixFQUFFO1FBQ2hCLEtBQUssRUFBRSxrQkFBa0I7UUFDekIsV0FBVyxFQUFFLHNEQUFzRDtLQUNwRTtJQUNELGFBQWEsRUFBRTtRQUNiLEtBQUssRUFBRSxlQUFlO1FBQ3RCLFdBQVcsRUFBRSwyQ0FBMkM7S0FDekQ7SUFDRCxlQUFlLEVBQUU7UUFDZixLQUFLLEVBQUUsaUJBQWlCO1FBQ3hCLFdBQVcsRUFBRSw0REFBNEQ7S0FDMUU7SUFDRCxtQkFBbUIsRUFBRTtRQUNuQixLQUFLLEVBQUUscUJBQXFCO1FBQzVCLFdBQVcsRUFBRSwyREFBMkQ7S0FDekU7SUFDRCxTQUFTLEVBQUU7UUFDVCxLQUFLLEVBQUUsV0FBVztRQUNsQixXQUFXLEVBQUUscURBQXFEO0tBQ25FO0lBQ0QsR0FBRyxFQUFFO1FBQ0gsS0FBSyxFQUFFLFdBQVc7UUFDbEIsV0FBVyxFQUFFLDhEQUE4RDtLQUM1RTtDQUNGLENBQUM7QUFFRixtQkFBbUI7QUFFbkI7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsTUFBTSxVQUFVLG1CQUFtQixDQUNqQyxJQUFlLEVBQ2YsZ0JBQWlELEVBQ2pELFlBQXNCLEVBQ3RCLGVBQTBDO0lBRTFDLCtDQUErQztJQUMvQyxJQUFJLFlBQVk7UUFBRSxPQUFPLENBQUMsR0FBRyxpQkFBaUIsQ0FBQyxDQUFDO0lBRWhELDJCQUEyQjtJQUMzQixNQUFNLFFBQVEsR0FBRyxJQUFJLEdBQUcsQ0FBYyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7SUFFakUsMEVBQTBFO0lBQzFFLDZFQUE2RTtJQUM3RSxJQUFJLGVBQWUsRUFBRSxDQUFDO1FBQ3BCLEtBQUssTUFBTSxHQUFHLElBQUksZUFBZSxFQUFFLENBQUM7WUFDbEMsSUFBSSxrQkFBa0IsQ0FBQyxHQUFHLENBQUM7Z0JBQUUsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNqRCxDQUFDO0lBQ0gsQ0FBQztJQUVELDJCQUEyQjtJQUMzQixJQUFJLGdCQUFnQixFQUFFLENBQUM7UUFDckIsS0FBSyxNQUFNLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDO1lBQzlELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUM7Z0JBQUUsU0FBUztZQUN2QyxJQUFJLE9BQU8sRUFBRSxDQUFDO2dCQUNaLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDcEIsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLFFBQVEsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDdkIsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsNEJBQTRCO0lBQzVCLE9BQU8saUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hELENBQUM7QUFFRDs7Ozs7Ozs7Ozs7R0FXRztBQUNILE1BQU0sVUFBVSxVQUFVLENBQ3hCLElBQWUsRUFDZixPQUFvQixFQUNwQixnQkFBaUQsRUFDakQsWUFBc0IsRUFDdEIsZUFBMEM7SUFFMUMsT0FBTyxtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsWUFBWSxFQUFFLGVBQWUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUN0RyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB0eXBlIHsgUXVvdGFUaWVyIH0gZnJvbSAnLi9xdW90YS10aWVycy5qcyc7XG5cbi8vIEZlYXR1cmUgZmxhZyBpZGVudGlmaWVyc1xuXG4vKiogQ2Fub25pY2FsIGZlYXR1cmUgZmxhZyBpZGVudGlmaWVycy4gKi9cbmV4cG9ydCB0eXBlIEZlYXR1cmVGbGFnID1cbiAgfCAncHJpb3JpdHlfc3VwcG9ydCdcbiAgfCAnY3VzdG9tX2ludGVncmF0aW9ucydcbiAgfCAnYWlfZ2VuZXJhdGlvbidcbiAgfCAnYnVsa19vcGVyYXRpb25zJ1xuICB8ICdhdWRpdF9sb2cnXG4gIHwgJ3Nzbyc7XG5cbi8qKiBBbGwgdmFsaWQgZmVhdHVyZSBmbGFncyAob3JkZXIgZGV0ZXJtaW5lcyBkaXNwbGF5IG9yZGVyKS4gKi9cbmV4cG9ydCBjb25zdCBBTExfRkVBVFVSRV9GTEFHUzogcmVhZG9ubHkgRmVhdHVyZUZsYWdbXSA9IFtcbiAgJ3ByaW9yaXR5X3N1cHBvcnQnLFxuICAnYWlfZ2VuZXJhdGlvbicsXG4gICdidWxrX29wZXJhdGlvbnMnLFxuICAnY3VzdG9tX2ludGVncmF0aW9ucycsXG4gICdhdWRpdF9sb2cnLFxuICAnc3NvJyxcbl07XG5cbi8qKiBDaGVjayB3aGV0aGVyIGEgc3RyaW5nIGlzIGEgdmFsaWQgRmVhdHVyZUZsYWcuICovXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZEZlYXR1cmVGbGFnKHZhbHVlOiBzdHJpbmcpOiB2YWx1ZSBpcyBGZWF0dXJlRmxhZyB7XG4gIHJldHVybiAoQUxMX0ZFQVRVUkVfRkxBR1MgYXMgcmVhZG9ubHkgc3RyaW5nW10pLmluY2x1ZGVzKHZhbHVlKTtcbn1cblxuLy8gVGllci10by1mZWF0dXJlIG1hcHBpbmdcblxuLyoqIEZlYXR1cmVzIGVuYWJsZWQgYnkgZGVmYXVsdCBmb3IgZWFjaCB0aWVyLiAqL1xuZXhwb3J0IGNvbnN0IFRJRVJfRkVBVFVSRVM6IFJlY29yZDxRdW90YVRpZXIsIHJlYWRvbmx5IEZlYXR1cmVGbGFnW10+ID0ge1xuICBkZXZlbG9wZXI6IFtdLFxuICBwcm86IFsncHJpb3JpdHlfc3VwcG9ydCcsICdhaV9nZW5lcmF0aW9uJywgJ2J1bGtfb3BlcmF0aW9ucyddLFxuICAvLyBUZWFtIGFkZHMgYXVkaXRfbG9nIChjb2xsYWJvcmF0aW9uL2dvdmVybmFuY2UpOyBFbnRlcnByaXNlIHVubG9ja3MgYWxsLFxuICAvLyBpbmNsdWRpbmcgY3VzdG9tX2ludGVncmF0aW9ucy5cbiAgdGVhbTogWydwcmlvcml0eV9zdXBwb3J0JywgJ2FpX2dlbmVyYXRpb24nLCAnYnVsa19vcGVyYXRpb25zJywgJ2F1ZGl0X2xvZyddLFxuICBlbnRlcnByaXNlOiBbLi4uQUxMX0ZFQVRVUkVfRkxBR1NdLFxufTtcblxuLy8gRmVhdHVyZSBtZXRhZGF0YSAoZm9yIGRpc3BsYXkpXG5cbi8qKiBIdW1hbi1yZWFkYWJsZSBtZXRhZGF0YSBmb3IgZWFjaCBmZWF0dXJlIGZsYWcuICovXG5leHBvcnQgY29uc3QgRkVBVFVSRV9NRVRBREFUQTogUmVjb3JkPEZlYXR1cmVGbGFnLCB7IGxhYmVsOiBzdHJpbmc7IGRlc2NyaXB0aW9uOiBzdHJpbmcgfT4gPSB7XG4gIHByaW9yaXR5X3N1cHBvcnQ6IHtcbiAgICBsYWJlbDogJ1ByaW9yaXR5IFN1cHBvcnQnLFxuICAgIGRlc2NyaXB0aW9uOiAnRmFzdGVyIHJlc3BvbnNlIHRpbWVzIGFuZCBkZWRpY2F0ZWQgc3VwcG9ydCBjaGFubmVscycsXG4gIH0sXG4gIGFpX2dlbmVyYXRpb246IHtcbiAgICBsYWJlbDogJ0FJIEdlbmVyYXRpb24nLFxuICAgIGRlc2NyaXB0aW9uOiAnQUktcG93ZXJlZCBwaXBlbGluZSBhbmQgcGx1Z2luIGdlbmVyYXRpb24nLFxuICB9LFxuICBidWxrX29wZXJhdGlvbnM6IHtcbiAgICBsYWJlbDogJ0J1bGsgT3BlcmF0aW9ucycsXG4gICAgZGVzY3JpcHRpb246ICdCYXRjaCBjcmVhdGUsIHVwZGF0ZSwgYW5kIGRlbGV0ZSBmb3IgcGlwZWxpbmVzIGFuZCBwbHVnaW5zJyxcbiAgfSxcbiAgY3VzdG9tX2ludGVncmF0aW9uczoge1xuICAgIGxhYmVsOiAnQ3VzdG9tIEludGVncmF0aW9ucycsXG4gICAgZGVzY3JpcHRpb246ICdDb25uZWN0IHRvIGV4dGVybmFsIHNlcnZpY2VzIGFuZCBjdXN0b20gd2ViaG9vayBlbmRwb2ludHMnLFxuICB9LFxuICBhdWRpdF9sb2c6IHtcbiAgICBsYWJlbDogJ0F1ZGl0IExvZycsXG4gICAgZGVzY3JpcHRpb246ICdEZXRhaWxlZCBhdWRpdCB0cmFpbCBvZiBhbGwgdXNlciBhbmQgc3lzdGVtIGFjdGlvbnMnLFxuICB9LFxuICBzc286IHtcbiAgICBsYWJlbDogJ1NTTyAvIElkUCcsXG4gICAgZGVzY3JpcHRpb246ICdTaW5nbGUgc2lnbi1vbiBhbmQgZXh0ZXJuYWwgaWRlbnRpdHktcHJvdmlkZXIgY29uZmlndXJhdGlvbnMnLFxuICB9LFxufTtcblxuLy8gUmVzb2x1dGlvbiBsb2dpY1xuXG4vKipcbiAqIFJlc29sdmUgYSB1c2VyJ3MgZWZmZWN0aXZlIGZlYXR1cmUgc2V0LlxuICpcbiAqIDEuIFN5c2FkbWlucyAoaXNTdXBlckFkbWluKSBhbHdheXMgZ2V0IEFMTCBmZWF0dXJlcy5cbiAqIDIuIFN0YXJ0IHdpdGggdGhlIHRpZXIncyBkZWZhdWx0IGZlYXR1cmVzLlxuICogMy4gQXBwbHkgcGVyLXVzZXIgb3ZlcnJpZGVzOiBgdHJ1ZWAgYWRkcyBhIGZlYXR1cmUsIGBmYWxzZWAgcmVtb3ZlcyBpdC5cbiAqIDQuIEludmFsaWQgb3ZlcnJpZGUga2V5cyBhcmUgc2lsZW50bHkgaWdub3JlZC5cbiAqXG4gKiBAcGFyYW0gdGllciAtIFRoZSBvcmdhbml6YXRpb24ncyBxdW90YSB0aWVyXG4gKiBAcGFyYW0gZmVhdHVyZU92ZXJyaWRlcyAtIFBlci11c2VyIG92ZXJyaWRlcyAoa2V5ID0gZmVhdHVyZSBmbGFnLCB2YWx1ZSA9IGVuYWJsZWQpXG4gKiBAcGFyYW0gaXNTdXBlckFkbWluIC0gV2hldGhlciB0aGUgdXNlciBoYXMgdGhlIGdsb2JhbCBzdXBlci1hZG1pbiBmbGFnXG4gKiBAcmV0dXJucyBTb3J0ZWQgYXJyYXkgb2YgZW5hYmxlZCBmZWF0dXJlIGZsYWdzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlVXNlckZlYXR1cmVzKFxuICB0aWVyOiBRdW90YVRpZXIsXG4gIGZlYXR1cmVPdmVycmlkZXM/OiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiB8IG51bGwsXG4gIGlzU3VwZXJBZG1pbj86IGJvb2xlYW4sXG4gIGFjY291bnRGZWF0dXJlcz86IHJlYWRvbmx5IHN0cmluZ1tdIHwgbnVsbCxcbik6IEZlYXR1cmVGbGFnW10ge1xuICAvLyBTeXNhZG1pbnMgZ2V0IGV2ZXJ5dGhpbmcgcmVnYXJkbGVzcyBvZiB0aWVyLlxuICBpZiAoaXNTdXBlckFkbWluKSByZXR1cm4gWy4uLkFMTF9GRUFUVVJFX0ZMQUdTXTtcblxuICAvLyBTdGFydCB3aXRoIHRpZXIgZGVmYXVsdHNcbiAgY29uc3QgZmVhdHVyZXMgPSBuZXcgU2V0PEZlYXR1cmVGbGFnPihUSUVSX0ZFQVRVUkVTW3RpZXJdID8/IFtdKTtcblxuICAvLyBBY2NvdW50LWxldmVsIGVudGl0bGVtZW50cyAocHVyY2hhc2VkIGZlYXR1cmUgYnVuZGxlcyDigJQgYXVkaXRfbG9nL3NzbykuXG4gIC8vIEFwcGxpZWQgYmVmb3JlIHBlci11c2VyIG92ZXJyaWRlcyBzbyBhbiBleHBsaWNpdCB1c2VyIG92ZXJyaWRlIHN0aWxsIHdpbnMuXG4gIGlmIChhY2NvdW50RmVhdHVyZXMpIHtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBhY2NvdW50RmVhdHVyZXMpIHtcbiAgICAgIGlmIChpc1ZhbGlkRmVhdHVyZUZsYWcoa2V5KSkgZmVhdHVyZXMuYWRkKGtleSk7XG4gICAgfVxuICB9XG5cbiAgLy8gQXBwbHkgcGVyLXVzZXIgb3ZlcnJpZGVzXG4gIGlmIChmZWF0dXJlT3ZlcnJpZGVzKSB7XG4gICAgZm9yIChjb25zdCBba2V5LCBlbmFibGVkXSBvZiBPYmplY3QuZW50cmllcyhmZWF0dXJlT3ZlcnJpZGVzKSkge1xuICAgICAgaWYgKCFpc1ZhbGlkRmVhdHVyZUZsYWcoa2V5KSkgY29udGludWU7XG4gICAgICBpZiAoZW5hYmxlZCkge1xuICAgICAgICBmZWF0dXJlcy5hZGQoa2V5KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZlYXR1cmVzLmRlbGV0ZShrZXkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFJldHVybiBpbiBjYW5vbmljYWwgb3JkZXJcbiAgcmV0dXJuIEFMTF9GRUFUVVJFX0ZMQUdTLmZpbHRlcihmID0+IGZlYXR1cmVzLmhhcyhmKSk7XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgYSBzcGVjaWZpYyBmZWF0dXJlIGlzIGVuYWJsZWQgZm9yIGEgdXNlci4gRGVsZWdhdGVzIHRvXG4gKiB7QGxpbmsgcmVzb2x2ZVVzZXJGZWF0dXJlc30gc28gaXQgc3RheXMgaW4gbG9ja3N0ZXAg4oCUIGluY2x1ZGluZyBhY2NvdW50LWxldmVsXG4gKiBlbnRpdGxlbWVudHMgcHVyY2hhc2VkIHZpYSBhZGQtb24gYnVuZGxlcyAoYGFjY291bnRGZWF0dXJlc2ApLlxuICpcbiAqIEBwYXJhbSB0aWVyIC0gVGhlIG9yZ2FuaXphdGlvbidzIHF1b3RhIHRpZXJcbiAqIEBwYXJhbSBmZWF0dXJlIC0gVGhlIGZlYXR1cmUgZmxhZyB0byBjaGVja1xuICogQHBhcmFtIGZlYXR1cmVPdmVycmlkZXMgLSBQZXItdXNlciBvdmVycmlkZXNcbiAqIEBwYXJhbSBpc1N1cGVyQWRtaW4gLSBXaGV0aGVyIHRoZSB1c2VyIGhhcyB0aGUgZ2xvYmFsIHN1cGVyLWFkbWluIGZsYWdcbiAqIEBwYXJhbSBhY2NvdW50RmVhdHVyZXMgLSBBY2NvdW50LWxldmVsIGVudGl0bGVtZW50cyAoZS5nLiBidW5kbGUtZ3JhbnRlZClcbiAqIEByZXR1cm5zIHRydWUgaWYgdGhlIGZlYXR1cmUgaXMgZW5hYmxlZFxuICovXG5leHBvcnQgZnVuY3Rpb24gaGFzRmVhdHVyZShcbiAgdGllcjogUXVvdGFUaWVyLFxuICBmZWF0dXJlOiBGZWF0dXJlRmxhZyxcbiAgZmVhdHVyZU92ZXJyaWRlcz86IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+IHwgbnVsbCxcbiAgaXNTdXBlckFkbWluPzogYm9vbGVhbixcbiAgYWNjb3VudEZlYXR1cmVzPzogcmVhZG9ubHkgc3RyaW5nW10gfCBudWxsLFxuKTogYm9vbGVhbiB7XG4gIHJldHVybiByZXNvbHZlVXNlckZlYXR1cmVzKHRpZXIsIGZlYXR1cmVPdmVycmlkZXMsIGlzU3VwZXJBZG1pbiwgYWNjb3VudEZlYXR1cmVzKS5pbmNsdWRlcyhmZWF0dXJlKTtcbn1cbiJdfQ==
@@ -4,4 +4,5 @@ export * from './pipeline.js';
4
4
  export * from './http.js';
5
5
  export * from './quota-tiers.js';
6
6
  export * from './feature-flags.js';
7
+ export * from './permissions.js';
7
8
  export * from './audit-events.js';
@@ -6,5 +6,6 @@ export * from './pipeline.js';
6
6
  export * from './http.js';
7
7
  export * from './quota-tiers.js';
8
8
  export * from './feature-flags.js';
9
+ export * from './permissions.js';
9
10
  export * from './audit-events.js';
10
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHlwZXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0QyxjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsZUFBZSxDQUFDO0FBQzlCLGNBQWMsV0FBVyxDQUFDO0FBQzFCLGNBQWMsa0JBQWtCLENBQUM7QUFDakMsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLG1CQUFtQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmV4cG9ydCAqIGZyb20gJy4vZXJyb3ItY29kZXMuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb21tb24uanMnO1xuZXhwb3J0ICogZnJvbSAnLi9waXBlbGluZS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2h0dHAuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9xdW90YS10aWVycy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2ZlYXR1cmUtZmxhZ3MuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9hdWRpdC1ldmVudHMuanMnO1xuIl19
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHlwZXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0QyxjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsZUFBZSxDQUFDO0FBQzlCLGNBQWMsV0FBVyxDQUFDO0FBQzFCLGNBQWMsa0JBQWtCLENBQUM7QUFDakMsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMsbUJBQW1CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuZXhwb3J0ICogZnJvbSAnLi9lcnJvci1jb2Rlcy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbW1vbi5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3BpcGVsaW5lLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vaHR0cC5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3F1b3RhLXRpZXJzLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vZmVhdHVyZS1mbGFncy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3Blcm1pc3Npb25zLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vYXVkaXQtZXZlbnRzLmpzJztcbiJdfQ==
@@ -0,0 +1,36 @@
1
+ import type { OrgRole } from './common.js';
2
+ /**
3
+ * Canonical fine-grained permission identifiers, in `resource:action` form.
4
+ *
5
+ * These are the ORG-SCOPED capabilities a group can grant (RBAC). Coarse by
6
+ * design — `:write` covers create/update/delete for a resource — so the catalog
7
+ * and permission-picker UI stay small; split a `:write` into `:create`/`:delete`
8
+ * later if a resource needs it.
9
+ *
10
+ * NOT modeled here (intentionally): platform-operator actions (org delete, tier/
11
+ * quota override, user admin, impersonation, platform settings) stay behind the
12
+ * global `isSuperAdmin` flag, not a per-org permission; and `requireStepUp`
13
+ * (MFA) / `requireFeature` (plan entitlements) remain orthogonal gates.
14
+ */
15
+ export type Permission = 'pipelines:read' | 'pipelines:write' | 'plugins:read' | 'plugins:write' | 'compliance:read' | 'compliance:write' | 'members:manage' | 'groups:manage' | 'invitations:manage' | 'dashboards:read' | 'dashboards:write' | 'observability:read' | 'observability:write' | 'reports:read' | 'messages:read' | 'messages:write' | 'billing:read' | 'billing:manage' | 'quotas:read' | 'registry:read' | 'registry:write' | 'org:settings';
16
+ /** All valid permissions (order determines display order in the picker). */
17
+ export declare const ALL_PERMISSIONS: readonly Permission[];
18
+ /** Check whether a string is a valid Permission. */
19
+ export declare function isValidPermission(value: string): value is Permission;
20
+ export declare const ROLE_PERMISSIONS: Record<OrgRole, readonly Permission[]>;
21
+ /**
22
+ * Resolve a user's effective org permissions.
23
+ *
24
+ * 1. Platform superadmins (isSuperAdmin) always get ALL permissions.
25
+ * 2. Start from the base role's bundle ({@link ROLE_PERMISSIONS}).
26
+ * 3. Union in every permission granted by the user's custom groups.
27
+ * 4. Invalid permission strings are silently ignored.
28
+ *
29
+ * @param role - The user's org role (owner/admin/member)
30
+ * @param groupPermissions - Flattened permissions from all of the user's groups
31
+ * @param isSuperAdmin - Whether the user has the global super-admin flag
32
+ * @returns Sorted array of effective permissions (canonical order)
33
+ */
34
+ export declare function resolveUserPermissions(role: OrgRole, groupPermissions?: readonly string[] | null, isSuperAdmin?: boolean): Permission[];
35
+ /** Whether a resolved permission list grants `permission` (superadmin ⇒ always). */
36
+ export declare function hasPermission(granted: readonly string[] | null | undefined, permission: Permission, isSuperAdmin?: boolean): boolean;
@@ -0,0 +1,87 @@
1
+ // Copyright 2026 Pipeline Builder Contributors
2
+ // SPDX-License-Identifier: Apache-2.0
3
+ /** All valid permissions (order determines display order in the picker). */
4
+ export const ALL_PERMISSIONS = [
5
+ 'pipelines:read', 'pipelines:write',
6
+ 'plugins:read', 'plugins:write',
7
+ 'compliance:read', 'compliance:write',
8
+ 'members:manage', 'groups:manage', 'invitations:manage',
9
+ 'dashboards:read', 'dashboards:write',
10
+ 'observability:read', 'observability:write',
11
+ 'reports:read',
12
+ 'messages:read', 'messages:write',
13
+ 'billing:read', 'billing:manage',
14
+ 'quotas:read',
15
+ 'registry:read', 'registry:write',
16
+ 'org:settings',
17
+ ];
18
+ /** Check whether a string is a valid Permission. */
19
+ export function isValidPermission(value) {
20
+ return ALL_PERMISSIONS.includes(value);
21
+ }
22
+ // =============================================================================
23
+ // Role → permission bundles
24
+ // =============================================================================
25
+ /**
26
+ * Default permission bundle for each org role. Seeds the built-in groups and
27
+ * provides a user's baseline permissions (unioned with any custom-group grants).
28
+ *
29
+ * - `member` — day-to-day builder: read + write on pipelines/plugins, read
30
+ * elsewhere. No member/group/billing management, no compliance/alert authoring.
31
+ * - `admin` — full org administration (everything below).
32
+ * - `owner` — same as admin (ownership itself — transfer/delete — is gated
33
+ * separately, not via a permission).
34
+ */
35
+ const MEMBER_PERMISSIONS = [
36
+ 'pipelines:read', 'pipelines:write',
37
+ 'plugins:read', 'plugins:write',
38
+ 'compliance:read',
39
+ 'dashboards:read',
40
+ 'observability:read',
41
+ 'reports:read',
42
+ 'messages:read', 'messages:write',
43
+ 'billing:read',
44
+ 'quotas:read',
45
+ 'registry:read',
46
+ ];
47
+ const ADMIN_PERMISSIONS = [...ALL_PERMISSIONS];
48
+ export const ROLE_PERMISSIONS = {
49
+ member: MEMBER_PERMISSIONS,
50
+ admin: ADMIN_PERMISSIONS,
51
+ owner: ADMIN_PERMISSIONS,
52
+ };
53
+ // =============================================================================
54
+ // Resolution
55
+ // =============================================================================
56
+ /**
57
+ * Resolve a user's effective org permissions.
58
+ *
59
+ * 1. Platform superadmins (isSuperAdmin) always get ALL permissions.
60
+ * 2. Start from the base role's bundle ({@link ROLE_PERMISSIONS}).
61
+ * 3. Union in every permission granted by the user's custom groups.
62
+ * 4. Invalid permission strings are silently ignored.
63
+ *
64
+ * @param role - The user's org role (owner/admin/member)
65
+ * @param groupPermissions - Flattened permissions from all of the user's groups
66
+ * @param isSuperAdmin - Whether the user has the global super-admin flag
67
+ * @returns Sorted array of effective permissions (canonical order)
68
+ */
69
+ export function resolveUserPermissions(role, groupPermissions, isSuperAdmin) {
70
+ if (isSuperAdmin)
71
+ return [...ALL_PERMISSIONS];
72
+ const perms = new Set(ROLE_PERMISSIONS[role] ?? ROLE_PERMISSIONS.member);
73
+ if (groupPermissions) {
74
+ for (const p of groupPermissions) {
75
+ if (isValidPermission(p))
76
+ perms.add(p);
77
+ }
78
+ }
79
+ return ALL_PERMISSIONS.filter(p => perms.has(p));
80
+ }
81
+ /** Whether a resolved permission list grants `permission` (superadmin ⇒ always). */
82
+ export function hasPermission(granted, permission, isSuperAdmin) {
83
+ if (isSuperAdmin)
84
+ return true;
85
+ return !!granted && granted.includes(permission);
86
+ }
87
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHlwZXMvcGVybWlzc2lvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQXVEdEMsNEVBQTRFO0FBQzVFLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBMEI7SUFDcEQsZ0JBQWdCLEVBQUUsaUJBQWlCO0lBQ25DLGNBQWMsRUFBRSxlQUFlO0lBQy9CLGlCQUFpQixFQUFFLGtCQUFrQjtJQUNyQyxnQkFBZ0IsRUFBRSxlQUFlLEVBQUUsb0JBQW9CO0lBQ3ZELGlCQUFpQixFQUFFLGtCQUFrQjtJQUNyQyxvQkFBb0IsRUFBRSxxQkFBcUI7SUFDM0MsY0FBYztJQUNkLGVBQWUsRUFBRSxnQkFBZ0I7SUFDakMsY0FBYyxFQUFFLGdCQUFnQjtJQUNoQyxhQUFhO0lBQ2IsZUFBZSxFQUFFLGdCQUFnQjtJQUNqQyxjQUFjO0NBQ2YsQ0FBQztBQUVGLG9EQUFvRDtBQUNwRCxNQUFNLFVBQVUsaUJBQWlCLENBQUMsS0FBYTtJQUM3QyxPQUFRLGVBQXFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ2hFLENBQUM7QUFFRCxnRkFBZ0Y7QUFDaEYsNEJBQTRCO0FBQzVCLGdGQUFnRjtBQUVoRjs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFNLGtCQUFrQixHQUEwQjtJQUNoRCxnQkFBZ0IsRUFBRSxpQkFBaUI7SUFDbkMsY0FBYyxFQUFFLGVBQWU7SUFDL0IsaUJBQWlCO0lBQ2pCLGlCQUFpQjtJQUNqQixvQkFBb0I7SUFDcEIsY0FBYztJQUNkLGVBQWUsRUFBRSxnQkFBZ0I7SUFDakMsY0FBYztJQUNkLGFBQWE7SUFDYixlQUFlO0NBQ2hCLENBQUM7QUFFRixNQUFNLGlCQUFpQixHQUEwQixDQUFDLEdBQUcsZUFBZSxDQUFDLENBQUM7QUFFdEUsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQTJDO0lBQ3RFLE1BQU0sRUFBRSxrQkFBa0I7SUFDMUIsS0FBSyxFQUFFLGlCQUFpQjtJQUN4QixLQUFLLEVBQUUsaUJBQWlCO0NBQ3pCLENBQUM7QUFFRixnRkFBZ0Y7QUFDaEYsYUFBYTtBQUNiLGdGQUFnRjtBQUVoRjs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxNQUFNLFVBQVUsc0JBQXNCLENBQ3BDLElBQWEsRUFDYixnQkFBMkMsRUFDM0MsWUFBc0I7SUFFdEIsSUFBSSxZQUFZO1FBQUUsT0FBTyxDQUFDLEdBQUcsZUFBZSxDQUFDLENBQUM7SUFFOUMsTUFBTSxLQUFLLEdBQUcsSUFBSSxHQUFHLENBQWEsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDckYsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3JCLEtBQUssTUFBTSxDQUFDLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztZQUNqQyxJQUFJLGlCQUFpQixDQUFDLENBQUMsQ0FBQztnQkFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3pDLENBQUM7SUFDSCxDQUFDO0lBQ0QsT0FBTyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ25ELENBQUM7QUFFRCxvRkFBb0Y7QUFDcEYsTUFBTSxVQUFVLGFBQWEsQ0FDM0IsT0FBNkMsRUFDN0MsVUFBc0IsRUFDdEIsWUFBc0I7SUFFdEIsSUFBSSxZQUFZO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFDOUIsT0FBTyxDQUFDLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDbkQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgdHlwZSB7IE9yZ1JvbGUgfSBmcm9tICcuL2NvbW1vbi5qcyc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBQZXJtaXNzaW9uIGlkZW50aWZpZXJzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIENhbm9uaWNhbCBmaW5lLWdyYWluZWQgcGVybWlzc2lvbiBpZGVudGlmaWVycywgaW4gYHJlc291cmNlOmFjdGlvbmAgZm9ybS5cbiAqXG4gKiBUaGVzZSBhcmUgdGhlIE9SRy1TQ09QRUQgY2FwYWJpbGl0aWVzIGEgZ3JvdXAgY2FuIGdyYW50IChSQkFDKS4gQ29hcnNlIGJ5XG4gKiBkZXNpZ24g4oCUIGA6d3JpdGVgIGNvdmVycyBjcmVhdGUvdXBkYXRlL2RlbGV0ZSBmb3IgYSByZXNvdXJjZSDigJQgc28gdGhlIGNhdGFsb2dcbiAqIGFuZCBwZXJtaXNzaW9uLXBpY2tlciBVSSBzdGF5IHNtYWxsOyBzcGxpdCBhIGA6d3JpdGVgIGludG8gYDpjcmVhdGVgL2A6ZGVsZXRlYFxuICogbGF0ZXIgaWYgYSByZXNvdXJjZSBuZWVkcyBpdC5cbiAqXG4gKiBOT1QgbW9kZWxlZCBoZXJlIChpbnRlbnRpb25hbGx5KTogcGxhdGZvcm0tb3BlcmF0b3IgYWN0aW9ucyAob3JnIGRlbGV0ZSwgdGllci9cbiAqIHF1b3RhIG92ZXJyaWRlLCB1c2VyIGFkbWluLCBpbXBlcnNvbmF0aW9uLCBwbGF0Zm9ybSBzZXR0aW5ncykgc3RheSBiZWhpbmQgdGhlXG4gKiBnbG9iYWwgYGlzU3VwZXJBZG1pbmAgZmxhZywgbm90IGEgcGVyLW9yZyBwZXJtaXNzaW9uOyBhbmQgYHJlcXVpcmVTdGVwVXBgXG4gKiAoTUZBKSAvIGByZXF1aXJlRmVhdHVyZWAgKHBsYW4gZW50aXRsZW1lbnRzKSByZW1haW4gb3J0aG9nb25hbCBnYXRlcy5cbiAqL1xuZXhwb3J0IHR5cGUgUGVybWlzc2lvbiA9XG4gIC8vIFBpcGVsaW5lc1xuICB8ICdwaXBlbGluZXM6cmVhZCdcbiAgfCAncGlwZWxpbmVzOndyaXRlJ1xuICAvLyBQbHVnaW5zXG4gIHwgJ3BsdWdpbnM6cmVhZCdcbiAgfCAncGx1Z2luczp3cml0ZSdcbiAgLy8gQ29tcGxpYW5jZVxuICB8ICdjb21wbGlhbmNlOnJlYWQnXG4gIHwgJ2NvbXBsaWFuY2U6d3JpdGUnXG4gIC8vIE1lbWJlcnMgJiBhY2Nlc3NcbiAgfCAnbWVtYmVyczptYW5hZ2UnXG4gIHwgJ2dyb3VwczptYW5hZ2UnXG4gIHwgJ2ludml0YXRpb25zOm1hbmFnZSdcbiAgLy8gT2JzZXJ2YWJpbGl0eVxuICB8ICdkYXNoYm9hcmRzOnJlYWQnXG4gIHwgJ2Rhc2hib2FyZHM6d3JpdGUnXG4gIHwgJ29ic2VydmFiaWxpdHk6cmVhZCdcbiAgfCAnb2JzZXJ2YWJpbGl0eTp3cml0ZSdcbiAgLy8gSW5zaWdodHNcbiAgfCAncmVwb3J0czpyZWFkJ1xuICAvLyBNZXNzYWdpbmdcbiAgfCAnbWVzc2FnZXM6cmVhZCdcbiAgfCAnbWVzc2FnZXM6d3JpdGUnXG4gIC8vIEJpbGxpbmcgJiBxdW90YXNcbiAgfCAnYmlsbGluZzpyZWFkJ1xuICB8ICdiaWxsaW5nOm1hbmFnZSdcbiAgfCAncXVvdGFzOnJlYWQnXG4gIC8vIFJlZ2lzdHJ5XG4gIHwgJ3JlZ2lzdHJ5OnJlYWQnXG4gIHwgJ3JlZ2lzdHJ5OndyaXRlJ1xuICAvLyBPcmdhbml6YXRpb24gc2V0dGluZ3MgKElkUCwgS01TLCBBSSBjb25maWcsIGdlbmVyYWwgc2V0dGluZ3MpXG4gIHwgJ29yZzpzZXR0aW5ncyc7XG5cbi8qKiBBbGwgdmFsaWQgcGVybWlzc2lvbnMgKG9yZGVyIGRldGVybWluZXMgZGlzcGxheSBvcmRlciBpbiB0aGUgcGlja2VyKS4gKi9cbmV4cG9ydCBjb25zdCBBTExfUEVSTUlTU0lPTlM6IHJlYWRvbmx5IFBlcm1pc3Npb25bXSA9IFtcbiAgJ3BpcGVsaW5lczpyZWFkJywgJ3BpcGVsaW5lczp3cml0ZScsXG4gICdwbHVnaW5zOnJlYWQnLCAncGx1Z2luczp3cml0ZScsXG4gICdjb21wbGlhbmNlOnJlYWQnLCAnY29tcGxpYW5jZTp3cml0ZScsXG4gICdtZW1iZXJzOm1hbmFnZScsICdncm91cHM6bWFuYWdlJywgJ2ludml0YXRpb25zOm1hbmFnZScsXG4gICdkYXNoYm9hcmRzOnJlYWQnLCAnZGFzaGJvYXJkczp3cml0ZScsXG4gICdvYnNlcnZhYmlsaXR5OnJlYWQnLCAnb2JzZXJ2YWJpbGl0eTp3cml0ZScsXG4gICdyZXBvcnRzOnJlYWQnLFxuICAnbWVzc2FnZXM6cmVhZCcsICdtZXNzYWdlczp3cml0ZScsXG4gICdiaWxsaW5nOnJlYWQnLCAnYmlsbGluZzptYW5hZ2UnLFxuICAncXVvdGFzOnJlYWQnLFxuICAncmVnaXN0cnk6cmVhZCcsICdyZWdpc3RyeTp3cml0ZScsXG4gICdvcmc6c2V0dGluZ3MnLFxuXTtcblxuLyoqIENoZWNrIHdoZXRoZXIgYSBzdHJpbmcgaXMgYSB2YWxpZCBQZXJtaXNzaW9uLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWRQZXJtaXNzaW9uKHZhbHVlOiBzdHJpbmcpOiB2YWx1ZSBpcyBQZXJtaXNzaW9uIHtcbiAgcmV0dXJuIChBTExfUEVSTUlTU0lPTlMgYXMgcmVhZG9ubHkgc3RyaW5nW10pLmluY2x1ZGVzKHZhbHVlKTtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFJvbGUg4oaSIHBlcm1pc3Npb24gYnVuZGxlc1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBEZWZhdWx0IHBlcm1pc3Npb24gYnVuZGxlIGZvciBlYWNoIG9yZyByb2xlLiBTZWVkcyB0aGUgYnVpbHQtaW4gZ3JvdXBzIGFuZFxuICogcHJvdmlkZXMgYSB1c2VyJ3MgYmFzZWxpbmUgcGVybWlzc2lvbnMgKHVuaW9uZWQgd2l0aCBhbnkgY3VzdG9tLWdyb3VwIGdyYW50cykuXG4gKlxuICogLSBgbWVtYmVyYCAg4oCUIGRheS10by1kYXkgYnVpbGRlcjogcmVhZCArIHdyaXRlIG9uIHBpcGVsaW5lcy9wbHVnaW5zLCByZWFkXG4gKiAgIGVsc2V3aGVyZS4gTm8gbWVtYmVyL2dyb3VwL2JpbGxpbmcgbWFuYWdlbWVudCwgbm8gY29tcGxpYW5jZS9hbGVydCBhdXRob3JpbmcuXG4gKiAtIGBhZG1pbmAgICDigJQgZnVsbCBvcmcgYWRtaW5pc3RyYXRpb24gKGV2ZXJ5dGhpbmcgYmVsb3cpLlxuICogLSBgb3duZXJgICAg4oCUIHNhbWUgYXMgYWRtaW4gKG93bmVyc2hpcCBpdHNlbGYg4oCUIHRyYW5zZmVyL2RlbGV0ZSDigJQgaXMgZ2F0ZWRcbiAqICAgc2VwYXJhdGVseSwgbm90IHZpYSBhIHBlcm1pc3Npb24pLlxuICovXG5jb25zdCBNRU1CRVJfUEVSTUlTU0lPTlM6IHJlYWRvbmx5IFBlcm1pc3Npb25bXSA9IFtcbiAgJ3BpcGVsaW5lczpyZWFkJywgJ3BpcGVsaW5lczp3cml0ZScsXG4gICdwbHVnaW5zOnJlYWQnLCAncGx1Z2luczp3cml0ZScsXG4gICdjb21wbGlhbmNlOnJlYWQnLFxuICAnZGFzaGJvYXJkczpyZWFkJyxcbiAgJ29ic2VydmFiaWxpdHk6cmVhZCcsXG4gICdyZXBvcnRzOnJlYWQnLFxuICAnbWVzc2FnZXM6cmVhZCcsICdtZXNzYWdlczp3cml0ZScsXG4gICdiaWxsaW5nOnJlYWQnLFxuICAncXVvdGFzOnJlYWQnLFxuICAncmVnaXN0cnk6cmVhZCcsXG5dO1xuXG5jb25zdCBBRE1JTl9QRVJNSVNTSU9OUzogcmVhZG9ubHkgUGVybWlzc2lvbltdID0gWy4uLkFMTF9QRVJNSVNTSU9OU107XG5cbmV4cG9ydCBjb25zdCBST0xFX1BFUk1JU1NJT05TOiBSZWNvcmQ8T3JnUm9sZSwgcmVhZG9ubHkgUGVybWlzc2lvbltdPiA9IHtcbiAgbWVtYmVyOiBNRU1CRVJfUEVSTUlTU0lPTlMsXG4gIGFkbWluOiBBRE1JTl9QRVJNSVNTSU9OUyxcbiAgb3duZXI6IEFETUlOX1BFUk1JU1NJT05TLFxufTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFJlc29sdXRpb25cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogUmVzb2x2ZSBhIHVzZXIncyBlZmZlY3RpdmUgb3JnIHBlcm1pc3Npb25zLlxuICpcbiAqIDEuIFBsYXRmb3JtIHN1cGVyYWRtaW5zIChpc1N1cGVyQWRtaW4pIGFsd2F5cyBnZXQgQUxMIHBlcm1pc3Npb25zLlxuICogMi4gU3RhcnQgZnJvbSB0aGUgYmFzZSByb2xlJ3MgYnVuZGxlICh7QGxpbmsgUk9MRV9QRVJNSVNTSU9OU30pLlxuICogMy4gVW5pb24gaW4gZXZlcnkgcGVybWlzc2lvbiBncmFudGVkIGJ5IHRoZSB1c2VyJ3MgY3VzdG9tIGdyb3Vwcy5cbiAqIDQuIEludmFsaWQgcGVybWlzc2lvbiBzdHJpbmdzIGFyZSBzaWxlbnRseSBpZ25vcmVkLlxuICpcbiAqIEBwYXJhbSByb2xlIC0gVGhlIHVzZXIncyBvcmcgcm9sZSAob3duZXIvYWRtaW4vbWVtYmVyKVxuICogQHBhcmFtIGdyb3VwUGVybWlzc2lvbnMgLSBGbGF0dGVuZWQgcGVybWlzc2lvbnMgZnJvbSBhbGwgb2YgdGhlIHVzZXIncyBncm91cHNcbiAqIEBwYXJhbSBpc1N1cGVyQWRtaW4gLSBXaGV0aGVyIHRoZSB1c2VyIGhhcyB0aGUgZ2xvYmFsIHN1cGVyLWFkbWluIGZsYWdcbiAqIEByZXR1cm5zIFNvcnRlZCBhcnJheSBvZiBlZmZlY3RpdmUgcGVybWlzc2lvbnMgKGNhbm9uaWNhbCBvcmRlcilcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVVc2VyUGVybWlzc2lvbnMoXG4gIHJvbGU6IE9yZ1JvbGUsXG4gIGdyb3VwUGVybWlzc2lvbnM/OiByZWFkb25seSBzdHJpbmdbXSB8IG51bGwsXG4gIGlzU3VwZXJBZG1pbj86IGJvb2xlYW4sXG4pOiBQZXJtaXNzaW9uW10ge1xuICBpZiAoaXNTdXBlckFkbWluKSByZXR1cm4gWy4uLkFMTF9QRVJNSVNTSU9OU107XG5cbiAgY29uc3QgcGVybXMgPSBuZXcgU2V0PFBlcm1pc3Npb24+KFJPTEVfUEVSTUlTU0lPTlNbcm9sZV0gPz8gUk9MRV9QRVJNSVNTSU9OUy5tZW1iZXIpO1xuICBpZiAoZ3JvdXBQZXJtaXNzaW9ucykge1xuICAgIGZvciAoY29uc3QgcCBvZiBncm91cFBlcm1pc3Npb25zKSB7XG4gICAgICBpZiAoaXNWYWxpZFBlcm1pc3Npb24ocCkpIHBlcm1zLmFkZChwKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIEFMTF9QRVJNSVNTSU9OUy5maWx0ZXIocCA9PiBwZXJtcy5oYXMocCkpO1xufVxuXG4vKiogV2hldGhlciBhIHJlc29sdmVkIHBlcm1pc3Npb24gbGlzdCBncmFudHMgYHBlcm1pc3Npb25gIChzdXBlcmFkbWluIOKHkiBhbHdheXMpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhc1Blcm1pc3Npb24oXG4gIGdyYW50ZWQ6IHJlYWRvbmx5IHN0cmluZ1tdIHwgbnVsbCB8IHVuZGVmaW5lZCxcbiAgcGVybWlzc2lvbjogUGVybWlzc2lvbixcbiAgaXNTdXBlckFkbWluPzogYm9vbGVhbixcbik6IGJvb2xlYW4ge1xuICBpZiAoaXNTdXBlckFkbWluKSByZXR1cm4gdHJ1ZTtcbiAgcmV0dXJuICEhZ3JhbnRlZCAmJiBncmFudGVkLmluY2x1ZGVzKHBlcm1pc3Npb24pO1xufVxuIl19
@@ -26,7 +26,7 @@ const DEFAULT_TIER_LIMITS = {
26
26
  // Free tier: single seat, apiCalls CAPPED (was unlimited — a DoS/abuse hole
27
27
  // on a shared resource); aiCalls small (each has ~$0.01-0.10 external cost).
28
28
  developer: {
29
- plugins: 50,
29
+ plugins: 25,
30
30
  pipelines: 5,
31
31
  apiCalls: 25_000,
32
32
  aiCalls: 50,
@@ -37,10 +37,10 @@ const DEFAULT_TIER_LIMITS = {
37
37
  idpConfigs: 1,
38
38
  seats: 1,
39
39
  },
40
- // Pro = one power user (a few seats for pairing), individual pricing.
40
+ // Pro = one power user, individual pricing.
41
41
  pro: {
42
- plugins: 500,
43
- pipelines: 50,
42
+ plugins: 50,
43
+ pipelines: 10,
44
44
  apiCalls: 500_000,
45
45
  aiCalls: 2_500,
46
46
  storageBytes: 50 * GB,
@@ -48,12 +48,12 @@ const DEFAULT_TIER_LIMITS = {
48
48
  alertRules: 500,
49
49
  alertDestinations: 50,
50
50
  idpConfigs: 5,
51
- seats: 3,
51
+ seats: 1,
52
52
  },
53
53
  // Team = collaboration tier; the seat limit (10) is the real differentiator
54
54
  // over Pro. Limits sit between Pro and Enterprise.
55
55
  team: {
56
- plugins: 2_000,
56
+ plugins: 100,
57
57
  pipelines: 200,
58
58
  apiCalls: -1,
59
59
  aiCalls: 10_000,
@@ -64,12 +64,12 @@ const DEFAULT_TIER_LIMITS = {
64
64
  idpConfigs: 5,
65
65
  seats: 10,
66
66
  },
67
- // Enterprise: org-wide, unlimited seats. FAIR-USE, not literally unlimited
68
- // cost drivers (aiCalls, storageBytes) capped high so one account can't run up
69
- // unbounded provider/storage cost on a flat price; cheap count-quotas stay -1.
67
+ // Enterprise: org-wide, high seat cap. FAIR-USE cost drivers (aiCalls,
68
+ // storageBytes) capped high so one account can't run up unbounded provider/
69
+ // storage cost on a flat price; cheap count-quotas stay -1.
70
70
  enterprise: {
71
- plugins: 5_000,
72
- pipelines: 500,
71
+ plugins: 250,
72
+ pipelines: 200,
73
73
  apiCalls: -1,
74
74
  aiCalls: 25_000,
75
75
  storageBytes: TB,
@@ -77,7 +77,7 @@ const DEFAULT_TIER_LIMITS = {
77
77
  alertRules: -1,
78
78
  alertDestinations: -1,
79
79
  idpConfigs: -1,
80
- seats: -1,
80
+ seats: 25,
81
81
  },
82
82
  };
83
83
  /** Read an integer env var, falling back to the code default. `-1` = unlimited. */
@@ -144,4 +144,4 @@ export function isValidTier(value) {
144
144
  export function getTierLimits(tier) {
145
145
  return isValidTier(tier) ? QUOTA_TIERS[tier].limits : QUOTA_TIERS.developer.limits;
146
146
  }
147
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVvdGEtdGllcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHlwZXMvcXVvdGEtdGllcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQXNDdEM7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsTUFBTSxFQUFFLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUM7QUFFOUI7Ozs7OztHQU1HO0FBQ0gsTUFBTSxFQUFFLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUNyQixNQUFNLG1CQUFtQixHQUF1QztJQUM5RCw0RUFBNEU7SUFDNUUsNkVBQTZFO0lBQzdFLFNBQVMsRUFBRTtRQUNULE9BQU8sRUFBRSxFQUFFO1FBQ1gsU0FBUyxFQUFFLENBQUM7UUFDWixRQUFRLEVBQUUsTUFBTTtRQUNoQixPQUFPLEVBQUUsRUFBRTtRQUNYLFlBQVksRUFBRSxDQUFDLEdBQUcsRUFBRTtRQUNwQixVQUFVLEVBQUUsRUFBRTtRQUNkLFVBQVUsRUFBRSxFQUFFO1FBQ2QsaUJBQWlCLEVBQUUsRUFBRTtRQUNyQixVQUFVLEVBQUUsQ0FBQztRQUNiLEtBQUssRUFBRSxDQUFDO0tBQ1Q7SUFDRCxzRUFBc0U7SUFDdEUsR0FBRyxFQUFFO1FBQ0gsT0FBTyxFQUFFLEdBQUc7UUFDWixTQUFTLEVBQUUsRUFBRTtRQUNiLFFBQVEsRUFBRSxPQUFPO1FBQ2pCLE9BQU8sRUFBRSxLQUFLO1FBQ2QsWUFBWSxFQUFFLEVBQUUsR0FBRyxFQUFFO1FBQ3JCLFVBQVUsRUFBRSxHQUFHO1FBQ2YsVUFBVSxFQUFFLEdBQUc7UUFDZixpQkFBaUIsRUFBRSxFQUFFO1FBQ3JCLFVBQVUsRUFBRSxDQUFDO1FBQ2IsS0FBSyxFQUFFLENBQUM7S0FDVDtJQUNELDRFQUE0RTtJQUM1RSxtREFBbUQ7SUFDbkQsSUFBSSxFQUFFO1FBQ0osT0FBTyxFQUFFLEtBQUs7UUFDZCxTQUFTLEVBQUUsR0FBRztRQUNkLFFBQVEs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LENBQUMsQ0FBQztBQUM1RCxDQUFDO0FBRUQseUVBQXlFO0FBQ3pFLE1BQU0sVUFBVSxhQUFhLENBQUMsSUFBWTtJQUN4QyxPQUFPLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQSxDQUFDLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUM7QUFDcEYsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKiogQXZhaWxhYmxlIHF1b3RhIHRpZXIgaWRlbnRpZmllcnMuICovXG5leHBvcnQgdHlwZSBRdW90YVRpZXIgPSAnZGV2ZWxvcGVyJyB8ICdwcm8nIHwgJ3RlYW0nIHwgJ2VudGVycHJpc2UnO1xuXG4vKiogTGltaXQgdmFsdWVzIGZvciBlYWNoIHF1b3RhIHR5cGUgd2l0aGluIGEgdGllci4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUXVvdGFUaWVyTGltaXRzIHtcbiAgcGx1Z2luczogbnVtYmVyO1xuICBwaXBlbGluZXM6IG51bWJlcjtcbiAgYXBpQ2FsbHM6IG51bWJlcjtcbiAgYWlDYWxsczogbnVtYmVyO1xuICAvKipcbiAgICogQWdncmVnYXRlIHJlZ2lzdHJ5IHN0b3JhZ2UgY2FwIGluIEJZVEVTLiBDb3VudGVkIGFjcm9zcyBldmVyeSByZXBvXG4gICAqIHVuZGVyIHRoZSBvcmcncyBgb3JnLXtvcmdJZH0vYCBuYW1lc3BhY2UuIC0xIG1lYW5zIHVubGltaXRlZC5cbiAgICogcHVzaC1nYXRlIHJlYWRzIHRoaXM7IHRoZSBpbWFnZS1yZWdpc3RyeSByZWplY3RzIHRva2VuIGlzc3VhbmNlIGZvclxuICAgKiBgcHVzaGAgc2NvcGUgd2hlbiB0aGUgb3JnJ3MgbWVhc3VyZWQgdXNhZ2UgZXhjZWVkcyB0aGUgbGltaXQuXG4gICAqL1xuICBzdG9yYWdlQnl0ZXM6IG51bWJlcjtcbiAgLyoqIENvdW50LXF1b3RhcyBvbiB0aGUgdXNlci1lZGl0YWJsZSBmZWF0dXJlIHRhYmxlcyBhZGRlZCB0byBjbG9zZSBwZXItb3JnXG4gICAqICBEb1MgdmlhIHNwYW0uIC0xIG1lYW5zIHVubGltaXRlZC4gKi9cbiAgZGFzaGJvYXJkczogbnVtYmVyO1xuICBhbGVydFJ1bGVzOiBudW1iZXI7XG4gIGFsZXJ0RGVzdGluYXRpb25zOiBudW1iZXI7XG4gIGlkcENvbmZpZ3M6IG51bWJlcjtcbiAgLyoqXG4gICAqIE1heCBvcmcgbWVtYmVycyAoYWN0aXZlIHVzZXJzIC8gc2VhdHMpLiAtMSA9IHVubGltaXRlZC4gVGhpcyBpcyB0aGUgXCJUZWFtXCJcbiAgICogdGllciBkaWZmZXJlbnRpYXRvciDigJQgZW5mb3JjZWQgYXQgbWVtYmVyLWludml0ZSB0aW1lIChhbiBpbnZpdGUgaXMgYmxvY2tlZFxuICAgKiB3aGVuIGFjdGl2ZSBtZW1iZXJzICsgcGVuZGluZyBpbnZpdGVzIHdvdWxkIGV4Y2VlZCB0aGlzKS5cbiAgICovXG4gIHNlYXRzOiBudW1iZXI7XG59XG5cbi8qKiBGdWxsIHByZXNldCBmb3IgYSBzaW5nbGUgdGllciAobGFiZWwgKyBsaW1pdHMpLiAqL1xuZXhwb3J0IGludGVyZmFjZSBRdW90YVRpZXJQcmVzZXQge1xuICBsYWJlbDogc3RyaW5nO1xuICBsaW1pdHM6IFF1b3RhVGllckxpbWl0cztcbn1cblxuLyoqXG4gKiBQcmVzZXQgbGltaXRzIGZvciBlYWNoIHRpZXIuIC0xIG1lYW5zIHVubGltaXRlZC5cbiAqXG4gKiBBSSBjYWxscyBhcmUgc2l6ZWQgbXVjaCBzbWFsbGVyIHRoYW4gYGFwaUNhbGxzYCBiZWNhdXNlIGVhY2ggY2FsbCBoYXNcbiAqIGV4dGVybmFsIHByb3ZpZGVyIGNvc3QgKH4kMC4wMSQwLjEwL2NhbGwpLiBEZXZlbG9wZXIgdGllciBhbGxvd3MgbGlnaHRcbiAqIGV4cGxvcmF0aW9uICg1MC9wZXJpb2QpOyBQcm8gbGlmdHMgdG8gMiw1MDA7IEVudGVycHJpc2UgaXMgY2FwcGVkIGhpZ2hcbiAqICgyNSwwMDApIOKAlCBmYWlyLXVzZSwgbm90IGxpdGVyYWxseSB1bmxpbWl0ZWQuXG4gKlxuICogYHN0b3JhZ2VCeXRlc2AgaXMgdGhlIGFnZ3JlZ2F0ZSByZWdpc3RyeSBjYXAgcGVyIG9yZy4gU2l6ZWRcbiAqIGFyb3VuZCBwbHVnaW4taW1hZ2UgcmVhbGl0aWVzOiBhIHR5cGljYWwgcGx1Z2luIGltYWdlIGlzIDIwMDUwMCBNQjtcbiAqIERldmVsb3BlcidzIDIgR0IgaG9sZHMgfjQgdmVyc2lvbnMgw5cgfjUwMCBNQiwgUHJvJ3MgNTAgR0IgY292ZXJzIGFcbiAqIG1hdHVyZSBjYXRhbG9nLiBPcGVyYXRvcnMgY2FuIG92ZXJyaWRlIHBlci1vcmcgdmlhIHRoZSBxdW90YSBDUlVEIEFQSS5cbiAqL1xuY29uc3QgR0IgPSAxMDI0ICogMTAyNCAqIDEwMjQ7XG5cbi8qKlxuICogQ29kZS1kZWZhdWx0IGxpbWl0cyBwZXIgdGllciDigJQgdGhlIGZhbGxiYWNrIHdoZW4gbm8gZW52IG92ZXJyaWRlIGlzIHNldC5cbiAqIC0xIG1lYW5zIHVubGltaXRlZC4gKENvdW50cyBzaXplZCB0byBcImNvbWZvcnRhYmx5IGVub3VnaCBmb3Igb25lIHRlYW0sIG5vdFxuICogc2NyaXB0IHNwYW1cIjogMjAgZGFzaGJvYXJkcywgNTAgYWxlcnQgcnVsZXMsIDEwIGRlc3RpbmF0aW9ucywgMSBJZFAgY29uZmlnXG4gKiBmb3IgRGV2ZWxvcGVyOyBzY2FsZWQgdXAgZm9yIFBybzsgLTEgKHVuY2FwcGVkKSBmb3IgdGhlIGNvdW50LXF1b3RhcyBvblxuICogVGVhbS9FbnRlcnByaXNlIHdoaWxlIGNvc3QtZHJpdmluZyBxdW90YXMgc3RheSBmaW5pdGUuKVxuICovXG5jb25zdCBUQiA9IDEwMjQgKiBHQjtcbmNvbnN0IERFRkFVTFRfVElFUl9MSU1JVFM6IFJlY29yZDxRdW90YVRpZXIsIFF1b3RhVGllckxpbWl0cz4gPSB7XG4gIC8vIEZyZWUgdGllcjogc2luZ2xlIHNlYXQsIGFwaUNhbGxzIENBUFBFRCAod2FzIHVubGltaXRlZCDigJQgYSBEb1MvYWJ1c2UgaG9sZVxuICAvLyBvbiBhIHNoYXJlZCByZXNvdXJjZSk7IGFpQ2FsbHMgc21hbGwgKGVhY2ggaGFzIH4kMC4wMS0wLjEwIGV4dGVybmFsIGNvc3QpLlxuICBkZXZlbG9wZXI6IHtcbiAgICBwbHVnaW5zOiA1MCxcbiAgICBwaXBlbGluZXM6IDUsXG4gICAgYXBpQ2FsbHM6IDI1XzAwMCxcbiAgICBhaUNhbGxzOiA1MCxcbiAgICBzdG9yYWdlQnl0ZXM6IDIgKiBHQixcbiAgICBkYXNoYm9hcmRzOiAyMCxcbiAgICBhbGVydFJ1bGVzOiA1MCxcbiAgICBhbGVydERlc3RpbmF0aW9uczogMTAsXG4gICAgaWRwQ29uZmlnczogMSxcbiAgICBzZWF0czogMSxcbiAgfSxcbiAgLy8gUHJvID0gb25lIHBvd2VyIHVzZXIgKGEgZmV3IHNlYXRzIGZvciBwYWlyaW5nKSwgaW5kaXZpZHVhbCBwcmljaW5nLlxuICBwcm86IHtcbiAgICBwbHVnaW5zOiA1MDAsXG4gICAgcGlwZWxpbmVzOiA1MCxcbiAgICBhcGlDYWxsczogNTAwXzAwMCxcbiAgICBhaUNhbGxzOiAyXzUwMCxcbiAgICBzdG9yYWdlQnl0ZXM6IDUwICogR0IsXG4gICAgZGFzaGJvYXJkczogMjAwLFxuICAgIGFsZXJ0UnVsZXM6IDUwMCxcbiAgICBhbGVydERlc3RpbmF0aW9uczogNTAsXG4gICAgaWRwQ29uZmlnczogNSxcbiAgICBzZWF0czogMyxcbiAgfSxcbiAgLy8gVGVhbSA9IGNvbGxhYm9yYXRpb24gdGllcjsgdGhlIHNlYXQgbGltaXQgKDEwKSBpcyB0aGUgcmVhbCBkaWZmZXJlbnRpYXRvclxuICAvLyBvdmVyIFByby4gTGltaXRzIHNpdCBiZXR3ZWVuIFBybyBhbmQgRW50ZXJwcmlzZS5cbiAgdGVhbToge1xuICAgIHBsdWdpbnM6IDJfMDAwLFxuICAgIHBpcGVsaW5lczogMjAwLFxuICAgIGFwaUNhbGxzOiAtMSxcbiAgICBhaUNhbGxzOiAxMF8wMDAsXG4gICAgc3RvcmFnZUJ5dGVzOiAyNTAgKiBHQixcbiAgICBkYXNoYm9hcmRzOiAtMSxcbiAgICBhbGVydFJ1bGVzOiAtMSxcbiAgICBhbGVydERlc3RpbmF0aW9uczogLTEsXG4gICAgaWRwQ29uZmlnczogNSxcbiAgICBzZWF0czogMTAsXG4gIH0sXG4gIC8vIEVudGVycHJpc2U6IG9yZy13aWRlLCB1bmxpbWl0ZWQgc2VhdHMuIEZBSVItVVNFLCBub3QgbGl0ZXJhbGx5IHVubGltaXRlZCDigJRcbiAgLy8gY29zdCBkcml2ZXJzIChhaUNhbGxzLCBzdG9yYWdlQnl0ZXMpIGNhcHBlZCBoaWdoIHNvIG9uZSBhY2NvdW50IGNhbid0IHJ1biB1cFxuICAvLyB1bmJvdW5kZWQgcHJvdmlkZXIvc3RvcmFnZSBjb3N0IG9uIGEgZmxhdCBwcmljZTsgY2hlYXAgY291bnQtcXVvdGFzIHN0YXkgLTEuXG4gIGVudGVycHJpc2U6IHtcbiAgICBwbHVnaW5zOiA1XzAwMCxcbiAgICBwaXBlbGluZXM6IDUwMCxcbiAgICBhcGlDYWxsczogLTEsXG4gICAgYWlDYWxsczogMjVfMDAwLFxuICAgIHN0b3JhZ2VCeXRlczogVEIsXG4gICAgZGFzaGJvYXJkczogLTEsXG4gICAgYWxlcnRSdWxlczogLTEsXG4gICAgYWxlcnREZXN0aW5hdGlvbnM6IC0xLFxuICAgIGlkcENvbmZpZ3M6IC0xLFxuICAgIHNlYXRzOiAtMSxcbiAgfSxcbn07XG5cbi8qKiBSZWFkIGFuIGludGVnZXIgZW52IHZhciwgZmFsbGluZyBiYWNrIHRvIHRoZSBjb2RlIGRlZmF1bHQuIGAtMWAgPSB1bmxpbWl0ZWQuICovXG5mdW5jdGlvbiBlbnZJbnQobmFtZTogc3RyaW5nLCBmYWxsYmFjazogbnVtYmVyKTogbnVtYmVyIHtcbiAgY29uc3QgcmF3ID0gcHJvY2Vzcy5lbnZbbmFtZV07XG4gIGlmIChyYXcgPT09IHVuZGVmaW5lZCB8fCByYXcgPT09ICcnKSByZXR1cm4gZmFsbGJhY2s7XG4gIGNvbnN0IG4gPSBwYXJzZUludChyYXcsIDEwKTtcbiAgcmV0dXJuIE51bWJlci5pc05hTihuKSA/IGZhbGxiYWNrIDogbjtcbn1cblxuLyoqIFJlYWQgYSBzdHJpbmcgZW52IHZhciwgZmFsbGluZyBiYWNrIHRvIHRoZSBjb2RlIGRlZmF1bHQuICovXG5mdW5jdGlvbiBlbnZTdHIobmFtZTogc3RyaW5nLCBmYWxsYmFjazogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgcmF3ID0gcHJvY2Vzcy5lbnZbbmFtZV07XG4gIHJldHVybiByYXcgPT09IHVuZGVmaW5lZCB8fCByYXcgPT09ICcnID8gZmFsbGJhY2sgOiByYXc7XG59XG5cbi8qKlxuICogUGVyLXRpZXIgbGltaXRzLCBlYWNoIG92ZXJyaWRhYmxlIHZpYSBgUVVPVEFfVElFUl88VElFUj5fPExJTUlUPmAgZW52IHZhcnNcbiAqIChlLmcuIGBRVU9UQV9USUVSX1BST19QSVBFTElORVM9MjUwYCwgYFFVT1RBX1RJRVJfREVWRUxPUEVSX1NUT1JBR0VfQllURVM9Li4uYCkuXG4gKiBVbnNldC9lbXB0eSDihpIgdGhlIGNvZGUgZGVmYXVsdC4gYC0xYCA9IHVubGltaXRlZC4gUmVhZCBvbmNlIGF0IG1vZHVsZSBsb2FkIOKAlFxuICogb24gazhzIHRoZXNlIGZsb3cgaW4gdmlhIHRoZSBgYXBwLWVudmAgQ29uZmlnTWFwIChidWlsdCBmcm9tIGAuZW52YCkuXG4gKi9cbmZ1bmN0aW9uIHRpZXJMaW1pdHModGllcjogUXVvdGFUaWVyKTogUXVvdGFUaWVyTGltaXRzIHtcbiAgY29uc3QgZCA9IERFRkFVTFRfVElFUl9MSU1JVFNbdGllcl07XG4gIGNvbnN0IFQgPSB0aWVyLnRvVXBwZXJDYXNlKCk7XG4gIHJldHVybiB7XG4gICAgcGx1Z2luczogZW52SW50KGBRVU9UQV9USUVSXyR7VH1fUExVR0lOU2AsIGQucGx1Z2lucyksXG4gICAgcGlwZWxpbmVzOiBlbnZJbnQoYFFVT1RBX1RJRVJfJHtUfV9QSVBFTElORVNgLCBkLnBpcGVsaW5lcyksXG4gICAgYXBpQ2FsbHM6IGVudkludChgUVVPVEFfVElFUl8ke1R9X0FQSV9DQUxMU2AsIGQuYXBpQ2FsbHMpLFxuICAgIGFpQ2FsbHM6IGVudkludChgUVVPVEFfVElFUl8ke1R9X0FJX0NBTExTYCwgZC5haUNhbGxzKSxcbiAgICBzdG9yYWdlQnl0ZXM6IGVudkludChgUVVPVEFfVElFUl8ke1R9X1NUT1JBR0VfQllURVNgLCBkLnN0b3JhZ2VCeXRlcyksXG4gICAgZGFzaGJvYXJkczogZW52SW50KGBRVU9UQV9USUVSXyR7VH1fREFTSEJPQVJEU2AsIGQuZGFzaGJvYXJkcyksXG4gICAgYWxlcnRSdWxlczogZW52SW50KGBRVU9UQV9USUVSXyR7VH1fQUxFUlRfUlVMRVNgLCBkLmFsZXJ0UnVsZXMpLFxuICAgIGFsZXJ0RGVzdGluYXRpb25zOiBlbnZJbnQoYFFVT1RBX1RJRVJfJHtUfV9BTEVSVF9ERVNUSU5BVElPTlNgLCBkLmFsZXJ0RGVzdGluYXRpb25zKSxcbiAgICBpZHBDb25maWdzOiBlbnZJbnQoYFFVT1RBX1RJRVJfJHtUfV9JRFBfQ09ORklHU2AsIGQuaWRwQ29uZmlncyksXG4gICAgc2VhdHM6IGVudkludChgUVVPVEFfVElFUl8ke1R9X1NFQVRTYCwgZC5zZWF0cyksXG4gIH07XG59XG5cbi8vIExhYmVscyBhcmUgb3ZlcnJpZGFibGUgdmlhIGBRVU9UQV9USUVSXzxUSUVSPl9MQUJFTGAgKGRpc3BsYXkgbmFtZSBvbmx5KS5cbmV4cG9ydCBjb25zdCBRVU9UQV9USUVSUzogUmVjb3JkPFF1b3RhVGllciwgUXVvdGFUaWVyUHJlc2V0PiA9IHtcbiAgZGV2ZWxvcGVyOiB7IGxhYmVsOiBlbnZTdHIoJ1FVT1RBX1RJRVJfREVWRUxPUEVSX0xBQkVMJywgJ0RldmVsb3BlcicpLCBsaW1pdHM6IHRpZXJMaW1pdHMoJ2RldmVsb3BlcicpIH0sXG4gIHBybzogeyBsYWJlbDogZW52U3RyKCdRVU9UQV9USUVSX1BST19MQUJFTCcsICdQcm8nKSwgbGltaXRzOiB0aWVyTGltaXRzKCdwcm8nKSB9LFxuICB0ZWFtOiB7IGxhYmVsOiBlbnZTdHIoJ1FVT1RBX1RJRVJfVEVBTV9MQUJFTCcsICdUZWFtJyksIGxpbWl0czogdGllckxpbWl0cygndGVhbScpIH0sXG4gIGVudGVycHJpc2U6IHsgbGFiZWw6IGVudlN0cignUVVPVEFfVElFUl9FTlRFUlBSSVNFX0xBQkVMJywgJ0VudGVycHJpc2UnKSwgbGltaXRzOiB0aWVyTGltaXRzKCdlbnRlcnByaXNlJykgfSxcbn07XG5cbi8qKiBBbGwgdmFsaWQgdGllciBuYW1lcy4gKi9cbmV4cG9ydCBjb25zdCBWQUxJRF9USUVSUzogcmVhZG9ubHkgUXVvdGFUaWVyW10gPSBPYmplY3Qua2V5cyhRVU9UQV9USUVSUykgYXMgUXVvdGFUaWVyW107XG5cbi8qKlxuICogRGVmYXVsdCB0aWVyIGFzc2lnbmVkIHRvIG5ldyBvcmdhbml6YXRpb25zLiBPdmVycmlkYWJsZSB2aWEgdGhlXG4gKiBgREVGQVVMVF9RVU9UQV9USUVSYCBlbnYgdmFyIChvbmUgb2YgZGV2ZWxvcGVyfHByb3x0ZWFtfGVudGVycHJpc2UpO1xuICogYW4gaW52YWxpZC91bnNldCB2YWx1ZSBmYWxscyBiYWNrIHRvICdkZXZlbG9wZXInLlxuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9USUVSOiBRdW90YVRpZXIgPVxuICBpc1ZhbGlkVGllcihwcm9jZXNzLmVudi5ERUZBVUxUX1FVT1RBX1RJRVIgPz8gJycpXG4gICAgPyAocHJvY2Vzcy5lbnYuREVGQVVMVF9RVU9UQV9USUVSIGFzIFF1b3RhVGllcilcbiAgICA6ICdkZXZlbG9wZXInO1xuXG4vKiogQ2hlY2sgd2hldGhlciBhIHN0cmluZyBpcyBhIHZhbGlkIFF1b3RhVGllci4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkVGllcih2YWx1ZTogc3RyaW5nKTogdmFsdWUgaXMgUXVvdGFUaWVyIHtcbiAgLy8gVXNlIHRoZSBleHBsaWNpdCB0dXBsZSwgbm90IGB2YWx1ZSBpbiBRVU9UQV9USUVSU2A6IGBpbmAgd2Fsa3MgdGhlIHByb3RvdHlwZVxuICAvLyBjaGFpbiwgc28gaW5oZXJpdGVkIE9iamVjdCBrZXlzICgndG9TdHJpbmcnLCAnY29uc3RydWN0b3InLCDigKYpIHdvdWxkIHJldHVyblxuICAvLyB0cnVlIGFuZCB0aGVuIGBnZXRUaWVyTGltaXRzYCB3b3VsZCByZWFkIGAubGltaXRzYCBvZmYgYSBmdW5jdGlvbiDihpIgY3Jhc2guXG4gIC8vIGB0aWVyYCBpcyBhdHRhY2tlci1pbmZsdWVuY2VhYmxlIChKV1QgLyByZXF1ZXN0IGJvZHkgLyBERUZBVUxUX1FVT1RBX1RJRVIgZW52KS5cbiAgcmV0dXJuIChWQUxJRF9USUVSUyBhcyByZWFkb25seSBzdHJpbmdbXSkuaW5jbHVkZXModmFsdWUpO1xufVxuXG4vKiogR2V0IHRoZSBkZWZhdWx0IGxpbWl0cyBmb3IgYSBnaXZlbiB0aWVyIChmYWxscyBiYWNrIHRvIGRldmVsb3BlcikuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGllckxpbWl0cyh0aWVyOiBzdHJpbmcpOiBRdW90YVRpZXJMaW1pdHMge1xuICByZXR1cm4gaXNWYWxpZFRpZXIodGllcikgPyBRVU9UQV9USUVSU1t0aWVyXS5saW1pdHM6IFFVT1RBX1RJRVJTLmRldmVsb3Blci5saW1pdHM7XG59XG4iXX0=
147
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVvdGEtdGllcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHlwZXMvcXVvdGEtdGllcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQXNDdEM7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsTUFBTSxFQUFFLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUM7QUFFOUI7Ozs7OztHQU1HO0FBQ0gsTUFBTSxFQUFFLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUNyQixNQUFNLG1CQUFtQixHQUF1QztJQUM5RCw0RUFBNEU7SUFDNUUsNkVBQTZFO0lBQzdFLFNBQVMsRUFBRTtRQUNULE9BQU8sRUFBRSxFQUFFO1FBQ1gsU0FBUyxFQUFFLENBQUM7UUFDWixRQUFRLEVBQUUsTUFBTTtRQUNoQixPQUFPLEVBQUUsRUFBRTtRQUNYLFlBQVksRUFBRSxDQUFDLEdBQUcsRUFBRTtRQUNwQixVQUFVLEVBQUUsRUFBRTtRQUNkLFVBQVUsRUFBRSxFQUFFO1FBQ2QsaUJBQWlCLEVBQUUsRUFBRTtRQUNyQixVQUFVLEVBQUUsQ0FBQztRQUNiLEtBQUssRUFBRSxDQUFDO0tBQ1Q7SUFDRCw0Q0FBNEM7SUFDNUMsR0FBRyxFQUFFO1FBQ0gsT0FBTyxFQUFFLEVBQUU7UUFDWCxTQUFTLEVBQUUsRUFBRTtRQUNiLFFBQVEsRUFBRSxPQUFPO1FBQ2pCLE9BQU8sRUFBRSxLQUFLO1FBQ2QsWUFBWSxFQUFFLEVBQUUsR0FBRyxFQUFFO1FBQ3JCLFVBQVUsRUFBRSxHQUFHO1FBQ2YsVUFBVSxFQUFFLEdBQUc7UUFDZixpQkFBaUIsRUFBRSxFQUFFO1FBQ3JCLFVBQVUsRUFBRSxDQUFDO1FBQ2IsS0FBSyxFQUFFLENBQUM7S0FDVDtJQUNELDRFQUE0RTtJQUM1RSxtREFBbUQ7SUFDbkQsSUFBSSxFQUFFO1FBQ0osT0FBTyxFQUFFLEdBQUc7UUFDWixTQUFTLEVBQUUsR0FBRztRQUNkLFFBQVEs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LENBQUM7QUFDNUQsQ0FBQztBQUVELHlFQUF5RTtBQUN6RSxNQUFNLFVBQVUsYUFBYSxDQUFDLElBQVk7SUFDeEMsT0FBTyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUEsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDO0FBQ3BGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLyoqIEF2YWlsYWJsZSBxdW90YSB0aWVyIGlkZW50aWZpZXJzLiAqL1xuZXhwb3J0IHR5cGUgUXVvdGFUaWVyID0gJ2RldmVsb3BlcicgfCAncHJvJyB8ICd0ZWFtJyB8ICdlbnRlcnByaXNlJztcblxuLyoqIExpbWl0IHZhbHVlcyBmb3IgZWFjaCBxdW90YSB0eXBlIHdpdGhpbiBhIHRpZXIuICovXG5leHBvcnQgaW50ZXJmYWNlIFF1b3RhVGllckxpbWl0cyB7XG4gIHBsdWdpbnM6IG51bWJlcjtcbiAgcGlwZWxpbmVzOiBudW1iZXI7XG4gIGFwaUNhbGxzOiBudW1iZXI7XG4gIGFpQ2FsbHM6IG51bWJlcjtcbiAgLyoqXG4gICAqIEFnZ3JlZ2F0ZSByZWdpc3RyeSBzdG9yYWdlIGNhcCBpbiBCWVRFUy4gQ291bnRlZCBhY3Jvc3MgZXZlcnkgcmVwb1xuICAgKiB1bmRlciB0aGUgb3JnJ3MgYG9yZy17b3JnSWR9L2AgbmFtZXNwYWNlLiAtMSBtZWFucyB1bmxpbWl0ZWQuXG4gICAqIHB1c2gtZ2F0ZSByZWFkcyB0aGlzOyB0aGUgaW1hZ2UtcmVnaXN0cnkgcmVqZWN0cyB0b2tlbiBpc3N1YW5jZSBmb3JcbiAgICogYHB1c2hgIHNjb3BlIHdoZW4gdGhlIG9yZydzIG1lYXN1cmVkIHVzYWdlIGV4Y2VlZHMgdGhlIGxpbWl0LlxuICAgKi9cbiAgc3RvcmFnZUJ5dGVzOiBudW1iZXI7XG4gIC8qKiBDb3VudC1xdW90YXMgb24gdGhlIHVzZXItZWRpdGFibGUgZmVhdHVyZSB0YWJsZXMgYWRkZWQgdG8gY2xvc2UgcGVyLW9yZ1xuICAgKiAgRG9TIHZpYSBzcGFtLiAtMSBtZWFucyB1bmxpbWl0ZWQuICovXG4gIGRhc2hib2FyZHM6IG51bWJlcjtcbiAgYWxlcnRSdWxlczogbnVtYmVyO1xuICBhbGVydERlc3RpbmF0aW9uczogbnVtYmVyO1xuICBpZHBDb25maWdzOiBudW1iZXI7XG4gIC8qKlxuICAgKiBNYXggb3JnIG1lbWJlcnMgKGFjdGl2ZSB1c2VycyAvIHNlYXRzKS4gLTEgPSB1bmxpbWl0ZWQuIFRoaXMgaXMgdGhlIFwiVGVhbVwiXG4gICAqIHRpZXIgZGlmZmVyZW50aWF0b3Ig4oCUIGVuZm9yY2VkIGF0IG1lbWJlci1pbnZpdGUgdGltZSAoYW4gaW52aXRlIGlzIGJsb2NrZWRcbiAgICogd2hlbiBhY3RpdmUgbWVtYmVycyArIHBlbmRpbmcgaW52aXRlcyB3b3VsZCBleGNlZWQgdGhpcykuXG4gICAqL1xuICBzZWF0czogbnVtYmVyO1xufVxuXG4vKiogRnVsbCBwcmVzZXQgZm9yIGEgc2luZ2xlIHRpZXIgKGxhYmVsICsgbGltaXRzKS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUXVvdGFUaWVyUHJlc2V0IHtcbiAgbGFiZWw6IHN0cmluZztcbiAgbGltaXRzOiBRdW90YVRpZXJMaW1pdHM7XG59XG5cbi8qKlxuICogUHJlc2V0IGxpbWl0cyBmb3IgZWFjaCB0aWVyLiAtMSBtZWFucyB1bmxpbWl0ZWQuXG4gKlxuICogQUkgY2FsbHMgYXJlIHNpemVkIG11Y2ggc21hbGxlciB0aGFuIGBhcGlDYWxsc2AgYmVjYXVzZSBlYWNoIGNhbGwgaGFzXG4gKiBleHRlcm5hbCBwcm92aWRlciBjb3N0ICh+JDAuMDEkMC4xMC9jYWxsKS4gRGV2ZWxvcGVyIHRpZXIgYWxsb3dzIGxpZ2h0XG4gKiBleHBsb3JhdGlvbiAoNTAvcGVyaW9kKTsgUHJvIGxpZnRzIHRvIDIsNTAwOyBFbnRlcnByaXNlIGlzIGNhcHBlZCBoaWdoXG4gKiAoMjUsMDAwKSDigJQgZmFpci11c2UsIG5vdCBsaXRlcmFsbHkgdW5saW1pdGVkLlxuICpcbiAqIGBzdG9yYWdlQnl0ZXNgIGlzIHRoZSBhZ2dyZWdhdGUgcmVnaXN0cnkgY2FwIHBlciBvcmcuIFNpemVkXG4gKiBhcm91bmQgcGx1Z2luLWltYWdlIHJlYWxpdGllczogYSB0eXBpY2FsIHBsdWdpbiBpbWFnZSBpcyAyMDA1MDAgTUI7XG4gKiBEZXZlbG9wZXIncyAyIEdCIGhvbGRzIH40IHZlcnNpb25zIMOXIH41MDAgTUIsIFBybydzIDUwIEdCIGNvdmVycyBhXG4gKiBtYXR1cmUgY2F0YWxvZy4gT3BlcmF0b3JzIGNhbiBvdmVycmlkZSBwZXItb3JnIHZpYSB0aGUgcXVvdGEgQ1JVRCBBUEkuXG4gKi9cbmNvbnN0IEdCID0gMTAyNCAqIDEwMjQgKiAxMDI0O1xuXG4vKipcbiAqIENvZGUtZGVmYXVsdCBsaW1pdHMgcGVyIHRpZXIg4oCUIHRoZSBmYWxsYmFjayB3aGVuIG5vIGVudiBvdmVycmlkZSBpcyBzZXQuXG4gKiAtMSBtZWFucyB1bmxpbWl0ZWQuIChDb3VudHMgc2l6ZWQgdG8gXCJjb21mb3J0YWJseSBlbm91Z2ggZm9yIG9uZSB0ZWFtLCBub3RcbiAqIHNjcmlwdCBzcGFtXCI6IDIwIGRhc2hib2FyZHMsIDUwIGFsZXJ0IHJ1bGVzLCAxMCBkZXN0aW5hdGlvbnMsIDEgSWRQIGNvbmZpZ1xuICogZm9yIERldmVsb3Blcjsgc2NhbGVkIHVwIGZvciBQcm87IC0xICh1bmNhcHBlZCkgZm9yIHRoZSBjb3VudC1xdW90YXMgb25cbiAqIFRlYW0vRW50ZXJwcmlzZSB3aGlsZSBjb3N0LWRyaXZpbmcgcXVvdGFzIHN0YXkgZmluaXRlLilcbiAqL1xuY29uc3QgVEIgPSAxMDI0ICogR0I7XG5jb25zdCBERUZBVUxUX1RJRVJfTElNSVRTOiBSZWNvcmQ8UXVvdGFUaWVyLCBRdW90YVRpZXJMaW1pdHM+ID0ge1xuICAvLyBGcmVlIHRpZXI6IHNpbmdsZSBzZWF0LCBhcGlDYWxscyBDQVBQRUQgKHdhcyB1bmxpbWl0ZWQg4oCUIGEgRG9TL2FidXNlIGhvbGVcbiAgLy8gb24gYSBzaGFyZWQgcmVzb3VyY2UpOyBhaUNhbGxzIHNtYWxsIChlYWNoIGhhcyB+JDAuMDEtMC4xMCBleHRlcm5hbCBjb3N0KS5cbiAgZGV2ZWxvcGVyOiB7XG4gICAgcGx1Z2luczogMjUsXG4gICAgcGlwZWxpbmVzOiA1LFxuICAgIGFwaUNhbGxzOiAyNV8wMDAsXG4gICAgYWlDYWxsczogNTAsXG4gICAgc3RvcmFnZUJ5dGVzOiAyICogR0IsXG4gICAgZGFzaGJvYXJkczogMjAsXG4gICAgYWxlcnRSdWxlczogNTAsXG4gICAgYWxlcnREZXN0aW5hdGlvbnM6IDEwLFxuICAgIGlkcENvbmZpZ3M6IDEsXG4gICAgc2VhdHM6IDEsXG4gIH0sXG4gIC8vIFBybyA9IG9uZSBwb3dlciB1c2VyLCBpbmRpdmlkdWFsIHByaWNpbmcuXG4gIHBybzoge1xuICAgIHBsdWdpbnM6IDUwLFxuICAgIHBpcGVsaW5lczogMTAsXG4gICAgYXBpQ2FsbHM6IDUwMF8wMDAsXG4gICAgYWlDYWxsczogMl81MDAsXG4gICAgc3RvcmFnZUJ5dGVzOiA1MCAqIEdCLFxuICAgIGRhc2hib2FyZHM6IDIwMCxcbiAgICBhbGVydFJ1bGVzOiA1MDAsXG4gICAgYWxlcnREZXN0aW5hdGlvbnM6IDUwLFxuICAgIGlkcENvbmZpZ3M6IDUsXG4gICAgc2VhdHM6IDEsXG4gIH0sXG4gIC8vIFRlYW0gPSBjb2xsYWJvcmF0aW9uIHRpZXI7IHRoZSBzZWF0IGxpbWl0ICgxMCkgaXMgdGhlIHJlYWwgZGlmZmVyZW50aWF0b3JcbiAgLy8gb3ZlciBQcm8uIExpbWl0cyBzaXQgYmV0d2VlbiBQcm8gYW5kIEVudGVycHJpc2UuXG4gIHRlYW06IHtcbiAgICBwbHVnaW5zOiAxMDAsXG4gICAgcGlwZWxpbmVzOiAyMDAsXG4gICAgYXBpQ2FsbHM6IC0xLFxuICAgIGFpQ2FsbHM6IDEwXzAwMCxcbiAgICBzdG9yYWdlQnl0ZXM6IDI1MCAqIEdCLFxuICAgIGRhc2hib2FyZHM6IC0xLFxuICAgIGFsZXJ0UnVsZXM6IC0xLFxuICAgIGFsZXJ0RGVzdGluYXRpb25zOiAtMSxcbiAgICBpZHBDb25maWdzOiA1LFxuICAgIHNlYXRzOiAxMCxcbiAgfSxcbiAgLy8gRW50ZXJwcmlzZTogb3JnLXdpZGUsIGhpZ2ggc2VhdCBjYXAuIEZBSVItVVNFIOKAlCBjb3N0IGRyaXZlcnMgKGFpQ2FsbHMsXG4gIC8vIHN0b3JhZ2VCeXRlcykgY2FwcGVkIGhpZ2ggc28gb25lIGFjY291bnQgY2FuJ3QgcnVuIHVwIHVuYm91bmRlZCBwcm92aWRlci9cbiAgLy8gc3RvcmFnZSBjb3N0IG9uIGEgZmxhdCBwcmljZTsgY2hlYXAgY291bnQtcXVvdGFzIHN0YXkgLTEuXG4gIGVudGVycHJpc2U6IHtcbiAgICBwbHVnaW5zOiAyNTAsXG4gICAgcGlwZWxpbmVzOiAyMDAsXG4gICAgYXBpQ2FsbHM6IC0xLFxuICAgIGFpQ2FsbHM6IDI1XzAwMCxcbiAgICBzdG9yYWdlQnl0ZXM6IFRCLFxuICAgIGRhc2hib2FyZHM6IC0xLFxuICAgIGFsZXJ0UnVsZXM6IC0xLFxuICAgIGFsZXJ0RGVzdGluYXRpb25zOiAtMSxcbiAgICBpZHBDb25maWdzOiAtMSxcbiAgICBzZWF0czogMjUsXG4gIH0sXG59O1xuXG4vKiogUmVhZCBhbiBpbnRlZ2VyIGVudiB2YXIsIGZhbGxpbmcgYmFjayB0byB0aGUgY29kZSBkZWZhdWx0LiBgLTFgID0gdW5saW1pdGVkLiAqL1xuZnVuY3Rpb24gZW52SW50KG5hbWU6IHN0cmluZywgZmFsbGJhY2s6IG51bWJlcik6IG51bWJlciB7XG4gIGNvbnN0IHJhdyA9IHByb2Nlc3MuZW52W25hbWVdO1xuICBpZiAocmF3ID09PSB1bmRlZmluZWQgfHwgcmF3ID09PSAnJykgcmV0dXJuIGZhbGxiYWNrO1xuICBjb25zdCBuID0gcGFyc2VJbnQocmF3LCAxMCk7XG4gIHJldHVybiBOdW1iZXIuaXNOYU4obikgPyBmYWxsYmFjayA6IG47XG59XG5cbi8qKiBSZWFkIGEgc3RyaW5nIGVudiB2YXIsIGZhbGxpbmcgYmFjayB0byB0aGUgY29kZSBkZWZhdWx0LiAqL1xuZnVuY3Rpb24gZW52U3RyKG5hbWU6IHN0cmluZywgZmFsbGJhY2s6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHJhdyA9IHByb2Nlc3MuZW52W25hbWVdO1xuICByZXR1cm4gcmF3ID09PSB1bmRlZmluZWQgfHwgcmF3ID09PSAnJyA/IGZhbGxiYWNrIDogcmF3O1xufVxuXG4vKipcbiAqIFBlci10aWVyIGxpbWl0cywgZWFjaCBvdmVycmlkYWJsZSB2aWEgYFFVT1RBX1RJRVJfPFRJRVI+XzxMSU1JVD5gIGVudiB2YXJzXG4gKiAoZS5nLiBgUVVPVEFfVElFUl9QUk9fUElQRUxJTkVTPTI1MGAsIGBRVU9UQV9USUVSX0RFVkVMT1BFUl9TVE9SQUdFX0JZVEVTPS4uLmApLlxuICogVW5zZXQvZW1wdHkg4oaSIHRoZSBjb2RlIGRlZmF1bHQuIGAtMWAgPSB1bmxpbWl0ZWQuIFJlYWQgb25jZSBhdCBtb2R1bGUgbG9hZCDigJRcbiAqIG9uIGs4cyB0aGVzZSBmbG93IGluIHZpYSB0aGUgYGFwcC1lbnZgIENvbmZpZ01hcCAoYnVpbHQgZnJvbSBgLmVudmApLlxuICovXG5mdW5jdGlvbiB0aWVyTGltaXRzKHRpZXI6IFF1b3RhVGllcik6IFF1b3RhVGllckxpbWl0cyB7XG4gIGNvbnN0IGQgPSBERUZBVUxUX1RJRVJfTElNSVRTW3RpZXJdO1xuICBjb25zdCBUID0gdGllci50b1VwcGVyQ2FzZSgpO1xuICByZXR1cm4ge1xuICAgIHBsdWdpbnM6IGVudkludChgUVVPVEFfVElFUl8ke1R9X1BMVUdJTlNgLCBkLnBsdWdpbnMpLFxuICAgIHBpcGVsaW5lczogZW52SW50KGBRVU9UQV9USUVSXyR7VH1fUElQRUxJTkVTYCwgZC5waXBlbGluZXMpLFxuICAgIGFwaUNhbGxzOiBlbnZJbnQoYFFVT1RBX1RJRVJfJHtUfV9BUElfQ0FMTFNgLCBkLmFwaUNhbGxzKSxcbiAgICBhaUNhbGxzOiBlbnZJbnQoYFFVT1RBX1RJRVJfJHtUfV9BSV9DQUxMU2AsIGQuYWlDYWxscyksXG4gICAgc3RvcmFnZUJ5dGVzOiBlbnZJbnQoYFFVT1RBX1RJRVJfJHtUfV9TVE9SQUdFX0JZVEVTYCwgZC5zdG9yYWdlQnl0ZXMpLFxuICAgIGRhc2hib2FyZHM6IGVudkludChgUVVPVEFfVElFUl8ke1R9X0RBU0hCT0FSRFNgLCBkLmRhc2hib2FyZHMpLFxuICAgIGFsZXJ0UnVsZXM6IGVudkludChgUVVPVEFfVElFUl8ke1R9X0FMRVJUX1JVTEVTYCwgZC5hbGVydFJ1bGVzKSxcbiAgICBhbGVydERlc3RpbmF0aW9uczogZW52SW50KGBRVU9UQV9USUVSXyR7VH1fQUxFUlRfREVTVElOQVRJT05TYCwgZC5hbGVydERlc3RpbmF0aW9ucyksXG4gICAgaWRwQ29uZmlnczogZW52SW50KGBRVU9UQV9USUVSXyR7VH1fSURQX0NPTkZJR1NgLCBkLmlkcENvbmZpZ3MpLFxuICAgIHNlYXRzOiBlbnZJbnQoYFFVT1RBX1RJRVJfJHtUfV9TRUFUU2AsIGQuc2VhdHMpLFxuICB9O1xufVxuXG4vLyBMYWJlbHMgYXJlIG92ZXJyaWRhYmxlIHZpYSBgUVVPVEFfVElFUl88VElFUj5fTEFCRUxgIChkaXNwbGF5IG5hbWUgb25seSkuXG5leHBvcnQgY29uc3QgUVVPVEFfVElFUlM6IFJlY29yZDxRdW90YVRpZXIsIFF1b3RhVGllclByZXNldD4gPSB7XG4gIGRldmVsb3BlcjogeyBsYWJlbDogZW52U3RyKCdRVU9UQV9USUVSX0RFVkVMT1BFUl9MQUJFTCcsICdEZXZlbG9wZXInKSwgbGltaXRzOiB0aWVyTGltaXRzKCdkZXZlbG9wZXInKSB9LFxuICBwcm86IHsgbGFiZWw6IGVudlN0cignUVVPVEFfVElFUl9QUk9fTEFCRUwnLCAnUHJvJyksIGxpbWl0czogdGllckxpbWl0cygncHJvJykgfSxcbiAgdGVhbTogeyBsYWJlbDogZW52U3RyKCdRVU9UQV9USUVSX1RFQU1fTEFCRUwnLCAnVGVhbScpLCBsaW1pdHM6IHRpZXJMaW1pdHMoJ3RlYW0nKSB9LFxuICBlbnRlcnByaXNlOiB7IGxhYmVsOiBlbnZTdHIoJ1FVT1RBX1RJRVJfRU5URVJQUklTRV9MQUJFTCcsICdFbnRlcnByaXNlJyksIGxpbWl0czogdGllckxpbWl0cygnZW50ZXJwcmlzZScpIH0sXG59O1xuXG4vKiogQWxsIHZhbGlkIHRpZXIgbmFtZXMuICovXG5leHBvcnQgY29uc3QgVkFMSURfVElFUlM6IHJlYWRvbmx5IFF1b3RhVGllcltdID0gT2JqZWN0LmtleXMoUVVPVEFfVElFUlMpIGFzIFF1b3RhVGllcltdO1xuXG4vKipcbiAqIERlZmF1bHQgdGllciBhc3NpZ25lZCB0byBuZXcgb3JnYW5pemF0aW9ucy4gT3ZlcnJpZGFibGUgdmlhIHRoZVxuICogYERFRkFVTFRfUVVPVEFfVElFUmAgZW52IHZhciAob25lIG9mIGRldmVsb3Blcnxwcm98dGVhbXxlbnRlcnByaXNlKTtcbiAqIGFuIGludmFsaWQvdW5zZXQgdmFsdWUgZmFsbHMgYmFjayB0byAnZGV2ZWxvcGVyJy5cbiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfVElFUjogUXVvdGFUaWVyID1cbiAgaXNWYWxpZFRpZXIocHJvY2Vzcy5lbnYuREVGQVVMVF9RVU9UQV9USUVSID8/ICcnKVxuICAgID8gKHByb2Nlc3MuZW52LkRFRkFVTFRfUVVPVEFfVElFUiBhcyBRdW90YVRpZXIpXG4gICAgOiAnZGV2ZWxvcGVyJztcblxuLyoqIENoZWNrIHdoZXRoZXIgYSBzdHJpbmcgaXMgYSB2YWxpZCBRdW90YVRpZXIuICovXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZFRpZXIodmFsdWU6IHN0cmluZyk6IHZhbHVlIGlzIFF1b3RhVGllciB7XG4gIC8vIFVzZSB0aGUgZXhwbGljaXQgdHVwbGUsIG5vdCBgdmFsdWUgaW4gUVVPVEFfVElFUlNgOiBgaW5gIHdhbGtzIHRoZSBwcm90b3R5cGVcbiAgLy8gY2hhaW4sIHNvIGluaGVyaXRlZCBPYmplY3Qga2V5cyAoJ3RvU3RyaW5nJywgJ2NvbnN0cnVjdG9yJywg4oCmKSB3b3VsZCByZXR1cm5cbiAgLy8gdHJ1ZSBhbmQgdGhlbiBgZ2V0VGllckxpbWl0c2Agd291bGQgcmVhZCBgLmxpbWl0c2Agb2ZmIGEgZnVuY3Rpb24g4oaSIGNyYXNoLlxuICAvLyBgdGllcmAgaXMgYXR0YWNrZXItaW5mbHVlbmNlYWJsZSAoSldUIC8gcmVxdWVzdCBib2R5IC8gREVGQVVMVF9RVU9UQV9USUVSIGVudikuXG4gIHJldHVybiAoVkFMSURfVElFUlMgYXMgcmVhZG9ubHkgc3RyaW5nW10pLmluY2x1ZGVzKHZhbHVlKTtcbn1cblxuLyoqIEdldCB0aGUgZGVmYXVsdCBsaW1pdHMgZm9yIGEgZ2l2ZW4gdGllciAoZmFsbHMgYmFjayB0byBkZXZlbG9wZXIpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFRpZXJMaW1pdHModGllcjogc3RyaW5nKTogUXVvdGFUaWVyTGltaXRzIHtcbiAgcmV0dXJuIGlzVmFsaWRUaWVyKHRpZXIpID8gUVVPVEFfVElFUlNbdGllcl0ubGltaXRzOiBRVU9UQV9USUVSUy5kZXZlbG9wZXIubGltaXRzO1xufVxuIl19
@@ -35,17 +35,4 @@ export function resolveRecipientAlias(recipientOrgId) {
35
35
  originalValue: recipientOrgId,
36
36
  };
37
37
  }
38
- /**
39
- * Reset the cached aliases.
40
- *
41
- * WARNING: TEST-ONLY. This is exported solely so unit tests can clear the
42
- * module-level cache between cases when they mutate alias env vars. Do NOT
43
- * call from production code paths — mutating the cache at runtime is
44
- * unsupported and will cause inconsistent alias resolution under concurrency.
45
- *
46
- * @internal
47
- */
48
- export function _resetAliasCache() {
49
- _supportAliases = undefined;
50
- }
51
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxpYXMtcmVzb2x2ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvYWxpYXMtcmVzb2x2ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFdEQseUZBQXlGO0FBQ3pGLElBQUksZUFBd0MsQ0FBQztBQUU3QyxTQUFTLGlCQUFpQjtJQUN4QixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDckIsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxlQUFlLElBQUksRUFBRSxDQUFDO1FBQzlDLGVBQWUsR0FBRyxJQUFJLEdBQUcsQ0FDdkIsR0FBRzthQUNBLEtBQUssQ0FBQyxHQUFHLENBQUM7YUFDVixHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUM7YUFDeEMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FDckMsQ0FBQztJQUNKLENBQUM7SUFDRCxPQUFPLGVBQWUsQ0FBQztBQUN6QixDQUFDO0FBWUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUscUJBQXFCLENBQUMsY0FBc0I7SUFDMUQsTUFBTSxVQUFVLEdBQUcsY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3ZELE1BQU0sT0FBTyxHQUFHLGlCQUFpQixFQUFFLENBQUM7SUFFcEMsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7UUFDNUIsT0FBTztZQUNMLGFBQWEsRUFBRSxhQUFhO1lBQzVCLFFBQVEsRUFBRSxJQUFJO1lBQ2QsYUFBYSxFQUFFLGNBQWM7U0FDOUIsQ0FBQztJQUNKLENBQUM7SUFFRCxPQUFPO1FBQ0wsYUFBYSxFQUFFLFVBQVU7UUFDekIsUUFBUSxFQUFFLEtBQUs7UUFDZixhQUFhLEVBQUUsY0FBYztLQUM5QixDQUFDO0FBQ0osQ0FBQztBQUVEOzs7Ozs7Ozs7R0FTRztBQUNILE1BQU0sVUFBVSxnQkFBZ0I7SUFDOUIsZUFBZSxHQUFHLFNBQVMsQ0FBQztBQUM5QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB7IFNZU1RFTV9PUkdfSUQgfSBmcm9tICcuLi9taWRkbGV3YXJlL2F1dGguanMnO1xuXG4vKiogTGF6aWx5LWNhY2hlZCBzZXQgb2Ygc3VwcG9ydCBhbGlhc2VzLCBwYXJzZWQgZnJvbSBTVVBQT1JUX0FMSUFTRVMgb24gZmlyc3QgYWNjZXNzLiAqL1xubGV0IF9zdXBwb3J0QWxpYXNlczogU2V0PHN0cmluZz4gfCB1bmRlZmluZWQ7XG5cbmZ1bmN0aW9uIGdldFN1cHBvcnRBbGlhc2VzKCk6IFNldDxzdHJpbmc+IHtcbiAgaWYgKCFfc3VwcG9ydEFsaWFzZXMpIHtcbiAgICBjb25zdCByYXcgPSBwcm9jZXNzLmVudi5TVVBQT1JUX0FMSUFTRVMgfHwgJyc7XG4gICAgX3N1cHBvcnRBbGlhc2VzID0gbmV3IFNldChcbiAgICAgIHJhd1xuICAgICAgICAuc3BsaXQoJywnKVxuICAgICAgICAubWFwKGFsaWFzID0+IGFsaWFzLnRyaW0oKS50b0xvd2VyQ2FzZSgpKVxuICAgICAgICAuZmlsdGVyKGFsaWFzID0+IGFsaWFzLmxlbmd0aCA+IDApLFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIF9zdXBwb3J0QWxpYXNlcztcbn1cblxuLyoqIFJlc3VsdCBvZiBhbGlhcyByZXNvbHV0aW9uLiAqL1xuZXhwb3J0IGludGVyZmFjZSBBbGlhc1Jlc29sdXRpb24ge1xuICAvKiogVGhlIHJlc29sdmVkIG9yZ2FuaXphdGlvbiBJRCAoZS5nLiwgJ3N5c3RlbScpLiAqL1xuICByZXNvbHZlZE9yZ0lkOiBzdHJpbmc7XG4gIC8qKiBXaGV0aGVyIHRoZSBpbnB1dCB3YXMgYW4gYWxpYXMgdGhhdCBnb3QgcmVzb2x2ZWQuICovXG4gIHdhc0FsaWFzOiBib29sZWFuO1xuICAvKiogVGhlIG9yaWdpbmFsIGlucHV0IHZhbHVlLCB1c2VmdWwgZm9yIGF1ZGl0IGxvZ2dpbmcuICovXG4gIG9yaWdpbmFsVmFsdWU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZXNvbHZlIGFuIGVtYWlsLWxpa2UgYWxpYXMgdG8gYW4gYWN0dWFsIG9yZ2FuaXphdGlvbiBJRC5cbiAqXG4gKiBJZiB0aGUgaW5wdXQgbWF0Y2hlcyBhIGNvbmZpZ3VyZWQgc3VwcG9ydCBhbGlhcywgaXQgcmVzb2x2ZXMgdG8gdGhlIHN5c3RlbVxuICogb3JnIElELiBPdGhlcndpc2UgdGhlIGlucHV0IGlzIHJldHVybmVkIGFzLWlzIChsb3dlcmNhc2VkKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVSZWNpcGllbnRBbGlhcyhyZWNpcGllbnRPcmdJZDogc3RyaW5nKTogQWxpYXNSZXNvbHV0aW9uIHtcbiAgY29uc3Qgbm9ybWFsaXplZCA9IHJlY2lwaWVudE9yZ0lkLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBhbGlhc2VzID0gZ2V0U3VwcG9ydEFsaWFzZXMoKTtcblxuICBpZiAoYWxpYXNlcy5oYXMobm9ybWFsaXplZCkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcmVzb2x2ZWRPcmdJZDogU1lTVEVNX09SR19JRCxcbiAgICAgIHdhc0FsaWFzOiB0cnVlLFxuICAgICAgb3JpZ2luYWxWYWx1ZTogcmVjaXBpZW50T3JnSWQsXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgcmVzb2x2ZWRPcmdJZDogbm9ybWFsaXplZCxcbiAgICB3YXNBbGlhczogZmFsc2UsXG4gICAgb3JpZ2luYWxWYWx1ZTogcmVjaXBpZW50T3JnSWQsXG4gIH07XG59XG5cbi8qKlxuICogUmVzZXQgdGhlIGNhY2hlZCBhbGlhc2VzLlxuICpcbiAqIFdBUk5JTkc6IFRFU1QtT05MWS4gVGhpcyBpcyBleHBvcnRlZCBzb2xlbHkgc28gdW5pdCB0ZXN0cyBjYW4gY2xlYXIgdGhlXG4gKiBtb2R1bGUtbGV2ZWwgY2FjaGUgYmV0d2VlbiBjYXNlcyB3aGVuIHRoZXkgbXV0YXRlIGFsaWFzIGVudiB2YXJzLiBEbyBOT1RcbiAqIGNhbGwgZnJvbSBwcm9kdWN0aW9uIGNvZGUgcGF0aHMg4oCUIG11dGF0aW5nIHRoZSBjYWNoZSBhdCBydW50aW1lIGlzXG4gKiB1bnN1cHBvcnRlZCBhbmQgd2lsbCBjYXVzZSBpbmNvbnNpc3RlbnQgYWxpYXMgcmVzb2x1dGlvbiB1bmRlciBjb25jdXJyZW5jeS5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIF9yZXNldEFsaWFzQ2FjaGUoKTogdm9pZCB7XG4gIF9zdXBwb3J0QWxpYXNlcyA9IHVuZGVmaW5lZDtcbn1cbiJdfQ==
38
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxpYXMtcmVzb2x2ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvYWxpYXMtcmVzb2x2ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFdEQseUZBQXlGO0FBQ3pGLElBQUksZUFBd0MsQ0FBQztBQUU3QyxTQUFTLGlCQUFpQjtJQUN4QixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDckIsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxlQUFlLElBQUksRUFBRSxDQUFDO1FBQzlDLGVBQWUsR0FBRyxJQUFJLEdBQUcsQ0FDdkIsR0FBRzthQUNBLEtBQUssQ0FBQyxHQUFHLENBQUM7YUFDVixHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUM7YUFDeEMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FDckMsQ0FBQztJQUNKLENBQUM7SUFDRCxPQUFPLGVBQWUsQ0FBQztBQUN6QixDQUFDO0FBWUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUscUJBQXFCLENBQUMsY0FBc0I7SUFDMUQsTUFBTSxVQUFVLEdBQUcsY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3ZELE1BQU0sT0FBTyxHQUFHLGlCQUFpQixFQUFFLENBQUM7SUFFcEMsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7UUFDNUIsT0FBTztZQUNMLGFBQWEsRUFBRSxhQUFhO1lBQzVCLFFBQVEsRUFBRSxJQUFJO1lBQ2QsYUFBYSxFQUFFLGNBQWM7U0FDOUIsQ0FBQztJQUNKLENBQUM7SUFFRCxPQUFPO1FBQ0wsYUFBYSxFQUFFLFVBQVU7UUFDekIsUUFBUSxFQUFFLEtBQUs7UUFDZixhQUFhLEVBQUUsY0FBYztLQUM5QixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgeyBTWVNURU1fT1JHX0lEIH0gZnJvbSAnLi4vbWlkZGxld2FyZS9hdXRoLmpzJztcblxuLyoqIExhemlseS1jYWNoZWQgc2V0IG9mIHN1cHBvcnQgYWxpYXNlcywgcGFyc2VkIGZyb20gU1VQUE9SVF9BTElBU0VTIG9uIGZpcnN0IGFjY2Vzcy4gKi9cbmxldCBfc3VwcG9ydEFsaWFzZXM6IFNldDxzdHJpbmc+IHwgdW5kZWZpbmVkO1xuXG5mdW5jdGlvbiBnZXRTdXBwb3J0QWxpYXNlcygpOiBTZXQ8c3RyaW5nPiB7XG4gIGlmICghX3N1cHBvcnRBbGlhc2VzKSB7XG4gICAgY29uc3QgcmF3ID0gcHJvY2Vzcy5lbnYuU1VQUE9SVF9BTElBU0VTIHx8ICcnO1xuICAgIF9zdXBwb3J0QWxpYXNlcyA9IG5ldyBTZXQoXG4gICAgICByYXdcbiAgICAgICAgLnNwbGl0KCcsJylcbiAgICAgICAgLm1hcChhbGlhcyA9PiBhbGlhcy50cmltKCkudG9Mb3dlckNhc2UoKSlcbiAgICAgICAgLmZpbHRlcihhbGlhcyA9PiBhbGlhcy5sZW5ndGggPiAwKSxcbiAgICApO1xuICB9XG4gIHJldHVybiBfc3VwcG9ydEFsaWFzZXM7XG59XG5cbi8qKiBSZXN1bHQgb2YgYWxpYXMgcmVzb2x1dGlvbi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQWxpYXNSZXNvbHV0aW9uIHtcbiAgLyoqIFRoZSByZXNvbHZlZCBvcmdhbml6YXRpb24gSUQgKGUuZy4sICdzeXN0ZW0nKS4gKi9cbiAgcmVzb2x2ZWRPcmdJZDogc3RyaW5nO1xuICAvKiogV2hldGhlciB0aGUgaW5wdXQgd2FzIGFuIGFsaWFzIHRoYXQgZ290IHJlc29sdmVkLiAqL1xuICB3YXNBbGlhczogYm9vbGVhbjtcbiAgLyoqIFRoZSBvcmlnaW5hbCBpbnB1dCB2YWx1ZSwgdXNlZnVsIGZvciBhdWRpdCBsb2dnaW5nLiAqL1xuICBvcmlnaW5hbFZhbHVlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUmVzb2x2ZSBhbiBlbWFpbC1saWtlIGFsaWFzIHRvIGFuIGFjdHVhbCBvcmdhbml6YXRpb24gSUQuXG4gKlxuICogSWYgdGhlIGlucHV0IG1hdGNoZXMgYSBjb25maWd1cmVkIHN1cHBvcnQgYWxpYXMsIGl0IHJlc29sdmVzIHRvIHRoZSBzeXN0ZW1cbiAqIG9yZyBJRC4gT3RoZXJ3aXNlIHRoZSBpbnB1dCBpcyByZXR1cm5lZCBhcy1pcyAobG93ZXJjYXNlZCkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlUmVjaXBpZW50QWxpYXMocmVjaXBpZW50T3JnSWQ6IHN0cmluZyk6IEFsaWFzUmVzb2x1dGlvbiB7XG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSByZWNpcGllbnRPcmdJZC50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgY29uc3QgYWxpYXNlcyA9IGdldFN1cHBvcnRBbGlhc2VzKCk7XG5cbiAgaWYgKGFsaWFzZXMuaGFzKG5vcm1hbGl6ZWQpKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlc29sdmVkT3JnSWQ6IFNZU1RFTV9PUkdfSUQsXG4gICAgICB3YXNBbGlhczogdHJ1ZSxcbiAgICAgIG9yaWdpbmFsVmFsdWU6IHJlY2lwaWVudE9yZ0lkLFxuICAgIH07XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHJlc29sdmVkT3JnSWQ6IG5vcm1hbGl6ZWQsXG4gICAgd2FzQWxpYXM6IGZhbHNlLFxuICAgIG9yaWdpbmFsVmFsdWU6IHJlY2lwaWVudE9yZ0lkLFxuICB9O1xufVxuXG4iXX0=
@@ -40,21 +40,24 @@ export function getParam(params, key) {
40
40
  * ```
41
41
  */
42
42
  export function getOrgId(req) {
43
- // Check route params first
43
+ // Prefer the VERIFIED JWT identity first. A spoofable `x-org-id` header must
44
+ // never override an authenticated user's org (cross-tenant footgun). For a
45
+ // superadmin acting cross-org, requireAuth already re-points
46
+ // `req.user.organizationId` to the chosen org via the isSuperAdmin-gated
47
+ // header override, so this still yields the intended scope.
48
+ const userOrgId = req.user?.organizationId?.trim();
49
+ if (userOrgId) {
50
+ return userOrgId;
51
+ }
52
+ // Pre-auth fallbacks only (req.user unset): route param, then header.
44
53
  const paramOrgId = getParam(req.params, 'orgId');
45
54
  if (paramOrgId) {
46
55
  return paramOrgId;
47
56
  }
48
- // Check x-org-id header
49
57
  const headerOrgId = getHeaderString(req.headers['x-org-id'])?.trim();
50
58
  if (headerOrgId) {
51
59
  return headerOrgId;
52
60
  }
53
- // Check authenticated user
54
- const userOrgId = req.user?.organizationId?.trim();
55
- if (userOrgId) {
56
- return userOrgId;
57
- }
58
61
  return undefined;
59
62
  }
60
63
  /**
@@ -234,4 +237,4 @@ export function parseDateRange(query, options = {}) {
234
237
  }
235
238
  return { from: fromStr, to: toStr };
236
239
  }
237
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyYW1zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL3BhcmFtcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBR3RDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFPL0M7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsTUFBTSxVQUFVLFFBQVEsQ0FDdEIsTUFBa0MsRUFDbEMsR0FBVztJQUVYLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMxQixJQUFJLEtBQUssS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUN4QixPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBQ0QsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUNqRCxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFDSCxNQUFNLFVBQVUsUUFBUSxDQUFDLEdBQVk7SUFDbkMsMkJBQTJCO0lBQzNCLE1BQU0sVUFBVSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ2pELElBQUksVUFBVSxFQUFFLENBQUM7UUFDZixPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDO0lBRUQsd0JBQXdCO0lBQ3hCLE1BQU0sV0FBVyxHQUFHLGVBQWUsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUM7SUFDckUsSUFBSSxXQUFXLEVBQUUsQ0FBQztRQUNoQixPQUFPLFdBQVcsQ0FBQztJQUNyQixDQUFDO0lBRUQsMkJBQTJCO0lBQzNCLE1BQU0sU0FBUyxHQUFHLEdBQUcsQ0FBQyxJQUFJLEVBQUUsY0FBYyxFQUFFLElBQUksRUFBRSxDQUFDO0lBQ25ELElB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RUFBRSxpQ0FBaUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUMzRyxDQUFDO0lBRUQsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDO0FBQ3RDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHR5cGUgeyBSZXF1ZXN0IH0gZnJvbSAnZXhwcmVzcyc7XG5pbXBvcnQgeyBnZXRIZWFkZXJTdHJpbmcgfSBmcm9tICcuL2hlYWRlcnMuanMnO1xuXG4vKipcbiAqIEV4cHJlc3MgNSBwYXJhbWV0ZXIgdHlwZS5cbiAqL1xudHlwZSBQYXJhbVZhbHVlID0gc3RyaW5nIHwgc3RyaW5nW10gfCB1bmRlZmluZWQ7XG5cbi8qKlxuICogRXh0cmFjdCBhIHNpbmdsZSBzdHJpbmcgcGFyYW1ldGVyIGZyb20gRXhwcmVzcyA1IHJvdXRlIHBhcmFtcy5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gUmVxdWVzdCBwYXJhbXMgb2JqZWN0XG4gKiBAcGFyYW0ga2V5IC0gUGFyYW1ldGVyIGtleVxuICogQHJldHVybnMgVGhlIHBhcmFtZXRlciB2YWx1ZSBhcyBhIHN0cmluZywgb3IgdW5kZWZpbmVkIGlmIG5vdCBwcmVzZW50XG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIC8vIFJvdXRlOiBHRVQgL3BsdWdpbnMvOmlkXG4gKiBjb25zdCBpZCA9IGdldFBhcmFtKHJlcS5wYXJhbXMsICdpZCcpO1xuICogaWYgKCFpZCkge1xuICogICByZXR1cm4gc2VuZEVycm9yKHJlcywgNDAwLCAnTWlzc2luZyBpZCBwYXJhbWV0ZXInKTtcbiAqIH1cbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFyYW0oXG4gIHBhcmFtczogUmVjb3JkPHN0cmluZywgUGFyYW1WYWx1ZT4sXG4gIGtleTogc3RyaW5nLFxuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgdmFsdWUgPSBwYXJhbXNba2V5XTtcbiAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIHJldHVybiBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlWzBdIDogdmFsdWU7XG59XG5cbi8qKlxuICogRXh0cmFjdCB0aGUgb3JnYW5pemF0aW9uIElEIGZyb20gcmVxdWVzdC5cbiAqIENoZWNrcyBwYXJhbXMsIGhlYWRlcnMsIGFuZCB1c2VyIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gcmVxIC0gRXhwcmVzcyByZXF1ZXN0IG9iamVjdFxuICogQHJldHVybnMgT3JnYW5pemF0aW9uIElEIG9yIHVuZGVmaW5lZFxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBvcmdJZCA9IGdldE9yZ0lkKHJlcSk7XG4gKiBpZiAoIW9yZ0lkKSB7XG4gKiAgIHJldHVybiBzZW5kRXJyb3IocmVzLCA0MDAsICdPcmdhbml6YXRpb24gSUQgcmVxdWlyZWQnKTtcbiAqIH1cbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0T3JnSWQocmVxOiBSZXF1ZXN0KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgLy8gQ2hlY2sgcm91dGUgcGFyYW1zIGZpcnN0XG4gIGNvbnN0IHBhcmFtT3JnSWQgPSBnZXRQYXJhbShyZXEucGFyYW1zLCAnb3JnSWQnKTtcbiAgaWYgKHBhcmFtT3JnSWQpIHtcbiAgICByZXR1cm4gcGFyYW1PcmdJZDtcbiAgfVxuXG4gIC8vIENoZWNrIHgtb3JnLWlkIGhlYWRlclxuICBjb25zdCBoZWFkZXJPcmdJZCA9IGdldEhlYWRlclN0cmluZyhyZXEuaGVhZGVyc1sneC1vcmctaWQnXSk/LnRyaW0oKTtcbiAgaWYgKGhlYWRlck9yZ0lkKSB7XG4gICAgcmV0dXJuIGhlYWRlck9yZ0lkO1xuICB9XG5cbiAgLy8gQ2hlY2sgYXV0aGVudGljYXRlZCB1c2VyXG4gIGNvbnN0IHVzZXJPcmdJZCA9IHJlcS51c2VyPy5vcmdhbml6YXRpb25JZD8udHJpbSgpO1xuICBpZiAodXNlck9yZ0lkKSB7XG4gICAgcmV0dXJuIHVzZXJPcmdJZDtcbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogR2V0IHRoZSBhdXRob3JpemF0aW9uIGhlYWRlciBmcm9tIHJlcXVlc3QuXG4gKlxuICogQHBhcmFtIHJlcSAtIEV4cHJlc3MgcmVxdWVzdCBvYmplY3RcbiAqIEByZXR1cm5zIEF1dGhvcml6YXRpb24gaGVhZGVyIHZhbHVlIG9yIGVtcHR5IHN0cmluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QXV0aEhlYWRlcihyZXE6IFJlcXVlc3QpOiBzdHJpbmcge1xuICByZXR1cm4gZ2V0SGVhZGVyU3RyaW5nKHJlcS5oZWFkZXJzLmF1dGhvcml6YXRpb24pID8/ICcnO1xufVxuXG4vKipcbiAqIFBhcnNlIGEgcXVlcnkgcGFyYW1ldGVyIGFzIGEgYm9vbGVhbi5cbiAqXG4gKiBAcGFyYW0gdmFsdWUgLSBRdWVyeSBwYXJhbWV0ZXIgdmFsdWVcbiAqIEByZXR1cm5zIFBhcnNlZCBib29sZWFuIG9yIHVuZGVmaW5lZFxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBpc0FjdGl2ZSA9IHBhcnNlUXVlcnlCb29sZWFuKHJlcS5xdWVyeS5pc0FjdGl2ZSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUXVlcnlCb29sZWFuKHZhbHVlOiB1bmtub3duKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG4gIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSAnJykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nKSByZXR1cm4gdmFsdWU7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgY29uc3QgbG93ZXIgPSB2YWx1ZS50b0xvd2VyQ2FzZSgpO1xuICAgIGlmIChsb3dlciA9PT0gJ3RydWUnIHx8IGxvd2VyID09PSAnMScpIHJldHVybiB0cnVlO1xuICAgIGlmIChsb3dlciA9PT0gJ2ZhbHNlJyB8fCBsb3dlciA9PT0gJzAnKSByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBQYXJzZSBhIHF1ZXJ5IHBhcmFtZXRlciBhcyBhbiBpbnRlZ2VyLlxuICpcbiAqIEBwYXJhbSB2YWx1ZSAtIFF1ZXJ5IHBhcmFtZXRlciB2YWx1ZVxuICogQHBhcmFtIGRlZmF1bHRWYWx1ZSAtIERlZmF1bHQgdmFsdWUgaWYgcGFyc2luZyBmYWlsc1xuICogQHJldHVybnMgUGFyc2VkIGludGVnZXJcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgbGltaXQgPSBwYXJzZVF1ZXJ5SW50KHJlcS5xdWVyeS5saW1pdCwgMTApO1xuICogY29uc3Qgb2Zmc2V0ID0gcGFyc2VRdWVyeUludChyZXEucXVlcnkub2Zmc2V0LCAwKTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VRdWVyeUludCh2YWx1ZTogdW5rbm93biwgZGVmYXVsdFZhbHVlOiBudW1iZXIpOiBudW1iZXIge1xuICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gJycpIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gIGNvbnN0IHBhcnNlZCA9IHBhcnNlSW50KFN0cmluZyh2YWx1ZSksIDEwKTtcbiAgcmV0dXJuIGlzTmFOKHBhcnNlZCkgPyBkZWZhdWx0VmFsdWUgOiBwYXJzZWQ7XG59XG5cbi8qKlxuICogUGFyc2UgYSBxdWVyeSBwYXJhbWV0ZXIgYXMgYSBzdHJpbmcuXG4gKlxuICogQHBhcmFtIHZhbHVlIC0gUXVlcnkgcGFyYW1ldGVyIHZhbHVlXG4gKiBAcmV0dXJucyBTdHJpbmcgdmFsdWUgb3IgdW5kZWZpbmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IHNlYXJjaCA9IHBhcnNlUXVlcnlTdHJpbmcocmVxLnF1ZXJ5LnNlYXJjaCk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUXVlcnlTdHJpbmcodmFsdWU6IHVua25vd24pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gJycpIHJldHVybiB1bmRlZmluZWQ7XG4gIHJldHVybiBTdHJpbmcodmFsdWUpO1xufVxuXG4vKipcbiAqIFBhcnNlIGEgc3RyaW5nIHRvIGEgcG9zaXRpdmUgaW50ZWdlciwgcmV0dXJuaW5nIGEgZmFsbGJhY2sgaWYgaW52YWxpZC5cbiAqIFVzZWZ1bCBmb3IgcGFyc2luZyBlbnZpcm9ubWVudCB2YXJpYWJsZXMgd2l0aCBudW1lcmljIGRlZmF1bHRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VQb3NpdGl2ZUludCh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkLCBmYWxsYmFjazogbnVtYmVyKTogbnVtYmVyIHtcbiAgaWYgKCF2YWx1ZSkgcmV0dXJuIGZhbGxiYWNrO1xuICBjb25zdCBwYXJzZWQgPSBwYXJzZUludCh2YWx1ZSwgMTApO1xuICByZXR1cm4gTnVtYmVyLmlzRmluaXRlKHBhcnNlZCkgJiYgcGFyc2VkID4gMCA/IHBhcnNlZCA6IGZhbGxiYWNrO1xufVxuXG4vKipcbiAqIFBhcnNlIGEgcXVlcnkgaW50LCB0aGVuIGNsYW1wIHRvIGBbMSwgbWF4XWAuIFJldHVybnMgYGRlZmF1bHRWYWx1ZWAgKGFmdGVyXG4gKiB0aGUgc2FtZSBjbGFtcCkgd2hlbiB0aGUgaW5wdXQgaXMgbWlzc2luZy9pbnZhbGlkLiBVc2UgZm9yIGBsaW1pdGAtc3R5bGVcbiAqIHF1ZXJ5IHBhcmFtZXRlcnMgd2hlcmUgYW4gdW5ib3VuZGVkIHZhbHVlIHdvdWxkIGNvc3QgcmVhbCBtb25leS5cbiAqXG4gKiBAZXhhbXBsZVxuICogY29uc3QgbGltaXQgPSBwYXJzZVF1ZXJ5SW50Q2xhbXBlZChyZXEucXVlcnkubGltaXQsIDUwLCAxMDAwKTtcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUXVlcnlJbnRDbGFtcGVkKFxuICB2YWx1ZTogdW5rbm93bixcbiAgZGVmYXVsdFZhbHVlOiBudW1iZXIsXG4gIG1heDogbnVtYmVyLFxuKTogbnVtYmVyIHtcbiAgY29uc3QgcmF3ID0gcGFyc2VRdWVyeUludCh2YWx1ZSwgZGVmYXVsdFZhbHVlKTtcbiAgcmV0dXJuIE1hdGgubWF4KDEsIE1hdGgubWluKHJhdywgbWF4KSk7XG59XG5cbi8qKlxuICogQnVsay1hcnJheSByZXF1ZXN0IGd1YXJkLiBWYWxpZGF0ZXMgdGhhdCBgdmFsdWVgIGlzIGFuIGFycmF5LCBub24tZW1wdHksXG4gKiBhbmQgd2l0aGluIHRoZSBjb25maWd1cmVkIGNhcC4gUmV0dXJucyB0aGUgdHlwZWQgYXJyYXkgb3IgYW4gZXJyb3Igb2JqZWN0XG4gKiB0aGUgY2FsbGVyIGNhbiBmb3J3YXJkIHRvIGBzZW5kRXJyb3JgL2BzZW5kQmFkUmVxdWVzdGAuXG4gKlxuICogUmVwbGFjZXMgYSBoYW5kLXJvbGxlZCBgaWYgKCFBcnJheS5pc0FycmF5KC4uLikpIHsgLi4uIH1gICsgbGVuZ3RoIGNoZWNrXG4gKiBibG9jayB0aGF0IHdhcyBkdXBsaWNhdGVkIGFjcm9zcyBidWxrIGVuZHBvaW50cyBpbiBwaXBlbGluZSwgcGx1Z2luLFxuICogY29tcGxpYW5jZSwgZXRjLlxuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCByZXN1bHQgPSB2YWxpZGF0ZUJ1bGtBcnJheShyZXEuYm9keS5pZHMsICdpZHMnKTtcbiAqIGlmICgnZXJyb3InIGluIHJlc3VsdCkgcmV0dXJuIHNlbmRCYWRSZXF1ZXN0KHJlcywgcmVzdWx0LmVycm9yLCBFcnJvckNvZGUuVkFMSURBVElPTl9FUlJPUik7XG4gKiBjb25zdCBpZHMgPSByZXN1bHQudmFsdWU7XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUJ1bGtBcnJheTxUID0gdW5rbm93bj4oXG4gIHZhbHVlOiB1bmtub3duLFxuICBmaWVsZE5hbWU6IHN0cmluZyxcbiAgbWF4SXRlbXM/OiBudW1iZXIsXG4pOiB7IHZhbHVlOiBUW10gfSB8IHsgZXJyb3I6IHN0cmluZyB9IHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KHZhbHVlKSB8fCB2YWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4geyBlcnJvcjogYFJlcXVlc3QgYm9keSBtdXN0IGluY2x1ZGUgYSBub24tZW1wdHkgXCIke2ZpZWxkTmFtZX1cIiBhcnJheWAgfTtcbiAgfVxuICAvLyBDb3JlQ29uc3RhbnRzLk1BWF9CVUxLX0lURU1TIGlzbid0IGltcG9ydGVkIGhlcmUgdG8gYXZvaWQgYSBjaXJjdWxhclxuICAvLyBwYXRoIHRocm91Z2ggY29uc3RhbnRzL2luZGV4OyBjYWxsZXJzIHBhc3MgaXQgZXhwbGljaXRseSBvciBvbWl0IGZvclxuICAvLyBubyB1cHBlciBib3VuZC5cbiAgaWYgKG1heEl0ZW1zICE9PSB1bmRlZmluZWQgJiYgdmFsdWUubGVuZ3RoID4gbWF4SXRlbXMpIHtcbiAgICByZXR1cm4geyBlcnJvcjogYE1heGltdW0gJHttYXhJdGVtc30gaXRlbXMgcGVyIGJ1bGsgb3BlcmF0aW9uYCB9O1xuICB9XG4gIHJldHVybiB7IHZhbHVlOiB2YWx1ZSBhcyBUW10gfTtcbn1cblxuLyoqXG4gKiBTdXBwb3J0ZWQgaW50ZXJ2YWxzIGZvciB0aW1lLWJ1Y2tldGVkIHJlcG9ydCBxdWVyaWVzLiBVc2VkIGFzIHRoZVxuICogYERBVEVfVFJVTkNgIGZpcnN0IGFyZ3VtZW50IGluIFBvc3RncmVzOyByZXN0cmljdGVkIHRvIGEgZml4ZWQgZW51bSBzb1xuICogdGhlIHZhbHVlIGNhbiBuZXZlciBiZSBpbmplY3RlZCBpbnRvIHJhdyBTUUwuXG4gKi9cbmV4cG9ydCBjb25zdCBSRVBPUlRfSU5URVJWQUxTID0gWydkYXknLCAnd2VlaycsICdtb250aCddIGFzIGNvbnN0O1xuZXhwb3J0IHR5cGUgUmVwb3J0SW50ZXJ2YWwgPSAodHlwZW9mIFJFUE9SVF9JTlRFUlZBTFMpW251bWJlcl07XG5cbi8qKlxuICogUGFyc2UgKyB2YWxpZGF0ZSBhIGA/aW50ZXJ2YWw9YCByZXBvcnQgYnVja2V0IChkZWZhdWx0cyB0byAnd2VlaycpLiBSZXR1cm5zIHRoZVxuICogdmFsaWRhdGVkIGludGVydmFsIG9yIGB7IGVycm9yIH1gLiBTaGFyZWQgYnkgdGhlIHRpbWVzZXJpZXMgcmVwb3J0IHJvdXRlcyBzbyB0aGVcbiAqIGRlZmF1bHQgKyBhbGxvdy1saXN0ICsgZXJyb3IgbWVzc2FnZSBsaXZlIGluIG9uZSBwbGFjZS5cbiAqXG4gKiBAZXhhbXBsZVxuICogY29uc3QgaW50ZXJ2YWwgPSBwYXJzZVJlcG9ydEludGVydmFsKHJlcS5xdWVyeSk7XG4gKiBpZiAodHlwZW9mIGludGVydmFsID09PSAnb2JqZWN0JykgcmV0dXJuIHNlbmRCYWRSZXF1ZXN0KHJlcywgaW50ZXJ2YWwuZXJyb3IsIEVycm9yQ29kZS5WQUxJREFUSU9OX0VSUk9SKTtcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUmVwb3J0SW50ZXJ2YWwocXVlcnk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogUmVwb3J0SW50ZXJ2YWwgfCB7IGVycm9yOiBzdHJpbmcgfSB7XG4gIGNvbnN0IGludGVydmFsID0gU3RyaW5nKHF1ZXJ5LmludGVydmFsID8/ICd3ZWVrJyk7XG4gIGlmICghUkVQT1JUX0lOVEVSVkFMUy5pbmNsdWRlcyhpbnRlcnZhbCBhcyBSZXBvcnRJbnRlcnZhbCkpIHtcbiAgICByZXR1cm4geyBlcnJvcjogYGludGVydmFsIG11c3QgYmUgb25lIG9mOiAke1JFUE9SVF9JTlRFUlZBTFMuam9pbignLCAnKX1gIH07XG4gIH1cbiAgcmV0dXJuIGludGVydmFsIGFzIFJlcG9ydEludGVydmFsO1xufVxuXG4vKipcbiAqIFBhcnNlIGEgYD9mcm9tPSZ0bz1gIGRhdGUgcmFuZ2Ugd2l0aCBkZWZhdWx0cyBvZiBcIjMwIGRheXMgYWdvIOKGkiBub3dcIi5cbiAqIFJlamVjdHMgbm9uLXN0cmluZyBpbnB1dHMgKEV4cHJlc3MncyBwYXJzZXIgY2FuIHByb2R1Y2Ugc3RyaW5nW10gZm9yXG4gKiByZXBlYXRlZCBrZXlzKSwgaW52YWxpZCBJU08gdGltZXN0YW1wcywgYW5kIGludmVydGVkIHJhbmdlcy5cbiAqXG4gKiBSZXR1cm5zIGVpdGhlciBgeyBmcm9tLCB0byB9YCBJU08gc3RyaW5ncyBvciBgeyBlcnJvciB9YC5cbiAqXG4gKiBAZXhhbXBsZVxuICogY29uc3QgcmFuZ2UgPSBwYXJzZURhdGVSYW5nZShyZXEucXVlcnkpO1xuICogaWYgKCdlcnJvcicgaW4gcmFuZ2UpIHJldHVybiBzZW5kQmFkUmVxdWVzdChyZXMsIHJhbmdlLmVycm9yLCBFcnJvckNvZGUuVkFMSURBVElPTl9FUlJPUik7XG4gKiBjb25zdCByb3dzID0gYXdhaXQgc3ZjLmxpc3QocmFuZ2UuZnJvbSwgcmFuZ2UudG8pO1xuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VEYXRlUmFuZ2UoXG4gIHF1ZXJ5OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgb3B0aW9uczogeyBtYXhSYW5nZU1zPzogbnVtYmVyOyBkZWZhdWx0RGF5c0JhY2s/OiBudW1iZXIgfSA9IHt9LFxuKTogeyBmcm9tOiBzdHJpbmc7IHRvOiBzdHJpbmcgfSB8IHsgZXJyb3I6IHN0cmluZyB9IHtcbiAgY29uc3QgeyBtYXhSYW5nZU1zLCBkZWZhdWx0RGF5c0JhY2sgPSAzMCB9ID0gb3B0aW9ucztcblxuICBjb25zdCByYXdGcm9tID0gcXVlcnkuZnJvbTtcbiAgY29uc3QgcmF3VG8gPSBxdWVyeS50bztcblxuICBpZiAocmF3RnJvbSAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiByYXdGcm9tICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB7IGVycm9yOiAnXCJmcm9tXCIgbXVzdCBiZSBhIHNpbmdsZSBJU08gdGltZXN0YW1wIHN0cmluZycgfTtcbiAgfVxuICBpZiAocmF3VG8gIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgcmF3VG8gIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHsgZXJyb3I6ICdcInRvXCIgbXVzdCBiZSBhIHNpbmdsZSBJU08gdGltZXN0YW1wIHN0cmluZycgfTtcbiAgfVxuXG4gIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gIGNvbnN0IGZyb21TdHIgPSByYXdGcm9tID8/IG5ldyBEYXRlKG5vdyAtIGRlZmF1bHREYXlzQmFjayAqIDI0ICogNjAgKiA2MCAqIDEwMDApLnRvSVNPU3RyaW5nKCk7XG4gIGNvbnN0IHRvU3RyID0gcmF3VG8gPz8gbmV3IERhdGUobm93KS50b0lTT1N0cmluZygpO1xuXG4gIGNvbnN0IGZyb21NcyA9IERhdGUucGFyc2UoZnJvbVN0cik7XG4gIGNvbnN0IHRvTXMgPSBEYXRlLnBhcnNlKHRvU3RyKTtcbiAgaWYgKCFOdW1iZXIuaXNGaW5pdGUoZnJvbU1zKSkgcmV0dXJuIHsgZXJyb3I6ICdcImZyb21cIiBpcyBub3QgYSB2YWxpZCBJU08gdGltZXN0YW1wJyB9O1xuICBpZiAoIU51bWJlci5pc0Zpbml0ZSh0b01zKSkgcmV0dXJuIHsgZXJyb3I6ICdcInRvXCIgaXMgbm90IGEgdmFsaWQgSVNPIHRpbWVzdGFtcCcgfTtcbiAgaWYgKGZyb21NcyA+IHRvTXMpIHJldHVybiB7IGVycm9yOiAnXCJmcm9tXCIgbXVzdCBiZSBlYXJsaWVyIHRoYW4gXCJ0b1wiJyB9O1xuICBpZiAobWF4UmFuZ2VNcyAhPT0gdW5kZWZpbmVkICYmIHRvTXMgLSBmcm9tTXMgPiBtYXhSYW5nZU1zKSB7XG4gICAgcmV0dXJuIHsgZXJyb3I6IGBEYXRlIHJhbmdlIGV4Y2VlZHMgbWF4aW11bSBvZiAke01hdGguZmxvb3IobWF4UmFuZ2VNcyAvICgyNCAqIDYwICogNjAgKiAxMDAwKSl9IGRheXNgIH07XG4gIH1cblxuICByZXR1cm4geyBmcm9tOiBmcm9tU3RyLCB0bzogdG9TdHIgfTtcbn1cbiJdfQ==
240
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyYW1zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL3BhcmFtcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBR3RDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFPL0M7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsTUFBTSxVQUFVLFFBQVEsQ0FDdEIsTUFBa0MsRUFDbEMsR0FBVztJQUVYLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMxQixJQUFJLEtBQUssS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUN4QixPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBQ0QsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUNqRCxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFDSCxNQUFNLFVBQVUsUUFBUSxDQUFDLEdBQVk7SUFDbkMsNkVBQTZFO0lBQzdFLDJFQUEyRTtJQUMzRSw2REFBNkQ7SUFDN0QseUVBQXlFO0lBQ3pFLDREQUE0RDtJQUM1RCxNQUFNLFNBQVMsR0FBRyxHQUFHLENBQUMsSUFBSSxFQUFFLGNBQWMsRUFBRSxJQUFJLEVBQUUsQ0FBQztJQUNuRCxJQUFJLFNBQVMsRUFBRSxDQUFDO1FBQ2QsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVELHNFQUFzRTtJQUN0RSxNQUFNLFVBQVUsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNqRCxJQUFJLFVBQVUsRUFBRSxDQUFDO1FBQ2YsT0FBTyxVQUFVLENBQUM7SUFDcEIsQ0FBQztJQUVELE1BQU0sV0FBVyxHQUFHLGVBQWUsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLFVBQVUs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QUcsVUFBVSxFQUFFLENBQUM7UUFDM0QsT0FBTyxFQUFFLEtBQUssRUFBRSxpQ0FBaUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUMzRyxDQUFDO0lBRUQsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDO0FBQ3RDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHR5cGUgeyBSZXF1ZXN0IH0gZnJvbSAnZXhwcmVzcyc7XG5pbXBvcnQgeyBnZXRIZWFkZXJTdHJpbmcgfSBmcm9tICcuL2hlYWRlcnMuanMnO1xuXG4vKipcbiAqIEV4cHJlc3MgNSBwYXJhbWV0ZXIgdHlwZS5cbiAqL1xudHlwZSBQYXJhbVZhbHVlID0gc3RyaW5nIHwgc3RyaW5nW10gfCB1bmRlZmluZWQ7XG5cbi8qKlxuICogRXh0cmFjdCBhIHNpbmdsZSBzdHJpbmcgcGFyYW1ldGVyIGZyb20gRXhwcmVzcyA1IHJvdXRlIHBhcmFtcy5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gUmVxdWVzdCBwYXJhbXMgb2JqZWN0XG4gKiBAcGFyYW0ga2V5IC0gUGFyYW1ldGVyIGtleVxuICogQHJldHVybnMgVGhlIHBhcmFtZXRlciB2YWx1ZSBhcyBhIHN0cmluZywgb3IgdW5kZWZpbmVkIGlmIG5vdCBwcmVzZW50XG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIC8vIFJvdXRlOiBHRVQgL3BsdWdpbnMvOmlkXG4gKiBjb25zdCBpZCA9IGdldFBhcmFtKHJlcS5wYXJhbXMsICdpZCcpO1xuICogaWYgKCFpZCkge1xuICogICByZXR1cm4gc2VuZEVycm9yKHJlcywgNDAwLCAnTWlzc2luZyBpZCBwYXJhbWV0ZXInKTtcbiAqIH1cbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFyYW0oXG4gIHBhcmFtczogUmVjb3JkPHN0cmluZywgUGFyYW1WYWx1ZT4sXG4gIGtleTogc3RyaW5nLFxuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgdmFsdWUgPSBwYXJhbXNba2V5XTtcbiAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIHJldHVybiBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlWzBdIDogdmFsdWU7XG59XG5cbi8qKlxuICogRXh0cmFjdCB0aGUgb3JnYW5pemF0aW9uIElEIGZyb20gcmVxdWVzdC5cbiAqIENoZWNrcyBwYXJhbXMsIGhlYWRlcnMsIGFuZCB1c2VyIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gcmVxIC0gRXhwcmVzcyByZXF1ZXN0IG9iamVjdFxuICogQHJldHVybnMgT3JnYW5pemF0aW9uIElEIG9yIHVuZGVmaW5lZFxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBvcmdJZCA9IGdldE9yZ0lkKHJlcSk7XG4gKiBpZiAoIW9yZ0lkKSB7XG4gKiAgIHJldHVybiBzZW5kRXJyb3IocmVzLCA0MDAsICdPcmdhbml6YXRpb24gSUQgcmVxdWlyZWQnKTtcbiAqIH1cbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0T3JnSWQocmVxOiBSZXF1ZXN0KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgLy8gUHJlZmVyIHRoZSBWRVJJRklFRCBKV1QgaWRlbnRpdHkgZmlyc3QuIEEgc3Bvb2ZhYmxlIGB4LW9yZy1pZGAgaGVhZGVyIG11c3RcbiAgLy8gbmV2ZXIgb3ZlcnJpZGUgYW4gYXV0aGVudGljYXRlZCB1c2VyJ3Mgb3JnIChjcm9zcy10ZW5hbnQgZm9vdGd1bikuIEZvciBhXG4gIC8vIHN1cGVyYWRtaW4gYWN0aW5nIGNyb3NzLW9yZywgcmVxdWlyZUF1dGggYWxyZWFkeSByZS1wb2ludHNcbiAgLy8gYHJlcS51c2VyLm9yZ2FuaXphdGlvbklkYCB0byB0aGUgY2hvc2VuIG9yZyB2aWEgdGhlIGlzU3VwZXJBZG1pbi1nYXRlZFxuICAvLyBoZWFkZXIgb3ZlcnJpZGUsIHNvIHRoaXMgc3RpbGwgeWllbGRzIHRoZSBpbnRlbmRlZCBzY29wZS5cbiAgY29uc3QgdXNlck9yZ0lkID0gcmVxLnVzZXI/Lm9yZ2FuaXphdGlvbklkPy50cmltKCk7XG4gIGlmICh1c2VyT3JnSWQpIHtcbiAgICByZXR1cm4gdXNlck9yZ0lkO1xuICB9XG5cbiAgLy8gUHJlLWF1dGggZmFsbGJhY2tzIG9ubHkgKHJlcS51c2VyIHVuc2V0KTogcm91dGUgcGFyYW0sIHRoZW4gaGVhZGVyLlxuICBjb25zdCBwYXJhbU9yZ0lkID0gZ2V0UGFyYW0ocmVxLnBhcmFtcywgJ29yZ0lkJyk7XG4gIGlmIChwYXJhbU9yZ0lkKSB7XG4gICAgcmV0dXJuIHBhcmFtT3JnSWQ7XG4gIH1cblxuICBjb25zdCBoZWFkZXJPcmdJZCA9IGdldEhlYWRlclN0cmluZyhyZXEuaGVhZGVyc1sneC1vcmctaWQnXSk/LnRyaW0oKTtcbiAgaWYgKGhlYWRlck9yZ0lkKSB7XG4gICAgcmV0dXJuIGhlYWRlck9yZ0lkO1xuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIGF1dGhvcml6YXRpb24gaGVhZGVyIGZyb20gcmVxdWVzdC5cbiAqXG4gKiBAcGFyYW0gcmVxIC0gRXhwcmVzcyByZXF1ZXN0IG9iamVjdFxuICogQHJldHVybnMgQXV0aG9yaXphdGlvbiBoZWFkZXIgdmFsdWUgb3IgZW1wdHkgc3RyaW5nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBdXRoSGVhZGVyKHJlcTogUmVxdWVzdCk6IHN0cmluZyB7XG4gIHJldHVybiBnZXRIZWFkZXJTdHJpbmcocmVxLmhlYWRlcnMuYXV0aG9yaXphdGlvbikgPz8gJyc7XG59XG5cbi8qKlxuICogUGFyc2UgYSBxdWVyeSBwYXJhbWV0ZXIgYXMgYSBib29sZWFuLlxuICpcbiAqIEBwYXJhbSB2YWx1ZSAtIFF1ZXJ5IHBhcmFtZXRlciB2YWx1ZVxuICogQHJldHVybnMgUGFyc2VkIGJvb2xlYW4gb3IgdW5kZWZpbmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IGlzQWN0aXZlID0gcGFyc2VRdWVyeUJvb2xlYW4ocmVxLnF1ZXJ5LmlzQWN0aXZlKTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VRdWVyeUJvb2xlYW4odmFsdWU6IHVua25vd24pOiBib29sZWFuIHwgdW5kZWZpbmVkIHtcbiAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09ICcnKSByZXR1cm4gdW5kZWZpbmVkO1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicpIHJldHVybiB2YWx1ZTtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICBjb25zdCBsb3dlciA9IHZhbHVlLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKGxvd2VyID09PSAndHJ1ZScgfHwgbG93ZXIgPT09ICcxJykgcmV0dXJuIHRydWU7XG4gICAgaWYgKGxvd2VyID09PSAnZmFsc2UnIHx8IGxvd2VyID09PSAnMCcpIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFBhcnNlIGEgcXVlcnkgcGFyYW1ldGVyIGFzIGFuIGludGVnZXIuXG4gKlxuICogQHBhcmFtIHZhbHVlIC0gUXVlcnkgcGFyYW1ldGVyIHZhbHVlXG4gKiBAcGFyYW0gZGVmYXVsdFZhbHVlIC0gRGVmYXVsdCB2YWx1ZSBpZiBwYXJzaW5nIGZhaWxzXG4gKiBAcmV0dXJucyBQYXJzZWQgaW50ZWdlclxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBsaW1pdCA9IHBhcnNlUXVlcnlJbnQocmVxLnF1ZXJ5LmxpbWl0LCAxMCk7XG4gKiBjb25zdCBvZmZzZXQgPSBwYXJzZVF1ZXJ5SW50KHJlcS5xdWVyeS5vZmZzZXQsIDApO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVF1ZXJ5SW50KHZhbHVlOiB1bmtub3duLCBkZWZhdWx0VmFsdWU6IG51bWJlcik6IG51bWJlciB7XG4gIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSAnJykgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgY29uc3QgcGFyc2VkID0gcGFyc2VJbnQoU3RyaW5nKHZhbHVlKSwgMTApO1xuICByZXR1cm4gaXNOYU4ocGFyc2VkKSA/IGRlZmF1bHRWYWx1ZSA6IHBhcnNlZDtcbn1cblxuLyoqXG4gKiBQYXJzZSBhIHF1ZXJ5IHBhcmFtZXRlciBhcyBhIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0gdmFsdWUgLSBRdWVyeSBwYXJhbWV0ZXIgdmFsdWVcbiAqIEByZXR1cm5zIFN0cmluZyB2YWx1ZSBvciB1bmRlZmluZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3Qgc2VhcmNoID0gcGFyc2VRdWVyeVN0cmluZyhyZXEucXVlcnkuc2VhcmNoKTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VRdWVyeVN0cmluZyh2YWx1ZTogdW5rbm93bik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSAnJykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG59XG5cbi8qKlxuICogUGFyc2UgYSBzdHJpbmcgdG8gYSBwb3NpdGl2ZSBpbnRlZ2VyLCByZXR1cm5pbmcgYSBmYWxsYmFjayBpZiBpbnZhbGlkLlxuICogVXNlZnVsIGZvciBwYXJzaW5nIGVudmlyb25tZW50IHZhcmlhYmxlcyB3aXRoIG51bWVyaWMgZGVmYXVsdHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVBvc2l0aXZlSW50KHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQsIGZhbGxiYWNrOiBudW1iZXIpOiBudW1iZXIge1xuICBpZiAoIXZhbHVlKSByZXR1cm4gZmFsbGJhY2s7XG4gIGNvbnN0IHBhcnNlZCA9IHBhcnNlSW50KHZhbHVlLCAxMCk7XG4gIHJldHVybiBOdW1iZXIuaXNGaW5pdGUocGFyc2VkKSAmJiBwYXJzZWQgPiAwID8gcGFyc2VkIDogZmFsbGJhY2s7XG59XG5cbi8qKlxuICogUGFyc2UgYSBxdWVyeSBpbnQsIHRoZW4gY2xhbXAgdG8gYFsxLCBtYXhdYC4gUmV0dXJucyBgZGVmYXVsdFZhbHVlYCAoYWZ0ZXJcbiAqIHRoZSBzYW1lIGNsYW1wKSB3aGVuIHRoZSBpbnB1dCBpcyBtaXNzaW5nL2ludmFsaWQuIFVzZSBmb3IgYGxpbWl0YC1zdHlsZVxuICogcXVlcnkgcGFyYW1ldGVycyB3aGVyZSBhbiB1bmJvdW5kZWQgdmFsdWUgd291bGQgY29zdCByZWFsIG1vbmV5LlxuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBsaW1pdCA9IHBhcnNlUXVlcnlJbnRDbGFtcGVkKHJlcS5xdWVyeS5saW1pdCwgNTAsIDEwMDApO1xuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VRdWVyeUludENsYW1wZWQoXG4gIHZhbHVlOiB1bmtub3duLFxuICBkZWZhdWx0VmFsdWU6IG51bWJlcixcbiAgbWF4OiBudW1iZXIsXG4pOiBudW1iZXIge1xuICBjb25zdCByYXcgPSBwYXJzZVF1ZXJ5SW50KHZhbHVlLCBkZWZhdWx0VmFsdWUpO1xuICByZXR1cm4gTWF0aC5tYXgoMSwgTWF0aC5taW4ocmF3LCBtYXgpKTtcbn1cblxuLyoqXG4gKiBCdWxrLWFycmF5IHJlcXVlc3QgZ3VhcmQuIFZhbGlkYXRlcyB0aGF0IGB2YWx1ZWAgaXMgYW4gYXJyYXksIG5vbi1lbXB0eSxcbiAqIGFuZCB3aXRoaW4gdGhlIGNvbmZpZ3VyZWQgY2FwLiBSZXR1cm5zIHRoZSB0eXBlZCBhcnJheSBvciBhbiBlcnJvciBvYmplY3RcbiAqIHRoZSBjYWxsZXIgY2FuIGZvcndhcmQgdG8gYHNlbmRFcnJvcmAvYHNlbmRCYWRSZXF1ZXN0YC5cbiAqXG4gKiBSZXBsYWNlcyBhIGhhbmQtcm9sbGVkIGBpZiAoIUFycmF5LmlzQXJyYXkoLi4uKSkgeyAuLi4gfWAgKyBsZW5ndGggY2hlY2tcbiAqIGJsb2NrIHRoYXQgd2FzIGR1cGxpY2F0ZWQgYWNyb3NzIGJ1bGsgZW5kcG9pbnRzIGluIHBpcGVsaW5lLCBwbHVnaW4sXG4gKiBjb21wbGlhbmNlLCBldGMuXG4gKlxuICogQGV4YW1wbGVcbiAqIGNvbnN0IHJlc3VsdCA9IHZhbGlkYXRlQnVsa0FycmF5KHJlcS5ib2R5LmlkcywgJ2lkcycpO1xuICogaWYgKCdlcnJvcicgaW4gcmVzdWx0KSByZXR1cm4gc2VuZEJhZFJlcXVlc3QocmVzLCByZXN1bHQuZXJyb3IsIEVycm9yQ29kZS5WQUxJREFUSU9OX0VSUk9SKTtcbiAqIGNvbnN0IGlkcyA9IHJlc3VsdC52YWx1ZTtcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlQnVsa0FycmF5PFQgPSB1bmtub3duPihcbiAgdmFsdWU6IHVua25vd24sXG4gIGZpZWxkTmFtZTogc3RyaW5nLFxuICBtYXhJdGVtcz86IG51bWJlcixcbik6IHsgdmFsdWU6IFRbXSB9IHwgeyBlcnJvcjogc3RyaW5nIH0ge1xuICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWUpIHx8IHZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB7IGVycm9yOiBgUmVxdWVzdCBib2R5IG11c3QgaW5jbHVkZSBhIG5vbi1lbXB0eSBcIiR7ZmllbGROYW1lfVwiIGFycmF5YCB9O1xuICB9XG4gIC8vIENvcmVDb25zdGFudHMuTUFYX0JVTEtfSVRFTVMgaXNuJ3QgaW1wb3J0ZWQgaGVyZSB0byBhdm9pZCBhIGNpcmN1bGFyXG4gIC8vIHBhdGggdGhyb3VnaCBjb25zdGFudHMvaW5kZXg7IGNhbGxlcnMgcGFzcyBpdCBleHBsaWNpdGx5IG9yIG9taXQgZm9yXG4gIC8vIG5vIHVwcGVyIGJvdW5kLlxuICBpZiAobWF4SXRlbXMgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZS5sZW5ndGggPiBtYXhJdGVtcykge1xuICAgIHJldHVybiB7IGVycm9yOiBgTWF4aW11bSAke21heEl0ZW1zfSBpdGVtcyBwZXIgYnVsayBvcGVyYXRpb25gIH07XG4gIH1cbiAgcmV0dXJuIHsgdmFsdWU6IHZhbHVlIGFzIFRbXSB9O1xufVxuXG4vKipcbiAqIFN1cHBvcnRlZCBpbnRlcnZhbHMgZm9yIHRpbWUtYnVja2V0ZWQgcmVwb3J0IHF1ZXJpZXMuIFVzZWQgYXMgdGhlXG4gKiBgREFURV9UUlVOQ2AgZmlyc3QgYXJndW1lbnQgaW4gUG9zdGdyZXM7IHJlc3RyaWN0ZWQgdG8gYSBmaXhlZCBlbnVtIHNvXG4gKiB0aGUgdmFsdWUgY2FuIG5ldmVyIGJlIGluamVjdGVkIGludG8gcmF3IFNRTC5cbiAqL1xuZXhwb3J0IGNvbnN0IFJFUE9SVF9JTlRFUlZBTFMgPSBbJ2RheScsICd3ZWVrJywgJ21vbnRoJ10gYXMgY29uc3Q7XG5leHBvcnQgdHlwZSBSZXBvcnRJbnRlcnZhbCA9ICh0eXBlb2YgUkVQT1JUX0lOVEVSVkFMUylbbnVtYmVyXTtcblxuLyoqXG4gKiBQYXJzZSArIHZhbGlkYXRlIGEgYD9pbnRlcnZhbD1gIHJlcG9ydCBidWNrZXQgKGRlZmF1bHRzIHRvICd3ZWVrJykuIFJldHVybnMgdGhlXG4gKiB2YWxpZGF0ZWQgaW50ZXJ2YWwgb3IgYHsgZXJyb3IgfWAuIFNoYXJlZCBieSB0aGUgdGltZXNlcmllcyByZXBvcnQgcm91dGVzIHNvIHRoZVxuICogZGVmYXVsdCArIGFsbG93LWxpc3QgKyBlcnJvciBtZXNzYWdlIGxpdmUgaW4gb25lIHBsYWNlLlxuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBpbnRlcnZhbCA9IHBhcnNlUmVwb3J0SW50ZXJ2YWwocmVxLnF1ZXJ5KTtcbiAqIGlmICh0eXBlb2YgaW50ZXJ2YWwgPT09ICdvYmplY3QnKSByZXR1cm4gc2VuZEJhZFJlcXVlc3QocmVzLCBpbnRlcnZhbC5lcnJvciwgRXJyb3JDb2RlLlZBTElEQVRJT05fRVJST1IpO1xuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VSZXBvcnRJbnRlcnZhbChxdWVyeTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBSZXBvcnRJbnRlcnZhbCB8IHsgZXJyb3I6IHN0cmluZyB9IHtcbiAgY29uc3QgaW50ZXJ2YWwgPSBTdHJpbmcocXVlcnkuaW50ZXJ2YWwgPz8gJ3dlZWsnKTtcbiAgaWYgKCFSRVBPUlRfSU5URVJWQUxTLmluY2x1ZGVzKGludGVydmFsIGFzIFJlcG9ydEludGVydmFsKSkge1xuICAgIHJldHVybiB7IGVycm9yOiBgaW50ZXJ2YWwgbXVzdCBiZSBvbmUgb2Y6ICR7UkVQT1JUX0lOVEVSVkFMUy5qb2luKCcsICcpfWAgfTtcbiAgfVxuICByZXR1cm4gaW50ZXJ2YWwgYXMgUmVwb3J0SW50ZXJ2YWw7XG59XG5cbi8qKlxuICogUGFyc2UgYSBgP2Zyb209JnRvPWAgZGF0ZSByYW5nZSB3aXRoIGRlZmF1bHRzIG9mIFwiMzAgZGF5cyBhZ28g4oaSIG5vd1wiLlxuICogUmVqZWN0cyBub24tc3RyaW5nIGlucHV0cyAoRXhwcmVzcydzIHBhcnNlciBjYW4gcHJvZHVjZSBzdHJpbmdbXSBmb3JcbiAqIHJlcGVhdGVkIGtleXMpLCBpbnZhbGlkIElTTyB0aW1lc3RhbXBzLCBhbmQgaW52ZXJ0ZWQgcmFuZ2VzLlxuICpcbiAqIFJldHVybnMgZWl0aGVyIGB7IGZyb20sIHRvIH1gIElTTyBzdHJpbmdzIG9yIGB7IGVycm9yIH1gLlxuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCByYW5nZSA9IHBhcnNlRGF0ZVJhbmdlKHJlcS5xdWVyeSk7XG4gKiBpZiAoJ2Vycm9yJyBpbiByYW5nZSkgcmV0dXJuIHNlbmRCYWRSZXF1ZXN0KHJlcywgcmFuZ2UuZXJyb3IsIEVycm9yQ29kZS5WQUxJREFUSU9OX0VSUk9SKTtcbiAqIGNvbnN0IHJvd3MgPSBhd2FpdCBzdmMubGlzdChyYW5nZS5mcm9tLCByYW5nZS50byk7XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZURhdGVSYW5nZShcbiAgcXVlcnk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBvcHRpb25zOiB7IG1heFJhbmdlTXM/OiBudW1iZXI7IGRlZmF1bHREYXlzQmFjaz86IG51bWJlciB9ID0ge30sXG4pOiB7IGZyb206IHN0cmluZzsgdG86IHN0cmluZyB9IHwgeyBlcnJvcjogc3RyaW5nIH0ge1xuICBjb25zdCB7IG1heFJhbmdlTXMsIGRlZmF1bHREYXlzQmFjayA9IDMwIH0gPSBvcHRpb25zO1xuXG4gIGNvbnN0IHJhd0Zyb20gPSBxdWVyeS5mcm9tO1xuICBjb25zdCByYXdUbyA9IHF1ZXJ5LnRvO1xuXG4gIGlmIChyYXdGcm9tICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIHJhd0Zyb20gIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHsgZXJyb3I6ICdcImZyb21cIiBtdXN0IGJlIGEgc2luZ2xlIElTTyB0aW1lc3RhbXAgc3RyaW5nJyB9O1xuICB9XG4gIGlmIChyYXdUbyAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiByYXdUbyAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4geyBlcnJvcjogJ1widG9cIiBtdXN0IGJlIGEgc2luZ2xlIElTTyB0aW1lc3RhbXAgc3RyaW5nJyB9O1xuICB9XG5cbiAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgY29uc3QgZnJvbVN0ciA9IHJhd0Zyb20gPz8gbmV3IERhdGUobm93IC0gZGVmYXVsdERheXNCYWNrICogMjQgKiA2MCAqIDYwICogMTAwMCkudG9JU09TdHJpbmcoKTtcbiAgY29uc3QgdG9TdHIgPSByYXdUbyA/PyBuZXcgRGF0ZShub3cpLnRvSVNPU3RyaW5nKCk7XG5cbiAgY29uc3QgZnJvbU1zID0gRGF0ZS5wYXJzZShmcm9tU3RyKTtcbiAgY29uc3QgdG9NcyA9IERhdGUucGFyc2UodG9TdHIpO1xuICBpZiAoIU51bWJlci5pc0Zpbml0ZShmcm9tTXMpKSByZXR1cm4geyBlcnJvcjogJ1wiZnJvbVwiIGlzIG5vdCBhIHZhbGlkIElTTyB0aW1lc3RhbXAnIH07XG4gIGlmICghTnVtYmVyLmlzRmluaXRlKHRvTXMpKSByZXR1cm4geyBlcnJvcjogJ1widG9cIiBpcyBub3QgYSB2YWxpZCBJU08gdGltZXN0YW1wJyB9O1xuICBpZiAoZnJvbU1zID4gdG9NcykgcmV0dXJuIHsgZXJyb3I6ICdcImZyb21cIiBtdXN0IGJlIGVhcmxpZXIgdGhhbiBcInRvXCInIH07XG4gIGlmIChtYXhSYW5nZU1zICE9PSB1bmRlZmluZWQgJiYgdG9NcyAtIGZyb21NcyA+IG1heFJhbmdlTXMpIHtcbiAgICByZXR1cm4geyBlcnJvcjogYERhdGUgcmFuZ2UgZXhjZWVkcyBtYXhpbXVtIG9mICR7TWF0aC5mbG9vcihtYXhSYW5nZU1zIC8gKDI0ICogNjAgKiA2MCAqIDEwMDApKX0gZGF5c2AgfTtcbiAgfVxuXG4gIHJldHVybiB7IGZyb206IGZyb21TdHIsIHRvOiB0b1N0ciB9O1xufVxuIl19