authing_ruby 1.0.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (505) hide show
  1. checksums.yaml +7 -0
  2. data/authing_ruby.gemspec +30 -0
  3. data/lib/authing_ruby/GraphQLAPI.rb +151 -0
  4. data/lib/authing_ruby/authentication/AuthenticationClient.rb +801 -0
  5. data/lib/authing_ruby/authentication/AuthenticationTokenProvider.rb +42 -0
  6. data/lib/authing_ruby/authentication/BaseAuthenticationClient.rb +28 -0
  7. data/lib/authing_ruby/common/GraphqlClient.rb +39 -0
  8. data/lib/authing_ruby/common/HttpClient.rb +247 -0
  9. data/lib/authing_ruby/common/PublicKeyManager.rb +42 -0
  10. data/lib/authing_ruby/graphql/mutations/bindPhone.gql +53 -0
  11. data/lib/authing_ruby/graphql/mutations/createUser.gql +54 -0
  12. data/lib/authing_ruby/graphql/mutations/deleteUser.gql +6 -0
  13. data/lib/authing_ruby/graphql/mutations/deleteUsers.gql +6 -0
  14. data/lib/authing_ruby/graphql/mutations/loginByEmail.gql +54 -0
  15. data/lib/authing_ruby/graphql/mutations/loginByPhoneCode.gql +54 -0
  16. data/lib/authing_ruby/graphql/mutations/loginByPhonePassword.gql +54 -0
  17. data/lib/authing_ruby/graphql/mutations/loginByUsername.gql +54 -0
  18. data/lib/authing_ruby/graphql/mutations/refreshAccessToken.gql +7 -0
  19. data/lib/authing_ruby/graphql/mutations/registerByEmail.gql +54 -0
  20. data/lib/authing_ruby/graphql/mutations/registerByPhoneCode.gql +54 -0
  21. data/lib/authing_ruby/graphql/mutations/registerByUsername.gql +54 -0
  22. data/lib/authing_ruby/graphql/mutations/resetPassword.gql +6 -0
  23. data/lib/authing_ruby/graphql/mutations/sendEmail.gql +6 -0
  24. data/lib/authing_ruby/graphql/mutations/updatePassword.gql +53 -0
  25. data/lib/authing_ruby/graphql/mutations/updateUser.gql +54 -0
  26. data/lib/authing_ruby/graphql/queries/accessToken.gql +7 -0
  27. data/lib/authing_ruby/graphql/queries/checkLoginStatus.gql +14 -0
  28. data/lib/authing_ruby/graphql/queries/checkPasswordStrength.gql +6 -0
  29. data/lib/authing_ruby/graphql/queries/findUser.gql +64 -0
  30. data/lib/authing_ruby/graphql/queries/isUserExists.gql +13 -0
  31. data/lib/authing_ruby/graphql/queries/user.gql +63 -0
  32. data/lib/authing_ruby/graphql/queries/users.gql +57 -0
  33. data/lib/authing_ruby/management/AclManagementClient.rb +47 -0
  34. data/lib/authing_ruby/management/ApplicationsManagementClient.rb +79 -0
  35. data/lib/authing_ruby/management/ManagementClient.rb +66 -0
  36. data/lib/authing_ruby/management/ManagementTokenProvider.rb +92 -0
  37. data/lib/authing_ruby/management/RolesManagementClient.rb +38 -0
  38. data/lib/authing_ruby/management/UserpoolManagementClient.rb +15 -0
  39. data/lib/authing_ruby/management/UsersManagementClient.rb +161 -0
  40. data/lib/authing_ruby/management/WhitelistManagementClient.rb +1 -0
  41. data/lib/authing_ruby/test/RSA.rb +18 -0
  42. data/lib/authing_ruby/test/helper.rb +15 -0
  43. data/lib/authing_ruby/test/js_sdk_test/1.buildAuthorizeUrl.js +43 -0
  44. data/lib/authing_ruby/test/js_sdk_test/2.buildAuthorizeUrl_PKCE.js +47 -0
  45. data/lib/authing_ruby/test/js_sdk_test/README.md +5 -0
  46. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/CONTRIBUTION.md +23 -0
  47. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/LICENSE +21 -0
  48. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/README.md +303 -0
  49. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/browser/index.min.js +2 -0
  50. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/browser/index.min.js.LICENSE.txt +91 -0
  51. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/main/index.d.ts +7 -0
  52. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/main/index.js +20 -0
  53. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/main/lib/authentication/AuthenticationClient.d.ts +1078 -0
  54. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/main/lib/authentication/AuthenticationClient.js +2801 -0
  55. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/main/lib/authentication/AuthenticationTokenProvider.d.ts +13 -0
  56. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/main/lib/authentication/AuthenticationTokenProvider.js +56 -0
  57. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/main/lib/authentication/BaseAuthenticationClient.d.ts +6 -0
  58. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/main/lib/authentication/BaseAuthenticationClient.js +31 -0
  59. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/main/lib/authentication/EnterpriseAuthenticationClient.d.ts +92 -0
  60. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/main/lib/authentication/EnterpriseAuthenticationClient.js +250 -0
  61. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/main/lib/authentication/MfaAuthenticationClient.d.ts +303 -0
  62. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/main/lib/authentication/MfaAuthenticationClient.js +665 -0
  63. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/main/lib/authentication/QrCodeAuthenticationClient.d.ts +232 -0
  64. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/main/lib/authentication/QrCodeAuthenticationClient.js +619 -0
  65. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/main/lib/authentication/SocialAuthenticationClient.d.ts +100 -0
  66. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/main/lib/authentication/SocialAuthenticationClient.js +179 -0
  67. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/main/lib/authentication/types.d.ts +331 -0
  68. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/main/lib/authentication/types.js +69 -0
  69. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/main/lib/common/GraphqlClient.d.ts +14 -0
  70. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/main/lib/common/GraphqlClient.js +125 -0
  71. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/main/lib/common/HttpClient.d.ts +19 -0
  72. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/main/lib/common/HttpClient.js +149 -0
  73. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/main/lib/common/PublicKeyManager.d.ts +18 -0
  74. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/main/lib/common/PublicKeyManager.js +81 -0
  75. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/main/lib/graphqlapi.d.ts +110 -0
  76. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/main/lib/graphqlapi.js +1812 -0
  77. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/main/lib/management/AclManagementClient.d.ts +236 -0
  78. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/main/lib/management/AclManagementClient.js +863 -0
  79. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/main/lib/management/AgreementManagementClient.d.ts +65 -0
  80. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/main/lib/management/AgreementManagementClient.js +195 -0
  81. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/main/lib/management/ApplicationsManagementClient.d.ts +216 -0
  82. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/main/lib/management/ApplicationsManagementClient.js +531 -0
  83. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/main/lib/management/GroupsManagementClient.d.ts +184 -0
  84. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/main/lib/management/GroupsManagementClient.js +386 -0
  85. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/main/lib/management/MFAManagementClient.d.ts +58 -0
  86. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/main/lib/management/MFAManagementClient.js +126 -0
  87. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/main/lib/management/ManagementClient.d.ts +74 -0
  88. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/main/lib/management/ManagementClient.js +190 -0
  89. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/main/lib/management/ManagementTokenProvider.d.ts +39 -0
  90. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/main/lib/management/ManagementTokenProvider.js +159 -0
  91. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/main/lib/management/OrgManagementClient.d.ts +488 -0
  92. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/main/lib/management/OrgManagementClient.js +772 -0
  93. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/main/lib/management/PoliciesManagementClient.d.ts +304 -0
  94. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/main/lib/management/PoliciesManagementClient.js +512 -0
  95. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/main/lib/management/RolesManagementClient.d.ts +291 -0
  96. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/main/lib/management/RolesManagementClient.js +676 -0
  97. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/main/lib/management/StatisticsManagementClient.d.ts +56 -0
  98. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/main/lib/management/StatisticsManagementClient.js +198 -0
  99. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/main/lib/management/UdfManagementClient.d.ts +146 -0
  100. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/main/lib/management/UdfManagementClient.js +264 -0
  101. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/main/lib/management/UserActionManagementClient.d.ts +44 -0
  102. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/main/lib/management/UserActionManagementClient.js +106 -0
  103. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/main/lib/management/UserpoolManagementClient.d.ts +142 -0
  104. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/main/lib/management/UserpoolManagementClient.js +241 -0
  105. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/main/lib/management/UsersManagementClient.d.ts +753 -0
  106. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/main/lib/management/UsersManagementClient.js +1114 -0
  107. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/main/lib/management/WhitelistManagementClient.d.ts +114 -0
  108. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/main/lib/management/WhitelistManagementClient.js +259 -0
  109. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/main/lib/management/types.d.ts +982 -0
  110. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/main/lib/management/types.js +96 -0
  111. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/main/lib/platform/express/index.d.ts +30 -0
  112. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/main/lib/platform/express/index.js +126 -0
  113. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/main/lib/testing-helper.d.ts +31 -0
  114. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/main/lib/testing-helper.js +67 -0
  115. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/main/lib/utils.d.ts +53 -0
  116. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/main/lib/utils.js +343 -0
  117. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/main/lib/version.d.ts +1 -0
  118. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/main/lib/version.js +5 -0
  119. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/main/types/graphql.v2.d.ts +5612 -0
  120. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/main/types/graphql.v2.js +240 -0
  121. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/main/types/index.d.ts +7 -0
  122. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/main/types/index.js +3 -0
  123. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/module/index.d.ts +7 -0
  124. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/module/index.js +8 -0
  125. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/module/lib/authentication/AuthenticationClient.d.ts +1078 -0
  126. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/module/lib/authentication/AuthenticationClient.js +2795 -0
  127. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/module/lib/authentication/AuthenticationTokenProvider.d.ts +13 -0
  128. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/module/lib/authentication/AuthenticationTokenProvider.js +53 -0
  129. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/module/lib/authentication/BaseAuthenticationClient.d.ts +6 -0
  130. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/module/lib/authentication/BaseAuthenticationClient.js +28 -0
  131. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/module/lib/authentication/EnterpriseAuthenticationClient.d.ts +92 -0
  132. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/module/lib/authentication/EnterpriseAuthenticationClient.js +247 -0
  133. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/module/lib/authentication/MfaAuthenticationClient.d.ts +303 -0
  134. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/module/lib/authentication/MfaAuthenticationClient.js +662 -0
  135. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/module/lib/authentication/QrCodeAuthenticationClient.d.ts +232 -0
  136. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/module/lib/authentication/QrCodeAuthenticationClient.js +616 -0
  137. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/module/lib/authentication/SocialAuthenticationClient.d.ts +100 -0
  138. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/module/lib/authentication/SocialAuthenticationClient.js +176 -0
  139. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/module/lib/authentication/types.d.ts +331 -0
  140. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/module/lib/authentication/types.js +66 -0
  141. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/module/lib/common/GraphqlClient.d.ts +14 -0
  142. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/module/lib/common/GraphqlClient.js +119 -0
  143. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/module/lib/common/HttpClient.d.ts +19 -0
  144. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/module/lib/common/HttpClient.js +143 -0
  145. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/module/lib/common/PublicKeyManager.d.ts +18 -0
  146. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/module/lib/common/PublicKeyManager.js +78 -0
  147. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/module/lib/graphqlapi.d.ts +110 -0
  148. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/module/lib/graphqlapi.js +1809 -0
  149. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/module/lib/management/AclManagementClient.d.ts +236 -0
  150. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/module/lib/management/AclManagementClient.js +860 -0
  151. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/module/lib/management/AgreementManagementClient.d.ts +65 -0
  152. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/module/lib/management/AgreementManagementClient.js +192 -0
  153. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/module/lib/management/ApplicationsManagementClient.d.ts +216 -0
  154. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/module/lib/management/ApplicationsManagementClient.js +528 -0
  155. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/module/lib/management/GroupsManagementClient.d.ts +184 -0
  156. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/module/lib/management/GroupsManagementClient.js +383 -0
  157. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/module/lib/management/MFAManagementClient.d.ts +58 -0
  158. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/module/lib/management/MFAManagementClient.js +123 -0
  159. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/module/lib/management/ManagementClient.d.ts +74 -0
  160. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/module/lib/management/ManagementClient.js +184 -0
  161. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/module/lib/management/ManagementTokenProvider.d.ts +39 -0
  162. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/module/lib/management/ManagementTokenProvider.js +153 -0
  163. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/module/lib/management/OrgManagementClient.d.ts +488 -0
  164. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/module/lib/management/OrgManagementClient.js +750 -0
  165. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/module/lib/management/PoliciesManagementClient.d.ts +304 -0
  166. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/module/lib/management/PoliciesManagementClient.js +509 -0
  167. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/module/lib/management/RolesManagementClient.d.ts +291 -0
  168. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/module/lib/management/RolesManagementClient.js +673 -0
  169. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/module/lib/management/StatisticsManagementClient.d.ts +56 -0
  170. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/module/lib/management/StatisticsManagementClient.js +195 -0
  171. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/module/lib/management/UdfManagementClient.d.ts +146 -0
  172. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/module/lib/management/UdfManagementClient.js +261 -0
  173. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/module/lib/management/UserActionManagementClient.d.ts +44 -0
  174. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/module/lib/management/UserActionManagementClient.js +103 -0
  175. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/module/lib/management/UserpoolManagementClient.d.ts +142 -0
  176. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/module/lib/management/UserpoolManagementClient.js +238 -0
  177. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/module/lib/management/UsersManagementClient.d.ts +753 -0
  178. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/module/lib/management/UsersManagementClient.js +1111 -0
  179. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/module/lib/management/WhitelistManagementClient.d.ts +114 -0
  180. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/module/lib/management/WhitelistManagementClient.js +256 -0
  181. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/module/lib/management/types.d.ts +982 -0
  182. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/module/lib/management/types.js +93 -0
  183. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/module/lib/platform/express/index.d.ts +30 -0
  184. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/module/lib/platform/express/index.js +123 -0
  185. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/module/lib/testing-helper.d.ts +31 -0
  186. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/module/lib/testing-helper.js +62 -0
  187. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/module/lib/utils.d.ts +53 -0
  188. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/module/lib/utils.js +336 -0
  189. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/module/lib/version.d.ts +1 -0
  190. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/module/lib/version.js +2 -0
  191. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/module/types/graphql.v2.d.ts +5612 -0
  192. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/module/types/graphql.v2.js +237 -0
  193. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/module/types/index.d.ts +7 -0
  194. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/module/types/index.js +1 -0
  195. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/umd/index.d.ts +7 -0
  196. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/umd/index.js +30 -0
  197. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/umd/lib/authentication/AuthenticationClient.d.ts +1078 -0
  198. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/umd/lib/authentication/AuthenticationClient.js +2811 -0
  199. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/umd/lib/authentication/AuthenticationTokenProvider.d.ts +13 -0
  200. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/umd/lib/authentication/AuthenticationTokenProvider.js +66 -0
  201. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/umd/lib/authentication/BaseAuthenticationClient.d.ts +6 -0
  202. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/umd/lib/authentication/BaseAuthenticationClient.js +41 -0
  203. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/umd/lib/authentication/EnterpriseAuthenticationClient.d.ts +92 -0
  204. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/umd/lib/authentication/EnterpriseAuthenticationClient.js +260 -0
  205. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/umd/lib/authentication/MfaAuthenticationClient.d.ts +303 -0
  206. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/umd/lib/authentication/MfaAuthenticationClient.js +675 -0
  207. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/umd/lib/authentication/QrCodeAuthenticationClient.d.ts +232 -0
  208. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/umd/lib/authentication/QrCodeAuthenticationClient.js +629 -0
  209. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/umd/lib/authentication/SocialAuthenticationClient.d.ts +100 -0
  210. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/umd/lib/authentication/SocialAuthenticationClient.js +189 -0
  211. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/umd/lib/authentication/types.d.ts +331 -0
  212. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/umd/lib/authentication/types.js +79 -0
  213. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/umd/lib/common/GraphqlClient.d.ts +14 -0
  214. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/umd/lib/common/GraphqlClient.js +135 -0
  215. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/umd/lib/common/HttpClient.d.ts +19 -0
  216. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/umd/lib/common/HttpClient.js +159 -0
  217. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/umd/lib/common/PublicKeyManager.d.ts +18 -0
  218. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/umd/lib/common/PublicKeyManager.js +91 -0
  219. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/umd/lib/graphqlapi.d.ts +110 -0
  220. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/umd/lib/graphqlapi.js +1822 -0
  221. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/umd/lib/management/AclManagementClient.d.ts +236 -0
  222. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/umd/lib/management/AclManagementClient.js +873 -0
  223. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/umd/lib/management/AgreementManagementClient.d.ts +65 -0
  224. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/umd/lib/management/AgreementManagementClient.js +205 -0
  225. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/umd/lib/management/ApplicationsManagementClient.d.ts +216 -0
  226. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/umd/lib/management/ApplicationsManagementClient.js +541 -0
  227. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/umd/lib/management/GroupsManagementClient.d.ts +184 -0
  228. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/umd/lib/management/GroupsManagementClient.js +396 -0
  229. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/umd/lib/management/MFAManagementClient.d.ts +58 -0
  230. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/umd/lib/management/MFAManagementClient.js +136 -0
  231. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/umd/lib/management/ManagementClient.d.ts +74 -0
  232. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/umd/lib/management/ManagementClient.js +200 -0
  233. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/umd/lib/management/ManagementTokenProvider.d.ts +39 -0
  234. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/umd/lib/management/ManagementTokenProvider.js +169 -0
  235. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/umd/lib/management/OrgManagementClient.d.ts +488 -0
  236. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/umd/lib/management/OrgManagementClient.js +782 -0
  237. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/umd/lib/management/PoliciesManagementClient.d.ts +304 -0
  238. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/umd/lib/management/PoliciesManagementClient.js +522 -0
  239. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/umd/lib/management/RolesManagementClient.d.ts +291 -0
  240. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/umd/lib/management/RolesManagementClient.js +686 -0
  241. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/umd/lib/management/StatisticsManagementClient.d.ts +56 -0
  242. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/umd/lib/management/StatisticsManagementClient.js +208 -0
  243. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/umd/lib/management/UdfManagementClient.d.ts +146 -0
  244. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/umd/lib/management/UdfManagementClient.js +274 -0
  245. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/umd/lib/management/UserActionManagementClient.d.ts +44 -0
  246. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/umd/lib/management/UserActionManagementClient.js +116 -0
  247. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/umd/lib/management/UserpoolManagementClient.d.ts +142 -0
  248. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/umd/lib/management/UserpoolManagementClient.js +251 -0
  249. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/umd/lib/management/UsersManagementClient.d.ts +753 -0
  250. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/umd/lib/management/UsersManagementClient.js +1124 -0
  251. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/umd/lib/management/WhitelistManagementClient.d.ts +114 -0
  252. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/umd/lib/management/WhitelistManagementClient.js +269 -0
  253. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/umd/lib/management/types.d.ts +982 -0
  254. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/umd/lib/management/types.js +106 -0
  255. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/umd/lib/platform/express/index.d.ts +30 -0
  256. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/umd/lib/platform/express/index.js +136 -0
  257. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/umd/lib/testing-helper.d.ts +31 -0
  258. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/umd/lib/testing-helper.js +77 -0
  259. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/umd/lib/utils.d.ts +53 -0
  260. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/umd/lib/utils.js +353 -0
  261. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/umd/lib/version.d.ts +1 -0
  262. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/umd/lib/version.js +15 -0
  263. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/umd/types/graphql.v2.d.ts +5612 -0
  264. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/umd/types/graphql.v2.js +250 -0
  265. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/umd/types/index.d.ts +7 -0
  266. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build/umd/types/index.js +13 -0
  267. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/build-doc.js +520 -0
  268. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/node_modules/axios/CHANGELOG.md +413 -0
  269. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/node_modules/axios/LICENSE +19 -0
  270. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/node_modules/axios/README.md +709 -0
  271. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/node_modules/axios/UPGRADE_GUIDE.md +162 -0
  272. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/node_modules/axios/dist/axios.js +1715 -0
  273. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/node_modules/axios/dist/axios.map +1 -0
  274. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/node_modules/axios/dist/axios.min.js +3 -0
  275. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/node_modules/axios/dist/axios.min.map +1 -0
  276. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/node_modules/axios/index.d.ts +157 -0
  277. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/node_modules/axios/index.js +1 -0
  278. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/node_modules/axios/lib/adapters/README.md +37 -0
  279. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/node_modules/axios/lib/adapters/http.js +279 -0
  280. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/node_modules/axios/lib/adapters/xhr.js +180 -0
  281. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/node_modules/axios/lib/axios.js +53 -0
  282. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/node_modules/axios/lib/cancel/Cancel.js +19 -0
  283. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/node_modules/axios/lib/cancel/CancelToken.js +57 -0
  284. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/node_modules/axios/lib/cancel/isCancel.js +5 -0
  285. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/node_modules/axios/lib/core/Axios.js +94 -0
  286. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/node_modules/axios/lib/core/InterceptorManager.js +52 -0
  287. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/node_modules/axios/lib/core/README.md +7 -0
  288. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/node_modules/axios/lib/core/buildFullPath.js +20 -0
  289. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/node_modules/axios/lib/core/createError.js +18 -0
  290. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/node_modules/axios/lib/core/dispatchRequest.js +79 -0
  291. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/node_modules/axios/lib/core/enhanceError.js +42 -0
  292. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/node_modules/axios/lib/core/mergeConfig.js +73 -0
  293. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/node_modules/axios/lib/core/settle.js +25 -0
  294. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/node_modules/axios/lib/core/transformData.js +20 -0
  295. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/node_modules/axios/lib/defaults.js +97 -0
  296. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/node_modules/axios/lib/helpers/README.md +7 -0
  297. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/node_modules/axios/lib/helpers/bind.js +11 -0
  298. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/node_modules/axios/lib/helpers/buildURL.js +71 -0
  299. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/node_modules/axios/lib/helpers/combineURLs.js +14 -0
  300. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/node_modules/axios/lib/helpers/cookies.js +53 -0
  301. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/node_modules/axios/lib/helpers/deprecatedMethod.js +24 -0
  302. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/node_modules/axios/lib/helpers/isAbsoluteURL.js +14 -0
  303. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/node_modules/axios/lib/helpers/isURLSameOrigin.js +68 -0
  304. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/node_modules/axios/lib/helpers/normalizeHeaderName.js +12 -0
  305. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/node_modules/axios/lib/helpers/parseHeaders.js +53 -0
  306. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/node_modules/axios/lib/helpers/spread.js +27 -0
  307. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/node_modules/axios/lib/utils.js +344 -0
  308. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/node_modules/axios/package.json +84 -0
  309. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/node_modules/follow-redirects/LICENSE +18 -0
  310. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/node_modules/follow-redirects/README.md +155 -0
  311. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/node_modules/follow-redirects/http.js +1 -0
  312. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/node_modules/follow-redirects/https.js +1 -0
  313. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/node_modules/follow-redirects/index.js +322 -0
  314. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/node_modules/follow-redirects/package.json +60 -0
  315. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/package.json +129 -0
  316. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/tests/index.html +21 -0
  317. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/tsconfig.brower.json +45 -0
  318. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/tsconfig.node.json +0 -0
  319. data/lib/authing_ruby/test/js_sdk_test/node_modules/authing-js-sdk/webpack.config.js +41 -0
  320. data/lib/authing_ruby/test/js_sdk_test/node_modules/axios/CHANGELOG.md +685 -0
  321. data/lib/authing_ruby/test/js_sdk_test/node_modules/axios/LICENSE +19 -0
  322. data/lib/authing_ruby/test/js_sdk_test/node_modules/axios/README.md +800 -0
  323. data/lib/authing_ruby/test/js_sdk_test/node_modules/axios/UPGRADE_GUIDE.md +162 -0
  324. data/lib/authing_ruby/test/js_sdk_test/node_modules/axios/dist/axios.js +1756 -0
  325. data/lib/authing_ruby/test/js_sdk_test/node_modules/axios/dist/axios.map +1 -0
  326. data/lib/authing_ruby/test/js_sdk_test/node_modules/axios/dist/axios.min.js +3 -0
  327. data/lib/authing_ruby/test/js_sdk_test/node_modules/axios/dist/axios.min.map +1 -0
  328. data/lib/authing_ruby/test/js_sdk_test/node_modules/axios/index.d.ts +161 -0
  329. data/lib/authing_ruby/test/js_sdk_test/node_modules/axios/index.js +1 -0
  330. data/lib/authing_ruby/test/js_sdk_test/node_modules/axios/lib/adapters/README.md +37 -0
  331. data/lib/authing_ruby/test/js_sdk_test/node_modules/axios/lib/adapters/http.js +303 -0
  332. data/lib/authing_ruby/test/js_sdk_test/node_modules/axios/lib/adapters/xhr.js +179 -0
  333. data/lib/authing_ruby/test/js_sdk_test/node_modules/axios/lib/axios.js +56 -0
  334. data/lib/authing_ruby/test/js_sdk_test/node_modules/axios/lib/cancel/Cancel.js +19 -0
  335. data/lib/authing_ruby/test/js_sdk_test/node_modules/axios/lib/cancel/CancelToken.js +57 -0
  336. data/lib/authing_ruby/test/js_sdk_test/node_modules/axios/lib/cancel/isCancel.js +5 -0
  337. data/lib/authing_ruby/test/js_sdk_test/node_modules/axios/lib/core/Axios.js +95 -0
  338. data/lib/authing_ruby/test/js_sdk_test/node_modules/axios/lib/core/InterceptorManager.js +52 -0
  339. data/lib/authing_ruby/test/js_sdk_test/node_modules/axios/lib/core/README.md +7 -0
  340. data/lib/authing_ruby/test/js_sdk_test/node_modules/axios/lib/core/buildFullPath.js +20 -0
  341. data/lib/authing_ruby/test/js_sdk_test/node_modules/axios/lib/core/createError.js +18 -0
  342. data/lib/authing_ruby/test/js_sdk_test/node_modules/axios/lib/core/dispatchRequest.js +79 -0
  343. data/lib/authing_ruby/test/js_sdk_test/node_modules/axios/lib/core/enhanceError.js +42 -0
  344. data/lib/authing_ruby/test/js_sdk_test/node_modules/axios/lib/core/mergeConfig.js +87 -0
  345. data/lib/authing_ruby/test/js_sdk_test/node_modules/axios/lib/core/settle.js +25 -0
  346. data/lib/authing_ruby/test/js_sdk_test/node_modules/axios/lib/core/transformData.js +20 -0
  347. data/lib/authing_ruby/test/js_sdk_test/node_modules/axios/lib/defaults.js +98 -0
  348. data/lib/authing_ruby/test/js_sdk_test/node_modules/axios/lib/helpers/README.md +7 -0
  349. data/lib/authing_ruby/test/js_sdk_test/node_modules/axios/lib/helpers/bind.js +11 -0
  350. data/lib/authing_ruby/test/js_sdk_test/node_modules/axios/lib/helpers/buildURL.js +70 -0
  351. data/lib/authing_ruby/test/js_sdk_test/node_modules/axios/lib/helpers/combineURLs.js +14 -0
  352. data/lib/authing_ruby/test/js_sdk_test/node_modules/axios/lib/helpers/cookies.js +53 -0
  353. data/lib/authing_ruby/test/js_sdk_test/node_modules/axios/lib/helpers/deprecatedMethod.js +24 -0
  354. data/lib/authing_ruby/test/js_sdk_test/node_modules/axios/lib/helpers/isAbsoluteURL.js +14 -0
  355. data/lib/authing_ruby/test/js_sdk_test/node_modules/axios/lib/helpers/isAxiosError.js +11 -0
  356. data/lib/authing_ruby/test/js_sdk_test/node_modules/axios/lib/helpers/isURLSameOrigin.js +68 -0
  357. data/lib/authing_ruby/test/js_sdk_test/node_modules/axios/lib/helpers/normalizeHeaderName.js +12 -0
  358. data/lib/authing_ruby/test/js_sdk_test/node_modules/axios/lib/helpers/parseHeaders.js +53 -0
  359. data/lib/authing_ruby/test/js_sdk_test/node_modules/axios/lib/helpers/spread.js +27 -0
  360. data/lib/authing_ruby/test/js_sdk_test/node_modules/axios/lib/utils.js +351 -0
  361. data/lib/authing_ruby/test/js_sdk_test/node_modules/axios/package.json +86 -0
  362. data/lib/authing_ruby/test/js_sdk_test/node_modules/crypto-js/CONTRIBUTING.md +28 -0
  363. data/lib/authing_ruby/test/js_sdk_test/node_modules/crypto-js/LICENSE +24 -0
  364. data/lib/authing_ruby/test/js_sdk_test/node_modules/crypto-js/README.md +249 -0
  365. data/lib/authing_ruby/test/js_sdk_test/node_modules/crypto-js/aes.js +234 -0
  366. data/lib/authing_ruby/test/js_sdk_test/node_modules/crypto-js/bower.json +35 -0
  367. data/lib/authing_ruby/test/js_sdk_test/node_modules/crypto-js/cipher-core.js +890 -0
  368. data/lib/authing_ruby/test/js_sdk_test/node_modules/crypto-js/core.js +797 -0
  369. data/lib/authing_ruby/test/js_sdk_test/node_modules/crypto-js/crypto-js.js +6059 -0
  370. data/lib/authing_ruby/test/js_sdk_test/node_modules/crypto-js/docs/QuickStartGuide.wiki +470 -0
  371. data/lib/authing_ruby/test/js_sdk_test/node_modules/crypto-js/enc-base64.js +136 -0
  372. data/lib/authing_ruby/test/js_sdk_test/node_modules/crypto-js/enc-hex.js +18 -0
  373. data/lib/authing_ruby/test/js_sdk_test/node_modules/crypto-js/enc-latin1.js +18 -0
  374. data/lib/authing_ruby/test/js_sdk_test/node_modules/crypto-js/enc-utf16.js +149 -0
  375. data/lib/authing_ruby/test/js_sdk_test/node_modules/crypto-js/enc-utf8.js +18 -0
  376. data/lib/authing_ruby/test/js_sdk_test/node_modules/crypto-js/evpkdf.js +134 -0
  377. data/lib/authing_ruby/test/js_sdk_test/node_modules/crypto-js/format-hex.js +66 -0
  378. data/lib/authing_ruby/test/js_sdk_test/node_modules/crypto-js/format-openssl.js +18 -0
  379. data/lib/authing_ruby/test/js_sdk_test/node_modules/crypto-js/hmac-md5.js +18 -0
  380. data/lib/authing_ruby/test/js_sdk_test/node_modules/crypto-js/hmac-ripemd160.js +18 -0
  381. data/lib/authing_ruby/test/js_sdk_test/node_modules/crypto-js/hmac-sha1.js +18 -0
  382. data/lib/authing_ruby/test/js_sdk_test/node_modules/crypto-js/hmac-sha224.js +18 -0
  383. data/lib/authing_ruby/test/js_sdk_test/node_modules/crypto-js/hmac-sha256.js +18 -0
  384. data/lib/authing_ruby/test/js_sdk_test/node_modules/crypto-js/hmac-sha3.js +18 -0
  385. data/lib/authing_ruby/test/js_sdk_test/node_modules/crypto-js/hmac-sha384.js +18 -0
  386. data/lib/authing_ruby/test/js_sdk_test/node_modules/crypto-js/hmac-sha512.js +18 -0
  387. data/lib/authing_ruby/test/js_sdk_test/node_modules/crypto-js/hmac.js +143 -0
  388. data/lib/authing_ruby/test/js_sdk_test/node_modules/crypto-js/index.js +18 -0
  389. data/lib/authing_ruby/test/js_sdk_test/node_modules/crypto-js/lib-typedarrays.js +76 -0
  390. data/lib/authing_ruby/test/js_sdk_test/node_modules/crypto-js/md5.js +268 -0
  391. data/lib/authing_ruby/test/js_sdk_test/node_modules/crypto-js/mode-cfb.js +80 -0
  392. data/lib/authing_ruby/test/js_sdk_test/node_modules/crypto-js/mode-ctr-gladman.js +116 -0
  393. data/lib/authing_ruby/test/js_sdk_test/node_modules/crypto-js/mode-ctr.js +58 -0
  394. data/lib/authing_ruby/test/js_sdk_test/node_modules/crypto-js/mode-ecb.js +40 -0
  395. data/lib/authing_ruby/test/js_sdk_test/node_modules/crypto-js/mode-ofb.js +54 -0
  396. data/lib/authing_ruby/test/js_sdk_test/node_modules/crypto-js/package.json +38 -0
  397. data/lib/authing_ruby/test/js_sdk_test/node_modules/crypto-js/pad-ansix923.js +49 -0
  398. data/lib/authing_ruby/test/js_sdk_test/node_modules/crypto-js/pad-iso10126.js +44 -0
  399. data/lib/authing_ruby/test/js_sdk_test/node_modules/crypto-js/pad-iso97971.js +40 -0
  400. data/lib/authing_ruby/test/js_sdk_test/node_modules/crypto-js/pad-nopadding.js +30 -0
  401. data/lib/authing_ruby/test/js_sdk_test/node_modules/crypto-js/pad-pkcs7.js +18 -0
  402. data/lib/authing_ruby/test/js_sdk_test/node_modules/crypto-js/pad-zeropadding.js +47 -0
  403. data/lib/authing_ruby/test/js_sdk_test/node_modules/crypto-js/pbkdf2.js +145 -0
  404. data/lib/authing_ruby/test/js_sdk_test/node_modules/crypto-js/rabbit-legacy.js +190 -0
  405. data/lib/authing_ruby/test/js_sdk_test/node_modules/crypto-js/rabbit.js +192 -0
  406. data/lib/authing_ruby/test/js_sdk_test/node_modules/crypto-js/rc4.js +139 -0
  407. data/lib/authing_ruby/test/js_sdk_test/node_modules/crypto-js/ripemd160.js +267 -0
  408. data/lib/authing_ruby/test/js_sdk_test/node_modules/crypto-js/sha1.js +150 -0
  409. data/lib/authing_ruby/test/js_sdk_test/node_modules/crypto-js/sha224.js +80 -0
  410. data/lib/authing_ruby/test/js_sdk_test/node_modules/crypto-js/sha256.js +199 -0
  411. data/lib/authing_ruby/test/js_sdk_test/node_modules/crypto-js/sha3.js +326 -0
  412. data/lib/authing_ruby/test/js_sdk_test/node_modules/crypto-js/sha384.js +83 -0
  413. data/lib/authing_ruby/test/js_sdk_test/node_modules/crypto-js/sha512.js +326 -0
  414. data/lib/authing_ruby/test/js_sdk_test/node_modules/crypto-js/tripledes.js +779 -0
  415. data/lib/authing_ruby/test/js_sdk_test/node_modules/crypto-js/x64-core.js +304 -0
  416. data/lib/authing_ruby/test/js_sdk_test/node_modules/debug/CHANGELOG.md +395 -0
  417. data/lib/authing_ruby/test/js_sdk_test/node_modules/debug/LICENSE +19 -0
  418. data/lib/authing_ruby/test/js_sdk_test/node_modules/debug/Makefile +58 -0
  419. data/lib/authing_ruby/test/js_sdk_test/node_modules/debug/README.md +368 -0
  420. data/lib/authing_ruby/test/js_sdk_test/node_modules/debug/karma.conf.js +70 -0
  421. data/lib/authing_ruby/test/js_sdk_test/node_modules/debug/node.js +1 -0
  422. data/lib/authing_ruby/test/js_sdk_test/node_modules/debug/package.json +43 -0
  423. data/lib/authing_ruby/test/js_sdk_test/node_modules/debug/src/browser.js +195 -0
  424. data/lib/authing_ruby/test/js_sdk_test/node_modules/debug/src/debug.js +225 -0
  425. data/lib/authing_ruby/test/js_sdk_test/node_modules/debug/src/index.js +10 -0
  426. data/lib/authing_ruby/test/js_sdk_test/node_modules/debug/src/node.js +186 -0
  427. data/lib/authing_ruby/test/js_sdk_test/node_modules/follow-redirects/LICENSE +18 -0
  428. data/lib/authing_ruby/test/js_sdk_test/node_modules/follow-redirects/README.md +148 -0
  429. data/lib/authing_ruby/test/js_sdk_test/node_modules/follow-redirects/debug.js +14 -0
  430. data/lib/authing_ruby/test/js_sdk_test/node_modules/follow-redirects/http.js +1 -0
  431. data/lib/authing_ruby/test/js_sdk_test/node_modules/follow-redirects/https.js +1 -0
  432. data/lib/authing_ruby/test/js_sdk_test/node_modules/follow-redirects/index.js +535 -0
  433. data/lib/authing_ruby/test/js_sdk_test/node_modules/follow-redirects/package.json +59 -0
  434. data/lib/authing_ruby/test/js_sdk_test/node_modules/jsencrypt/LICENSE.txt +107 -0
  435. data/lib/authing_ruby/test/js_sdk_test/node_modules/jsencrypt/README.md +192 -0
  436. data/lib/authing_ruby/test/js_sdk_test/node_modules/jsencrypt/bin/jsencrypt.js +249 -0
  437. data/lib/authing_ruby/test/js_sdk_test/node_modules/jsencrypt/bin/jsencrypt.min.js +2 -0
  438. data/lib/authing_ruby/test/js_sdk_test/node_modules/jsencrypt/bin/jsencrypt.min.js.LICENSE.txt +8 -0
  439. data/lib/authing_ruby/test/js_sdk_test/node_modules/jsencrypt/lib/JSEncrypt.d.ts +116 -0
  440. data/lib/authing_ruby/test/js_sdk_test/node_modules/jsencrypt/lib/JSEncrypt.js +186 -0
  441. data/lib/authing_ruby/test/js_sdk_test/node_modules/jsencrypt/lib/JSEncryptRSAKey.d.ts +142 -0
  442. data/lib/authing_ruby/test/js_sdk_test/node_modules/jsencrypt/lib/JSEncryptRSAKey.js +315 -0
  443. data/lib/authing_ruby/test/js_sdk_test/node_modules/jsencrypt/lib/index.d.ts +3 -0
  444. data/lib/authing_ruby/test/js_sdk_test/node_modules/jsencrypt/lib/index.js +3 -0
  445. data/lib/authing_ruby/test/js_sdk_test/node_modules/jsencrypt/lib/lib/asn1js/asn1.d.ts +51 -0
  446. data/lib/authing_ruby/test/js_sdk_test/node_modules/jsencrypt/lib/lib/asn1js/asn1.js +565 -0
  447. data/lib/authing_ruby/test/js_sdk_test/node_modules/jsencrypt/lib/lib/asn1js/base64.d.ts +5 -0
  448. data/lib/authing_ruby/test/js_sdk_test/node_modules/jsencrypt/lib/lib/asn1js/base64.js +88 -0
  449. data/lib/authing_ruby/test/js_sdk_test/node_modules/jsencrypt/lib/lib/asn1js/hex.d.ts +3 -0
  450. data/lib/authing_ruby/test/js_sdk_test/node_modules/jsencrypt/lib/lib/asn1js/hex.js +64 -0
  451. data/lib/authing_ruby/test/js_sdk_test/node_modules/jsencrypt/lib/lib/asn1js/int10.d.ts +9 -0
  452. data/lib/authing_ruby/test/js_sdk_test/node_modules/jsencrypt/lib/lib/asn1js/int10.js +87 -0
  453. data/lib/authing_ruby/test/js_sdk_test/node_modules/jsencrypt/lib/lib/asn1js/oids.d.ts +9778 -0
  454. data/lib/authing_ruby/test/js_sdk_test/node_modules/jsencrypt/lib/lib/asn1js/oids.js +1962 -0
  455. data/lib/authing_ruby/test/js_sdk_test/node_modules/jsencrypt/lib/lib/jsbn/base64.d.ts +3 -0
  456. data/lib/authing_ruby/test/js_sdk_test/node_modules/jsencrypt/lib/lib/jsbn/base64.js +76 -0
  457. data/lib/authing_ruby/test/js_sdk_test/node_modules/jsencrypt/lib/lib/jsbn/jsbn.d.ts +98 -0
  458. data/lib/authing_ruby/test/js_sdk_test/node_modules/jsencrypt/lib/lib/jsbn/jsbn.js +1754 -0
  459. data/lib/authing_ruby/test/js_sdk_test/node_modules/jsencrypt/lib/lib/jsbn/prng4.d.ts +10 -0
  460. data/lib/authing_ruby/test/js_sdk_test/node_modules/jsencrypt/lib/lib/jsbn/prng4.js +46 -0
  461. data/lib/authing_ruby/test/js_sdk_test/node_modules/jsencrypt/lib/lib/jsbn/rng.d.ts +3 -0
  462. data/lib/authing_ruby/test/js_sdk_test/node_modules/jsencrypt/lib/lib/jsbn/rng.js +76 -0
  463. data/lib/authing_ruby/test/js_sdk_test/node_modules/jsencrypt/lib/lib/jsbn/rsa.d.ts +23 -0
  464. data/lib/authing_ruby/test/js_sdk_test/node_modules/jsencrypt/lib/lib/jsbn/rsa.js +373 -0
  465. data/lib/authing_ruby/test/js_sdk_test/node_modules/jsencrypt/lib/lib/jsbn/util.d.ts +7 -0
  466. data/lib/authing_ruby/test/js_sdk_test/node_modules/jsencrypt/lib/lib/jsbn/util.js +58 -0
  467. data/lib/authing_ruby/test/js_sdk_test/node_modules/jsencrypt/lib/lib/jsrsasign/asn1-1.0.js +1593 -0
  468. data/lib/authing_ruby/test/js_sdk_test/node_modules/jsencrypt/lib/lib/jsrsasign/yahoo.js +69 -0
  469. data/lib/authing_ruby/test/js_sdk_test/node_modules/jsencrypt/lib/version.json +1 -0
  470. data/lib/authing_ruby/test/js_sdk_test/node_modules/jsencrypt/package.json +49 -0
  471. data/lib/authing_ruby/test/js_sdk_test/node_modules/jwt-decode/Gruntfile.js +78 -0
  472. data/lib/authing_ruby/test/js_sdk_test/node_modules/jwt-decode/LICENSE +21 -0
  473. data/lib/authing_ruby/test/js_sdk_test/node_modules/jwt-decode/README.md +55 -0
  474. data/lib/authing_ruby/test/js_sdk_test/node_modules/jwt-decode/bower.json +20 -0
  475. data/lib/authing_ruby/test/js_sdk_test/node_modules/jwt-decode/build/jwt-decode.js +125 -0
  476. data/lib/authing_ruby/test/js_sdk_test/node_modules/jwt-decode/build/jwt-decode.min.js +1 -0
  477. data/lib/authing_ruby/test/js_sdk_test/node_modules/jwt-decode/jwt-decode.html +2 -0
  478. data/lib/authing_ruby/test/js_sdk_test/node_modules/jwt-decode/lib/atob.js +38 -0
  479. data/lib/authing_ruby/test/js_sdk_test/node_modules/jwt-decode/lib/base64_url_decode.js +33 -0
  480. data/lib/authing_ruby/test/js_sdk_test/node_modules/jwt-decode/lib/index.js +26 -0
  481. data/lib/authing_ruby/test/js_sdk_test/node_modules/jwt-decode/package.json +37 -0
  482. data/lib/authing_ruby/test/js_sdk_test/node_modules/jwt-decode/standalone.js +16 -0
  483. data/lib/authing_ruby/test/js_sdk_test/node_modules/jwt-decode/test/tests.js +53 -0
  484. data/lib/authing_ruby/test/js_sdk_test/node_modules/jwt-decode/test_harness.html +29 -0
  485. data/lib/authing_ruby/test/js_sdk_test/node_modules/jwt-decode/testem.yml +46 -0
  486. data/lib/authing_ruby/test/js_sdk_test/node_modules/jwt-decode/testem_dev.yml +1 -0
  487. data/lib/authing_ruby/test/js_sdk_test/node_modules/ms/index.js +152 -0
  488. data/lib/authing_ruby/test/js_sdk_test/node_modules/ms/license.md +21 -0
  489. data/lib/authing_ruby/test/js_sdk_test/node_modules/ms/package.json +37 -0
  490. data/lib/authing_ruby/test/js_sdk_test/node_modules/ms/readme.md +51 -0
  491. data/lib/authing_ruby/test/js_sdk_test/package-lock.json +177 -0
  492. data/lib/authing_ruby/test/js_sdk_test/package.json +15 -0
  493. data/lib/authing_ruby/test/mini_test/TestApplicationsManagementClient.rb +85 -0
  494. data/lib/authing_ruby/test/mini_test/TestAuthenticationClient.rb +232 -0
  495. data/lib/authing_ruby/test/mini_test/TestAuthenticationClientProtocal.rb +238 -0
  496. data/lib/authing_ruby/test/mini_test/TestHttpClient.rb +53 -0
  497. data/lib/authing_ruby/test/mini_test/TestManagementClient.rb +193 -0
  498. data/lib/authing_ruby/test/mini_test/TestManagementTokenProvider.rb +49 -0
  499. data/lib/authing_ruby/test/mini_test/TestNaiveHttpClient.rb +33 -0
  500. data/lib/authing_ruby/test/mini_test/TestSMSandEmail.rb +101 -0
  501. data/lib/authing_ruby/test/mini_test/TestUtils.rb +35 -0
  502. data/lib/authing_ruby/utils/utils.rb +40 -0
  503. data/lib/authing_ruby/version.rb +6 -0
  504. data/lib/authing_ruby.rb +14 -0
  505. metadata +694 -0
@@ -0,0 +1,2795 @@
1
+ var __assign = (this && this.__assign) || function () {
2
+ __assign = Object.assign || function(t) {
3
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
4
+ s = arguments[i];
5
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
6
+ t[p] = s[p];
7
+ }
8
+ return t;
9
+ };
10
+ return __assign.apply(this, arguments);
11
+ };
12
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
13
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
14
+ return new (P || (P = Promise))(function (resolve, reject) {
15
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
16
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
17
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
18
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
19
+ });
20
+ };
21
+ var __generator = (this && this.__generator) || function (thisArg, body) {
22
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
23
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
24
+ function verb(n) { return function (v) { return step([n, v]); }; }
25
+ function step(op) {
26
+ if (f) throw new TypeError("Generator is already executing.");
27
+ while (_) try {
28
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
29
+ if (y = 0, t) op = [op[0] & 2, t.value];
30
+ switch (op[0]) {
31
+ case 0: case 1: t = op; break;
32
+ case 4: _.label++; return { value: op[1], done: false };
33
+ case 5: _.label++; y = op[1]; op = [0]; continue;
34
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
35
+ default:
36
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
37
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
38
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
39
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
40
+ if (t[2]) _.ops.pop();
41
+ _.trys.pop(); continue;
42
+ }
43
+ op = body.call(thisArg, _);
44
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
45
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
46
+ }
47
+ };
48
+ import { AuthenticationTokenProvider } from './AuthenticationTokenProvider';
49
+ import sha256 from 'crypto-js/sha256';
50
+ import CryptoJS from 'crypto-js';
51
+ import { bindEmail, bindPhone, checkLoginStatus, checkPasswordStrength, getUserRoles, listUserAuthorizedResources, loginByEmail, loginByPhoneCode, loginByPhonePassword, loginBySubAccount, loginByUsername, refreshToken, registerByEmail, registerByPhoneCode, registerByUsername, removeUdv, resetPassword, sendEmail, setUdv, setUdvBatch, udv, unbindEmail, unbindPhone, updateEmail, updatePassword, updatePhone, updateUser, user } from '../graphqlapi';
52
+ import { GraphqlClient } from '../common/GraphqlClient';
53
+ import { PasswordSecurityLevel } from './types';
54
+ import { UdfTargetType } from '../../types/graphql.v2';
55
+ import { QrCodeAuthenticationClient } from './QrCodeAuthenticationClient';
56
+ import { MfaAuthenticationClient } from './MfaAuthenticationClient';
57
+ import { HttpClient, NaiveHttpClient } from '../common/HttpClient';
58
+ import { convertObjectToKeyValueList, convertUdv, convertUdvToKeyValuePair, encrypt, formatAuthorizedResources, generateRandomString, objectToQueryString, uploadFile } from '../utils';
59
+ import jwtDecode from 'jwt-decode';
60
+ import { SocialAuthenticationClient } from './SocialAuthenticationClient';
61
+ import { PublicKeyManager } from '../common/PublicKeyManager';
62
+ import { EnterpriseAuthenticationClient } from './EnterpriseAuthenticationClient';
63
+ import { BaseAuthenticationClient } from './BaseAuthenticationClient';
64
+ var DEFAULT_OPTIONS = {
65
+ appId: undefined,
66
+ appHost: undefined,
67
+ protocol: 'oidc',
68
+ tokenEndPointAuthMethod: 'client_secret_post',
69
+ introspectionEndPointAuthMethod: 'client_secret_post',
70
+ revocationEndPointAuthMethod: 'client_secret_post',
71
+ timeout: 10000,
72
+ onError: function (code, message, data) {
73
+ throw { code: code, message: message, data: data };
74
+ },
75
+ requestFrom: 'sdk',
76
+ encryptFunction: encrypt,
77
+ host: 'https://core.authing.cn'
78
+ };
79
+ /**
80
+ * @class AuthenticationClient 认证核心模块
81
+ * @description 此模块包含注册登录、重置手机号邮箱、修改账号信息等方法,是以你的终端用户(End User)的身份进行请求,适合在需要验证用户身份的情况下使用。
82
+ *
83
+ * @example
84
+ *
85
+ * 使用方法:
86
+ *
87
+ * \`\`\`javascript
88
+ * import { AuthenticationClient } from "authing-js-sdk"
89
+ * const authenticationClient = new AuthenticationClient({
90
+ * appId: "YOUR_APP_ID",
91
+ * })
92
+ * authenticationClient.registerByEmail // 使用邮箱注册
93
+ * authenticationClient.loginByEmail // 使用邮箱登录
94
+ * \`\`\`
95
+ *
96
+ *
97
+ * @name AuthenticationClient
98
+ */
99
+ var AuthenticationClient = /** @class */ (function () {
100
+ function AuthenticationClient(options) {
101
+ this.options = Object.assign({}, DEFAULT_OPTIONS, options);
102
+ this.baseClient = new BaseAuthenticationClient(this.options);
103
+ var graphqlEndpoint = this.baseClient.appHost + "/graphql/v2";
104
+ // 子模块初始化顺序: GraphqlClient -> ManagementTokenProvider -> Others
105
+ this.graphqlClient = new (this.options.graphqlClient || GraphqlClient)(graphqlEndpoint, this.options);
106
+ this.tokenProvider = new (this.options.tokenProvider ||
107
+ AuthenticationTokenProvider)(this.options);
108
+ this.httpClient = new (this.options.httpClient || HttpClient)(this.options, this.tokenProvider);
109
+ this.naiveHttpClient = new NaiveHttpClient(this.options, this.tokenProvider);
110
+ this.publicKeyManager = new PublicKeyManager(this.options, this.httpClient);
111
+ this.wxqrcode = new QrCodeAuthenticationClient(this.options, this.tokenProvider, this.httpClient, 'WXAPP_AUTH');
112
+ this.qrcode = new QrCodeAuthenticationClient(this.options, this.tokenProvider, this.httpClient, 'APP_AUTH');
113
+ this.mfa = new MfaAuthenticationClient(this.options, this.tokenProvider, this.httpClient);
114
+ this.social = new SocialAuthenticationClient(this.options, this.tokenProvider, this.httpClient);
115
+ this.enterprise = new EnterpriseAuthenticationClient(this.options, this.tokenProvider, this.httpClient);
116
+ if (this.options.token) {
117
+ this.setToken(this.options.token);
118
+ }
119
+ }
120
+ AuthenticationClient.prototype.checkLoggedIn = function () {
121
+ var _a;
122
+ var user = this.tokenProvider.getUser();
123
+ if (user) {
124
+ return user.id;
125
+ }
126
+ var token = this.tokenProvider.getToken();
127
+ if (!token) {
128
+ throw new Error('请先登录!');
129
+ }
130
+ var decoded = jwtDecode(token);
131
+ var userId = decoded.sub || ((_a = decoded.data) === null || _a === void 0 ? void 0 : _a.id);
132
+ if (!userId) {
133
+ throw new Error('不合法的 accessToken');
134
+ }
135
+ return userId;
136
+ };
137
+ AuthenticationClient.prototype.setCurrentUser = function (user) {
138
+ this.tokenProvider.setUser(user);
139
+ };
140
+ AuthenticationClient.prototype.setToken = function (token) {
141
+ this.tokenProvider.setToken(token);
142
+ };
143
+ /**
144
+ * @name registerByEmail
145
+ * @name_zh 使用邮箱注册
146
+ * @description 使用邮箱注册,此接口不要求用户对邮箱进行验证,用户注册之后 emailVerified 字段会为 false 。如果你希望邮箱未验证的用户不能进行登录,可以使用 pipeline 对此类请求进行拦截。
147
+ *
148
+ * @param {string} email 邮箱
149
+ * @param {string} password 密码
150
+ * @param {RegisterProfile} [profile] 用户资料
151
+ * @param {Object} [options]
152
+ * @param {boolean} [options.forceLogin] 是否走一遍完整的登录的,会触发登录前后的 pipeline 函数以及登录事件 webhook ,同时该用户的累计登录次数会加 1 。默认为 false 。
153
+ * @param {boolean} [options.generateToken] 是否为该用户生成 token,不会触发登录后的完整流程,用户的累计登录次数不会加 1。默认为 false 。
154
+ * @param {string} [options.clientIp] 客户端真实 IP,如果你在服务器端调用此接口,请务必将此参数设置为终端用户的真实 IP。
155
+ *
156
+ * @example
157
+ *
158
+ * authenticationClient.registerByEmail(
159
+ * 'test@example.com',
160
+ * 'passw0rd',
161
+ * {
162
+ * nickname: 'Nick'
163
+ * },
164
+ * {
165
+ * generateToken: true
166
+ * }
167
+ * )
168
+ *
169
+ * @example
170
+ * authenticationClient.registerByEmail('test@example.com', 'passw0rd')
171
+ *
172
+ *
173
+ * @returns {Promise<User>}
174
+ * @memberof AuthenticationClient
175
+ */
176
+ AuthenticationClient.prototype.registerByEmail = function (email, password, profile, options) {
177
+ return __awaiter(this, void 0, void 0, function () {
178
+ var _a, forceLogin, _b, generateToken, clientIp, params, context, customData, _c, _d, _e, extraParams, extraContext, user;
179
+ return __generator(this, function (_f) {
180
+ switch (_f.label) {
181
+ case 0:
182
+ options = options || {};
183
+ profile = profile || {};
184
+ _a = options.forceLogin, forceLogin = _a === void 0 ? false : _a, _b = options.generateToken, generateToken = _b === void 0 ? false : _b, clientIp = options.clientIp, params = options.params, context = options.context, customData = options.customData;
185
+ _d = (_c = this.options).encryptFunction;
186
+ _e = [password];
187
+ return [4 /*yield*/, this.publicKeyManager.getPublicKey()];
188
+ case 1: return [4 /*yield*/, _d.apply(_c, _e.concat([_f.sent()]))];
189
+ case 2:
190
+ password = _f.sent();
191
+ extraParams = null;
192
+ if (customData) {
193
+ extraParams = JSON.stringify(convertObjectToKeyValueList(customData));
194
+ }
195
+ else if (params) {
196
+ extraParams = JSON.stringify(params);
197
+ }
198
+ extraContext = null;
199
+ if (context) {
200
+ extraContext = JSON.stringify(context);
201
+ }
202
+ return [4 /*yield*/, registerByEmail(this.graphqlClient, this.tokenProvider, {
203
+ input: {
204
+ email: email,
205
+ password: password,
206
+ profile: profile,
207
+ forceLogin: forceLogin,
208
+ generateToken: generateToken,
209
+ clientIp: clientIp,
210
+ params: extraParams,
211
+ context: extraContext
212
+ }
213
+ })];
214
+ case 3:
215
+ user = (_f.sent()).registerByEmail;
216
+ this.setCurrentUser(user);
217
+ return [2 /*return*/, user];
218
+ }
219
+ });
220
+ });
221
+ };
222
+ /**
223
+ * @name registerByUsername
224
+ * @name_zh 使用用户名注册
225
+ * @description 使用用户名注册
226
+ *
227
+ * @param {string} username 用户名
228
+ * @param {string} password 密码
229
+ * @param {RegisterProfile} [profile] 用户资料
230
+ * @param {Object} [options]
231
+ * @param {boolean} [options.forceLogin] 是否走一遍完整的登录的,会触发登录前后的 pipeline 函数以及登录事件 webhook ,同时该用户的累计登录次数会加 1 。默认为 false 。
232
+ * @param {boolean} [options.generateToken] 是否为该用户生成 token,不会触发登录后的完整流程,用户的累计登录次数不会加 1。默认为 false 。
233
+ * @param {string} [options.clientIp] 客户端真实 IP,如果你在服务器端调用此接口,请务必将此参数设置为终端用户的真实 IP。
234
+ *
235
+ *
236
+ * @example
237
+ *
238
+ * authenticationClient.registerByUsername(
239
+ * 'bob',
240
+ * 'passw0rd',
241
+ * {
242
+ * nickname: 'Nick'
243
+ * },
244
+ * {
245
+ * generateToken: true
246
+ * }
247
+ * )
248
+ *
249
+ * @example
250
+ * authenticationClient.registerByUsername('bob', 'passw0rd')
251
+ *
252
+ *
253
+ * @returns {Promise<User>}
254
+ * @memberof AuthenticationClient
255
+ */
256
+ AuthenticationClient.prototype.registerByUsername = function (username, password, profile, options) {
257
+ return __awaiter(this, void 0, void 0, function () {
258
+ var _a, forceLogin, _b, generateToken, clientIp, params, context, customData, _c, _d, _e, extraParams, extraContext, user;
259
+ return __generator(this, function (_f) {
260
+ switch (_f.label) {
261
+ case 0:
262
+ options = options || {};
263
+ profile = profile || {};
264
+ _a = options.forceLogin, forceLogin = _a === void 0 ? false : _a, _b = options.generateToken, generateToken = _b === void 0 ? false : _b, clientIp = options.clientIp, params = options.params, context = options.context, customData = options.customData;
265
+ _d = (_c = this.options).encryptFunction;
266
+ _e = [password];
267
+ return [4 /*yield*/, this.publicKeyManager.getPublicKey()];
268
+ case 1: return [4 /*yield*/, _d.apply(_c, _e.concat([_f.sent()]))];
269
+ case 2:
270
+ password = _f.sent();
271
+ extraParams = null;
272
+ if (customData) {
273
+ extraParams = JSON.stringify(convertObjectToKeyValueList(customData));
274
+ }
275
+ else if (params) {
276
+ extraParams = JSON.stringify(params);
277
+ }
278
+ extraContext = null;
279
+ if (context) {
280
+ extraContext = JSON.stringify(context);
281
+ }
282
+ return [4 /*yield*/, registerByUsername(this.graphqlClient, this.tokenProvider, {
283
+ input: {
284
+ username: username,
285
+ password: password,
286
+ profile: profile,
287
+ forceLogin: forceLogin,
288
+ generateToken: generateToken,
289
+ clientIp: clientIp,
290
+ params: extraParams,
291
+ context: extraContext
292
+ }
293
+ })];
294
+ case 3:
295
+ user = (_f.sent()).registerByUsername;
296
+ this.setCurrentUser(user);
297
+ return [2 /*return*/, user];
298
+ }
299
+ });
300
+ });
301
+ };
302
+ /**
303
+ * @name registerByPhoneCode
304
+ * @name_zh 使用手机号注册
305
+ * @description 使用手机号注册,你可以同时设置该账号的初始密码。发送短信的接口请见 sendSmsCode
306
+ *
307
+ * @param {string} phone 手机号
308
+ * @param {string} code 短信验证码
309
+ * @param {string} password 初始密码
310
+ * @param {RegisterProfile} [profile] 用户资料
311
+ * @param {Object} [options]
312
+ * @param {boolean} [options.forceLogin] 是否走一遍完整的登录的,会触发登录前后的 pipeline 函数以及登录事件 webhook ,同时该用户的累计登录次数会加 1 。默认为 false 。
313
+ * @param {boolean} [options.generateToken] 是否为该用户生成 token,不会触发登录后的完整流程,用户的累计登录次数不会加 1。默认为 false 。
314
+ * @param {string} [options.clientIp] 客户端真实 IP,如果你在服务器端调用此接口,请务必将此参数设置为终端用户的真实 IP。
315
+ *
316
+ * @example
317
+ *
318
+ * authenticationClient.registerByPhoneCode(
319
+ * '176xxxx7041',
320
+ * '1234',
321
+ * 'passw0rd',
322
+ * {
323
+ * nickname: 'Nick'
324
+ * },
325
+ * {
326
+ * generateToken: true
327
+ * }
328
+ * )
329
+ *
330
+ * @example
331
+ * authenticationClient.registerByPhoneCode('176xxxx7041', '1234')
332
+ *
333
+ *
334
+ * @returns {Promise<User>}
335
+ * @memberof AuthenticationClient
336
+ */
337
+ AuthenticationClient.prototype.registerByPhoneCode = function (phone, code, password, profile, options) {
338
+ return __awaiter(this, void 0, void 0, function () {
339
+ var _a, forceLogin, _b, generateToken, clientIp, params, context, customData, _c, _d, _e, extraParams, extraContext, user;
340
+ return __generator(this, function (_f) {
341
+ switch (_f.label) {
342
+ case 0:
343
+ options = options || {};
344
+ profile = profile || {};
345
+ _a = options.forceLogin, forceLogin = _a === void 0 ? false : _a, _b = options.generateToken, generateToken = _b === void 0 ? false : _b, clientIp = options.clientIp, params = options.params, context = options.context, customData = options.customData;
346
+ if (!password) return [3 /*break*/, 3];
347
+ _d = (_c = this.options).encryptFunction;
348
+ _e = [password];
349
+ return [4 /*yield*/, this.publicKeyManager.getPublicKey()];
350
+ case 1: return [4 /*yield*/, _d.apply(_c, _e.concat([_f.sent()]))];
351
+ case 2:
352
+ password = _f.sent();
353
+ _f.label = 3;
354
+ case 3:
355
+ extraParams = null;
356
+ if (customData) {
357
+ extraParams = JSON.stringify(convertObjectToKeyValueList(customData));
358
+ }
359
+ else if (params) {
360
+ extraParams = JSON.stringify(params);
361
+ }
362
+ extraContext = null;
363
+ if (context) {
364
+ extraContext = JSON.stringify(context);
365
+ }
366
+ return [4 /*yield*/, registerByPhoneCode(this.graphqlClient, this.tokenProvider, {
367
+ input: {
368
+ phone: phone,
369
+ code: code,
370
+ password: password,
371
+ profile: profile,
372
+ forceLogin: forceLogin,
373
+ generateToken: generateToken,
374
+ clientIp: clientIp,
375
+ params: extraParams,
376
+ context: extraContext
377
+ }
378
+ })];
379
+ case 4:
380
+ user = (_f.sent()).registerByPhoneCode;
381
+ this.setCurrentUser(user);
382
+ return [2 /*return*/, user];
383
+ }
384
+ });
385
+ });
386
+ };
387
+ /**
388
+ * @name checkPasswordStrength
389
+ * @name_zh 检查密码强度
390
+ * @description 检查密码强度,详情请见: https://docs.authing.co/v2/guides/security/config-password.html
391
+ *
392
+ * @param {string} password
393
+ * @example
394
+ * authenticationClient.checkPasswordStrength('weak')
395
+ *
396
+ * @example
397
+ * authenticationClient.checkPasswordStrength('strongPassw0rd!')
398
+ *
399
+ * @returns {Promise<CheckPasswordStrengthResult>}
400
+ * @memberof AuthenticationClient
401
+ */
402
+ AuthenticationClient.prototype.checkPasswordStrength = function (password) {
403
+ return __awaiter(this, void 0, void 0, function () {
404
+ var result;
405
+ return __generator(this, function (_a) {
406
+ switch (_a.label) {
407
+ case 0: return [4 /*yield*/, checkPasswordStrength(this.graphqlClient, this.tokenProvider, { password: password })];
408
+ case 1:
409
+ result = (_a.sent()).checkPasswordStrength;
410
+ return [2 /*return*/, result];
411
+ }
412
+ });
413
+ });
414
+ };
415
+ /**
416
+ * @name sendSmsCode
417
+ * @name_zh 发送短信验证码
418
+ * @description 发送短信验证码, 短信验证码的有效时间为 60 s。
419
+ *
420
+ * @param {string} phone
421
+ * @example
422
+ * authenticationClient.sendSmsCode('176xxxx6754')
423
+ *
424
+ * @returns {Promise<CommonMessage>}
425
+ * @memberof AuthenticationClient
426
+ */
427
+ AuthenticationClient.prototype.sendSmsCode = function (phone) {
428
+ return __awaiter(this, void 0, void 0, function () {
429
+ var api, data;
430
+ return __generator(this, function (_a) {
431
+ switch (_a.label) {
432
+ case 0:
433
+ api = this.baseClient.appHost + "/api/v2/sms/send";
434
+ return [4 /*yield*/, this.httpClient.request({
435
+ method: 'POST',
436
+ url: api,
437
+ data: { phone: phone }
438
+ })];
439
+ case 1:
440
+ data = _a.sent();
441
+ return [2 /*return*/, data];
442
+ }
443
+ });
444
+ });
445
+ };
446
+ /**
447
+ * @name loginByEmail
448
+ * @name_zh 使用邮箱登录
449
+ * @description 使用邮箱登录,该接口默认不会限制未验证的邮箱进行登录,如果你希望邮箱未验证的用户不能进行登录,可以使用 pipeline 对此类请求进行拦截。
450
+ *
451
+ * 如果你的用户池配置了登录失败检测,当同一 IP 下登录多次失败的时候会要求用户输入图形验证码(code 为 2000)。
452
+ *
453
+ * @param {string} email 邮箱
454
+ * @param {string} password 密码
455
+ * @param {Object} [options]
456
+ * @param {boolean} [options.autoRegister] 是否自动注册。如果检测到用户不存在,会根据登录账密自动创建一个账号。
457
+ * @param {string} [options.captchaCode] 图形验证码
458
+ * @param {string} [options.clientIp] 客户端真实 IP,如果你在服务器端调用此接口,请务必将此参数设置为终端用户的真实 IP。
459
+ *
460
+ * @example
461
+ *
462
+ * authenticationClient.loginByEmail(
463
+ * 'test@example.com',
464
+ * 'passw0rd',
465
+ * {
466
+ * autoRegister: true,
467
+ * captchaCode: 'xj72'
468
+ * }
469
+ * )
470
+ *
471
+ * @example
472
+ * authenticationClient.loginByEmail('test@example.com', 'passw0rd')
473
+ *
474
+ *
475
+ * @returns {Promise<User>}
476
+ * @memberof AuthenticationClient
477
+ */
478
+ AuthenticationClient.prototype.loginByEmail = function (email, password, options) {
479
+ return __awaiter(this, void 0, void 0, function () {
480
+ var _a, autoRegister, captchaCode, clientIp, params, context, customData, _b, _c, _d, extraParams, extraContext, user;
481
+ return __generator(this, function (_e) {
482
+ switch (_e.label) {
483
+ case 0:
484
+ options = options || {};
485
+ _a = options.autoRegister, autoRegister = _a === void 0 ? false : _a, captchaCode = options.captchaCode, clientIp = options.clientIp, params = options.params, context = options.context, customData = options.customData;
486
+ _c = (_b = this.options).encryptFunction;
487
+ _d = [password];
488
+ return [4 /*yield*/, this.publicKeyManager.getPublicKey()];
489
+ case 1: return [4 /*yield*/, _c.apply(_b, _d.concat([_e.sent()]))];
490
+ case 2:
491
+ password = _e.sent();
492
+ extraParams = null;
493
+ if (customData) {
494
+ extraParams = JSON.stringify(convertObjectToKeyValueList(customData));
495
+ }
496
+ else if (params) {
497
+ extraParams = JSON.stringify(params);
498
+ }
499
+ extraContext = null;
500
+ if (context) {
501
+ extraContext = JSON.stringify(context);
502
+ }
503
+ return [4 /*yield*/, loginByEmail(this.graphqlClient, this.tokenProvider, {
504
+ input: {
505
+ email: email,
506
+ password: password,
507
+ autoRegister: autoRegister,
508
+ captchaCode: captchaCode,
509
+ clientIp: clientIp,
510
+ params: extraParams,
511
+ context: extraContext
512
+ }
513
+ })];
514
+ case 3:
515
+ user = (_e.sent()).loginByEmail;
516
+ this.setCurrentUser(user);
517
+ return [2 /*return*/, user];
518
+ }
519
+ });
520
+ });
521
+ };
522
+ /**
523
+ * @name loginByUsername
524
+ * @name_zh 使用用户名登录
525
+ * @description 使用用户名登录。
526
+ *
527
+ * 如果你的用户池配置了登录失败检测,当同一 IP 下登录多次失败的时候会要求用户输入图形验证码(code 为 2000)。
528
+ *
529
+ * @param {string} username 用户名
530
+ * @param {string} password 密码
531
+ * @param {Object} [options]
532
+ * @param {boolean} [options.autoRegister] 是否自动注册。如果检测到用户不存在,会根据登录账密自动创建一个账号。
533
+ * @param {string} [options.captchaCode] 图形验证码
534
+ * @param {string} [options.clientIp] 客户端真实 IP,如果你在服务器端调用此接口,请务必将此参数设置为终端用户的真实 IP。
535
+ *
536
+ *
537
+ * @example
538
+ *
539
+ * authenticationClient.loginByEmail(
540
+ * 'test@example.com',
541
+ * 'passw0rd',
542
+ * {
543
+ * autoRegister: true,
544
+ * captchaCode: 'xj72'
545
+ * }
546
+ * )
547
+ *
548
+ * @example
549
+ * authenticationClient.loginByEmail('test@example.com', 'passw0rd')
550
+ *
551
+ *
552
+ * @returns {Promise<User>}
553
+ * @memberof AuthenticationClient
554
+ */
555
+ AuthenticationClient.prototype.loginByUsername = function (username, password, options) {
556
+ return __awaiter(this, void 0, void 0, function () {
557
+ var _a, autoRegister, captchaCode, clientIp, params, context, customData, _b, _c, _d, extraParams, extraContext, user;
558
+ return __generator(this, function (_e) {
559
+ switch (_e.label) {
560
+ case 0:
561
+ options = options || {};
562
+ _a = options.autoRegister, autoRegister = _a === void 0 ? false : _a, captchaCode = options.captchaCode, clientIp = options.clientIp, params = options.params, context = options.context, customData = options.customData;
563
+ _c = (_b = this.options).encryptFunction;
564
+ _d = [password];
565
+ return [4 /*yield*/, this.publicKeyManager.getPublicKey()];
566
+ case 1: return [4 /*yield*/, _c.apply(_b, _d.concat([_e.sent()]))];
567
+ case 2:
568
+ password = _e.sent();
569
+ extraParams = null;
570
+ if (customData) {
571
+ extraParams = JSON.stringify(convertObjectToKeyValueList(customData));
572
+ }
573
+ else if (params) {
574
+ extraParams = JSON.stringify(params);
575
+ }
576
+ extraContext = null;
577
+ if (context) {
578
+ extraContext = JSON.stringify(context);
579
+ }
580
+ return [4 /*yield*/, loginByUsername(this.graphqlClient, this.tokenProvider, {
581
+ input: {
582
+ username: username,
583
+ password: password,
584
+ autoRegister: autoRegister,
585
+ captchaCode: captchaCode,
586
+ clientIp: clientIp,
587
+ params: extraParams,
588
+ context: extraContext
589
+ }
590
+ })];
591
+ case 3:
592
+ user = (_e.sent()).loginByUsername;
593
+ this.setCurrentUser(user);
594
+ return [2 /*return*/, user];
595
+ }
596
+ });
597
+ });
598
+ };
599
+ /**
600
+ * @name loginByPhoneCode
601
+ * @name_zh 使用手机号验证码登录
602
+ * @description 使用手机号验证码登录。
603
+ *
604
+ *
605
+ * @param {string} phone 手机号
606
+ * @param {string} code 短信验证码
607
+ * @param {string} [options.clientIp] 客户端真实 IP,如果你在服务器端调用此接口,请务必将此参数设置为终端用户的真实 IP。
608
+ *
609
+ * @example
610
+ *
611
+ * authenticationClient.loginByPhoneCode(
612
+ * '176xxxx7041',
613
+ * '1234',
614
+ * )
615
+ *
616
+ *
617
+ * @returns {Promise<User>}
618
+ * @memberof AuthenticationClient
619
+ */
620
+ AuthenticationClient.prototype.loginByPhoneCode = function (phone, code, options) {
621
+ return __awaiter(this, void 0, void 0, function () {
622
+ var clientIp, params, context, customData, extraParams, extraContext, user;
623
+ return __generator(this, function (_a) {
624
+ switch (_a.label) {
625
+ case 0:
626
+ options = options || {};
627
+ clientIp = options.clientIp, params = options.params, context = options.context, customData = options.customData;
628
+ extraParams = null;
629
+ if (customData) {
630
+ extraParams = JSON.stringify(convertObjectToKeyValueList(customData));
631
+ }
632
+ else if (params) {
633
+ extraParams = JSON.stringify(params);
634
+ }
635
+ extraContext = null;
636
+ if (context) {
637
+ extraContext = JSON.stringify(context);
638
+ }
639
+ return [4 /*yield*/, loginByPhoneCode(this.graphqlClient, this.tokenProvider, {
640
+ input: {
641
+ phone: phone,
642
+ code: code,
643
+ clientIp: clientIp,
644
+ params: extraParams,
645
+ context: extraContext
646
+ }
647
+ })];
648
+ case 1:
649
+ user = (_a.sent()).loginByPhoneCode;
650
+ this.setCurrentUser(user);
651
+ return [2 /*return*/, user];
652
+ }
653
+ });
654
+ });
655
+ };
656
+ /**
657
+ * @name loginByPhonePassword
658
+ * @name_zh 使用手机号密码登录
659
+ * @description 使用手机号密码登录。
660
+ *
661
+ *
662
+ * @param {string} phone 手机号
663
+ * @param {string} password 密码
664
+ * @param {Object} [options]
665
+ * @param {string} [options.captchaCode] 图形验证码
666
+ * @param {string} [options.clientIp] 客户端真实 IP,如果你在服务器端调用此接口,请务必将此参数设置为终端用户的真实 IP。
667
+ *
668
+ * @example
669
+ *
670
+ * authenticationClient.loginByPhonePassword(
671
+ * '176xxxx7041',
672
+ * 'passw0rd',
673
+ * {
674
+ * captchaCode: 'xj72'
675
+ * }
676
+ * )
677
+ *
678
+ * @example
679
+ * authenticationClient.loginByPhonePassword('176xxxx7041', 'passw0rd')
680
+ *
681
+ *
682
+ * @returns {Promise<User>}
683
+ * @memberof AuthenticationClient
684
+ */
685
+ AuthenticationClient.prototype.loginByPhonePassword = function (phone, password, options) {
686
+ return __awaiter(this, void 0, void 0, function () {
687
+ var captchaCode, _a, autoRegister, clientIp, params, context, customData, _b, _c, _d, extraParams, extraContext, user;
688
+ return __generator(this, function (_e) {
689
+ switch (_e.label) {
690
+ case 0:
691
+ options = options || {};
692
+ captchaCode = options.captchaCode, _a = options.autoRegister, autoRegister = _a === void 0 ? false : _a, clientIp = options.clientIp, params = options.params, context = options.context, customData = options.customData;
693
+ _c = (_b = this.options).encryptFunction;
694
+ _d = [password];
695
+ return [4 /*yield*/, this.publicKeyManager.getPublicKey()];
696
+ case 1: return [4 /*yield*/, _c.apply(_b, _d.concat([_e.sent()]))];
697
+ case 2:
698
+ password = _e.sent();
699
+ extraParams = null;
700
+ if (customData) {
701
+ extraParams = JSON.stringify(convertObjectToKeyValueList(customData));
702
+ }
703
+ else if (params) {
704
+ extraParams = JSON.stringify(params);
705
+ }
706
+ extraContext = null;
707
+ if (context) {
708
+ extraContext = JSON.stringify(context);
709
+ }
710
+ return [4 /*yield*/, loginByPhonePassword(this.graphqlClient, this.tokenProvider, {
711
+ input: {
712
+ phone: phone,
713
+ password: password,
714
+ captchaCode: captchaCode,
715
+ autoRegister: autoRegister,
716
+ clientIp: clientIp,
717
+ params: extraParams,
718
+ context: extraContext
719
+ }
720
+ })];
721
+ case 3:
722
+ user = (_e.sent()).loginByPhonePassword;
723
+ this.setCurrentUser(user);
724
+ return [2 /*return*/, user];
725
+ }
726
+ });
727
+ });
728
+ };
729
+ AuthenticationClient.prototype.loginBySubAccount = function (account, password, options) {
730
+ return __awaiter(this, void 0, void 0, function () {
731
+ var captchaCode, clientIp, _a, _b, _c, user;
732
+ return __generator(this, function (_d) {
733
+ switch (_d.label) {
734
+ case 0:
735
+ options = options || {};
736
+ captchaCode = options.captchaCode, clientIp = options.clientIp;
737
+ _b = (_a = this.options).encryptFunction;
738
+ _c = [password];
739
+ return [4 /*yield*/, this.publicKeyManager.getPublicKey()];
740
+ case 1: return [4 /*yield*/, _b.apply(_a, _c.concat([_d.sent()]))];
741
+ case 2:
742
+ password = _d.sent();
743
+ return [4 /*yield*/, loginBySubAccount(this.graphqlClient, this.tokenProvider, {
744
+ account: account,
745
+ password: password,
746
+ captchaCode: captchaCode,
747
+ clientIp: clientIp
748
+ })];
749
+ case 3:
750
+ user = (_d.sent()).loginBySubAccount;
751
+ this.setCurrentUser(user);
752
+ return [2 /*return*/, user];
753
+ }
754
+ });
755
+ });
756
+ };
757
+ /**
758
+ * @name checkLoginStatus
759
+ * @name_zh 检测 Token 登录状态
760
+ * @description 检测 Token 登录状态
761
+ *
762
+ * @param {string} token 用户的登录凭证 token
763
+ *
764
+ * @example
765
+ *
766
+ * authenticationClient.checkLoginStatus('TOKEN')
767
+ *
768
+ * @returns {Promise<JwtTokenStatus>}
769
+ * @memberof AuthenticationClient
770
+ */
771
+ AuthenticationClient.prototype.checkLoginStatus = function (token) {
772
+ return __awaiter(this, void 0, void 0, function () {
773
+ var res;
774
+ return __generator(this, function (_a) {
775
+ switch (_a.label) {
776
+ case 0: return [4 /*yield*/, checkLoginStatus(this.graphqlClient, this.tokenProvider, {
777
+ token: token
778
+ })];
779
+ case 1:
780
+ res = _a.sent();
781
+ return [2 /*return*/, res.checkLoginStatus];
782
+ }
783
+ });
784
+ });
785
+ };
786
+ /**
787
+ * @name sendEmail
788
+ * @name_zh 发送邮件
789
+ * @description 发送邮件
790
+ *
791
+ * @param {string} email 邮箱
792
+ * @param {EmailScene} scene 发送场景,可选值为 RESET_PASSWORD(发送重置密码邮件,邮件中包含验证码)、VerifyEmail(发送验证邮箱的邮件)、ChangeEmail(发送修改邮箱邮件,邮件中包含验证码)
793
+ *
794
+ * @example
795
+ *
796
+ * import { EmailScene } from "authing-js-sdk"
797
+ * authenticationClient.sendEmail('test@example.com', EmailScene.RESET_PASSWORD)
798
+ *
799
+ * @returns {Promise<CommonMessage>}
800
+ * @memberof AuthenticationClient
801
+ */
802
+ AuthenticationClient.prototype.sendEmail = function (email, scene) {
803
+ return __awaiter(this, void 0, void 0, function () {
804
+ var data;
805
+ return __generator(this, function (_a) {
806
+ switch (_a.label) {
807
+ case 0: return [4 /*yield*/, sendEmail(this.graphqlClient, this.tokenProvider, { email: email, scene: scene })];
808
+ case 1:
809
+ data = (_a.sent()).sendEmail;
810
+ return [2 /*return*/, data];
811
+ }
812
+ });
813
+ });
814
+ };
815
+ /**
816
+ * @name resetPasswordByPhoneCode
817
+ * @name_zh 通过短信验证码重置密码
818
+ * @description 通过短信验证码重置密码,你需要先调用 sendSmsCode 接口发送重置密码邮件。
819
+ *
820
+ * @param {string} phone 手机号
821
+ * @param {string} code 验证码
822
+ * @param {string} newPassword 新的密码
823
+ *
824
+ * @example
825
+ *
826
+ * authenticationClient.resetPasswordByPhoneCode('176xxxx7041', '1234', 'passw0rd')
827
+ *
828
+ * @returns {Promise<CommonMessage>}
829
+ * @memberof AuthenticationClient
830
+ */
831
+ AuthenticationClient.prototype.resetPasswordByPhoneCode = function (phone, code, newPassword) {
832
+ return __awaiter(this, void 0, void 0, function () {
833
+ var _a, _b, _c, data;
834
+ return __generator(this, function (_d) {
835
+ switch (_d.label) {
836
+ case 0:
837
+ _b = (_a = this.options).encryptFunction;
838
+ _c = [newPassword];
839
+ return [4 /*yield*/, this.publicKeyManager.getPublicKey()];
840
+ case 1: return [4 /*yield*/, _b.apply(_a, _c.concat([_d.sent()]))];
841
+ case 2:
842
+ newPassword = _d.sent();
843
+ return [4 /*yield*/, resetPassword(this.graphqlClient, this.tokenProvider, {
844
+ phone: phone,
845
+ code: code,
846
+ newPassword: newPassword
847
+ })];
848
+ case 3:
849
+ data = (_d.sent()).resetPassword;
850
+ return [2 /*return*/, data];
851
+ }
852
+ });
853
+ });
854
+ };
855
+ /**
856
+ * @name resetPasswordByEmailCode
857
+ * @name_zh 通过邮件验证码重置密码
858
+ * @description 通过邮件验证码重置密码,你需要先调用 sendEmail 接口发送重置密码邮件。
859
+ *
860
+ * @param {string} phone 手机号
861
+ * @param {string} code 验证码
862
+ * @param {string} newPassword 新的密码
863
+ *
864
+ * @example
865
+ *
866
+ * authenticationClient.resetPasswordByEmailCode('test@example.com', '1234', 'passw0rd')
867
+ *
868
+ * @returns {Promise<CommonMessage>}
869
+ * @memberof AuthenticationClient
870
+ */
871
+ AuthenticationClient.prototype.resetPasswordByEmailCode = function (email, code, newPassword) {
872
+ return __awaiter(this, void 0, void 0, function () {
873
+ var _a, _b, _c, data;
874
+ return __generator(this, function (_d) {
875
+ switch (_d.label) {
876
+ case 0:
877
+ _b = (_a = this.options).encryptFunction;
878
+ _c = [newPassword];
879
+ return [4 /*yield*/, this.publicKeyManager.getPublicKey()];
880
+ case 1: return [4 /*yield*/, _b.apply(_a, _c.concat([_d.sent()]))];
881
+ case 2:
882
+ newPassword = _d.sent();
883
+ return [4 /*yield*/, resetPassword(this.graphqlClient, this.tokenProvider, {
884
+ email: email,
885
+ code: code,
886
+ newPassword: newPassword
887
+ })];
888
+ case 3:
889
+ data = (_d.sent()).resetPassword;
890
+ return [2 /*return*/, data];
891
+ }
892
+ });
893
+ });
894
+ };
895
+ /**
896
+ * @name updateProfile
897
+ * @name_zh 修改用户资料
898
+ * @description 修改用户资料,此接口不能用于修改手机号、邮箱、密码,如果需要请调用 updatePhone、updateEmail、updatePassword 接口。
899
+ *
900
+ * @param {UpdateUserInput} updates 修改的用户资料
901
+ * @param {string} updates.username 用户名
902
+ * @param {string} updates.nickname 昵称
903
+ * @param {string} updates.photo 头像
904
+ * @param {string} updates.company 公司
905
+ * @param {string} updates.browser 浏览器
906
+ * @param {string} updates.device 设备
907
+ * @param {string} updates.lastIP 最近登录的 IP
908
+ * @param {string} updates.name Name
909
+ * @param {string} updates.givenName Given Name
910
+ * @param {string} updates.familyName Family Name
911
+ * @param {string} updates.middleName Middle Name
912
+ * @param {string} updates.profile Profile Url
913
+ * @param {string} updates.preferredUsername Preferred Name
914
+ * @param {string} updates.website 个人网站
915
+ * @param {string} updates.gender 性别, F 表示男性、W 表示女性、未知表示 U
916
+ * @param {string} updates.birthdate 生日
917
+ * @param {string} updates.zoneinfo 时区
918
+ * @param {string} updates.locale 语言
919
+ * @param {string} updates.address 地址
920
+ * @param {string} updates.streetAddress 街道地址
921
+ * @param {string} updates.locality
922
+ * @param {string} updates.region 地域
923
+ * @param {string} updates.postalCode 邮编
924
+ * @param {string} updates.city 城市
925
+ * @param {string} updates.province 省份
926
+ * @param {string} updates.country 国家
927
+ *
928
+ * @example
929
+ *
930
+ * authenticationClient.updateProfile({
931
+ * nickname: "Nick",
932
+ * lastIp: "111.111.111.111"
933
+ * })
934
+ *
935
+ * @returns {Promise<User>}
936
+ * @memberof AuthenticationClient
937
+ */
938
+ AuthenticationClient.prototype.updateProfile = function (updates) {
939
+ return __awaiter(this, void 0, void 0, function () {
940
+ var userId, updated;
941
+ return __generator(this, function (_a) {
942
+ switch (_a.label) {
943
+ case 0:
944
+ userId = this.checkLoggedIn();
945
+ if (updates && updates.password) {
946
+ delete updates.password;
947
+ }
948
+ return [4 /*yield*/, updateUser(this.graphqlClient, this.tokenProvider, {
949
+ id: userId,
950
+ input: updates
951
+ })];
952
+ case 1:
953
+ updated = (_a.sent()).updateUser;
954
+ this.setCurrentUser(updated);
955
+ return [2 /*return*/, updated];
956
+ }
957
+ });
958
+ });
959
+ };
960
+ /**
961
+ * @name updatePassword
962
+ * @name_zh 更新用户密码
963
+ * @description 更新用户密码
964
+ *
965
+ * @param {string} newPassword 新密码
966
+ * @param {string} [oldPassword] 旧密码,如果用户没有设置密码,可以不填。
967
+ *
968
+ * @example
969
+ *
970
+ * authenticationClient.updatePassword('passw0rd') // 由手机号、社会化登录等其他方式注册的,首次没有设置密码,oldPassword 留空。
971
+ *
972
+ * @example
973
+ *
974
+ * authenticationClient.updatePassword('passw0rd', 'oldPassw0rd') // 用户之前设置了密码
975
+ *
976
+ * @returns {Promise<User>}
977
+ * @memberof AuthenticationClient
978
+ */
979
+ AuthenticationClient.prototype.updatePassword = function (newPassword, oldPassword) {
980
+ return __awaiter(this, void 0, void 0, function () {
981
+ var _a, _b, _c, _d, _e, _f, _g, _h, user;
982
+ return __generator(this, function (_j) {
983
+ switch (_j.label) {
984
+ case 0:
985
+ _a = newPassword;
986
+ if (!_a) return [3 /*break*/, 3];
987
+ _c = (_b = this.options).encryptFunction;
988
+ _d = [newPassword];
989
+ return [4 /*yield*/, this.publicKeyManager.getPublicKey()];
990
+ case 1: return [4 /*yield*/, _c.apply(_b, _d.concat([_j.sent()]))];
991
+ case 2:
992
+ _a = (_j.sent());
993
+ _j.label = 3;
994
+ case 3:
995
+ newPassword = _a;
996
+ _e = oldPassword;
997
+ if (!_e) return [3 /*break*/, 6];
998
+ _g = (_f = this.options).encryptFunction;
999
+ _h = [oldPassword];
1000
+ return [4 /*yield*/, this.publicKeyManager.getPublicKey()];
1001
+ case 4: return [4 /*yield*/, _g.apply(_f, _h.concat([_j.sent()]))];
1002
+ case 5:
1003
+ _e = (_j.sent());
1004
+ _j.label = 6;
1005
+ case 6:
1006
+ oldPassword = _e;
1007
+ return [4 /*yield*/, updatePassword(this.graphqlClient, this.tokenProvider, {
1008
+ newPassword: newPassword,
1009
+ oldPassword: oldPassword
1010
+ })];
1011
+ case 7:
1012
+ user = (_j.sent()).updatePassword;
1013
+ return [2 /*return*/, user];
1014
+ }
1015
+ });
1016
+ });
1017
+ };
1018
+ /**
1019
+ * @name updatePhone
1020
+ * @name_zh 更新用户手机号
1021
+ * @description 更新用户手机号。和修改邮箱一样,默认情况下,如果用户当前已经绑定了手机号,需要同时验证原有手机号(目前账号绑定的手机号)和当前邮箱(将要绑定的手机号)。
1022
+ * 也就是说,用户 A 当前绑定的手机号为 15888888888,想修改为 15899999999,那么就需要同时验证这两个手机号。
1023
+ * 开发者也可以选择不开启 “验证原有手机号“ ,可以在 Authing 控制台 的 设置目录下的安全信息模块进行关闭。
1024
+ * 用户首次绑定手机号请使用 bindPhone 接口。
1025
+ *
1026
+ * @param {string} phone 新手机号
1027
+ * @param {string} phoneCode 新手机号的验证码
1028
+ * @param {string} [oldPhone] 旧手机号
1029
+ * @param {string} [oldPhoneCode] 旧手机号的验证码
1030
+ *
1031
+ * @example
1032
+ *
1033
+ * authenticationClient.updatePhone('176xxxx7041', '1234') // 关闭了“验证原有手机号“选项
1034
+ *
1035
+ * @example
1036
+ *
1037
+ * authenticationClient.updatePhone('176xxxx7041', '1234', '156xxxx9876', '1234') // 开启了“验证原有手机号“选项
1038
+ *
1039
+ *
1040
+ * @returns {Promise<User>}
1041
+ * @memberof AuthenticationClient
1042
+ */
1043
+ AuthenticationClient.prototype.updatePhone = function (phone, phoneCode, oldPhone, oldPhoneCode) {
1044
+ return __awaiter(this, void 0, void 0, function () {
1045
+ var user;
1046
+ return __generator(this, function (_a) {
1047
+ switch (_a.label) {
1048
+ case 0: return [4 /*yield*/, updatePhone(this.graphqlClient, this.tokenProvider, {
1049
+ phone: phone,
1050
+ phoneCode: phoneCode,
1051
+ oldPhone: oldPhone,
1052
+ oldPhoneCode: oldPhoneCode
1053
+ })];
1054
+ case 1:
1055
+ user = (_a.sent()).updatePhone;
1056
+ return [2 /*return*/, user];
1057
+ }
1058
+ });
1059
+ });
1060
+ };
1061
+ /**
1062
+ * @name updateEmail
1063
+ * @name_zh 更新用户邮箱
1064
+ * @description 如果用户已经绑定了邮箱,默认情况下,需要同时验证原有邮箱(目前账号绑定的邮箱)和当前邮箱(将要绑定的邮箱)。也就是说,用户 A 当前绑定的邮箱为 123456@qq.com,想修改为 1234567@qq.com,那么就需要同时验证这两个邮箱。
1065
+ * 开发者也可以选择不开启 “验证原有邮箱“ ,可以在 Authing 控制台 的 设置目录下的安全信息模块进行关闭。
1066
+ * 用户首次绑定手机号请使用 bindEmail 接口。
1067
+ *
1068
+ * @param {string} email 新邮箱
1069
+ * @param {string} emailCode 新邮箱的验证码
1070
+ * @param {string} [oldEmail] 旧邮箱
1071
+ * @param {string} [oldEmailCode] 旧邮箱的验证码
1072
+ *
1073
+ * @example
1074
+ *
1075
+ * authenticationClient.updateEmail('test@example.com', '1234') // 关闭了“验证原有邮箱“选项
1076
+ *
1077
+ * @example
1078
+ *
1079
+ * authenticationClient.updateEmail('test@example.com', '1234', 'test2@example.com', '1234') // 开启了“验证原有邮箱“选项
1080
+ *
1081
+ *
1082
+ * @returns {Promise<User>}
1083
+ * @memberof AuthenticationClient
1084
+ */
1085
+ AuthenticationClient.prototype.updateEmail = function (email, emailCode, oldEmail, oldEmailCode) {
1086
+ return __awaiter(this, void 0, void 0, function () {
1087
+ var user;
1088
+ return __generator(this, function (_a) {
1089
+ switch (_a.label) {
1090
+ case 0: return [4 /*yield*/, updateEmail(this.graphqlClient, this.tokenProvider, {
1091
+ email: email,
1092
+ emailCode: emailCode,
1093
+ oldEmail: oldEmail,
1094
+ oldEmailCode: oldEmailCode
1095
+ })];
1096
+ case 1:
1097
+ user = (_a.sent()).updateEmail;
1098
+ return [2 /*return*/, user];
1099
+ }
1100
+ });
1101
+ });
1102
+ };
1103
+ /**
1104
+ * @name refreshToken
1105
+ * @name_zh 刷新当前用户的 token
1106
+ * @description 刷新当前用户的 token,调用此接口要求先登录。
1107
+ *
1108
+ * @example
1109
+ *
1110
+ * authenticationClient.updateEmail()
1111
+ *
1112
+ * @returns {Promise<RefreshToken>}
1113
+ * @memberof AuthenticationClient
1114
+ */
1115
+ AuthenticationClient.prototype.refreshToken = function () {
1116
+ return __awaiter(this, void 0, void 0, function () {
1117
+ var data;
1118
+ return __generator(this, function (_a) {
1119
+ switch (_a.label) {
1120
+ case 0: return [4 /*yield*/, refreshToken(this.graphqlClient, this.tokenProvider, {})];
1121
+ case 1:
1122
+ data = (_a.sent()).refreshToken;
1123
+ this.setToken(data.token);
1124
+ return [2 /*return*/, data];
1125
+ }
1126
+ });
1127
+ });
1128
+ };
1129
+ /**
1130
+ * @name linkAccount
1131
+ * @name_zh 关联账号
1132
+ * @description 将社交账号绑定到主账号(手机号、邮箱账号)。
1133
+ *
1134
+ * @param {Object} options
1135
+ * @param {string} options.primaryUserToken 主账号 Token
1136
+ * @param {string} options.secondaryUserToken 社交账号 Token
1137
+ *
1138
+ * @example
1139
+ *
1140
+ * authenticationClient.linkAccount({ primaryUserToken: '', secondaryUserToken: '' })
1141
+ *
1142
+ * @returns {{code: 200, message: "绑定成功"}}
1143
+ * @memberof AuthenticationClient
1144
+ */
1145
+ AuthenticationClient.prototype.linkAccount = function (options) {
1146
+ return __awaiter(this, void 0, void 0, function () {
1147
+ return __generator(this, function (_a) {
1148
+ switch (_a.label) {
1149
+ case 0: return [4 /*yield*/, this.httpClient.request({
1150
+ method: 'POST',
1151
+ url: this.baseClient.appHost + "/api/v2/users/link",
1152
+ data: {
1153
+ primaryUserToken: options.primaryUserToken,
1154
+ secondaryUserToken: options.secondaryUserToken
1155
+ }
1156
+ })];
1157
+ case 1:
1158
+ _a.sent();
1159
+ return [2 /*return*/, { code: 200, message: '绑定成功' }];
1160
+ }
1161
+ });
1162
+ });
1163
+ };
1164
+ /**
1165
+ * @name unLinkAccount
1166
+ * @name_zh 解除账号绑定
1167
+ * @description 将社交账号从主账号(手机号、邮箱账号)解绑。
1168
+ *
1169
+ * @param {Object} options
1170
+ * @param {string} options.primaryUserToken 主账号 Token
1171
+ * @param {string} options.provider 社交账号的提供商名称
1172
+ *
1173
+ * @example
1174
+ *
1175
+ * authenticationClient.unLinkAccount({ primaryUserToken: '', provider: 'wechat:pc' })
1176
+ *
1177
+ * @returns {{code: 200, message: "解绑成功"}}
1178
+ * @memberof AuthenticationClient
1179
+ */
1180
+ AuthenticationClient.prototype.unLinkAccount = function (options) {
1181
+ return __awaiter(this, void 0, void 0, function () {
1182
+ return __generator(this, function (_a) {
1183
+ switch (_a.label) {
1184
+ case 0: return [4 /*yield*/, this.httpClient.request({
1185
+ method: 'POST',
1186
+ url: this.baseClient.appHost + "/api/v2/users/unlink",
1187
+ data: {
1188
+ primaryUserToken: options.primaryUserToken,
1189
+ provider: options.provider
1190
+ }
1191
+ })];
1192
+ case 1:
1193
+ _a.sent();
1194
+ return [2 /*return*/, { code: 200, message: '解绑成功' }];
1195
+ }
1196
+ });
1197
+ });
1198
+ };
1199
+ /**
1200
+ * @name bindPhone
1201
+ * @name_zh 绑定手机号
1202
+ * @description 用户初次绑定手机号,如果需要修改手机号请使用 updatePhone 接口。
1203
+ *
1204
+ * @param {string} phone
1205
+ * @param {string} phoneCode
1206
+ *
1207
+ * @example
1208
+ *
1209
+ * authenticationClient.bindPhone('176xxxx7041', '1234')
1210
+ *
1211
+ * @returns {Promise<User>}
1212
+ * @memberof AuthenticationClient
1213
+ */
1214
+ AuthenticationClient.prototype.bindPhone = function (phone, phoneCode) {
1215
+ return __awaiter(this, void 0, void 0, function () {
1216
+ var user;
1217
+ return __generator(this, function (_a) {
1218
+ switch (_a.label) {
1219
+ case 0: return [4 /*yield*/, bindPhone(this.graphqlClient, this.tokenProvider, {
1220
+ phone: phone,
1221
+ phoneCode: phoneCode
1222
+ })];
1223
+ case 1:
1224
+ user = (_a.sent()).bindPhone;
1225
+ this.setCurrentUser(user);
1226
+ return [2 /*return*/, user];
1227
+ }
1228
+ });
1229
+ });
1230
+ };
1231
+ /**
1232
+ * @name unbindPhone
1233
+ * @name_zh 解绑手机号
1234
+ * @description 用户解绑手机号
1235
+ *
1236
+ * @example
1237
+ *
1238
+ * authenticationClient.unbindPhone()
1239
+ *
1240
+ * @returns {Promise<User>}
1241
+ * @memberof AuthenticationClient
1242
+ */
1243
+ AuthenticationClient.prototype.unbindPhone = function () {
1244
+ return __awaiter(this, void 0, void 0, function () {
1245
+ var user;
1246
+ return __generator(this, function (_a) {
1247
+ switch (_a.label) {
1248
+ case 0: return [4 /*yield*/, unbindPhone(this.graphqlClient, this.tokenProvider, {})];
1249
+ case 1:
1250
+ user = (_a.sent()).unbindPhone;
1251
+ this.setCurrentUser(user);
1252
+ return [2 /*return*/, user];
1253
+ }
1254
+ });
1255
+ });
1256
+ };
1257
+ /**
1258
+ * @name bindEmail
1259
+ * @name_zh 绑定邮箱号
1260
+ * @description 用户邮箱号
1261
+ *
1262
+ * @param {string} email
1263
+ * @param {string} emailCode
1264
+ *
1265
+ * @example
1266
+ *
1267
+ * authenticationClient.bindEmail('test@example.com', '1234')
1268
+ *
1269
+ * @returns {Promise<User>}
1270
+ * @memberof AuthenticationClient
1271
+ */
1272
+ AuthenticationClient.prototype.bindEmail = function (email, emailCode) {
1273
+ return __awaiter(this, void 0, void 0, function () {
1274
+ var user;
1275
+ return __generator(this, function (_a) {
1276
+ switch (_a.label) {
1277
+ case 0: return [4 /*yield*/, bindEmail(this.graphqlClient, this.tokenProvider, {
1278
+ email: email,
1279
+ emailCode: emailCode
1280
+ })];
1281
+ case 1:
1282
+ user = (_a.sent()).bindEmail;
1283
+ this.setCurrentUser(user);
1284
+ return [2 /*return*/, user];
1285
+ }
1286
+ });
1287
+ });
1288
+ };
1289
+ /**
1290
+ * @name unbindEmail
1291
+ * @name_zh 解绑邮箱号
1292
+ * @description 用户解绑邮箱号
1293
+ *
1294
+ * @example
1295
+ *
1296
+ * authenticationClient.unbindPhone()
1297
+ *
1298
+ * @returns {Promise<User>}
1299
+ * @memberof AuthenticationClient
1300
+ */
1301
+ AuthenticationClient.prototype.unbindEmail = function () {
1302
+ return __awaiter(this, void 0, void 0, function () {
1303
+ var user;
1304
+ return __generator(this, function (_a) {
1305
+ switch (_a.label) {
1306
+ case 0: return [4 /*yield*/, unbindEmail(this.graphqlClient, this.tokenProvider, {})];
1307
+ case 1:
1308
+ user = (_a.sent()).unbindEmail;
1309
+ this.setCurrentUser(user);
1310
+ return [2 /*return*/, user];
1311
+ }
1312
+ });
1313
+ });
1314
+ };
1315
+ /**
1316
+ * @name getCurrentUser
1317
+ * @name_zh 获取当前登录的用户信息
1318
+ * @description 获取当前登录的用户信息
1319
+ *
1320
+ * @example
1321
+ *
1322
+ * authenticationClient.getCurrentUser()
1323
+ *
1324
+ * @returns {Promise<User>}
1325
+ * @memberof AuthenticationClient
1326
+ */
1327
+ AuthenticationClient.prototype.getCurrentUser = function () {
1328
+ return __awaiter(this, void 0, void 0, function () {
1329
+ var data, _a;
1330
+ return __generator(this, function (_b) {
1331
+ switch (_b.label) {
1332
+ case 0:
1333
+ _b.trys.push([0, 2, , 3]);
1334
+ return [4 /*yield*/, user(this.graphqlClient, this.tokenProvider, {})];
1335
+ case 1:
1336
+ data = (_b.sent()).user;
1337
+ this.setCurrentUser(data);
1338
+ return [2 /*return*/, data];
1339
+ case 2:
1340
+ _a = _b.sent();
1341
+ return [2 /*return*/, null];
1342
+ case 3: return [2 /*return*/];
1343
+ }
1344
+ });
1345
+ });
1346
+ };
1347
+ /**
1348
+ * @name logout
1349
+ * @name_zh 退出登录
1350
+ * @description 退出登录,清空 localStorage 里的 user 和 token
1351
+ *
1352
+ * @example
1353
+ *
1354
+ * authenticationClient.logout()
1355
+ *
1356
+ * @returns {null}
1357
+ * @memberof AuthenticationClient
1358
+ */
1359
+ AuthenticationClient.prototype.logout = function () {
1360
+ return __awaiter(this, void 0, void 0, function () {
1361
+ return __generator(this, function (_a) {
1362
+ switch (_a.label) {
1363
+ case 0: return [4 /*yield*/, this.httpClient.request({
1364
+ method: 'GET',
1365
+ url: this.baseClient.appHost + "/api/v2/logout?app_id=" + this.options.appId,
1366
+ withCredentials: true
1367
+ })];
1368
+ case 1:
1369
+ _a.sent();
1370
+ this.tokenProvider.clearUser();
1371
+ return [2 /*return*/];
1372
+ }
1373
+ });
1374
+ });
1375
+ };
1376
+ /**
1377
+ * @name listUdv
1378
+ * @name_zh 获取当前用户的自定义数据列表
1379
+ * @description 获取当前用户的自定义数据列表
1380
+ * @deprecated use getUdfValue instead
1381
+ *
1382
+ * @example
1383
+ *
1384
+ * authenticationClient.listUdv()
1385
+ *
1386
+ * @returns {Promise<Array<UserDefinedData>>}
1387
+ * @memberof AuthenticationClient
1388
+ */
1389
+ AuthenticationClient.prototype.listUdv = function () {
1390
+ return __awaiter(this, void 0, void 0, function () {
1391
+ var userId, list;
1392
+ return __generator(this, function (_a) {
1393
+ switch (_a.label) {
1394
+ case 0:
1395
+ userId = this.checkLoggedIn();
1396
+ return [4 /*yield*/, udv(this.graphqlClient, this.tokenProvider, {
1397
+ targetType: UdfTargetType.User,
1398
+ targetId: userId
1399
+ })];
1400
+ case 1:
1401
+ list = (_a.sent()).udv;
1402
+ return [2 /*return*/, convertUdv(list)];
1403
+ }
1404
+ });
1405
+ });
1406
+ };
1407
+ /**
1408
+ * @name setUdv
1409
+ * @name_zh 添加自定义数据
1410
+ * @description 添加自定义数据
1411
+ *
1412
+ * @param {string} key 自定义字段的 key
1413
+ * @param {any} value 自定义数据的值,值的类型必须要和用户池定义的自定义字段类型一致。
1414
+ *
1415
+ * @example
1416
+ *
1417
+ * authenticationClient.setUdv('school', '清华大学') // 要求用户必须定义了 school 这个字段。
1418
+ *
1419
+ * @returns {Promise<Array<UserDefinedData>>}
1420
+ * @memberof AuthenticationClient
1421
+ */
1422
+ AuthenticationClient.prototype.setUdv = function (key, value) {
1423
+ return __awaiter(this, void 0, void 0, function () {
1424
+ var userId, list;
1425
+ return __generator(this, function (_a) {
1426
+ switch (_a.label) {
1427
+ case 0:
1428
+ userId = this.checkLoggedIn();
1429
+ value = JSON.stringify(value);
1430
+ return [4 /*yield*/, setUdv(this.graphqlClient, this.tokenProvider, {
1431
+ targetType: UdfTargetType.User,
1432
+ targetId: userId,
1433
+ key: key,
1434
+ value: value
1435
+ })];
1436
+ case 1:
1437
+ list = (_a.sent()).setUdv;
1438
+ return [2 /*return*/, convertUdv(list)];
1439
+ }
1440
+ });
1441
+ });
1442
+ };
1443
+ /**
1444
+ * @name removeUdv
1445
+ * @name_zh 删除自定义数据
1446
+ * @description 删除自定义数据
1447
+ *
1448
+ * @param key 自定义字段的 key
1449
+ *
1450
+ * @example
1451
+ *
1452
+ * authenticationClient.removeUdv('school')
1453
+ *
1454
+ *
1455
+ * @returns {Promise<Array<UserDefinedData>>}
1456
+ * @memberof AuthenticationClient
1457
+ */
1458
+ AuthenticationClient.prototype.removeUdv = function (key) {
1459
+ return __awaiter(this, void 0, void 0, function () {
1460
+ var userId, list;
1461
+ return __generator(this, function (_a) {
1462
+ switch (_a.label) {
1463
+ case 0:
1464
+ userId = this.checkLoggedIn();
1465
+ return [4 /*yield*/, removeUdv(this.graphqlClient, this.tokenProvider, {
1466
+ targetType: UdfTargetType.User,
1467
+ targetId: userId,
1468
+ key: key
1469
+ })];
1470
+ case 1:
1471
+ list = (_a.sent()).removeUdv;
1472
+ return [2 /*return*/, convertUdv(list)];
1473
+ }
1474
+ });
1475
+ });
1476
+ };
1477
+ /**
1478
+ * @name listOrg
1479
+ * @name_zh 获取用户所在组织机构
1480
+ * @description 获取用户所在的组织机构立碑,以及他所属的节点在此组织机构内的完整路径。
1481
+ *
1482
+ * @example
1483
+ *
1484
+ * const data = await authenticationClient.listOrgs();
1485
+ *
1486
+ * @returns {Promise<UserOrgList>}
1487
+ *
1488
+ * @memberof AuthenticationClient
1489
+ */
1490
+ AuthenticationClient.prototype.listOrgs = function () {
1491
+ return __awaiter(this, void 0, void 0, function () {
1492
+ return __generator(this, function (_a) {
1493
+ switch (_a.label) {
1494
+ case 0: return [4 /*yield*/, this.httpClient.request({
1495
+ method: 'GET',
1496
+ url: this.baseClient.appHost + "/api/v2/users/me/orgs"
1497
+ })];
1498
+ case 1: return [2 /*return*/, _a.sent()];
1499
+ }
1500
+ });
1501
+ });
1502
+ };
1503
+ /**
1504
+ * @name loginByLdap
1505
+ * @name_zh 使用 LDAP 用户名登录
1506
+ * @description 使用 LDAP 用户名登录。
1507
+ *
1508
+ * 如果你的用户池配置了登录失败检测,当同一 IP 下登录多次失败的时候会要求用户输入图形验证码(code 为 2000)。
1509
+ *
1510
+ * @param {string} username 用户名
1511
+ * @param {string} password 密码
1512
+ * @param {Object} [options]
1513
+ * @param {boolean} [options.autoRegister] 是否自动注册。如果检测到用户不存在,会根据登录账密自动创建一个账号。
1514
+ * @param {string} [options.captchaCode] 图形验证码
1515
+ * @param {string} [options.clientIp] 客户端真实 IP,如果你在服务器端调用此接口,请务必将此参数设置为终端用户的真实 IP。
1516
+ *
1517
+ *
1518
+ * @example
1519
+ * const authenticationClient = new AuthenticationClient({
1520
+ * appId: '应用 ID'
1521
+ * })
1522
+ *
1523
+ * authenticationClient.loginByLdap(
1524
+ * 'admin',
1525
+ * 'admin',
1526
+ * )
1527
+ *
1528
+ *
1529
+ * @returns {Promise<User>}
1530
+ * @memberof AuthenticationClient
1531
+ */
1532
+ AuthenticationClient.prototype.loginByLdap = function (username, password, options) {
1533
+ return __awaiter(this, void 0, void 0, function () {
1534
+ var api, user;
1535
+ return __generator(this, function (_a) {
1536
+ switch (_a.label) {
1537
+ case 0:
1538
+ options = options || {};
1539
+ api = this.baseClient.appHost + "/api/v2/ldap/verify-user";
1540
+ return [4 /*yield*/, this.httpClient.request({
1541
+ method: 'POST',
1542
+ url: api,
1543
+ data: {
1544
+ username: username,
1545
+ password: password
1546
+ }
1547
+ })];
1548
+ case 1:
1549
+ user = _a.sent();
1550
+ this.setCurrentUser(user);
1551
+ return [2 /*return*/, user];
1552
+ }
1553
+ });
1554
+ });
1555
+ };
1556
+ /**
1557
+ * @name loginByAd
1558
+ * @name_zh 使用 AD 用户名登录
1559
+ * @description 使用 AD 用户名登录。
1560
+ *
1561
+ * @param {string} username 用户名
1562
+ * @param {string} password 密码
1563
+ *
1564
+ *
1565
+ * @example
1566
+ * const authenticationClient = new AuthenticationClient({
1567
+ * appId: '应用 ID'
1568
+ * })
1569
+ *
1570
+ * authenticationClient.loginByAd(
1571
+ * 'admin',
1572
+ * 'admin',
1573
+ * )
1574
+ *
1575
+ * @returns {Promise<User>}
1576
+ * @memberof AuthenticationClient
1577
+ */
1578
+ AuthenticationClient.prototype.loginByAd = function (username, password) {
1579
+ return __awaiter(this, void 0, void 0, function () {
1580
+ var firstLevelDomain, websocketHost, api, user;
1581
+ return __generator(this, function (_a) {
1582
+ switch (_a.label) {
1583
+ case 0:
1584
+ firstLevelDomain = new URL(this.baseClient.appHost).hostname
1585
+ .split('.')
1586
+ .slice(1)
1587
+ .join('.');
1588
+ websocketHost = this.options.websocketHost || "https://ws." + firstLevelDomain;
1589
+ api = websocketHost + "/api/v2/ad/verify-user";
1590
+ return [4 /*yield*/, this.httpClient.request({
1591
+ method: 'POST',
1592
+ url: api,
1593
+ data: {
1594
+ username: username,
1595
+ password: password
1596
+ }
1597
+ })];
1598
+ case 1:
1599
+ user = _a.sent();
1600
+ this.setCurrentUser(user);
1601
+ return [2 /*return*/, user];
1602
+ }
1603
+ });
1604
+ });
1605
+ };
1606
+ /**
1607
+ * @description 上传图片
1608
+ */
1609
+ AuthenticationClient.prototype.uploadPhoto = function (accept, cb) {
1610
+ accept = accept || 'image/*';
1611
+ var authing = this;
1612
+ uploadFile({
1613
+ accept: accept,
1614
+ url: this.baseClient.appHost + "/api/v2/upload?folder=avatar"
1615
+ })
1616
+ .then(function (_a) {
1617
+ var url = _a.url;
1618
+ return cb(url);
1619
+ })
1620
+ .catch(function (_a) {
1621
+ var code = _a.code, message = _a.message;
1622
+ return authing.options.onError(code, message);
1623
+ });
1624
+ };
1625
+ /**
1626
+ * @deprecated use uploadAvatar instead
1627
+ * @description 更新用户头像
1628
+ */
1629
+ AuthenticationClient.prototype.updateAvatar = function (options) {
1630
+ return __awaiter(this, void 0, void 0, function () {
1631
+ return __generator(this, function (_a) {
1632
+ switch (_a.label) {
1633
+ case 0: return [4 /*yield*/, this.uploadAvatar(options)];
1634
+ case 1: return [2 /*return*/, _a.sent()];
1635
+ }
1636
+ });
1637
+ });
1638
+ };
1639
+ /**
1640
+ * @description 一键上传图片并更新用户头像
1641
+ *
1642
+ * @param {Object} options
1643
+ * @param {string} options.accept 支持的图片格式,默认为 'image/*'
1644
+ *
1645
+ * @example
1646
+ * const authenticationClient = new AuthenticationClient({
1647
+ * appId: 'APP_ID',
1648
+ * appHost: 'https://xxx.authing.cn'
1649
+ * })
1650
+ *
1651
+ * // 会自动打开浏览器文件上传框,并自动完成图片文件上传 CDN、修改用户头像操作。
1652
+ * authenticationClient.uploadAvatar()
1653
+ *
1654
+ * // 只支持 png 格式图片
1655
+ * authenticationClient.uploadAvatar({
1656
+ * accept: '.png'
1657
+ * })
1658
+ *
1659
+ * @returns
1660
+ */
1661
+ AuthenticationClient.prototype.uploadAvatar = function (options) {
1662
+ return __awaiter(this, void 0, void 0, function () {
1663
+ var accept, task, src, user;
1664
+ var _this = this;
1665
+ return __generator(this, function (_a) {
1666
+ switch (_a.label) {
1667
+ case 0:
1668
+ accept = (options || {}).accept;
1669
+ this.checkLoggedIn();
1670
+ task = new Promise(function (resolve) {
1671
+ _this.uploadPhoto(accept, function (src) {
1672
+ resolve(src);
1673
+ });
1674
+ });
1675
+ return [4 /*yield*/, task];
1676
+ case 1:
1677
+ src = _a.sent();
1678
+ return [4 /*yield*/, this.updateProfile({ photo: src })];
1679
+ case 2:
1680
+ user = _a.sent();
1681
+ this.setCurrentUser(user);
1682
+ return [2 /*return*/, user];
1683
+ }
1684
+ });
1685
+ });
1686
+ };
1687
+ /**
1688
+ * @description 获取当前用户的所有自定义数据
1689
+ *
1690
+ */
1691
+ AuthenticationClient.prototype.getUdfValue = function () {
1692
+ return __awaiter(this, void 0, void 0, function () {
1693
+ var userId, list;
1694
+ return __generator(this, function (_a) {
1695
+ switch (_a.label) {
1696
+ case 0:
1697
+ userId = this.checkLoggedIn();
1698
+ return [4 /*yield*/, udv(this.graphqlClient, this.tokenProvider, {
1699
+ targetType: UdfTargetType.User,
1700
+ targetId: userId
1701
+ })];
1702
+ case 1:
1703
+ list = (_a.sent()).udv;
1704
+ return [2 /*return*/, convertUdvToKeyValuePair(list)];
1705
+ }
1706
+ });
1707
+ });
1708
+ };
1709
+ /**
1710
+ * @description 设置自定义字段值
1711
+ *
1712
+ */
1713
+ AuthenticationClient.prototype.setUdfValue = function (data) {
1714
+ return __awaiter(this, void 0, void 0, function () {
1715
+ var userId;
1716
+ return __generator(this, function (_a) {
1717
+ switch (_a.label) {
1718
+ case 0:
1719
+ if (Object.keys(data).length === 0) {
1720
+ throw new Error('empty udf value list');
1721
+ }
1722
+ userId = this.checkLoggedIn();
1723
+ return [4 /*yield*/, setUdvBatch(this.graphqlClient, this.tokenProvider, {
1724
+ targetType: UdfTargetType.User,
1725
+ targetId: userId,
1726
+ udvList: Object.keys(data).map(function (key) { return ({
1727
+ key: key,
1728
+ value: JSON.stringify(data[key])
1729
+ }); })
1730
+ })];
1731
+ case 1:
1732
+ _a.sent();
1733
+ return [2 /*return*/];
1734
+ }
1735
+ });
1736
+ });
1737
+ };
1738
+ /**
1739
+ * @description 删除用户自定义数据
1740
+ */
1741
+ AuthenticationClient.prototype.removeUdfValue = function (key) {
1742
+ return __awaiter(this, void 0, void 0, function () {
1743
+ var userId;
1744
+ return __generator(this, function (_a) {
1745
+ switch (_a.label) {
1746
+ case 0:
1747
+ userId = this.checkLoggedIn();
1748
+ return [4 /*yield*/, removeUdv(this.graphqlClient, this.tokenProvider, {
1749
+ targetType: UdfTargetType.User,
1750
+ targetId: userId,
1751
+ key: key
1752
+ })];
1753
+ case 1:
1754
+ _a.sent();
1755
+ return [2 /*return*/];
1756
+ }
1757
+ });
1758
+ });
1759
+ };
1760
+ /**
1761
+ * @name getSecurityLevel
1762
+ * @name_zh 用户安全等级
1763
+ * @description 获取用户的安全等级评分
1764
+ *
1765
+ * @example
1766
+ *
1767
+ * const data = await authenticationClient.getSecurityLevel();
1768
+ *
1769
+ * @returns {Promise<SecurityLevel>}
1770
+ *
1771
+ * @memberof AuthenticationClient
1772
+ */
1773
+ AuthenticationClient.prototype.getSecurityLevel = function () {
1774
+ return __awaiter(this, void 0, void 0, function () {
1775
+ return __generator(this, function (_a) {
1776
+ switch (_a.label) {
1777
+ case 0: return [4 /*yield*/, this.httpClient.request({
1778
+ method: 'GET',
1779
+ url: this.baseClient.appHost + "/api/v2/users/me/security-level"
1780
+ })];
1781
+ case 1: return [2 /*return*/, _a.sent()];
1782
+ }
1783
+ });
1784
+ });
1785
+ };
1786
+ /**
1787
+ * @description 获取用户被授权的所有资源
1788
+ *
1789
+ * @param userId
1790
+ * @param namespace
1791
+ */
1792
+ AuthenticationClient.prototype.listAuthorizedResources = function (namespace, options) {
1793
+ return __awaiter(this, void 0, void 0, function () {
1794
+ var userId, resourceType, user, _a, list, totalCount;
1795
+ return __generator(this, function (_b) {
1796
+ switch (_b.label) {
1797
+ case 0:
1798
+ userId = this.checkLoggedIn();
1799
+ resourceType = (options || {}).resourceType;
1800
+ return [4 /*yield*/, listUserAuthorizedResources(this.graphqlClient, this.tokenProvider, {
1801
+ id: userId,
1802
+ namespace: namespace,
1803
+ resourceType: resourceType
1804
+ })];
1805
+ case 1:
1806
+ user = (_b.sent()).user;
1807
+ if (!user) {
1808
+ throw new Error('用户不存在');
1809
+ }
1810
+ _a = user.authorizedResources, list = _a.list, totalCount = _a.totalCount;
1811
+ list = formatAuthorizedResources(list);
1812
+ return [2 /*return*/, {
1813
+ list: list,
1814
+ totalCount: totalCount
1815
+ }];
1816
+ }
1817
+ });
1818
+ });
1819
+ };
1820
+ /**
1821
+ * @name computedPasswordSecurityLevel
1822
+ * @name_zh 计算密码安全等级
1823
+ * @description 计算密码安全等级
1824
+ *
1825
+ * @example
1826
+ *
1827
+ * const data = authenticationClient.computedPasswordSecurityLevel('xxxxxxxx');
1828
+ *
1829
+ * @returns {PasswordSecurityLevel}
1830
+ *
1831
+ * @memberof AuthenticationClient
1832
+ */
1833
+ AuthenticationClient.prototype.computedPasswordSecurityLevel = function (password) {
1834
+ if (typeof password !== 'string') {
1835
+ throw 'password must be a `string`';
1836
+ }
1837
+ var highLevel = new RegExp(/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[^]{12,}$/g);
1838
+ var middleLevel = new RegExp(/^(?=.*[a-zA-Z])(?=.*\d)[^]{8,}$/g);
1839
+ if (password.match(highLevel) !== null) {
1840
+ return PasswordSecurityLevel.HIGH;
1841
+ }
1842
+ if (password.match(middleLevel) !== null) {
1843
+ return PasswordSecurityLevel.MIDDLE;
1844
+ }
1845
+ return PasswordSecurityLevel.LOW;
1846
+ };
1847
+ AuthenticationClient.prototype._generateTokenRequest = function (params) {
1848
+ var ret = {};
1849
+ // 删掉所有 undefined 的 kv
1850
+ Object.keys(params).map(function (key) {
1851
+ if (typeof params[key] !== 'undefined') {
1852
+ ret[key] = params[key];
1853
+ }
1854
+ });
1855
+ var p = new URLSearchParams(ret);
1856
+ return p.toString();
1857
+ };
1858
+ AuthenticationClient.prototype._generateBasicAuthToken = function (appId, secret) {
1859
+ var id = appId || this.options.appId;
1860
+ var s = secret || this.options.secret;
1861
+ var token = 'Basic ' + Buffer.from(id + ':' + s).toString('base64');
1862
+ return token;
1863
+ };
1864
+ /**
1865
+ * @param {string} code 授权码 code
1866
+ * @param {string} codeVerifier 校验码 codeVerifier
1867
+ */
1868
+ AuthenticationClient.prototype._getAccessTokenByCodeWithClientSecretPost = function (code, codeVerifier) {
1869
+ return __awaiter(this, void 0, void 0, function () {
1870
+ var qstr, api, tokenSet;
1871
+ return __generator(this, function (_a) {
1872
+ switch (_a.label) {
1873
+ case 0:
1874
+ qstr = this._generateTokenRequest({
1875
+ client_id: this.options.appId,
1876
+ client_secret: this.options.secret,
1877
+ grant_type: 'authorization_code',
1878
+ code: code,
1879
+ redirect_uri: this.options.redirectUri,
1880
+ code_verifier: codeVerifier
1881
+ });
1882
+ api = '';
1883
+ if (this.options.protocol === 'oidc') {
1884
+ api = this.baseClient.appHost + "/oidc/token";
1885
+ }
1886
+ else if (this.options.protocol === 'oauth') {
1887
+ api = this.baseClient.appHost + "/oauth/token";
1888
+ }
1889
+ return [4 /*yield*/, this.naiveHttpClient.request({
1890
+ method: 'POST',
1891
+ url: api,
1892
+ data: qstr,
1893
+ headers: {
1894
+ 'Content-Type': 'application/x-www-form-urlencoded'
1895
+ }
1896
+ })];
1897
+ case 1:
1898
+ tokenSet = _a.sent();
1899
+ return [2 /*return*/, tokenSet];
1900
+ }
1901
+ });
1902
+ });
1903
+ };
1904
+ /**
1905
+ * @param {string} code 授权码 code
1906
+ * @param {string} codeVerifier 校验码 codeVerifier
1907
+ */
1908
+ AuthenticationClient.prototype._getAccessTokenByCodeWithClientSecretBasic = function (code, codeVerifier) {
1909
+ return __awaiter(this, void 0, void 0, function () {
1910
+ var api, qstr, tokenSet;
1911
+ return __generator(this, function (_a) {
1912
+ switch (_a.label) {
1913
+ case 0:
1914
+ api = '';
1915
+ if (this.options.protocol === 'oidc') {
1916
+ api = this.baseClient.appHost + "/oidc/token";
1917
+ }
1918
+ else if (this.options.protocol === 'oauth') {
1919
+ api = this.baseClient.appHost + "/oauth/token";
1920
+ }
1921
+ qstr = this._generateTokenRequest({
1922
+ grant_type: 'authorization_code',
1923
+ code: code,
1924
+ redirect_uri: this.options.redirectUri,
1925
+ code_verifier: codeVerifier
1926
+ });
1927
+ return [4 /*yield*/, this.naiveHttpClient.request({
1928
+ data: qstr,
1929
+ method: 'POST',
1930
+ url: api,
1931
+ headers: {
1932
+ Authorization: this._generateBasicAuthToken()
1933
+ }
1934
+ })];
1935
+ case 1:
1936
+ tokenSet = _a.sent();
1937
+ return [2 /*return*/, tokenSet];
1938
+ }
1939
+ });
1940
+ });
1941
+ };
1942
+ /**
1943
+ * @param {string} code 授权码 code
1944
+ * @param {string} codeVerifier 校验码 codeVerifier
1945
+ */
1946
+ AuthenticationClient.prototype._getAccessTokenByCodeWithNone = function (code, codeVerifier) {
1947
+ return __awaiter(this, void 0, void 0, function () {
1948
+ var api, qstr, tokenSet;
1949
+ return __generator(this, function (_a) {
1950
+ switch (_a.label) {
1951
+ case 0:
1952
+ api = '';
1953
+ if (this.options.protocol === 'oidc') {
1954
+ api = this.baseClient.appHost + "/oidc/token";
1955
+ }
1956
+ else if (this.options.protocol === 'oauth') {
1957
+ api = this.baseClient.appHost + "/oauth/token";
1958
+ }
1959
+ qstr = this._generateTokenRequest({
1960
+ client_id: this.options.appId,
1961
+ grant_type: 'authorization_code',
1962
+ code: code,
1963
+ redirect_uri: this.options.redirectUri,
1964
+ code_verifier: codeVerifier
1965
+ });
1966
+ return [4 /*yield*/, this.naiveHttpClient.request({
1967
+ method: 'POST',
1968
+ url: api,
1969
+ data: qstr
1970
+ })];
1971
+ case 1:
1972
+ tokenSet = _a.sent();
1973
+ return [2 /*return*/, tokenSet];
1974
+ }
1975
+ });
1976
+ });
1977
+ };
1978
+ AuthenticationClient.prototype.getAccessTokenByCode = function (code, options) {
1979
+ return __awaiter(this, void 0, void 0, function () {
1980
+ return __generator(this, function (_a) {
1981
+ switch (_a.label) {
1982
+ case 0:
1983
+ if (!['oauth', 'oidc'].includes(this.options.protocol)) {
1984
+ throw new Error('初始化 AuthenticationClient 时传入的 protocol 参数必须为 oauth 或 oidc,请检查参数');
1985
+ }
1986
+ if (!this.options.secret &&
1987
+ this.options.tokenEndPointAuthMethod !== 'none') {
1988
+ throw new Error('请在初始化 AuthenticationClient 时传入 appId 和 secret 参数');
1989
+ }
1990
+ if (!(this.options.tokenEndPointAuthMethod === 'client_secret_post')) return [3 /*break*/, 2];
1991
+ return [4 /*yield*/, this._getAccessTokenByCodeWithClientSecretPost(code, options === null || options === void 0 ? void 0 : options.codeVerifier)];
1992
+ case 1: return [2 /*return*/, _a.sent()];
1993
+ case 2:
1994
+ if (!(this.options.tokenEndPointAuthMethod === 'client_secret_basic')) return [3 /*break*/, 4];
1995
+ return [4 /*yield*/, this._getAccessTokenByCodeWithClientSecretBasic(code, options === null || options === void 0 ? void 0 : options.codeVerifier)];
1996
+ case 3: return [2 /*return*/, _a.sent()];
1997
+ case 4:
1998
+ if (!(this.options.tokenEndPointAuthMethod === 'none')) return [3 /*break*/, 6];
1999
+ return [4 /*yield*/, this._getAccessTokenByCodeWithNone(code, options === null || options === void 0 ? void 0 : options.codeVerifier)];
2000
+ case 5: return [2 /*return*/, _a.sent()];
2001
+ case 6: return [2 /*return*/];
2002
+ }
2003
+ });
2004
+ });
2005
+ };
2006
+ AuthenticationClient.prototype.generateCodeChallenge = function () {
2007
+ return generateRandomString(43);
2008
+ };
2009
+ AuthenticationClient.prototype.getCodeChallengeDigest = function (options) {
2010
+ if (!options) {
2011
+ throw new Error('请提供 options 参数,options.codeChallenge 为一个长度大于等于 43 的字符串,options.method 可选值为 S256、plain');
2012
+ }
2013
+ if (!options.codeChallenge) {
2014
+ throw new Error('请提供 options.codeChallenge,值为一个长度大于等于 43 的字符串');
2015
+ }
2016
+ var _a = options.method, method = _a === void 0 ? 'S256' : _a;
2017
+ if (method === 'S256') {
2018
+ // url safe base64
2019
+ return sha256(options.codeChallenge)
2020
+ .toString(CryptoJS.enc.Base64)
2021
+ .replace(/\+/g, '-')
2022
+ .replace(/\//g, '_')
2023
+ .replace(/=/g, '');
2024
+ }
2025
+ if (method === 'plain') {
2026
+ return options.codeChallenge;
2027
+ }
2028
+ throw new Error('不支持的 options.method,可选值为 S256、plain');
2029
+ };
2030
+ AuthenticationClient.prototype.getAccessTokenByClientCredentials = function (scope, options) {
2031
+ return __awaiter(this, void 0, void 0, function () {
2032
+ var i, s, qstr, api, tokenSet;
2033
+ return __generator(this, function (_a) {
2034
+ switch (_a.label) {
2035
+ case 0:
2036
+ if (!scope) {
2037
+ throw new Error('请传入 scope 参数,请看文档:https://docs.authing.cn/v2/guides/authorization/m2m-authz.html');
2038
+ }
2039
+ if (!options) {
2040
+ throw new Error('请在调用本方法时传入 { accessKey: string, accessSecret: string },请看文档:https://docs.authing.cn/v2/guides/authorization/m2m-authz.html'
2041
+ // '请在初始化 AuthenticationClient 时传入 appId 和 secret 参数或者在调用本方法时传入 { accessKey: string, accessSecret: string },请看文档:https://docs.authing.cn/v2/guides/authorization/m2m-authz.html'
2042
+ );
2043
+ }
2044
+ i = (options === null || options === void 0 ? void 0 : options.accessKey) || this.options.appId;
2045
+ s = (options === null || options === void 0 ? void 0 : options.accessSecret) || this.options.secret;
2046
+ qstr = this._generateTokenRequest({
2047
+ client_id: i,
2048
+ client_secret: s,
2049
+ grant_type: 'client_credentials',
2050
+ scope: scope
2051
+ });
2052
+ api = '';
2053
+ if (this.options.protocol === 'oidc') {
2054
+ api = this.baseClient.appHost + "/oidc/token";
2055
+ }
2056
+ else if (this.options.protocol === 'oauth') {
2057
+ api = this.baseClient.appHost + "/oauth/token";
2058
+ }
2059
+ return [4 /*yield*/, this.naiveHttpClient.request({
2060
+ method: 'POST',
2061
+ url: api,
2062
+ data: qstr,
2063
+ headers: {
2064
+ 'Content-Type': 'application/x-www-form-urlencoded'
2065
+ }
2066
+ })];
2067
+ case 1:
2068
+ tokenSet = _a.sent();
2069
+ return [2 /*return*/, tokenSet];
2070
+ }
2071
+ });
2072
+ });
2073
+ };
2074
+ AuthenticationClient.prototype.getUserInfoByAccessToken = function (accessToken, options) {
2075
+ return __awaiter(this, void 0, void 0, function () {
2076
+ var api, userInfo, userInfo, userInfo, userInfo, userInfo, userInfo;
2077
+ return __generator(this, function (_a) {
2078
+ switch (_a.label) {
2079
+ case 0:
2080
+ if (options) {
2081
+ if (options.method && !['POST', 'GET'].includes(options.method)) {
2082
+ throw new Error('options.method 参数的可选值为 POST、GET,请检查输入');
2083
+ }
2084
+ if (options.tokenPlace &&
2085
+ !['query', 'header', 'body'].includes(options.tokenPlace)) {
2086
+ throw new Error('options.tokenPlace 参数的可选值为 query、header、body,请检查输入');
2087
+ }
2088
+ if (options.method === 'GET' && options.tokenPlace === 'body') {
2089
+ throw new Error('options.method 参数为 GET 时,options.tokenPlace 参数不能为 body');
2090
+ }
2091
+ options.method = options.method || 'GET';
2092
+ options.tokenPlace = options.tokenPlace || 'query';
2093
+ }
2094
+ api = '';
2095
+ if (this.options.protocol === 'oidc') {
2096
+ api = this.baseClient.appHost + "/oidc/me";
2097
+ }
2098
+ else if (this.options.protocol === 'oauth') {
2099
+ api = this.baseClient.appHost + "/oauth/me";
2100
+ }
2101
+ if (!((options === null || options === void 0 ? void 0 : options.method) === 'POST')) return [3 /*break*/, 7];
2102
+ if (!((options === null || options === void 0 ? void 0 : options.tokenPlace) === 'header')) return [3 /*break*/, 2];
2103
+ return [4 /*yield*/, this.naiveHttpClient.request({
2104
+ method: 'POST',
2105
+ url: api,
2106
+ headers: {
2107
+ Authorization: 'Bearer ' + accessToken
2108
+ }
2109
+ })];
2110
+ case 1:
2111
+ userInfo = _a.sent();
2112
+ return [2 /*return*/, userInfo];
2113
+ case 2:
2114
+ if (!((options === null || options === void 0 ? void 0 : options.tokenPlace) === 'query')) return [3 /*break*/, 4];
2115
+ return [4 /*yield*/, this.naiveHttpClient.request({
2116
+ method: 'POST',
2117
+ url: api,
2118
+ params: {
2119
+ access_token: accessToken
2120
+ }
2121
+ })];
2122
+ case 3:
2123
+ userInfo = _a.sent();
2124
+ return [2 /*return*/, userInfo];
2125
+ case 4:
2126
+ if (!((options === null || options === void 0 ? void 0 : options.tokenPlace) === 'body')) return [3 /*break*/, 6];
2127
+ return [4 /*yield*/, this.naiveHttpClient.request({
2128
+ method: 'POST',
2129
+ url: api,
2130
+ data: objectToQueryString({
2131
+ access_token: accessToken
2132
+ }).slice(1)
2133
+ })];
2134
+ case 5:
2135
+ userInfo = _a.sent();
2136
+ return [2 /*return*/, userInfo];
2137
+ case 6: return [3 /*break*/, 14];
2138
+ case 7:
2139
+ if (!((options === null || options === void 0 ? void 0 : options.method) === 'GET')) return [3 /*break*/, 12];
2140
+ if (!((options === null || options === void 0 ? void 0 : options.tokenPlace) === 'header')) return [3 /*break*/, 9];
2141
+ return [4 /*yield*/, this.naiveHttpClient.request({
2142
+ method: 'GET',
2143
+ url: api,
2144
+ headers: {
2145
+ Authorization: 'Bearer ' + accessToken
2146
+ }
2147
+ })];
2148
+ case 8:
2149
+ userInfo = _a.sent();
2150
+ return [2 /*return*/, userInfo];
2151
+ case 9:
2152
+ if (!((options === null || options === void 0 ? void 0 : options.tokenPlace) === 'query')) return [3 /*break*/, 11];
2153
+ return [4 /*yield*/, this.naiveHttpClient.request({
2154
+ method: 'GET',
2155
+ url: api,
2156
+ params: {
2157
+ access_token: accessToken
2158
+ }
2159
+ })];
2160
+ case 10:
2161
+ userInfo = _a.sent();
2162
+ return [2 /*return*/, userInfo];
2163
+ case 11: return [3 /*break*/, 14];
2164
+ case 12: return [4 /*yield*/, this.naiveHttpClient.request({
2165
+ method: 'GET',
2166
+ url: api,
2167
+ params: {
2168
+ access_token: accessToken
2169
+ }
2170
+ })];
2171
+ case 13:
2172
+ userInfo = _a.sent();
2173
+ return [2 /*return*/, userInfo];
2174
+ case 14: return [2 /*return*/];
2175
+ }
2176
+ });
2177
+ });
2178
+ };
2179
+ AuthenticationClient.prototype.buildAuthorizeUrl = function (options) {
2180
+ if (!this.baseClient.appHost) {
2181
+ throw new Error('请在初始化 AuthenticationClient 时传入应用域名 appHost 参数,形如:https://app1.authing.cn');
2182
+ }
2183
+ if (this.options.protocol === 'oidc') {
2184
+ return this._buildOidcAuthorizeUrl(options);
2185
+ }
2186
+ if (this.options.protocol === 'oauth') {
2187
+ return this._buildOauthAuthorizeUrl(options);
2188
+ }
2189
+ if (this.options.protocol === 'saml') {
2190
+ return this._buildSamlAuthorizeUrl();
2191
+ }
2192
+ if (this.options.protocol === 'cas') {
2193
+ return this._buildCasAuthorizeUrl(options);
2194
+ }
2195
+ throw new Error('不支持的协议类型,请在初始化 AuthenticationClient 时传入 protocol 参数,可选值为 oidc、oauth、saml、cas');
2196
+ };
2197
+ AuthenticationClient.prototype._buildOidcAuthorizeUrl = function (options) {
2198
+ var map = {
2199
+ appId: 'client_id',
2200
+ scope: 'scope',
2201
+ state: 'state',
2202
+ nonce: 'nonce',
2203
+ responseMode: 'response_mode',
2204
+ responseType: 'response_type',
2205
+ redirectUri: 'redirect_uri',
2206
+ codeChallenge: 'code_challenge',
2207
+ codeChallengeMethod: 'code_challenge_method'
2208
+ };
2209
+ var res = {
2210
+ nonce: Math.random()
2211
+ .toString()
2212
+ .slice(2),
2213
+ state: Math.random()
2214
+ .toString()
2215
+ .slice(2),
2216
+ scope: 'openid profile email phone address',
2217
+ client_id: this.options.appId,
2218
+ redirect_uri: this.options.redirectUri,
2219
+ response_type: 'code'
2220
+ };
2221
+ Object.keys(map).forEach(function (k) {
2222
+ if (options && options[k]) {
2223
+ if (k === 'scope' && options.scope.includes('offline_access')) {
2224
+ res.prompt = 'consent';
2225
+ }
2226
+ res[map[k]] = options[k];
2227
+ }
2228
+ });
2229
+ var params = new URLSearchParams(res);
2230
+ var authorizeUrl = this.baseClient.appHost + '/oidc/auth?' + params.toString();
2231
+ return authorizeUrl;
2232
+ };
2233
+ AuthenticationClient.prototype._buildOauthAuthorizeUrl = function (options) {
2234
+ var map = {
2235
+ appId: 'client_id',
2236
+ scope: 'scope',
2237
+ state: 'state',
2238
+ responseType: 'response_type',
2239
+ redirectUri: 'redirect_uri'
2240
+ };
2241
+ var res = {
2242
+ state: Math.random()
2243
+ .toString()
2244
+ .slice(2),
2245
+ scope: 'user',
2246
+ client_id: this.options.appId,
2247
+ redirect_uri: this.options.redirectUri,
2248
+ response_type: 'code'
2249
+ };
2250
+ Object.keys(map).forEach(function (k) {
2251
+ if (options && options[k]) {
2252
+ res[map[k]] = options[k];
2253
+ }
2254
+ });
2255
+ var params = new URLSearchParams(res);
2256
+ var authorizeUrl = this.baseClient.appHost + '/oauth/auth?' + params.toString();
2257
+ return authorizeUrl;
2258
+ };
2259
+ AuthenticationClient.prototype._buildSamlAuthorizeUrl = function () {
2260
+ return this.baseClient.appHost + '/api/v2/saml-idp/' + this.options.appId;
2261
+ };
2262
+ AuthenticationClient.prototype._buildCasAuthorizeUrl = function (options) {
2263
+ if (options === null || options === void 0 ? void 0 : options.service) {
2264
+ return this.baseClient.appHost + "/cas-idp/" + this.options.appId + "?service=" + (options === null || options === void 0 ? void 0 : options.service);
2265
+ }
2266
+ return this.baseClient.appHost + "/cas-idp/" + this.options.appId;
2267
+ };
2268
+ AuthenticationClient.prototype._buildCasLogoutUrl = function (options) {
2269
+ if (options === null || options === void 0 ? void 0 : options.redirectUri) {
2270
+ return (this.baseClient.appHost + '/cas-idp/logout?url=' + options.redirectUri);
2271
+ }
2272
+ return this.baseClient.appHost + "/cas-idp/logout";
2273
+ };
2274
+ AuthenticationClient.prototype._buildOidcLogoutUrl = function (options) {
2275
+ if (options && !(options.idToken && options.redirectUri)) {
2276
+ throw new Error('必须同时传入 idToken 和 redirectUri 参数,或者同时都不传入');
2277
+ }
2278
+ if (options === null || options === void 0 ? void 0 : options.redirectUri) {
2279
+ return this.baseClient.appHost + "/oidc/session/end?id_token_hint=" + options.idToken + "&post_logout_redirect_uri=" + options.redirectUri;
2280
+ }
2281
+ return this.baseClient.appHost + "/oidc/session/end";
2282
+ };
2283
+ AuthenticationClient.prototype._buildEasyLogoutUrl = function (options) {
2284
+ if (options === null || options === void 0 ? void 0 : options.redirectUri) {
2285
+ return this.baseClient.appHost + "/login/profile/logout?redirect_uri=" + options.redirectUri;
2286
+ }
2287
+ return this.baseClient.appHost + "/login/profile/logout";
2288
+ };
2289
+ AuthenticationClient.prototype.buildLogoutUrl = function (options) {
2290
+ if (this.options.protocol === 'cas') {
2291
+ return this._buildCasLogoutUrl(options);
2292
+ }
2293
+ if (this.options.protocol === 'oidc' && (options === null || options === void 0 ? void 0 : options.expert)) {
2294
+ return this._buildOidcLogoutUrl(options);
2295
+ }
2296
+ return this._buildEasyLogoutUrl(options);
2297
+ };
2298
+ AuthenticationClient.prototype._getNewAccessTokenByRefreshTokenWithClientSecretPost = function (refreshToken) {
2299
+ return __awaiter(this, void 0, void 0, function () {
2300
+ var qstr, api, tokenSet;
2301
+ return __generator(this, function (_a) {
2302
+ switch (_a.label) {
2303
+ case 0:
2304
+ qstr = this._generateTokenRequest({
2305
+ client_id: this.options.appId,
2306
+ client_secret: this.options.secret,
2307
+ grant_type: 'refresh_token',
2308
+ refresh_token: refreshToken
2309
+ });
2310
+ api = '';
2311
+ if (this.options.protocol === 'oidc') {
2312
+ api = this.baseClient.appHost + "/oidc/token";
2313
+ }
2314
+ else if (this.options.protocol === 'oauth') {
2315
+ api = this.baseClient.appHost + "/oauth/token";
2316
+ }
2317
+ return [4 /*yield*/, this.naiveHttpClient.request({
2318
+ method: 'POST',
2319
+ url: api,
2320
+ data: qstr,
2321
+ headers: {
2322
+ 'Content-Type': 'application/x-www-form-urlencoded'
2323
+ }
2324
+ })];
2325
+ case 1:
2326
+ tokenSet = _a.sent();
2327
+ return [2 /*return*/, tokenSet];
2328
+ }
2329
+ });
2330
+ });
2331
+ };
2332
+ AuthenticationClient.prototype._getNewAccessTokenByRefreshTokenWithClientSecretBasic = function (refreshToken) {
2333
+ return __awaiter(this, void 0, void 0, function () {
2334
+ var api, qstr, tokenSet;
2335
+ return __generator(this, function (_a) {
2336
+ switch (_a.label) {
2337
+ case 0:
2338
+ api = '';
2339
+ if (this.options.protocol === 'oidc') {
2340
+ api = this.baseClient.appHost + "/oidc/token";
2341
+ }
2342
+ else if (this.options.protocol === 'oauth') {
2343
+ api = this.baseClient.appHost + "/oauth/token";
2344
+ }
2345
+ qstr = this._generateTokenRequest({
2346
+ grant_type: 'refresh_token',
2347
+ refresh_token: refreshToken
2348
+ });
2349
+ return [4 /*yield*/, this.naiveHttpClient.request({
2350
+ data: qstr,
2351
+ method: 'POST',
2352
+ url: api,
2353
+ headers: {
2354
+ Authorization: this._generateBasicAuthToken()
2355
+ }
2356
+ })];
2357
+ case 1:
2358
+ tokenSet = _a.sent();
2359
+ return [2 /*return*/, tokenSet];
2360
+ }
2361
+ });
2362
+ });
2363
+ };
2364
+ AuthenticationClient.prototype._getNewAccessTokenByRefreshTokenWithNone = function (refreshToken) {
2365
+ return __awaiter(this, void 0, void 0, function () {
2366
+ var api, qstr, tokenSet;
2367
+ return __generator(this, function (_a) {
2368
+ switch (_a.label) {
2369
+ case 0:
2370
+ api = '';
2371
+ if (this.options.protocol === 'oidc') {
2372
+ api = this.baseClient.appHost + "/oidc/token";
2373
+ }
2374
+ else if (this.options.protocol === 'oauth') {
2375
+ api = this.baseClient.appHost + "/oauth/token";
2376
+ }
2377
+ qstr = this._generateTokenRequest({
2378
+ client_id: this.options.appId,
2379
+ grant_type: 'refresh_token',
2380
+ refresh_token: refreshToken
2381
+ });
2382
+ return [4 /*yield*/, this.naiveHttpClient.request({
2383
+ method: 'POST',
2384
+ url: api,
2385
+ data: qstr
2386
+ })];
2387
+ case 1:
2388
+ tokenSet = _a.sent();
2389
+ return [2 /*return*/, tokenSet];
2390
+ }
2391
+ });
2392
+ });
2393
+ };
2394
+ AuthenticationClient.prototype.getNewAccessTokenByRefreshToken = function (refreshToken) {
2395
+ return __awaiter(this, void 0, void 0, function () {
2396
+ return __generator(this, function (_a) {
2397
+ switch (_a.label) {
2398
+ case 0:
2399
+ if (!['oauth', 'oidc'].includes(this.options.protocol)) {
2400
+ throw new Error('初始化 AuthenticationClient 时传入的 protocol 参数必须为 oauth 或 oidc,请检查参数');
2401
+ }
2402
+ if (!this.options.secret &&
2403
+ this.options.tokenEndPointAuthMethod !== 'none') {
2404
+ throw new Error('请在初始化 AuthenticationClient 时传入 appId 和 secret 参数');
2405
+ }
2406
+ if (!(this.options.tokenEndPointAuthMethod === 'client_secret_post')) return [3 /*break*/, 2];
2407
+ return [4 /*yield*/, this._getNewAccessTokenByRefreshTokenWithClientSecretPost(refreshToken)];
2408
+ case 1: return [2 /*return*/, _a.sent()];
2409
+ case 2:
2410
+ if (!(this.options.tokenEndPointAuthMethod === 'client_secret_basic')) return [3 /*break*/, 4];
2411
+ return [4 /*yield*/, this._getNewAccessTokenByRefreshTokenWithClientSecretBasic(refreshToken)];
2412
+ case 3: return [2 /*return*/, _a.sent()];
2413
+ case 4:
2414
+ if (!(this.options.tokenEndPointAuthMethod === 'none')) return [3 /*break*/, 6];
2415
+ return [4 /*yield*/, this._getNewAccessTokenByRefreshTokenWithNone(refreshToken)];
2416
+ case 5: return [2 /*return*/, _a.sent()];
2417
+ case 6: return [2 /*return*/];
2418
+ }
2419
+ });
2420
+ });
2421
+ };
2422
+ AuthenticationClient.prototype._revokeTokenWithClientSecretPost = function (token) {
2423
+ return __awaiter(this, void 0, void 0, function () {
2424
+ var qstr, api, tokenSet;
2425
+ return __generator(this, function (_a) {
2426
+ switch (_a.label) {
2427
+ case 0:
2428
+ qstr = this._generateTokenRequest({
2429
+ client_id: this.options.appId,
2430
+ client_secret: this.options.secret,
2431
+ token: token
2432
+ });
2433
+ api = '';
2434
+ if (this.options.protocol === 'oidc') {
2435
+ api = this.baseClient.appHost + "/oidc/token/revocation";
2436
+ }
2437
+ else if (this.options.protocol === 'oauth') {
2438
+ api = this.baseClient.appHost + "/oauth/token/revocation";
2439
+ }
2440
+ return [4 /*yield*/, this.naiveHttpClient.request({
2441
+ method: 'POST',
2442
+ url: api,
2443
+ data: qstr,
2444
+ headers: {
2445
+ 'Content-Type': 'application/x-www-form-urlencoded'
2446
+ }
2447
+ })];
2448
+ case 1:
2449
+ tokenSet = _a.sent();
2450
+ return [2 /*return*/, tokenSet];
2451
+ }
2452
+ });
2453
+ });
2454
+ };
2455
+ AuthenticationClient.prototype._revokeTokenWithClientSecretBasic = function (token) {
2456
+ return __awaiter(this, void 0, void 0, function () {
2457
+ var api, qstr, result;
2458
+ return __generator(this, function (_a) {
2459
+ switch (_a.label) {
2460
+ case 0:
2461
+ api = '';
2462
+ if (this.options.protocol === 'oidc') {
2463
+ api = this.baseClient.appHost + "/oidc/token/revocation";
2464
+ }
2465
+ else if (this.options.protocol === 'oauth') {
2466
+ throw new Error('OAuth 2.0 暂不支持用 client_secret_basic 模式身份验证撤回 Token');
2467
+ api = this.baseClient.appHost + "/oauth/token/revocation";
2468
+ }
2469
+ qstr = this._generateTokenRequest({
2470
+ token: token
2471
+ });
2472
+ return [4 /*yield*/, this.naiveHttpClient.request({
2473
+ data: qstr,
2474
+ method: 'POST',
2475
+ url: api,
2476
+ headers: {
2477
+ Authorization: this._generateBasicAuthToken()
2478
+ }
2479
+ })];
2480
+ case 1:
2481
+ result = _a.sent();
2482
+ return [2 /*return*/, result];
2483
+ }
2484
+ });
2485
+ });
2486
+ };
2487
+ AuthenticationClient.prototype._revokeTokenWithNone = function (token) {
2488
+ return __awaiter(this, void 0, void 0, function () {
2489
+ var api, qstr, result;
2490
+ return __generator(this, function (_a) {
2491
+ switch (_a.label) {
2492
+ case 0:
2493
+ api = '';
2494
+ if (this.options.protocol === 'oidc') {
2495
+ api = this.baseClient.appHost + "/oidc/token/revocation";
2496
+ }
2497
+ else if (this.options.protocol === 'oauth') {
2498
+ api = this.baseClient.appHost + "/oauth/token/revocation";
2499
+ }
2500
+ qstr = this._generateTokenRequest({
2501
+ client_id: this.options.appId,
2502
+ token: token
2503
+ });
2504
+ return [4 /*yield*/, this.naiveHttpClient.request({
2505
+ method: 'POST',
2506
+ url: api,
2507
+ data: qstr
2508
+ })];
2509
+ case 1:
2510
+ result = _a.sent();
2511
+ return [2 /*return*/, result];
2512
+ }
2513
+ });
2514
+ });
2515
+ };
2516
+ AuthenticationClient.prototype.revokeToken = function (token) {
2517
+ return __awaiter(this, void 0, void 0, function () {
2518
+ return __generator(this, function (_a) {
2519
+ switch (_a.label) {
2520
+ case 0:
2521
+ if (!['oauth', 'oidc'].includes(this.options.protocol)) {
2522
+ throw new Error('初始化 AuthenticationClient 时传入的 protocol 参数必须为 oauth 或 oidc,请检查参数');
2523
+ }
2524
+ if (!this.options.secret &&
2525
+ this.options.revocationEndPointAuthMethod !== 'none') {
2526
+ throw new Error('请在初始化 AuthenticationClient 时传入 appId 和 secret 参数');
2527
+ }
2528
+ if (!(this.options.revocationEndPointAuthMethod === 'client_secret_post')) return [3 /*break*/, 2];
2529
+ return [4 /*yield*/, this._revokeTokenWithClientSecretPost(token)];
2530
+ case 1:
2531
+ _a.sent();
2532
+ return [2 /*return*/, true];
2533
+ case 2:
2534
+ if (!(this.options.revocationEndPointAuthMethod === 'client_secret_basic')) return [3 /*break*/, 4];
2535
+ return [4 /*yield*/, this._revokeTokenWithClientSecretBasic(token)];
2536
+ case 3:
2537
+ _a.sent();
2538
+ return [2 /*return*/, true];
2539
+ case 4:
2540
+ if (!(this.options.revocationEndPointAuthMethod === 'none')) return [3 /*break*/, 6];
2541
+ return [4 /*yield*/, this._revokeTokenWithNone(token)];
2542
+ case 5:
2543
+ _a.sent();
2544
+ return [2 /*return*/, true];
2545
+ case 6: throw new Error('初始化 AuthenticationClient 时传入的 revocationEndPointAuthMethod 参数可选值为 client_secret_base、client_secret_post、none,请检查参数');
2546
+ }
2547
+ });
2548
+ });
2549
+ };
2550
+ AuthenticationClient.prototype._introspectTokenWithClientSecretPost = function (token) {
2551
+ return __awaiter(this, void 0, void 0, function () {
2552
+ var qstr, api, tokenSet;
2553
+ return __generator(this, function (_a) {
2554
+ switch (_a.label) {
2555
+ case 0:
2556
+ qstr = this._generateTokenRequest({
2557
+ client_id: this.options.appId,
2558
+ client_secret: this.options.secret,
2559
+ token: token
2560
+ });
2561
+ api = '';
2562
+ if (this.options.protocol === 'oidc') {
2563
+ api = this.baseClient.appHost + "/oidc/token/introspection";
2564
+ }
2565
+ else if (this.options.protocol === 'oauth') {
2566
+ api = this.baseClient.appHost + "/oauth/token/introspection";
2567
+ }
2568
+ return [4 /*yield*/, this.naiveHttpClient.request({
2569
+ method: 'POST',
2570
+ url: api,
2571
+ data: qstr,
2572
+ headers: {
2573
+ 'Content-Type': 'application/x-www-form-urlencoded'
2574
+ }
2575
+ })];
2576
+ case 1:
2577
+ tokenSet = _a.sent();
2578
+ return [2 /*return*/, tokenSet];
2579
+ }
2580
+ });
2581
+ });
2582
+ };
2583
+ AuthenticationClient.prototype._introspectTokenWithClientSecretBasic = function (token) {
2584
+ return __awaiter(this, void 0, void 0, function () {
2585
+ var api, qstr, result;
2586
+ return __generator(this, function (_a) {
2587
+ switch (_a.label) {
2588
+ case 0:
2589
+ api = '';
2590
+ if (this.options.protocol === 'oidc') {
2591
+ api = this.baseClient.appHost + "/oidc/token/introspection";
2592
+ }
2593
+ else if (this.options.protocol === 'oauth') {
2594
+ api = this.baseClient.appHost + "/oauth/token/introspection";
2595
+ }
2596
+ qstr = this._generateTokenRequest({
2597
+ token: token
2598
+ });
2599
+ return [4 /*yield*/, this.naiveHttpClient.request({
2600
+ data: qstr,
2601
+ method: 'POST',
2602
+ url: api,
2603
+ headers: {
2604
+ Authorization: this._generateBasicAuthToken()
2605
+ }
2606
+ })];
2607
+ case 1:
2608
+ result = _a.sent();
2609
+ return [2 /*return*/, result];
2610
+ }
2611
+ });
2612
+ });
2613
+ };
2614
+ AuthenticationClient.prototype._introspectTokenWithNone = function (token) {
2615
+ return __awaiter(this, void 0, void 0, function () {
2616
+ var api, qstr, result;
2617
+ return __generator(this, function (_a) {
2618
+ switch (_a.label) {
2619
+ case 0:
2620
+ api = '';
2621
+ if (this.options.protocol === 'oidc') {
2622
+ api = this.baseClient.appHost + "/oidc/token/introspection";
2623
+ }
2624
+ else if (this.options.protocol === 'oauth') {
2625
+ api = this.baseClient.appHost + "/oauth/token/introspection";
2626
+ }
2627
+ qstr = this._generateTokenRequest({
2628
+ client_id: this.options.appId,
2629
+ token: token
2630
+ });
2631
+ return [4 /*yield*/, this.naiveHttpClient.request({
2632
+ method: 'POST',
2633
+ url: api,
2634
+ data: qstr
2635
+ })];
2636
+ case 1:
2637
+ result = _a.sent();
2638
+ return [2 /*return*/, result];
2639
+ }
2640
+ });
2641
+ });
2642
+ };
2643
+ AuthenticationClient.prototype.introspectToken = function (token) {
2644
+ return __awaiter(this, void 0, void 0, function () {
2645
+ return __generator(this, function (_a) {
2646
+ switch (_a.label) {
2647
+ case 0:
2648
+ if (!['oauth', 'oidc'].includes(this.options.protocol)) {
2649
+ throw new Error('初始化 AuthenticationClient 时传入的 protocol 参数必须为 oauth 或 oidc,请检查参数');
2650
+ }
2651
+ if (!this.options.secret &&
2652
+ this.options.introspectionEndPointAuthMethod !== 'none') {
2653
+ throw new Error('请在初始化 AuthenticationClient 时传入 appId 和 secret 参数');
2654
+ }
2655
+ if (!(this.options.introspectionEndPointAuthMethod === 'client_secret_post')) return [3 /*break*/, 2];
2656
+ return [4 /*yield*/, this._introspectTokenWithClientSecretPost(token)];
2657
+ case 1: return [2 /*return*/, _a.sent()];
2658
+ case 2:
2659
+ if (!(this.options.introspectionEndPointAuthMethod === 'client_secret_basic')) return [3 /*break*/, 4];
2660
+ return [4 /*yield*/, this._introspectTokenWithClientSecretBasic(token)];
2661
+ case 3: return [2 /*return*/, _a.sent()];
2662
+ case 4:
2663
+ if (!(this.options.introspectionEndPointAuthMethod === 'none')) return [3 /*break*/, 6];
2664
+ return [4 /*yield*/, this._introspectTokenWithNone(token)];
2665
+ case 5: return [2 /*return*/, _a.sent()];
2666
+ case 6: throw new Error('初始化 AuthenticationClient 时传入的 introspectionEndPointAuthMethod 参数可选值为 client_secret_base、client_secret_post、none,请检查参数');
2667
+ }
2668
+ });
2669
+ });
2670
+ };
2671
+ AuthenticationClient.prototype.validateTicketV1 = function (ticket, service) {
2672
+ return __awaiter(this, void 0, void 0, function () {
2673
+ var api, result, _a, valid, username;
2674
+ return __generator(this, function (_b) {
2675
+ switch (_b.label) {
2676
+ case 0:
2677
+ api = this.baseClient.appHost + "/cas-idp/" + this.options.appId + "/validate";
2678
+ return [4 /*yield*/, this.naiveHttpClient.request({
2679
+ method: 'GET',
2680
+ url: api,
2681
+ params: {
2682
+ service: service,
2683
+ ticket: ticket
2684
+ }
2685
+ })];
2686
+ case 1:
2687
+ result = _b.sent();
2688
+ _a = result.split('\n'), valid = _a[0], username = _a[1];
2689
+ return [2 /*return*/, __assign(__assign({ valid: valid === 'yes' }, (username && { username: username })), (valid !== 'yes' && { message: 'ticket 不合法' }))];
2690
+ }
2691
+ });
2692
+ });
2693
+ };
2694
+ /**
2695
+ * 判断 "我" 是否有某个角色
2696
+ * @param roleCode 角色 Code
2697
+ * @param namespace 权限分组 ID
2698
+ */
2699
+ AuthenticationClient.prototype.hasRole = function (roleCode, namespace) {
2700
+ return __awaiter(this, void 0, void 0, function () {
2701
+ var user, roleList, hasRole;
2702
+ return __generator(this, function (_a) {
2703
+ switch (_a.label) {
2704
+ case 0: return [4 /*yield*/, getUserRoles(this.graphqlClient, this.tokenProvider, {
2705
+ id: this.checkLoggedIn(),
2706
+ namespace: namespace
2707
+ })];
2708
+ case 1:
2709
+ user = (_a.sent()).user;
2710
+ if (!user) {
2711
+ return [2 /*return*/, false];
2712
+ }
2713
+ roleList = user.roles;
2714
+ if (roleList.totalCount < 1) {
2715
+ return [2 /*return*/, false];
2716
+ }
2717
+ hasRole = false;
2718
+ roleList.list.forEach(function (item) {
2719
+ if (item.code === roleCode) {
2720
+ hasRole = true;
2721
+ }
2722
+ });
2723
+ return [2 /*return*/, hasRole];
2724
+ }
2725
+ });
2726
+ });
2727
+ };
2728
+ /**
2729
+ * @description 获取当前用户能够访问的应用
2730
+ */
2731
+ AuthenticationClient.prototype.listApplications = function (params) {
2732
+ return __awaiter(this, void 0, void 0, function () {
2733
+ var _a, _b, page, _c, limit, data;
2734
+ return __generator(this, function (_d) {
2735
+ switch (_d.label) {
2736
+ case 0:
2737
+ _a = params || {}, _b = _a.page, page = _b === void 0 ? 1 : _b, _c = _a.limit, limit = _c === void 0 ? 10 : _c;
2738
+ return [4 /*yield*/, this.httpClient.request({
2739
+ url: this.baseClient.appHost + "/api/v2/users/me/applications/allowed?page=" + page + "&limit=" + limit,
2740
+ method: 'GET'
2741
+ })];
2742
+ case 1:
2743
+ data = _d.sent();
2744
+ return [2 /*return*/, data];
2745
+ }
2746
+ });
2747
+ });
2748
+ };
2749
+ /**
2750
+ * @description 检验 idToken 或 accessToken
2751
+ */
2752
+ AuthenticationClient.prototype.validateToken = function (options) {
2753
+ return __awaiter(this, void 0, void 0, function () {
2754
+ var data, data;
2755
+ return __generator(this, function (_a) {
2756
+ switch (_a.label) {
2757
+ case 0:
2758
+ if (!options) {
2759
+ throw new Error('请在传入的参数对象中包含 accessToken 或 idToken 字段');
2760
+ }
2761
+ if (options.accessToken && options.idToken) {
2762
+ throw new Error('accessToken 和 idToken 只能传入一个,不能同时传入');
2763
+ }
2764
+ if (!options.idToken) return [3 /*break*/, 2];
2765
+ return [4 /*yield*/, this.naiveHttpClient.request({
2766
+ url: this.baseClient.appHost + "/api/v2/oidc/validate_token",
2767
+ method: 'GET',
2768
+ params: {
2769
+ id_token: options.idToken
2770
+ }
2771
+ })];
2772
+ case 1:
2773
+ data = _a.sent();
2774
+ return [2 /*return*/, data];
2775
+ case 2:
2776
+ if (!options.accessToken) return [3 /*break*/, 4];
2777
+ return [4 /*yield*/, this.naiveHttpClient.request({
2778
+ url: this.baseClient.appHost + "/api/v2/oidc/validate_token",
2779
+ method: 'GET',
2780
+ params: {
2781
+ access_token: options.accessToken
2782
+ }
2783
+ })];
2784
+ case 3:
2785
+ data = _a.sent();
2786
+ return [2 /*return*/, data];
2787
+ case 4: return [2 /*return*/];
2788
+ }
2789
+ });
2790
+ });
2791
+ };
2792
+ return AuthenticationClient;
2793
+ }());
2794
+ export { AuthenticationClient };
2795
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXV0aGVudGljYXRpb25DbGllbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2F1dGhlbnRpY2F0aW9uL0F1dGhlbnRpY2F0aW9uQ2xpZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDNUUsT0FBTyxNQUFNLE1BQU0sa0JBQWtCLENBQUM7QUFDdEMsT0FBTyxRQUFRLE1BQU0sV0FBVyxDQUFDO0FBRWpDLE9BQU8sRUFDTCxTQUFTLEVBQ1QsU0FBUyxFQUNULGdCQUFnQixFQUNoQixxQkFBcUIsRUFDckIsWUFBWSxFQUNaLDJCQUEyQixFQUMzQixZQUFZLEVBQ1osZ0JBQWdCLEVBQ2hCLG9CQUFvQixFQUNwQixpQkFBaUIsRUFDakIsZUFBZSxFQUNmLFlBQVksRUFDWixlQUFlLEVBQ2YsbUJBQW1CLEVBQ25CLGtCQUFrQixFQUNsQixTQUFTLEVBQ1QsYUFBYSxFQUNiLFNBQVMsRUFDVCxNQUFNLEVBQ04sV0FBVyxFQUNYLEdBQUcsRUFDSCxXQUFXLEVBQ1gsV0FBVyxFQUNYLFdBQVcsRUFDWCxjQUFjLEVBQ2QsV0FBVyxFQUNYLFVBQVUsRUFDVixJQUFJLEVBQ0wsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3hELE9BQU8sRUFNTCxxQkFBcUIsRUFHdEIsTUFBTSxTQUFTLENBQUM7QUFDakIsT0FBTyxFQVNMLGFBQWEsRUFJZCxNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzFFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxVQUFVLEVBQUUsZUFBZSxF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