raindancers-cloudfront 0.0.38 → 0.0.40

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 (438) hide show
  1. package/lib/cloudfront/cloudfront-functions/auth-check.js +51 -9
  2. package/lib/cloudfront/cloudfront-functions/function-composer.d.ts +18 -0
  3. package/lib/cloudfront/cloudfront-functions/function-composer.js +44 -15
  4. package/lib/cloudfront/cloudfront-functions/modules/auth-check.js +52 -9
  5. package/lib/cloudfront/cloudfront-functions/modules/cognito-auth-check.js +48 -8
  6. package/lib/cloudfront/lambda-bundled/cognito-auth/__pycache__/six.cpython-312.pyc +0 -0
  7. package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/__init__.cpython-312.pyc +0 -0
  8. package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/_cffi_gen_src.cpython-312.pyc +0 -0
  9. package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/_imp_emulation.cpython-312.pyc +0 -0
  10. package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/_shimmed_dist_utils.cpython-312.pyc +0 -0
  11. package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/api.cpython-312.pyc +0 -0
  12. package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/backend_ctypes.cpython-312.pyc +0 -0
  13. package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/cffi_opcode.cpython-312.pyc +0 -0
  14. package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/commontypes.cpython-312.pyc +0 -0
  15. package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/cparser.cpython-312.pyc +0 -0
  16. package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/error.cpython-312.pyc +0 -0
  17. package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/ffiplatform.cpython-312.pyc +0 -0
  18. package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/gen_src.cpython-312.pyc +0 -0
  19. package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/lock.cpython-312.pyc +0 -0
  20. package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/model.cpython-312.pyc +0 -0
  21. package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/pkgconfig.cpython-312.pyc +0 -0
  22. package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/recompiler.cpython-312.pyc +0 -0
  23. package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/setuptools_ext.cpython-312.pyc +0 -0
  24. package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/vengine_cpy.cpython-312.pyc +0 -0
  25. package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/vengine_gen.cpython-312.pyc +0 -0
  26. package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/verifier.cpython-312.pyc +0 -0
  27. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/__pycache__/__about__.cpython-312.pyc +0 -0
  28. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/__pycache__/__init__.cpython-312.pyc +0 -0
  29. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/__pycache__/exceptions.cpython-312.pyc +0 -0
  30. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/__pycache__/fernet.cpython-312.pyc +0 -0
  31. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/__pycache__/utils.cpython-312.pyc +0 -0
  32. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/__pycache__/__init__.cpython-312.pyc +0 -0
  33. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/__pycache__/_oid.cpython-312.pyc +0 -0
  34. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/backends/__pycache__/__init__.cpython-312.pyc +0 -0
  35. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/backends/openssl/__pycache__/__init__.cpython-312.pyc +0 -0
  36. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/backends/openssl/__pycache__/aead.cpython-312.pyc +0 -0
  37. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/backends/openssl/__pycache__/backend.cpython-312.pyc +0 -0
  38. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/backends/openssl/__pycache__/ciphers.cpython-312.pyc +0 -0
  39. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/backends/openssl/__pycache__/cmac.cpython-312.pyc +0 -0
  40. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/backends/openssl/__pycache__/decode_asn1.cpython-312.pyc +0 -0
  41. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/backends/openssl/__pycache__/ec.cpython-312.pyc +0 -0
  42. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/backends/openssl/__pycache__/rsa.cpython-312.pyc +0 -0
  43. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/backends/openssl/__pycache__/utils.cpython-312.pyc +0 -0
  44. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/bindings/__pycache__/__init__.cpython-312.pyc +0 -0
  45. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/bindings/openssl/__pycache__/__init__.cpython-312.pyc +0 -0
  46. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/bindings/openssl/__pycache__/_conditional.cpython-312.pyc +0 -0
  47. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/bindings/openssl/__pycache__/binding.cpython-312.pyc +0 -0
  48. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/__pycache__/__init__.cpython-312.pyc +0 -0
  49. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/__pycache__/_asymmetric.cpython-312.pyc +0 -0
  50. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/__pycache__/_cipheralgorithm.cpython-312.pyc +0 -0
  51. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/__pycache__/_serialization.cpython-312.pyc +0 -0
  52. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/__pycache__/cmac.cpython-312.pyc +0 -0
  53. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/__pycache__/constant_time.cpython-312.pyc +0 -0
  54. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/__pycache__/hashes.cpython-312.pyc +0 -0
  55. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/__pycache__/hmac.cpython-312.pyc +0 -0
  56. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/__pycache__/keywrap.cpython-312.pyc +0 -0
  57. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/__pycache__/padding.cpython-312.pyc +0 -0
  58. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/__pycache__/poly1305.cpython-312.pyc +0 -0
  59. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/__init__.cpython-312.pyc +0 -0
  60. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/dh.cpython-312.pyc +0 -0
  61. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/dsa.cpython-312.pyc +0 -0
  62. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/ec.cpython-312.pyc +0 -0
  63. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/ed25519.cpython-312.pyc +0 -0
  64. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/ed448.cpython-312.pyc +0 -0
  65. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/padding.cpython-312.pyc +0 -0
  66. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/rsa.cpython-312.pyc +0 -0
  67. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/types.cpython-312.pyc +0 -0
  68. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/utils.cpython-312.pyc +0 -0
  69. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/x25519.cpython-312.pyc +0 -0
  70. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/x448.cpython-312.pyc +0 -0
  71. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/ciphers/__pycache__/__init__.cpython-312.pyc +0 -0
  72. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/ciphers/__pycache__/aead.cpython-312.pyc +0 -0
  73. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/ciphers/__pycache__/algorithms.cpython-312.pyc +0 -0
  74. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/ciphers/__pycache__/base.cpython-312.pyc +0 -0
  75. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/ciphers/__pycache__/modes.cpython-312.pyc +0 -0
  76. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/kdf/__pycache__/__init__.cpython-312.pyc +0 -0
  77. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/kdf/__pycache__/concatkdf.cpython-312.pyc +0 -0
  78. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/kdf/__pycache__/hkdf.cpython-312.pyc +0 -0
  79. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/kdf/__pycache__/kbkdf.cpython-312.pyc +0 -0
  80. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/kdf/__pycache__/pbkdf2.cpython-312.pyc +0 -0
  81. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/kdf/__pycache__/scrypt.cpython-312.pyc +0 -0
  82. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/kdf/__pycache__/x963kdf.cpython-312.pyc +0 -0
  83. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/serialization/__pycache__/__init__.cpython-312.pyc +0 -0
  84. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/serialization/__pycache__/base.cpython-312.pyc +0 -0
  85. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/serialization/__pycache__/pkcs12.cpython-312.pyc +0 -0
  86. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/serialization/__pycache__/pkcs7.cpython-312.pyc +0 -0
  87. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/serialization/__pycache__/ssh.cpython-312.pyc +0 -0
  88. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/twofactor/__pycache__/__init__.cpython-312.pyc +0 -0
  89. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/twofactor/__pycache__/hotp.cpython-312.pyc +0 -0
  90. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/twofactor/__pycache__/totp.cpython-312.pyc +0 -0
  91. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/x509/__pycache__/__init__.cpython-312.pyc +0 -0
  92. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/x509/__pycache__/base.cpython-312.pyc +0 -0
  93. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/x509/__pycache__/certificate_transparency.cpython-312.pyc +0 -0
  94. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/x509/__pycache__/extensions.cpython-312.pyc +0 -0
  95. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/x509/__pycache__/general_name.cpython-312.pyc +0 -0
  96. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/x509/__pycache__/name.cpython-312.pyc +0 -0
  97. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/x509/__pycache__/ocsp.cpython-312.pyc +0 -0
  98. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/x509/__pycache__/oid.cpython-312.pyc +0 -0
  99. package/lib/cloudfront/lambda-bundled/cognito-auth/jwt/__pycache__/__init__.cpython-312.pyc +0 -0
  100. package/lib/cloudfront/lambda-bundled/cognito-auth/jwt/__pycache__/algorithms.cpython-312.pyc +0 -0
  101. package/lib/cloudfront/lambda-bundled/cognito-auth/jwt/__pycache__/api_jwk.cpython-312.pyc +0 -0
  102. package/lib/cloudfront/lambda-bundled/cognito-auth/jwt/__pycache__/api_jws.cpython-312.pyc +0 -0
  103. package/lib/cloudfront/lambda-bundled/cognito-auth/jwt/__pycache__/api_jwt.cpython-312.pyc +0 -0
  104. package/lib/cloudfront/lambda-bundled/cognito-auth/jwt/__pycache__/exceptions.cpython-312.pyc +0 -0
  105. package/lib/cloudfront/lambda-bundled/cognito-auth/jwt/__pycache__/help.cpython-312.pyc +0 -0
  106. package/lib/cloudfront/lambda-bundled/cognito-auth/jwt/__pycache__/jwk_set_cache.cpython-312.pyc +0 -0
  107. package/lib/cloudfront/lambda-bundled/cognito-auth/jwt/__pycache__/jwks_client.cpython-312.pyc +0 -0
  108. package/lib/cloudfront/lambda-bundled/cognito-auth/jwt/__pycache__/types.cpython-312.pyc +0 -0
  109. package/lib/cloudfront/lambda-bundled/cognito-auth/jwt/__pycache__/utils.cpython-312.pyc +0 -0
  110. package/lib/cloudfront/lambda-bundled/cognito-auth/jwt/__pycache__/warnings.cpython-312.pyc +0 -0
  111. package/lib/cloudfront/lambda-bundled/cognito-auth/pycparser/__pycache__/__init__.cpython-312.pyc +0 -0
  112. package/lib/cloudfront/lambda-bundled/cognito-auth/pycparser/__pycache__/_ast_gen.cpython-312.pyc +0 -0
  113. package/lib/cloudfront/lambda-bundled/cognito-auth/pycparser/__pycache__/ast_transforms.cpython-312.pyc +0 -0
  114. package/lib/cloudfront/lambda-bundled/cognito-auth/pycparser/__pycache__/c_ast.cpython-312.pyc +0 -0
  115. package/lib/cloudfront/lambda-bundled/cognito-auth/pycparser/__pycache__/c_generator.cpython-312.pyc +0 -0
  116. package/lib/cloudfront/lambda-bundled/cognito-auth/pycparser/__pycache__/c_lexer.cpython-312.pyc +0 -0
  117. package/lib/cloudfront/lambda-bundled/cognito-auth/pycparser/__pycache__/c_parser.cpython-312.pyc +0 -0
  118. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/__pycache__/__init__.cpython-312.pyc +0 -0
  119. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/__pycache__/debug.cpython-312.pyc +0 -0
  120. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/__pycache__/error.cpython-312.pyc +0 -0
  121. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/codec/__pycache__/__init__.cpython-312.pyc +0 -0
  122. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/codec/__pycache__/streaming.cpython-312.pyc +0 -0
  123. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/codec/ber/__pycache__/__init__.cpython-312.pyc +0 -0
  124. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/codec/ber/__pycache__/decoder.cpython-312.pyc +0 -0
  125. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/codec/ber/__pycache__/encoder.cpython-312.pyc +0 -0
  126. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/codec/ber/__pycache__/eoo.cpython-312.pyc +0 -0
  127. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/codec/cer/__pycache__/__init__.cpython-312.pyc +0 -0
  128. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/codec/cer/__pycache__/decoder.cpython-312.pyc +0 -0
  129. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/codec/cer/__pycache__/encoder.cpython-312.pyc +0 -0
  130. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/codec/der/__pycache__/__init__.cpython-312.pyc +0 -0
  131. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/codec/der/__pycache__/decoder.cpython-312.pyc +0 -0
  132. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/codec/der/__pycache__/encoder.cpython-312.pyc +0 -0
  133. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/codec/native/__pycache__/__init__.cpython-312.pyc +0 -0
  134. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/codec/native/__pycache__/decoder.cpython-312.pyc +0 -0
  135. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/codec/native/__pycache__/encoder.cpython-312.pyc +0 -0
  136. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/compat/__pycache__/__init__.cpython-312.pyc +0 -0
  137. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/compat/__pycache__/integer.cpython-312.pyc +0 -0
  138. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/type/__pycache__/__init__.cpython-312.pyc +0 -0
  139. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/type/__pycache__/base.cpython-312.pyc +0 -0
  140. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/type/__pycache__/char.cpython-312.pyc +0 -0
  141. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/type/__pycache__/constraint.cpython-312.pyc +0 -0
  142. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/type/__pycache__/error.cpython-312.pyc +0 -0
  143. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/type/__pycache__/namedtype.cpython-312.pyc +0 -0
  144. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/type/__pycache__/namedval.cpython-312.pyc +0 -0
  145. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/type/__pycache__/opentype.cpython-312.pyc +0 -0
  146. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/type/__pycache__/tag.cpython-312.pyc +0 -0
  147. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/type/__pycache__/tagmap.cpython-312.pyc +0 -0
  148. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/type/__pycache__/univ.cpython-312.pyc +0 -0
  149. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/type/__pycache__/useful.cpython-312.pyc +0 -0
  150. package/lib/cloudfront/lambda-bundled/cognito-customui-session/rsa/__pycache__/__init__.cpython-312.pyc +0 -0
  151. package/lib/cloudfront/lambda-bundled/cognito-customui-session/rsa/__pycache__/asn1.cpython-312.pyc +0 -0
  152. package/lib/cloudfront/lambda-bundled/cognito-customui-session/rsa/__pycache__/cli.cpython-312.pyc +0 -0
  153. package/lib/cloudfront/lambda-bundled/cognito-customui-session/rsa/__pycache__/common.cpython-312.pyc +0 -0
  154. package/lib/cloudfront/lambda-bundled/cognito-customui-session/rsa/__pycache__/core.cpython-312.pyc +0 -0
  155. package/lib/cloudfront/lambda-bundled/cognito-customui-session/rsa/__pycache__/key.cpython-312.pyc +0 -0
  156. package/lib/cloudfront/lambda-bundled/cognito-customui-session/rsa/__pycache__/parallel.cpython-312.pyc +0 -0
  157. package/lib/cloudfront/lambda-bundled/cognito-customui-session/rsa/__pycache__/pem.cpython-312.pyc +0 -0
  158. package/lib/cloudfront/lambda-bundled/cognito-customui-session/rsa/__pycache__/pkcs1.cpython-312.pyc +0 -0
  159. package/lib/cloudfront/lambda-bundled/cognito-customui-session/rsa/__pycache__/pkcs1_v2.cpython-312.pyc +0 -0
  160. package/lib/cloudfront/lambda-bundled/cognito-customui-session/rsa/__pycache__/prime.cpython-312.pyc +0 -0
  161. package/lib/cloudfront/lambda-bundled/cognito-customui-session/rsa/__pycache__/randnum.cpython-312.pyc +0 -0
  162. package/lib/cloudfront/lambda-bundled/cognito-customui-session/rsa/__pycache__/transform.cpython-312.pyc +0 -0
  163. package/lib/cloudfront/lambda-bundled/cognito-customui-session/rsa/__pycache__/util.cpython-312.pyc +0 -0
  164. package/lib/cloudfront/lambda-bundled/edge-auth/__pycache__/six.cpython-312.pyc +0 -0
  165. package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/__init__.cpython-312.pyc +0 -0
  166. package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/_cffi_gen_src.cpython-312.pyc +0 -0
  167. package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/_imp_emulation.cpython-312.pyc +0 -0
  168. package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/_shimmed_dist_utils.cpython-312.pyc +0 -0
  169. package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/api.cpython-312.pyc +0 -0
  170. package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/backend_ctypes.cpython-312.pyc +0 -0
  171. package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/cffi_opcode.cpython-312.pyc +0 -0
  172. package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/commontypes.cpython-312.pyc +0 -0
  173. package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/cparser.cpython-312.pyc +0 -0
  174. package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/error.cpython-312.pyc +0 -0
  175. package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/ffiplatform.cpython-312.pyc +0 -0
  176. package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/gen_src.cpython-312.pyc +0 -0
  177. package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/lock.cpython-312.pyc +0 -0
  178. package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/model.cpython-312.pyc +0 -0
  179. package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/pkgconfig.cpython-312.pyc +0 -0
  180. package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/recompiler.cpython-312.pyc +0 -0
  181. package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/setuptools_ext.cpython-312.pyc +0 -0
  182. package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/vengine_cpy.cpython-312.pyc +0 -0
  183. package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/vengine_gen.cpython-312.pyc +0 -0
  184. package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/verifier.cpython-312.pyc +0 -0
  185. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/__pycache__/__about__.cpython-312.pyc +0 -0
  186. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/__pycache__/__init__.cpython-312.pyc +0 -0
  187. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/__pycache__/exceptions.cpython-312.pyc +0 -0
  188. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/__pycache__/fernet.cpython-312.pyc +0 -0
  189. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/__pycache__/utils.cpython-312.pyc +0 -0
  190. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/__pycache__/__init__.cpython-312.pyc +0 -0
  191. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/__pycache__/_oid.cpython-312.pyc +0 -0
  192. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/backends/__pycache__/__init__.cpython-312.pyc +0 -0
  193. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/backends/openssl/__pycache__/__init__.cpython-312.pyc +0 -0
  194. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/backends/openssl/__pycache__/aead.cpython-312.pyc +0 -0
  195. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/backends/openssl/__pycache__/backend.cpython-312.pyc +0 -0
  196. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/backends/openssl/__pycache__/ciphers.cpython-312.pyc +0 -0
  197. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/backends/openssl/__pycache__/cmac.cpython-312.pyc +0 -0
  198. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/backends/openssl/__pycache__/decode_asn1.cpython-312.pyc +0 -0
  199. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/backends/openssl/__pycache__/ec.cpython-312.pyc +0 -0
  200. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/backends/openssl/__pycache__/rsa.cpython-312.pyc +0 -0
  201. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/backends/openssl/__pycache__/utils.cpython-312.pyc +0 -0
  202. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/bindings/__pycache__/__init__.cpython-312.pyc +0 -0
  203. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/bindings/openssl/__pycache__/__init__.cpython-312.pyc +0 -0
  204. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/bindings/openssl/__pycache__/_conditional.cpython-312.pyc +0 -0
  205. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/bindings/openssl/__pycache__/binding.cpython-312.pyc +0 -0
  206. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/__pycache__/__init__.cpython-312.pyc +0 -0
  207. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/__pycache__/_asymmetric.cpython-312.pyc +0 -0
  208. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/__pycache__/_cipheralgorithm.cpython-312.pyc +0 -0
  209. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/__pycache__/_serialization.cpython-312.pyc +0 -0
  210. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/__pycache__/cmac.cpython-312.pyc +0 -0
  211. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/__pycache__/constant_time.cpython-312.pyc +0 -0
  212. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/__pycache__/hashes.cpython-312.pyc +0 -0
  213. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/__pycache__/hmac.cpython-312.pyc +0 -0
  214. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/__pycache__/keywrap.cpython-312.pyc +0 -0
  215. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/__pycache__/padding.cpython-312.pyc +0 -0
  216. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/__pycache__/poly1305.cpython-312.pyc +0 -0
  217. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/__init__.cpython-312.pyc +0 -0
  218. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/dh.cpython-312.pyc +0 -0
  219. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/dsa.cpython-312.pyc +0 -0
  220. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/ec.cpython-312.pyc +0 -0
  221. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/ed25519.cpython-312.pyc +0 -0
  222. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/ed448.cpython-312.pyc +0 -0
  223. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/padding.cpython-312.pyc +0 -0
  224. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/rsa.cpython-312.pyc +0 -0
  225. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/types.cpython-312.pyc +0 -0
  226. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/utils.cpython-312.pyc +0 -0
  227. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/x25519.cpython-312.pyc +0 -0
  228. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/x448.cpython-312.pyc +0 -0
  229. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/ciphers/__pycache__/__init__.cpython-312.pyc +0 -0
  230. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/ciphers/__pycache__/aead.cpython-312.pyc +0 -0
  231. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/ciphers/__pycache__/algorithms.cpython-312.pyc +0 -0
  232. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/ciphers/__pycache__/base.cpython-312.pyc +0 -0
  233. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/ciphers/__pycache__/modes.cpython-312.pyc +0 -0
  234. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/kdf/__pycache__/__init__.cpython-312.pyc +0 -0
  235. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/kdf/__pycache__/concatkdf.cpython-312.pyc +0 -0
  236. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/kdf/__pycache__/hkdf.cpython-312.pyc +0 -0
  237. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/kdf/__pycache__/kbkdf.cpython-312.pyc +0 -0
  238. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/kdf/__pycache__/pbkdf2.cpython-312.pyc +0 -0
  239. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/kdf/__pycache__/scrypt.cpython-312.pyc +0 -0
  240. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/kdf/__pycache__/x963kdf.cpython-312.pyc +0 -0
  241. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/serialization/__pycache__/__init__.cpython-312.pyc +0 -0
  242. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/serialization/__pycache__/base.cpython-312.pyc +0 -0
  243. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/serialization/__pycache__/pkcs12.cpython-312.pyc +0 -0
  244. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/serialization/__pycache__/pkcs7.cpython-312.pyc +0 -0
  245. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/serialization/__pycache__/ssh.cpython-312.pyc +0 -0
  246. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/twofactor/__pycache__/__init__.cpython-312.pyc +0 -0
  247. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/twofactor/__pycache__/hotp.cpython-312.pyc +0 -0
  248. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/twofactor/__pycache__/totp.cpython-312.pyc +0 -0
  249. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/x509/__pycache__/__init__.cpython-312.pyc +0 -0
  250. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/x509/__pycache__/base.cpython-312.pyc +0 -0
  251. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/x509/__pycache__/certificate_transparency.cpython-312.pyc +0 -0
  252. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/x509/__pycache__/extensions.cpython-312.pyc +0 -0
  253. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/x509/__pycache__/general_name.cpython-312.pyc +0 -0
  254. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/x509/__pycache__/name.cpython-312.pyc +0 -0
  255. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/x509/__pycache__/ocsp.cpython-312.pyc +0 -0
  256. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/x509/__pycache__/oid.cpython-312.pyc +0 -0
  257. package/lib/cloudfront/lambda-bundled/edge-auth/jwt/__pycache__/__init__.cpython-312.pyc +0 -0
  258. package/lib/cloudfront/lambda-bundled/edge-auth/jwt/__pycache__/algorithms.cpython-312.pyc +0 -0
  259. package/lib/cloudfront/lambda-bundled/edge-auth/jwt/__pycache__/api_jwk.cpython-312.pyc +0 -0
  260. package/lib/cloudfront/lambda-bundled/edge-auth/jwt/__pycache__/api_jws.cpython-312.pyc +0 -0
  261. package/lib/cloudfront/lambda-bundled/edge-auth/jwt/__pycache__/api_jwt.cpython-312.pyc +0 -0
  262. package/lib/cloudfront/lambda-bundled/edge-auth/jwt/__pycache__/exceptions.cpython-312.pyc +0 -0
  263. package/lib/cloudfront/lambda-bundled/edge-auth/jwt/__pycache__/help.cpython-312.pyc +0 -0
  264. package/lib/cloudfront/lambda-bundled/edge-auth/jwt/__pycache__/jwk_set_cache.cpython-312.pyc +0 -0
  265. package/lib/cloudfront/lambda-bundled/edge-auth/jwt/__pycache__/jwks_client.cpython-312.pyc +0 -0
  266. package/lib/cloudfront/lambda-bundled/edge-auth/jwt/__pycache__/types.cpython-312.pyc +0 -0
  267. package/lib/cloudfront/lambda-bundled/edge-auth/jwt/__pycache__/utils.cpython-312.pyc +0 -0
  268. package/lib/cloudfront/lambda-bundled/edge-auth/jwt/__pycache__/warnings.cpython-312.pyc +0 -0
  269. package/lib/cloudfront/lambda-bundled/edge-auth/pycparser/__pycache__/__init__.cpython-312.pyc +0 -0
  270. package/lib/cloudfront/lambda-bundled/edge-auth/pycparser/__pycache__/_ast_gen.cpython-312.pyc +0 -0
  271. package/lib/cloudfront/lambda-bundled/edge-auth/pycparser/__pycache__/ast_transforms.cpython-312.pyc +0 -0
  272. package/lib/cloudfront/lambda-bundled/edge-auth/pycparser/__pycache__/c_ast.cpython-312.pyc +0 -0
  273. package/lib/cloudfront/lambda-bundled/edge-auth/pycparser/__pycache__/c_generator.cpython-312.pyc +0 -0
  274. package/lib/cloudfront/lambda-bundled/edge-auth/pycparser/__pycache__/c_lexer.cpython-312.pyc +0 -0
  275. package/lib/cloudfront/lambda-bundled/edge-auth/pycparser/__pycache__/c_parser.cpython-312.pyc +0 -0
  276. package/lib/cloudfront/lambda-bundled/hmacSecret/__pycache__/six.cpython-312.pyc +0 -0
  277. package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/__pycache__/__init__.cpython-312.pyc +0 -0
  278. package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/__pycache__/_aws_iot_metrics.cpython-312.pyc +0 -0
  279. package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/__pycache__/_test.cpython-312.pyc +0 -0
  280. package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/__pycache__/auth.cpython-312.pyc +0 -0
  281. package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/__pycache__/cbor.cpython-312.pyc +0 -0
  282. package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/__pycache__/checksums.cpython-312.pyc +0 -0
  283. package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/__pycache__/common.cpython-312.pyc +0 -0
  284. package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/__pycache__/crypto.cpython-312.pyc +0 -0
  285. package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/__pycache__/exceptions.cpython-312.pyc +0 -0
  286. package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/__pycache__/http.cpython-312.pyc +0 -0
  287. package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/__pycache__/io.cpython-312.pyc +0 -0
  288. package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/__pycache__/logging.cpython-312.pyc +0 -0
  289. package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/__pycache__/mqtt.cpython-312.pyc +0 -0
  290. package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/__pycache__/mqtt5.cpython-312.pyc +0 -0
  291. package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/__pycache__/mqtt_request_response.cpython-312.pyc +0 -0
  292. package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/__pycache__/s3.cpython-312.pyc +0 -0
  293. package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/__pycache__/websocket.cpython-312.pyc +0 -0
  294. package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/aio/__pycache__/__init__.cpython-312.pyc +0 -0
  295. package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/aio/__pycache__/http.cpython-312.pyc +0 -0
  296. package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/eventstream/__pycache__/__init__.cpython-312.pyc +0 -0
  297. package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/eventstream/__pycache__/rpc.cpython-312.pyc +0 -0
  298. package/lib/cloudfront/lambda-bundled/hmacSecret/bin/__pycache__/jp.cpython-312.pyc +0 -0
  299. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/__init__.cpython-312.pyc +0 -0
  300. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/args.cpython-312.pyc +0 -0
  301. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/auth.cpython-312.pyc +0 -0
  302. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/awsrequest.cpython-312.pyc +0 -0
  303. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/client.cpython-312.pyc +0 -0
  304. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/compat.cpython-312.pyc +0 -0
  305. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/compress.cpython-312.pyc +0 -0
  306. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/config.cpython-312.pyc +0 -0
  307. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/configloader.cpython-312.pyc +0 -0
  308. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/configprovider.cpython-312.pyc +0 -0
  309. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/context.cpython-312.pyc +0 -0
  310. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/credentials.cpython-312.pyc +0 -0
  311. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/discovery.cpython-312.pyc +0 -0
  312. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/endpoint.cpython-312.pyc +0 -0
  313. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/endpoint_provider.cpython-312.pyc +0 -0
  314. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/errorfactory.cpython-312.pyc +0 -0
  315. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/eventstream.cpython-312.pyc +0 -0
  316. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/exceptions.cpython-312.pyc +0 -0
  317. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/handlers.cpython-312.pyc +0 -0
  318. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/history.cpython-312.pyc +0 -0
  319. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/hooks.cpython-312.pyc +0 -0
  320. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/httpchecksum.cpython-312.pyc +0 -0
  321. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/httpsession.cpython-312.pyc +0 -0
  322. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/loaders.cpython-312.pyc +0 -0
  323. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/model.cpython-312.pyc +0 -0
  324. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/monitoring.cpython-312.pyc +0 -0
  325. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/paginate.cpython-312.pyc +0 -0
  326. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/parsers.cpython-312.pyc +0 -0
  327. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/plugin.cpython-312.pyc +0 -0
  328. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/regions.cpython-312.pyc +0 -0
  329. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/response.cpython-312.pyc +0 -0
  330. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/retryhandler.cpython-312.pyc +0 -0
  331. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/serialize.cpython-312.pyc +0 -0
  332. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/session.cpython-312.pyc +0 -0
  333. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/signers.cpython-312.pyc +0 -0
  334. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/stub.cpython-312.pyc +0 -0
  335. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/tokens.cpython-312.pyc +0 -0
  336. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/translate.cpython-312.pyc +0 -0
  337. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/useragent.cpython-312.pyc +0 -0
  338. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/utils.cpython-312.pyc +0 -0
  339. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/validate.cpython-312.pyc +0 -0
  340. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/waiter.cpython-312.pyc +0 -0
  341. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/crt/__pycache__/__init__.cpython-312.pyc +0 -0
  342. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/crt/__pycache__/auth.cpython-312.pyc +0 -0
  343. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/docs/__pycache__/__init__.cpython-312.pyc +0 -0
  344. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/docs/__pycache__/client.cpython-312.pyc +0 -0
  345. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/docs/__pycache__/docstring.cpython-312.pyc +0 -0
  346. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/docs/__pycache__/example.cpython-312.pyc +0 -0
  347. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/docs/__pycache__/method.cpython-312.pyc +0 -0
  348. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/docs/__pycache__/paginator.cpython-312.pyc +0 -0
  349. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/docs/__pycache__/params.cpython-312.pyc +0 -0
  350. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/docs/__pycache__/service.cpython-312.pyc +0 -0
  351. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/docs/__pycache__/shape.cpython-312.pyc +0 -0
  352. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/docs/__pycache__/sharedexample.cpython-312.pyc +0 -0
  353. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/docs/__pycache__/translator.cpython-312.pyc +0 -0
  354. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/docs/__pycache__/utils.cpython-312.pyc +0 -0
  355. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/docs/__pycache__/waiter.cpython-312.pyc +0 -0
  356. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/docs/bcdoc/__pycache__/__init__.cpython-312.pyc +0 -0
  357. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/docs/bcdoc/__pycache__/docstringparser.cpython-312.pyc +0 -0
  358. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/docs/bcdoc/__pycache__/restdoc.cpython-312.pyc +0 -0
  359. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/docs/bcdoc/__pycache__/style.cpython-312.pyc +0 -0
  360. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/retries/__pycache__/__init__.cpython-312.pyc +0 -0
  361. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/retries/__pycache__/adaptive.cpython-312.pyc +0 -0
  362. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/retries/__pycache__/base.cpython-312.pyc +0 -0
  363. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/retries/__pycache__/bucket.cpython-312.pyc +0 -0
  364. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/retries/__pycache__/quota.cpython-312.pyc +0 -0
  365. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/retries/__pycache__/special.cpython-312.pyc +0 -0
  366. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/retries/__pycache__/standard.cpython-312.pyc +0 -0
  367. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/retries/__pycache__/throttling.cpython-312.pyc +0 -0
  368. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/vendored/__pycache__/__init__.cpython-312.pyc +0 -0
  369. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/vendored/__pycache__/six.cpython-312.pyc +0 -0
  370. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/vendored/requests/__pycache__/__init__.cpython-312.pyc +0 -0
  371. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/vendored/requests/__pycache__/exceptions.cpython-312.pyc +0 -0
  372. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/vendored/requests/packages/__pycache__/__init__.cpython-312.pyc +0 -0
  373. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/vendored/requests/packages/urllib3/__pycache__/__init__.cpython-312.pyc +0 -0
  374. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/vendored/requests/packages/urllib3/__pycache__/exceptions.cpython-312.pyc +0 -0
  375. package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/__pycache__/__init__.cpython-312.pyc +0 -0
  376. package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/__pycache__/_common.cpython-312.pyc +0 -0
  377. package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/__pycache__/_version.cpython-312.pyc +0 -0
  378. package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/__pycache__/easter.cpython-312.pyc +0 -0
  379. package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/__pycache__/relativedelta.cpython-312.pyc +0 -0
  380. package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/__pycache__/rrule.cpython-312.pyc +0 -0
  381. package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/__pycache__/tzwin.cpython-312.pyc +0 -0
  382. package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/__pycache__/utils.cpython-312.pyc +0 -0
  383. package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/parser/__pycache__/__init__.cpython-312.pyc +0 -0
  384. package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/parser/__pycache__/_parser.cpython-312.pyc +0 -0
  385. package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/parser/__pycache__/isoparser.cpython-312.pyc +0 -0
  386. package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/tz/__pycache__/__init__.cpython-312.pyc +0 -0
  387. package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/tz/__pycache__/_common.cpython-312.pyc +0 -0
  388. package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/tz/__pycache__/_factories.cpython-312.pyc +0 -0
  389. package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/tz/__pycache__/tz.cpython-312.pyc +0 -0
  390. package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/tz/__pycache__/win.cpython-312.pyc +0 -0
  391. package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/zoneinfo/__pycache__/__init__.cpython-312.pyc +0 -0
  392. package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/zoneinfo/__pycache__/rebuild.cpython-312.pyc +0 -0
  393. package/lib/cloudfront/lambda-bundled/hmacSecret/jmespath/__pycache__/__init__.cpython-312.pyc +0 -0
  394. package/lib/cloudfront/lambda-bundled/hmacSecret/jmespath/__pycache__/ast.cpython-312.pyc +0 -0
  395. package/lib/cloudfront/lambda-bundled/hmacSecret/jmespath/__pycache__/compat.cpython-312.pyc +0 -0
  396. package/lib/cloudfront/lambda-bundled/hmacSecret/jmespath/__pycache__/exceptions.cpython-312.pyc +0 -0
  397. package/lib/cloudfront/lambda-bundled/hmacSecret/jmespath/__pycache__/functions.cpython-312.pyc +0 -0
  398. package/lib/cloudfront/lambda-bundled/hmacSecret/jmespath/__pycache__/lexer.cpython-312.pyc +0 -0
  399. package/lib/cloudfront/lambda-bundled/hmacSecret/jmespath/__pycache__/parser.cpython-312.pyc +0 -0
  400. package/lib/cloudfront/lambda-bundled/hmacSecret/jmespath/__pycache__/visitor.cpython-312.pyc +0 -0
  401. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/__pycache__/__init__.cpython-312.pyc +0 -0
  402. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/__pycache__/_base_connection.cpython-312.pyc +0 -0
  403. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/__pycache__/_collections.cpython-312.pyc +0 -0
  404. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/__pycache__/_request_methods.cpython-312.pyc +0 -0
  405. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/__pycache__/_version.cpython-312.pyc +0 -0
  406. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/__pycache__/connection.cpython-312.pyc +0 -0
  407. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/__pycache__/connectionpool.cpython-312.pyc +0 -0
  408. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/__pycache__/exceptions.cpython-312.pyc +0 -0
  409. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/__pycache__/fields.cpython-312.pyc +0 -0
  410. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/__pycache__/filepost.cpython-312.pyc +0 -0
  411. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/__pycache__/poolmanager.cpython-312.pyc +0 -0
  412. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/__pycache__/response.cpython-312.pyc +0 -0
  413. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/contrib/__pycache__/__init__.cpython-312.pyc +0 -0
  414. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/contrib/__pycache__/pyopenssl.cpython-312.pyc +0 -0
  415. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/contrib/__pycache__/socks.cpython-312.pyc +0 -0
  416. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/contrib/emscripten/__pycache__/__init__.cpython-312.pyc +0 -0
  417. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/contrib/emscripten/__pycache__/connection.cpython-312.pyc +0 -0
  418. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/contrib/emscripten/__pycache__/fetch.cpython-312.pyc +0 -0
  419. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/contrib/emscripten/__pycache__/request.cpython-312.pyc +0 -0
  420. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/contrib/emscripten/__pycache__/response.cpython-312.pyc +0 -0
  421. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/http2/__pycache__/__init__.cpython-312.pyc +0 -0
  422. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/http2/__pycache__/connection.cpython-312.pyc +0 -0
  423. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/http2/__pycache__/probe.cpython-312.pyc +0 -0
  424. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/util/__pycache__/__init__.cpython-312.pyc +0 -0
  425. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/util/__pycache__/connection.cpython-312.pyc +0 -0
  426. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/util/__pycache__/proxy.cpython-312.pyc +0 -0
  427. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/util/__pycache__/request.cpython-312.pyc +0 -0
  428. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/util/__pycache__/response.cpython-312.pyc +0 -0
  429. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/util/__pycache__/retry.cpython-312.pyc +0 -0
  430. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/util/__pycache__/ssl_.cpython-312.pyc +0 -0
  431. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/util/__pycache__/ssl_match_hostname.cpython-312.pyc +0 -0
  432. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/util/__pycache__/ssltransport.cpython-312.pyc +0 -0
  433. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/util/__pycache__/timeout.cpython-312.pyc +0 -0
  434. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/util/__pycache__/url.cpython-312.pyc +0 -0
  435. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/util/__pycache__/util.cpython-312.pyc +0 -0
  436. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/util/__pycache__/wait.cpython-312.pyc +0 -0
  437. package/lib/cloudfront/patterns/securedCloudFront.js +14 -2
  438. package/package.json +1 -1
@@ -142,11 +142,53 @@ function getOriginalPath(request) {
142
142
  return request.uri + '?' + qs;
143
143
  }
144
144
 
145
- function redirectToAuth(originalPath, host) {
145
+ // A live PKCE sign-in is represented by the pair of cookies (oauth_state +
146
+ // code_verifier) minted on the redirect that started it. The browser drops both
147
+ // at Max-Age=600, so their PRESENCE (with a well-formed, decodable state) is the
148
+ // practical "unexpired flow" signal available to a CloudFront Function — it has
149
+ // no way to read a cookie's own expiry. Reusing an existing pair instead of
150
+ // minting a new one is what stops a redirect provoked mid-sign-in (e.g. a
151
+ // background notification poll from a sibling panel on the shared cookie domain)
152
+ // from overwriting the state the in-flight sign-in carries, which the callback
153
+ // compares strictly and rejects with "400 Invalid state parameter".
154
+ function inflightAuthFlow(cookies) {
155
+ if (!cookies) { return null; }
156
+ var stateCookie = cookies.oauth_state;
157
+ var verifierCookie = cookies.code_verifier;
158
+ if (!stateCookie || !stateCookie.value || !verifierCookie || !verifierCookie.value) {
159
+ return null;
160
+ }
161
+ try {
162
+ JSON.parse(base64urlDecode(stateCookie.value));
163
+ } catch (e) {
164
+ return null;
165
+ }
166
+ return { state: stateCookie.value, codeVerifier: verifierCookie.value };
167
+ }
168
+
169
+ function redirectToAuth(originalPath, host, cookies) {
170
+ var domainAttr = COOKIE_DOMAIN ? '; Domain=' + COOKIE_DOMAIN : '';
171
+
172
+ // If a sign-in is already in flight, reissue the redirect REUSING its state
173
+ // and verifier, and set NO cookies — do not clobber the live flow. The
174
+ // challenge is re-derived from the stored verifier so the authorize URL stays
175
+ // consistent with the PKCE exchange the callback performs for whichever flow
176
+ // completes.
177
+ var inflight = inflightAuthFlow(cookies);
178
+ if (inflight) {
179
+ var reusedChallenge = generateCodeChallenge(inflight.codeVerifier);
180
+ return {
181
+ statusCode: 302,
182
+ headers: {
183
+ location: { value: buildAzureAuthUrl(inflight.state, reusedChallenge, host) },
184
+ 'cache-control': { value: 'no-store' }
185
+ }
186
+ };
187
+ }
188
+
146
189
  var state = generateState(originalPath, host);
147
190
  var codeVerifier = generateCodeVerifier();
148
191
  var codeChallenge = generateCodeChallenge(codeVerifier);
149
- var domainAttr = COOKIE_DOMAIN ? '; Domain=' + COOKIE_DOMAIN : '';
150
192
  return {
151
193
  statusCode: 302,
152
194
  headers: {
@@ -203,13 +245,13 @@ async function handler(event) {
203
245
  // Check for session cookie (supports both __Secure- with domain and __Host- without)
204
246
  var sessionCookie = cookies['__Secure-auth_session'] || cookies['__Host-auth_session'];
205
247
  if (!sessionCookie) {
206
- return redirectToAuth(getOriginalPath(request), host);
248
+ return redirectToAuth(getOriginalPath(request), host, request.cookies);
207
249
  }
208
250
 
209
251
  var token = sessionCookie.value;
210
252
 
211
253
  if (!token || token.length === 0) {
212
- return redirectToAuth(getOriginalPath(request), host);
254
+ return redirectToAuth(getOriginalPath(request), host, request.cookies);
213
255
  }
214
256
 
215
257
  try {
@@ -217,12 +259,12 @@ async function handler(event) {
217
259
  var parts = token.split('.');
218
260
 
219
261
  if (parts.length !== 3) {
220
- return redirectToAuth(originalPath, host);
262
+ return redirectToAuth(originalPath, host, request.cookies);
221
263
  }
222
264
 
223
265
  var isValid = await validateHmacSignature(token);
224
266
  if (!isValid) {
225
- return redirectToAuth(originalPath, host);
267
+ return redirectToAuth(originalPath, host, request.cookies);
226
268
  }
227
269
 
228
270
  var payload = JSON.parse(base64urlDecode(parts[1]));
@@ -232,7 +274,7 @@ async function handler(event) {
232
274
  if (ENABLE_REFRESH) {
233
275
  return redirectToRefresh(originalPath, host);
234
276
  }
235
- return redirectToAuth(originalPath, host);
277
+ return redirectToAuth(originalPath, host, request.cookies);
236
278
  }
237
279
 
238
280
  // Check if session is revoked (denylist approach)
@@ -242,7 +284,7 @@ async function handler(event) {
242
284
  var isRevoked = await kvsHandle.get('revoked:' + jti);
243
285
  if (isRevoked) {
244
286
  console.log('Session revoked: ' + jti);
245
- return redirectToAuth(originalPath, host);
287
+ return redirectToAuth(originalPath, host, request.cookies);
246
288
  }
247
289
  } catch (e) {
248
290
  console.log('KVS error checking revocation: ' + e);
@@ -265,6 +307,6 @@ async function handler(event) {
265
307
 
266
308
  return request;
267
309
  } catch (e) {
268
- return redirectToAuth(getOriginalPath(request), host);
310
+ return redirectToAuth(getOriginalPath(request), host, request.cookies);
269
311
  }
270
312
  }
@@ -19,6 +19,24 @@ export interface ComposerConfig {
19
19
  */
20
20
  readonly loginRedirectPath?: string;
21
21
  }
22
+ /**
23
+ * Minify CloudFront Function source with terser.
24
+ *
25
+ * CloudFront Functions have a hard 10KB code-size limit. Both the composed
26
+ * (multi-module) path and the standalone auth-check path must minify, using
27
+ * the SAME options, so a function that fits in one path fits in the other.
28
+ *
29
+ * `minify_sync` throws on a parse error and, in its documented failure mode,
30
+ * can return `{ error }` with no `code`. An earlier `minified.code || assembled`
31
+ * fallback caught that second case and silently shipped the UN-minified source,
32
+ * which is how an 11KB function reached CloudFront and 413'd at deploy. This
33
+ * helper never falls back: a thrown error propagates, and a missing `code` is
34
+ * turned into a thrown error too — a minify failure is always a build error.
35
+ *
36
+ * The `reserved` names are the CloudFront-required top-level identifiers that
37
+ * must survive mangling.
38
+ */
39
+ export declare function minifyFunctionCode(source: string): string;
22
40
  /**
23
41
  * Generates a combined CloudFront Function from modular check functions
24
42
  * based on requested extensions
@@ -34,10 +34,51 @@ var __importStar = (this && this.__importStar) || (function () {
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
36
  exports.FunctionComposer = void 0;
37
+ exports.minifyFunctionCode = minifyFunctionCode;
37
38
  const fs = __importStar(require("fs"));
38
39
  const path = __importStar(require("path"));
39
40
  const terser_1 = require("terser");
40
41
  const securedCloudFront_1 = require("../patterns/securedCloudFront");
42
+ /**
43
+ * Minify CloudFront Function source with terser.
44
+ *
45
+ * CloudFront Functions have a hard 10KB code-size limit. Both the composed
46
+ * (multi-module) path and the standalone auth-check path must minify, using
47
+ * the SAME options, so a function that fits in one path fits in the other.
48
+ *
49
+ * `minify_sync` throws on a parse error and, in its documented failure mode,
50
+ * can return `{ error }` with no `code`. An earlier `minified.code || assembled`
51
+ * fallback caught that second case and silently shipped the UN-minified source,
52
+ * which is how an 11KB function reached CloudFront and 413'd at deploy. This
53
+ * helper never falls back: a thrown error propagates, and a missing `code` is
54
+ * turned into a thrown error too — a minify failure is always a build error.
55
+ *
56
+ * The `reserved` names are the CloudFront-required top-level identifiers that
57
+ * must survive mangling.
58
+ */
59
+ function minifyFunctionCode(source) {
60
+ const result = (0, terser_1.minify_sync)(source, {
61
+ compress: {
62
+ dead_code: true,
63
+ drop_console: false,
64
+ passes: 2,
65
+ },
66
+ mangle: {
67
+ reserved: ['handler', 'event', 'kvsHandle'],
68
+ },
69
+ format: {
70
+ comments: false,
71
+ },
72
+ });
73
+ // `minify_sync` returns `{ error }` (not typed by @types/terser) instead of
74
+ // throwing; `code` is undefined on failure. Treat a missing `code` as the
75
+ // failure signal and surface the runtime error if terser attached one.
76
+ if (result.code === undefined) {
77
+ const err = result.error;
78
+ throw new Error(`CloudFront Function minification failed: ${err ?? 'terser produced no output'}`);
79
+ }
80
+ return result.code;
81
+ }
41
82
  /**
42
83
  * Generates a combined CloudFront Function from modular check functions
43
84
  * based on requested extensions
@@ -122,21 +163,9 @@ class FunctionComposer {
122
163
  const kvsDecl = 'const kvsHandle = cf.kvs();\n';
123
164
  assembled = assembled.replace(/const kvsHandle = cf\.kvs\(\);\s*/g, '');
124
165
  // Minify with terser to stay well under the 10KB CloudFront Function limit.
125
- const minified = (0, terser_1.minify_sync)(assembled, {
126
- compress: {
127
- dead_code: true,
128
- drop_console: false,
129
- passes: 2,
130
- },
131
- mangle: {
132
- reserved: ['handler', 'event', 'kvsHandle'],
133
- },
134
- format: {
135
- comments: false,
136
- },
137
- });
166
+ const minified = minifyFunctionCode(assembled);
138
167
  // Prepend the CloudFront-specific preamble back
139
- const code = cfImport + cryptoRequire + kvsDecl + (minified.code || assembled);
168
+ const code = cfImport + cryptoRequire + kvsDecl + minified;
140
169
  const sizeKB = Buffer.byteLength(code, 'utf-8') / 1024;
141
170
  if (sizeKB > 10) {
142
171
  throw new Error(`CloudFront Function exceeds 10KB limit: ${sizeKB.toFixed(2)}KB (extensions: ${extensions.join(', ')})`);
@@ -186,4 +215,4 @@ class FunctionComposer {
186
215
  }
187
216
  }
188
217
  exports.FunctionComposer = FunctionComposer;
189
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuY3Rpb24tY29tcG9zZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY2xvdWRmcm9udC9jbG91ZGZyb250LWZ1bmN0aW9ucy9mdW5jdGlvbi1jb21wb3Nlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSx1Q0FBeUI7QUFDekIsMkNBQTZCO0FBQzdCLG1DQUFxQztBQUNyQyxxRUFBMEY7QUF1QjFGOzs7R0FHRztBQUNILE1BQWEsZ0JBQWdCO0lBRzNCO1FBQ0UsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxPQUFPLENBQUMsVUFBdUIsRUFBRSxNQUF3QixFQUFFLGNBQStCO1FBQy9GLE1BQU0sS0FBSyxHQUFhLEVBQUUsQ0FBQztRQUUzQixrQ0FBa0M7UUFDbEMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQztRQUUvQyxpQ0FBaUM7UUFDakMsTUFBTSxNQUFNLEdBQWEsRUFBRSxDQUFDO1FBRTVCLElBQUksVUFBVSxDQUFDLFFBQVEsQ0FBQyw2QkFBUyxDQUFDLHFCQUFxQixDQUFDLEVBQUUsQ0FBQztZQUN6RCxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO1lBQzlDLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDekIsQ0FBQztRQUVELElBQUksVUFBVSxDQUFDLFFBQVEsQ0FBQyw2QkFBUyxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUM7WUFDbEQsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7WUFDNUMsTUFBTSxD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WUFDckMsSUFBSSxVQUFVLEVBQUUsQ0FBQztnQkFDZixLQUFLLENBQUMsSUFBSSxDQUNSLHNCQUFzQixFQUN0Qix5QkFBeUIsRUFDekIseUNBQXlDLEVBQ3pDLHdDQUF3QyxFQUN4QyxnQkFBZ0IsRUFDaEIsMEJBQTBCLEVBQzFCLDJDQUEyQyxFQUMzQywrQ0FBK0MsRUFDL0MsVUFBVSxFQUNWLE9BQU8sRUFDUCxLQUFLLEVBQ0wsRUFBRSxDQUNILENBQUM7WUFDSixDQUFDO1FBQ0gsQ0FBQztRQUVELGdFQUFnRTtRQUNoRSxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztZQUMvQixLQUFLLENBQUMsSUFBSSxDQUNSLDBCQUEwQixFQUMxQixFQUFFLENBQ0gsQ0FBQztRQUNKLENBQUM7UUFFRCxLQUFLLENBQUMsSUFBSSxDQUNSLHdCQUF3QixFQUN4Qix5QkFBeUIsRUFDekIsR0FBRyxDQUNKLENBQUM7UUFFRixPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDMUIsQ0FBQztDQUNGO0FBdk5ELDRDQXVOQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBtaW5pZnlfc3luYyB9IGZyb20gJ3RlcnNlcic7XG5pbXBvcnQgeyBFeHRlbnNpb24sIEV4dGVuc2lvbkNvbmZpZywgUm9sZU1hdGNoTW9kZSB9IGZyb20gJy4uL3BhdHRlcm5zL3NlY3VyZWRDbG91ZEZyb250JztcblxuZXhwb3J0IGludGVyZmFjZSBDb21wb3NlckNvbmZpZyB7XG4gIHJlYWRvbmx5IHRlbmFudElkPzogc3RyaW5nO1xuICByZWFkb25seSBjb2duaXRvRG9tYWluPzogc3RyaW5nO1xuICByZWFkb25seSBjbGllbnRJZD86IHN0cmluZztcbiAgcmVhZG9ubHkgcmVkaXJlY3RVcmk/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGNvb2tpZURvbWFpbj86IHN0cmluZztcbiAgcmVhZG9ubHkgcmVxdWlyZU1mYT86IGJvb2xlYW47XG4gIC8qKiBFbmFibGUgaGVhZGVyIHN0cmlwcGluZyBhbmQgaW5qZWN0aW9uIGZyb20gSldUIGNsYWltcy4gQGRlZmF1bHQgZmFsc2UgKi9cbiAgcmVhZG9ubHkgZW5hYmxlSGVhZGVySW5qZWN0aW9uPzogYm9vbGVhbjtcbiAgLyoqIE1hcCBvZiBoZWFkZXIgbmFtZSDihpIgSldUIGNsYWltIGtleS4gZS5nLiB7ICd4LWN1c3RvbWVyLWlkJzogJ2N1c3RvbWVyX2lkJyB9ICovXG4gIHJlYWRvbmx5IGhlYWRlckluamVjdGlvbkNsYWltcz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIC8qKiBFbmFibGUgcmVmcmVzaCByZWRpcmVjdCBmb3IgZXhwaXJlZC1idXQtdmFsaWQgdG9rZW5zLiBAZGVmYXVsdCBmYWxzZSAqL1xuICByZWFkb25seSBlbmFibGVSZWZyZXNoPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEN1c3RvbS1VSSBtb2RlOiBmaXJzdC1wYXJ0eSBwYXRoIHRvIHJlZGlyZWN0IHVuYXV0aGVudGljYXRlZCB1c2VycyB0b1xuICAgKiAoZS5nLiAnL2xvZ2luJykuIFdoZW4gc2V0LCB0aGUgc2hhcmVkIGF1dGgtY2hlY2sgbW9kdWxlIGlzIHVzZWQgd2l0aCBhXG4gICAqIHJlbGF0aXZlIHJlZGlyZWN0IGluc3RlYWQgb2YgYW4gZXh0ZXJuYWwgSWRQIGF1dGhvcml6ZSBVUkwuXG4gICAqL1xuICByZWFkb25seSBsb2dpblJlZGlyZWN0UGF0aD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgYSBjb21iaW5lZCBDbG91ZEZyb250IEZ1bmN0aW9uIGZyb20gbW9kdWxhciBjaGVjayBmdW5jdGlvbnNcbiAqIGJhc2VkIG9uIHJlcXVlc3RlZCBleHRlbnNpb25zXG4gKi9cbmV4cG9ydCBjbGFzcyBGdW5jdGlvbkNvbXBvc2VyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBtb2R1bGVzRGlyOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5tb2R1bGVzRGlyID0gcGF0aC5qb2luKF9fZGlybmFtZSwgJ21vZHVsZXMnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZSBjb21iaW5lZCBmdW5jdGlvbiBjb2RlIGJhc2VkIG9uIHJlcXVlc3RlZCBleHRlbnNpb25zXG4gICAqL1xuICBwdWJsaWMgY29tcG9zZShleHRlbnNpb25zOiBFeHRlbnNpb25bXSwgY29uZmlnPzogRXh0ZW5zaW9uQ29uZmlnLCBjb21wb3NlckNvbmZpZz86IENvbXBvc2VyQ29uZmlnKTogc3RyaW5nIHtcbiAgICBjb25zdCBwYXJ0czogc3RyaW5nW10gPSBbXTtcblxuICAgIC8vIEFsd2F5cyBpbmNsdWRlIHNoYXJlZCB1dGlsaXRpZXNcbiAgICBwYXJ0cy5wdXNoKHRoaXMubG9hZE1vZHVsZSgnc2hhcmVkLXV0aWxzLmpzJykpO1xuXG4gICAgLy8gSW5jbHVkZSByZXF1aXJlZCBjaGVjayBtb2R1bGVzXG4gICAgY29uc3QgY2hlY2tzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgaWYgKGV4dGVuc2lvbnMuaW5jbHVkZXMoRXh0ZW5zaW9uLlJFV1JJVEVfVE9fSU5ERVhfSFRNTCkpIHtcbiAgICAgIHBhcnRzLnB1c2godGhpcy5sb2FkTW9kdWxlKCd1cmwtcmV3cml0ZS5qcycpKTtcbiAgICAgIGNoZWNrcy5wdXNoKCdyZXdyaXRlJyk7XG4gICAgfVxuXG4gICAgaWYgKGV4dGVuc2lvbnMuaW5jbHVkZXMoRXh0ZW5zaW9uLlJFUVVJUkVfVExTXzEzKSkge1xuICAgICAgcGFydHMucHVzaCh0aGlzLmxvYWRNb2R1bGUoJ3Rscy1jaGVjay5qcycpKTtcbiAgICAgIGNoZWNrcy5wdXNoKCd0bHMnKTtcbiAgICB9XG5cbiAgICBpZiAoZXh0ZW5zaW9ucy5pbmNsdWRlcyhFeHRlbnNpb24uUkVRVUlSRV9BVVRIKSkge1xuICAgICAgLy8gQ3VzdG9tLVVJIG1vZGUgdXNlcyB0aGUgc2hhcmVkIGF1dGgtY2hlY2sgbW9kdWxlIChoZWFkZXIgaW5qZWN0aW9uICtcbiAgICAgIC8vIHJlZnJlc2ggY2FwYWJsZSkgd2l0aCBhIGZpcnN0LXBhcnR5IC9sb2dpbiByZWRpcmVjdCwgZXZlbiB0aG91Z2ggdGhlXG4gICAgICAvLyBpZGVudGl0eSBwcm92aWRlciBpcyBDb2duaXRvLlxuICAgICAgY29uc3QgaXNDdXN0b21VaSA9IGNvbXBvc2VyQ29uZmlnPy5sb2dpblJlZGlyZWN0UGF0aCAhPT0gdW5kZWZpbmVkICYmIGNvbXBvc2VyQ29uZmlnLmxvZ2luUmVkaXJlY3RQYXRoICE9PSAnJztcbiAgICAgIGNvbnN0IGlzQ29nbml0byA9IGNvbXBvc2VyQ29uZmlnPy5jb2duaXRvRG9tYWluICE9PSB1bmRlZmluZWQgJiYgIWlzQ3VzdG9tVWk7XG4gICAgICBsZXQgYXV0aE1vZHVsZSA9IHRoaXMubG9hZE1vZHVsZShpc0NvZ25pdG8gPyAnY29nbml0by1hdXRoLWNoZWNrLmpzJyA6ICdhdXRoLWNoZWNrLmpzJyk7XG4gICAgICBpZiAoY29tcG9zZXJDb25maWcpIHtcbiAgICAgICAgaWYgKGNvbXBvc2VyQ29uZmlnLmNvZ25pdG9Eb21haW4pIHtcbiAgICAgICAgICBhdXRoTW9kdWxlID0gYXV0aE1vZHVsZS5yZXBsYWNlKC9DT0dOSVRPX0RPTUFJTl9QTEFDRUhPTERFUi9nLCBjb21wb3NlckNvbmZpZy5jb2duaXRvRG9tYWluKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29tcG9zZXJDb25maWcudGVuYW50SWQpIHtcbiAgICAgICAgICBhdXRoTW9kdWxlID0gYXV0aE1vZHVsZS5yZXBsYWNlKC9URU5BTlRfSURfUExBQ0VIT0xERVIvZywgY29tcG9zZXJDb25maWcudGVuYW50SWQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb21wb3NlckNvbmZpZy5jbGllbnRJZCkge1xuICAgICAgICAgIGF1dGhNb2R1bGUgPSBhdXRoTW9kdWxlLnJlcGxhY2UoL0NMSUVOVF9JRF9QTEFDRUhPTERFUi9nLCBjb21wb3NlckNvbmZpZy5jbGllbnRJZCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbXBvc2VyQ29uZmlnLnJlZGlyZWN0VXJpKSB7XG4gICAgICAgICAgYXV0aE1vZHVsZSA9IGF1dGhNb2R1bGUucmVwbGFjZSgvUkVESVJFQ1RfVVJJX1BMQUNFSE9MREVSL2csIGNvbXBvc2VyQ29uZmlnLnJlZGlyZWN0VXJpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29tcG9zZXJDb25maWcuY29va2llRG9tYWluICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBhdXRoTW9kdWxlID0gYXV0aE1vZHVsZS5yZXBsYWNlKC9DT09LSUVfRE9NQUlOX1BMQUNFSE9MREVSL2csIGNvbXBvc2VyQ29uZmlnLmNvb2tpZURvbWFpbik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBIZWFkZXIgaW5qZWN0aW9uIHBsYWNlaG9sZGVyc1xuICAgICAgICBjb25zdCBlbmFibGVIZWFkZXJJbmplY3Rpb24gPSBjb21wb3NlckNvbmZpZy5lbmFibGVIZWFkZXJJbmplY3Rpb24gPz8gZmFsc2U7XG4gICAgICAgIGF1dGhNb2R1bGUgPSBhdXRoTW9kdWxlLnJlcGxhY2UoL0VOQUJMRV9IRUFERVJfSU5KRUNUSU9OX1BMQUNFSE9MREVSL2csIFN0cmluZyhlbmFibGVIZWFkZXJJbmplY3Rpb24pKTtcblxuICAgICAgICBpZiAoZW5hYmxlSGVhZGVySW5qZWN0aW9uICYmIGNvbXBvc2VyQ29uZmlnLmhlYWRlckluamVjdGlvbkNsYWltcykge1xuICAgICAgICAgIGNvbnN0IG1hcCA9IGNvbXBvc2VyQ29uZmlnLmhlYWRlckluamVjdGlvbkNsYWltcztcbiAgICAgICAgICBhdXRoTW9kdWxlID0gYXV0aE1vZHVsZS5yZXBsYWNlKC9IRUFERVJfSU5KRUNUSU9OX01BUF9QTEFDRUhPTERFUi9nLCBKU09OLnN0cmluZ2lmeShtYXApKTtcbiAgICAgICAgICBhdXRoTW9kdWxlID0gYXV0aE1vZHVsZS5yZXBsYWNlKC9IRUFERVJfSU5KRUNUSU9OX0tFWVNfUExBQ0VIT0xERVIvZywgSlNPTi5zdHJpbmdpZnkoT2JqZWN0LmtleXMobWFwKSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGF1dGhNb2R1bGUgPSBhdXRoTW9kdWxlLnJlcGxhY2UoL0hFQURFUl9JTkpFQ1RJT05fTUFQX1BMQUNFSE9MREVSL2csICd7fScpO1xuICAgICAgICAgIGF1dGhNb2R1bGUgPSBhdXRoTW9kdWxlLnJlcGxhY2UoL0hFQURFUl9JTkpFQ1RJT05fS0VZU19QTEFDRUhPTERFUi9nLCAnW10nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFJlZnJlc2ggcmVkaXJlY3QgcGxhY2Vob2xkZXJcbiAgICAgICAgY29uc3QgZW5hYmxlUmVmcmVzaCA9IGNvbXBvc2VyQ29uZmlnLmVuYWJsZVJlZnJlc2ggPz8gZmFsc2U7XG4gICAgICAgIGF1dGhNb2R1bGUgPSBhdXRoTW9kdWxlLnJlcGxhY2UoL0VOQUJMRV9SRUZSRVNIX1BMQUNFSE9MREVSL2csIFN0cmluZyhlbmFibGVSZWZyZXNoKSk7XG5cbiAgICAgICAgLy8gQ3VzdG9tLVVJIGxvZ2luLXJlZGlyZWN0IHBsYWNlaG9sZGVyIChlbXB0eSBzdHJpbmcgPT4gSWRQLXJlZGlyZWN0IG1vZGUpXG4gICAgICAgIGF1dGhNb2R1bGUgPSBhdXRoTW9kdWxlLnJlcGxhY2UoL0xPR0lOX1JFRElSRUNUX1BBVEhfUExBQ0VIT0xERVIvZywgY29tcG9zZXJDb25maWcubG9naW5SZWRpcmVjdFBhdGggPz8gJycpO1xuICAgICAgfVxuICAgICAgcGFydHMucHVzaChhdXRoTW9kdWxlKTtcbiAgICAgIGNoZWNrcy5wdXNoKCdhdXRoJyk7XG4gICAgfVxuXG4gICAgLy8gR2VuZXJhdGUgaGFuZGxlciBmdW5jdGlvblxuICAgIHBhcnRzLnB1c2godGhpcy5nZW5lcmF0ZUhhbmRsZXIoY2hlY2tzLCBjb25maWcsIGNvbXBvc2VyQ29uZmlnKSk7XG5cbiAgICBsZXQgYXNzZW1ibGVkID0gcGFydHMuam9pbignXFxuXFxuJyk7XG5cbiAgICAvLyBFeHRyYWN0IHRoZSBDbG91ZEZyb250LXNwZWNpZmljIGltcG9ydCAodGVyc2VyIGNhbid0IHBhcnNlIEVTIG1vZHVsZSBpbXBvcnRzIGluIHNjcmlwdCBtb2RlKS5cbiAgICAvLyBXZSdsbCBwcmVwZW5kIGl0IGJhY2sgYWZ0ZXIgbWluaWZpY2F0aW9uLlxuICAgIGNvbnN0IGNmSW1wb3J0ID0gXCJpbXBvcnQgY2YgZnJvbSAnY2xvdWRmcm9udCc7XFxuXCI7XG4gICAgYXNzZW1ibGVkID0gYXNzZW1ibGVkLnJlcGxhY2UoL2ltcG9ydCBjZiBmcm9tICdjbG91ZGZyb250JztcXHMqL2csICcnKTtcblxuICAgIC8vIEFsc28gZXh0cmFjdCBgdmFyIGNyeXB0byA9IHJlcXVpcmUoJ2NyeXB0bycpO2Ag4oCUIHRlcnNlciBoYW5kbGVzIGl0IGZpbmUgYnV0XG4gICAgLy8gQ2xvdWRGcm9udCBGdW5jdGlvbnMgbmVlZCBpdCBhdCB0aGUgdG9wIGxldmVsLlxuICAgIGNvbnN0IGNyeXB0b1JlcXVpcmUgPSBcInZhciBjcnlwdG8gPSByZXF1aXJlKCdjcnlwdG8nKTtcXG5cIjtcbiAgICBhc3NlbWJsZWQgPSBhc3NlbWJsZWQucmVwbGFjZSgvdmFyIGNyeXB0byA9IHJlcXVpcmVcXCgnY3J5cHRvJ1xcKTtcXHMqL2csICcnKTtcblxuICAgIC8vIEV4dHJhY3QgS1ZTIGhhbmRsZSBkZWNsYXJhdGlvbiAoZGVwZW5kcyBvbiBjZiBpbXBvcnQpXG4gICAgY29uc3Qga3ZzRGVjbCA9ICdjb25zdCBrdnNIYW5kbGUgPSBjZi5rdnMoKTtcXG4nO1xuICAgIGFzc2VtYmxlZCA9IGFzc2VtYmxlZC5yZXBsYWNlKC9jb25zdCBrdnNIYW5kbGUgPSBjZlxcLmt2c1xcKFxcKTtcXHMqL2csICcnKTtcblxuICAgIC8vIE1pbmlmeSB3aXRoIHRlcnNlciB0byBzdGF5IHdlbGwgdW5kZXIgdGhlIDEwS0IgQ2xvdWRGcm9udCBGdW5jdGlvbiBsaW1pdC5cbiAgICBjb25zdCBtaW5pZmllZCA9IG1pbmlmeV9zeW5jKGFzc2VtYmxlZCwge1xuICAgICAgY29tcHJlc3M6IHtcbiAgICAgICAgZGVhZF9jb2RlOiB0cnVlLFxuICAgICAgICBkcm9wX2NvbnNvbGU6IGZhbHNlLFxuICAgICAgICBwYXNzZXM6IDIsXG4gICAgICB9LFxuICAgICAgbWFuZ2xlOiB7XG4gICAgICAgIHJlc2VydmVkOiBbJ2hhbmRsZXInLCAnZXZlbnQnLCAna3ZzSGFuZGxlJ10sXG4gICAgICB9LFxuICAgICAgZm9ybWF0OiB7XG4gICAgICAgIGNvbW1lbnRzOiBmYWxzZSxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICAvLyBQcmVwZW5kIHRoZSBDbG91ZEZyb250LXNwZWNpZmljIHByZWFtYmxlIGJhY2tcbiAgICBjb25zdCBjb2RlID0gY2ZJbXBvcnQgKyBjcnlwdG9SZXF1aXJlICsga3ZzRGVjbCArIChtaW5pZmllZC5jb2RlIHx8IGFzc2VtYmxlZCk7XG4gICAgY29uc3Qgc2l6ZUtCID0gQnVmZmVyLmJ5dGVMZW5ndGgoY29kZSwgJ3V0Zi04JykgLyAxMDI0O1xuXG4gICAgaWYgKHNpemVLQiA+IDEwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENsb3VkRnJvbnQgRnVuY3Rpb24gZXhjZWVkcyAxMEtCIGxpbWl0OiAke3NpemVLQi50b0ZpeGVkKDIpfUtCIChleHRlbnNpb25zOiAke2V4dGVuc2lvbnMuam9pbignLCAnKX0pYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvZGU7XG4gIH1cblxuICBwcml2YXRlIGxvYWRNb2R1bGUoZmlsZW5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgZmlsZVBhdGggPSBwYXRoLmpvaW4odGhpcy5tb2R1bGVzRGlyLCBmaWxlbmFtZSk7XG4gICAgY29uc3QgY29udGVudCA9IGZzLnJlYWRGaWxlU3luYyhmaWxlUGF0aCwgJ3V0Zi04Jyk7XG5cbiAgICByZXR1cm4gY29udGVudFxuICAgICAgLnJlcGxhY2UoL1xcL1xcKltcXHNcXFNdKj9cXCpcXC8vZywgJycpIC8vIGJsb2NrIGNvbW1lbnRzXG4gICAgICAucmVwbGFjZSgvXlxccypcXC9cXC8uKiQvZ20sICcnKSAvLyBsaW5lIGNvbW1lbnRzICh3aG9sZS1saW5lIG9ubHkpXG4gICAgICAucmVwbGFjZSgvXlxccypcXG4vZ20sICcnKSAvLyBibGFuayBsaW5lc1xuICAgICAgLnJlcGxhY2UoL2Z1bmN0aW9uIGhhbmRsZXJcXChldmVudFxcKSBcXHtbXFxzXFxTXSo/XFxuXFx9L2csICcnKVxuICAgICAgLnJlcGxhY2UoL2FzeW5jIGZ1bmN0aW9uIGhhbmRsZXJcXChldmVudFxcKSBcXHtbXFxzXFxTXSo/XFxuXFx9L2csICcnKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2VuZXJhdGVIYW5kbGVyKGNoZWNrczogc3RyaW5nW10sIGNvbmZpZz86IEV4dGVuc2lvbkNvbmZpZywgY29tcG9zZXJDb25maWc/OiBDb21wb3NlckNvbmZpZyk6IHN0cmluZyB7XG4gICAgY29uc3QgaGFzQXV0aCA9IGNoZWNrcy5pbmNsdWRlcygnYXV0aCcpO1xuICAgIGNvbnN0IHJlcXVpcmVNZmEgPSBjb21wb3NlckNvbmZpZz8ucmVxdWlyZU1mYSA/PyBmYWxzZTtcbiAgICBjb25zdCBsaW5lczogc3RyaW5nW10gPSBbXG4gICAgICAnLy8gR2VuZXJhdGVkIGhhbmRsZXIgZnVuY3Rpb24nLFxuICAgICAgaGFzQXV0aCA/ICdhc3luYyBmdW5jdGlvbiBoYW5kbGVyKGV2ZW50KSB7JyA6ICdmdW5jdGlvbiBoYW5kbGVyKGV2ZW50KSB7JyxcbiAgICAgICcgIHZhciBkZWNvZGVkUGF5bG9hZCA9IG51bGw7JyxcbiAgICAgICcnLFxuICAgIF07XG5cbiAgICAvLyBBZGQgVExTIGNoZWNrXG4gICAgaWYgKGNoZWNrcy5pbmNsdWRlcygndGxzJykpIHtcbiAgICAgIGxpbmVzLnB1c2goXG4gICAgICAgICcgIC8vIFRMUyAxLjMgZW5mb3JjZW1lbnQnLFxuICAgICAgICAnICB2YXIgdGxzUmVzdWx0ID0gY2hlY2tUTFMoZXZlbnQpOycsXG4gICAgICAgICcgIGlmICh0bHNSZXN1bHQpIHJldHVybiB0bHNSZXN1bHQ7JyxcbiAgICAgICAgJycsXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIEFkZCBhdXRoIGNoZWNrICh3aXRoIG9wdGlvbmFsIHJvbGUgY2hlY2tpbmcgYnVpbHQtaW4pXG4gICAgaWYgKGhhc0F1dGgpIHtcbiAgICAgIGNvbnN0IHJlcXVpcmVkUm9sZXMgPSBjb25maWc/LnJlcXVpcmVkUm9sZXMgPyBjb25maWcucmVxdWlyZWRSb2xlcyA6IFtdO1xuICAgICAgY29uc3QgbWF0Y2hNb2RlID0gY29uZmlnPy5yb2xlTWF0Y2hNb2RlIHx8IFJvbGVNYXRjaE1vZGUuT1I7XG4gICAgICBjb25zdCByb2xlc0pzb24gPSBKU09OLnN0cmluZ2lmeShyZXF1aXJlZFJvbGVzKTtcblxuICAgICAgbGluZXMucHVzaChcbiAgICAgICAgJyAgLy8gQXV0aGVudGljYXRpb24gY2hlY2snLFxuICAgICAgICBgICB2YXIgcmVxdWlyZWRSb2xlcyA9ICR7cm9sZXNKc29ufTtgLFxuICAgICAgICBgICB2YXIgbWF0Y2hNb2RlID0gJyR7bWF0Y2hNb2RlfSc7YCxcbiAgICAgICAgJyAgdmFyIGF1dGhSZXN1bHQgPSBhd2FpdCBjaGVja0F1dGgoZXZlbnQsIGRlY29kZWRQYXlsb2FkLCByZXF1aXJlZFJvbGVzLCBtYXRjaE1vZGUpOycsXG4gICAgICAgICcgIGlmICghYXV0aFJlc3VsdC5wYXNzKSByZXR1cm4gYXV0aFJlc3VsdC5yZXNwb25zZTsnLFxuICAgICAgICAnICBkZWNvZGVkUGF5bG9hZCA9IGF1dGhSZXN1bHQucGF5bG9hZDsnLFxuICAgICAgICAnJyxcbiAgICAgICAgJyAgLy8gSW5qZWN0IEF6dXJlIEFEIEpXVCBmb3IgQXNzdW1lUm9sZVdpdGhXZWJJZGVudGl0eSAoQXp1cmUgb25seSknLFxuICAgICAgICAnICBpZiAodHlwZW9mIGluamVjdEF6dXJlVG9rZW4gPT09IFxcJ2Z1bmN0aW9uXFwnKSB7JyxcbiAgICAgICAgJyAgICBldmVudC5yZXF1ZXN0ID0gaW5qZWN0QXp1cmVUb2tlbihldmVudC5yZXF1ZXN0LCBldmVudC5yZXF1ZXN0LmNvb2tpZXMpOycsXG4gICAgICAgICcgIH0nLFxuICAgICAgICAnJyxcbiAgICAgICAgJyAgLy8gSW5qZWN0IGlkZW50aXR5IGNsYWltcyBhcyBoZWFkZXJzIGZvciBvcmlnaW4gKHdoZW4gZW5hYmxlZCknLFxuICAgICAgICAnICBpZiAodHlwZW9mIGluamVjdENsYWltc0hlYWRlcnMgPT09IFxcJ2Z1bmN0aW9uXFwnKSB7JyxcbiAgICAgICAgJyAgICBldmVudC5yZXF1ZXN0ID0gaW5qZWN0Q2xhaW1zSGVhZGVycyhldmVudC5yZXF1ZXN0LCBkZWNvZGVkUGF5bG9hZCk7JyxcbiAgICAgICAgJyAgfScsXG4gICAgICAgICcnLFxuICAgICAgKTtcblxuICAgICAgLy8gTUZBIGVuZm9yY2VtZW50IChkZWZlbmNlIGluIGRlcHRoKVxuICAgICAgaWYgKHJlcXVpcmVNZmEpIHtcbiAgICAgICAgbGluZXMucHVzaChcbiAgICAgICAgICAnICAvLyBNRkEgZW5mb3JjZW1lbnQnLFxuICAgICAgICAgICcgIGlmIChkZWNvZGVkUGF5bG9hZCkgeycsXG4gICAgICAgICAgJyAgICB2YXIgYW1yID0gZGVjb2RlZFBheWxvYWQuYW1yIHx8IFtdOycsXG4gICAgICAgICAgJyAgICBpZiAoYW1yLmluZGV4T2YoXFwnbWZhXFwnKSA9PT0gLTEpIHsnLFxuICAgICAgICAgICcgICAgICByZXR1cm4geycsXG4gICAgICAgICAgJyAgICAgICAgc3RhdHVzQ29kZTogNDAzLCcsXG4gICAgICAgICAgJyAgICAgICAgc3RhdHVzRGVzY3JpcHRpb246IFxcJ0ZvcmJpZGRlblxcJywnLFxuICAgICAgICAgICcgICAgICAgIGJvZHk6IFxcJ0FjY2VzcyBkZW5pZWQ6IE1GQSByZXF1aXJlZFxcJycsXG4gICAgICAgICAgJyAgICAgIH07JyxcbiAgICAgICAgICAnICAgIH0nLFxuICAgICAgICAgICcgIH0nLFxuICAgICAgICAgICcnLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEFkZCBVUkwgcmV3cml0ZSBhZnRlciBhdXRoIHNvIG9yaWdpbmFsUGF0aCBpcyBzYXZlZCBjb3JyZWN0bHlcbiAgICBpZiAoY2hlY2tzLmluY2x1ZGVzKCdyZXdyaXRlJykpIHtcbiAgICAgIGxpbmVzLnB1c2goXG4gICAgICAgICcgIHJld3JpdGVUb0luZGV4KGV2ZW50KTsnLFxuICAgICAgICAnJyxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgbGluZXMucHVzaChcbiAgICAgICcgIC8vIEFsbCBjaGVja3MgcGFzc2VkJyxcbiAgICAgICcgIHJldHVybiBldmVudC5yZXF1ZXN0OycsXG4gICAgICAnfScsXG4gICAgKTtcblxuICAgIHJldHVybiBsaW5lcy5qb2luKCdcXG4nKTtcbiAgfVxufVxuIl19
218
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuY3Rpb24tY29tcG9zZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY2xvdWRmcm9udC9jbG91ZGZyb250LWZ1bmN0aW9ucy9mdW5jdGlvbi1jb21wb3Nlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUEyQ0EsZ0RBd0JDO0FBbkVELHVDQUF5QjtBQUN6QiwyQ0FBNkI7QUFDN0IsbUNBQXFDO0FBQ3JDLHFFQUEwRjtBQXVCMUY7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQkc7QUFDSCxTQUFnQixrQkFBa0IsQ0FBQyxNQUFjO0lBQy9DLE1BQU0sTUFBTSxHQUFHLElBQUEsb0JBQVcsRUFBQyxNQUFNLEVBQUU7UUFDakMsUUFBUSxFQUFFO1lBQ1IsU0FBUyxFQUFFLElBQUk7WUFDZixZQUFZLEVBQUUsS0FBSztZQUNuQixNQUFNLEVBQUUsQ0FBQztTQUNWO1FBQ0QsTUFBTSxFQUFFO1lBQ04sUUFBUSxFQUFFLENBQUMsU0FBUyxFQUFFLE9BQU8sRUFBRSxXQUFXLENBQUM7U0FDNUM7UUFDRCxNQUFNLEVBQUU7WUFDTixRQUFRLEVBQUUsS0FBSztTQUNoQjtLQUNGLENBQUMsQ0FBQztJQUVILDRFQUE0RTtJQUM1RSwwRUFBMEU7SUFDMUUsdUVBQXVFO0lBQ3ZFLElBQUksTUFBTSxDQUFDLElBQUksS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUM5QixNQUFNLEdBQUcsR0FBSSxNQUE0QixDQUFDLEtBQUssQ0FBQztRQUNoRCxNQUFNLElBQUksS0FBSyxDQUFDLDRDQUE0QyxHQUFHLElBQUksMkJBQTJCLEVBQUUsQ0FBQyxDQUFDO0lBQ3BHLENBQUM7SUFFRCxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUM7QUFDckIsQ0FBQztBQUVEOzs7R0FHRztBQUNILE1BQWEsZ0JBQWdCO0lBRzNCO1FBQ0UsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFNB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WUFDNUQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUVoRCxLQUFLLENBQUMsSUFBSSxDQUNSLDJCQUEyQixFQUMzQix5QkFBeUIsU0FBUyxHQUFHLEVBQ3JDLHNCQUFzQixTQUFTLElBQUksRUFDbkMsc0ZBQXNGLEVBQ3RGLHFEQUFxRCxFQUNyRCx3Q0FBd0MsRUFDeEMsRUFBRSxFQUNGLHFFQUFxRSxFQUNyRSxtREFBbUQsRUFDbkQsNkVBQTZFLEVBQzdFLEtBQUssRUFDTCxFQUFFLEVBQ0Ysa0VBQWtFLEVBQ2xFLHNEQUFzRCxFQUN0RCx5RUFBeUUsRUFDekUsS0FBSyxFQUNMLEVBQUUsQ0FDSCxDQUFDO1lBRUYscUNBQXFDO1lBQ3JDLElBQUksVUFBVSxFQUFFLENBQUM7Z0JBQ2YsS0FBSyxDQUFDLElBQUksQ0FDUixzQkFBc0IsRUFDdEIseUJBQXlCLEVBQ3pCLHlDQUF5QyxFQUN6Qyx3Q0FBd0MsRUFDeEMsZ0JBQWdCLEVBQ2hCLDBCQUEwQixFQUMxQiwyQ0FBMkMsRUFDM0MsK0NBQStDLEVBQy9DLFVBQVUsRUFDVixPQUFPLEVBQ1AsS0FBSyxFQUNMLEVBQUUsQ0FDSCxDQUFDO1lBQ0osQ0FBQztRQUNILENBQUM7UUFFRCxnRUFBZ0U7UUFDaEUsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7WUFDL0IsS0FBSyxDQUFDLElBQUksQ0FDUiwwQkFBMEIsRUFDMUIsRUFBRSxDQUNILENBQUM7UUFDSixDQUFDO1FBRUQsS0FBSyxDQUFDLElBQUksQ0FDUix3QkFBd0IsRUFDeEIseUJBQXlCLEVBQ3pCLEdBQUcsQ0FDSixDQUFDO1FBRUYsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzFCLENBQUM7Q0FDRjtBQTNNRCw0Q0EyTUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBmcyBmcm9tICdmcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgbWluaWZ5X3N5bmMgfSBmcm9tICd0ZXJzZXInO1xuaW1wb3J0IHsgRXh0ZW5zaW9uLCBFeHRlbnNpb25Db25maWcsIFJvbGVNYXRjaE1vZGUgfSBmcm9tICcuLi9wYXR0ZXJucy9zZWN1cmVkQ2xvdWRGcm9udCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcG9zZXJDb25maWcge1xuICByZWFkb25seSB0ZW5hbnRJZD86IHN0cmluZztcbiAgcmVhZG9ubHkgY29nbml0b0RvbWFpbj86IHN0cmluZztcbiAgcmVhZG9ubHkgY2xpZW50SWQ/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHJlZGlyZWN0VXJpPzogc3RyaW5nO1xuICByZWFkb25seSBjb29raWVEb21haW4/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHJlcXVpcmVNZmE/OiBib29sZWFuO1xuICAvKiogRW5hYmxlIGhlYWRlciBzdHJpcHBpbmcgYW5kIGluamVjdGlvbiBmcm9tIEpXVCBjbGFpbXMuIEBkZWZhdWx0IGZhbHNlICovXG4gIHJlYWRvbmx5IGVuYWJsZUhlYWRlckluamVjdGlvbj86IGJvb2xlYW47XG4gIC8qKiBNYXAgb2YgaGVhZGVyIG5hbWUg4oaSIEpXVCBjbGFpbSBrZXkuIGUuZy4geyAneC1jdXN0b21lci1pZCc6ICdjdXN0b21lcl9pZCcgfSAqL1xuICByZWFkb25seSBoZWFkZXJJbmplY3Rpb25DbGFpbXM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAvKiogRW5hYmxlIHJlZnJlc2ggcmVkaXJlY3QgZm9yIGV4cGlyZWQtYnV0LXZhbGlkIHRva2Vucy4gQGRlZmF1bHQgZmFsc2UgKi9cbiAgcmVhZG9ubHkgZW5hYmxlUmVmcmVzaD86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBDdXN0b20tVUkgbW9kZTogZmlyc3QtcGFydHkgcGF0aCB0byByZWRpcmVjdCB1bmF1dGhlbnRpY2F0ZWQgdXNlcnMgdG9cbiAgICogKGUuZy4gJy9sb2dpbicpLiBXaGVuIHNldCwgdGhlIHNoYXJlZCBhdXRoLWNoZWNrIG1vZHVsZSBpcyB1c2VkIHdpdGggYVxuICAgKiByZWxhdGl2ZSByZWRpcmVjdCBpbnN0ZWFkIG9mIGFuIGV4dGVybmFsIElkUCBhdXRob3JpemUgVVJMLlxuICAgKi9cbiAgcmVhZG9ubHkgbG9naW5SZWRpcmVjdFBhdGg/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogTWluaWZ5IENsb3VkRnJvbnQgRnVuY3Rpb24gc291cmNlIHdpdGggdGVyc2VyLlxuICpcbiAqIENsb3VkRnJvbnQgRnVuY3Rpb25zIGhhdmUgYSBoYXJkIDEwS0IgY29kZS1zaXplIGxpbWl0LiBCb3RoIHRoZSBjb21wb3NlZFxuICogKG11bHRpLW1vZHVsZSkgcGF0aCBhbmQgdGhlIHN0YW5kYWxvbmUgYXV0aC1jaGVjayBwYXRoIG11c3QgbWluaWZ5LCB1c2luZ1xuICogdGhlIFNBTUUgb3B0aW9ucywgc28gYSBmdW5jdGlvbiB0aGF0IGZpdHMgaW4gb25lIHBhdGggZml0cyBpbiB0aGUgb3RoZXIuXG4gKlxuICogYG1pbmlmeV9zeW5jYCB0aHJvd3Mgb24gYSBwYXJzZSBlcnJvciBhbmQsIGluIGl0cyBkb2N1bWVudGVkIGZhaWx1cmUgbW9kZSxcbiAqIGNhbiByZXR1cm4gYHsgZXJyb3IgfWAgd2l0aCBubyBgY29kZWAuIEFuIGVhcmxpZXIgYG1pbmlmaWVkLmNvZGUgfHwgYXNzZW1ibGVkYFxuICogZmFsbGJhY2sgY2F1Z2h0IHRoYXQgc2Vjb25kIGNhc2UgYW5kIHNpbGVudGx5IHNoaXBwZWQgdGhlIFVOLW1pbmlmaWVkIHNvdXJjZSxcbiAqIHdoaWNoIGlzIGhvdyBhbiAxMUtCIGZ1bmN0aW9uIHJlYWNoZWQgQ2xvdWRGcm9udCBhbmQgNDEzJ2QgYXQgZGVwbG95LiBUaGlzXG4gKiBoZWxwZXIgbmV2ZXIgZmFsbHMgYmFjazogYSB0aHJvd24gZXJyb3IgcHJvcGFnYXRlcywgYW5kIGEgbWlzc2luZyBgY29kZWAgaXNcbiAqIHR1cm5lZCBpbnRvIGEgdGhyb3duIGVycm9yIHRvbyDigJQgYSBtaW5pZnkgZmFpbHVyZSBpcyBhbHdheXMgYSBidWlsZCBlcnJvci5cbiAqXG4gKiBUaGUgYHJlc2VydmVkYCBuYW1lcyBhcmUgdGhlIENsb3VkRnJvbnQtcmVxdWlyZWQgdG9wLWxldmVsIGlkZW50aWZpZXJzIHRoYXRcbiAqIG11c3Qgc3Vydml2ZSBtYW5nbGluZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1pbmlmeUZ1bmN0aW9uQ29kZShzb3VyY2U6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHJlc3VsdCA9IG1pbmlmeV9zeW5jKHNvdXJjZSwge1xuICAgIGNvbXByZXNzOiB7XG4gICAgICBkZWFkX2NvZGU6IHRydWUsXG4gICAgICBkcm9wX2NvbnNvbGU6IGZhbHNlLFxuICAgICAgcGFzc2VzOiAyLFxuICAgIH0sXG4gICAgbWFuZ2xlOiB7XG4gICAgICByZXNlcnZlZDogWydoYW5kbGVyJywgJ2V2ZW50JywgJ2t2c0hhbmRsZSddLFxuICAgIH0sXG4gICAgZm9ybWF0OiB7XG4gICAgICBjb21tZW50czogZmFsc2UsXG4gICAgfSxcbiAgfSk7XG5cbiAgLy8gYG1pbmlmeV9zeW5jYCByZXR1cm5zIGB7IGVycm9yIH1gIChub3QgdHlwZWQgYnkgQHR5cGVzL3RlcnNlcikgaW5zdGVhZCBvZlxuICAvLyB0aHJvd2luZzsgYGNvZGVgIGlzIHVuZGVmaW5lZCBvbiBmYWlsdXJlLiBUcmVhdCBhIG1pc3NpbmcgYGNvZGVgIGFzIHRoZVxuICAvLyBmYWlsdXJlIHNpZ25hbCBhbmQgc3VyZmFjZSB0aGUgcnVudGltZSBlcnJvciBpZiB0ZXJzZXIgYXR0YWNoZWQgb25lLlxuICBpZiAocmVzdWx0LmNvZGUgPT09IHVuZGVmaW5lZCkge1xuICAgIGNvbnN0IGVyciA9IChyZXN1bHQgYXMgeyBlcnJvcj86IEVycm9yIH0pLmVycm9yO1xuICAgIHRocm93IG5ldyBFcnJvcihgQ2xvdWRGcm9udCBGdW5jdGlvbiBtaW5pZmljYXRpb24gZmFpbGVkOiAke2VyciA/PyAndGVyc2VyIHByb2R1Y2VkIG5vIG91dHB1dCd9YCk7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0LmNvZGU7XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIGEgY29tYmluZWQgQ2xvdWRGcm9udCBGdW5jdGlvbiBmcm9tIG1vZHVsYXIgY2hlY2sgZnVuY3Rpb25zXG4gKiBiYXNlZCBvbiByZXF1ZXN0ZWQgZXh0ZW5zaW9uc1xuICovXG5leHBvcnQgY2xhc3MgRnVuY3Rpb25Db21wb3NlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgbW9kdWxlc0Rpcjogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMubW9kdWxlc0RpciA9IHBhdGguam9pbihfX2Rpcm5hbWUsICdtb2R1bGVzJyk7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGUgY29tYmluZWQgZnVuY3Rpb24gY29kZSBiYXNlZCBvbiByZXF1ZXN0ZWQgZXh0ZW5zaW9uc1xuICAgKi9cbiAgcHVibGljIGNvbXBvc2UoZXh0ZW5zaW9uczogRXh0ZW5zaW9uW10sIGNvbmZpZz86IEV4dGVuc2lvbkNvbmZpZywgY29tcG9zZXJDb25maWc/OiBDb21wb3NlckNvbmZpZyk6IHN0cmluZyB7XG4gICAgY29uc3QgcGFydHM6IHN0cmluZ1tdID0gW107XG5cbiAgICAvLyBBbHdheXMgaW5jbHVkZSBzaGFyZWQgdXRpbGl0aWVzXG4gICAgcGFydHMucHVzaCh0aGlzLmxvYWRNb2R1bGUoJ3NoYXJlZC11dGlscy5qcycpKTtcblxuICAgIC8vIEluY2x1ZGUgcmVxdWlyZWQgY2hlY2sgbW9kdWxlc1xuICAgIGNvbnN0IGNoZWNrczogc3RyaW5nW10gPSBbXTtcblxuICAgIGlmIChleHRlbnNpb25zLmluY2x1ZGVzKEV4dGVuc2lvbi5SRVdSSVRFX1RPX0lOREVYX0hUTUwpKSB7XG4gICAgICBwYXJ0cy5wdXNoKHRoaXMubG9hZE1vZHVsZSgndXJsLXJld3JpdGUuanMnKSk7XG4gICAgICBjaGVja3MucHVzaCgncmV3cml0ZScpO1xuICAgIH1cblxuICAgIGlmIChleHRlbnNpb25zLmluY2x1ZGVzKEV4dGVuc2lvbi5SRVFVSVJFX1RMU18xMykpIHtcbiAgICAgIHBhcnRzLnB1c2godGhpcy5sb2FkTW9kdWxlKCd0bHMtY2hlY2suanMnKSk7XG4gICAgICBjaGVja3MucHVzaCgndGxzJyk7XG4gICAgfVxuXG4gICAgaWYgKGV4dGVuc2lvbnMuaW5jbHVkZXMoRXh0ZW5zaW9uLlJFUVVJUkVfQVVUSCkpIHtcbiAgICAgIC8vIEN1c3RvbS1VSSBtb2RlIHVzZXMgdGhlIHNoYXJlZCBhdXRoLWNoZWNrIG1vZHVsZSAoaGVhZGVyIGluamVjdGlvbiArXG4gICAgICAvLyByZWZyZXNoIGNhcGFibGUpIHdpdGggYSBmaXJzdC1wYXJ0eSAvbG9naW4gcmVkaXJlY3QsIGV2ZW4gdGhvdWdoIHRoZVxuICAgICAgLy8gaWRlbnRpdHkgcHJvdmlkZXIgaXMgQ29nbml0by5cbiAgICAgIGNvbnN0IGlzQ3VzdG9tVWkgPSBjb21wb3NlckNvbmZpZz8ubG9naW5SZWRpcmVjdFBhdGggIT09IHVuZGVmaW5lZCAmJiBjb21wb3NlckNvbmZpZy5sb2dpblJlZGlyZWN0UGF0aCAhPT0gJyc7XG4gICAgICBjb25zdCBpc0NvZ25pdG8gPSBjb21wb3NlckNvbmZpZz8uY29nbml0b0RvbWFpbiAhPT0gdW5kZWZpbmVkICYmICFpc0N1c3RvbVVpO1xuICAgICAgbGV0IGF1dGhNb2R1bGUgPSB0aGlzLmxvYWRNb2R1bGUoaXNDb2duaXRvID8gJ2NvZ25pdG8tYXV0aC1jaGVjay5qcycgOiAnYXV0aC1jaGVjay5qcycpO1xuICAgICAgaWYgKGNvbXBvc2VyQ29uZmlnKSB7XG4gICAgICAgIGlmIChjb21wb3NlckNvbmZpZy5jb2duaXRvRG9tYWluKSB7XG4gICAgICAgICAgYXV0aE1vZHVsZSA9IGF1dGhNb2R1bGUucmVwbGFjZSgvQ09HTklUT19ET01BSU5fUExBQ0VIT0xERVIvZywgY29tcG9zZXJDb25maWcuY29nbml0b0RvbWFpbik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbXBvc2VyQ29uZmlnLnRlbmFudElkKSB7XG4gICAgICAgICAgYXV0aE1vZHVsZSA9IGF1dGhNb2R1bGUucmVwbGFjZSgvVEVOQU5UX0lEX1BMQUNFSE9MREVSL2csIGNvbXBvc2VyQ29uZmlnLnRlbmFudElkKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29tcG9zZXJDb25maWcuY2xpZW50SWQpIHtcbiAgICAgICAgICBhdXRoTW9kdWxlID0gYXV0aE1vZHVsZS5yZXBsYWNlKC9DTElFTlRfSURfUExBQ0VIT0xERVIvZywgY29tcG9zZXJDb25maWcuY2xpZW50SWQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb21wb3NlckNvbmZpZy5yZWRpcmVjdFVyaSkge1xuICAgICAgICAgIGF1dGhNb2R1bGUgPSBhdXRoTW9kdWxlLnJlcGxhY2UoL1JFRElSRUNUX1VSSV9QTEFDRUhPTERFUi9nLCBjb21wb3NlckNvbmZpZy5yZWRpcmVjdFVyaSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbXBvc2VyQ29uZmlnLmNvb2tpZURvbWFpbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgYXV0aE1vZHVsZSA9IGF1dGhNb2R1bGUucmVwbGFjZSgvQ09PS0lFX0RPTUFJTl9QTEFDRUhPTERFUi9nLCBjb21wb3NlckNvbmZpZy5jb29raWVEb21haW4pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSGVhZGVyIGluamVjdGlvbiBwbGFjZWhvbGRlcnNcbiAgICAgICAgY29uc3QgZW5hYmxlSGVhZGVySW5qZWN0aW9uID0gY29tcG9zZXJDb25maWcuZW5hYmxlSGVhZGVySW5qZWN0aW9uID8/IGZhbHNlO1xuICAgICAgICBhdXRoTW9kdWxlID0gYXV0aE1vZHVsZS5yZXBsYWNlKC9FTkFCTEVfSEVBREVSX0lOSkVDVElPTl9QTEFDRUhPTERFUi9nLCBTdHJpbmcoZW5hYmxlSGVhZGVySW5qZWN0aW9uKSk7XG5cbiAgICAgICAgaWYgKGVuYWJsZUhlYWRlckluamVjdGlvbiAmJiBjb21wb3NlckNvbmZpZy5oZWFkZXJJbmplY3Rpb25DbGFpbXMpIHtcbiAgICAgICAgICBjb25zdCBtYXAgPSBjb21wb3NlckNvbmZpZy5oZWFkZXJJbmplY3Rpb25DbGFpbXM7XG4gICAgICAgICAgYXV0aE1vZHVsZSA9IGF1dGhNb2R1bGUucmVwbGFjZSgvSEVBREVSX0lOSkVDVElPTl9NQVBfUExBQ0VIT0xERVIvZywgSlNPTi5zdHJpbmdpZnkobWFwKSk7XG4gICAgICAgICAgYXV0aE1vZHVsZSA9IGF1dGhNb2R1bGUucmVwbGFjZSgvSEVBREVSX0lOSkVDVElPTl9LRVlTX1BMQUNFSE9MREVSL2csIEpTT04uc3RyaW5naWZ5KE9iamVjdC5rZXlzKG1hcCkpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhdXRoTW9kdWxlID0gYXV0aE1vZHVsZS5yZXBsYWNlKC9IRUFERVJfSU5KRUNUSU9OX01BUF9QTEFDRUhPTERFUi9nLCAne30nKTtcbiAgICAgICAgICBhdXRoTW9kdWxlID0gYXV0aE1vZHVsZS5yZXBsYWNlKC9IRUFERVJfSU5KRUNUSU9OX0tFWVNfUExBQ0VIT0xERVIvZywgJ1tdJyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBSZWZyZXNoIHJlZGlyZWN0IHBsYWNlaG9sZGVyXG4gICAgICAgIGNvbnN0IGVuYWJsZVJlZnJlc2ggPSBjb21wb3NlckNvbmZpZy5lbmFibGVSZWZyZXNoID8/IGZhbHNlO1xuICAgICAgICBhdXRoTW9kdWxlID0gYXV0aE1vZHVsZS5yZXBsYWNlKC9FTkFCTEVfUkVGUkVTSF9QTEFDRUhPTERFUi9nLCBTdHJpbmcoZW5hYmxlUmVmcmVzaCkpO1xuXG4gICAgICAgIC8vIEN1c3RvbS1VSSBsb2dpbi1yZWRpcmVjdCBwbGFjZWhvbGRlciAoZW1wdHkgc3RyaW5nID0+IElkUC1yZWRpcmVjdCBtb2RlKVxuICAgICAgICBhdXRoTW9kdWxlID0gYXV0aE1vZHVsZS5yZXBsYWNlKC9MT0dJTl9SRURJUkVDVF9QQVRIX1BMQUNFSE9MREVSL2csIGNvbXBvc2VyQ29uZmlnLmxvZ2luUmVkaXJlY3RQYXRoID8/ICcnKTtcbiAgICAgIH1cbiAgICAgIHBhcnRzLnB1c2goYXV0aE1vZHVsZSk7XG4gICAgICBjaGVja3MucHVzaCgnYXV0aCcpO1xuICAgIH1cblxuICAgIC8vIEdlbmVyYXRlIGhhbmRsZXIgZnVuY3Rpb25cbiAgICBwYXJ0cy5wdXNoKHRoaXMuZ2VuZXJhdGVIYW5kbGVyKGNoZWNrcywgY29uZmlnLCBjb21wb3NlckNvbmZpZykpO1xuXG4gICAgbGV0IGFzc2VtYmxlZCA9IHBhcnRzLmpvaW4oJ1xcblxcbicpO1xuXG4gICAgLy8gRXh0cmFjdCB0aGUgQ2xvdWRGcm9udC1zcGVjaWZpYyBpbXBvcnQgKHRlcnNlciBjYW4ndCBwYXJzZSBFUyBtb2R1bGUgaW1wb3J0cyBpbiBzY3JpcHQgbW9kZSkuXG4gICAgLy8gV2UnbGwgcHJlcGVuZCBpdCBiYWNrIGFmdGVyIG1pbmlmaWNhdGlvbi5cbiAgICBjb25zdCBjZkltcG9ydCA9IFwiaW1wb3J0IGNmIGZyb20gJ2Nsb3VkZnJvbnQnO1xcblwiO1xuICAgIGFzc2VtYmxlZCA9IGFzc2VtYmxlZC5yZXBsYWNlKC9pbXBvcnQgY2YgZnJvbSAnY2xvdWRmcm9udCc7XFxzKi9nLCAnJyk7XG5cbiAgICAvLyBBbHNvIGV4dHJhY3QgYHZhciBjcnlwdG8gPSByZXF1aXJlKCdjcnlwdG8nKTtgIOKAlCB0ZXJzZXIgaGFuZGxlcyBpdCBmaW5lIGJ1dFxuICAgIC8vIENsb3VkRnJvbnQgRnVuY3Rpb25zIG5lZWQgaXQgYXQgdGhlIHRvcCBsZXZlbC5cbiAgICBjb25zdCBjcnlwdG9SZXF1aXJlID0gXCJ2YXIgY3J5cHRvID0gcmVxdWlyZSgnY3J5cHRvJyk7XFxuXCI7XG4gICAgYXNzZW1ibGVkID0gYXNzZW1ibGVkLnJlcGxhY2UoL3ZhciBjcnlwdG8gPSByZXF1aXJlXFwoJ2NyeXB0bydcXCk7XFxzKi9nLCAnJyk7XG5cbiAgICAvLyBFeHRyYWN0IEtWUyBoYW5kbGUgZGVjbGFyYXRpb24gKGRlcGVuZHMgb24gY2YgaW1wb3J0KVxuICAgIGNvbnN0IGt2c0RlY2wgPSAnY29uc3Qga3ZzSGFuZGxlID0gY2Yua3ZzKCk7XFxuJztcbiAgICBhc3NlbWJsZWQgPSBhc3NlbWJsZWQucmVwbGFjZSgvY29uc3Qga3ZzSGFuZGxlID0gY2ZcXC5rdnNcXChcXCk7XFxzKi9nLCAnJyk7XG5cbiAgICAvLyBNaW5pZnkgd2l0aCB0ZXJzZXIgdG8gc3RheSB3ZWxsIHVuZGVyIHRoZSAxMEtCIENsb3VkRnJvbnQgRnVuY3Rpb24gbGltaXQuXG4gICAgY29uc3QgbWluaWZpZWQgPSBtaW5pZnlGdW5jdGlvbkNvZGUoYXNzZW1ibGVkKTtcblxuICAgIC8vIFByZXBlbmQgdGhlIENsb3VkRnJvbnQtc3BlY2lmaWMgcHJlYW1ibGUgYmFja1xuICAgIGNvbnN0IGNvZGUgPSBjZkltcG9ydCArIGNyeXB0b1JlcXVpcmUgKyBrdnNEZWNsICsgbWluaWZpZWQ7XG4gICAgY29uc3Qgc2l6ZUtCID0gQnVmZmVyLmJ5dGVMZW5ndGgoY29kZSwgJ3V0Zi04JykgLyAxMDI0O1xuXG4gICAgaWYgKHNpemVLQiA+IDEwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENsb3VkRnJvbnQgRnVuY3Rpb24gZXhjZWVkcyAxMEtCIGxpbWl0OiAke3NpemVLQi50b0ZpeGVkKDIpfUtCIChleHRlbnNpb25zOiAke2V4dGVuc2lvbnMuam9pbignLCAnKX0pYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvZGU7XG4gIH1cblxuICBwcml2YXRlIGxvYWRNb2R1bGUoZmlsZW5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgZmlsZVBhdGggPSBwYXRoLmpvaW4odGhpcy5tb2R1bGVzRGlyLCBmaWxlbmFtZSk7XG4gICAgY29uc3QgY29udGVudCA9IGZzLnJlYWRGaWxlU3luYyhmaWxlUGF0aCwgJ3V0Zi04Jyk7XG5cbiAgICByZXR1cm4gY29udGVudFxuICAgICAgLnJlcGxhY2UoL1xcL1xcKltcXHNcXFNdKj9cXCpcXC8vZywgJycpIC8vIGJsb2NrIGNvbW1lbnRzXG4gICAgICAucmVwbGFjZSgvXlxccypcXC9cXC8uKiQvZ20sICcnKSAvLyBsaW5lIGNvbW1lbnRzICh3aG9sZS1saW5lIG9ubHkpXG4gICAgICAucmVwbGFjZSgvXlxccypcXG4vZ20sICcnKSAvLyBibGFuayBsaW5lc1xuICAgICAgLnJlcGxhY2UoL2Z1bmN0aW9uIGhhbmRsZXJcXChldmVudFxcKSBcXHtbXFxzXFxTXSo/XFxuXFx9L2csICcnKVxuICAgICAgLnJlcGxhY2UoL2FzeW5jIGZ1bmN0aW9uIGhhbmRsZXJcXChldmVudFxcKSBcXHtbXFxzXFxTXSo/XFxuXFx9L2csICcnKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2VuZXJhdGVIYW5kbGVyKGNoZWNrczogc3RyaW5nW10sIGNvbmZpZz86IEV4dGVuc2lvbkNvbmZpZywgY29tcG9zZXJDb25maWc/OiBDb21wb3NlckNvbmZpZyk6IHN0cmluZyB7XG4gICAgY29uc3QgaGFzQXV0aCA9IGNoZWNrcy5pbmNsdWRlcygnYXV0aCcpO1xuICAgIGNvbnN0IHJlcXVpcmVNZmEgPSBjb21wb3NlckNvbmZpZz8ucmVxdWlyZU1mYSA/PyBmYWxzZTtcbiAgICBjb25zdCBsaW5lczogc3RyaW5nW10gPSBbXG4gICAgICAnLy8gR2VuZXJhdGVkIGhhbmRsZXIgZnVuY3Rpb24nLFxuICAgICAgaGFzQXV0aCA/ICdhc3luYyBmdW5jdGlvbiBoYW5kbGVyKGV2ZW50KSB7JyA6ICdmdW5jdGlvbiBoYW5kbGVyKGV2ZW50KSB7JyxcbiAgICAgICcgIHZhciBkZWNvZGVkUGF5bG9hZCA9IG51bGw7JyxcbiAgICAgICcnLFxuICAgIF07XG5cbiAgICAvLyBBZGQgVExTIGNoZWNrXG4gICAgaWYgKGNoZWNrcy5pbmNsdWRlcygndGxzJykpIHtcbiAgICAgIGxpbmVzLnB1c2goXG4gICAgICAgICcgIC8vIFRMUyAxLjMgZW5mb3JjZW1lbnQnLFxuICAgICAgICAnICB2YXIgdGxzUmVzdWx0ID0gY2hlY2tUTFMoZXZlbnQpOycsXG4gICAgICAgICcgIGlmICh0bHNSZXN1bHQpIHJldHVybiB0bHNSZXN1bHQ7JyxcbiAgICAgICAgJycsXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIEFkZCBhdXRoIGNoZWNrICh3aXRoIG9wdGlvbmFsIHJvbGUgY2hlY2tpbmcgYnVpbHQtaW4pXG4gICAgaWYgKGhhc0F1dGgpIHtcbiAgICAgIGNvbnN0IHJlcXVpcmVkUm9sZXMgPSBjb25maWc/LnJlcXVpcmVkUm9sZXMgPyBjb25maWcucmVxdWlyZWRSb2xlcyA6IFtdO1xuICAgICAgY29uc3QgbWF0Y2hNb2RlID0gY29uZmlnPy5yb2xlTWF0Y2hNb2RlIHx8IFJvbGVNYXRjaE1vZGUuT1I7XG4gICAgICBjb25zdCByb2xlc0pzb24gPSBKU09OLnN0cmluZ2lmeShyZXF1aXJlZFJvbGVzKTtcblxuICAgICAgbGluZXMucHVzaChcbiAgICAgICAgJyAgLy8gQXV0aGVudGljYXRpb24gY2hlY2snLFxuICAgICAgICBgICB2YXIgcmVxdWlyZWRSb2xlcyA9ICR7cm9sZXNKc29ufTtgLFxuICAgICAgICBgICB2YXIgbWF0Y2hNb2RlID0gJyR7bWF0Y2hNb2RlfSc7YCxcbiAgICAgICAgJyAgdmFyIGF1dGhSZXN1bHQgPSBhd2FpdCBjaGVja0F1dGgoZXZlbnQsIGRlY29kZWRQYXlsb2FkLCByZXF1aXJlZFJvbGVzLCBtYXRjaE1vZGUpOycsXG4gICAgICAgICcgIGlmICghYXV0aFJlc3VsdC5wYXNzKSByZXR1cm4gYXV0aFJlc3VsdC5yZXNwb25zZTsnLFxuICAgICAgICAnICBkZWNvZGVkUGF5bG9hZCA9IGF1dGhSZXN1bHQucGF5bG9hZDsnLFxuICAgICAgICAnJyxcbiAgICAgICAgJyAgLy8gSW5qZWN0IEF6dXJlIEFEIEpXVCBmb3IgQXNzdW1lUm9sZVdpdGhXZWJJZGVudGl0eSAoQXp1cmUgb25seSknLFxuICAgICAgICAnICBpZiAodHlwZW9mIGluamVjdEF6dXJlVG9rZW4gPT09IFxcJ2Z1bmN0aW9uXFwnKSB7JyxcbiAgICAgICAgJyAgICBldmVudC5yZXF1ZXN0ID0gaW5qZWN0QXp1cmVUb2tlbihldmVudC5yZXF1ZXN0LCBldmVudC5yZXF1ZXN0LmNvb2tpZXMpOycsXG4gICAgICAgICcgIH0nLFxuICAgICAgICAnJyxcbiAgICAgICAgJyAgLy8gSW5qZWN0IGlkZW50aXR5IGNsYWltcyBhcyBoZWFkZXJzIGZvciBvcmlnaW4gKHdoZW4gZW5hYmxlZCknLFxuICAgICAgICAnICBpZiAodHlwZW9mIGluamVjdENsYWltc0hlYWRlcnMgPT09IFxcJ2Z1bmN0aW9uXFwnKSB7JyxcbiAgICAgICAgJyAgICBldmVudC5yZXF1ZXN0ID0gaW5qZWN0Q2xhaW1zSGVhZGVycyhldmVudC5yZXF1ZXN0LCBkZWNvZGVkUGF5bG9hZCk7JyxcbiAgICAgICAgJyAgfScsXG4gICAgICAgICcnLFxuICAgICAgKTtcblxuICAgICAgLy8gTUZBIGVuZm9yY2VtZW50IChkZWZlbmNlIGluIGRlcHRoKVxuICAgICAgaWYgKHJlcXVpcmVNZmEpIHtcbiAgICAgICAgbGluZXMucHVzaChcbiAgICAgICAgICAnICAvLyBNRkEgZW5mb3JjZW1lbnQnLFxuICAgICAgICAgICcgIGlmIChkZWNvZGVkUGF5bG9hZCkgeycsXG4gICAgICAgICAgJyAgICB2YXIgYW1yID0gZGVjb2RlZFBheWxvYWQuYW1yIHx8IFtdOycsXG4gICAgICAgICAgJyAgICBpZiAoYW1yLmluZGV4T2YoXFwnbWZhXFwnKSA9PT0gLTEpIHsnLFxuICAgICAgICAgICcgICAgICByZXR1cm4geycsXG4gICAgICAgICAgJyAgICAgICAgc3RhdHVzQ29kZTogNDAzLCcsXG4gICAgICAgICAgJyAgICAgICAgc3RhdHVzRGVzY3JpcHRpb246IFxcJ0ZvcmJpZGRlblxcJywnLFxuICAgICAgICAgICcgICAgICAgIGJvZHk6IFxcJ0FjY2VzcyBkZW5pZWQ6IE1GQSByZXF1aXJlZFxcJycsXG4gICAgICAgICAgJyAgICAgIH07JyxcbiAgICAgICAgICAnICAgIH0nLFxuICAgICAgICAgICcgIH0nLFxuICAgICAgICAgICcnLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEFkZCBVUkwgcmV3cml0ZSBhZnRlciBhdXRoIHNvIG9yaWdpbmFsUGF0aCBpcyBzYXZlZCBjb3JyZWN0bHlcbiAgICBpZiAoY2hlY2tzLmluY2x1ZGVzKCdyZXdyaXRlJykpIHtcbiAgICAgIGxpbmVzLnB1c2goXG4gICAgICAgICcgIHJld3JpdGVUb0luZGV4KGV2ZW50KTsnLFxuICAgICAgICAnJyxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgbGluZXMucHVzaChcbiAgICAgICcgIC8vIEFsbCBjaGVja3MgcGFzc2VkJyxcbiAgICAgICcgIHJldHVybiBldmVudC5yZXF1ZXN0OycsXG4gICAgICAnfScsXG4gICAgKTtcblxuICAgIHJldHVybiBsaW5lcy5qb2luKCdcXG4nKTtcbiAgfVxufVxuIl19
@@ -140,7 +140,33 @@ function getOriginalPath(request) {
140
140
  return request.uri + '?' + qs;
141
141
  }
142
142
 
143
- function redirectToAuth(originalPath, host) {
143
+ // A live PKCE sign-in is represented by the pair of cookies (oauth_state +
144
+ // code_verifier) minted on the redirect that started it. The browser drops both
145
+ // at Max-Age=600, so their PRESENCE (with a well-formed, decodable state) is the
146
+ // practical "unexpired flow" signal available to a CloudFront Function — it has
147
+ // no way to read a cookie's own expiry. Reusing an existing pair instead of
148
+ // minting a new one is what stops a redirect provoked mid-sign-in (e.g. a
149
+ // background notification poll from a sibling panel on the shared cookie domain)
150
+ // from overwriting the state the in-flight sign-in carries, which the callback
151
+ // compares strictly and rejects with "400 Invalid state parameter".
152
+ function inflightAuthFlow(cookies) {
153
+ if (!cookies) { return null; }
154
+ var stateCookie = cookies.oauth_state;
155
+ var verifierCookie = cookies.code_verifier;
156
+ if (!stateCookie || !stateCookie.value || !verifierCookie || !verifierCookie.value) {
157
+ return null;
158
+ }
159
+ // Require the state to be decodable — a malformed value is not a flow we can
160
+ // reissue against, so fall through to minting a fresh one.
161
+ try {
162
+ JSON.parse(base64urlDecode(stateCookie.value));
163
+ } catch (e) {
164
+ return null;
165
+ }
166
+ return { state: stateCookie.value, codeVerifier: verifierCookie.value };
167
+ }
168
+
169
+ function redirectToAuth(originalPath, host, cookies) {
144
170
  // Custom-UI mode: redirect to a first-party login page. No IdP redirect and
145
171
  // no PKCE state/verifier cookies — the login page performs SRP client-side and
146
172
  // POSTs the resulting tokens to the session-issuance endpoint.
@@ -153,10 +179,27 @@ function redirectToAuth(originalPath, host) {
153
179
  }
154
180
  };
155
181
  }
182
+ var domainAttr = COOKIE_DOMAIN ? '; Domain=' + COOKIE_DOMAIN : '';
183
+
184
+ // If a sign-in is already in flight, reissue the redirect REUSING its state and
185
+ // verifier, and set NO cookies — do not clobber the live flow. The challenge is
186
+ // re-derived from the stored verifier so the authorize URL stays consistent with
187
+ // the PKCE exchange the callback will perform for whichever flow completes.
188
+ var inflight = inflightAuthFlow(cookies);
189
+ if (inflight) {
190
+ var reusedChallenge = generateCodeChallenge(inflight.codeVerifier);
191
+ return {
192
+ statusCode: 302,
193
+ headers: {
194
+ location: { value: buildAzureAuthUrl(inflight.state, reusedChallenge, host) },
195
+ 'cache-control': { value: 'no-store' }
196
+ }
197
+ };
198
+ }
199
+
156
200
  var state = generateState(originalPath, host);
157
201
  var codeVerifier = generateCodeVerifier();
158
202
  var codeChallenge = generateCodeChallenge(codeVerifier);
159
- var domainAttr = COOKIE_DOMAIN ? '; Domain=' + COOKIE_DOMAIN : '';
160
203
  return {
161
204
  statusCode: 302,
162
205
  headers: {
@@ -213,14 +256,14 @@ async function checkAuth(event, decodedPayload, requiredRoles, roleMatchMode) {
213
256
  if (!sessionCookie) {
214
257
  return {
215
258
  pass: false,
216
- response: redirectToAuth(originalPath, host)
259
+ response: redirectToAuth(originalPath, host, request.cookies)
217
260
  };
218
261
  }
219
262
  var token = sessionCookie.value;
220
263
  if (!token || token.length === 0) {
221
264
  return {
222
265
  pass: false,
223
- response: redirectToAuth(originalPath, host)
266
+ response: redirectToAuth(originalPath, host, request.cookies)
224
267
  };
225
268
  }
226
269
  try {
@@ -228,14 +271,14 @@ async function checkAuth(event, decodedPayload, requiredRoles, roleMatchMode) {
228
271
  if (parts.length !== 3) {
229
272
  return {
230
273
  pass: false,
231
- response: redirectToAuth(originalPath, host)
274
+ response: redirectToAuth(originalPath, host, request.cookies)
232
275
  };
233
276
  }
234
277
  var isValid = await validateHmacSignature(token);
235
278
  if (!isValid) {
236
279
  return {
237
280
  pass: false,
238
- response: redirectToAuth(originalPath, host)
281
+ response: redirectToAuth(originalPath, host, request.cookies)
239
282
  };
240
283
  }
241
284
  var payload = JSON.parse(base64urlDecode(parts[1]));
@@ -250,7 +293,7 @@ async function checkAuth(event, decodedPayload, requiredRoles, roleMatchMode) {
250
293
  }
251
294
  return {
252
295
  pass: false,
253
- response: redirectToAuth(originalPath, host)
296
+ response: redirectToAuth(originalPath, host, request.cookies)
254
297
  };
255
298
  }
256
299
  var jti = payload.jti;
@@ -260,7 +303,7 @@ async function checkAuth(event, decodedPayload, requiredRoles, roleMatchMode) {
260
303
  if (isRevoked) {
261
304
  return {
262
305
  pass: false,
263
- response: redirectToAuth(originalPath, host)
306
+ response: redirectToAuth(originalPath, host, request.cookies)
264
307
  };
265
308
  }
266
309
  } catch (e) {}
@@ -304,7 +347,7 @@ async function checkAuth(event, decodedPayload, requiredRoles, roleMatchMode) {
304
347
  } catch (e) {
305
348
  return {
306
349
  pass: false,
307
- response: redirectToAuth(originalPath, host)
350
+ response: redirectToAuth(originalPath, host, request.cookies)
308
351
  };
309
352
  }
310
353
  }
@@ -121,7 +121,47 @@ function getOriginalPath(request) {
121
121
  return request.uri + '?' + qs;
122
122
  }
123
123
 
124
- function redirectToAuth(originalPath) {
124
+ // A live PKCE sign-in is represented by the pair of cookies (oauth_state +
125
+ // code_verifier) minted on the redirect that started it. The browser drops both
126
+ // at Max-Age=600, so their PRESENCE (with a well-formed, decodable state) is the
127
+ // practical "unexpired flow" signal available to a CloudFront Function — it has
128
+ // no way to read a cookie's own expiry. Reusing an existing pair instead of
129
+ // minting a new one is what stops a redirect provoked mid-sign-in (e.g. a
130
+ // background notification poll from a sibling panel on the shared cookie domain)
131
+ // from overwriting the state the in-flight sign-in carries, which the callback
132
+ // compares strictly and rejects with "400 Invalid state parameter".
133
+ function inflightAuthFlow(cookies) {
134
+ if (!cookies) { return null; }
135
+ var stateCookie = cookies.oauth_state;
136
+ var verifierCookie = cookies.code_verifier;
137
+ if (!stateCookie || !stateCookie.value || !verifierCookie || !verifierCookie.value) {
138
+ return null;
139
+ }
140
+ try {
141
+ JSON.parse(base64urlDecode(stateCookie.value));
142
+ } catch (e) {
143
+ return null;
144
+ }
145
+ return { state: stateCookie.value, codeVerifier: verifierCookie.value };
146
+ }
147
+
148
+ function redirectToAuth(originalPath, cookies) {
149
+ // If a sign-in is already in flight, reissue the redirect REUSING its state and
150
+ // verifier, and set NO cookies — do not clobber the live flow. The challenge is
151
+ // re-derived from the stored verifier so the authorize URL stays consistent with
152
+ // the PKCE exchange the callback performs for whichever flow completes.
153
+ var inflight = inflightAuthFlow(cookies);
154
+ if (inflight) {
155
+ var reusedChallenge = generateCodeChallenge(inflight.codeVerifier);
156
+ return {
157
+ statusCode: 302,
158
+ headers: {
159
+ location: { value: buildCognitoAuthUrl(inflight.state, reusedChallenge) },
160
+ 'cache-control': { value: 'no-store' }
161
+ }
162
+ };
163
+ }
164
+
125
165
  var state = generateState(originalPath);
126
166
  var codeVerifier = generateCodeVerifier();
127
167
  var codeChallenge = generateCodeChallenge(codeVerifier);
@@ -155,32 +195,32 @@ async function checkAuth(event, decodedPayload, requiredRoles, roleMatchMode) {
155
195
  var cookies = request.cookies;
156
196
  var originalPath = getOriginalPath(request);
157
197
  if (!cookies['__Host-auth_session']) {
158
- return { pass: false, response: redirectToAuth(originalPath) };
198
+ return { pass: false, response: redirectToAuth(originalPath, request.cookies) };
159
199
  }
160
200
  var token = cookies['__Host-auth_session'].value;
161
201
  if (!token || token.length === 0) {
162
- return { pass: false, response: redirectToAuth(originalPath) };
202
+ return { pass: false, response: redirectToAuth(originalPath, request.cookies) };
163
203
  }
164
204
  try {
165
205
  var parts = token.split('.');
166
206
  if (parts.length !== 3) {
167
- return { pass: false, response: redirectToAuth(originalPath) };
207
+ return { pass: false, response: redirectToAuth(originalPath, request.cookies) };
168
208
  }
169
209
  var isValid = await validateHmacSignature(token);
170
210
  if (!isValid) {
171
- return { pass: false, response: redirectToAuth(originalPath) };
211
+ return { pass: false, response: redirectToAuth(originalPath, request.cookies) };
172
212
  }
173
213
  var payload = JSON.parse(base64urlDecode(parts[1]));
174
214
  var now = Math.floor(Date.now() / 1000);
175
215
  if (payload.exp && payload.exp < now) {
176
- return { pass: false, response: redirectToAuth(originalPath) };
216
+ return { pass: false, response: redirectToAuth(originalPath, request.cookies) };
177
217
  }
178
218
  var jti = payload.jti;
179
219
  if (jti) {
180
220
  try {
181
221
  var isRevoked = await kvsHandle.get('revoked:' + jti);
182
222
  if (isRevoked) {
183
- return { pass: false, response: redirectToAuth(originalPath) };
223
+ return { pass: false, response: redirectToAuth(originalPath, request.cookies) };
184
224
  }
185
225
  } catch (e) {}
186
226
  }
@@ -218,6 +258,6 @@ async function checkAuth(event, decodedPayload, requiredRoles, roleMatchMode) {
218
258
 
219
259
  return { pass: true, payload: payload };
220
260
  } catch (e) {
221
- return { pass: false, response: redirectToAuth(originalPath) };
261
+ return { pass: false, response: redirectToAuth(originalPath, request.cookies) };
222
262
  }
223
263
  }