@aws-amplify/graphql-api-construct 1.18.8 → 1.19.1

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 (116) hide show
  1. package/.jsii +22 -60
  2. package/API.md +1 -1
  3. package/CHANGELOG.md +10 -0
  4. package/lib/amplify-dynamodb-table-wrapper.js +1 -1
  5. package/lib/amplify-graphql-api.js +1 -1
  6. package/lib/amplify-graphql-definition.js +1 -1
  7. package/lib/sql-model-datasource-strategy.js +1 -1
  8. package/lib/types.d.ts +1 -1
  9. package/lib/types.js +1 -1
  10. package/node_modules/@aws-amplify/ai-constructs/lib/conversation/runtime/user_agent_provider.js +2 -2
  11. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/lib/errors/amplify_error.js +2 -2
  12. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/lib/usage-data/account_id_fetcher.js +7 -3
  13. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/lib/usage-data/serializable_error.d.ts +5 -0
  14. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/lib/usage-data/serializable_error.js +44 -7
  15. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/package.json +1 -1
  16. package/node_modules/@aws-amplify/ai-constructs/package.json +4 -2
  17. package/node_modules/@aws-amplify/graphql-auth-transformer/CHANGELOG.md +10 -0
  18. package/node_modules/@aws-amplify/graphql-auth-transformer/lib/graphql-auth-transformer.js +2 -2
  19. package/node_modules/@aws-amplify/graphql-auth-transformer/lib/graphql-auth-transformer.js.map +1 -1
  20. package/node_modules/@aws-amplify/graphql-auth-transformer/lib/utils/iam.js +2 -2
  21. package/node_modules/@aws-amplify/graphql-auth-transformer/lib/utils/iam.js.map +1 -1
  22. package/node_modules/@aws-amplify/graphql-auth-transformer/package.json +13 -13
  23. package/node_modules/@aws-amplify/graphql-conversation-transformer/CHANGELOG.md +8 -0
  24. package/node_modules/@aws-amplify/graphql-conversation-transformer/package.json +12 -12
  25. package/node_modules/@aws-amplify/graphql-default-value-transformer/CHANGELOG.md +8 -0
  26. package/node_modules/@aws-amplify/graphql-default-value-transformer/package.json +7 -7
  27. package/node_modules/@aws-amplify/graphql-directives/API.md +3 -0
  28. package/node_modules/@aws-amplify/graphql-directives/CHANGELOG.md +6 -0
  29. package/node_modules/@aws-amplify/graphql-directives/lib/directives/index.d.ts +1 -0
  30. package/node_modules/@aws-amplify/graphql-directives/lib/directives/index.d.ts.map +1 -1
  31. package/node_modules/@aws-amplify/graphql-directives/lib/directives/index.js +3 -1
  32. package/node_modules/@aws-amplify/graphql-directives/lib/directives/index.js.map +1 -1
  33. package/node_modules/@aws-amplify/graphql-directives/lib/directives/validate.d.ts +3 -0
  34. package/node_modules/@aws-amplify/graphql-directives/lib/directives/validate.d.ts.map +1 -0
  35. package/node_modules/@aws-amplify/graphql-directives/lib/directives/validate.js +30 -0
  36. package/node_modules/@aws-amplify/graphql-directives/lib/directives/validate.js.map +1 -0
  37. package/node_modules/@aws-amplify/graphql-directives/lib/index.d.ts.map +1 -1
  38. package/node_modules/@aws-amplify/graphql-directives/lib/index.js +1 -0
  39. package/node_modules/@aws-amplify/graphql-directives/lib/index.js.map +1 -1
  40. package/node_modules/@aws-amplify/graphql-directives/package.json +1 -1
  41. package/node_modules/@aws-amplify/graphql-function-transformer/CHANGELOG.md +8 -0
  42. package/node_modules/@aws-amplify/graphql-function-transformer/package.json +7 -7
  43. package/node_modules/@aws-amplify/graphql-generation-transformer/CHANGELOG.md +10 -0
  44. package/node_modules/@aws-amplify/graphql-generation-transformer/lib/grapqhl-generation-transformer.js +2 -1
  45. package/node_modules/@aws-amplify/graphql-generation-transformer/lib/grapqhl-generation-transformer.js.map +1 -1
  46. package/node_modules/@aws-amplify/graphql-generation-transformer/package.json +7 -7
  47. package/node_modules/@aws-amplify/graphql-http-transformer/CHANGELOG.md +8 -0
  48. package/node_modules/@aws-amplify/graphql-http-transformer/package.json +7 -7
  49. package/node_modules/@aws-amplify/graphql-index-transformer/CHANGELOG.md +8 -0
  50. package/node_modules/@aws-amplify/graphql-index-transformer/package.json +8 -8
  51. package/node_modules/@aws-amplify/graphql-maps-to-transformer/CHANGELOG.md +8 -0
  52. package/node_modules/@aws-amplify/graphql-maps-to-transformer/lib/assets/mapping-lambda.zip +0 -0
  53. package/node_modules/@aws-amplify/graphql-maps-to-transformer/package.json +11 -11
  54. package/node_modules/@aws-amplify/graphql-model-transformer/CHANGELOG.md +13 -0
  55. package/node_modules/@aws-amplify/graphql-model-transformer/lib/rds-lambda.zip +0 -0
  56. package/node_modules/@aws-amplify/graphql-model-transformer/lib/rds-notification-lambda.zip +0 -0
  57. package/node_modules/@aws-amplify/graphql-model-transformer/lib/rds-patching-lambda.zip +0 -0
  58. package/node_modules/@aws-amplify/graphql-model-transformer/lib/resources/amplify-dynamodb-table/amplify-dynamo-model-resource-generator.d.ts.map +1 -1
  59. package/node_modules/@aws-amplify/graphql-model-transformer/lib/resources/amplify-dynamodb-table/amplify-dynamo-model-resource-generator.js +5 -10
  60. package/node_modules/@aws-amplify/graphql-model-transformer/lib/resources/amplify-dynamodb-table/amplify-dynamo-model-resource-generator.js.map +1 -1
  61. package/node_modules/@aws-amplify/graphql-model-transformer/lib/resources/dynamo-model-resource-generator.js +4 -4
  62. package/node_modules/@aws-amplify/graphql-model-transformer/lib/resources/dynamo-model-resource-generator.js.map +1 -1
  63. package/node_modules/@aws-amplify/graphql-model-transformer/package.json +7 -7
  64. package/node_modules/@aws-amplify/graphql-predictions-transformer/CHANGELOG.md +8 -0
  65. package/node_modules/@aws-amplify/graphql-predictions-transformer/lib/predictionsLambdaFunction.zip +0 -0
  66. package/node_modules/@aws-amplify/graphql-predictions-transformer/package.json +7 -7
  67. package/node_modules/@aws-amplify/graphql-relational-transformer/CHANGELOG.md +8 -0
  68. package/node_modules/@aws-amplify/graphql-relational-transformer/package.json +9 -9
  69. package/node_modules/@aws-amplify/graphql-searchable-transformer/CHANGELOG.md +8 -0
  70. package/node_modules/@aws-amplify/graphql-searchable-transformer/lib/streaming-lambda.zip +0 -0
  71. package/node_modules/@aws-amplify/graphql-searchable-transformer/package.json +8 -8
  72. package/node_modules/@aws-amplify/graphql-sql-transformer/CHANGELOG.md +8 -0
  73. package/node_modules/@aws-amplify/graphql-sql-transformer/package.json +8 -8
  74. package/node_modules/@aws-amplify/graphql-transformer/CHANGELOG.md +10 -0
  75. package/node_modules/@aws-amplify/graphql-transformer/lib/graphql-transformer.d.ts.map +1 -1
  76. package/node_modules/@aws-amplify/graphql-transformer/lib/graphql-transformer.js +2 -0
  77. package/node_modules/@aws-amplify/graphql-transformer/lib/graphql-transformer.js.map +1 -1
  78. package/node_modules/@aws-amplify/graphql-transformer/package.json +20 -19
  79. package/node_modules/@aws-amplify/graphql-transformer/src/graphql-transformer.ts +3 -0
  80. package/node_modules/@aws-amplify/graphql-transformer-core/CHANGELOG.md +11 -0
  81. package/node_modules/@aws-amplify/graphql-transformer-core/lib/transformation/sync-utils.js +4 -4
  82. package/node_modules/@aws-amplify/graphql-transformer-core/lib/transformation/sync-utils.js.map +1 -1
  83. package/node_modules/@aws-amplify/graphql-transformer-core/lib/transformer-context/resolver.d.ts.map +1 -1
  84. package/node_modules/@aws-amplify/graphql-transformer-core/lib/transformer-context/resolver.js +4 -3
  85. package/node_modules/@aws-amplify/graphql-transformer-core/lib/transformer-context/resolver.js.map +1 -1
  86. package/node_modules/@aws-amplify/graphql-transformer-core/package.json +5 -5
  87. package/node_modules/@aws-amplify/graphql-transformer-interfaces/CHANGELOG.md +4 -0
  88. package/node_modules/@aws-amplify/graphql-transformer-interfaces/package.json +3 -3
  89. package/node_modules/@aws-amplify/graphql-transformer-interfaces/tsconfig.tsbuildinfo +1 -1
  90. package/node_modules/@aws-amplify/graphql-validate-transformer/API.md +27 -0
  91. package/node_modules/@aws-amplify/graphql-validate-transformer/CHANGELOG.md +14 -0
  92. package/node_modules/@aws-amplify/graphql-validate-transformer/LICENSE +201 -0
  93. package/node_modules/@aws-amplify/graphql-validate-transformer/jest.config.js +5 -0
  94. package/node_modules/@aws-amplify/graphql-validate-transformer/lib/graphql-validate-transformer.d.ts +11 -0
  95. package/node_modules/@aws-amplify/graphql-validate-transformer/lib/graphql-validate-transformer.d.ts.map +1 -0
  96. package/node_modules/@aws-amplify/graphql-validate-transformer/lib/graphql-validate-transformer.js +96 -0
  97. package/node_modules/@aws-amplify/graphql-validate-transformer/lib/graphql-validate-transformer.js.map +1 -0
  98. package/node_modules/@aws-amplify/graphql-validate-transformer/lib/index.d.ts +2 -0
  99. package/node_modules/@aws-amplify/graphql-validate-transformer/lib/index.d.ts.map +1 -0
  100. package/node_modules/@aws-amplify/graphql-validate-transformer/lib/index.js +6 -0
  101. package/node_modules/@aws-amplify/graphql-validate-transformer/lib/index.js.map +1 -0
  102. package/node_modules/@aws-amplify/graphql-validate-transformer/lib/types.d.ts +25 -0
  103. package/node_modules/@aws-amplify/graphql-validate-transformer/lib/types.d.ts.map +1 -0
  104. package/node_modules/@aws-amplify/graphql-validate-transformer/lib/types.js +7 -0
  105. package/node_modules/@aws-amplify/graphql-validate-transformer/lib/types.js.map +1 -0
  106. package/node_modules/@aws-amplify/graphql-validate-transformer/lib/validators.d.ts +4 -0
  107. package/node_modules/@aws-amplify/graphql-validate-transformer/lib/validators.d.ts.map +1 -0
  108. package/node_modules/@aws-amplify/graphql-validate-transformer/lib/validators.js +83 -0
  109. package/node_modules/@aws-amplify/graphql-validate-transformer/lib/validators.js.map +1 -0
  110. package/node_modules/@aws-amplify/graphql-validate-transformer/lib/vtl-generator.d.ts +4 -0
  111. package/node_modules/@aws-amplify/graphql-validate-transformer/lib/vtl-generator.d.ts.map +1 -0
  112. package/node_modules/@aws-amplify/graphql-validate-transformer/lib/vtl-generator.js +57 -0
  113. package/node_modules/@aws-amplify/graphql-validate-transformer/lib/vtl-generator.js.map +1 -0
  114. package/node_modules/@aws-amplify/graphql-validate-transformer/package.json +46 -0
  115. package/package.json +25 -23
  116. package/src/types.ts +1 -1
@@ -70,7 +70,7 @@ class AmplifyError extends Error {
70
70
  ? new _1.AmplifyUserError(name, options, serializedCause)
71
71
  : new _1.AmplifyFault(name, options, serializedCause);
72
72
  }
73
- catch (error) {
73
+ catch {
74
74
  // cannot deserialize
75
75
  return undefined;
76
76
  }
@@ -264,4 +264,4 @@ class ErrorSerializerDeserializer {
264
264
  return false;
265
265
  };
266
266
  }
267
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW1wbGlmeV9lcnJvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lcnJvcnMvYW1wbGlmeV9lcnJvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx3QkFBbUQ7QUFFbkQ7O0dBRUc7QUFDSCxNQUFzQixZQUF3QyxTQUFRLEtBQUs7SUF1QnZEO0lBQ0E7SUFDQztJQUNEO0lBekJYLGVBQWUsQ0FBVTtJQUNoQixPQUFPLENBQVM7SUFDaEIsVUFBVSxDQUFVO0lBQ3BCLE9BQU8sQ0FBVTtJQUNqQixJQUFJLENBQVU7SUFDZCxJQUFJLENBQVU7SUFFOUI7Ozs7Ozs7Ozs7Ozs7T0FhRztJQUNILFlBQ2tCLElBQU8sRUFDUCxjQUEwQyxFQUN6QyxPQUE0QixFQUM3QixLQUFhO1FBRTdCLDZFQUE2RTtRQUM3RSw2RUFBNkU7UUFDN0UsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBUGxCLFNBQUksR0FBSixJQUFJLENBQUc7UUFDUCxtQkFBYyxHQUFkLGNBQWMsQ0FBNEI7UUFDekMsWUFBTyxHQUFQLE9BQU8sQ0FBcUI7UUFDN0IsVUFBSyxHQUFMLEtBQUssQ0FBUTtRQU03Qiw2SUFBNkk7UUFDN0ksTUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRXBELElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQztRQUMvQixJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUM7UUFDL0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDO1FBQ3JDLElBQUksQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQztRQUN6QixJQUFJLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUM7UUFFekIsSUFBSSxLQUFLLElBQUksWUFBWSxDQUFDLGNB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QUMzQyxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUk7WUFDaEIsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPO1NBQ3ZCLENBQUM7UUFDRixPQUFPLGVBQWUsQ0FBQztJQUN6QixDQUFDLENBQUM7SUFFRixNQUFNLENBQUMsV0FBVyxHQUFHLENBQUMsWUFBaUMsRUFBRSxFQUFFO1FBQ3pELE1BQU0sS0FBSyxHQUFHLElBQUksS0FBSyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM5QyxLQUFLLENBQUMsSUFBSSxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUM7UUFDL0IsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDLENBQUM7SUFFRixNQUFNLENBQUMscUJBQXFCLEdBQUcsQ0FBQyxHQUFZLEVBQThCLEVBQUU7UUFDMUUsSUFDRSxHQUFHO1lBQ0YsR0FBMkIsQ0FBQyxJQUFJO1lBQ2hDLEdBQTJCLENBQUMsT0FBTztZQUVwQyxPQUFPLElBQUksQ0FBQztRQUNkLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQW1wbGlmeUZhdWx0LCBBbXBsaWZ5VXNlckVycm9yIH0gZnJvbSAnLic7XG5cbi8qKlxuICogQmFzZSBjbGFzcyBmb3IgYWxsIEFtcGxpZnkgZXJyb3JzIG9yIGZhdWx0c1xuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQW1wbGlmeUVycm9yPFQgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmc+IGV4dGVuZHMgRXJyb3Ige1xuICBwdWJsaWMgc2VyaWFsaXplZEVycm9yPzogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgbWVzc2FnZTogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgcmVzb2x1dGlvbj86IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IGRldGFpbHM/OiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBsaW5rPzogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgY29kZT86IHN0cmluZztcblxuICAvKipcbiAgICogWW91IHNob3VsZCB1c2UgQW1wbGlmeVVzZXJFcnJvciBvciBBbXBsaWZ5TGlicmFyeUZhdWx0IHRvIHRocm93IGFuIGVycm9yLlxuICAgKiBAcGFyYW0gbmFtZSAtIGEgdXNlciBmcmllbmRseSBuYW1lIGZvciB0aGUgZXhjZXB0aW9uXG4gICAqIEBwYXJhbSBjbGFzc2lmaWNhdGlvbiAtIExpYnJhcnlGYXVsdCBvciBVc2VyRXJyb3JcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBlcnJvciBzdGFjaywgcmVzb2x1dGlvbiBzdGVwcywgZGV0YWlscywgb3IgaGVscCBsaW5rc1xuICAgKiBAcGFyYW0gY2F1c2UgSWYgeW91IGFyZSB0aHJvd2luZyB0aGlzIGV4Y2VwdGlvbiBmcm9tIHdpdGhpbiBhIGNhdGNoIGJsb2NrLFxuICAgKiB5b3UgbXVzdCBwcm92aWRlIHRoZSBleGNlcHRpb24gdGhhdCB3YXMgY2F1Z2h0LlxuICAgKiBAZXhhbXBsZVxuICAgKiB0cnkge1xuICAgKiAgLi4uXG4gICAqIH0gY2F0Y2ggKGVycm9yKXtcbiAgICogICAgdGhyb3cgbmV3IEFtcGxpZnlFcnJvciguLi4sLi4uLGVycm9yKTtcbiAgICogfVxuICAgKi9cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHJlYWRvbmx5IG5hbWU6IFQsXG4gICAgcHVibGljIHJlYWRvbmx5IGNsYXNzaWZpY2F0aW9uOiBBbXBsaWZ5RXJyb3JDbGFzc2lmaWNhdGlvbixcbiAgICBwcml2YXRlIHJlYWRvbmx5IG9wdGlvbnM6IEFtcGxpZnlFcnJvck9wdGlvbnMsXG4gICAgcHVibGljIHJlYWRvbmx5IGNhdXNlPzogRXJyb3JcbiAgKSB7XG4gICAgLy8gSWYgYW4gQW1wbGlmeUVycm9yIHdhcyBhbHJlYWR5IHRocm93biwgd2UgbXVzdCBhbGxvdyBpdCB0byByZWFjaCB0aGUgdXNlci5cbiAgICAvLyBUaGlzIGVuc3VyZXMgdGhhdCByZXNvbHV0aW9uIHN0ZXBzLCBhbmQgdGhlIG9yaWdpbmFsIGVycm9yIGFyZSBidWJibGVkIHVwLlxuICAgIHN1cGVyKG9wdGlvbnMubWVzc2FnZSwgeyBjYXVzZSB9KTtcblxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9NaWNyb3NvZnQvVHlwZVNjcmlwdC13aWtpL2Jsb2IvbWFpbi9CcmVha2luZy1DaGFuZ2VzLm1kI2V4dGVuZGluZy1idWlsdC1pbnMtbGlrZS1lcnJvci1hcnJheS1hbmQtbWFwLW1heS1uby1sb25nZXItd29ya1xuICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBBbXBsaWZ5RXJyb3IucHJvdG90eXBlKTtcblxuICAgIHRoaXMubWVzc2FnZSA9IG9wdGlvbnMubWVzc2FnZTtcbiAgICB0aGlzLmRldGFpbHMgPSBvcHRpb25zLmRldGFpbHM7XG4gICAgdGhpcy5yZXNvbHV0aW9uID0gb3B0aW9ucy5yZXNvbHV0aW9uO1xuICAgIHRoaXMuY29kZSA9IG9wdGlvbnMuY29kZTtcbiAgICB0aGlzLmxpbmsgPSBvcHRpb25zLmxpbms7XG5cbiAgICBpZiAoY2F1c2UgJiYgQW1wbGlmeUVycm9yLmlzQW1wbGlmeUVycm9yKGNhdXNlKSkge1xuICAgICAgY2F1c2Uuc2VyaWFsaXplZEVycm9yID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICB0aGlzLnNlcmlhbGl6ZWRFcnJvciA9IEJ1ZmZlci5mcm9tKFxuICAgICAgSlNPTi5zdHJpbmdpZnkoXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lLFxuICAgICAgICAgIGNsYXNzaWZpY2F0aW9uLFxuICAgICAgICAgIG9wdGlvbnMsXG4gICAgICAgICAgY2F1c2UsXG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yU2VyaWFsaXplclxuICAgICAgKVxuICAgICkudG9TdHJpbmcoJ2Jhc2U2NCcpO1xuICB9XG5cbiAgc3RhdGljIGZyb21TdGRlcnIgPSAoX3N0ZGVycjogc3RyaW5nKTogQW1wbGlmeUVycm9yIHwgdW5kZWZpbmVkID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc2VyaWFsaXplZFN0cmluZyA9IHRyeUZpbmRTZXJpYWxpemVkRXJyb3JKU09OU3RyaW5nKF9zdGRlcnIpO1xuXG4gICAgICBpZiAoIXNlcmlhbGl6ZWRTdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgY29uc3QgeyBuYW1lLCBjbGFzc2lmaWNhdGlvbiwgb3B0aW9ucywgY2F1c2UgfSA9XG4gICAgICAgIEpTT04ucGFyc2Uoc2VyaWFsaXplZFN0cmluZyk7XG5cbiAgICAgIGxldCBzZXJpYWxpemVkQ2F1c2UgPSBjYXVzZTtcbiAgICAgIGlmIChjYXVzZSAmJiBFcnJvclNlcmlhbGl6ZXJEZXNlcmlhbGl6ZXIuaXNTZXJpYWxpemVkRXJyb3JUeXBlKGNhdXNlKSkge1xuICAgICAgICBzZXJpYWxpemVkQ2F1c2UgPSBFcnJvclNlcmlhbGl6ZXJEZXNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoY2F1c2UpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNsYXNzaWZpY2F0aW9uID09PSAnRVJST1InXG4gICAgICAgID8gbmV3IEFtcGxpZnlVc2VyRXJyb3IobmFtZSwgb3B0aW9ucywgc2VyaWFsaXplZENhdXNlKVxuICAgICAgICA6IG5ldyBBbXBsaWZ5RmF1bHQobmFtZSwgb3B0aW9ucywgc2VyaWFsaXplZENhdXNlKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gY2Fubm90IGRlc2VyaWFsaXplXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogVGhpcyBmdW5jdGlvbiBpcyBhIHR5cGUgcHJlZGljYXRlIGZvciBBbXBsaWZ5RXJyb3IuXG4gICAqIFNlZSBodHRwczovL3d3dy50eXBlc2NyaXB0bGFuZy5vcmcvZG9jcy9oYW5kYm9vay8yL25hcnJvd2luZy5odG1sI3VzaW5nLXR5cGUtcHJlZGljYXRlcy5cbiAgICpcbiAgICogQ2hlY2tzIGlmIGVycm9yIGlzIGFuIEFtcGxpZnlFcnJvciBieSBpbnNwZWN0aW5nIGlmIHJlcXVpcmVkIHByb3BlcnRpZXMgYXJlIHNldC5cbiAgICogVGhpcyBpcyByZWNvbW1lbmRlZCBpbnN0ZWFkIG9mIGluc3RhbmNlb2Ygb3BlcmF0b3IuXG4gICAqIFRoZSBpbnN0YW5jZSBvZiBvcGVyYXRvciBkb2VzIG5vdCB3b3JrIGFzIGV4cGVjdGVkIGlmIEFtcGxpZnlFcnJvciBjbGFzcyBpcyBsb2FkZWRcbiAgICogZnJvbSBtdWx0aXBsZSBzb3VyY2VzLCBmb3IgZXhhbXBsZSB3aGVuIHBhY2thZ2UgbWFuYWdlciBkZWNpZGVzIHRvIG5vdCBkZS1kdXBsaWNhdGUgZGVwZW5kZW5jaWVzLlxuICAgKiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2lzc3Vlcy8xNzk0My5cbiAgICovXG4gIHN0YXRpYyBpc0FtcGxpZnlFcnJvciA9IChlcnJvcjogdW5rbm93bik6IGVycm9yIGlzIEFtcGxpZnlFcnJvciA9PiB7XG4gICAgcmV0dXJuIChcbiAgICAgIGVycm9yIGluc3RhbmNlb2YgRXJyb3IgJiZcbiAgICAgICdjbGFzc2lmaWNhdGlvbicgaW4gZXJyb3IgJiZcbiAgICAgIChlcnJvci5jbGFzc2lmaWNhdGlvbiA9PT0gJ0VSUk9SJyB8fCBlcnJvci5jbGFzc2lmaWNhdGlvbiA9PT0gJ0ZBVUxUJykgJiZcbiAgICAgIHR5cGVvZiBlcnJvci5uYW1lID09PSAnc3RyaW5nJyAmJlxuICAgICAgdHlwZW9mIGVycm9yLm1lc3NhZ2UgPT09ICdzdHJpbmcnXG4gICAgKTtcbiAgfTtcblxuICBzdGF0aWMgZnJvbUVycm9yID0gKGVycm9yOiB1bmtub3duKTogQW1wbGlmeUVycm9yID0+IHtcbiAgICBpZiAoQW1wbGlmeUVycm9yLmlzQW1wbGlmeUVycm9yKGVycm9yKSkge1xuICAgICAgcmV0dXJuIGVycm9yO1xuICAgIH1cblxuICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9XG4gICAgICBlcnJvciBpbnN0YW5jZW9mIEVycm9yXG4gICAgICAgID8gYCR7ZXJyb3IubmFtZX06ICR7ZXJyb3IubWVzc2FnZX1gXG4gICAgICAgIDogJ0FuIHVua25vd24gZXJyb3IgaGFwcGVuZWQuIENoZWNrIGRvd25zdHJlYW0gZXJyb3InO1xuXG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgJiYgaXNDcmVkZW50aWFsc0Vycm9yKGVycm9yKSkge1xuICAgICAgcmV0dXJuIG5ldyBBbXBsaWZ5VXNlckVycm9yKFxuICAgICAgICAnQ3JlZGVudGlhbHNFcnJvcicsXG4gICAgICAgIHtcbiAgICAgICAgICBtZXNzYWdlOiBlcnJvck1lc3NhZ2UsXG4gICAgICAgICAgcmVzb2x1dGlvbjpcbiAgICAgICAgICAgICdFbnN1cmUgeW91ciBBV1MgY3JlZGVudGlhbHMgYXJlIGNvcnJlY3RseSBzZXQgYW5kIHJlZnJlc2hlZC4nLFxuICAgICAgICB9LFxuICAgICAgICBlcnJvclxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgJiYgaXNZYXJnc1ZhbGlkYXRpb25FcnJvcihlcnJvcikpIHtcbiAgICAgIHJldHVybiBuZXcgQW1wbGlmeVVzZXJFcnJvcihcbiAgICAgICAgJ0ludmFsaWRDb21tYW5kSW5wdXRFcnJvcicsXG4gICAgICAgIHtcbiAgICAgICAgICBtZXNzYWdlOiBlcnJvck1lc3NhZ2UsXG4gICAgICAgICAgcmVzb2x1dGlvbjogJ1BsZWFzZSBzZWUgdGhlIHVuZGVybHlpbmcgZXJyb3IgbWVzc2FnZSBmb3IgcmVzb2x1dGlvbi4nLFxuICAgICAgICB9LFxuICAgICAgICBlcnJvclxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgJiYgaXNFTm90Rm91bmRFcnJvcihlcnJvcikpIHtcbiAgICAgIHJldHVybiBuZXcgQW1wbGlmeVVzZXJFcnJvcihcbiAgICAgICAgJ0RvbWFpbk5vdEZvdW5kRXJyb3InLFxuICAgICAgICB7XG4gICAgICAgICAgbWVzc2FnZTogJ1VuYWJsZSB0byBlc3RhYmxpc2ggYSBjb25uZWN0aW9uIHRvIGEgZG9tYWluJyxcbiAgICAgICAgICByZXNvbHV0aW9uOlxuICAgICAgICAgICAgJ0Vuc3VyZSBkb21haW4gbmFtZSBpcyBjb3JyZWN0IGFuZCBuZXR3b3JrIGNvbm5lY3Rpb24gaXMgc3RhYmxlLicsXG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yXG4gICAgICApO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBjYXRjaGVzIFN5bnRheEVycm9ycyB0aGF0IHdlcmUgc29tZWhvdyBub3QgaW5zdGFuY2VzIG9mIEFtcGxpZnlFcnJvclxuICAgICAqIHRoaXMgY2FuIGJlIHJlbW92ZWQgb25jZSB3ZSBjYW4gcHJvcGVybHkgaWRlbnRpZnkgd2hlcmUgQW1wbGlmeUVycm9yIGlzIGJlaW5nIHN0cmlwcGVkIG9mZlxuICAgICAqL1xuICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yICYmIGlzU3ludGF4RXJyb3IoZXJyb3IpKSB7XG4gICAgICByZXR1cm4gbmV3IEFtcGxpZnlVc2VyRXJyb3IoXG4gICAgICAgICdTeW50YXhFcnJvcicsXG4gICAgICAgIHtcbiAgICAgICAgICBtZXNzYWdlOiBlcnJvci5tZXNzYWdlLFxuICAgICAgICAgIHJlc29sdXRpb246XG4gICAgICAgICAgICAnQ2hlY2sgeW91ciBiYWNrZW5kIGRlZmluaXRpb24gaW4gdGhlIGBhbXBsaWZ5YCBmb2xkZXIgZm9yIHN5bnRheCBhbmQgdHlwZSBlcnJvcnMuJyxcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3JcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yICYmIGlzSW5zdWZmaWNpZW50RGlza1NwYWNlRXJyb3IoZXJyb3IpKSB7XG4gICAgICByZXR1cm4gbmV3IEFtcGxpZnlVc2VyRXJyb3IoXG4gICAgICAgICdJbnN1ZmZpY2llbnREaXNrU3BhY2VFcnJvcicsXG4gICAgICAgIHtcbiAgICAgICAgICBtZXNzYWdlOiBlcnJvci5tZXNzYWdlLFxuICAgICAgICAgIHJlc29sdXRpb246XG4gICAgICAgICAgICAnVGhlcmUgYXBwZWFycyB0byBiZSBpbnN1ZmZpY2llbnQgc3BhY2Ugb24geW91ciBzeXN0ZW0gdG8gZmluaXNoLiBDbGVhciB1cCBzb21lIGRpc2sgc3BhY2UgYW5kIHRyeSBhZ2Fpbi4nLFxuICAgICAgICB9LFxuICAgICAgICBlcnJvclxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgJiYgaXNPdXRPZk1lbW9yeUVycm9yKGVycm9yKSkge1xuICAgICAgcmV0dXJuIG5ldyBBbXBsaWZ5VXNlckVycm9yKFxuICAgICAgICAnSW5zdWZmaWNpZW50TWVtb3J5U3BhY2VFcnJvcicsXG4gICAgICAgIHtcbiAgICAgICAgICBtZXNzYWdlOiBlcnJvci5tZXNzYWdlLFxuICAgICAgICAgIHJlc29sdXRpb246XG4gICAgICAgICAgICAnVGhlcmUgYXBwZWFycyB0byBiZSBpbnN1ZmZpY2llbnQgbWVtb3J5IG9uIHlvdXIgc3lzdGVtIHRvIGZpbmlzaC4gQ2xvc2Ugb3RoZXIgYXBwbGljYXRpb25zIG9yIHJlc3RhcnQgeW91ciBzeXN0ZW0gYW5kIHRyeSBhZ2Fpbi4nLFxuICAgICAgICB9LFxuICAgICAgICBlcnJvclxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBBbXBsaWZ5RmF1bHQoXG4gICAgICAnVW5rbm93bkZhdWx0JyxcbiAgICAgIHtcbiAgICAgICAgbWVzc2FnZTogZXJyb3JNZXNzYWdlLFxuICAgICAgfSxcbiAgICAgIGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvciA6IG5ldyBFcnJvcihTdHJpbmcoZXJyb3IpKVxuICAgICk7XG4gIH07XG59XG5cbmNvbnN0IHRyeUZpbmRTZXJpYWxpemVkRXJyb3JKU09OU3RyaW5nID0gKFxuICBfc3RkZXJyOiBzdHJpbmdcbik6IHN0cmluZyB8IHVuZGVmaW5lZCA9PiB7XG4gIGxldCBlcnJvckpTT05TdHJpbmcgPSB0cnlGaW5kU2VyaWFsaXplZEVycm9ySlNPTlN0cmluZ1YyKF9zdGRlcnIpO1xuICBpZiAoIWVycm9ySlNPTlN0cmluZykge1xuICAgIGVycm9ySlNPTlN0cmluZyA9IHRyeUZpbmRTZXJpYWxpemVkRXJyb3JKU09OU3RyaW5nVjEoX3N0ZGVycik7XG4gIH1cbiAgcmV0dXJuIGVycm9ySlNPTlN0cmluZztcbn07XG5cbi8qKlxuICogVHJpZXMgdG8gZmluZCBzZXJpYWxpemVkIHN0cmluZyBhc3N1bWluZyB0aGF0IGl0IGlzIGluIGEgZm9ybSBvZiBzZXJpYWxpemVkIEpTT04gZW5jb2RlZCB3aXRoIGJhc2U2NC5cbiAqL1xuY29uc3QgdHJ5RmluZFNlcmlhbGl6ZWRFcnJvckpTT05TdHJpbmdWMiA9IChcbiAgX3N0ZGVycjogc3RyaW5nXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQgPT4ge1xuICAvKipcbiAgICogYFtcIiddP3NlcmlhbGl6ZWRFcnJvcltcIiddPzpbIF0/YCBjYXB0dXJlcyB0aGUgc3RhcnQgb2YgdGhlIHNlcmlhbGl6ZWQgZXJyb3IuIFRoZSBxdW90ZXMgZGVwZW5kIG9uIHdoaWNoIE9TIGlzIGJlaW5nIHVzZWRcbiAgICogYCg/OmAoW2EtekEtWjAtOSsvPV0rPylgfCcoW2EtekEtWjAtOSsvPV0rPyknfFwiKFthLXpBLVowLTkrLz1dKz8pXCIpYCBjYXB0dXJlcyB0aGUgcmVzdCBvZiB0aGUgc2VyaWFsaXplZCBzdHJpbmcgZW5jbG9zZWQgaW4gZWl0aGVyIHNpbmdsZSBxdW90ZSxcbiAgICogZG91YmxlIHF1b3RlcyBvciBiYWNrLXRpY2tzLlxuICAgKi9cbiAgY29uc3QgZXh0cmFjdGlvblJlZ2V4ID1cbiAgICAvW1wiJ10/c2VyaWFsaXplZEVycm9yW1wiJ10/OlsgXT8oPzpgKFthLXpBLVowLTkrLz1dKz8pYHwnKFthLXpBLVowLTkrLz1dKz8pJ3xcIihbYS16QS1aMC05Ky89XSs/KVwiKS87XG4gIGNvbnN0IHNlcmlhbGl6ZWQgPSBfc3RkZXJyLm1hdGNoKGV4dHJhY3Rpb25SZWdleCk7XG4gIGlmIChzZXJpYWxpemVkICYmIHNlcmlhbGl6ZWQubGVuZ3RoID09PSA0KSB7XG4gICAgLy8gNCBiZWNhdXNlIDEgbWF0Y2ggYW5kIDMgY2FwdHVyaW5nIGdyb3Vwc1xuICAgIGNvbnN0IGJhc2U2NFNlcmlhbGl6ZWRTdHJpbmcgPSBzZXJpYWxpemVkXG4gICAgICAuc2xpY2UoMSlcbiAgICAgIC5maW5kKChpdGVtKSA9PiBpdGVtICYmIGl0ZW0ubGVuZ3RoID4gMCk7XG4gICAgaWYgKGJhc2U2NFNlcmlhbGl6ZWRTdHJpbmcpIHtcbiAgICAgIHJldHVybiBCdWZmZXIuZnJvbShiYXNlNjRTZXJpYWxpemVkU3RyaW5nLCAnYmFzZTY0JykudG9TdHJpbmcoJ3V0Zi04Jyk7XG4gICAgfVxuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59O1xuXG4vKipcbiAqIFRyaWVzIHRvIGZpbmQgc2VyaWFsaXplZCBzdHJpbmcgYXNzdW1pbmcgdGhhdCBpdCBpcyBpbiBhIGZvcm0gb2Ygc2VyaWFsaXplZCBKU09OLlxuICogQGRlcHJlY2F0ZWQgVGhpcyBpcyBvbGQgZm9ybWF0IGxlZnQgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGluIGNhc2UgdGhhdCBzeW50aC10aW1lIGNvbXBvbmVudHMgYXJlIHVzaW5nIG9sZGVyIHZlcnNpb24gb2YgcGxhdGZvcm0tY29yZS5cbiAqL1xuY29uc3QgdHJ5RmluZFNlcmlhbGl6ZWRFcnJvckpTT05TdHJpbmdWMSA9IChcbiAgX3N0ZGVycjogc3RyaW5nXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQgPT4ge1xuICAvKipcbiAgICogYFtcIiddP3NlcmlhbGl6ZWRFcnJvcltcIiddPzpbIF0/YCBjYXB0dXJlcyB0aGUgc3RhcnQgb2YgdGhlIHNlcmlhbGl6ZWQgZXJyb3IuIFRoZSBxdW90ZXMgZGVwZW5kIG9uIHdoaWNoIE9TIGlzIGJlaW5nIHVzZWRcbiAgICogYCg/OmAoLis/KWB8JyguKz8pJ3xcIigoPzpcXFxcXCJ8W15cIl0pKj8pXCIpYCBjYXB0dXJlcyB0aGUgcmVzdCBvZiB0aGUgc2VyaWFsaXplZCBzdHJpbmcgZW5jbG9zZWQgaW4gZWl0aGVyIHNpbmdsZSBxdW90ZSxcbiAgICogZG91YmxlIHF1b3RlcyBvciBiYWNrLXRpY2tzLlxuICAgKi9cbiAgY29uc3QgZXh0cmFjdGlvblJlZ2V4ID1cbiAgICAvW1wiJ10/c2VyaWFsaXplZEVycm9yW1wiJ10/OlsgXT8oPzpgKC4rPylgfCcoLis/KSd8XCIoKD86XFxcXFwifFteXCJdKSo/KVwiKS87XG4gIGNvbnN0IHNlcmlhbGl6ZWQgPSBfc3RkZXJyLm1hdGNoKGV4dHJhY3Rpb25SZWdleCk7XG4gIGlmIChzZXJpYWxpemVkICYmIHNlcmlhbGl6ZWQubGVuZ3RoID09PSA0KSB7XG4gICAgLy8gNCBiZWNhdXNlIDEgbWF0Y2ggYW5kIDMgY2FwdHVyaW5nIGdyb3Vwc1xuICAgIHJldHVybiBzZXJpYWxpemVkXG4gICAgICAuc2xpY2UoMSlcbiAgICAgIC5maW5kKChpdGVtKSA9PiBpdGVtICYmIGl0ZW0ubGVuZ3RoID4gMClcbiAgICAgID8ucmVwbGFjZUFsbCgnXFxcXFwiJywgJ1wiJylcbiAgICAgIC5yZXBsYWNlQWxsKFwiXFxcXCdcIiwgXCInXCIpO1xuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59O1xuXG5jb25zdCBpc0NyZWRlbnRpYWxzRXJyb3IgPSAoZXJyPzogRXJyb3IpOiBib29sZWFuID0+IHtcbiAgcmV0dXJuIChcbiAgICAhIWVyciAmJlxuICAgIFtcbiAgICAgICdFeHBpcmVkVG9rZW4nLFxuICAgICAgJ0V4cGlyZWRUb2tlbkV4Y2VwdGlvbicsXG4gICAgICAnQ3JlZGVudGlhbHNQcm92aWRlckVycm9yJyxcbiAgICAgICdJbnZhbGlkQ2xpZW50VG9rZW5JZCcsXG4gICAgICAnQ3JlZGVudGlhbHNFcnJvcicsXG4gICAgXS5pbmNsdWRlcyhlcnIubmFtZSlcbiAgKTtcbn07XG5cbi8vIFRoZXNlIHZhbGlkYXRpb24gbWVzc2FnZXMgYXJlIHRha2VuIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL3lhcmdzL3lhcmdzL2Jsb2IvMGM5NWY5Yzc5ZTE4MTBjZjljODk2NGZiZjdkMTM5MDA5NDEyZjdlNy9saWIvdmFsaWRhdGlvbi50c1xuY29uc3QgaXNZYXJnc1ZhbGlkYXRpb25FcnJvciA9IChlcnI/OiBFcnJvcik6IGJvb2xlYW4gPT4ge1xuICByZXR1cm4gKFxuICAgICEhZXJyICYmXG4gICAgKFtcbiAgICAgICdVbmtub3duIGNvbW1hbmQnLFxuICAgICAgJ1Vua25vd24gYXJndW1lbnQnLFxuICAgICAgJ0RpZCB5b3UgbWVhbicsXG4gICAgICAnTm90IGVub3VnaCBub24tb3B0aW9uIGFyZ3VtZW50cycsXG4gICAgICAnVG9vIG1hbnkgbm9uLW9wdGlvbiBhcmd1bWVudHMnLFxuICAgICAgJ01pc3NpbmcgcmVxdWlyZWQgYXJndW1lbnQnLFxuICAgICAgJ0ludmFsaWQgdmFsdWVzOicsXG4gICAgICAnTWlzc2luZyBkZXBlbmRlbnQgYXJndW1lbnRzJyxcbiAgICAgICdJbXBsaWNhdGlvbnMgZmFpbGVkJyxcbiAgICBdLnNvbWUoKG1lc3NhZ2UpID0+IGVyci5tZXNzYWdlLnN0YXJ0c1dpdGgobWVzc2FnZSkpIHx8XG4gICAgICBlcnIubWVzc2FnZS5lbmRzV2l0aCgnYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZScpKVxuICApO1xufTtcblxuY29uc3QgaXNFTm90Rm91bmRFcnJvciA9IChlcnI/OiBFcnJvcik6IGJvb2xlYW4gPT4ge1xuICByZXR1cm4gISFlcnIgJiYgZXJyLm1lc3NhZ2UuaW5jbHVkZXMoJ2dldGFkZHJpbmZvIEVOT1RGT1VORCcpO1xufTtcblxuY29uc3QgaXNTeW50YXhFcnJvciA9IChlcnI/OiBFcnJvcik6IGJvb2xlYW4gPT4ge1xuICByZXR1cm4gISFlcnIgJiYgZXJyLm5hbWUgPT09ICdTeW50YXhFcnJvcic7XG59O1xuXG5jb25zdCBpc0luc3VmZmljaWVudERpc2tTcGFjZUVycm9yID0gKGVycj86IEVycm9yKTogYm9vbGVhbiA9PiB7XG4gIHJldHVybiAoXG4gICAgISFlcnIgJiZcbiAgICBbJ0VOT1NQQzogbm8gc3BhY2UgbGVmdCBvbiBkZXZpY2UnLCAnY29kZSBFTk9TUEMnXS5zb21lKChtZXNzYWdlKSA9PlxuICAgICAgZXJyLm1lc3NhZ2UuaW5jbHVkZXMobWVzc2FnZSlcbiAgICApXG4gICk7XG59O1xuXG5jb25zdCBpc091dE9mTWVtb3J5RXJyb3IgPSAoZXJyPzogRXJyb3IpOiBib29sZWFuID0+IHtcbiAgcmV0dXJuIChcbiAgICAhIWVyciAmJlxuICAgIChlcnIubWVzc2FnZS5pbmNsdWRlcygncHJvY2VzcyBvdXQgb2YgbWVtb3J5JykgfHxcbiAgICAgIGVyci5tZXNzYWdlLmluY2x1ZGVzKCdjb25uZWN0IEVOT01FTScpKVxuICApO1xufTtcblxuLyoqXG4gKiBBbXBsaWZ5IGV4Y2VwdGlvbiBjbGFzc2lmaWNhdGlvbnNcbiAqL1xuZXhwb3J0IHR5cGUgQW1wbGlmeUVycm9yQ2xhc3NpZmljYXRpb24gPSAnRkFVTFQnIHwgJ0VSUk9SJztcblxuLyoqXG4gKiBBbXBsaWZ5IEVycm9yIG9wdGlvbnMgb2JqZWN0XG4gKi9cbmV4cG9ydCB0eXBlIEFtcGxpZnlFcnJvck9wdGlvbnMgPSB7XG4gIG1lc3NhZ2U6IHN0cmluZztcbiAgZGV0YWlscz86IHN0cmluZztcbiAgcmVzb2x1dGlvbj86IHN0cmluZztcbiAgbGluaz86IHN0cmluZztcblxuICAvLyBDbG91ZEZvcm1hdGlvbiBvciBOb2RlSlMgZXJyb3IgY29kZXNcbiAgY29kZT86IHN0cmluZztcbn07XG5cbi8qKlxuICogU2FtZSBhcyBBbXBsaWZ5RXJyb3JPcHRpb25zIGV4Y2VwdCByZXNvbHV0aW9uIGlzIHJlcXVpcmVkXG4gKi9cbmV4cG9ydCB0eXBlIEFtcGxpZnlVc2VyRXJyb3JPcHRpb25zID0gT21pdDxcbiAgQW1wbGlmeUVycm9yT3B0aW9ucyxcbiAgJ3Jlc29sdXRpb24nXG4+ICYgeyByZXNvbHV0aW9uOiBzdHJpbmcgfTtcblxuY29uc3QgZXJyb3JTZXJpYWxpemVyID0gKF86IHVua25vd24sIHZhbHVlOiB1bmtub3duKSA9PiB7XG4gIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgcmV0dXJuIEVycm9yU2VyaWFsaXplckRlc2VyaWFsaXplci5zZXJpYWxpemUodmFsdWUpO1xuICB9XG4gIHJldHVybiB2YWx1ZTtcbn07XG5jbGFzcyBFcnJvclNlcmlhbGl6ZXJEZXNlcmlhbGl6ZXIge1xuICBzdGF0aWMgc2VyaWFsaXplID0gKGVycm9yOiBFcnJvcikgPT4ge1xuICAgIGNvbnN0IHNlcmlhbGl6ZWRFcnJvcjogU2VyaWFsaXplZEVycm9yVHlwZSA9IHtcbiAgICAgIG5hbWU6IGVycm9yLm5hbWUsXG4gICAgICBtZXNzYWdlOiBlcnJvci5tZXNzYWdlLFxuICAgIH07XG4gICAgcmV0dXJuIHNlcmlhbGl6ZWRFcnJvcjtcbiAgfTtcblxuICBzdGF0aWMgZGVzZXJpYWxpemUgPSAoZGVzZXJpYWxpemVkOiBTZXJpYWxpemVkRXJyb3JUeXBlKSA9PiB7XG4gICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoZGVzZXJpYWxpemVkLm1lc3NhZ2UpO1xuICAgIGVycm9yLm5hbWUgPSBkZXNlcmlhbGl6ZWQubmFtZTtcbiAgICByZXR1cm4gZXJyb3I7XG4gIH07XG5cbiAgc3RhdGljIGlzU2VyaWFsaXplZEVycm9yVHlwZSA9IChvYmo6IHVua25vd24pOiBvYmogaXMgU2VyaWFsaXplZEVycm9yVHlwZSA9PiB7XG4gICAgaWYgKFxuICAgICAgb2JqICYmXG4gICAgICAob2JqIGFzIFNlcmlhbGl6ZWRFcnJvclR5cGUpLm5hbWUgJiZcbiAgICAgIChvYmogYXMgU2VyaWFsaXplZEVycm9yVHlwZSkubWVzc2FnZVxuICAgIClcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfTtcbn1cbnR5cGUgU2VyaWFsaXplZEVycm9yVHlwZSA9IHtcbiAgbmFtZTogc3RyaW5nO1xuICBtZXNzYWdlOiBzdHJpbmc7XG59O1xuIl19
267
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW1wbGlmeV9lcnJvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lcnJvcnMvYW1wbGlmeV9lcnJvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx3QkFBbUQ7QUFFbkQ7O0dBRUc7QUFDSCxNQUFzQixZQUF3QyxTQUFRLEtBQUs7SUF1QnZEO0lBQ0E7SUFDQztJQUNEO0lBekJYLGVBQWUsQ0FBVTtJQUNoQixPQUFPLENBQVM7SUFDaEIsVUFBVSxDQUFVO0lBQ3BCLE9BQU8sQ0FBVTtJQUNqQixJQUFJLENBQVU7SUFDZCxJQUFJLENBQVU7SUFFOUI7Ozs7Ozs7Ozs7Ozs7T0FhRztJQUNILFlBQ2tCLElBQU8sRUFDUCxjQUEwQyxFQUN6QyxPQUE0QixFQUM3QixLQUFhO1FBRTdCLDZFQUE2RTtRQUM3RSw2RUFBNkU7UUFDN0UsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBUGxCLFNBQUksR0FBSixJQUFJLENBQUc7UUFDUCxtQkFBYyxHQUFkLGNBQWMsQ0FBNEI7UUFDekMsWUFBTyxHQUFQLE9BQU8sQ0FBcUI7UUFDN0IsVUFBSyxHQUFMLEtBQUssQ0FBUTtRQU03Qiw2SUFBNkk7UUFDN0ksTUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRXBELElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQztRQUMvQixJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUM7UUFDL0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDO1FBQ3JDLElBQUksQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQztRQUN6QixJQUFJLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUM7UUFFekIsSUFBSSxLQUFLLElBQUksWUFBWSxDQUFDLGNB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RUFBRSxLQUFLLENBQUMsSUFBSTtZQUNoQixPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU87U0FDdkIsQ0FBQztRQUNGLE9BQU8sZUFBZSxDQUFDO0lBQ3pCLENBQUMsQ0FBQztJQUVGLE1BQU0sQ0FBQyxXQUFXLEdBQUcsQ0FBQyxZQUFpQyxFQUFFLEVBQUU7UUFDekQsTUFBTSxLQUFLLEdBQUcsSUFBSSxLQUFLLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzlDLEtBQUssQ0FBQyxJQUFJLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQztRQUMvQixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUMsQ0FBQztJQUVGLE1BQU0sQ0FBQyxxQkFBcUIsR0FBRyxDQUFDLEdBQVksRUFBOEIsRUFBRTtRQUMxRSxJQUNFLEdBQUc7WUFDRixHQUEyQixDQUFDLElBQUk7WUFDaEMsR0FBMkIsQ0FBQyxPQUFPO1lBRXBDLE9BQU8sSUFBSSxDQUFDO1FBQ2QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBbXBsaWZ5RmF1bHQsIEFtcGxpZnlVc2VyRXJyb3IgfSBmcm9tICcuJztcblxuLyoqXG4gKiBCYXNlIGNsYXNzIGZvciBhbGwgQW1wbGlmeSBlcnJvcnMgb3IgZmF1bHRzXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBbXBsaWZ5RXJyb3I8VCBleHRlbmRzIHN0cmluZyA9IHN0cmluZz4gZXh0ZW5kcyBFcnJvciB7XG4gIHB1YmxpYyBzZXJpYWxpemVkRXJyb3I/OiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBtZXNzYWdlOiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSByZXNvbHV0aW9uPzogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgZGV0YWlscz86IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IGxpbms/OiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBjb2RlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBZb3Ugc2hvdWxkIHVzZSBBbXBsaWZ5VXNlckVycm9yIG9yIEFtcGxpZnlMaWJyYXJ5RmF1bHQgdG8gdGhyb3cgYW4gZXJyb3IuXG4gICAqIEBwYXJhbSBuYW1lIC0gYSB1c2VyIGZyaWVuZGx5IG5hbWUgZm9yIHRoZSBleGNlcHRpb25cbiAgICogQHBhcmFtIGNsYXNzaWZpY2F0aW9uIC0gTGlicmFyeUZhdWx0IG9yIFVzZXJFcnJvclxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIGVycm9yIHN0YWNrLCByZXNvbHV0aW9uIHN0ZXBzLCBkZXRhaWxzLCBvciBoZWxwIGxpbmtzXG4gICAqIEBwYXJhbSBjYXVzZSBJZiB5b3UgYXJlIHRocm93aW5nIHRoaXMgZXhjZXB0aW9uIGZyb20gd2l0aGluIGEgY2F0Y2ggYmxvY2ssXG4gICAqIHlvdSBtdXN0IHByb3ZpZGUgdGhlIGV4Y2VwdGlvbiB0aGF0IHdhcyBjYXVnaHQuXG4gICAqIEBleGFtcGxlXG4gICAqIHRyeSB7XG4gICAqICAuLi5cbiAgICogfSBjYXRjaCAoZXJyb3Ipe1xuICAgKiAgICB0aHJvdyBuZXcgQW1wbGlmeUVycm9yKC4uLiwuLi4sZXJyb3IpO1xuICAgKiB9XG4gICAqL1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgcmVhZG9ubHkgbmFtZTogVCxcbiAgICBwdWJsaWMgcmVhZG9ubHkgY2xhc3NpZmljYXRpb246IEFtcGxpZnlFcnJvckNsYXNzaWZpY2F0aW9uLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgb3B0aW9uczogQW1wbGlmeUVycm9yT3B0aW9ucyxcbiAgICBwdWJsaWMgcmVhZG9ubHkgY2F1c2U/OiBFcnJvclxuICApIHtcbiAgICAvLyBJZiBhbiBBbXBsaWZ5RXJyb3Igd2FzIGFscmVhZHkgdGhyb3duLCB3ZSBtdXN0IGFsbG93IGl0IHRvIHJlYWNoIHRoZSB1c2VyLlxuICAgIC8vIFRoaXMgZW5zdXJlcyB0aGF0IHJlc29sdXRpb24gc3RlcHMsIGFuZCB0aGUgb3JpZ2luYWwgZXJyb3IgYXJlIGJ1YmJsZWQgdXAuXG4gICAgc3VwZXIob3B0aW9ucy5tZXNzYWdlLCB7IGNhdXNlIH0pO1xuXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL01pY3Jvc29mdC9UeXBlU2NyaXB0LXdpa2kvYmxvYi9tYWluL0JyZWFraW5nLUNoYW5nZXMubWQjZXh0ZW5kaW5nLWJ1aWx0LWlucy1saWtlLWVycm9yLWFycmF5LWFuZC1tYXAtbWF5LW5vLWxvbmdlci13b3JrXG4gICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsIEFtcGxpZnlFcnJvci5wcm90b3R5cGUpO1xuXG4gICAgdGhpcy5tZXNzYWdlID0gb3B0aW9ucy5tZXNzYWdlO1xuICAgIHRoaXMuZGV0YWlscyA9IG9wdGlvbnMuZGV0YWlscztcbiAgICB0aGlzLnJlc29sdXRpb24gPSBvcHRpb25zLnJlc29sdXRpb247XG4gICAgdGhpcy5jb2RlID0gb3B0aW9ucy5jb2RlO1xuICAgIHRoaXMubGluayA9IG9wdGlvbnMubGluaztcblxuICAgIGlmIChjYXVzZSAmJiBBbXBsaWZ5RXJyb3IuaXNBbXBsaWZ5RXJyb3IoY2F1c2UpKSB7XG4gICAgICBjYXVzZS5zZXJpYWxpemVkRXJyb3IgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHRoaXMuc2VyaWFsaXplZEVycm9yID0gQnVmZmVyLmZyb20oXG4gICAgICBKU09OLnN0cmluZ2lmeShcbiAgICAgICAge1xuICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgY2xhc3NpZmljYXRpb24sXG4gICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgICBjYXVzZSxcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3JTZXJpYWxpemVyXG4gICAgICApXG4gICAgKS50b1N0cmluZygnYmFzZTY0Jyk7XG4gIH1cblxuICBzdGF0aWMgZnJvbVN0ZGVyciA9IChfc3RkZXJyOiBzdHJpbmcpOiBBbXBsaWZ5RXJyb3IgfCB1bmRlZmluZWQgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzZXJpYWxpemVkU3RyaW5nID0gdHJ5RmluZFNlcmlhbGl6ZWRFcnJvckpTT05TdHJpbmcoX3N0ZGVycik7XG5cbiAgICAgIGlmICghc2VyaWFsaXplZFN0cmluZykge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB7IG5hbWUsIGNsYXNzaWZpY2F0aW9uLCBvcHRpb25zLCBjYXVzZSB9ID1cbiAgICAgICAgSlNPTi5wYXJzZShzZXJpYWxpemVkU3RyaW5nKTtcblxuICAgICAgbGV0IHNlcmlhbGl6ZWRDYXVzZSA9IGNhdXNlO1xuICAgICAgaWYgKGNhdXNlICYmIEVycm9yU2VyaWFsaXplckRlc2VyaWFsaXplci5pc1NlcmlhbGl6ZWRFcnJvclR5cGUoY2F1c2UpKSB7XG4gICAgICAgIHNlcmlhbGl6ZWRDYXVzZSA9IEVycm9yU2VyaWFsaXplckRlc2VyaWFsaXplci5kZXNlcmlhbGl6ZShjYXVzZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gY2xhc3NpZmljYXRpb24gPT09ICdFUlJPUidcbiAgICAgICAgPyBuZXcgQW1wbGlmeVVzZXJFcnJvcihuYW1lLCBvcHRpb25zLCBzZXJpYWxpemVkQ2F1c2UpXG4gICAgICAgIDogbmV3IEFtcGxpZnlGYXVsdChuYW1lLCBvcHRpb25zLCBzZXJpYWxpemVkQ2F1c2UpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gY2Fubm90IGRlc2VyaWFsaXplXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogVGhpcyBmdW5jdGlvbiBpcyBhIHR5cGUgcHJlZGljYXRlIGZvciBBbXBsaWZ5RXJyb3IuXG4gICAqIFNlZSBodHRwczovL3d3dy50eXBlc2NyaXB0bGFuZy5vcmcvZG9jcy9oYW5kYm9vay8yL25hcnJvd2luZy5odG1sI3VzaW5nLXR5cGUtcHJlZGljYXRlcy5cbiAgICpcbiAgICogQ2hlY2tzIGlmIGVycm9yIGlzIGFuIEFtcGxpZnlFcnJvciBieSBpbnNwZWN0aW5nIGlmIHJlcXVpcmVkIHByb3BlcnRpZXMgYXJlIHNldC5cbiAgICogVGhpcyBpcyByZWNvbW1lbmRlZCBpbnN0ZWFkIG9mIGluc3RhbmNlb2Ygb3BlcmF0b3IuXG4gICAqIFRoZSBpbnN0YW5jZSBvZiBvcGVyYXRvciBkb2VzIG5vdCB3b3JrIGFzIGV4cGVjdGVkIGlmIEFtcGxpZnlFcnJvciBjbGFzcyBpcyBsb2FkZWRcbiAgICogZnJvbSBtdWx0aXBsZSBzb3VyY2VzLCBmb3IgZXhhbXBsZSB3aGVuIHBhY2thZ2UgbWFuYWdlciBkZWNpZGVzIHRvIG5vdCBkZS1kdXBsaWNhdGUgZGVwZW5kZW5jaWVzLlxuICAgKiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2lzc3Vlcy8xNzk0My5cbiAgICovXG4gIHN0YXRpYyBpc0FtcGxpZnlFcnJvciA9IChlcnJvcjogdW5rbm93bik6IGVycm9yIGlzIEFtcGxpZnlFcnJvciA9PiB7XG4gICAgcmV0dXJuIChcbiAgICAgIGVycm9yIGluc3RhbmNlb2YgRXJyb3IgJiZcbiAgICAgICdjbGFzc2lmaWNhdGlvbicgaW4gZXJyb3IgJiZcbiAgICAgIChlcnJvci5jbGFzc2lmaWNhdGlvbiA9PT0gJ0VSUk9SJyB8fCBlcnJvci5jbGFzc2lmaWNhdGlvbiA9PT0gJ0ZBVUxUJykgJiZcbiAgICAgIHR5cGVvZiBlcnJvci5uYW1lID09PSAnc3RyaW5nJyAmJlxuICAgICAgdHlwZW9mIGVycm9yLm1lc3NhZ2UgPT09ICdzdHJpbmcnXG4gICAgKTtcbiAgfTtcblxuICBzdGF0aWMgZnJvbUVycm9yID0gKGVycm9yOiB1bmtub3duKTogQW1wbGlmeUVycm9yID0+IHtcbiAgICBpZiAoQW1wbGlmeUVycm9yLmlzQW1wbGlmeUVycm9yKGVycm9yKSkge1xuICAgICAgcmV0dXJuIGVycm9yO1xuICAgIH1cblxuICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9XG4gICAgICBlcnJvciBpbnN0YW5jZW9mIEVycm9yXG4gICAgICAgID8gYCR7ZXJyb3IubmFtZX06ICR7ZXJyb3IubWVzc2FnZX1gXG4gICAgICAgIDogJ0FuIHVua25vd24gZXJyb3IgaGFwcGVuZWQuIENoZWNrIGRvd25zdHJlYW0gZXJyb3InO1xuXG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgJiYgaXNDcmVkZW50aWFsc0Vycm9yKGVycm9yKSkge1xuICAgICAgcmV0dXJuIG5ldyBBbXBsaWZ5VXNlckVycm9yKFxuICAgICAgICAnQ3JlZGVudGlhbHNFcnJvcicsXG4gICAgICAgIHtcbiAgICAgICAgICBtZXNzYWdlOiBlcnJvck1lc3NhZ2UsXG4gICAgICAgICAgcmVzb2x1dGlvbjpcbiAgICAgICAgICAgICdFbnN1cmUgeW91ciBBV1MgY3JlZGVudGlhbHMgYXJlIGNvcnJlY3RseSBzZXQgYW5kIHJlZnJlc2hlZC4nLFxuICAgICAgICB9LFxuICAgICAgICBlcnJvclxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgJiYgaXNZYXJnc1ZhbGlkYXRpb25FcnJvcihlcnJvcikpIHtcbiAgICAgIHJldHVybiBuZXcgQW1wbGlmeVVzZXJFcnJvcihcbiAgICAgICAgJ0ludmFsaWRDb21tYW5kSW5wdXRFcnJvcicsXG4gICAgICAgIHtcbiAgICAgICAgICBtZXNzYWdlOiBlcnJvck1lc3NhZ2UsXG4gICAgICAgICAgcmVzb2x1dGlvbjogJ1BsZWFzZSBzZWUgdGhlIHVuZGVybHlpbmcgZXJyb3IgbWVzc2FnZSBmb3IgcmVzb2x1dGlvbi4nLFxuICAgICAgICB9LFxuICAgICAgICBlcnJvclxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgJiYgaXNFTm90Rm91bmRFcnJvcihlcnJvcikpIHtcbiAgICAgIHJldHVybiBuZXcgQW1wbGlmeVVzZXJFcnJvcihcbiAgICAgICAgJ0RvbWFpbk5vdEZvdW5kRXJyb3InLFxuICAgICAgICB7XG4gICAgICAgICAgbWVzc2FnZTogJ1VuYWJsZSB0byBlc3RhYmxpc2ggYSBjb25uZWN0aW9uIHRvIGEgZG9tYWluJyxcbiAgICAgICAgICByZXNvbHV0aW9uOlxuICAgICAgICAgICAgJ0Vuc3VyZSBkb21haW4gbmFtZSBpcyBjb3JyZWN0IGFuZCBuZXR3b3JrIGNvbm5lY3Rpb24gaXMgc3RhYmxlLicsXG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yXG4gICAgICApO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBjYXRjaGVzIFN5bnRheEVycm9ycyB0aGF0IHdlcmUgc29tZWhvdyBub3QgaW5zdGFuY2VzIG9mIEFtcGxpZnlFcnJvclxuICAgICAqIHRoaXMgY2FuIGJlIHJlbW92ZWQgb25jZSB3ZSBjYW4gcHJvcGVybHkgaWRlbnRpZnkgd2hlcmUgQW1wbGlmeUVycm9yIGlzIGJlaW5nIHN0cmlwcGVkIG9mZlxuICAgICAqL1xuICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yICYmIGlzU3ludGF4RXJyb3IoZXJyb3IpKSB7XG4gICAgICByZXR1cm4gbmV3IEFtcGxpZnlVc2VyRXJyb3IoXG4gICAgICAgICdTeW50YXhFcnJvcicsXG4gICAgICAgIHtcbiAgICAgICAgICBtZXNzYWdlOiBlcnJvci5tZXNzYWdlLFxuICAgICAgICAgIHJlc29sdXRpb246XG4gICAgICAgICAgICAnQ2hlY2sgeW91ciBiYWNrZW5kIGRlZmluaXRpb24gaW4gdGhlIGBhbXBsaWZ5YCBmb2xkZXIgZm9yIHN5bnRheCBhbmQgdHlwZSBlcnJvcnMuJyxcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3JcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yICYmIGlzSW5zdWZmaWNpZW50RGlza1NwYWNlRXJyb3IoZXJyb3IpKSB7XG4gICAgICByZXR1cm4gbmV3IEFtcGxpZnlVc2VyRXJyb3IoXG4gICAgICAgICdJbnN1ZmZpY2llbnREaXNrU3BhY2VFcnJvcicsXG4gICAgICAgIHtcbiAgICAgICAgICBtZXNzYWdlOiBlcnJvci5tZXNzYWdlLFxuICAgICAgICAgIHJlc29sdXRpb246XG4gICAgICAgICAgICAnVGhlcmUgYXBwZWFycyB0byBiZSBpbnN1ZmZpY2llbnQgc3BhY2Ugb24geW91ciBzeXN0ZW0gdG8gZmluaXNoLiBDbGVhciB1cCBzb21lIGRpc2sgc3BhY2UgYW5kIHRyeSBhZ2Fpbi4nLFxuICAgICAgICB9LFxuICAgICAgICBlcnJvclxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgJiYgaXNPdXRPZk1lbW9yeUVycm9yKGVycm9yKSkge1xuICAgICAgcmV0dXJuIG5ldyBBbXBsaWZ5VXNlckVycm9yKFxuICAgICAgICAnSW5zdWZmaWNpZW50TWVtb3J5U3BhY2VFcnJvcicsXG4gICAgICAgIHtcbiAgICAgICAgICBtZXNzYWdlOiBlcnJvci5tZXNzYWdlLFxuICAgICAgICAgIHJlc29sdXRpb246XG4gICAgICAgICAgICAnVGhlcmUgYXBwZWFycyB0byBiZSBpbnN1ZmZpY2llbnQgbWVtb3J5IG9uIHlvdXIgc3lzdGVtIHRvIGZpbmlzaC4gQ2xvc2Ugb3RoZXIgYXBwbGljYXRpb25zIG9yIHJlc3RhcnQgeW91ciBzeXN0ZW0gYW5kIHRyeSBhZ2Fpbi4nLFxuICAgICAgICB9LFxuICAgICAgICBlcnJvclxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBBbXBsaWZ5RmF1bHQoXG4gICAgICAnVW5rbm93bkZhdWx0JyxcbiAgICAgIHtcbiAgICAgICAgbWVzc2FnZTogZXJyb3JNZXNzYWdlLFxuICAgICAgfSxcbiAgICAgIGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvciA6IG5ldyBFcnJvcihTdHJpbmcoZXJyb3IpKVxuICAgICk7XG4gIH07XG59XG5cbmNvbnN0IHRyeUZpbmRTZXJpYWxpemVkRXJyb3JKU09OU3RyaW5nID0gKFxuICBfc3RkZXJyOiBzdHJpbmdcbik6IHN0cmluZyB8IHVuZGVmaW5lZCA9PiB7XG4gIGxldCBlcnJvckpTT05TdHJpbmcgPSB0cnlGaW5kU2VyaWFsaXplZEVycm9ySlNPTlN0cmluZ1YyKF9zdGRlcnIpO1xuICBpZiAoIWVycm9ySlNPTlN0cmluZykge1xuICAgIGVycm9ySlNPTlN0cmluZyA9IHRyeUZpbmRTZXJpYWxpemVkRXJyb3JKU09OU3RyaW5nVjEoX3N0ZGVycik7XG4gIH1cbiAgcmV0dXJuIGVycm9ySlNPTlN0cmluZztcbn07XG5cbi8qKlxuICogVHJpZXMgdG8gZmluZCBzZXJpYWxpemVkIHN0cmluZyBhc3N1bWluZyB0aGF0IGl0IGlzIGluIGEgZm9ybSBvZiBzZXJpYWxpemVkIEpTT04gZW5jb2RlZCB3aXRoIGJhc2U2NC5cbiAqL1xuY29uc3QgdHJ5RmluZFNlcmlhbGl6ZWRFcnJvckpTT05TdHJpbmdWMiA9IChcbiAgX3N0ZGVycjogc3RyaW5nXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQgPT4ge1xuICAvKipcbiAgICogYFtcIiddP3NlcmlhbGl6ZWRFcnJvcltcIiddPzpbIF0/YCBjYXB0dXJlcyB0aGUgc3RhcnQgb2YgdGhlIHNlcmlhbGl6ZWQgZXJyb3IuIFRoZSBxdW90ZXMgZGVwZW5kIG9uIHdoaWNoIE9TIGlzIGJlaW5nIHVzZWRcbiAgICogYCg/OmAoW2EtekEtWjAtOSsvPV0rPylgfCcoW2EtekEtWjAtOSsvPV0rPyknfFwiKFthLXpBLVowLTkrLz1dKz8pXCIpYCBjYXB0dXJlcyB0aGUgcmVzdCBvZiB0aGUgc2VyaWFsaXplZCBzdHJpbmcgZW5jbG9zZWQgaW4gZWl0aGVyIHNpbmdsZSBxdW90ZSxcbiAgICogZG91YmxlIHF1b3RlcyBvciBiYWNrLXRpY2tzLlxuICAgKi9cbiAgY29uc3QgZXh0cmFjdGlvblJlZ2V4ID1cbiAgICAvW1wiJ10/c2VyaWFsaXplZEVycm9yW1wiJ10/OlsgXT8oPzpgKFthLXpBLVowLTkrLz1dKz8pYHwnKFthLXpBLVowLTkrLz1dKz8pJ3xcIihbYS16QS1aMC05Ky89XSs/KVwiKS87XG4gIGNvbnN0IHNlcmlhbGl6ZWQgPSBfc3RkZXJyLm1hdGNoKGV4dHJhY3Rpb25SZWdleCk7XG4gIGlmIChzZXJpYWxpemVkICYmIHNlcmlhbGl6ZWQubGVuZ3RoID09PSA0KSB7XG4gICAgLy8gNCBiZWNhdXNlIDEgbWF0Y2ggYW5kIDMgY2FwdHVyaW5nIGdyb3Vwc1xuICAgIGNvbnN0IGJhc2U2NFNlcmlhbGl6ZWRTdHJpbmcgPSBzZXJpYWxpemVkXG4gICAgICAuc2xpY2UoMSlcbiAgICAgIC5maW5kKChpdGVtKSA9PiBpdGVtICYmIGl0ZW0ubGVuZ3RoID4gMCk7XG4gICAgaWYgKGJhc2U2NFNlcmlhbGl6ZWRTdHJpbmcpIHtcbiAgICAgIHJldHVybiBCdWZmZXIuZnJvbShiYXNlNjRTZXJpYWxpemVkU3RyaW5nLCAnYmFzZTY0JykudG9TdHJpbmcoJ3V0Zi04Jyk7XG4gICAgfVxuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59O1xuXG4vKipcbiAqIFRyaWVzIHRvIGZpbmQgc2VyaWFsaXplZCBzdHJpbmcgYXNzdW1pbmcgdGhhdCBpdCBpcyBpbiBhIGZvcm0gb2Ygc2VyaWFsaXplZCBKU09OLlxuICogQGRlcHJlY2F0ZWQgVGhpcyBpcyBvbGQgZm9ybWF0IGxlZnQgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGluIGNhc2UgdGhhdCBzeW50aC10aW1lIGNvbXBvbmVudHMgYXJlIHVzaW5nIG9sZGVyIHZlcnNpb24gb2YgcGxhdGZvcm0tY29yZS5cbiAqL1xuY29uc3QgdHJ5RmluZFNlcmlhbGl6ZWRFcnJvckpTT05TdHJpbmdWMSA9IChcbiAgX3N0ZGVycjogc3RyaW5nXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQgPT4ge1xuICAvKipcbiAgICogYFtcIiddP3NlcmlhbGl6ZWRFcnJvcltcIiddPzpbIF0/YCBjYXB0dXJlcyB0aGUgc3RhcnQgb2YgdGhlIHNlcmlhbGl6ZWQgZXJyb3IuIFRoZSBxdW90ZXMgZGVwZW5kIG9uIHdoaWNoIE9TIGlzIGJlaW5nIHVzZWRcbiAgICogYCg/OmAoLis/KWB8JyguKz8pJ3xcIigoPzpcXFxcXCJ8W15cIl0pKj8pXCIpYCBjYXB0dXJlcyB0aGUgcmVzdCBvZiB0aGUgc2VyaWFsaXplZCBzdHJpbmcgZW5jbG9zZWQgaW4gZWl0aGVyIHNpbmdsZSBxdW90ZSxcbiAgICogZG91YmxlIHF1b3RlcyBvciBiYWNrLXRpY2tzLlxuICAgKi9cbiAgY29uc3QgZXh0cmFjdGlvblJlZ2V4ID1cbiAgICAvW1wiJ10/c2VyaWFsaXplZEVycm9yW1wiJ10/OlsgXT8oPzpgKC4rPylgfCcoLis/KSd8XCIoKD86XFxcXFwifFteXCJdKSo/KVwiKS87XG4gIGNvbnN0IHNlcmlhbGl6ZWQgPSBfc3RkZXJyLm1hdGNoKGV4dHJhY3Rpb25SZWdleCk7XG4gIGlmIChzZXJpYWxpemVkICYmIHNlcmlhbGl6ZWQubGVuZ3RoID09PSA0KSB7XG4gICAgLy8gNCBiZWNhdXNlIDEgbWF0Y2ggYW5kIDMgY2FwdHVyaW5nIGdyb3Vwc1xuICAgIHJldHVybiBzZXJpYWxpemVkXG4gICAgICAuc2xpY2UoMSlcbiAgICAgIC5maW5kKChpdGVtKSA9PiBpdGVtICYmIGl0ZW0ubGVuZ3RoID4gMClcbiAgICAgID8ucmVwbGFjZUFsbCgnXFxcXFwiJywgJ1wiJylcbiAgICAgIC5yZXBsYWNlQWxsKFwiXFxcXCdcIiwgXCInXCIpO1xuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59O1xuXG5jb25zdCBpc0NyZWRlbnRpYWxzRXJyb3IgPSAoZXJyPzogRXJyb3IpOiBib29sZWFuID0+IHtcbiAgcmV0dXJuIChcbiAgICAhIWVyciAmJlxuICAgIFtcbiAgICAgICdFeHBpcmVkVG9rZW4nLFxuICAgICAgJ0V4cGlyZWRUb2tlbkV4Y2VwdGlvbicsXG4gICAgICAnQ3JlZGVudGlhbHNQcm92aWRlckVycm9yJyxcbiAgICAgICdJbnZhbGlkQ2xpZW50VG9rZW5JZCcsXG4gICAgICAnQ3JlZGVudGlhbHNFcnJvcicsXG4gICAgXS5pbmNsdWRlcyhlcnIubmFtZSlcbiAgKTtcbn07XG5cbi8vIFRoZXNlIHZhbGlkYXRpb24gbWVzc2FnZXMgYXJlIHRha2VuIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL3lhcmdzL3lhcmdzL2Jsb2IvMGM5NWY5Yzc5ZTE4MTBjZjljODk2NGZiZjdkMTM5MDA5NDEyZjdlNy9saWIvdmFsaWRhdGlvbi50c1xuY29uc3QgaXNZYXJnc1ZhbGlkYXRpb25FcnJvciA9IChlcnI/OiBFcnJvcik6IGJvb2xlYW4gPT4ge1xuICByZXR1cm4gKFxuICAgICEhZXJyICYmXG4gICAgKFtcbiAgICAgICdVbmtub3duIGNvbW1hbmQnLFxuICAgICAgJ1Vua25vd24gYXJndW1lbnQnLFxuICAgICAgJ0RpZCB5b3UgbWVhbicsXG4gICAgICAnTm90IGVub3VnaCBub24tb3B0aW9uIGFyZ3VtZW50cycsXG4gICAgICAnVG9vIG1hbnkgbm9uLW9wdGlvbiBhcmd1bWVudHMnLFxuICAgICAgJ01pc3NpbmcgcmVxdWlyZWQgYXJndW1lbnQnLFxuICAgICAgJ0ludmFsaWQgdmFsdWVzOicsXG4gICAgICAnTWlzc2luZyBkZXBlbmRlbnQgYXJndW1lbnRzJyxcbiAgICAgICdJbXBsaWNhdGlvbnMgZmFpbGVkJyxcbiAgICBdLnNvbWUoKG1lc3NhZ2UpID0+IGVyci5tZXNzYWdlLnN0YXJ0c1dpdGgobWVzc2FnZSkpIHx8XG4gICAgICBlcnIubWVzc2FnZS5lbmRzV2l0aCgnYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZScpKVxuICApO1xufTtcblxuY29uc3QgaXNFTm90Rm91bmRFcnJvciA9IChlcnI/OiBFcnJvcik6IGJvb2xlYW4gPT4ge1xuICByZXR1cm4gISFlcnIgJiYgZXJyLm1lc3NhZ2UuaW5jbHVkZXMoJ2dldGFkZHJpbmZvIEVOT1RGT1VORCcpO1xufTtcblxuY29uc3QgaXNTeW50YXhFcnJvciA9IChlcnI/OiBFcnJvcik6IGJvb2xlYW4gPT4ge1xuICByZXR1cm4gISFlcnIgJiYgZXJyLm5hbWUgPT09ICdTeW50YXhFcnJvcic7XG59O1xuXG5jb25zdCBpc0luc3VmZmljaWVudERpc2tTcGFjZUVycm9yID0gKGVycj86IEVycm9yKTogYm9vbGVhbiA9PiB7XG4gIHJldHVybiAoXG4gICAgISFlcnIgJiZcbiAgICBbJ0VOT1NQQzogbm8gc3BhY2UgbGVmdCBvbiBkZXZpY2UnLCAnY29kZSBFTk9TUEMnXS5zb21lKChtZXNzYWdlKSA9PlxuICAgICAgZXJyLm1lc3NhZ2UuaW5jbHVkZXMobWVzc2FnZSlcbiAgICApXG4gICk7XG59O1xuXG5jb25zdCBpc091dE9mTWVtb3J5RXJyb3IgPSAoZXJyPzogRXJyb3IpOiBib29sZWFuID0+IHtcbiAgcmV0dXJuIChcbiAgICAhIWVyciAmJlxuICAgIChlcnIubWVzc2FnZS5pbmNsdWRlcygncHJvY2VzcyBvdXQgb2YgbWVtb3J5JykgfHxcbiAgICAgIGVyci5tZXNzYWdlLmluY2x1ZGVzKCdjb25uZWN0IEVOT01FTScpKVxuICApO1xufTtcblxuLyoqXG4gKiBBbXBsaWZ5IGV4Y2VwdGlvbiBjbGFzc2lmaWNhdGlvbnNcbiAqL1xuZXhwb3J0IHR5cGUgQW1wbGlmeUVycm9yQ2xhc3NpZmljYXRpb24gPSAnRkFVTFQnIHwgJ0VSUk9SJztcblxuLyoqXG4gKiBBbXBsaWZ5IEVycm9yIG9wdGlvbnMgb2JqZWN0XG4gKi9cbmV4cG9ydCB0eXBlIEFtcGxpZnlFcnJvck9wdGlvbnMgPSB7XG4gIG1lc3NhZ2U6IHN0cmluZztcbiAgZGV0YWlscz86IHN0cmluZztcbiAgcmVzb2x1dGlvbj86IHN0cmluZztcbiAgbGluaz86IHN0cmluZztcblxuICAvLyBDbG91ZEZvcm1hdGlvbiBvciBOb2RlSlMgZXJyb3IgY29kZXNcbiAgY29kZT86IHN0cmluZztcbn07XG5cbi8qKlxuICogU2FtZSBhcyBBbXBsaWZ5RXJyb3JPcHRpb25zIGV4Y2VwdCByZXNvbHV0aW9uIGlzIHJlcXVpcmVkXG4gKi9cbmV4cG9ydCB0eXBlIEFtcGxpZnlVc2VyRXJyb3JPcHRpb25zID0gT21pdDxcbiAgQW1wbGlmeUVycm9yT3B0aW9ucyxcbiAgJ3Jlc29sdXRpb24nXG4+ICYgeyByZXNvbHV0aW9uOiBzdHJpbmcgfTtcblxuY29uc3QgZXJyb3JTZXJpYWxpemVyID0gKF86IHVua25vd24sIHZhbHVlOiB1bmtub3duKSA9PiB7XG4gIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgcmV0dXJuIEVycm9yU2VyaWFsaXplckRlc2VyaWFsaXplci5zZXJpYWxpemUodmFsdWUpO1xuICB9XG4gIHJldHVybiB2YWx1ZTtcbn07XG5jbGFzcyBFcnJvclNlcmlhbGl6ZXJEZXNlcmlhbGl6ZXIge1xuICBzdGF0aWMgc2VyaWFsaXplID0gKGVycm9yOiBFcnJvcikgPT4ge1xuICAgIGNvbnN0IHNlcmlhbGl6ZWRFcnJvcjogU2VyaWFsaXplZEVycm9yVHlwZSA9IHtcbiAgICAgIG5hbWU6IGVycm9yLm5hbWUsXG4gICAgICBtZXNzYWdlOiBlcnJvci5tZXNzYWdlLFxuICAgIH07XG4gICAgcmV0dXJuIHNlcmlhbGl6ZWRFcnJvcjtcbiAgfTtcblxuICBzdGF0aWMgZGVzZXJpYWxpemUgPSAoZGVzZXJpYWxpemVkOiBTZXJpYWxpemVkRXJyb3JUeXBlKSA9PiB7XG4gICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoZGVzZXJpYWxpemVkLm1lc3NhZ2UpO1xuICAgIGVycm9yLm5hbWUgPSBkZXNlcmlhbGl6ZWQubmFtZTtcbiAgICByZXR1cm4gZXJyb3I7XG4gIH07XG5cbiAgc3RhdGljIGlzU2VyaWFsaXplZEVycm9yVHlwZSA9IChvYmo6IHVua25vd24pOiBvYmogaXMgU2VyaWFsaXplZEVycm9yVHlwZSA9PiB7XG4gICAgaWYgKFxuICAgICAgb2JqICYmXG4gICAgICAob2JqIGFzIFNlcmlhbGl6ZWRFcnJvclR5cGUpLm5hbWUgJiZcbiAgICAgIChvYmogYXMgU2VyaWFsaXplZEVycm9yVHlwZSkubWVzc2FnZVxuICAgIClcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfTtcbn1cbnR5cGUgU2VyaWFsaXplZEVycm9yVHlwZSA9IHtcbiAgbmFtZTogc3RyaW5nO1xuICBtZXNzYWdlOiBzdHJpbmc7XG59O1xuIl19
@@ -2,7 +2,10 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.AccountIdFetcher = void 0;
4
4
  const client_sts_1 = require("@aws-sdk/client-sts");
5
+ const uuid_1 = require("uuid");
5
6
  const NO_ACCOUNT_ID = 'NO_ACCOUNT_ID';
7
+ // eslint-disable-next-line spellcheck/spell-checker
8
+ const AMPLIFY_CLI_UUID_NAMESPACE = '283cae3e-c611-4659-9044-6796e5d696ec'; // A random v4 UUID
6
9
  /**
7
10
  * Retrieves the account ID of the user
8
11
  */
@@ -22,17 +25,18 @@ class AccountIdFetcher {
22
25
  try {
23
26
  const stsResponse = await this.stsClient.send(new client_sts_1.GetCallerIdentityCommand({}));
24
27
  if (stsResponse && stsResponse.Account) {
25
- this.accountId = stsResponse.Account;
28
+ const accountIdBucket = stsResponse.Account.slice(0, -2);
29
+ this.accountId = (0, uuid_1.v5)(accountIdBucket, AMPLIFY_CLI_UUID_NAMESPACE);
26
30
  return this.accountId;
27
31
  }
28
32
  // We failed to get the account Id. Most likely the user doesn't have credentials
29
33
  return NO_ACCOUNT_ID;
30
34
  }
31
- catch (error) {
35
+ catch {
32
36
  // We failed to get the account Id. Most likely the user doesn't have credentials
33
37
  return NO_ACCOUNT_ID;
34
38
  }
35
39
  };
36
40
  }
37
41
  exports.AccountIdFetcher = AccountIdFetcher;
38
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjb3VudF9pZF9mZXRjaGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3VzYWdlLWRhdGEvYWNjb3VudF9pZF9mZXRjaGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG9EQUEwRTtBQUUxRSxNQUFNLGFBQWEsR0FBRyxlQUFlLENBQUM7QUFDdEM7O0dBRUc7QUFDSCxNQUFhLGdCQUFnQjtJQUtFO0lBSnJCLFNBQVMsQ0FBcUI7SUFDdEM7O09BRUc7SUFDSCxZQUE2QixZQUFZLElBQUksc0JBQVMsRUFBRTtRQUEzQixjQUFTLEdBQVQsU0FBUyxDQUFrQjtJQUFHLENBQUM7SUFDNUQsS0FBSyxHQUFHLEtBQUssSUFBSSxFQUFFO1FBQ2pCLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNsQixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7U0FDdkI7UUFDRCxJQUFJO1lBQ0YsTUFBTSxXQUFXLEdBQUcsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FDM0MsSUFBSSxxQ0FBd0IsQ0FBQyxFQUFFLENBQUMsQ0FDakMsQ0FBQztZQUNGLElBQUksV0FBVyxJQUFJLFdBQVcsQ0FBQyxPQUFPLEVBQUU7Z0JBQ3RDLElBQUksQ0FBQyxTQUFTLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQztnQkFDckMsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO2FBQ3ZCO1lBQ0QsaUZBQWlGO1lBQ2pGLE9BQU8sYUFBYSxDQUFDO1NBQ3RCO1FBQUMsT0FBTyxLQUFLLEVBQUU7WUFDZCxpRkFBaUY7WUFDakYsT0FBTyxhQUFhLENBQUM7U0FDdEI7SUFDSCxDQUFDLENBQUM7Q0FDSDtBQXpCRCw0Q0F5QkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBHZXRDYWxsZXJJZGVudGl0eUNvbW1hbmQsIFNUU0NsaWVudCB9IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1zdHMnO1xuXG5jb25zdCBOT19BQ0NPVU5UX0lEID0gJ05PX0FDQ09VTlRfSUQnO1xuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGFjY291bnQgSUQgb2YgdGhlIHVzZXJcbiAqL1xuZXhwb3J0IGNsYXNzIEFjY291bnRJZEZldGNoZXIge1xuICBwcml2YXRlIGFjY291bnRJZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAvKipcbiAgICogY29uc3RydWN0b3IgZm9yIEFjY291bnRJZEZldGNoZXJcbiAgICovXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgc3RzQ2xpZW50ID0gbmV3IFNUU0NsaWVudCgpKSB7fVxuICBmZXRjaCA9IGFzeW5jICgpID0+IHtcbiAgICBpZiAodGhpcy5hY2NvdW50SWQpIHtcbiAgICAgIHJldHVybiB0aGlzLmFjY291bnRJZDtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHN0c1Jlc3BvbnNlID0gYXdhaXQgdGhpcy5zdHNDbGllbnQuc2VuZChcbiAgICAgICAgbmV3IEdldENhbGxlcklkZW50aXR5Q29tbWFuZCh7fSlcbiAgICAgICk7XG4gICAgICBpZiAoc3RzUmVzcG9uc2UgJiYgc3RzUmVzcG9uc2UuQWNjb3VudCkge1xuICAgICAgICB0aGlzLmFjY291bnRJZCA9IHN0c1Jlc3BvbnNlLkFjY291bnQ7XG4gICAgICAgIHJldHVybiB0aGlzLmFjY291bnRJZDtcbiAgICAgIH1cbiAgICAgIC8vIFdlIGZhaWxlZCB0byBnZXQgdGhlIGFjY291bnQgSWQuIE1vc3QgbGlrZWx5IHRoZSB1c2VyIGRvZXNuJ3QgaGF2ZSBjcmVkZW50aWFsc1xuICAgICAgcmV0dXJuIE5PX0FDQ09VTlRfSUQ7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIFdlIGZhaWxlZCB0byBnZXQgdGhlIGFjY291bnQgSWQuIE1vc3QgbGlrZWx5IHRoZSB1c2VyIGRvZXNuJ3QgaGF2ZSBjcmVkZW50aWFsc1xuICAgICAgcmV0dXJuIE5PX0FDQ09VTlRfSUQ7XG4gICAgfVxuICB9O1xufVxuIl19
42
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjb3VudF9pZF9mZXRjaGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3VzYWdlLWRhdGEvYWNjb3VudF9pZF9mZXRjaGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG9EQUEwRTtBQUMxRSwrQkFBb0M7QUFFcEMsTUFBTSxhQUFhLEdBQUcsZUFBZSxDQUFDO0FBRXRDLG9EQUFvRDtBQUNwRCxNQUFNLDBCQUEwQixHQUFHLHNDQUFzQyxDQUFDLENBQUMsbUJBQW1CO0FBRTlGOztHQUVHO0FBQ0gsTUFBYSxnQkFBZ0I7SUFLRTtJQUpyQixTQUFTLENBQXFCO0lBQ3RDOztPQUVHO0lBQ0gsWUFBNkIsWUFBWSxJQUFJLHNCQUFTLEVBQUU7UUFBM0IsY0FBUyxHQUFULFNBQVMsQ0FBa0I7SUFBRyxDQUFDO0lBQzVELEtBQUssR0FBRyxLQUFLLElBQUksRUFBRTtRQUNqQixJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDbEIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO1NBQ3ZCO1FBQ0QsSUFBSTtZQUNGLE1BQU0sV0FBVyxHQUFHLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQzNDLElBQUkscUNBQXdCLENBQUMsRUFBRSxDQUFDLENBQ2pDLENBQUM7WUFDRixJQUFJLFdBQVcsSUFBSSxXQUFXLENBQUMsT0FBTyxFQUFFO2dCQUN0QyxNQUFNLGVBQWUsR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDekQsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFBLFNBQU0sRUFBQyxlQUFlLEVBQUUsMEJBQTBCLENBQUMsQ0FBQztnQkFDckUsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO2FBQ3ZCO1lBQ0QsaUZBQWlGO1lBQ2pGLE9BQU8sYUFBYSxDQUFDO1NBQ3RCO1FBQUMsTUFBTTtZQUNOLGlGQUFpRjtZQUNqRixPQUFPLGFBQWEsQ0FBQztTQUN0QjtJQUNILENBQUMsQ0FBQztDQUNIO0FBMUJELDRDQTBCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEdldENhbGxlcklkZW50aXR5Q29tbWFuZCwgU1RTQ2xpZW50IH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LXN0cyc7XG5pbXBvcnQgeyB2NSBhcyB1dWlkVjUgfSBmcm9tICd1dWlkJztcblxuY29uc3QgTk9fQUNDT1VOVF9JRCA9ICdOT19BQ0NPVU5UX0lEJztcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHNwZWxsY2hlY2svc3BlbGwtY2hlY2tlclxuY29uc3QgQU1QTElGWV9DTElfVVVJRF9OQU1FU1BBQ0UgPSAnMjgzY2FlM2UtYzYxMS00NjU5LTkwNDQtNjc5NmU1ZDY5NmVjJzsgLy8gQSByYW5kb20gdjQgVVVJRFxuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgYWNjb3VudCBJRCBvZiB0aGUgdXNlclxuICovXG5leHBvcnQgY2xhc3MgQWNjb3VudElkRmV0Y2hlciB7XG4gIHByaXZhdGUgYWNjb3VudElkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIC8qKlxuICAgKiBjb25zdHJ1Y3RvciBmb3IgQWNjb3VudElkRmV0Y2hlclxuICAgKi9cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBzdHNDbGllbnQgPSBuZXcgU1RTQ2xpZW50KCkpIHt9XG4gIGZldGNoID0gYXN5bmMgKCkgPT4ge1xuICAgIGlmICh0aGlzLmFjY291bnRJZCkge1xuICAgICAgcmV0dXJuIHRoaXMuYWNjb3VudElkO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgY29uc3Qgc3RzUmVzcG9uc2UgPSBhd2FpdCB0aGlzLnN0c0NsaWVudC5zZW5kKFxuICAgICAgICBuZXcgR2V0Q2FsbGVySWRlbnRpdHlDb21tYW5kKHt9KVxuICAgICAgKTtcbiAgICAgIGlmIChzdHNSZXNwb25zZSAmJiBzdHNSZXNwb25zZS5BY2NvdW50KSB7XG4gICAgICAgIGNvbnN0IGFjY291bnRJZEJ1Y2tldCA9IHN0c1Jlc3BvbnNlLkFjY291bnQuc2xpY2UoMCwgLTIpO1xuICAgICAgICB0aGlzLmFjY291bnRJZCA9IHV1aWRWNShhY2NvdW50SWRCdWNrZXQsIEFNUExJRllfQ0xJX1VVSURfTkFNRVNQQUNFKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWNjb3VudElkO1xuICAgICAgfVxuICAgICAgLy8gV2UgZmFpbGVkIHRvIGdldCB0aGUgYWNjb3VudCBJZC4gTW9zdCBsaWtlbHkgdGhlIHVzZXIgZG9lc24ndCBoYXZlIGNyZWRlbnRpYWxzXG4gICAgICByZXR1cm4gTk9fQUNDT1VOVF9JRDtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIFdlIGZhaWxlZCB0byBnZXQgdGhlIGFjY291bnQgSWQuIE1vc3QgbGlrZWx5IHRoZSB1c2VyIGRvZXNuJ3QgaGF2ZSBjcmVkZW50aWFsc1xuICAgICAgcmV0dXJuIE5PX0FDQ09VTlRfSUQ7XG4gICAgfVxuICB9O1xufVxuIl19
@@ -6,16 +6,21 @@ export declare class SerializableError {
6
6
  message: string;
7
7
  details?: string;
8
8
  trace?: Trace[];
9
+ private filePathRegex;
9
10
  private stackTraceRegex;
10
11
  private arnRegex;
12
+ private stackRegex;
11
13
  /**
12
14
  * constructor for SerializableError
13
15
  */
14
16
  constructor(error: Error);
15
17
  private extractStackTrace;
18
+ private anonymizePaths;
16
19
  private processPaths;
17
20
  private removeARN;
21
+ private removeStackIdentifier;
18
22
  private sanitize;
23
+ private isURLFilePath;
19
24
  }
20
25
  type Trace = {
21
26
  methodName: string;
@@ -5,6 +5,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.SerializableError = void 0;
7
7
  const path_1 = __importDefault(require("path"));
8
+ const url_1 = require("url");
9
+ const os_1 = require("os");
8
10
  /**
9
11
  * Wrapper around Error for serialization for usage metrics
10
12
  */
@@ -13,8 +15,14 @@ class SerializableError {
13
15
  message;
14
16
  details;
15
17
  trace;
18
+ // breakdown of filePathRegex:
19
+ // (file:/+)? -> matches optional file url prefix
20
+ // homedir() -> users home directory, replacing \ with /
21
+ // [\\w.\\-_@\\\\/]+ -> matches nested directories and file name
22
+ filePathRegex = new RegExp(`(file:/+)?${(0, os_1.homedir)().replaceAll('\\', '/')}[\\w.\\-_@\\\\/]+`, 'g');
16
23
  stackTraceRegex = /^\s*at (?:((?:\[object object\])?[^\\/]+(?: \[as \S+\])?) )?\(?(.*?):(\d+)(?::(\d+))?\)?\s*$/i;
17
24
  arnRegex = /arn:[a-z0-9][-.a-z0-9]{0,62}:[A-Za-z0-9][A-Za-z0-9_/.-]{0,62}:[A-Za-z0-9_/.-]{0,63}:[A-Za-z0-9_/.-]{0,63}:[A-Za-z0-9][A-Za-z0-9:_/+=,@.-]{0,1023}/g;
25
+ stackRegex = /amplify-[a-zA-Z0-9-]+/g;
18
26
  /**
19
27
  * constructor for SerializableError
20
28
  */
@@ -23,9 +31,11 @@ class SerializableError {
23
31
  'code' in error && error.code
24
32
  ? this.sanitize(error.code)
25
33
  : error.name;
26
- this.message = this.sanitize(error.message);
34
+ this.message = this.anonymizePaths(this.sanitize(error.message));
27
35
  this.details =
28
- 'details' in error ? this.sanitize(error.details) : undefined;
36
+ 'details' in error
37
+ ? this.anonymizePaths(this.sanitize(error.details))
38
+ : undefined;
29
39
  this.trace = this.extractStackTrace(error);
30
40
  }
31
41
  extractStackTrace = (error) => {
@@ -51,20 +61,47 @@ class SerializableError {
51
61
  }
52
62
  return result;
53
63
  };
64
+ anonymizePaths = (str) => {
65
+ let result = str;
66
+ const matches = [...result.matchAll(this.filePathRegex)];
67
+ for (const match of matches) {
68
+ result = result.replace(match[0], this.processPaths([match[0]])[0]);
69
+ }
70
+ return result;
71
+ };
54
72
  processPaths = (paths) => {
55
73
  return paths.map((tracePath) => {
56
- if (path_1.default.isAbsolute(tracePath)) {
57
- return path_1.default.relative(process.cwd(), tracePath);
74
+ let result = tracePath;
75
+ if (this.isURLFilePath(result)) {
76
+ result = (0, url_1.fileURLToPath)(result);
77
+ }
78
+ if (path_1.default.isAbsolute(result)) {
79
+ return path_1.default.relative(process.cwd(), result);
58
80
  }
59
- return tracePath;
81
+ return result;
60
82
  });
61
83
  };
62
84
  removeARN = (str) => {
63
85
  return str?.replace(this.arnRegex, '<escaped ARN>') ?? '';
64
86
  };
87
+ removeStackIdentifier = (str) => {
88
+ return str?.replace(this.stackRegex, '<escaped stack>') ?? '';
89
+ };
65
90
  sanitize = (str) => {
66
- return this.removeARN(str)?.replaceAll(/["❌]/g, '');
91
+ let result = str;
92
+ result = this.removeARN(result);
93
+ result = this.removeStackIdentifier(result);
94
+ return result.replaceAll(/["❌]/g, '');
95
+ };
96
+ isURLFilePath = (path) => {
97
+ try {
98
+ new URL(path);
99
+ return path.startsWith('file:');
100
+ }
101
+ catch {
102
+ return false;
103
+ }
67
104
  };
68
105
  }
69
106
  exports.SerializableError = SerializableError;
70
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VyaWFsaXphYmxlX2Vycm9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3VzYWdlLWRhdGEvc2VyaWFsaXphYmxlX2Vycm9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLGdEQUF3QjtBQUV4Qjs7R0FFRztBQUNILE1BQWEsaUJBQWlCO0lBQzVCLElBQUksQ0FBUztJQUNiLE9BQU8sQ0FBUztJQUNoQixPQUFPLENBQVU7SUFDakIsS0FBSyxDQUFXO0lBRVIsZUFBZSxHQUNyQiwrRkFBK0YsQ0FBQztJQUMxRixRQUFRLEdBQ2Qsb0pBQW9KLENBQUM7SUFFdko7O09BRUc7SUFDSCxZQUFZLEtBQVk7UUFDdEIsSUFBSSxDQUFDLElBQUk7WUFDUCxNQUFNLElBQUksS0FBSyxJQUFJLEtBQUssQ0FBQyxJQUFJO2dCQUMzQixDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBYyxDQUFDO2dCQUNyQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzVDLElBQUksQ0FBQyxPQUFPO1lBQ1YsU0FBUyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsT0FBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFDMUUsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVPLGlCQUFpQixHQUFHLENBQUMsS0FBWSxFQUFXLEVBQUU7UUFDcEQsTUFBTSxNQUFNLEdBQVksRUFBRSxDQUFDO1FBQzNCLElBQUksS0FBSyxDQUFDLEtBQUssRUFBRTtZQUNmLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3RDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtnQkFDckIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzlDLElBQUksS0FBSyxFQUFFO29CQUNULE1BQU0sQ0FBQyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLFlBQVksQ0FBQyxHQUFHLEtBQUssQ0FBQztvQkFDN0QsTUFBTSxDQUFDLElBQUksQ0FBQzt3QkFDVixVQUFVO3dCQUNWLElBQUk7d0JBQ0osVUFBVTt3QkFDVixZQUFZO3FCQUNiLENBQUMsQ0FBQztpQkFDSjtZQUNILENBQUMsQ0FBQyxDQUFDO1lBQ0gsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FDdEMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUNsQyxDQUFDO1lBQ0YsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRTtnQkFDOUIsS0FBSyxDQUFDLElBQUksR0FBRyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDckMsQ0FBQyxDQUFDLENBQUM7U0FDSjtRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUMsQ0FBQztJQUVNLFlBQVksR0FBRyxDQUFDLEtBQWUsRUFBWSxFQUFFO1FBQ25ELE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFO1lBQzdCLElBQUksY0FBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsRUFBRTtnQkFDOUIsT0FBTyxjQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxTQUFTLENBQUMsQ0FBQzthQUNoRDtZQUNELE9BQU8sU0FBUyxDQUFDO1FBQ25CLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDO0lBRU0sU0FBUyxHQUFHLENBQUMsR0FBWSxFQUFVLEVBQUU7UUFDM0MsT0FBTyxHQUFHLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsZUFBZSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzVELENBQUMsQ0FBQztJQUVNLFFBQVEsR0FBRyxDQUFDLEdBQVcsRUFBRSxFQUFFO1FBQ2pDLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRSxVQUFVLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3RELENBQUMsQ0FBQztDQUNIO0FBbkVELDhDQW1FQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuXG4vKipcbiAqIFdyYXBwZXIgYXJvdW5kIEVycm9yIGZvciBzZXJpYWxpemF0aW9uIGZvciB1c2FnZSBtZXRyaWNzXG4gKi9cbmV4cG9ydCBjbGFzcyBTZXJpYWxpemFibGVFcnJvciB7XG4gIG5hbWU6IHN0cmluZztcbiAgbWVzc2FnZTogc3RyaW5nO1xuICBkZXRhaWxzPzogc3RyaW5nO1xuICB0cmFjZT86IFRyYWNlW107XG5cbiAgcHJpdmF0ZSBzdGFja1RyYWNlUmVnZXggPVxuICAgIC9eXFxzKmF0ICg/OigoPzpcXFtvYmplY3Qgb2JqZWN0XFxdKT9bXlxcXFwvXSsoPzogXFxbYXMgXFxTK1xcXSk/KSApP1xcKD8oLio/KTooXFxkKykoPzo6KFxcZCspKT9cXCk/XFxzKiQvaTtcbiAgcHJpdmF0ZSBhcm5SZWdleCA9XG4gICAgL2FybjpbYS16MC05XVstLmEtejAtOV17MCw2Mn06W0EtWmEtejAtOV1bQS1aYS16MC05Xy8uLV17MCw2Mn06W0EtWmEtejAtOV8vLi1dezAsNjN9OltBLVphLXowLTlfLy4tXXswLDYzfTpbQS1aYS16MC05XVtBLVphLXowLTk6Xy8rPSxALi1dezAsMTAyM30vZztcblxuICAvKipcbiAgICogY29uc3RydWN0b3IgZm9yIFNlcmlhbGl6YWJsZUVycm9yXG4gICAqL1xuICBjb25zdHJ1Y3RvcihlcnJvcjogRXJyb3IpIHtcbiAgICB0aGlzLm5hbWUgPVxuICAgICAgJ2NvZGUnIGluIGVycm9yICYmIGVycm9yLmNvZGVcbiAgICAgICAgPyB0aGlzLnNhbml0aXplKGVycm9yLmNvZGUgYXMgc3RyaW5nKVxuICAgICAgICA6IGVycm9yLm5hbWU7XG4gICAgdGhpcy5tZXNzYWdlID0gdGhpcy5zYW5pdGl6ZShlcnJvci5tZXNzYWdlKTtcbiAgICB0aGlzLmRldGFpbHMgPVxuICAgICAgJ2RldGFpbHMnIGluIGVycm9yID8gdGhpcy5zYW5pdGl6ZShlcnJvci5kZXRhaWxzIGFzIHN0cmluZykgOiB1bmRlZmluZWQ7XG4gICAgdGhpcy50cmFjZSA9IHRoaXMuZXh0cmFjdFN0YWNrVHJhY2UoZXJyb3IpO1xuICB9XG5cbiAgcHJpdmF0ZSBleHRyYWN0U3RhY2tUcmFjZSA9IChlcnJvcjogRXJyb3IpOiBUcmFjZVtdID0+IHtcbiAgICBjb25zdCByZXN1bHQ6IFRyYWNlW10gPSBbXTtcbiAgICBpZiAoZXJyb3Iuc3RhY2spIHtcbiAgICAgIGNvbnN0IHN0YWNrID0gZXJyb3Iuc3RhY2suc3BsaXQoJ1xcbicpO1xuICAgICAgc3RhY2suZm9yRWFjaCgobGluZSkgPT4ge1xuICAgICAgICBjb25zdCBtYXRjaCA9IHRoaXMuc3RhY2tUcmFjZVJlZ2V4LmV4ZWMobGluZSk7XG4gICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgIGNvbnN0IFssIG1ldGhvZE5hbWUsIGZpbGUsIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlcl0gPSBtYXRjaDtcbiAgICAgICAgICByZXN1bHQucHVzaCh7XG4gICAgICAgICAgICBtZXRob2ROYW1lLFxuICAgICAgICAgICAgZmlsZSxcbiAgICAgICAgICAgIGxpbmVOdW1iZXIsXG4gICAgICAgICAgICBjb2x1bW5OdW1iZXIsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgY29uc3QgcHJvY2Vzc2VkUGF0aHMgPSB0aGlzLnByb2Nlc3NQYXRocyhcbiAgICAgICAgcmVzdWx0Lm1hcCgodHJhY2UpID0+IHRyYWNlLmZpbGUpXG4gICAgICApO1xuICAgICAgcmVzdWx0LmZvckVhY2goKHRyYWNlLCBpbmRleCkgPT4ge1xuICAgICAgICB0cmFjZS5maWxlID0gcHJvY2Vzc2VkUGF0aHNbaW5kZXhdO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgcHJpdmF0ZSBwcm9jZXNzUGF0aHMgPSAocGF0aHM6IHN0cmluZ1tdKTogc3RyaW5nW10gPT4ge1xuICAgIHJldHVybiBwYXRocy5tYXAoKHRyYWNlUGF0aCkgPT4ge1xuICAgICAgaWYgKHBhdGguaXNBYnNvbHV0ZSh0cmFjZVBhdGgpKSB7XG4gICAgICAgIHJldHVybiBwYXRoLnJlbGF0aXZlKHByb2Nlc3MuY3dkKCksIHRyYWNlUGF0aCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJhY2VQYXRoO1xuICAgIH0pO1xuICB9O1xuXG4gIHByaXZhdGUgcmVtb3ZlQVJOID0gKHN0cj86IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gICAgcmV0dXJuIHN0cj8ucmVwbGFjZSh0aGlzLmFyblJlZ2V4LCAnPGVzY2FwZWQgQVJOPicpID8/ICcnO1xuICB9O1xuXG4gIHByaXZhdGUgc2FuaXRpemUgPSAoc3RyOiBzdHJpbmcpID0+IHtcbiAgICByZXR1cm4gdGhpcy5yZW1vdmVBUk4oc3RyKT8ucmVwbGFjZUFsbCgvW1wi4p2MXS9nLCAnJyk7XG4gIH07XG59XG5cbnR5cGUgVHJhY2UgPSB7XG4gIG1ldGhvZE5hbWU6IHN0cmluZztcbiAgZmlsZTogc3RyaW5nO1xuICBsaW5lTnVtYmVyOiBzdHJpbmc7XG4gIGNvbHVtbk51bWJlcjogc3RyaW5nO1xufTtcbiJdfQ==
107
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VyaWFsaXphYmxlX2Vycm9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3VzYWdlLWRhdGEvc2VyaWFsaXphYmxlX2Vycm9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLGdEQUF3QjtBQUN4Qiw2QkFBb0M7QUFDcEMsMkJBQTZCO0FBRTdCOztHQUVHO0FBQ0gsTUFBYSxpQkFBaUI7SUFDNUIsSUFBSSxDQUFTO0lBQ2IsT0FBTyxDQUFTO0lBQ2hCLE9BQU8sQ0FBVTtJQUNqQixLQUFLLENBQVc7SUFFaEIsOEJBQThCO0lBQzlCLGlEQUFpRDtJQUNqRCx3REFBd0Q7SUFDeEQsZ0VBQWdFO0lBQ3hELGFBQWEsR0FBRyxJQUFJLE1BQU0sQ0FDaEMsYUFBYSxJQUFBLFlBQU8sR0FBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLG1CQUFtQixFQUMvRCxHQUFHLENBQ0osQ0FBQztJQUNNLGVBQWUsR0FDckIsK0ZBQStGLENBQUM7SUFDMUYsUUFBUSxHQUNkLG9KQUFvSixDQUFDO0lBQy9JLFVBQVUsR0FBRyx3QkFBd0IsQ0FBQztJQUM5Qzs7T0FFRztJQUNILFlBQVksS0FBWTtRQUN0QixJQUFJLENBQUMsSUFBSTtZQUNQLE1BQU0sSUFBSSxLQUFLLElBQUksS0FBSyxDQUFDLElBQUk7Z0JBQzNCLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFjLENBQUM7Z0JBQ3JDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQ2pFLElBQUksQ0FBQyxPQUFPO1lBQ1YsU0FBUyxJQUFJLEtBQUs7Z0JBQ2hCLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxRQUFRLENB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QUFxQixHQUFHLENBQUMsR0FBWSxFQUFVLEVBQUU7UUFDdkQsT0FBTyxHQUFHLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsaUJBQWlCLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDaEUsQ0FBQyxDQUFDO0lBRU0sUUFBUSxHQUFHLENBQUMsR0FBVyxFQUFFLEVBQUU7UUFDakMsSUFBSSxNQUFNLEdBQUcsR0FBRyxDQUFDO1FBQ2pCLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2hDLE1BQU0sR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDNUMsT0FBTyxNQUFNLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN4QyxDQUFDLENBQUM7SUFFTSxhQUFhLEdBQUcsQ0FBQyxJQUFZLEVBQVcsRUFBRTtRQUNoRCxJQUFJO1lBQ0YsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDZCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDakM7UUFBQyxNQUFNO1lBQ04sT0FBTyxLQUFLLENBQUM7U0FDZDtJQUNILENBQUMsQ0FBQztDQUNIO0FBNUdELDhDQTRHQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgZmlsZVVSTFRvUGF0aCB9IGZyb20gJ3VybCc7XG5pbXBvcnQgeyBob21lZGlyIH0gZnJvbSAnb3MnO1xuXG4vKipcbiAqIFdyYXBwZXIgYXJvdW5kIEVycm9yIGZvciBzZXJpYWxpemF0aW9uIGZvciB1c2FnZSBtZXRyaWNzXG4gKi9cbmV4cG9ydCBjbGFzcyBTZXJpYWxpemFibGVFcnJvciB7XG4gIG5hbWU6IHN0cmluZztcbiAgbWVzc2FnZTogc3RyaW5nO1xuICBkZXRhaWxzPzogc3RyaW5nO1xuICB0cmFjZT86IFRyYWNlW107XG5cbiAgLy8gYnJlYWtkb3duIG9mIGZpbGVQYXRoUmVnZXg6XG4gIC8vIChmaWxlOi8rKT8gLT4gbWF0Y2hlcyBvcHRpb25hbCBmaWxlIHVybCBwcmVmaXhcbiAgLy8gaG9tZWRpcigpIC0+IHVzZXJzIGhvbWUgZGlyZWN0b3J5LCByZXBsYWNpbmcgXFwgd2l0aCAvXG4gIC8vIFtcXFxcdy5cXFxcLV9AXFxcXFxcXFwvXSsgLT4gbWF0Y2hlcyBuZXN0ZWQgZGlyZWN0b3JpZXMgYW5kIGZpbGUgbmFtZVxuICBwcml2YXRlIGZpbGVQYXRoUmVnZXggPSBuZXcgUmVnRXhwKFxuICAgIGAoZmlsZTovKyk/JHtob21lZGlyKCkucmVwbGFjZUFsbCgnXFxcXCcsICcvJyl9W1xcXFx3LlxcXFwtX0BcXFxcXFxcXC9dK2AsXG4gICAgJ2cnXG4gICk7XG4gIHByaXZhdGUgc3RhY2tUcmFjZVJlZ2V4ID1cbiAgICAvXlxccyphdCAoPzooKD86XFxbb2JqZWN0IG9iamVjdFxcXSk/W15cXFxcL10rKD86IFxcW2FzIFxcUytcXF0pPykgKT9cXCg/KC4qPyk6KFxcZCspKD86OihcXGQrKSk/XFwpP1xccyokL2k7XG4gIHByaXZhdGUgYXJuUmVnZXggPVxuICAgIC9hcm46W2EtejAtOV1bLS5hLXowLTldezAsNjJ9OltBLVphLXowLTldW0EtWmEtejAtOV8vLi1dezAsNjJ9OltBLVphLXowLTlfLy4tXXswLDYzfTpbQS1aYS16MC05Xy8uLV17MCw2M306W0EtWmEtejAtOV1bQS1aYS16MC05Ol8vKz0sQC4tXXswLDEwMjN9L2c7XG4gIHByaXZhdGUgc3RhY2tSZWdleCA9IC9hbXBsaWZ5LVthLXpBLVowLTktXSsvZztcbiAgLyoqXG4gICAqIGNvbnN0cnVjdG9yIGZvciBTZXJpYWxpemFibGVFcnJvclxuICAgKi9cbiAgY29uc3RydWN0b3IoZXJyb3I6IEVycm9yKSB7XG4gICAgdGhpcy5uYW1lID1cbiAgICAgICdjb2RlJyBpbiBlcnJvciAmJiBlcnJvci5jb2RlXG4gICAgICAgID8gdGhpcy5zYW5pdGl6ZShlcnJvci5jb2RlIGFzIHN0cmluZylcbiAgICAgICAgOiBlcnJvci5uYW1lO1xuICAgIHRoaXMubWVzc2FnZSA9IHRoaXMuYW5vbnltaXplUGF0aHModGhpcy5zYW5pdGl6ZShlcnJvci5tZXNzYWdlKSk7XG4gICAgdGhpcy5kZXRhaWxzID1cbiAgICAgICdkZXRhaWxzJyBpbiBlcnJvclxuICAgICAgICA/IHRoaXMuYW5vbnltaXplUGF0aHModGhpcy5zYW5pdGl6ZShlcnJvci5kZXRhaWxzIGFzIHN0cmluZykpXG4gICAgICAgIDogdW5kZWZpbmVkO1xuICAgIHRoaXMudHJhY2UgPSB0aGlzLmV4dHJhY3RTdGFja1RyYWNlKGVycm9yKTtcbiAgfVxuXG4gIHByaXZhdGUgZXh0cmFjdFN0YWNrVHJhY2UgPSAoZXJyb3I6IEVycm9yKTogVHJhY2VbXSA9PiB7XG4gICAgY29uc3QgcmVzdWx0OiBUcmFjZVtdID0gW107XG4gICAgaWYgKGVycm9yLnN0YWNrKSB7XG4gICAgICBjb25zdCBzdGFjayA9IGVycm9yLnN0YWNrLnNwbGl0KCdcXG4nKTtcbiAgICAgIHN0YWNrLmZvckVhY2goKGxpbmUpID0+IHtcbiAgICAgICAgY29uc3QgbWF0Y2ggPSB0aGlzLnN0YWNrVHJhY2VSZWdleC5leGVjKGxpbmUpO1xuICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICBjb25zdCBbLCBtZXRob2ROYW1lLCBmaWxlLCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXJdID0gbWF0Y2g7XG4gICAgICAgICAgcmVzdWx0LnB1c2goe1xuICAgICAgICAgICAgbWV0aG9kTmFtZSxcbiAgICAgICAgICAgIGZpbGUsXG4gICAgICAgICAgICBsaW5lTnVtYmVyLFxuICAgICAgICAgICAgY29sdW1uTnVtYmVyLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHByb2Nlc3NlZFBhdGhzID0gdGhpcy5wcm9jZXNzUGF0aHMoXG4gICAgICAgIHJlc3VsdC5tYXAoKHRyYWNlKSA9PiB0cmFjZS5maWxlKVxuICAgICAgKTtcbiAgICAgIHJlc3VsdC5mb3JFYWNoKCh0cmFjZSwgaW5kZXgpID0+IHtcbiAgICAgICAgdHJhY2UuZmlsZSA9IHByb2Nlc3NlZFBhdGhzW2luZGV4XTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIHByaXZhdGUgYW5vbnltaXplUGF0aHMgPSAoc3RyOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICAgIGxldCByZXN1bHQgPSBzdHI7XG4gICAgY29uc3QgbWF0Y2hlcyA9IFsuLi5yZXN1bHQubWF0Y2hBbGwodGhpcy5maWxlUGF0aFJlZ2V4KV07XG4gICAgZm9yIChjb25zdCBtYXRjaCBvZiBtYXRjaGVzKSB7XG4gICAgICByZXN1bHQgPSByZXN1bHQucmVwbGFjZShtYXRjaFswXSwgdGhpcy5wcm9jZXNzUGF0aHMoW21hdGNoWzBdXSlbMF0pO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgcHJpdmF0ZSBwcm9jZXNzUGF0aHMgPSAocGF0aHM6IHN0cmluZ1tdKTogc3RyaW5nW10gPT4ge1xuICAgIHJldHVybiBwYXRocy5tYXAoKHRyYWNlUGF0aCkgPT4ge1xuICAgICAgbGV0IHJlc3VsdCA9IHRyYWNlUGF0aDtcbiAgICAgIGlmICh0aGlzLmlzVVJMRmlsZVBhdGgocmVzdWx0KSkge1xuICAgICAgICByZXN1bHQgPSBmaWxlVVJMVG9QYXRoKHJlc3VsdCk7XG4gICAgICB9XG4gICAgICBpZiAocGF0aC5pc0Fic29sdXRlKHJlc3VsdCkpIHtcbiAgICAgICAgcmV0dXJuIHBhdGgucmVsYXRpdmUocHJvY2Vzcy5jd2QoKSwgcmVzdWx0KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9KTtcbiAgfTtcblxuICBwcml2YXRlIHJlbW92ZUFSTiA9IChzdHI/OiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICAgIHJldHVybiBzdHI/LnJlcGxhY2UodGhpcy5hcm5SZWdleCwgJzxlc2NhcGVkIEFSTj4nKSA/PyAnJztcbiAgfTtcblxuICBwcml2YXRlIHJlbW92ZVN0YWNrSWRlbnRpZmllciA9IChzdHI/OiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICAgIHJldHVybiBzdHI/LnJlcGxhY2UodGhpcy5zdGFja1JlZ2V4LCAnPGVzY2FwZWQgc3RhY2s+JykgPz8gJyc7XG4gIH07XG5cbiAgcHJpdmF0ZSBzYW5pdGl6ZSA9IChzdHI6IHN0cmluZykgPT4ge1xuICAgIGxldCByZXN1bHQgPSBzdHI7XG4gICAgcmVzdWx0ID0gdGhpcy5yZW1vdmVBUk4ocmVzdWx0KTtcbiAgICByZXN1bHQgPSB0aGlzLnJlbW92ZVN0YWNrSWRlbnRpZmllcihyZXN1bHQpO1xuICAgIHJldHVybiByZXN1bHQucmVwbGFjZUFsbCgvW1wi4p2MXS9nLCAnJyk7XG4gIH07XG5cbiAgcHJpdmF0ZSBpc1VSTEZpbGVQYXRoID0gKHBhdGg6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xuICAgIHRyeSB7XG4gICAgICBuZXcgVVJMKHBhdGgpO1xuICAgICAgcmV0dXJuIHBhdGguc3RhcnRzV2l0aCgnZmlsZTonKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH07XG59XG5cbnR5cGUgVHJhY2UgPSB7XG4gIG1ldGhvZE5hbWU6IHN0cmluZztcbiAgZmlsZTogc3RyaW5nO1xuICBsaW5lTnVtYmVyOiBzdHJpbmc7XG4gIGNvbHVtbk51bWJlcjogc3RyaW5nO1xufTtcbiJdfQ==
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aws-amplify/platform-core",
3
- "version": "1.6.1",
3
+ "version": "1.6.3",
4
4
  "type": "commonjs",
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aws-amplify/ai-constructs",
3
- "version": "1.2.2",
3
+ "version": "1.2.4",
4
4
  "type": "commonjs",
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -27,7 +27,7 @@
27
27
  "license": "Apache-2.0",
28
28
  "dependencies": {
29
29
  "@aws-amplify/backend-output-schemas": "^1.4.0",
30
- "@aws-amplify/platform-core": "^1.5.1",
30
+ "@aws-amplify/platform-core": "^1.6.2",
31
31
  "@aws-amplify/plugin-types": "^1.6.0",
32
32
  "@aws-sdk/client-bedrock-runtime": "^3.622.0",
33
33
  "@smithy/types": "^3.3.0",
@@ -35,6 +35,8 @@
35
35
  },
36
36
  "devDependencies": {
37
37
  "@aws-amplify/backend-output-storage": "^1.1.4",
38
+ "@types/lodash.transform": "^4.6.9",
39
+ "lodash.transform": "^4.6.0",
38
40
  "typescript": "^5.0.0"
39
41
  },
40
42
  "peerDependencies": {
@@ -3,6 +3,16 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## [4.2.1](https://github.com/aws-amplify/amplify-category-api/compare/@aws-amplify/graphql-auth-transformer@4.2.0...@aws-amplify/graphql-auth-transformer@4.2.1) (2025-03-06)
7
+
8
+ **Note:** Version bump only for package @aws-amplify/graphql-auth-transformer
9
+
10
+ # [4.2.0](https://github.com/aws-amplify/amplify-category-api/compare/@aws-amplify/graphql-auth-transformer@4.1.12...@aws-amplify/graphql-auth-transformer@4.2.0) (2025-02-26)
11
+
12
+ ### Features
13
+
14
+ - dynamic resolve partition in arn ([#3178](https://github.com/aws-amplify/amplify-category-api/issues/3178)) ([3aa98cd](https://github.com/aws-amplify/amplify-category-api/commit/3aa98cd4d02a1ae9c0c7bb615728225f20614fcc))
15
+
6
16
  ## [4.1.12](https://github.com/aws-amplify/amplify-category-api/compare/@aws-amplify/graphql-auth-transformer@4.1.11...@aws-amplify/graphql-auth-transformer@4.1.12) (2025-02-07)
7
17
 
8
18
  **Note:** Version bump only for package @aws-amplify/graphql-auth-transformer
@@ -943,7 +943,7 @@ class AuthTransformer extends graphql_transformer_core_1.TransformerAuthBase {
943
943
  const authRole = ctx.synthParameters.authenticatedUserRoleName;
944
944
  const authPolicyDocuments = (0, utils_1.createPolicyDocumentForManagedPolicy)(ctx, this.authPolicyResources);
945
945
  const { scope } = ctx.stackManager;
946
- const iamAuthRoleArn = iam.Role.fromRoleArn(scope, 'auth-role-name', `arn:aws:iam::${cdk.Stack.of(scope).account}:role/${authRole}`);
946
+ const iamAuthRoleArn = iam.Role.fromRoleArn(scope, 'auth-role-name', `arn:${cdk.Stack.of(scope).partition}:iam::${cdk.Stack.of(scope).account}:role/${authRole}`);
947
947
  authPolicyDocuments.forEach((authPolicyDocument, i) => {
948
948
  const paddedIndex = `${i + 1}`.padStart(2, '0');
949
949
  const resourceName = `${graphql_transformer_common_1.ResourceConstants.RESOURCES.AuthRolePolicy}${paddedIndex}`;
@@ -961,7 +961,7 @@ class AuthTransformer extends graphql_transformer_core_1.TransformerAuthBase {
961
961
  const unauthRole = ctx.synthParameters.unauthenticatedUserRoleName;
962
962
  const unauthPolicyDocuments = (0, utils_1.createPolicyDocumentForManagedPolicy)(ctx, this.unauthPolicyResources);
963
963
  const { scope } = ctx.stackManager;
964
- const iamUnauthRoleArn = iam.Role.fromRoleArn(scope, 'unauth-role-name', `arn:aws:iam::${cdk.Stack.of(scope).account}:role/${unauthRole}`);
964
+ const iamUnauthRoleArn = iam.Role.fromRoleArn(scope, 'unauth-role-name', `arn:${cdk.Stack.of(scope).partition}:iam::${cdk.Stack.of(scope).account}:role/${unauthRole}`);
965
965
  unauthPolicyDocuments.forEach((unauthPolicyDocument, i) => {
966
966
  const paddedIndex = `${i + 1}`.padStart(2, '0');
967
967
  const resourceName = `${graphql_transformer_common_1.ResourceConstants.RESOURCES.UnauthRolePolicy}${paddedIndex}`;