@nocobase/plugin-idp-oauth 2.1.0-alpha.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (451) hide show
  1. package/LICENSE.txt +107 -0
  2. package/README.md +14 -0
  3. package/build.config.ts +46 -0
  4. package/client.d.ts +2 -0
  5. package/client.js +1 -0
  6. package/dist/client/ErrorPage.d.ts +11 -0
  7. package/dist/client/InteractionPage.d.ts +11 -0
  8. package/dist/client/index.d.ts +9 -0
  9. package/dist/client/index.js +10 -0
  10. package/dist/client/locale.d.ts +10 -0
  11. package/dist/client/models/index.d.ts +11 -0
  12. package/dist/client/plugin.d.ts +13 -0
  13. package/dist/externalVersion.js +18 -0
  14. package/dist/index.d.ts +10 -0
  15. package/dist/index.js +48 -0
  16. package/dist/locale/en-US.json +1 -0
  17. package/dist/locale/zh-CN.json +1 -0
  18. package/dist/node_modules/eta/LICENSE +7 -0
  19. package/dist/node_modules/eta/README.md +185 -0
  20. package/dist/node_modules/eta/dist/core.d.ts +179 -0
  21. package/dist/node_modules/eta/dist/core.d.ts.map +1 -0
  22. package/dist/node_modules/eta/dist/core.js +42 -0
  23. package/dist/node_modules/eta/dist/core.js.map +1 -0
  24. package/dist/node_modules/eta/dist/index.cjs +542 -0
  25. package/dist/node_modules/eta/dist/index.cjs.map +1 -0
  26. package/dist/node_modules/eta/dist/index.d.cts +187 -0
  27. package/dist/node_modules/eta/dist/index.d.cts.map +1 -0
  28. package/dist/node_modules/eta/dist/index.d.mts +187 -0
  29. package/dist/node_modules/eta/dist/index.d.mts.map +1 -0
  30. package/dist/node_modules/eta/dist/index.mjs +512 -0
  31. package/dist/node_modules/eta/dist/index.mjs.map +1 -0
  32. package/dist/node_modules/eta/package.json +75 -0
  33. package/dist/node_modules/jose/LICENSE.md +21 -0
  34. package/dist/node_modules/jose/README.md +153 -0
  35. package/dist/node_modules/jose/dist/types/index.d.ts +55 -0
  36. package/dist/node_modules/jose/dist/types/jwe/compact/decrypt.d.ts +31 -0
  37. package/dist/node_modules/jose/dist/types/jwe/compact/encrypt.d.ts +65 -0
  38. package/dist/node_modules/jose/dist/types/jwe/flattened/decrypt.d.ts +31 -0
  39. package/dist/node_modules/jose/dist/types/jwe/flattened/encrypt.d.ts +83 -0
  40. package/dist/node_modules/jose/dist/types/jwe/general/decrypt.d.ts +38 -0
  41. package/dist/node_modules/jose/dist/types/jwe/general/encrypt.d.ts +74 -0
  42. package/dist/node_modules/jose/dist/types/jwk/embedded.d.ts +17 -0
  43. package/dist/node_modules/jose/dist/types/jwk/thumbprint.d.ts +32 -0
  44. package/dist/node_modules/jose/dist/types/jwks/local.d.ts +29 -0
  45. package/dist/node_modules/jose/dist/types/jwks/remote.d.ts +237 -0
  46. package/dist/node_modules/jose/dist/types/jws/compact/sign.d.ts +36 -0
  47. package/dist/node_modules/jose/dist/types/jws/compact/verify.d.ts +33 -0
  48. package/dist/node_modules/jose/dist/types/jws/flattened/sign.d.ts +42 -0
  49. package/dist/node_modules/jose/dist/types/jws/flattened/verify.d.ts +33 -0
  50. package/dist/node_modules/jose/dist/types/jws/general/sign.d.ts +53 -0
  51. package/dist/node_modules/jose/dist/types/jws/general/verify.d.ts +41 -0
  52. package/dist/node_modules/jose/dist/types/jwt/decrypt.d.ts +35 -0
  53. package/dist/node_modules/jose/dist/types/jwt/encrypt.d.ts +91 -0
  54. package/dist/node_modules/jose/dist/types/jwt/sign.d.ts +43 -0
  55. package/dist/node_modules/jose/dist/types/jwt/unsecured.d.ts +43 -0
  56. package/dist/node_modules/jose/dist/types/jwt/verify.d.ts +37 -0
  57. package/dist/node_modules/jose/dist/types/key/export.d.ts +33 -0
  58. package/dist/node_modules/jose/dist/types/key/generate_key_pair.d.ts +47 -0
  59. package/dist/node_modules/jose/dist/types/key/generate_secret.d.ts +35 -0
  60. package/dist/node_modules/jose/dist/types/key/import.d.ts +83 -0
  61. package/dist/node_modules/jose/dist/types/types.d.ts +852 -0
  62. package/dist/node_modules/jose/dist/types/util/base64url.d.ts +9 -0
  63. package/dist/node_modules/jose/dist/types/util/decode_jwt.d.ts +18 -0
  64. package/dist/node_modules/jose/dist/types/util/decode_protected_header.d.ts +17 -0
  65. package/dist/node_modules/jose/dist/types/util/errors.d.ts +213 -0
  66. package/dist/node_modules/jose/dist/webapi/index.js +32 -0
  67. package/dist/node_modules/jose/dist/webapi/jwe/compact/decrypt.js +27 -0
  68. package/dist/node_modules/jose/dist/webapi/jwe/compact/encrypt.js +27 -0
  69. package/dist/node_modules/jose/dist/webapi/jwe/flattened/decrypt.js +155 -0
  70. package/dist/node_modules/jose/dist/webapi/jwe/flattened/encrypt.js +165 -0
  71. package/dist/node_modules/jose/dist/webapi/jwe/general/decrypt.js +31 -0
  72. package/dist/node_modules/jose/dist/webapi/jwe/general/encrypt.js +182 -0
  73. package/dist/node_modules/jose/dist/webapi/jwk/embedded.js +17 -0
  74. package/dist/node_modules/jose/dist/webapi/jwk/thumbprint.js +68 -0
  75. package/dist/node_modules/jose/dist/webapi/jwks/local.js +119 -0
  76. package/dist/node_modules/jose/dist/webapi/jwks/remote.js +179 -0
  77. package/dist/node_modules/jose/dist/webapi/jws/compact/sign.js +18 -0
  78. package/dist/node_modules/jose/dist/webapi/jws/compact/verify.js +21 -0
  79. package/dist/node_modules/jose/dist/webapi/jws/flattened/sign.js +89 -0
  80. package/dist/node_modules/jose/dist/webapi/jws/flattened/verify.js +110 -0
  81. package/dist/node_modules/jose/dist/webapi/jws/general/sign.js +70 -0
  82. package/dist/node_modules/jose/dist/webapi/jws/general/verify.js +24 -0
  83. package/dist/node_modules/jose/dist/webapi/jwt/decrypt.js +23 -0
  84. package/dist/node_modules/jose/dist/webapi/jwt/encrypt.js +101 -0
  85. package/dist/node_modules/jose/dist/webapi/jwt/sign.js +52 -0
  86. package/dist/node_modules/jose/dist/webapi/jwt/unsecured.js +63 -0
  87. package/dist/node_modules/jose/dist/webapi/jwt/verify.js +15 -0
  88. package/dist/node_modules/jose/dist/webapi/key/export.js +11 -0
  89. package/dist/node_modules/jose/dist/webapi/key/generate_key_pair.js +97 -0
  90. package/dist/node_modules/jose/dist/webapi/key/generate_secret.js +40 -0
  91. package/dist/node_modules/jose/dist/webapi/key/import.js +57 -0
  92. package/dist/node_modules/jose/dist/webapi/lib/aesgcmkw.js +15 -0
  93. package/dist/node_modules/jose/dist/webapi/lib/aeskw.js +25 -0
  94. package/dist/node_modules/jose/dist/webapi/lib/asn1.js +243 -0
  95. package/dist/node_modules/jose/dist/webapi/lib/base64.js +22 -0
  96. package/dist/node_modules/jose/dist/webapi/lib/buffer_utils.js +43 -0
  97. package/dist/node_modules/jose/dist/webapi/lib/check_key_type.js +122 -0
  98. package/dist/node_modules/jose/dist/webapi/lib/content_encryption.js +217 -0
  99. package/dist/node_modules/jose/dist/webapi/lib/crypto_key.js +136 -0
  100. package/dist/node_modules/jose/dist/webapi/lib/deflate.js +44 -0
  101. package/dist/node_modules/jose/dist/webapi/lib/ecdhes.js +52 -0
  102. package/dist/node_modules/jose/dist/webapi/lib/helpers.js +19 -0
  103. package/dist/node_modules/jose/dist/webapi/lib/invalid_key_input.js +27 -0
  104. package/dist/node_modules/jose/dist/webapi/lib/is_key_like.js +17 -0
  105. package/dist/node_modules/jose/dist/webapi/lib/jwk_to_key.js +107 -0
  106. package/dist/node_modules/jose/dist/webapi/lib/jwt_claims_set.js +238 -0
  107. package/dist/node_modules/jose/dist/webapi/lib/key_management.js +186 -0
  108. package/dist/node_modules/jose/dist/webapi/lib/key_to_jwk.js +31 -0
  109. package/dist/node_modules/jose/dist/webapi/lib/normalize_key.js +166 -0
  110. package/dist/node_modules/jose/dist/webapi/lib/pbes2kw.js +39 -0
  111. package/dist/node_modules/jose/dist/webapi/lib/rsaes.js +24 -0
  112. package/dist/node_modules/jose/dist/webapi/lib/signing.js +68 -0
  113. package/dist/node_modules/jose/dist/webapi/lib/type_checks.js +40 -0
  114. package/dist/node_modules/jose/dist/webapi/lib/validate_algorithms.js +10 -0
  115. package/dist/node_modules/jose/dist/webapi/lib/validate_crit.js +33 -0
  116. package/dist/node_modules/jose/dist/webapi/util/base64url.js +30 -0
  117. package/dist/node_modules/jose/dist/webapi/util/decode_jwt.js +32 -0
  118. package/dist/node_modules/jose/dist/webapi/util/decode_protected_header.js +34 -0
  119. package/dist/node_modules/jose/dist/webapi/util/errors.js +99 -0
  120. package/dist/node_modules/jose/package.json +200 -0
  121. package/dist/node_modules/light-my-request/.gitattributes +2 -0
  122. package/dist/node_modules/light-my-request/.github/dependabot.yml +13 -0
  123. package/dist/node_modules/light-my-request/.github/stale.yml +21 -0
  124. package/dist/node_modules/light-my-request/.github/workflows/benchmark.yml +30 -0
  125. package/dist/node_modules/light-my-request/.github/workflows/ci.yml +23 -0
  126. package/dist/node_modules/light-my-request/LICENSE +32 -0
  127. package/dist/node_modules/light-my-request/benchmark/benchmark.js +164 -0
  128. package/dist/node_modules/light-my-request/build/build-validation.js +100 -0
  129. package/dist/node_modules/light-my-request/eslint.config.js +9 -0
  130. package/dist/node_modules/light-my-request/index.js +2 -0
  131. package/dist/node_modules/light-my-request/lib/config-validator.js +919 -0
  132. package/dist/node_modules/light-my-request/lib/form-data.js +79 -0
  133. package/dist/node_modules/light-my-request/lib/parse-url.js +47 -0
  134. package/dist/node_modules/light-my-request/lib/request.js +290 -0
  135. package/dist/node_modules/light-my-request/lib/response.js +240 -0
  136. package/dist/node_modules/light-my-request/node_modules/process-warning/.gitattributes +2 -0
  137. package/dist/node_modules/light-my-request/node_modules/process-warning/.github/dependabot.yml +13 -0
  138. package/dist/node_modules/light-my-request/node_modules/process-warning/.github/workflows/ci.yml +24 -0
  139. package/dist/node_modules/light-my-request/node_modules/process-warning/.taprc +2 -0
  140. package/dist/node_modules/light-my-request/node_modules/process-warning/benchmarks/warn.js +25 -0
  141. package/dist/node_modules/light-my-request/node_modules/process-warning/eslint.config.js +6 -0
  142. package/dist/node_modules/light-my-request/node_modules/process-warning/examples/example.js +11 -0
  143. package/dist/node_modules/light-my-request/node_modules/process-warning/index.js +124 -0
  144. package/dist/node_modules/light-my-request/node_modules/process-warning/package.json +73 -0
  145. package/dist/node_modules/light-my-request/node_modules/process-warning/test/emit-interpolated-string.test.js +29 -0
  146. package/dist/node_modules/light-my-request/node_modules/process-warning/test/emit-once-only.test.js +28 -0
  147. package/dist/node_modules/light-my-request/node_modules/process-warning/test/emit-reset.test.js +36 -0
  148. package/dist/node_modules/light-my-request/node_modules/process-warning/test/emit-set.test.js +30 -0
  149. package/dist/node_modules/light-my-request/node_modules/process-warning/test/emit-unlimited.test.js +37 -0
  150. package/dist/node_modules/light-my-request/node_modules/process-warning/test/index.test.js +99 -0
  151. package/dist/node_modules/light-my-request/node_modules/process-warning/test/issue-88.test.js +33 -0
  152. package/dist/node_modules/light-my-request/node_modules/process-warning/test/jest.test.js +22 -0
  153. package/dist/node_modules/light-my-request/node_modules/process-warning/test/no-warnings.test.js +80 -0
  154. package/dist/node_modules/light-my-request/node_modules/process-warning/types/index.d.ts +37 -0
  155. package/dist/node_modules/light-my-request/node_modules/process-warning/types/index.test-d.ts +36 -0
  156. package/dist/node_modules/light-my-request/package.json +1 -0
  157. package/dist/node_modules/light-my-request/test/async-await.test.js +55 -0
  158. package/dist/node_modules/light-my-request/test/index.test.js +2316 -0
  159. package/dist/node_modules/light-my-request/test/request.test.js +16 -0
  160. package/dist/node_modules/light-my-request/test/response.test.js +19 -0
  161. package/dist/node_modules/light-my-request/test/stream.test.js +359 -0
  162. package/dist/node_modules/light-my-request/types/index.d.ts +128 -0
  163. package/dist/node_modules/light-my-request/types/index.test-d.ts +149 -0
  164. package/dist/node_modules/oidc-provider/LICENSE.md +21 -0
  165. package/dist/node_modules/oidc-provider/README.md +174 -0
  166. package/dist/node_modules/oidc-provider/lib/actions/authorization/assign_claims.js +28 -0
  167. package/dist/node_modules/oidc-provider/lib/actions/authorization/assign_defaults.js +17 -0
  168. package/dist/node_modules/oidc-provider/lib/actions/authorization/authenticated_client_id.js +6 -0
  169. package/dist/node_modules/oidc-provider/lib/actions/authorization/backchannel_request_remap_errors.js +17 -0
  170. package/dist/node_modules/oidc-provider/lib/actions/authorization/backchannel_request_response.js +41 -0
  171. package/dist/node_modules/oidc-provider/lib/actions/authorization/check_ciba_context.js +12 -0
  172. package/dist/node_modules/oidc-provider/lib/actions/authorization/check_claims.js +68 -0
  173. package/dist/node_modules/oidc-provider/lib/actions/authorization/check_client.js +21 -0
  174. package/dist/node_modules/oidc-provider/lib/actions/authorization/check_client_grant_type.js +21 -0
  175. package/dist/node_modules/oidc-provider/lib/actions/authorization/check_dpop_jkt.js +35 -0
  176. package/dist/node_modules/oidc-provider/lib/actions/authorization/check_extra_params.js +18 -0
  177. package/dist/node_modules/oidc-provider/lib/actions/authorization/check_id_token_hint.js +23 -0
  178. package/dist/node_modules/oidc-provider/lib/actions/authorization/check_max_age.js +25 -0
  179. package/dist/node_modules/oidc-provider/lib/actions/authorization/check_openid_scope.js +47 -0
  180. package/dist/node_modules/oidc-provider/lib/actions/authorization/check_pkce.js +41 -0
  181. package/dist/node_modules/oidc-provider/lib/actions/authorization/check_prompt.js +25 -0
  182. package/dist/node_modules/oidc-provider/lib/actions/authorization/check_redirect_uri.js +41 -0
  183. package/dist/node_modules/oidc-provider/lib/actions/authorization/check_requested_expiry.js +16 -0
  184. package/dist/node_modules/oidc-provider/lib/actions/authorization/check_response_mode.js +54 -0
  185. package/dist/node_modules/oidc-provider/lib/actions/authorization/check_response_type.js +26 -0
  186. package/dist/node_modules/oidc-provider/lib/actions/authorization/check_scope.js +53 -0
  187. package/dist/node_modules/oidc-provider/lib/actions/authorization/ciba_load_account.js +58 -0
  188. package/dist/node_modules/oidc-provider/lib/actions/authorization/ciba_required.js +13 -0
  189. package/dist/node_modules/oidc-provider/lib/actions/authorization/device_authorization_response.js +31 -0
  190. package/dist/node_modules/oidc-provider/lib/actions/authorization/device_user_flow.js +31 -0
  191. package/dist/node_modules/oidc-provider/lib/actions/authorization/device_user_flow_errors.js +37 -0
  192. package/dist/node_modules/oidc-provider/lib/actions/authorization/device_user_flow_response.js +55 -0
  193. package/dist/node_modules/oidc-provider/lib/actions/authorization/index.js +200 -0
  194. package/dist/node_modules/oidc-provider/lib/actions/authorization/interaction_emit.js +9 -0
  195. package/dist/node_modules/oidc-provider/lib/actions/authorization/interactions.js +149 -0
  196. package/dist/node_modules/oidc-provider/lib/actions/authorization/load_account.js +15 -0
  197. package/dist/node_modules/oidc-provider/lib/actions/authorization/load_grant.js +29 -0
  198. package/dist/node_modules/oidc-provider/lib/actions/authorization/load_pushed_authorization_request.js +36 -0
  199. package/dist/node_modules/oidc-provider/lib/actions/authorization/oauth_required.js +11 -0
  200. package/dist/node_modules/oidc-provider/lib/actions/authorization/oidc_required.js +27 -0
  201. package/dist/node_modules/oidc-provider/lib/actions/authorization/one_redirect_uri_clients.js +20 -0
  202. package/dist/node_modules/oidc-provider/lib/actions/authorization/process_request_object.js +214 -0
  203. package/dist/node_modules/oidc-provider/lib/actions/authorization/pushed_authorization_request_remap_errors.js +17 -0
  204. package/dist/node_modules/oidc-provider/lib/actions/authorization/pushed_authorization_request_response.js +65 -0
  205. package/dist/node_modules/oidc-provider/lib/actions/authorization/reject_registration.js +12 -0
  206. package/dist/node_modules/oidc-provider/lib/actions/authorization/reject_request_and_uri.js +12 -0
  207. package/dist/node_modules/oidc-provider/lib/actions/authorization/reject_unsupported.js +33 -0
  208. package/dist/node_modules/oidc-provider/lib/actions/authorization/respond.js +46 -0
  209. package/dist/node_modules/oidc-provider/lib/actions/authorization/resume.js +111 -0
  210. package/dist/node_modules/oidc-provider/lib/actions/authorization/strip_outside_jar_params.js +19 -0
  211. package/dist/node_modules/oidc-provider/lib/actions/authorization/unsupported_rar.js +9 -0
  212. package/dist/node_modules/oidc-provider/lib/actions/challenge.js +22 -0
  213. package/dist/node_modules/oidc-provider/lib/actions/code_verification.js +122 -0
  214. package/dist/node_modules/oidc-provider/lib/actions/discovery.js +151 -0
  215. package/dist/node_modules/oidc-provider/lib/actions/end_session.js +222 -0
  216. package/dist/node_modules/oidc-provider/lib/actions/grants/authorization_code.js +144 -0
  217. package/dist/node_modules/oidc-provider/lib/actions/grants/ciba.js +127 -0
  218. package/dist/node_modules/oidc-provider/lib/actions/grants/client_credentials.js +79 -0
  219. package/dist/node_modules/oidc-provider/lib/actions/grants/device_code.js +125 -0
  220. package/dist/node_modules/oidc-provider/lib/actions/grants/index.js +7 -0
  221. package/dist/node_modules/oidc-provider/lib/actions/grants/refresh_token.js +229 -0
  222. package/dist/node_modules/oidc-provider/lib/actions/index.js +25 -0
  223. package/dist/node_modules/oidc-provider/lib/actions/interaction.js +150 -0
  224. package/dist/node_modules/oidc-provider/lib/actions/introspection.js +164 -0
  225. package/dist/node_modules/oidc-provider/lib/actions/jwks.js +7 -0
  226. package/dist/node_modules/oidc-provider/lib/actions/registration.js +274 -0
  227. package/dist/node_modules/oidc-provider/lib/actions/revocation.js +81 -0
  228. package/dist/node_modules/oidc-provider/lib/actions/token.js +74 -0
  229. package/dist/node_modules/oidc-provider/lib/actions/userinfo.js +183 -0
  230. package/dist/node_modules/oidc-provider/lib/adapters/memory_adapter.js +95 -0
  231. package/dist/node_modules/oidc-provider/lib/consts/client_attributes.js +211 -0
  232. package/dist/node_modules/oidc-provider/lib/consts/dev_keystore.js +18 -0
  233. package/dist/node_modules/oidc-provider/lib/consts/index.js +13 -0
  234. package/dist/node_modules/oidc-provider/lib/consts/jwa.js +47 -0
  235. package/dist/node_modules/oidc-provider/lib/consts/non_rejectable_claims.js +1 -0
  236. package/dist/node_modules/oidc-provider/lib/consts/param_list.js +23 -0
  237. package/dist/node_modules/oidc-provider/lib/helpers/_/camel_case.js +1 -0
  238. package/dist/node_modules/oidc-provider/lib/helpers/_/defaults.js +28 -0
  239. package/dist/node_modules/oidc-provider/lib/helpers/_/difference.js +1 -0
  240. package/dist/node_modules/oidc-provider/lib/helpers/_/is_plain_object.js +1 -0
  241. package/dist/node_modules/oidc-provider/lib/helpers/_/map_keys.js +9 -0
  242. package/dist/node_modules/oidc-provider/lib/helpers/_/merge.js +25 -0
  243. package/dist/node_modules/oidc-provider/lib/helpers/_/omit_by.js +11 -0
  244. package/dist/node_modules/oidc-provider/lib/helpers/_/pick.js +10 -0
  245. package/dist/node_modules/oidc-provider/lib/helpers/_/pick_by.js +10 -0
  246. package/dist/node_modules/oidc-provider/lib/helpers/_/remove.js +9 -0
  247. package/dist/node_modules/oidc-provider/lib/helpers/_/set.js +18 -0
  248. package/dist/node_modules/oidc-provider/lib/helpers/_/snake_case.js +1 -0
  249. package/dist/node_modules/oidc-provider/lib/helpers/_/upper_first.js +1 -0
  250. package/dist/node_modules/oidc-provider/lib/helpers/account_claims.js +6 -0
  251. package/dist/node_modules/oidc-provider/lib/helpers/add_client.js +14 -0
  252. package/dist/node_modules/oidc-provider/lib/helpers/als.js +3 -0
  253. package/dist/node_modules/oidc-provider/lib/helpers/append_www_authenticate.js +9 -0
  254. package/dist/node_modules/oidc-provider/lib/helpers/attention.js +23 -0
  255. package/dist/node_modules/oidc-provider/lib/helpers/base64url.js +11 -0
  256. package/dist/node_modules/oidc-provider/lib/helpers/certificate_thumbprint.js +15 -0
  257. package/dist/node_modules/oidc-provider/lib/helpers/challenge.js +111 -0
  258. package/dist/node_modules/oidc-provider/lib/helpers/check_attest_binding.js +10 -0
  259. package/dist/node_modules/oidc-provider/lib/helpers/claims.js +79 -0
  260. package/dist/node_modules/oidc-provider/lib/helpers/client_id_metadata_document.js +198 -0
  261. package/dist/node_modules/oidc-provider/lib/helpers/client_schema.js +700 -0
  262. package/dist/node_modules/oidc-provider/lib/helpers/combined_scope.js +17 -0
  263. package/dist/node_modules/oidc-provider/lib/helpers/configuration.js +544 -0
  264. package/dist/node_modules/oidc-provider/lib/helpers/constant_equals.js +20 -0
  265. package/dist/node_modules/oidc-provider/lib/helpers/defaults.js +3510 -0
  266. package/dist/node_modules/oidc-provider/lib/helpers/epoch_time.js +1 -0
  267. package/dist/node_modules/oidc-provider/lib/helpers/err_out.js +17 -0
  268. package/dist/node_modules/oidc-provider/lib/helpers/errors.js +161 -0
  269. package/dist/node_modules/oidc-provider/lib/helpers/features.js +51 -0
  270. package/dist/node_modules/oidc-provider/lib/helpers/fetch_body_check.js +25 -0
  271. package/dist/node_modules/oidc-provider/lib/helpers/fetch_request.js +221 -0
  272. package/dist/node_modules/oidc-provider/lib/helpers/filter_claims.js +16 -0
  273. package/dist/node_modules/oidc-provider/lib/helpers/formatters.js +24 -0
  274. package/dist/node_modules/oidc-provider/lib/helpers/grant_common.js +214 -0
  275. package/dist/node_modules/oidc-provider/lib/helpers/html_safe.js +19 -0
  276. package/dist/node_modules/oidc-provider/lib/helpers/initialize_adapter.js +24 -0
  277. package/dist/node_modules/oidc-provider/lib/helpers/initialize_app.js +243 -0
  278. package/dist/node_modules/oidc-provider/lib/helpers/initialize_clients.js +24 -0
  279. package/dist/node_modules/oidc-provider/lib/helpers/initialize_keystore.js +310 -0
  280. package/dist/node_modules/oidc-provider/lib/helpers/interaction_policy/check.js +21 -0
  281. package/dist/node_modules/oidc-provider/lib/helpers/interaction_policy/index.js +43 -0
  282. package/dist/node_modules/oidc-provider/lib/helpers/interaction_policy/prompt.js +95 -0
  283. package/dist/node_modules/oidc-provider/lib/helpers/interaction_policy/prompts/consent.js +105 -0
  284. package/dist/node_modules/oidc-provider/lib/helpers/interaction_policy/prompts/login.js +162 -0
  285. package/dist/node_modules/oidc-provider/lib/helpers/jwt.js +211 -0
  286. package/dist/node_modules/oidc-provider/lib/helpers/keystore.js +301 -0
  287. package/dist/node_modules/oidc-provider/lib/helpers/nanoid.js +5 -0
  288. package/dist/node_modules/oidc-provider/lib/helpers/oidc_context.js +284 -0
  289. package/dist/node_modules/oidc-provider/lib/helpers/params.js +27 -0
  290. package/dist/node_modules/oidc-provider/lib/helpers/pkce.js +30 -0
  291. package/dist/node_modules/oidc-provider/lib/helpers/pkce_format.js +17 -0
  292. package/dist/node_modules/oidc-provider/lib/helpers/process_response_types.js +202 -0
  293. package/dist/node_modules/oidc-provider/lib/helpers/re_render_errors.js +39 -0
  294. package/dist/node_modules/oidc-provider/lib/helpers/redirect_uri.js +16 -0
  295. package/dist/node_modules/oidc-provider/lib/helpers/resolve_resource.js +33 -0
  296. package/dist/node_modules/oidc-provider/lib/helpers/resolve_response_mode.js +7 -0
  297. package/dist/node_modules/oidc-provider/lib/helpers/resource_server.js +20 -0
  298. package/dist/node_modules/oidc-provider/lib/helpers/revoke.js +27 -0
  299. package/dist/node_modules/oidc-provider/lib/helpers/script_src_sha.js +21 -0
  300. package/dist/node_modules/oidc-provider/lib/helpers/sector_identifier.js +19 -0
  301. package/dist/node_modules/oidc-provider/lib/helpers/sector_validate.js +55 -0
  302. package/dist/node_modules/oidc-provider/lib/helpers/set_rt_bindings.js +21 -0
  303. package/dist/node_modules/oidc-provider/lib/helpers/token_find.js +51 -0
  304. package/dist/node_modules/oidc-provider/lib/helpers/type_validators.js +8 -0
  305. package/dist/node_modules/oidc-provider/lib/helpers/user_code_form.js +19 -0
  306. package/dist/node_modules/oidc-provider/lib/helpers/user_codes.js +38 -0
  307. package/dist/node_modules/oidc-provider/lib/helpers/valid_url.js +8 -0
  308. package/dist/node_modules/oidc-provider/lib/helpers/validate_dpop.js +129 -0
  309. package/dist/node_modules/oidc-provider/lib/helpers/validate_presence.js +17 -0
  310. package/dist/node_modules/oidc-provider/lib/helpers/weak_cache.js +11 -0
  311. package/dist/node_modules/oidc-provider/lib/index.js +21 -0
  312. package/dist/node_modules/oidc-provider/lib/models/access_token.js +31 -0
  313. package/dist/node_modules/oidc-provider/lib/models/authorization_code.js +27 -0
  314. package/dist/node_modules/oidc-provider/lib/models/backchannel_authentication_request.js +26 -0
  315. package/dist/node_modules/oidc-provider/lib/models/base_model.js +141 -0
  316. package/dist/node_modules/oidc-provider/lib/models/base_token.js +86 -0
  317. package/dist/node_modules/oidc-provider/lib/models/client.js +593 -0
  318. package/dist/node_modules/oidc-provider/lib/models/client_credentials.js +19 -0
  319. package/dist/node_modules/oidc-provider/lib/models/device_code.js +44 -0
  320. package/dist/node_modules/oidc-provider/lib/models/formats/dynamic.js +21 -0
  321. package/dist/node_modules/oidc-provider/lib/models/formats/index.js +14 -0
  322. package/dist/node_modules/oidc-provider/lib/models/formats/jwt.js +198 -0
  323. package/dist/node_modules/oidc-provider/lib/models/formats/opaque.js +58 -0
  324. package/dist/node_modules/oidc-provider/lib/models/grant.js +243 -0
  325. package/dist/node_modules/oidc-provider/lib/models/id_token.js +271 -0
  326. package/dist/node_modules/oidc-provider/lib/models/index.js +37 -0
  327. package/dist/node_modules/oidc-provider/lib/models/initial_access_token.js +12 -0
  328. package/dist/node_modules/oidc-provider/lib/models/interaction.js +73 -0
  329. package/dist/node_modules/oidc-provider/lib/models/mixins/apply.js +4 -0
  330. package/dist/node_modules/oidc-provider/lib/models/mixins/consumable.js +17 -0
  331. package/dist/node_modules/oidc-provider/lib/models/mixins/has_format.js +46 -0
  332. package/dist/node_modules/oidc-provider/lib/models/mixins/has_grant_id.js +12 -0
  333. package/dist/node_modules/oidc-provider/lib/models/mixins/has_grant_type.js +8 -0
  334. package/dist/node_modules/oidc-provider/lib/models/mixins/has_policies.js +38 -0
  335. package/dist/node_modules/oidc-provider/lib/models/mixins/is_attestation_constrained.js +15 -0
  336. package/dist/node_modules/oidc-provider/lib/models/mixins/is_sender_constrained.js +50 -0
  337. package/dist/node_modules/oidc-provider/lib/models/mixins/is_session_bound.js +38 -0
  338. package/dist/node_modules/oidc-provider/lib/models/mixins/set_audience.js +21 -0
  339. package/dist/node_modules/oidc-provider/lib/models/mixins/stores_auth.js +16 -0
  340. package/dist/node_modules/oidc-provider/lib/models/mixins/stores_pkce.js +9 -0
  341. package/dist/node_modules/oidc-provider/lib/models/pushed_authorization_request.js +21 -0
  342. package/dist/node_modules/oidc-provider/lib/models/refresh_token.js +47 -0
  343. package/dist/node_modules/oidc-provider/lib/models/registration_access_token.js +8 -0
  344. package/dist/node_modules/oidc-provider/lib/models/replay_detection.js +31 -0
  345. package/dist/node_modules/oidc-provider/lib/models/session.js +192 -0
  346. package/dist/node_modules/oidc-provider/lib/provider.js +453 -0
  347. package/dist/node_modules/oidc-provider/lib/response_modes/form_post.js +36 -0
  348. package/dist/node_modules/oidc-provider/lib/response_modes/fragment.js +7 -0
  349. package/dist/node_modules/oidc-provider/lib/response_modes/index.js +15 -0
  350. package/dist/node_modules/oidc-provider/lib/response_modes/jwt.js +43 -0
  351. package/dist/node_modules/oidc-provider/lib/response_modes/query.js +7 -0
  352. package/dist/node_modules/oidc-provider/lib/response_modes/web_message.js +55 -0
  353. package/dist/node_modules/oidc-provider/lib/shared/assemble_params.js +7 -0
  354. package/dist/node_modules/oidc-provider/lib/shared/attest_client_auth.js +111 -0
  355. package/dist/node_modules/oidc-provider/lib/shared/authorization_error_handler.js +104 -0
  356. package/dist/node_modules/oidc-provider/lib/shared/check_rar.js +75 -0
  357. package/dist/node_modules/oidc-provider/lib/shared/check_resource.js +77 -0
  358. package/dist/node_modules/oidc-provider/lib/shared/client_auth.js +263 -0
  359. package/dist/node_modules/oidc-provider/lib/shared/conditional_body.js +9 -0
  360. package/dist/node_modules/oidc-provider/lib/shared/cors.js +49 -0
  361. package/dist/node_modules/oidc-provider/lib/shared/error_handler.js +59 -0
  362. package/dist/node_modules/oidc-provider/lib/shared/jwt_client_auth.js +79 -0
  363. package/dist/node_modules/oidc-provider/lib/shared/no_cache.js +4 -0
  364. package/dist/node_modules/oidc-provider/lib/shared/reject_dupes.js +45 -0
  365. package/dist/node_modules/oidc-provider/lib/shared/reject_structured_tokens.js +18 -0
  366. package/dist/node_modules/oidc-provider/lib/shared/selective_body.js +60 -0
  367. package/dist/node_modules/oidc-provider/lib/shared/session.js +68 -0
  368. package/dist/node_modules/oidc-provider/lib/shared/set_www_authenticate_header.js +52 -0
  369. package/dist/node_modules/oidc-provider/lib/views/index.js +22 -0
  370. package/dist/node_modules/oidc-provider/lib/views/interaction.js +171 -0
  371. package/dist/node_modules/oidc-provider/lib/views/layout.js +237 -0
  372. package/dist/node_modules/oidc-provider/lib/views/login.js +43 -0
  373. package/dist/node_modules/oidc-provider/node_modules/@koa/router/LICENSE +21 -0
  374. package/dist/node_modules/oidc-provider/node_modules/@koa/router/README.md +1370 -0
  375. package/dist/node_modules/oidc-provider/node_modules/@koa/router/dist/index.d.mts +1003 -0
  376. package/dist/node_modules/oidc-provider/node_modules/@koa/router/dist/index.d.ts +1003 -0
  377. package/dist/node_modules/oidc-provider/node_modules/@koa/router/dist/index.js +1616 -0
  378. package/dist/node_modules/oidc-provider/node_modules/@koa/router/dist/index.mjs +1573 -0
  379. package/dist/node_modules/oidc-provider/node_modules/@koa/router/package.json +122 -0
  380. package/dist/node_modules/oidc-provider/node_modules/debug/LICENSE +20 -0
  381. package/dist/node_modules/oidc-provider/node_modules/debug/README.md +481 -0
  382. package/dist/node_modules/oidc-provider/node_modules/debug/package.json +64 -0
  383. package/dist/node_modules/oidc-provider/node_modules/debug/src/browser.js +272 -0
  384. package/dist/node_modules/oidc-provider/node_modules/debug/src/common.js +292 -0
  385. package/dist/node_modules/oidc-provider/node_modules/debug/src/index.js +10 -0
  386. package/dist/node_modules/oidc-provider/node_modules/debug/src/node.js +263 -0
  387. package/dist/node_modules/oidc-provider/node_modules/http-errors/HISTORY.md +186 -0
  388. package/dist/node_modules/oidc-provider/node_modules/http-errors/LICENSE +23 -0
  389. package/dist/node_modules/oidc-provider/node_modules/http-errors/README.md +169 -0
  390. package/dist/node_modules/oidc-provider/node_modules/http-errors/index.js +290 -0
  391. package/dist/node_modules/oidc-provider/node_modules/http-errors/package.json +54 -0
  392. package/dist/node_modules/oidc-provider/node_modules/jsesc/LICENSE-MIT.txt +20 -0
  393. package/dist/node_modules/oidc-provider/node_modules/jsesc/README.md +422 -0
  394. package/dist/node_modules/oidc-provider/node_modules/jsesc/bin/jsesc +148 -0
  395. package/dist/node_modules/oidc-provider/node_modules/jsesc/jsesc.js +337 -0
  396. package/dist/node_modules/oidc-provider/node_modules/jsesc/man/jsesc.1 +94 -0
  397. package/dist/node_modules/oidc-provider/node_modules/jsesc/package.json +56 -0
  398. package/dist/node_modules/oidc-provider/node_modules/nanoid/LICENSE +20 -0
  399. package/dist/node_modules/oidc-provider/node_modules/nanoid/README.md +38 -0
  400. package/dist/node_modules/oidc-provider/node_modules/nanoid/bin/nanoid.js +55 -0
  401. package/dist/node_modules/oidc-provider/node_modules/nanoid/index.browser.js +29 -0
  402. package/dist/node_modules/oidc-provider/node_modules/nanoid/index.d.ts +106 -0
  403. package/dist/node_modules/oidc-provider/node_modules/nanoid/index.js +47 -0
  404. package/dist/node_modules/oidc-provider/node_modules/nanoid/nanoid.js +1 -0
  405. package/dist/node_modules/oidc-provider/node_modules/nanoid/non-secure/index.d.ts +48 -0
  406. package/dist/node_modules/oidc-provider/node_modules/nanoid/non-secure/index.js +21 -0
  407. package/dist/node_modules/oidc-provider/node_modules/nanoid/package.json +46 -0
  408. package/dist/node_modules/oidc-provider/node_modules/nanoid/url-alphabet/index.js +2 -0
  409. package/dist/node_modules/oidc-provider/node_modules/path-to-regexp/LICENSE +21 -0
  410. package/dist/node_modules/oidc-provider/node_modules/path-to-regexp/Readme.md +224 -0
  411. package/dist/node_modules/oidc-provider/node_modules/path-to-regexp/dist/index.d.ts +144 -0
  412. package/dist/node_modules/oidc-provider/node_modules/path-to-regexp/dist/index.js +409 -0
  413. package/dist/node_modules/oidc-provider/node_modules/path-to-regexp/dist/index.js.map +1 -0
  414. package/dist/node_modules/oidc-provider/node_modules/path-to-regexp/package.json +64 -0
  415. package/dist/node_modules/oidc-provider/node_modules/statuses/HISTORY.md +87 -0
  416. package/dist/node_modules/oidc-provider/node_modules/statuses/LICENSE +23 -0
  417. package/dist/node_modules/oidc-provider/node_modules/statuses/README.md +139 -0
  418. package/dist/node_modules/oidc-provider/node_modules/statuses/codes.json +65 -0
  419. package/dist/node_modules/oidc-provider/node_modules/statuses/index.js +146 -0
  420. package/dist/node_modules/oidc-provider/node_modules/statuses/package.json +49 -0
  421. package/dist/node_modules/oidc-provider/package.json +95 -0
  422. package/dist/node_modules/quick-lru/index.d.ts +178 -0
  423. package/dist/node_modules/quick-lru/index.js +329 -0
  424. package/dist/node_modules/quick-lru/license +9 -0
  425. package/dist/node_modules/quick-lru/package.json +54 -0
  426. package/dist/node_modules/quick-lru/readme.md +236 -0
  427. package/dist/node_modules/statuses/HISTORY.md +65 -0
  428. package/dist/node_modules/statuses/LICENSE +23 -0
  429. package/dist/node_modules/statuses/README.md +127 -0
  430. package/dist/node_modules/statuses/codes.json +66 -0
  431. package/dist/node_modules/statuses/index.js +113 -0
  432. package/dist/node_modules/statuses/package.json +48 -0
  433. package/dist/server/cache-adapter.d.ts +33 -0
  434. package/dist/server/cache-adapter.js +159 -0
  435. package/dist/server/index.d.ts +10 -0
  436. package/dist/server/index.js +48 -0
  437. package/dist/server/interaction.d.ts +26 -0
  438. package/dist/server/interaction.js +172 -0
  439. package/dist/server/paths.d.ts +19 -0
  440. package/dist/server/paths.js +64 -0
  441. package/dist/server/plugin.d.ts +16 -0
  442. package/dist/server/plugin.js +108 -0
  443. package/dist/server/provider-dispatch.d.ts +32 -0
  444. package/dist/server/provider-dispatch.js +252 -0
  445. package/dist/server/service.d.ts +63 -0
  446. package/dist/server/service.js +540 -0
  447. package/dist/server/utils.d.ts +12 -0
  448. package/dist/server/utils.js +58 -0
  449. package/package.json +24 -0
  450. package/server.d.ts +2 -0
  451. package/server.js +1 -0
@@ -0,0 +1,40 @@
1
+ import { JOSENotSupported } from '../util/errors.js';
2
+ export async function generateSecret(alg, options) {
3
+ let length;
4
+ let algorithm;
5
+ let keyUsages;
6
+ switch (alg) {
7
+ case 'HS256':
8
+ case 'HS384':
9
+ case 'HS512':
10
+ length = parseInt(alg.slice(-3), 10);
11
+ algorithm = { name: 'HMAC', hash: `SHA-${length}`, length };
12
+ keyUsages = ['sign', 'verify'];
13
+ break;
14
+ case 'A128CBC-HS256':
15
+ case 'A192CBC-HS384':
16
+ case 'A256CBC-HS512':
17
+ length = parseInt(alg.slice(-3), 10);
18
+ return crypto.getRandomValues(new Uint8Array(length >> 3));
19
+ case 'A128KW':
20
+ case 'A192KW':
21
+ case 'A256KW':
22
+ length = parseInt(alg.slice(1, 4), 10);
23
+ algorithm = { name: 'AES-KW', length };
24
+ keyUsages = ['wrapKey', 'unwrapKey'];
25
+ break;
26
+ case 'A128GCMKW':
27
+ case 'A192GCMKW':
28
+ case 'A256GCMKW':
29
+ case 'A128GCM':
30
+ case 'A192GCM':
31
+ case 'A256GCM':
32
+ length = parseInt(alg.slice(1, 4), 10);
33
+ algorithm = { name: 'AES-GCM', length };
34
+ keyUsages = ['encrypt', 'decrypt'];
35
+ break;
36
+ default:
37
+ throw new JOSENotSupported('Invalid or unsupported JWK "alg" (Algorithm) Parameter value');
38
+ }
39
+ return crypto.subtle.generateKey(algorithm, options?.extractable ?? false, keyUsages);
40
+ }
@@ -0,0 +1,57 @@
1
+ import { decode as decodeBase64URL } from '../util/base64url.js';
2
+ import { fromSPKI, fromPKCS8, fromX509 } from '../lib/asn1.js';
3
+ import { jwkToKey } from '../lib/jwk_to_key.js';
4
+ import { JOSENotSupported } from '../util/errors.js';
5
+ import { isObject } from '../lib/type_checks.js';
6
+ export async function importSPKI(spki, alg, options) {
7
+ if (typeof spki !== 'string' || spki.indexOf('-----BEGIN PUBLIC KEY-----') !== 0) {
8
+ throw new TypeError('"spki" must be SPKI formatted string');
9
+ }
10
+ return fromSPKI(spki, alg, options);
11
+ }
12
+ export async function importX509(x509, alg, options) {
13
+ if (typeof x509 !== 'string' || x509.indexOf('-----BEGIN CERTIFICATE-----') !== 0) {
14
+ throw new TypeError('"x509" must be X.509 formatted string');
15
+ }
16
+ return fromX509(x509, alg, options);
17
+ }
18
+ export async function importPKCS8(pkcs8, alg, options) {
19
+ if (typeof pkcs8 !== 'string' || pkcs8.indexOf('-----BEGIN PRIVATE KEY-----') !== 0) {
20
+ throw new TypeError('"pkcs8" must be PKCS#8 formatted string');
21
+ }
22
+ return fromPKCS8(pkcs8, alg, options);
23
+ }
24
+ export async function importJWK(jwk, alg, options) {
25
+ if (!isObject(jwk)) {
26
+ throw new TypeError('JWK must be an object');
27
+ }
28
+ let ext;
29
+ alg ??= jwk.alg;
30
+ ext ??= options?.extractable ?? jwk.ext;
31
+ switch (jwk.kty) {
32
+ case 'oct':
33
+ if (typeof jwk.k !== 'string' || !jwk.k) {
34
+ throw new TypeError('missing "k" (Key Value) Parameter value');
35
+ }
36
+ return decodeBase64URL(jwk.k);
37
+ case 'RSA':
38
+ if ('oth' in jwk && jwk.oth !== undefined) {
39
+ throw new JOSENotSupported('RSA JWK "oth" (Other Primes Info) Parameter value is not supported');
40
+ }
41
+ return jwkToKey({ ...jwk, alg, ext });
42
+ case 'AKP': {
43
+ if (typeof jwk.alg !== 'string' || !jwk.alg) {
44
+ throw new TypeError('missing "alg" (Algorithm) Parameter value');
45
+ }
46
+ if (alg !== undefined && alg !== jwk.alg) {
47
+ throw new TypeError('JWK alg and alg option value mismatch');
48
+ }
49
+ return jwkToKey({ ...jwk, ext });
50
+ }
51
+ case 'EC':
52
+ case 'OKP':
53
+ return jwkToKey({ ...jwk, alg, ext });
54
+ default:
55
+ throw new JOSENotSupported('Unsupported "kty" (Key Type) Parameter value');
56
+ }
57
+ }
@@ -0,0 +1,15 @@
1
+ import { encrypt, decrypt } from './content_encryption.js';
2
+ import { encode as b64u } from '../util/base64url.js';
3
+ export async function wrap(alg, key, cek, iv) {
4
+ const jweAlgorithm = alg.slice(0, 7);
5
+ const wrapped = await encrypt(jweAlgorithm, cek, key, iv, new Uint8Array());
6
+ return {
7
+ encryptedKey: wrapped.ciphertext,
8
+ iv: b64u(wrapped.iv),
9
+ tag: b64u(wrapped.tag),
10
+ };
11
+ }
12
+ export async function unwrap(alg, key, encryptedKey, iv, tag) {
13
+ const jweAlgorithm = alg.slice(0, 7);
14
+ return decrypt(jweAlgorithm, key, encryptedKey, iv, tag, new Uint8Array());
15
+ }
@@ -0,0 +1,25 @@
1
+ import { checkEncCryptoKey } from './crypto_key.js';
2
+ function checkKeySize(key, alg) {
3
+ if (key.algorithm.length !== parseInt(alg.slice(1, 4), 10)) {
4
+ throw new TypeError(`Invalid key size for alg: ${alg}`);
5
+ }
6
+ }
7
+ function getCryptoKey(key, alg, usage) {
8
+ if (key instanceof Uint8Array) {
9
+ return crypto.subtle.importKey('raw', key, 'AES-KW', true, [usage]);
10
+ }
11
+ checkEncCryptoKey(key, alg, usage);
12
+ return key;
13
+ }
14
+ export async function wrap(alg, key, cek) {
15
+ const cryptoKey = await getCryptoKey(key, alg, 'wrapKey');
16
+ checkKeySize(cryptoKey, alg);
17
+ const cryptoKeyCek = await crypto.subtle.importKey('raw', cek, { hash: 'SHA-256', name: 'HMAC' }, true, ['sign']);
18
+ return new Uint8Array(await crypto.subtle.wrapKey('raw', cryptoKeyCek, cryptoKey, 'AES-KW'));
19
+ }
20
+ export async function unwrap(alg, key, encryptedKey) {
21
+ const cryptoKey = await getCryptoKey(key, alg, 'unwrapKey');
22
+ checkKeySize(cryptoKey, alg);
23
+ const cryptoKeyCek = await crypto.subtle.unwrapKey('raw', encryptedKey, cryptoKey, 'AES-KW', { hash: 'SHA-256', name: 'HMAC' }, true, ['sign']);
24
+ return new Uint8Array(await crypto.subtle.exportKey('raw', cryptoKeyCek));
25
+ }
@@ -0,0 +1,243 @@
1
+ import { invalidKeyInput } from './invalid_key_input.js';
2
+ import { encodeBase64, decodeBase64 } from '../lib/base64.js';
3
+ import { JOSENotSupported } from '../util/errors.js';
4
+ import { isCryptoKey, isKeyObject } from './is_key_like.js';
5
+ const formatPEM = (b64, descriptor) => {
6
+ const newlined = (b64.match(/.{1,64}/g) || []).join('\n');
7
+ return `-----BEGIN ${descriptor}-----\n${newlined}\n-----END ${descriptor}-----`;
8
+ };
9
+ const genericExport = async (keyType, keyFormat, key) => {
10
+ if (isKeyObject(key)) {
11
+ if (key.type !== keyType) {
12
+ throw new TypeError(`key is not a ${keyType} key`);
13
+ }
14
+ return key.export({ format: 'pem', type: keyFormat });
15
+ }
16
+ if (!isCryptoKey(key)) {
17
+ throw new TypeError(invalidKeyInput(key, 'CryptoKey', 'KeyObject'));
18
+ }
19
+ if (!key.extractable) {
20
+ throw new TypeError('CryptoKey is not extractable');
21
+ }
22
+ if (key.type !== keyType) {
23
+ throw new TypeError(`key is not a ${keyType} key`);
24
+ }
25
+ return formatPEM(encodeBase64(new Uint8Array(await crypto.subtle.exportKey(keyFormat, key))), `${keyType.toUpperCase()} KEY`);
26
+ };
27
+ export const toSPKI = (key) => genericExport('public', 'spki', key);
28
+ export const toPKCS8 = (key) => genericExport('private', 'pkcs8', key);
29
+ const bytesEqual = (a, b) => {
30
+ if (a.byteLength !== b.length)
31
+ return false;
32
+ for (let i = 0; i < a.byteLength; i++) {
33
+ if (a[i] !== b[i])
34
+ return false;
35
+ }
36
+ return true;
37
+ };
38
+ const createASN1State = (data) => ({ data, pos: 0 });
39
+ const parseLength = (state) => {
40
+ const first = state.data[state.pos++];
41
+ if (first & 0x80) {
42
+ const lengthOfLen = first & 0x7f;
43
+ let length = 0;
44
+ for (let i = 0; i < lengthOfLen; i++) {
45
+ length = (length << 8) | state.data[state.pos++];
46
+ }
47
+ return length;
48
+ }
49
+ return first;
50
+ };
51
+ const skipElement = (state, count = 1) => {
52
+ if (count <= 0)
53
+ return;
54
+ state.pos++;
55
+ const length = parseLength(state);
56
+ state.pos += length;
57
+ if (count > 1) {
58
+ skipElement(state, count - 1);
59
+ }
60
+ };
61
+ const expectTag = (state, expectedTag, errorMessage) => {
62
+ if (state.data[state.pos++] !== expectedTag) {
63
+ throw new Error(errorMessage);
64
+ }
65
+ };
66
+ const getSubarray = (state, length) => {
67
+ const result = state.data.subarray(state.pos, state.pos + length);
68
+ state.pos += length;
69
+ return result;
70
+ };
71
+ const parseAlgorithmOID = (state) => {
72
+ expectTag(state, 0x06, 'Expected algorithm OID');
73
+ const oidLen = parseLength(state);
74
+ return getSubarray(state, oidLen);
75
+ };
76
+ function parsePKCS8Header(state) {
77
+ expectTag(state, 0x30, 'Invalid PKCS#8 structure');
78
+ parseLength(state);
79
+ expectTag(state, 0x02, 'Expected version field');
80
+ const verLen = parseLength(state);
81
+ state.pos += verLen;
82
+ expectTag(state, 0x30, 'Expected algorithm identifier');
83
+ const algIdLen = parseLength(state);
84
+ const algIdStart = state.pos;
85
+ return { algIdStart, algIdLength: algIdLen };
86
+ }
87
+ function parseSPKIHeader(state) {
88
+ expectTag(state, 0x30, 'Invalid SPKI structure');
89
+ parseLength(state);
90
+ expectTag(state, 0x30, 'Expected algorithm identifier');
91
+ const algIdLen = parseLength(state);
92
+ const algIdStart = state.pos;
93
+ return { algIdStart, algIdLength: algIdLen };
94
+ }
95
+ const parseECAlgorithmIdentifier = (state) => {
96
+ const algOid = parseAlgorithmOID(state);
97
+ if (bytesEqual(algOid, [0x2b, 0x65, 0x6e])) {
98
+ return 'X25519';
99
+ }
100
+ if (!bytesEqual(algOid, [0x2a, 0x86, 0x48, 0xce, 0x3d, 0x02, 0x01])) {
101
+ throw new Error('Unsupported key algorithm');
102
+ }
103
+ expectTag(state, 0x06, 'Expected curve OID');
104
+ const curveOidLen = parseLength(state);
105
+ const curveOid = getSubarray(state, curveOidLen);
106
+ for (const { name, oid } of [
107
+ { name: 'P-256', oid: [0x2a, 0x86, 0x48, 0xce, 0x3d, 0x03, 0x01, 0x07] },
108
+ { name: 'P-384', oid: [0x2b, 0x81, 0x04, 0x00, 0x22] },
109
+ { name: 'P-521', oid: [0x2b, 0x81, 0x04, 0x00, 0x23] },
110
+ ]) {
111
+ if (bytesEqual(curveOid, oid)) {
112
+ return name;
113
+ }
114
+ }
115
+ throw new Error('Unsupported named curve');
116
+ };
117
+ const genericImport = async (keyFormat, keyData, alg, options) => {
118
+ let algorithm;
119
+ let keyUsages;
120
+ const isPublic = keyFormat === 'spki';
121
+ const getSigUsages = () => (isPublic ? ['verify'] : ['sign']);
122
+ const getEncUsages = () => isPublic ? ['encrypt', 'wrapKey'] : ['decrypt', 'unwrapKey'];
123
+ switch (alg) {
124
+ case 'PS256':
125
+ case 'PS384':
126
+ case 'PS512':
127
+ algorithm = { name: 'RSA-PSS', hash: `SHA-${alg.slice(-3)}` };
128
+ keyUsages = getSigUsages();
129
+ break;
130
+ case 'RS256':
131
+ case 'RS384':
132
+ case 'RS512':
133
+ algorithm = { name: 'RSASSA-PKCS1-v1_5', hash: `SHA-${alg.slice(-3)}` };
134
+ keyUsages = getSigUsages();
135
+ break;
136
+ case 'RSA-OAEP':
137
+ case 'RSA-OAEP-256':
138
+ case 'RSA-OAEP-384':
139
+ case 'RSA-OAEP-512':
140
+ algorithm = {
141
+ name: 'RSA-OAEP',
142
+ hash: `SHA-${parseInt(alg.slice(-3), 10) || 1}`,
143
+ };
144
+ keyUsages = getEncUsages();
145
+ break;
146
+ case 'ES256':
147
+ case 'ES384':
148
+ case 'ES512': {
149
+ const curveMap = { ES256: 'P-256', ES384: 'P-384', ES512: 'P-521' };
150
+ algorithm = { name: 'ECDSA', namedCurve: curveMap[alg] };
151
+ keyUsages = getSigUsages();
152
+ break;
153
+ }
154
+ case 'ECDH-ES':
155
+ case 'ECDH-ES+A128KW':
156
+ case 'ECDH-ES+A192KW':
157
+ case 'ECDH-ES+A256KW': {
158
+ try {
159
+ const namedCurve = options.getNamedCurve(keyData);
160
+ algorithm = namedCurve === 'X25519' ? { name: 'X25519' } : { name: 'ECDH', namedCurve };
161
+ }
162
+ catch (cause) {
163
+ throw new JOSENotSupported('Invalid or unsupported key format');
164
+ }
165
+ keyUsages = isPublic ? [] : ['deriveBits'];
166
+ break;
167
+ }
168
+ case 'Ed25519':
169
+ case 'EdDSA':
170
+ algorithm = { name: 'Ed25519' };
171
+ keyUsages = getSigUsages();
172
+ break;
173
+ case 'ML-DSA-44':
174
+ case 'ML-DSA-65':
175
+ case 'ML-DSA-87':
176
+ algorithm = { name: alg };
177
+ keyUsages = getSigUsages();
178
+ break;
179
+ default:
180
+ throw new JOSENotSupported('Invalid or unsupported "alg" (Algorithm) value');
181
+ }
182
+ return crypto.subtle.importKey(keyFormat, keyData, algorithm, options?.extractable ?? (isPublic ? true : false), keyUsages);
183
+ };
184
+ const processPEMData = (pem, pattern) => {
185
+ return decodeBase64(pem.replace(pattern, ''));
186
+ };
187
+ export const fromPKCS8 = (pem, alg, options) => {
188
+ const keyData = processPEMData(pem, /(?:-----(?:BEGIN|END) PRIVATE KEY-----|\s)/g);
189
+ let opts = options;
190
+ if (alg?.startsWith?.('ECDH-ES')) {
191
+ opts ||= {};
192
+ opts.getNamedCurve = (keyData) => {
193
+ const state = createASN1State(keyData);
194
+ parsePKCS8Header(state);
195
+ return parseECAlgorithmIdentifier(state);
196
+ };
197
+ }
198
+ return genericImport('pkcs8', keyData, alg, opts);
199
+ };
200
+ export const fromSPKI = (pem, alg, options) => {
201
+ const keyData = processPEMData(pem, /(?:-----(?:BEGIN|END) PUBLIC KEY-----|\s)/g);
202
+ let opts = options;
203
+ if (alg?.startsWith?.('ECDH-ES')) {
204
+ opts ||= {};
205
+ opts.getNamedCurve = (keyData) => {
206
+ const state = createASN1State(keyData);
207
+ parseSPKIHeader(state);
208
+ return parseECAlgorithmIdentifier(state);
209
+ };
210
+ }
211
+ return genericImport('spki', keyData, alg, opts);
212
+ };
213
+ function spkiFromX509(buf) {
214
+ const state = createASN1State(buf);
215
+ expectTag(state, 0x30, 'Invalid certificate structure');
216
+ parseLength(state);
217
+ expectTag(state, 0x30, 'Invalid tbsCertificate structure');
218
+ parseLength(state);
219
+ if (buf[state.pos] === 0xa0) {
220
+ skipElement(state, 6);
221
+ }
222
+ else {
223
+ skipElement(state, 5);
224
+ }
225
+ const spkiStart = state.pos;
226
+ expectTag(state, 0x30, 'Invalid SPKI structure');
227
+ const spkiContentLen = parseLength(state);
228
+ return buf.subarray(spkiStart, spkiStart + spkiContentLen + (state.pos - spkiStart));
229
+ }
230
+ function extractX509SPKI(x509) {
231
+ const derBytes = processPEMData(x509, /(?:-----(?:BEGIN|END) CERTIFICATE-----|\s)/g);
232
+ return spkiFromX509(derBytes);
233
+ }
234
+ export const fromX509 = (pem, alg, options) => {
235
+ let spki;
236
+ try {
237
+ spki = extractX509SPKI(pem);
238
+ }
239
+ catch (cause) {
240
+ throw new TypeError('Failed to parse the X.509 certificate', { cause });
241
+ }
242
+ return fromSPKI(formatPEM(encodeBase64(spki), 'PUBLIC KEY'), alg, options);
243
+ };
@@ -0,0 +1,22 @@
1
+ export function encodeBase64(input) {
2
+ if (Uint8Array.prototype.toBase64) {
3
+ return input.toBase64();
4
+ }
5
+ const CHUNK_SIZE = 0x8000;
6
+ const arr = [];
7
+ for (let i = 0; i < input.length; i += CHUNK_SIZE) {
8
+ arr.push(String.fromCharCode.apply(null, input.subarray(i, i + CHUNK_SIZE)));
9
+ }
10
+ return btoa(arr.join(''));
11
+ }
12
+ export function decodeBase64(encoded) {
13
+ if (Uint8Array.fromBase64) {
14
+ return Uint8Array.fromBase64(encoded);
15
+ }
16
+ const binary = atob(encoded);
17
+ const bytes = new Uint8Array(binary.length);
18
+ for (let i = 0; i < binary.length; i++) {
19
+ bytes[i] = binary.charCodeAt(i);
20
+ }
21
+ return bytes;
22
+ }
@@ -0,0 +1,43 @@
1
+ export const encoder = new TextEncoder();
2
+ export const decoder = new TextDecoder();
3
+ const MAX_INT32 = 2 ** 32;
4
+ export function concat(...buffers) {
5
+ const size = buffers.reduce((acc, { length }) => acc + length, 0);
6
+ const buf = new Uint8Array(size);
7
+ let i = 0;
8
+ for (const buffer of buffers) {
9
+ buf.set(buffer, i);
10
+ i += buffer.length;
11
+ }
12
+ return buf;
13
+ }
14
+ function writeUInt32BE(buf, value, offset) {
15
+ if (value < 0 || value >= MAX_INT32) {
16
+ throw new RangeError(`value must be >= 0 and <= ${MAX_INT32 - 1}. Received ${value}`);
17
+ }
18
+ buf.set([value >>> 24, value >>> 16, value >>> 8, value & 0xff], offset);
19
+ }
20
+ export function uint64be(value) {
21
+ const high = Math.floor(value / MAX_INT32);
22
+ const low = value % MAX_INT32;
23
+ const buf = new Uint8Array(8);
24
+ writeUInt32BE(buf, high, 0);
25
+ writeUInt32BE(buf, low, 4);
26
+ return buf;
27
+ }
28
+ export function uint32be(value) {
29
+ const buf = new Uint8Array(4);
30
+ writeUInt32BE(buf, value);
31
+ return buf;
32
+ }
33
+ export function encode(string) {
34
+ const bytes = new Uint8Array(string.length);
35
+ for (let i = 0; i < string.length; i++) {
36
+ const code = string.charCodeAt(i);
37
+ if (code > 127) {
38
+ throw new TypeError('non-ASCII string encountered in encode()');
39
+ }
40
+ bytes[i] = code;
41
+ }
42
+ return bytes;
43
+ }
@@ -0,0 +1,122 @@
1
+ import { withAlg as invalidKeyInput } from './invalid_key_input.js';
2
+ import { isKeyLike } from './is_key_like.js';
3
+ import * as jwk from './type_checks.js';
4
+ const tag = (key) => key?.[Symbol.toStringTag];
5
+ const jwkMatchesOp = (alg, key, usage) => {
6
+ if (key.use !== undefined) {
7
+ let expected;
8
+ switch (usage) {
9
+ case 'sign':
10
+ case 'verify':
11
+ expected = 'sig';
12
+ break;
13
+ case 'encrypt':
14
+ case 'decrypt':
15
+ expected = 'enc';
16
+ break;
17
+ }
18
+ if (key.use !== expected) {
19
+ throw new TypeError(`Invalid key for this operation, its "use" must be "${expected}" when present`);
20
+ }
21
+ }
22
+ if (key.alg !== undefined && key.alg !== alg) {
23
+ throw new TypeError(`Invalid key for this operation, its "alg" must be "${alg}" when present`);
24
+ }
25
+ if (Array.isArray(key.key_ops)) {
26
+ let expectedKeyOp;
27
+ switch (true) {
28
+ case usage === 'sign' || usage === 'verify':
29
+ case alg === 'dir':
30
+ case alg.includes('CBC-HS'):
31
+ expectedKeyOp = usage;
32
+ break;
33
+ case alg.startsWith('PBES2'):
34
+ expectedKeyOp = 'deriveBits';
35
+ break;
36
+ case /^A\d{3}(?:GCM)?(?:KW)?$/.test(alg):
37
+ if (!alg.includes('GCM') && alg.endsWith('KW')) {
38
+ expectedKeyOp = usage === 'encrypt' ? 'wrapKey' : 'unwrapKey';
39
+ }
40
+ else {
41
+ expectedKeyOp = usage;
42
+ }
43
+ break;
44
+ case usage === 'encrypt' && alg.startsWith('RSA'):
45
+ expectedKeyOp = 'wrapKey';
46
+ break;
47
+ case usage === 'decrypt':
48
+ expectedKeyOp = alg.startsWith('RSA') ? 'unwrapKey' : 'deriveBits';
49
+ break;
50
+ }
51
+ if (expectedKeyOp && key.key_ops?.includes?.(expectedKeyOp) === false) {
52
+ throw new TypeError(`Invalid key for this operation, its "key_ops" must include "${expectedKeyOp}" when present`);
53
+ }
54
+ }
55
+ return true;
56
+ };
57
+ const symmetricTypeCheck = (alg, key, usage) => {
58
+ if (key instanceof Uint8Array)
59
+ return;
60
+ if (jwk.isJWK(key)) {
61
+ if (jwk.isSecretJWK(key) && jwkMatchesOp(alg, key, usage))
62
+ return;
63
+ throw new TypeError(`JSON Web Key for symmetric algorithms must have JWK "kty" (Key Type) equal to "oct" and the JWK "k" (Key Value) present`);
64
+ }
65
+ if (!isKeyLike(key)) {
66
+ throw new TypeError(invalidKeyInput(alg, key, 'CryptoKey', 'KeyObject', 'JSON Web Key', 'Uint8Array'));
67
+ }
68
+ if (key.type !== 'secret') {
69
+ throw new TypeError(`${tag(key)} instances for symmetric algorithms must be of type "secret"`);
70
+ }
71
+ };
72
+ const asymmetricTypeCheck = (alg, key, usage) => {
73
+ if (jwk.isJWK(key)) {
74
+ switch (usage) {
75
+ case 'decrypt':
76
+ case 'sign':
77
+ if (jwk.isPrivateJWK(key) && jwkMatchesOp(alg, key, usage))
78
+ return;
79
+ throw new TypeError(`JSON Web Key for this operation must be a private JWK`);
80
+ case 'encrypt':
81
+ case 'verify':
82
+ if (jwk.isPublicJWK(key) && jwkMatchesOp(alg, key, usage))
83
+ return;
84
+ throw new TypeError(`JSON Web Key for this operation must be a public JWK`);
85
+ }
86
+ }
87
+ if (!isKeyLike(key)) {
88
+ throw new TypeError(invalidKeyInput(alg, key, 'CryptoKey', 'KeyObject', 'JSON Web Key'));
89
+ }
90
+ if (key.type === 'secret') {
91
+ throw new TypeError(`${tag(key)} instances for asymmetric algorithms must not be of type "secret"`);
92
+ }
93
+ if (key.type === 'public') {
94
+ switch (usage) {
95
+ case 'sign':
96
+ throw new TypeError(`${tag(key)} instances for asymmetric algorithm signing must be of type "private"`);
97
+ case 'decrypt':
98
+ throw new TypeError(`${tag(key)} instances for asymmetric algorithm decryption must be of type "private"`);
99
+ }
100
+ }
101
+ if (key.type === 'private') {
102
+ switch (usage) {
103
+ case 'verify':
104
+ throw new TypeError(`${tag(key)} instances for asymmetric algorithm verifying must be of type "public"`);
105
+ case 'encrypt':
106
+ throw new TypeError(`${tag(key)} instances for asymmetric algorithm encryption must be of type "public"`);
107
+ }
108
+ }
109
+ };
110
+ export function checkKeyType(alg, key, usage) {
111
+ switch (alg.substring(0, 2)) {
112
+ case 'A1':
113
+ case 'A2':
114
+ case 'di':
115
+ case 'HS':
116
+ case 'PB':
117
+ symmetricTypeCheck(alg, key, usage);
118
+ break;
119
+ default:
120
+ asymmetricTypeCheck(alg, key, usage);
121
+ }
122
+ }