@strapi/plugin-users-permissions 0.0.0-experimental.6340da17068c3bed7fb006e7bcc554c71129e282 → 0.0.0-experimental.63624e21eb5b0713345a0cf2f68f1c40eab427bc

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 (371) hide show
  1. package/.eslintrc.cjs +2 -0
  2. package/admin/src/pages/EmailTemplates/components/EmailForm.jsx +3 -1
  3. package/admin/src/pages/Roles/pages/EditPage.jsx +1 -1
  4. package/admin/src/pages/Roles/pages/ListPage/index.jsx +1 -1
  5. package/admin/src/translations/en.json +1 -0
  6. package/admin/src/translations/es.json +1 -1
  7. package/admin/src/translations/ko.json +2 -1
  8. package/admin/src/translations/sv.json +1 -1
  9. package/admin/src/translations/uk.json +1 -1
  10. package/dist/admin/pages/EmailTemplates/components/EmailForm.js +2 -1
  11. package/dist/admin/pages/EmailTemplates/components/EmailForm.js.map +1 -1
  12. package/dist/admin/pages/EmailTemplates/components/EmailForm.mjs +2 -1
  13. package/dist/admin/pages/EmailTemplates/components/EmailForm.mjs.map +1 -1
  14. package/dist/admin/pages/Roles/pages/EditPage.js +1 -1
  15. package/dist/admin/pages/Roles/pages/EditPage.js.map +1 -1
  16. package/dist/admin/pages/Roles/pages/EditPage.mjs +1 -1
  17. package/dist/admin/pages/Roles/pages/EditPage.mjs.map +1 -1
  18. package/dist/admin/pages/Roles/pages/ListPage/index.js +1 -1
  19. package/dist/admin/pages/Roles/pages/ListPage/index.js.map +1 -1
  20. package/dist/admin/pages/Roles/pages/ListPage/index.mjs +1 -1
  21. package/dist/admin/pages/Roles/pages/ListPage/index.mjs.map +1 -1
  22. package/dist/admin/translations/en.json.js +1 -0
  23. package/dist/admin/translations/en.json.js.map +1 -1
  24. package/dist/admin/translations/en.json.mjs +1 -0
  25. package/dist/admin/translations/en.json.mjs.map +1 -1
  26. package/dist/admin/translations/es.json.js +1 -1
  27. package/dist/admin/translations/es.json.mjs +1 -1
  28. package/dist/admin/translations/ko.json.js +2 -1
  29. package/dist/admin/translations/ko.json.js.map +1 -1
  30. package/dist/admin/translations/ko.json.mjs +2 -1
  31. package/dist/admin/translations/ko.json.mjs.map +1 -1
  32. package/dist/admin/translations/sv.json.js +1 -1
  33. package/dist/admin/translations/sv.json.mjs +1 -1
  34. package/dist/admin/translations/uk.json.js +1 -1
  35. package/dist/admin/translations/uk.json.mjs +1 -1
  36. package/dist/server/_virtual/_node_crypto.js +10 -0
  37. package/dist/server/_virtual/_node_crypto.js.map +1 -0
  38. package/dist/server/_virtual/_node_crypto.mjs +7 -0
  39. package/dist/server/_virtual/_node_crypto.mjs.map +1 -0
  40. package/dist/server/_virtual/_node_url.js +10 -0
  41. package/dist/server/_virtual/_node_url.js.map +1 -0
  42. package/dist/server/_virtual/_node_url.mjs +7 -0
  43. package/dist/server/_virtual/_node_url.mjs.map +1 -0
  44. package/dist/server/bootstrap/index.js.map +1 -1
  45. package/dist/server/bootstrap/index.mjs.map +1 -1
  46. package/dist/server/bootstrap/users-permissions-actions.js.map +1 -1
  47. package/dist/server/bootstrap/users-permissions-actions.mjs.map +1 -1
  48. package/dist/server/config.js.map +1 -1
  49. package/dist/server/config.mjs.map +1 -1
  50. package/dist/server/content-types/index.js.map +1 -1
  51. package/dist/server/content-types/index.mjs.map +1 -1
  52. package/dist/server/content-types/permission/index.js.map +1 -1
  53. package/dist/server/content-types/permission/index.mjs.map +1 -1
  54. package/dist/server/content-types/role/index.js.map +1 -1
  55. package/dist/server/content-types/role/index.mjs.map +1 -1
  56. package/dist/server/content-types/user/index.js.map +1 -1
  57. package/dist/server/content-types/user/index.mjs.map +1 -1
  58. package/dist/server/content-types/user/schema-config.js.map +1 -1
  59. package/dist/server/content-types/user/schema-config.mjs.map +1 -1
  60. package/dist/server/controllers/auth.js +38 -30
  61. package/dist/server/controllers/auth.js.map +1 -1
  62. package/dist/server/controllers/auth.mjs +38 -28
  63. package/dist/server/controllers/auth.mjs.map +1 -1
  64. package/dist/server/controllers/content-manager-user.js.map +1 -1
  65. package/dist/server/controllers/content-manager-user.mjs.map +1 -1
  66. package/dist/server/controllers/index.js.map +1 -1
  67. package/dist/server/controllers/index.mjs.map +1 -1
  68. package/dist/server/controllers/permissions.js.map +1 -1
  69. package/dist/server/controllers/permissions.mjs.map +1 -1
  70. package/dist/server/controllers/role.js.map +1 -1
  71. package/dist/server/controllers/role.mjs.map +1 -1
  72. package/dist/server/controllers/settings.js.map +1 -1
  73. package/dist/server/controllers/settings.mjs.map +1 -1
  74. package/dist/server/controllers/user.js.map +1 -1
  75. package/dist/server/controllers/user.mjs.map +1 -1
  76. package/dist/server/controllers/validation/auth.js +6 -6
  77. package/dist/server/controllers/validation/auth.js.map +1 -1
  78. package/dist/server/controllers/validation/auth.mjs +6 -6
  79. package/dist/server/controllers/validation/auth.mjs.map +1 -1
  80. package/dist/server/controllers/validation/email-template.js +1 -4
  81. package/dist/server/controllers/validation/email-template.js.map +1 -1
  82. package/dist/server/controllers/validation/email-template.mjs +1 -3
  83. package/dist/server/controllers/validation/email-template.mjs.map +1 -1
  84. package/dist/server/controllers/validation/user.js.map +1 -1
  85. package/dist/server/controllers/validation/user.mjs.map +1 -1
  86. package/dist/server/graphql/index.js.map +1 -1
  87. package/dist/server/graphql/index.mjs.map +1 -1
  88. package/dist/server/graphql/mutations/auth/change-password.js +7 -4
  89. package/dist/server/graphql/mutations/auth/change-password.js.map +1 -1
  90. package/dist/server/graphql/mutations/auth/change-password.mjs +7 -4
  91. package/dist/server/graphql/mutations/auth/change-password.mjs.map +1 -1
  92. package/dist/server/graphql/mutations/auth/email-confirmation.js +1 -1
  93. package/dist/server/graphql/mutations/auth/email-confirmation.js.map +1 -1
  94. package/dist/server/graphql/mutations/auth/email-confirmation.mjs +1 -1
  95. package/dist/server/graphql/mutations/auth/email-confirmation.mjs.map +1 -1
  96. package/dist/server/graphql/mutations/auth/forgot-password.js +7 -4
  97. package/dist/server/graphql/mutations/auth/forgot-password.js.map +1 -1
  98. package/dist/server/graphql/mutations/auth/forgot-password.mjs +7 -4
  99. package/dist/server/graphql/mutations/auth/forgot-password.mjs.map +1 -1
  100. package/dist/server/graphql/mutations/auth/login.js +10 -7
  101. package/dist/server/graphql/mutations/auth/login.js.map +1 -1
  102. package/dist/server/graphql/mutations/auth/login.mjs +10 -7
  103. package/dist/server/graphql/mutations/auth/login.mjs.map +1 -1
  104. package/dist/server/graphql/mutations/auth/rate-limit.js +63 -0
  105. package/dist/server/graphql/mutations/auth/rate-limit.js.map +1 -0
  106. package/dist/server/graphql/mutations/auth/rate-limit.mjs +61 -0
  107. package/dist/server/graphql/mutations/auth/rate-limit.mjs.map +1 -0
  108. package/dist/server/graphql/mutations/auth/register.js +7 -4
  109. package/dist/server/graphql/mutations/auth/register.js.map +1 -1
  110. package/dist/server/graphql/mutations/auth/register.mjs +7 -4
  111. package/dist/server/graphql/mutations/auth/register.mjs.map +1 -1
  112. package/dist/server/graphql/mutations/auth/reset-password.js +7 -4
  113. package/dist/server/graphql/mutations/auth/reset-password.js.map +1 -1
  114. package/dist/server/graphql/mutations/auth/reset-password.mjs +7 -4
  115. package/dist/server/graphql/mutations/auth/reset-password.mjs.map +1 -1
  116. package/dist/server/graphql/mutations/crud/role/create-role.js +1 -1
  117. package/dist/server/graphql/mutations/crud/role/create-role.js.map +1 -1
  118. package/dist/server/graphql/mutations/crud/role/create-role.mjs +1 -1
  119. package/dist/server/graphql/mutations/crud/role/create-role.mjs.map +1 -1
  120. package/dist/server/graphql/mutations/crud/role/delete-role.js.map +1 -1
  121. package/dist/server/graphql/mutations/crud/role/delete-role.mjs.map +1 -1
  122. package/dist/server/graphql/mutations/crud/role/update-role.js.map +1 -1
  123. package/dist/server/graphql/mutations/crud/role/update-role.mjs.map +1 -1
  124. package/dist/server/graphql/mutations/crud/user/create-user.js +1 -1
  125. package/dist/server/graphql/mutations/crud/user/create-user.js.map +1 -1
  126. package/dist/server/graphql/mutations/crud/user/create-user.mjs +1 -1
  127. package/dist/server/graphql/mutations/crud/user/create-user.mjs.map +1 -1
  128. package/dist/server/graphql/mutations/crud/user/delete-user.js.map +1 -1
  129. package/dist/server/graphql/mutations/crud/user/delete-user.mjs.map +1 -1
  130. package/dist/server/graphql/mutations/crud/user/update-user.js +1 -1
  131. package/dist/server/graphql/mutations/crud/user/update-user.js.map +1 -1
  132. package/dist/server/graphql/mutations/crud/user/update-user.mjs +1 -1
  133. package/dist/server/graphql/mutations/crud/user/update-user.mjs.map +1 -1
  134. package/dist/server/graphql/mutations/index.js.map +1 -1
  135. package/dist/server/graphql/mutations/index.mjs.map +1 -1
  136. package/dist/server/graphql/queries/index.js.map +1 -1
  137. package/dist/server/graphql/queries/index.mjs.map +1 -1
  138. package/dist/server/graphql/queries/me.js.map +1 -1
  139. package/dist/server/graphql/queries/me.mjs.map +1 -1
  140. package/dist/server/graphql/resolvers-configs.js.map +1 -1
  141. package/dist/server/graphql/resolvers-configs.mjs.map +1 -1
  142. package/dist/server/graphql/types/create-role-payload.js.map +1 -1
  143. package/dist/server/graphql/types/create-role-payload.mjs.map +1 -1
  144. package/dist/server/graphql/types/delete-role-payload.js.map +1 -1
  145. package/dist/server/graphql/types/delete-role-payload.mjs.map +1 -1
  146. package/dist/server/graphql/types/index.js.map +1 -1
  147. package/dist/server/graphql/types/index.mjs.map +1 -1
  148. package/dist/server/graphql/types/login-input.js.map +1 -1
  149. package/dist/server/graphql/types/login-input.mjs.map +1 -1
  150. package/dist/server/graphql/types/login-payload.js.map +1 -1
  151. package/dist/server/graphql/types/login-payload.mjs.map +1 -1
  152. package/dist/server/graphql/types/me-role.js.map +1 -1
  153. package/dist/server/graphql/types/me-role.mjs.map +1 -1
  154. package/dist/server/graphql/types/me.js.map +1 -1
  155. package/dist/server/graphql/types/me.mjs.map +1 -1
  156. package/dist/server/graphql/types/password-payload.js.map +1 -1
  157. package/dist/server/graphql/types/password-payload.mjs.map +1 -1
  158. package/dist/server/graphql/types/register-input.js.map +1 -1
  159. package/dist/server/graphql/types/register-input.mjs.map +1 -1
  160. package/dist/server/graphql/types/update-role-payload.js.map +1 -1
  161. package/dist/server/graphql/types/update-role-payload.mjs.map +1 -1
  162. package/dist/server/graphql/types/user-input.js.map +1 -1
  163. package/dist/server/graphql/types/user-input.mjs.map +1 -1
  164. package/dist/server/graphql/utils.js +4 -4
  165. package/dist/server/graphql/utils.js.map +1 -1
  166. package/dist/server/graphql/utils.mjs +4 -4
  167. package/dist/server/graphql/utils.mjs.map +1 -1
  168. package/dist/server/index.js +2 -2
  169. package/dist/server/index.js.map +1 -1
  170. package/dist/server/index.mjs +3 -3
  171. package/dist/server/index.mjs.map +1 -1
  172. package/dist/server/index2.js +8 -8
  173. package/dist/server/index2.js.map +1 -1
  174. package/dist/server/index2.mjs +8 -8
  175. package/dist/server/index2.mjs.map +1 -1
  176. package/dist/server/middlewares/index.js.map +1 -1
  177. package/dist/server/middlewares/index.mjs.map +1 -1
  178. package/dist/server/middlewares/rateLimit.js +5 -5
  179. package/dist/server/middlewares/rateLimit.js.map +1 -1
  180. package/dist/server/middlewares/rateLimit.mjs +5 -5
  181. package/dist/server/middlewares/rateLimit.mjs.map +1 -1
  182. package/dist/server/register.js.map +1 -1
  183. package/dist/server/register.mjs.map +1 -1
  184. package/dist/server/routes/admin/index.js.map +1 -1
  185. package/dist/server/routes/admin/index.mjs.map +1 -1
  186. package/dist/server/routes/admin/permissions.js.map +1 -1
  187. package/dist/server/routes/admin/permissions.mjs.map +1 -1
  188. package/dist/server/routes/admin/role.js.map +1 -1
  189. package/dist/server/routes/admin/role.mjs.map +1 -1
  190. package/dist/server/routes/admin/settings.js.map +1 -1
  191. package/dist/server/routes/admin/settings.mjs.map +1 -1
  192. package/dist/server/routes/content-api/auth.js.map +1 -1
  193. package/dist/server/routes/content-api/auth.mjs.map +1 -1
  194. package/dist/server/routes/content-api/index.js.map +1 -1
  195. package/dist/server/routes/content-api/index.mjs.map +1 -1
  196. package/dist/server/routes/content-api/permissions.js.map +1 -1
  197. package/dist/server/routes/content-api/permissions.mjs.map +1 -1
  198. package/dist/server/routes/content-api/role.js.map +1 -1
  199. package/dist/server/routes/content-api/role.mjs.map +1 -1
  200. package/dist/server/routes/content-api/user.js.map +1 -1
  201. package/dist/server/routes/content-api/user.mjs.map +1 -1
  202. package/dist/server/routes/content-api/validation.js.map +1 -1
  203. package/dist/server/routes/content-api/validation.mjs.map +1 -1
  204. package/dist/server/routes/index.js.map +1 -1
  205. package/dist/server/routes/index.mjs.map +1 -1
  206. package/dist/server/services/constants.js.map +1 -1
  207. package/dist/server/services/constants.mjs.map +1 -1
  208. package/dist/server/services/index.js.map +1 -1
  209. package/dist/server/services/index.mjs.map +1 -1
  210. package/dist/server/services/jwt.js.map +1 -1
  211. package/dist/server/services/jwt.mjs.map +1 -1
  212. package/dist/server/services/permission.js.map +1 -1
  213. package/dist/server/services/permission.mjs.map +1 -1
  214. package/dist/server/services/providers-registry.js +188 -248
  215. package/dist/server/services/providers-registry.js.map +1 -1
  216. package/dist/server/services/providers-registry.mjs +188 -245
  217. package/dist/server/services/providers-registry.mjs.map +1 -1
  218. package/dist/server/services/providers.js +15 -11
  219. package/dist/server/services/providers.js.map +1 -1
  220. package/dist/server/services/providers.mjs +14 -10
  221. package/dist/server/services/providers.mjs.map +1 -1
  222. package/dist/server/services/role.js +2 -2
  223. package/dist/server/services/role.js.map +1 -1
  224. package/dist/server/services/role.mjs +2 -2
  225. package/dist/server/services/role.mjs.map +1 -1
  226. package/dist/server/services/user.js +14 -14
  227. package/dist/server/services/user.js.map +1 -1
  228. package/dist/server/services/user.mjs +13 -13
  229. package/dist/server/services/user.mjs.map +1 -1
  230. package/dist/server/services/users-permissions.js +17 -20
  231. package/dist/server/services/users-permissions.js.map +1 -1
  232. package/dist/server/services/users-permissions.mjs +16 -18
  233. package/dist/server/services/users-permissions.mjs.map +1 -1
  234. package/dist/server/strategies/users-permissions.js +9 -8
  235. package/dist/server/strategies/users-permissions.js.map +1 -1
  236. package/dist/server/strategies/users-permissions.mjs +9 -8
  237. package/dist/server/strategies/users-permissions.mjs.map +1 -1
  238. package/dist/server/utils/index.js.map +1 -1
  239. package/dist/server/utils/index.mjs.map +1 -1
  240. package/dist/server/utils/oauth-connect/index.js +241 -0
  241. package/dist/server/utils/oauth-connect/index.js.map +1 -0
  242. package/dist/server/utils/oauth-connect/index.mjs +235 -0
  243. package/dist/server/utils/oauth-connect/index.mjs.map +1 -0
  244. package/dist/server/utils/oauth-connect/oauth1.js +138 -0
  245. package/dist/server/utils/oauth-connect/oauth1.js.map +1 -0
  246. package/dist/server/utils/oauth-connect/oauth1.mjs +136 -0
  247. package/dist/server/utils/oauth-connect/oauth1.mjs.map +1 -0
  248. package/dist/server/utils/oauth-connect/oauth2.js +117 -0
  249. package/dist/server/utils/oauth-connect/oauth2.js.map +1 -0
  250. package/dist/server/utils/oauth-connect/oauth2.mjs +115 -0
  251. package/dist/server/utils/oauth-connect/oauth2.mjs.map +1 -0
  252. package/dist/server/utils/oauth-connect/providers.js +109 -0
  253. package/dist/server/utils/oauth-connect/providers.js.map +1 -0
  254. package/dist/server/utils/oauth-connect/providers.mjs +107 -0
  255. package/dist/server/utils/oauth-connect/providers.mjs.map +1 -0
  256. package/dist/server/utils/provider-http.js +52 -0
  257. package/dist/server/utils/provider-http.js.map +1 -0
  258. package/dist/server/utils/provider-http.mjs +50 -0
  259. package/dist/server/utils/provider-http.mjs.map +1 -0
  260. package/dist/server/utils/refresh-cookie-options.js.map +1 -1
  261. package/dist/server/utils/refresh-cookie-options.mjs.map +1 -1
  262. package/dist/server/utils/sanitize/index.js.map +1 -1
  263. package/dist/server/utils/sanitize/index.mjs.map +1 -1
  264. package/dist/server/utils/sanitize/sanitizers.js +1 -1
  265. package/dist/server/utils/sanitize/sanitizers.js.map +1 -1
  266. package/dist/server/utils/sanitize/sanitizers.mjs +1 -1
  267. package/dist/server/utils/sanitize/sanitizers.mjs.map +1 -1
  268. package/dist/server/utils/sanitize/visitors/index.js.map +1 -1
  269. package/dist/server/utils/sanitize/visitors/index.mjs.map +1 -1
  270. package/dist/server/utils/sanitize/visitors/remove-user-relation-from-role-entities.js.map +1 -1
  271. package/dist/server/utils/sanitize/visitors/remove-user-relation-from-role-entities.mjs.map +1 -1
  272. package/dist/server/utils/trim-grant-session-response.js +67 -0
  273. package/dist/server/utils/trim-grant-session-response.js.map +1 -0
  274. package/dist/server/utils/trim-grant-session-response.mjs +65 -0
  275. package/dist/server/utils/trim-grant-session-response.mjs.map +1 -0
  276. package/dist/server/utils/verify-jwt-with-jwks.js +60 -0
  277. package/dist/server/utils/verify-jwt-with-jwks.js.map +1 -0
  278. package/dist/server/utils/verify-jwt-with-jwks.mjs +54 -0
  279. package/dist/server/utils/verify-jwt-with-jwks.mjs.map +1 -0
  280. package/jsconfig.json +7 -0
  281. package/package.json +28 -18
  282. package/rollup.config.mjs +2 -2
  283. package/server/{controllers → src/controllers}/auth.js +36 -29
  284. package/server/{controllers → src/controllers}/validation/auth.js +6 -6
  285. package/server/{controllers → src/controllers}/validation/email-template.js +1 -2
  286. package/server/{graphql → src/graphql}/mutations/auth/change-password.js +6 -6
  287. package/server/{graphql → src/graphql}/mutations/auth/email-confirmation.js +1 -1
  288. package/server/{graphql → src/graphql}/mutations/auth/forgot-password.js +6 -6
  289. package/server/{graphql → src/graphql}/mutations/auth/login.js +11 -7
  290. package/server/src/graphql/mutations/auth/rate-limit.js +62 -0
  291. package/server/{graphql → src/graphql}/mutations/auth/register.js +6 -6
  292. package/server/{graphql → src/graphql}/mutations/auth/reset-password.js +6 -6
  293. package/server/{graphql → src/graphql}/mutations/crud/role/create-role.js +1 -1
  294. package/server/{graphql → src/graphql}/mutations/crud/user/create-user.js +1 -1
  295. package/server/{graphql → src/graphql}/mutations/crud/user/update-user.js +1 -1
  296. package/server/{graphql → src/graphql}/utils.js +3 -3
  297. package/server/{middlewares → src/middlewares}/rateLimit.js +4 -4
  298. package/server/src/services/providers-registry.js +487 -0
  299. package/server/{services → src/services}/providers.js +9 -7
  300. package/server/{services → src/services}/role.js +2 -2
  301. package/server/{services → src/services}/user.js +16 -6
  302. package/server/{services → src/services}/users-permissions.js +14 -16
  303. package/server/{strategies → src/strategies}/users-permissions.js +14 -10
  304. package/server/src/utils/oauth-connect/index.js +262 -0
  305. package/server/src/utils/oauth-connect/oauth1.js +169 -0
  306. package/server/src/utils/oauth-connect/oauth2.js +123 -0
  307. package/server/src/utils/oauth-connect/providers.js +100 -0
  308. package/server/src/utils/provider-http.js +49 -0
  309. package/server/{utils → src/utils}/sanitize/sanitizers.js +1 -1
  310. package/server/src/utils/trim-grant-session-response.js +70 -0
  311. package/server/src/utils/verify-jwt-with-jwks.js +43 -0
  312. package/types/strapi-server.d.ts +65 -0
  313. package/server/services/providers-registry.js +0 -567
  314. package/server/utils/index.d.ts +0 -23
  315. /package/server/{bootstrap → src/bootstrap}/index.js +0 -0
  316. /package/server/{bootstrap → src/bootstrap}/users-permissions-actions.js +0 -0
  317. /package/server/{config.js → src/config.js} +0 -0
  318. /package/server/{content-types → src/content-types}/index.js +0 -0
  319. /package/server/{content-types → src/content-types}/permission/index.js +0 -0
  320. /package/server/{content-types → src/content-types}/role/index.js +0 -0
  321. /package/server/{content-types → src/content-types}/user/index.js +0 -0
  322. /package/server/{content-types → src/content-types}/user/schema-config.js +0 -0
  323. /package/server/{controllers → src/controllers}/content-manager-user.js +0 -0
  324. /package/server/{controllers → src/controllers}/index.js +0 -0
  325. /package/server/{controllers → src/controllers}/permissions.js +0 -0
  326. /package/server/{controllers → src/controllers}/role.js +0 -0
  327. /package/server/{controllers → src/controllers}/settings.js +0 -0
  328. /package/server/{controllers → src/controllers}/user.js +0 -0
  329. /package/server/{controllers → src/controllers}/validation/user.js +0 -0
  330. /package/server/{graphql → src/graphql}/index.js +0 -0
  331. /package/server/{graphql → src/graphql}/mutations/crud/role/delete-role.js +0 -0
  332. /package/server/{graphql → src/graphql}/mutations/crud/role/update-role.js +0 -0
  333. /package/server/{graphql → src/graphql}/mutations/crud/user/delete-user.js +0 -0
  334. /package/server/{graphql → src/graphql}/mutations/index.js +0 -0
  335. /package/server/{graphql → src/graphql}/queries/index.js +0 -0
  336. /package/server/{graphql → src/graphql}/queries/me.js +0 -0
  337. /package/server/{graphql → src/graphql}/resolvers-configs.js +0 -0
  338. /package/server/{graphql → src/graphql}/types/create-role-payload.js +0 -0
  339. /package/server/{graphql → src/graphql}/types/delete-role-payload.js +0 -0
  340. /package/server/{graphql → src/graphql}/types/index.js +0 -0
  341. /package/server/{graphql → src/graphql}/types/login-input.js +0 -0
  342. /package/server/{graphql → src/graphql}/types/login-payload.js +0 -0
  343. /package/server/{graphql → src/graphql}/types/me-role.js +0 -0
  344. /package/server/{graphql → src/graphql}/types/me.js +0 -0
  345. /package/server/{graphql → src/graphql}/types/password-payload.js +0 -0
  346. /package/server/{graphql → src/graphql}/types/register-input.js +0 -0
  347. /package/server/{graphql → src/graphql}/types/update-role-payload.js +0 -0
  348. /package/server/{graphql → src/graphql}/types/user-input.js +0 -0
  349. /package/server/{index.js → src/index.js} +0 -0
  350. /package/server/{middlewares → src/middlewares}/index.js +0 -0
  351. /package/server/{register.js → src/register.js} +0 -0
  352. /package/server/{routes → src/routes}/admin/index.js +0 -0
  353. /package/server/{routes → src/routes}/admin/permissions.js +0 -0
  354. /package/server/{routes → src/routes}/admin/role.js +0 -0
  355. /package/server/{routes → src/routes}/admin/settings.js +0 -0
  356. /package/server/{routes → src/routes}/content-api/auth.js +0 -0
  357. /package/server/{routes → src/routes}/content-api/index.js +0 -0
  358. /package/server/{routes → src/routes}/content-api/permissions.js +0 -0
  359. /package/server/{routes → src/routes}/content-api/role.js +0 -0
  360. /package/server/{routes → src/routes}/content-api/user.js +0 -0
  361. /package/server/{routes → src/routes}/content-api/validation.js +0 -0
  362. /package/server/{routes → src/routes}/index.js +0 -0
  363. /package/server/{services → src/services}/constants.js +0 -0
  364. /package/server/{services → src/services}/index.js +0 -0
  365. /package/server/{services → src/services}/jwt.js +0 -0
  366. /package/server/{services → src/services}/permission.js +0 -0
  367. /package/server/{utils → src/utils}/index.js +0 -0
  368. /package/server/{utils → src/utils}/refresh-cookie-options.js +0 -0
  369. /package/server/{utils → src/utils}/sanitize/index.js +0 -0
  370. /package/server/{utils → src/utils}/sanitize/visitors/index.js +0 -0
  371. /package/server/{utils → src/utils}/sanitize/visitors/remove-user-relation-from-role-entities.js +0 -0
@@ -0,0 +1,235 @@
1
+ import require$$1 from '@strapi/utils';
2
+ import { __require as requireProviders } from './providers.mjs';
3
+ import { __require as requireOauth1 } from './oauth1.mjs';
4
+ import { __require as requireOauth2 } from './oauth2.mjs';
5
+ import { __require as requireTrimGrantSessionResponse } from '../trim-grant-session-response.mjs';
6
+ import { __require as requireUtils } from '../index.mjs';
7
+
8
+ var oauthConnect;
9
+ var hasRequiredOauthConnect;
10
+ function requireOauthConnect() {
11
+ if (hasRequiredOauthConnect) return oauthConnect;
12
+ hasRequiredOauthConnect = 1;
13
+ const { errors } = require$$1;
14
+ const builtinProviderEndpoints = requireProviders();
15
+ const oauth1 = requireOauth1();
16
+ const oauth2 = requireOauth2();
17
+ const { trimGrantSessionResponse } = requireTrimGrantSessionResponse();
18
+ const CONNECT_PREFIX = '/connect';
19
+ const parseConnectPath = (requestPath, apiPrefix)=>{
20
+ const prefix = `${apiPrefix}${CONNECT_PREFIX}/`;
21
+ if (!requestPath.startsWith(prefix)) {
22
+ return null;
23
+ }
24
+ const remainder = requestPath.slice(prefix.length);
25
+ const [provider, segment] = remainder.split('/').filter(Boolean);
26
+ if (!provider) {
27
+ return null;
28
+ }
29
+ return {
30
+ provider,
31
+ isCallback: segment === 'callback'
32
+ };
33
+ };
34
+ /**
35
+ * Resolve OAuth endpoint config from built-ins, falling back to store-defined
36
+ * endpoints so custom providers registered via providers-registry still work.
37
+ */ const buildProviderConfig = (providerName, storedConfig, redirectUri)=>{
38
+ const defaults = builtinProviderEndpoints[providerName];
39
+ const endpoints = defaults || {
40
+ oauth: storedConfig.oauth,
41
+ authorize_url: storedConfig.authorize_url,
42
+ access_url: storedConfig.access_url,
43
+ request_url: storedConfig.request_url,
44
+ scope_delimiter: storedConfig.scope_delimiter,
45
+ token_endpoint_auth_method: storedConfig.token_endpoint_auth_method
46
+ };
47
+ if (endpoints.oauth === 1) {
48
+ if (!endpoints.request_url || !endpoints.authorize_url || !endpoints.access_url) {
49
+ return null;
50
+ }
51
+ } else if (!endpoints.authorize_url || !endpoints.access_url) {
52
+ return null;
53
+ }
54
+ return {
55
+ name: providerName,
56
+ ...endpoints,
57
+ key: storedConfig.key,
58
+ secret: storedConfig.secret,
59
+ scope: storedConfig.scope,
60
+ subdomain: storedConfig.subdomain,
61
+ callback: storedConfig.callback,
62
+ redirect_uri: redirectUri
63
+ };
64
+ };
65
+ const redirectWithPayload = (ctx, callbackUrl, payload)=>{
66
+ const url = new URL(callbackUrl);
67
+ const params = new URLSearchParams();
68
+ Object.entries(payload).forEach(([key, value])=>{
69
+ if (key === 'raw') {
70
+ Object.entries(value).forEach(([rawKey, rawValue])=>{
71
+ params.set(`raw[${rawKey}]`, String(rawValue));
72
+ });
73
+ return;
74
+ }
75
+ if (value !== undefined && value !== null) {
76
+ params.set(key, String(value));
77
+ }
78
+ });
79
+ url.search = params.toString();
80
+ ctx.redirect(url.toString());
81
+ };
82
+ const preserveGrantDynamic = (ctx)=>{
83
+ const dynamic = ctx.session.grant?.dynamic;
84
+ return dynamic ? {
85
+ dynamic
86
+ } : {};
87
+ };
88
+ const redirectWithSessionResponse = (ctx, callbackUrl, provider, tokenResponse)=>{
89
+ const grantResponse = oauth2.tokensToQueryPayload(provider, tokenResponse);
90
+ ctx.session.grant = {
91
+ response: trimGrantSessionResponse(grantResponse, provider.name)
92
+ };
93
+ return redirectWithPayload(ctx, callbackUrl, {});
94
+ };
95
+ const startOAuth1Flow = async (ctx, provider, parsed, redirectUri)=>{
96
+ const requestToken = await oauth1.requestToken({
97
+ requestUrl: provider.request_url,
98
+ redirectUri,
99
+ consumerKey: provider.key,
100
+ clientCredential: provider.secret
101
+ });
102
+ ctx.session.grant = {
103
+ ...preserveGrantDynamic(ctx),
104
+ provider: parsed.provider,
105
+ request: requestToken
106
+ };
107
+ const authorizeUrl = `${provider.authorize_url}?oauth_token=${encodeURIComponent(requestToken.oauth_token)}`;
108
+ return ctx.redirect(authorizeUrl);
109
+ };
110
+ const startOAuth2Flow = (ctx, provider, parsed, redirectUri)=>{
111
+ const state = oauth2.generateState();
112
+ ctx.session.grant = {
113
+ ...preserveGrantDynamic(ctx),
114
+ provider: parsed.provider,
115
+ state
116
+ };
117
+ let authorizeUrl = oauth2.buildAuthorizeUrl(provider, {
118
+ key: provider.key,
119
+ redirectUri,
120
+ scope: provider.scope,
121
+ subdomain: provider.subdomain
122
+ });
123
+ authorizeUrl += `&state=${encodeURIComponent(state)}`;
124
+ return ctx.redirect(authorizeUrl);
125
+ };
126
+ const handleOAuth1Callback = async (ctx, provider, callbackUrl)=>{
127
+ const session = ctx.session.grant || {};
128
+ const { oauth_token: oauthToken, oauth_verifier: oauthVerifier } = ctx.query;
129
+ const requestToken = session.request;
130
+ if (!requestToken?.oauth_token || oauthToken !== requestToken.oauth_token) {
131
+ throw new Error('OAuth1 token mismatch');
132
+ }
133
+ const tokenResponse = await oauth1.accessToken({
134
+ accessUrl: provider.access_url,
135
+ consumerKey: provider.key,
136
+ clientCredential: provider.secret,
137
+ oauthToken,
138
+ oauthVerifier,
139
+ oauthTokenCredential: requestToken.oauth_token_secret
140
+ });
141
+ return redirectWithSessionResponse(ctx, callbackUrl, provider, tokenResponse);
142
+ };
143
+ const handleOAuth2Callback = async (ctx, provider, callbackUrl, redirectUri)=>{
144
+ const session = ctx.session.grant || {};
145
+ const { code, state: queryState, error, error_description: errorDescription } = ctx.query;
146
+ if (error) {
147
+ ctx.session.grant = {};
148
+ return redirectWithPayload(ctx, callbackUrl, {
149
+ error,
150
+ error_description: errorDescription
151
+ });
152
+ }
153
+ if (!code) {
154
+ throw new Error('OAuth2 missing code parameter');
155
+ }
156
+ // Reject when session state is missing (not only on mismatch) to close login-CSRF.
157
+ if (!session.state || queryState !== session.state) {
158
+ throw new Error('OAuth2 state mismatch');
159
+ }
160
+ const tokenResponse = await oauth2.exchangeAuthorizationCode(provider, {
161
+ key: provider.key,
162
+ secret: provider.secret,
163
+ redirectUri,
164
+ code,
165
+ subdomain: provider.subdomain
166
+ });
167
+ return redirectWithSessionResponse(ctx, callbackUrl, provider, tokenResponse);
168
+ };
169
+ const createOAuthConnectMiddleware = ()=>{
170
+ return async (ctx, next)=>{
171
+ const apiPrefix = strapi.config.get('api.rest.prefix');
172
+ const [requestPath] = ctx.request.url.split('?');
173
+ const parsed = parseConnectPath(requestPath, apiPrefix);
174
+ if (!parsed) {
175
+ return next();
176
+ }
177
+ if (!ctx.session) {
178
+ ctx.throw(400, 'OAuth connect requires session middleware');
179
+ }
180
+ const storedProviders = await strapi.store({
181
+ type: 'plugin',
182
+ name: 'users-permissions',
183
+ key: 'grant'
184
+ }).get();
185
+ const storedConfig = storedProviders?.[parsed.provider];
186
+ if (!storedConfig?.enabled) {
187
+ throw new errors.ApplicationError('This provider is disabled');
188
+ }
189
+ const { getService } = requireUtils();
190
+ const redirectUri = getService('providers').buildRedirectUri(parsed.provider);
191
+ const callbackOverride = ctx.state.oauthConnect?.callback ?? ctx.session.grant?.dynamic?.callback;
192
+ const effectiveConfig = callbackOverride ? {
193
+ ...storedConfig,
194
+ callback: callbackOverride
195
+ } : storedConfig;
196
+ const provider = buildProviderConfig(parsed.provider, effectiveConfig, redirectUri);
197
+ if (!provider) {
198
+ throw new errors.ApplicationError('Unknown OAuth provider');
199
+ }
200
+ ctx.session.grant = ctx.session.grant || {};
201
+ if (!parsed.isCallback) {
202
+ if (provider.oauth === 1) {
203
+ return startOAuth1Flow(ctx, provider, parsed, redirectUri);
204
+ }
205
+ return startOAuth2Flow(ctx, provider, parsed, redirectUri);
206
+ }
207
+ const callbackUrl = effectiveConfig.callback;
208
+ if (!callbackUrl) {
209
+ throw new errors.ApplicationError('Provider callback URL is not configured');
210
+ }
211
+ try {
212
+ if (provider.oauth === 1) {
213
+ return await handleOAuth1Callback(ctx, provider, callbackUrl);
214
+ }
215
+ return await handleOAuth2Callback(ctx, provider, callbackUrl, redirectUri);
216
+ } catch (err) {
217
+ ctx.session.grant = {};
218
+ return redirectWithPayload(ctx, callbackUrl, {
219
+ error: 'oauth_error',
220
+ error_description: err.message
221
+ });
222
+ }
223
+ };
224
+ };
225
+ oauthConnect = {
226
+ createOAuthConnectMiddleware,
227
+ parseConnectPath,
228
+ buildProviderConfig,
229
+ redirectWithPayload
230
+ };
231
+ return oauthConnect;
232
+ }
233
+
234
+ export { requireOauthConnect as __require };
235
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","sources":["../../../../server/src/utils/oauth-connect/index.js"],"sourcesContent":["'use strict';\n\nconst { errors } = require('@strapi/utils');\n\nconst builtinProviderEndpoints = require('./providers');\nconst oauth1 = require('./oauth1');\nconst oauth2 = require('./oauth2');\nconst { trimGrantSessionResponse } = require('../trim-grant-session-response');\n\nconst CONNECT_PREFIX = '/connect';\n\nconst parseConnectPath = (requestPath, apiPrefix) => {\n const prefix = `${apiPrefix}${CONNECT_PREFIX}/`;\n if (!requestPath.startsWith(prefix)) {\n return null;\n }\n\n const remainder = requestPath.slice(prefix.length);\n const [provider, segment] = remainder.split('/').filter(Boolean);\n\n if (!provider) {\n return null;\n }\n\n return {\n provider,\n isCallback: segment === 'callback',\n };\n};\n\n/**\n * Resolve OAuth endpoint config from built-ins, falling back to store-defined\n * endpoints so custom providers registered via providers-registry still work.\n */\nconst buildProviderConfig = (providerName, storedConfig, redirectUri) => {\n const defaults = builtinProviderEndpoints[providerName];\n const endpoints = defaults || {\n oauth: storedConfig.oauth,\n authorize_url: storedConfig.authorize_url,\n access_url: storedConfig.access_url,\n request_url: storedConfig.request_url,\n scope_delimiter: storedConfig.scope_delimiter,\n token_endpoint_auth_method: storedConfig.token_endpoint_auth_method,\n };\n\n if (endpoints.oauth === 1) {\n if (!endpoints.request_url || !endpoints.authorize_url || !endpoints.access_url) {\n return null;\n }\n } else if (!endpoints.authorize_url || !endpoints.access_url) {\n return null;\n }\n\n return {\n name: providerName,\n ...endpoints,\n key: storedConfig.key,\n secret: storedConfig.secret,\n scope: storedConfig.scope,\n subdomain: storedConfig.subdomain,\n callback: storedConfig.callback,\n redirect_uri: redirectUri,\n };\n};\n\nconst redirectWithPayload = (ctx, callbackUrl, payload) => {\n const url = new URL(callbackUrl);\n const params = new URLSearchParams();\n\n Object.entries(payload).forEach(([key, value]) => {\n if (key === 'raw') {\n Object.entries(value).forEach(([rawKey, rawValue]) => {\n params.set(`raw[${rawKey}]`, String(rawValue));\n });\n return;\n }\n if (value !== undefined && value !== null) {\n params.set(key, String(value));\n }\n });\n\n url.search = params.toString();\n ctx.redirect(url.toString());\n};\n\nconst preserveGrantDynamic = (ctx) => {\n const dynamic = ctx.session.grant?.dynamic;\n return dynamic ? { dynamic } : {};\n};\n\nconst redirectWithSessionResponse = (ctx, callbackUrl, provider, tokenResponse) => {\n const grantResponse = oauth2.tokensToQueryPayload(provider, tokenResponse);\n ctx.session.grant = {\n response: trimGrantSessionResponse(grantResponse, provider.name),\n };\n\n return redirectWithPayload(ctx, callbackUrl, {});\n};\n\nconst startOAuth1Flow = async (ctx, provider, parsed, redirectUri) => {\n const requestToken = await oauth1.requestToken({\n requestUrl: provider.request_url,\n redirectUri,\n consumerKey: provider.key,\n clientCredential: provider.secret,\n });\n\n ctx.session.grant = {\n ...preserveGrantDynamic(ctx),\n provider: parsed.provider,\n request: requestToken,\n };\n\n const authorizeUrl = `${provider.authorize_url}?oauth_token=${encodeURIComponent(requestToken.oauth_token)}`;\n return ctx.redirect(authorizeUrl);\n};\n\nconst startOAuth2Flow = (ctx, provider, parsed, redirectUri) => {\n const state = oauth2.generateState();\n ctx.session.grant = {\n ...preserveGrantDynamic(ctx),\n provider: parsed.provider,\n state,\n };\n\n let authorizeUrl = oauth2.buildAuthorizeUrl(provider, {\n key: provider.key,\n redirectUri,\n scope: provider.scope,\n subdomain: provider.subdomain,\n });\n\n authorizeUrl += `&state=${encodeURIComponent(state)}`;\n return ctx.redirect(authorizeUrl);\n};\n\nconst handleOAuth1Callback = async (ctx, provider, callbackUrl) => {\n const session = ctx.session.grant || {};\n const { oauth_token: oauthToken, oauth_verifier: oauthVerifier } = ctx.query;\n const requestToken = session.request;\n\n if (!requestToken?.oauth_token || oauthToken !== requestToken.oauth_token) {\n throw new Error('OAuth1 token mismatch');\n }\n\n const tokenResponse = await oauth1.accessToken({\n accessUrl: provider.access_url,\n consumerKey: provider.key,\n clientCredential: provider.secret,\n oauthToken,\n oauthVerifier,\n oauthTokenCredential: requestToken.oauth_token_secret,\n });\n\n return redirectWithSessionResponse(ctx, callbackUrl, provider, tokenResponse);\n};\n\nconst handleOAuth2Callback = async (ctx, provider, callbackUrl, redirectUri) => {\n const session = ctx.session.grant || {};\n const { code, state: queryState, error, error_description: errorDescription } = ctx.query;\n\n if (error) {\n ctx.session.grant = {};\n return redirectWithPayload(ctx, callbackUrl, {\n error,\n error_description: errorDescription,\n });\n }\n\n if (!code) {\n throw new Error('OAuth2 missing code parameter');\n }\n\n // Reject when session state is missing (not only on mismatch) to close login-CSRF.\n if (!session.state || queryState !== session.state) {\n throw new Error('OAuth2 state mismatch');\n }\n\n const tokenResponse = await oauth2.exchangeAuthorizationCode(provider, {\n key: provider.key,\n secret: provider.secret,\n redirectUri,\n code,\n subdomain: provider.subdomain,\n });\n\n return redirectWithSessionResponse(ctx, callbackUrl, provider, tokenResponse);\n};\n\nconst createOAuthConnectMiddleware = () => {\n return async (ctx, next) => {\n const apiPrefix = strapi.config.get('api.rest.prefix');\n const [requestPath] = ctx.request.url.split('?');\n const parsed = parseConnectPath(requestPath, apiPrefix);\n\n if (!parsed) {\n return next();\n }\n\n if (!ctx.session) {\n ctx.throw(400, 'OAuth connect requires session middleware');\n }\n\n const storedProviders = await strapi\n .store({ type: 'plugin', name: 'users-permissions', key: 'grant' })\n .get();\n\n const storedConfig = storedProviders?.[parsed.provider];\n if (!storedConfig?.enabled) {\n throw new errors.ApplicationError('This provider is disabled');\n }\n\n const { getService } = require('..');\n const redirectUri = getService('providers').buildRedirectUri(parsed.provider);\n\n const callbackOverride =\n ctx.state.oauthConnect?.callback ?? ctx.session.grant?.dynamic?.callback;\n const effectiveConfig = callbackOverride\n ? { ...storedConfig, callback: callbackOverride }\n : storedConfig;\n\n const provider = buildProviderConfig(parsed.provider, effectiveConfig, redirectUri);\n\n if (!provider) {\n throw new errors.ApplicationError('Unknown OAuth provider');\n }\n\n ctx.session.grant = ctx.session.grant || {};\n\n if (!parsed.isCallback) {\n if (provider.oauth === 1) {\n return startOAuth1Flow(ctx, provider, parsed, redirectUri);\n }\n return startOAuth2Flow(ctx, provider, parsed, redirectUri);\n }\n\n const callbackUrl = effectiveConfig.callback;\n if (!callbackUrl) {\n throw new errors.ApplicationError('Provider callback URL is not configured');\n }\n\n try {\n if (provider.oauth === 1) {\n return await handleOAuth1Callback(ctx, provider, callbackUrl);\n }\n return await handleOAuth2Callback(ctx, provider, callbackUrl, redirectUri);\n } catch (err) {\n ctx.session.grant = {};\n return redirectWithPayload(ctx, callbackUrl, {\n error: 'oauth_error',\n error_description: err.message,\n });\n }\n };\n};\n\nmodule.exports = {\n createOAuthConnectMiddleware,\n parseConnectPath,\n buildProviderConfig,\n redirectWithPayload,\n};\n"],"names":["errors","require$$0","builtinProviderEndpoints","require$$1","oauth1","require$$2","oauth2","require$$3","trimGrantSessionResponse","require$$4","CONNECT_PREFIX","parseConnectPath","requestPath","apiPrefix","prefix","startsWith","remainder","slice","length","provider","segment","split","filter","Boolean","isCallback","buildProviderConfig","providerName","storedConfig","redirectUri","defaults","endpoints","oauth","authorize_url","access_url","request_url","scope_delimiter","token_endpoint_auth_method","name","key","secret","scope","subdomain","callback","redirect_uri","redirectWithPayload","ctx","callbackUrl","payload","url","URL","params","URLSearchParams","Object","entries","forEach","value","rawKey","rawValue","set","String","undefined","search","toString","redirect","preserveGrantDynamic","dynamic","session","grant","redirectWithSessionResponse","tokenResponse","grantResponse","tokensToQueryPayload","response","startOAuth1Flow","parsed","requestToken","requestUrl","consumerKey","clientCredential","request","authorizeUrl","encodeURIComponent","oauth_token","startOAuth2Flow","state","generateState","buildAuthorizeUrl","handleOAuth1Callback","oauthToken","oauth_verifier","oauthVerifier","query","Error","accessToken","accessUrl","oauthTokenCredential","oauth_token_secret","handleOAuth2Callback","code","queryState","error","error_description","errorDescription","exchangeAuthorizationCode","createOAuthConnectMiddleware","next","strapi","config","get","throw","storedProviders","store","type","enabled","ApplicationError","getService","require$$5","buildRedirectUri","callbackOverride","oauthConnect","effectiveConfig","err","message"],"mappings":";;;;;;;;;;;;IAEA,MAAM,EAAEA,MAAM,EAAE,GAAGC,UAAAA;AAEnB,IAAA,MAAMC,wBAAAA,GAA2BC,gBAAAA,EAAAA;AACjC,IAAA,MAAMC,MAAAA,GAASC,aAAAA,EAAAA;AACf,IAAA,MAAMC,MAAAA,GAASC,aAAAA,EAAAA;IACf,MAAM,EAAEC,wBAAwB,EAAE,GAAGC,+BAAAA,EAAAA;AAErC,IAAA,MAAMC,cAAAA,GAAiB,UAAA;IAEvB,MAAMC,gBAAAA,GAAmB,CAACC,WAAAA,EAAaC,SAAAA,GAAAA;AACrC,QAAA,MAAMC,MAAAA,GAAS,CAAA,EAAGD,SAAAA,CAAAA,EAAYH,cAAAA,CAAe,CAAC,CAAC;AAC/C,QAAA,IAAI,CAACE,WAAAA,CAAYG,UAAU,CAACD,MAAAA,CAAAA,EAAS;YACnC,OAAO,IAAA;AACX,QAAA;AAEE,QAAA,MAAME,SAAAA,GAAYJ,WAAAA,CAAYK,KAAK,CAACH,OAAOI,MAAM,CAAA;QACjD,MAAM,CAACC,UAAUC,OAAAA,CAAQ,GAAGJ,UAAUK,KAAK,CAAC,GAAA,CAAA,CAAKC,MAAM,CAACC,OAAAA,CAAAA;AAExD,QAAA,IAAI,CAACJ,QAAAA,EAAU;YACb,OAAO,IAAA;AACX,QAAA;QAEE,OAAO;AACLA,YAAAA,QAAAA;AACAK,YAAAA,UAAAA,EAAYJ,OAAAA,KAAY;AAC5B,SAAA;AACA,IAAA,CAAA;AAEA;;;AAGA,KACA,MAAMK,mBAAAA,GAAsB,CAACC,YAAAA,EAAcC,YAAAA,EAAcC,WAAAA,GAAAA;QACvD,MAAMC,QAAAA,GAAW3B,wBAAwB,CAACwB,YAAAA,CAAa;AACvD,QAAA,MAAMI,YAAYD,QAAAA,IAAY;AAC5BE,YAAAA,KAAAA,EAAOJ,aAAaI,KAAK;AACzBC,YAAAA,aAAAA,EAAeL,aAAaK,aAAa;AACzCC,YAAAA,UAAAA,EAAYN,aAAaM,UAAU;AACnCC,YAAAA,WAAAA,EAAaP,aAAaO,WAAW;AACrCC,YAAAA,eAAAA,EAAiBR,aAAaQ,eAAe;AAC7CC,YAAAA,0BAAAA,EAA4BT,aAAaS;AAC7C,SAAA;QAEE,IAAIN,SAAAA,CAAUC,KAAK,KAAK,CAAA,EAAG;YACzB,IAAI,CAACD,SAAAA,CAAUI,WAAW,IAAI,CAACJ,SAAAA,CAAUE,aAAa,IAAI,CAACF,SAAAA,CAAUG,UAAU,EAAE;gBAC/E,OAAO,IAAA;AACb,YAAA;QACA,CAAA,MAAS,IAAI,CAACH,SAAAA,CAAUE,aAAa,IAAI,CAACF,SAAAA,CAAUG,UAAU,EAAE;YAC5D,OAAO,IAAA;AACX,QAAA;QAEE,OAAO;YACLI,IAAAA,EAAMX,YAAAA;AACN,YAAA,GAAGI,SAAS;AACZQ,YAAAA,GAAAA,EAAKX,aAAaW,GAAG;AACrBC,YAAAA,MAAAA,EAAQZ,aAAaY,MAAM;AAC3BC,YAAAA,KAAAA,EAAOb,aAAaa,KAAK;AACzBC,YAAAA,SAAAA,EAAWd,aAAac,SAAS;AACjCC,YAAAA,QAAAA,EAAUf,aAAae,QAAQ;YAC/BC,YAAAA,EAAcf;AAClB,SAAA;AACA,IAAA,CAAA;IAEA,MAAMgB,mBAAAA,GAAsB,CAACC,GAAAA,EAAKC,WAAAA,EAAaC,OAAAA,GAAAA;QAC7C,MAAMC,GAAAA,GAAM,IAAIC,GAAAA,CAAIH,WAAAA,CAAAA;AACpB,QAAA,MAAMI,SAAS,IAAIC,eAAAA,EAAAA;QAEnBC,MAAAA,CAAOC,OAAO,CAACN,OAAAA,CAAAA,CAASO,OAAO,CAAC,CAAC,CAAChB,KAAKiB,KAAAA,CAAM,GAAA;AAC3C,YAAA,IAAIjB,QAAQ,KAAA,EAAO;gBACjBc,MAAAA,CAAOC,OAAO,CAACE,KAAAA,CAAAA,CAAOD,OAAO,CAAC,CAAC,CAACE,QAAQC,QAAAA,CAAS,GAAA;oBAC/CP,MAAAA,CAAOQ,GAAG,CAAC,CAAC,IAAI,EAAEF,MAAAA,CAAO,CAAC,CAAC,EAAEG,MAAAA,CAAOF,QAAAA,CAAAA,CAAAA;AAC5C,gBAAA,CAAA,CAAA;AACM,gBAAA;AACN,YAAA;YACI,IAAIF,KAAAA,KAAUK,SAAAA,IAAaL,KAAAA,KAAU,IAAA,EAAM;gBACzCL,MAAAA,CAAOQ,GAAG,CAACpB,GAAAA,EAAKqB,MAAAA,CAAOJ,KAAAA,CAAAA,CAAAA;AAC7B,YAAA;AACA,QAAA,CAAA,CAAA;QAEEP,GAAAA,CAAIa,MAAM,GAAGX,MAAAA,CAAOY,QAAQ,EAAA;QAC5BjB,GAAAA,CAAIkB,QAAQ,CAACf,GAAAA,CAAIc,QAAQ,EAAA,CAAA;AAC3B,IAAA,CAAA;AAEA,IAAA,MAAME,uBAAuB,CAACnB,GAAAA,GAAAA;AAC5B,QAAA,MAAMoB,OAAAA,GAAUpB,GAAAA,CAAIqB,OAAO,CAACC,KAAK,EAAEF,OAAAA;AACnC,QAAA,OAAOA,OAAAA,GAAU;AAAEA,YAAAA;AAAO,SAAA,GAAK,EAAA;AACjC,IAAA,CAAA;AAEA,IAAA,MAAMG,2BAAAA,GAA8B,CAACvB,GAAAA,EAAKC,WAAAA,EAAa3B,QAAAA,EAAUkD,aAAAA,GAAAA;AAC/D,QAAA,MAAMC,aAAAA,GAAgBhE,MAAAA,CAAOiE,oBAAoB,CAACpD,QAAAA,EAAUkD,aAAAA,CAAAA;QAC5DxB,GAAAA,CAAIqB,OAAO,CAACC,KAAK,GAAG;YAClBK,QAAAA,EAAUhE,wBAAAA,CAAyB8D,aAAAA,EAAenD,QAAAA,CAASkB,IAAI;AACnE,SAAA;QAEE,OAAOO,mBAAAA,CAAoBC,GAAAA,EAAKC,WAAAA,EAAa;AAC/C,IAAA,CAAA;AAEA,IAAA,MAAM2B,eAAAA,GAAkB,OAAO5B,GAAAA,EAAK1B,QAAAA,EAAUuD,MAAAA,EAAQ9C,WAAAA,GAAAA;AACpD,QAAA,MAAM+C,YAAAA,GAAe,MAAMvE,MAAAA,CAAOuE,YAAY,CAAC;AAC7CC,YAAAA,UAAAA,EAAYzD,SAASe,WAAW;AAChCN,YAAAA,WAAAA;AACAiD,YAAAA,WAAAA,EAAa1D,SAASmB,GAAG;AACzBwC,YAAAA,gBAAAA,EAAkB3D,SAASoB;AAC/B,SAAA,CAAA;QAEEM,GAAAA,CAAIqB,OAAO,CAACC,KAAK,GAAG;AAClB,YAAA,GAAGH,qBAAqBnB,GAAAA,CAAI;AAC5B1B,YAAAA,QAAAA,EAAUuD,OAAOvD,QAAQ;YACzB4D,OAAAA,EAASJ;AACb,SAAA;QAEE,MAAMK,YAAAA,GAAe,CAAA,EAAG7D,QAAAA,CAASa,aAAa,CAAC,aAAa,EAAEiD,kBAAAA,CAAmBN,YAAAA,CAAaO,WAAW,CAAA,CAAA,CAAG;QAC5G,OAAOrC,GAAAA,CAAIkB,QAAQ,CAACiB,YAAAA,CAAAA;AACtB,IAAA,CAAA;AAEA,IAAA,MAAMG,eAAAA,GAAkB,CAACtC,GAAAA,EAAK1B,QAAAA,EAAUuD,MAAAA,EAAQ9C,WAAAA,GAAAA;QAC9C,MAAMwD,KAAAA,GAAQ9E,OAAO+E,aAAa,EAAA;QAClCxC,GAAAA,CAAIqB,OAAO,CAACC,KAAK,GAAG;AAClB,YAAA,GAAGH,qBAAqBnB,GAAAA,CAAI;AAC5B1B,YAAAA,QAAAA,EAAUuD,OAAOvD,QAAQ;AACzBiE,YAAAA;AACJ,SAAA;AAEE,QAAA,IAAIJ,YAAAA,GAAe1E,MAAAA,CAAOgF,iBAAiB,CAACnE,QAAAA,EAAU;AACpDmB,YAAAA,GAAAA,EAAKnB,SAASmB,GAAG;AACjBV,YAAAA,WAAAA;AACAY,YAAAA,KAAAA,EAAOrB,SAASqB,KAAK;AACrBC,YAAAA,SAAAA,EAAWtB,SAASsB;AACxB,SAAA,CAAA;AAEEuC,QAAAA,YAAAA,IAAgB,CAAC,OAAO,EAAEC,kBAAAA,CAAmBG,KAAAA,CAAAA,CAAAA,CAAQ;QACrD,OAAOvC,GAAAA,CAAIkB,QAAQ,CAACiB,YAAAA,CAAAA;AACtB,IAAA,CAAA;IAEA,MAAMO,oBAAAA,GAAuB,OAAO1C,GAAAA,EAAK1B,QAAAA,EAAU2B,WAAAA,GAAAA;AACjD,QAAA,MAAMoB,UAAUrB,GAAAA,CAAIqB,OAAO,CAACC,KAAK,IAAI,EAAA;QACrC,MAAM,EAAEe,aAAaM,UAAU,EAAEC,gBAAgBC,aAAa,EAAE,GAAG7C,GAAAA,CAAI8C,KAAK;QAC5E,MAAMhB,YAAAA,GAAeT,QAAQa,OAAO;AAEpC,QAAA,IAAI,CAACJ,YAAAA,EAAcO,WAAAA,IAAeM,UAAAA,KAAeb,YAAAA,CAAaO,WAAW,EAAE;AACzE,YAAA,MAAM,IAAIU,KAAAA,CAAM,uBAAA,CAAA;AACpB,QAAA;AAEE,QAAA,MAAMvB,aAAAA,GAAgB,MAAMjE,MAAAA,CAAOyF,WAAW,CAAC;AAC7CC,YAAAA,SAAAA,EAAW3E,SAASc,UAAU;AAC9B4C,YAAAA,WAAAA,EAAa1D,SAASmB,GAAG;AACzBwC,YAAAA,gBAAAA,EAAkB3D,SAASoB,MAAM;AACjCiD,YAAAA,UAAAA;AACAE,YAAAA,aAAAA;AACAK,YAAAA,oBAAAA,EAAsBpB,aAAaqB;AACvC,SAAA,CAAA;QAEE,OAAO5B,2BAAAA,CAA4BvB,GAAAA,EAAKC,WAAAA,EAAa3B,QAAAA,EAAUkD,aAAAA,CAAAA;AACjE,IAAA,CAAA;AAEA,IAAA,MAAM4B,oBAAAA,GAAuB,OAAOpD,GAAAA,EAAK1B,QAAAA,EAAU2B,WAAAA,EAAalB,WAAAA,GAAAA;AAC9D,QAAA,MAAMsC,UAAUrB,GAAAA,CAAIqB,OAAO,CAACC,KAAK,IAAI,EAAA;AACrC,QAAA,MAAM,EAAE+B,IAAI,EAAEd,KAAAA,EAAOe,UAAU,EAAEC,KAAK,EAAEC,iBAAAA,EAAmBC,gBAAgB,EAAE,GAAGzD,IAAI8C,KAAK;AAEzF,QAAA,IAAIS,KAAAA,EAAO;AACTvD,YAAAA,GAAAA,CAAIqB,OAAO,CAACC,KAAK,GAAG,EAAA;YACpB,OAAOvB,mBAAAA,CAAoBC,KAAKC,WAAAA,EAAa;AAC3CsD,gBAAAA,KAAAA;gBACAC,iBAAAA,EAAmBC;AACzB,aAAA,CAAA;AACA,QAAA;AAEE,QAAA,IAAI,CAACJ,IAAAA,EAAM;AACT,YAAA,MAAM,IAAIN,KAAAA,CAAM,+BAAA,CAAA;AACpB,QAAA;;AAGE,QAAA,IAAI,CAAC1B,OAAAA,CAAQkB,KAAK,IAAIe,UAAAA,KAAejC,OAAAA,CAAQkB,KAAK,EAAE;AAClD,YAAA,MAAM,IAAIQ,KAAAA,CAAM,uBAAA,CAAA;AACpB,QAAA;AAEE,QAAA,MAAMvB,aAAAA,GAAgB,MAAM/D,MAAAA,CAAOiG,yBAAyB,CAACpF,QAAAA,EAAU;AACrEmB,YAAAA,GAAAA,EAAKnB,SAASmB,GAAG;AACjBC,YAAAA,MAAAA,EAAQpB,SAASoB,MAAM;AACvBX,YAAAA,WAAAA;AACAsE,YAAAA,IAAAA;AACAzD,YAAAA,SAAAA,EAAWtB,SAASsB;AACxB,SAAA,CAAA;QAEE,OAAO2B,2BAAAA,CAA4BvB,GAAAA,EAAKC,WAAAA,EAAa3B,QAAAA,EAAUkD,aAAAA,CAAAA;AACjE,IAAA,CAAA;AAEA,IAAA,MAAMmC,4BAAAA,GAA+B,IAAA;AACnC,QAAA,OAAO,OAAO3D,GAAAA,EAAK4D,IAAAA,GAAAA;AACjB,YAAA,MAAM5F,SAAAA,GAAY6F,MAAAA,CAAOC,MAAM,CAACC,GAAG,CAAC,iBAAA,CAAA;YACpC,MAAM,CAAChG,YAAY,GAAGiC,GAAAA,CAAIkC,OAAO,CAAC/B,GAAG,CAAC3B,KAAK,CAAC,GAAA,CAAA;YAC5C,MAAMqD,MAAAA,GAAS/D,iBAAiBC,WAAAA,EAAaC,SAAAA,CAAAA;AAE7C,YAAA,IAAI,CAAC6D,MAAAA,EAAQ;gBACX,OAAO+B,IAAAA,EAAAA;AACb,YAAA;YAEI,IAAI,CAAC5D,GAAAA,CAAIqB,OAAO,EAAE;gBAChBrB,GAAAA,CAAIgE,KAAK,CAAC,GAAA,EAAK,2CAAA,CAAA;AACrB,YAAA;AAEI,YAAA,MAAMC,eAAAA,GAAkB,MAAMJ,MAAAA,CAC3BK,KAAK,CAAC;gBAAEC,IAAAA,EAAM,QAAA;gBAAU3E,IAAAA,EAAM,mBAAA;gBAAqBC,GAAAA,EAAK;AAAO,aAAA,CAAA,CAC/DsE,GAAG,EAAA;AAEN,YAAA,MAAMjF,YAAAA,GAAemF,eAAAA,GAAkBpC,MAAAA,CAAOvD,QAAQ,CAAC;YACvD,IAAI,CAACQ,cAAcsF,OAAAA,EAAS;gBAC1B,MAAM,IAAIjH,MAAAA,CAAOkH,gBAAgB,CAAC,2BAAA,CAAA;AACxC,YAAA;YAEI,MAAM,EAAEC,UAAU,EAAE,GAAGC,YAAAA,EAAAA;AACvB,YAAA,MAAMxF,cAAcuF,UAAAA,CAAW,WAAA,CAAA,CAAaE,gBAAgB,CAAC3C,OAAOvD,QAAQ,CAAA;AAE5E,YAAA,MAAMmG,gBAAAA,GACJzE,GAAAA,CAAIuC,KAAK,CAACmC,YAAY,EAAE7E,QAAAA,IAAYG,GAAAA,CAAIqB,OAAO,CAACC,KAAK,EAAEF,OAAAA,EAASvB,QAAAA;AAClE,YAAA,MAAM8E,kBAAkBF,gBAAAA,GACpB;AAAE,gBAAA,GAAG3F,YAAY;gBAAEe,QAAAA,EAAU4E;aAAgB,GAC7C3F,YAAAA;AAEJ,YAAA,MAAMR,QAAAA,GAAWM,mBAAAA,CAAoBiD,MAAAA,CAAOvD,QAAQ,EAAEqG,eAAAA,EAAiB5F,WAAAA,CAAAA;AAEvE,YAAA,IAAI,CAACT,QAAAA,EAAU;gBACb,MAAM,IAAInB,MAAAA,CAAOkH,gBAAgB,CAAC,wBAAA,CAAA;AACxC,YAAA;YAEIrE,GAAAA,CAAIqB,OAAO,CAACC,KAAK,GAAGtB,IAAIqB,OAAO,CAACC,KAAK,IAAI,EAAA;YAEzC,IAAI,CAACO,MAAAA,CAAOlD,UAAU,EAAE;gBACtB,IAAIL,QAAAA,CAASY,KAAK,KAAK,CAAA,EAAG;oBACxB,OAAO0C,eAAAA,CAAgB5B,GAAAA,EAAK1B,QAAAA,EAAUuD,MAAAA,EAAQ9C,WAAAA,CAAAA;AACtD,gBAAA;gBACM,OAAOuD,eAAAA,CAAgBtC,GAAAA,EAAK1B,QAAAA,EAAUuD,MAAAA,EAAQ9C,WAAAA,CAAAA;AACpD,YAAA;YAEI,MAAMkB,WAAAA,GAAc0E,gBAAgB9E,QAAQ;AAC5C,YAAA,IAAI,CAACI,WAAAA,EAAa;gBAChB,MAAM,IAAI9C,MAAAA,CAAOkH,gBAAgB,CAAC,yCAAA,CAAA;AACxC,YAAA;YAEI,IAAI;gBACF,IAAI/F,QAAAA,CAASY,KAAK,KAAK,CAAA,EAAG;oBACxB,OAAO,MAAMwD,oBAAAA,CAAqB1C,GAAAA,EAAK1B,QAAAA,EAAU2B,WAAAA,CAAAA;AACzD,gBAAA;AACM,gBAAA,OAAO,MAAMmD,oBAAAA,CAAqBpD,GAAAA,EAAK1B,QAAAA,EAAU2B,WAAAA,EAAalB,WAAAA,CAAAA;AACpE,YAAA,CAAA,CAAM,OAAO6F,GAAAA,EAAK;AACZ5E,gBAAAA,GAAAA,CAAIqB,OAAO,CAACC,KAAK,GAAG,EAAA;gBACpB,OAAOvB,mBAAAA,CAAoBC,KAAKC,WAAAA,EAAa;oBAC3CsD,KAAAA,EAAO,aAAA;AACPC,oBAAAA,iBAAAA,EAAmBoB,IAAIC;AAC/B,iBAAA,CAAA;AACA,YAAA;AACA,QAAA,CAAA;AACA,IAAA,CAAA;IAEAH,YAAAA,GAAiB;AACff,QAAAA,4BAAAA;AACA7F,QAAAA,gBAAAA;AACAc,QAAAA,mBAAAA;AACAmB,QAAAA;AACF,KAAA;;;;;;"}
@@ -0,0 +1,138 @@
1
+ 'use strict';
2
+
3
+ var _node_crypto_commonjsExternal = require('../../_virtual/_node_crypto.js');
4
+ var _node_url_commonjsExternal = require('../../_virtual/_node_url.js');
5
+
6
+ var oauth1;
7
+ var hasRequiredOauth1;
8
+ function requireOauth1() {
9
+ if (hasRequiredOauth1) return oauth1;
10
+ hasRequiredOauth1 = 1;
11
+ const crypto = _node_crypto_commonjsExternal.__require();
12
+ const { URLSearchParams } = _node_url_commonjsExternal.__require();
13
+ const encode = (str)=>encodeURIComponent(str).replace(/[!'()*]/g, (c)=>`%${c.codePointAt(0).toString(16).toUpperCase()}`);
14
+ const sortKeys = (keys)=>keys.sort((a, b)=>{
15
+ if (a < b) return -1;
16
+ if (a > b) return 1;
17
+ return 0;
18
+ });
19
+ /**
20
+ * OAuth 1.0 (RFC 5849) request signature — HMAC-SHA1 is required by the protocol.
21
+ * This is not password storage or user-credential hashing (those use bcrypt).
22
+ */ const signRfc5849BaseString = (signatureBaseString, signingMaterial)=>{
23
+ // codeql[js/insufficient-password-hash] OAuth 1.0 signing material, not user password storage
24
+ return crypto.createHmac('sha1', signingMaterial).update(signatureBaseString).digest('base64');
25
+ };
26
+ const buildOAuth1Header = ({ method, url, params, consumerKey, clientCredential, token, tokenCredential })=>{
27
+ const requestParameters = {
28
+ oauth_consumer_key: consumerKey,
29
+ oauth_nonce: crypto.randomBytes(16).toString('hex'),
30
+ oauth_signature_method: 'HMAC-SHA1',
31
+ oauth_timestamp: Math.floor(Date.now() / 1000).toString(),
32
+ oauth_version: '1.0',
33
+ ...token ? {
34
+ oauth_token: token
35
+ } : {},
36
+ ...params
37
+ };
38
+ const paramString = sortKeys(Object.keys(requestParameters)).map((key)=>`${encode(key)}=${encode(requestParameters[key])}`).join('&');
39
+ const signatureBaseString = [
40
+ method.toUpperCase(),
41
+ encode(url),
42
+ encode(paramString)
43
+ ].join('&');
44
+ const signingMaterial = `${encode(clientCredential)}&${encode(tokenCredential || '')}`;
45
+ const signature = signRfc5849BaseString(signatureBaseString, signingMaterial);
46
+ const headerParameters = {
47
+ ...requestParameters,
48
+ oauth_signature: signature
49
+ };
50
+ const header = `OAuth ${sortKeys(Object.keys(headerParameters)).map((key)=>`${encode(key)}="${encode(headerParameters[key])}"`).join(', ')}`;
51
+ return header;
52
+ };
53
+ const oauth1Request = async ({ method, url, consumerKey, clientCredential, token, tokenCredential, params = {} })=>{
54
+ const authorization = buildOAuth1Header({
55
+ method,
56
+ url,
57
+ params,
58
+ consumerKey,
59
+ clientCredential,
60
+ token,
61
+ tokenCredential
62
+ });
63
+ const response = await fetch(url, {
64
+ method,
65
+ headers: {
66
+ Authorization: authorization
67
+ }
68
+ });
69
+ const text = await response.text();
70
+ if (!response.ok) {
71
+ throw new Error(text || `OAuth1 request failed (${response.status})`);
72
+ }
73
+ return Object.fromEntries(new URLSearchParams(text));
74
+ };
75
+ const requestToken = async ({ requestUrl, redirectUri, consumerKey, clientCredential })=>oauth1Request({
76
+ method: 'POST',
77
+ url: requestUrl,
78
+ consumerKey,
79
+ clientCredential,
80
+ params: {
81
+ oauth_callback: redirectUri
82
+ }
83
+ });
84
+ const accessToken = async ({ accessUrl, consumerKey, clientCredential, oauthToken, oauthVerifier, oauthTokenCredential })=>oauth1Request({
85
+ method: 'POST',
86
+ url: accessUrl,
87
+ consumerKey,
88
+ clientCredential,
89
+ token: oauthToken,
90
+ tokenCredential: oauthTokenCredential,
91
+ params: {
92
+ oauth_verifier: oauthVerifier
93
+ }
94
+ });
95
+ const twitterGet = async ({ url, accessToken, accessCredential, consumerKey, clientCredential, qs = {} })=>{
96
+ const target = new URL(url);
97
+ const signedParams = {};
98
+ Object.entries(qs).forEach(([key, value])=>{
99
+ if (value !== undefined && value !== null) {
100
+ const stringValue = String(value);
101
+ target.searchParams.set(key, stringValue);
102
+ // RFC 5849 §3.4.1: base-string URI excludes the query; params are signed separately.
103
+ signedParams[key] = stringValue;
104
+ }
105
+ });
106
+ const authorization = buildOAuth1Header({
107
+ method: 'GET',
108
+ url: target.origin + target.pathname,
109
+ params: signedParams,
110
+ consumerKey,
111
+ clientCredential,
112
+ token: accessToken,
113
+ tokenCredential: accessCredential
114
+ });
115
+ const response = await fetch(target, {
116
+ headers: {
117
+ Authorization: authorization
118
+ }
119
+ });
120
+ const body = await response.json();
121
+ if (!response.ok) {
122
+ throw new Error(body.errors?.[0]?.message || `Twitter API error (${response.status})`);
123
+ }
124
+ return {
125
+ body
126
+ };
127
+ };
128
+ oauth1 = {
129
+ buildOAuth1Header,
130
+ requestToken,
131
+ accessToken,
132
+ twitterGet
133
+ };
134
+ return oauth1;
135
+ }
136
+
137
+ exports.__require = requireOauth1;
138
+ //# sourceMappingURL=oauth1.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oauth1.js","sources":["../../../../server/src/utils/oauth-connect/oauth1.js"],"sourcesContent":["'use strict';\n\nconst crypto = require('node:crypto');\nconst { URLSearchParams } = require('node:url');\n\nconst encode = (str) =>\n encodeURIComponent(str).replace(\n /[!'()*]/g,\n (c) => `%${c.codePointAt(0).toString(16).toUpperCase()}`\n );\n\nconst sortKeys = (keys) =>\n keys.sort((a, b) => {\n if (a < b) return -1;\n if (a > b) return 1;\n return 0;\n });\n\n/**\n * OAuth 1.0 (RFC 5849) request signature — HMAC-SHA1 is required by the protocol.\n * This is not password storage or user-credential hashing (those use bcrypt).\n */\nconst signRfc5849BaseString = (signatureBaseString, signingMaterial) => {\n // codeql[js/insufficient-password-hash] OAuth 1.0 signing material, not user password storage\n return crypto.createHmac('sha1', signingMaterial).update(signatureBaseString).digest('base64');\n};\n\nconst buildOAuth1Header = ({\n method,\n url,\n params,\n consumerKey,\n clientCredential,\n token,\n tokenCredential,\n}) => {\n const requestParameters = {\n oauth_consumer_key: consumerKey,\n oauth_nonce: crypto.randomBytes(16).toString('hex'),\n oauth_signature_method: 'HMAC-SHA1',\n oauth_timestamp: Math.floor(Date.now() / 1000).toString(),\n oauth_version: '1.0',\n ...(token ? { oauth_token: token } : {}),\n ...params,\n };\n\n const paramString = sortKeys(Object.keys(requestParameters))\n .map((key) => `${encode(key)}=${encode(requestParameters[key])}`)\n .join('&');\n\n const signatureBaseString = [method.toUpperCase(), encode(url), encode(paramString)].join('&');\n const signingMaterial = `${encode(clientCredential)}&${encode(tokenCredential || '')}`;\n const signature = signRfc5849BaseString(signatureBaseString, signingMaterial);\n\n const headerParameters = { ...requestParameters, oauth_signature: signature };\n const header = `OAuth ${sortKeys(Object.keys(headerParameters))\n .map((key) => `${encode(key)}=\"${encode(headerParameters[key])}\"`)\n .join(', ')}`;\n\n return header;\n};\n\nconst oauth1Request = async ({\n method,\n url,\n consumerKey,\n clientCredential,\n token,\n tokenCredential,\n params = {},\n}) => {\n const authorization = buildOAuth1Header({\n method,\n url,\n params,\n consumerKey,\n clientCredential,\n token,\n tokenCredential,\n });\n\n const response = await fetch(url, {\n method,\n headers: { Authorization: authorization },\n });\n\n const text = await response.text();\n if (!response.ok) {\n throw new Error(text || `OAuth1 request failed (${response.status})`);\n }\n\n return Object.fromEntries(new URLSearchParams(text));\n};\n\nconst requestToken = async ({ requestUrl, redirectUri, consumerKey, clientCredential }) =>\n oauth1Request({\n method: 'POST',\n url: requestUrl,\n consumerKey,\n clientCredential,\n params: { oauth_callback: redirectUri },\n });\n\nconst accessToken = async ({\n accessUrl,\n consumerKey,\n clientCredential,\n oauthToken,\n oauthVerifier,\n oauthTokenCredential,\n}) =>\n oauth1Request({\n method: 'POST',\n url: accessUrl,\n consumerKey,\n clientCredential,\n token: oauthToken,\n tokenCredential: oauthTokenCredential,\n params: { oauth_verifier: oauthVerifier },\n });\n\nconst twitterGet = async ({\n url,\n accessToken,\n accessCredential,\n consumerKey,\n clientCredential,\n qs = {},\n}) => {\n const target = new URL(url);\n const signedParams = {};\n\n Object.entries(qs).forEach(([key, value]) => {\n if (value !== undefined && value !== null) {\n const stringValue = String(value);\n target.searchParams.set(key, stringValue);\n // RFC 5849 §3.4.1: base-string URI excludes the query; params are signed separately.\n signedParams[key] = stringValue;\n }\n });\n\n const authorization = buildOAuth1Header({\n method: 'GET',\n url: target.origin + target.pathname,\n params: signedParams,\n consumerKey,\n clientCredential,\n token: accessToken,\n tokenCredential: accessCredential,\n });\n\n const response = await fetch(target, {\n headers: { Authorization: authorization },\n });\n\n const body = await response.json();\n if (!response.ok) {\n throw new Error(body.errors?.[0]?.message || `Twitter API error (${response.status})`);\n }\n\n return { body };\n};\n\nmodule.exports = {\n buildOAuth1Header,\n requestToken,\n accessToken,\n twitterGet,\n};\n"],"names":["crypto","require$$0","URLSearchParams","require$$1","encode","str","encodeURIComponent","replace","c","codePointAt","toString","toUpperCase","sortKeys","keys","sort","a","b","signRfc5849BaseString","signatureBaseString","signingMaterial","createHmac","update","digest","buildOAuth1Header","method","url","params","consumerKey","clientCredential","token","tokenCredential","requestParameters","oauth_consumer_key","oauth_nonce","randomBytes","oauth_signature_method","oauth_timestamp","Math","floor","Date","now","oauth_version","oauth_token","paramString","Object","map","key","join","signature","headerParameters","oauth_signature","header","oauth1Request","authorization","response","fetch","headers","Authorization","text","ok","Error","status","fromEntries","requestToken","requestUrl","redirectUri","oauth_callback","accessToken","accessUrl","oauthToken","oauthVerifier","oauthTokenCredential","oauth_verifier","twitterGet","accessCredential","qs","target","URL","signedParams","entries","forEach","value","undefined","stringValue","String","searchParams","set","origin","pathname","body","json","errors","message","oauth1"],"mappings":"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"}
@@ -0,0 +1,136 @@
1
+ import { __require } from '../../_virtual/_node_crypto.mjs';
2
+ import { __require as __require$1 } from '../../_virtual/_node_url.mjs';
3
+
4
+ var oauth1;
5
+ var hasRequiredOauth1;
6
+ function requireOauth1() {
7
+ if (hasRequiredOauth1) return oauth1;
8
+ hasRequiredOauth1 = 1;
9
+ const crypto = __require();
10
+ const { URLSearchParams } = __require$1();
11
+ const encode = (str)=>encodeURIComponent(str).replace(/[!'()*]/g, (c)=>`%${c.codePointAt(0).toString(16).toUpperCase()}`);
12
+ const sortKeys = (keys)=>keys.sort((a, b)=>{
13
+ if (a < b) return -1;
14
+ if (a > b) return 1;
15
+ return 0;
16
+ });
17
+ /**
18
+ * OAuth 1.0 (RFC 5849) request signature — HMAC-SHA1 is required by the protocol.
19
+ * This is not password storage or user-credential hashing (those use bcrypt).
20
+ */ const signRfc5849BaseString = (signatureBaseString, signingMaterial)=>{
21
+ // codeql[js/insufficient-password-hash] OAuth 1.0 signing material, not user password storage
22
+ return crypto.createHmac('sha1', signingMaterial).update(signatureBaseString).digest('base64');
23
+ };
24
+ const buildOAuth1Header = ({ method, url, params, consumerKey, clientCredential, token, tokenCredential })=>{
25
+ const requestParameters = {
26
+ oauth_consumer_key: consumerKey,
27
+ oauth_nonce: crypto.randomBytes(16).toString('hex'),
28
+ oauth_signature_method: 'HMAC-SHA1',
29
+ oauth_timestamp: Math.floor(Date.now() / 1000).toString(),
30
+ oauth_version: '1.0',
31
+ ...token ? {
32
+ oauth_token: token
33
+ } : {},
34
+ ...params
35
+ };
36
+ const paramString = sortKeys(Object.keys(requestParameters)).map((key)=>`${encode(key)}=${encode(requestParameters[key])}`).join('&');
37
+ const signatureBaseString = [
38
+ method.toUpperCase(),
39
+ encode(url),
40
+ encode(paramString)
41
+ ].join('&');
42
+ const signingMaterial = `${encode(clientCredential)}&${encode(tokenCredential || '')}`;
43
+ const signature = signRfc5849BaseString(signatureBaseString, signingMaterial);
44
+ const headerParameters = {
45
+ ...requestParameters,
46
+ oauth_signature: signature
47
+ };
48
+ const header = `OAuth ${sortKeys(Object.keys(headerParameters)).map((key)=>`${encode(key)}="${encode(headerParameters[key])}"`).join(', ')}`;
49
+ return header;
50
+ };
51
+ const oauth1Request = async ({ method, url, consumerKey, clientCredential, token, tokenCredential, params = {} })=>{
52
+ const authorization = buildOAuth1Header({
53
+ method,
54
+ url,
55
+ params,
56
+ consumerKey,
57
+ clientCredential,
58
+ token,
59
+ tokenCredential
60
+ });
61
+ const response = await fetch(url, {
62
+ method,
63
+ headers: {
64
+ Authorization: authorization
65
+ }
66
+ });
67
+ const text = await response.text();
68
+ if (!response.ok) {
69
+ throw new Error(text || `OAuth1 request failed (${response.status})`);
70
+ }
71
+ return Object.fromEntries(new URLSearchParams(text));
72
+ };
73
+ const requestToken = async ({ requestUrl, redirectUri, consumerKey, clientCredential })=>oauth1Request({
74
+ method: 'POST',
75
+ url: requestUrl,
76
+ consumerKey,
77
+ clientCredential,
78
+ params: {
79
+ oauth_callback: redirectUri
80
+ }
81
+ });
82
+ const accessToken = async ({ accessUrl, consumerKey, clientCredential, oauthToken, oauthVerifier, oauthTokenCredential })=>oauth1Request({
83
+ method: 'POST',
84
+ url: accessUrl,
85
+ consumerKey,
86
+ clientCredential,
87
+ token: oauthToken,
88
+ tokenCredential: oauthTokenCredential,
89
+ params: {
90
+ oauth_verifier: oauthVerifier
91
+ }
92
+ });
93
+ const twitterGet = async ({ url, accessToken, accessCredential, consumerKey, clientCredential, qs = {} })=>{
94
+ const target = new URL(url);
95
+ const signedParams = {};
96
+ Object.entries(qs).forEach(([key, value])=>{
97
+ if (value !== undefined && value !== null) {
98
+ const stringValue = String(value);
99
+ target.searchParams.set(key, stringValue);
100
+ // RFC 5849 §3.4.1: base-string URI excludes the query; params are signed separately.
101
+ signedParams[key] = stringValue;
102
+ }
103
+ });
104
+ const authorization = buildOAuth1Header({
105
+ method: 'GET',
106
+ url: target.origin + target.pathname,
107
+ params: signedParams,
108
+ consumerKey,
109
+ clientCredential,
110
+ token: accessToken,
111
+ tokenCredential: accessCredential
112
+ });
113
+ const response = await fetch(target, {
114
+ headers: {
115
+ Authorization: authorization
116
+ }
117
+ });
118
+ const body = await response.json();
119
+ if (!response.ok) {
120
+ throw new Error(body.errors?.[0]?.message || `Twitter API error (${response.status})`);
121
+ }
122
+ return {
123
+ body
124
+ };
125
+ };
126
+ oauth1 = {
127
+ buildOAuth1Header,
128
+ requestToken,
129
+ accessToken,
130
+ twitterGet
131
+ };
132
+ return oauth1;
133
+ }
134
+
135
+ export { requireOauth1 as __require };
136
+ //# sourceMappingURL=oauth1.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oauth1.mjs","sources":["../../../../server/src/utils/oauth-connect/oauth1.js"],"sourcesContent":["'use strict';\n\nconst crypto = require('node:crypto');\nconst { URLSearchParams } = require('node:url');\n\nconst encode = (str) =>\n encodeURIComponent(str).replace(\n /[!'()*]/g,\n (c) => `%${c.codePointAt(0).toString(16).toUpperCase()}`\n );\n\nconst sortKeys = (keys) =>\n keys.sort((a, b) => {\n if (a < b) return -1;\n if (a > b) return 1;\n return 0;\n });\n\n/**\n * OAuth 1.0 (RFC 5849) request signature — HMAC-SHA1 is required by the protocol.\n * This is not password storage or user-credential hashing (those use bcrypt).\n */\nconst signRfc5849BaseString = (signatureBaseString, signingMaterial) => {\n // codeql[js/insufficient-password-hash] OAuth 1.0 signing material, not user password storage\n return crypto.createHmac('sha1', signingMaterial).update(signatureBaseString).digest('base64');\n};\n\nconst buildOAuth1Header = ({\n method,\n url,\n params,\n consumerKey,\n clientCredential,\n token,\n tokenCredential,\n}) => {\n const requestParameters = {\n oauth_consumer_key: consumerKey,\n oauth_nonce: crypto.randomBytes(16).toString('hex'),\n oauth_signature_method: 'HMAC-SHA1',\n oauth_timestamp: Math.floor(Date.now() / 1000).toString(),\n oauth_version: '1.0',\n ...(token ? { oauth_token: token } : {}),\n ...params,\n };\n\n const paramString = sortKeys(Object.keys(requestParameters))\n .map((key) => `${encode(key)}=${encode(requestParameters[key])}`)\n .join('&');\n\n const signatureBaseString = [method.toUpperCase(), encode(url), encode(paramString)].join('&');\n const signingMaterial = `${encode(clientCredential)}&${encode(tokenCredential || '')}`;\n const signature = signRfc5849BaseString(signatureBaseString, signingMaterial);\n\n const headerParameters = { ...requestParameters, oauth_signature: signature };\n const header = `OAuth ${sortKeys(Object.keys(headerParameters))\n .map((key) => `${encode(key)}=\"${encode(headerParameters[key])}\"`)\n .join(', ')}`;\n\n return header;\n};\n\nconst oauth1Request = async ({\n method,\n url,\n consumerKey,\n clientCredential,\n token,\n tokenCredential,\n params = {},\n}) => {\n const authorization = buildOAuth1Header({\n method,\n url,\n params,\n consumerKey,\n clientCredential,\n token,\n tokenCredential,\n });\n\n const response = await fetch(url, {\n method,\n headers: { Authorization: authorization },\n });\n\n const text = await response.text();\n if (!response.ok) {\n throw new Error(text || `OAuth1 request failed (${response.status})`);\n }\n\n return Object.fromEntries(new URLSearchParams(text));\n};\n\nconst requestToken = async ({ requestUrl, redirectUri, consumerKey, clientCredential }) =>\n oauth1Request({\n method: 'POST',\n url: requestUrl,\n consumerKey,\n clientCredential,\n params: { oauth_callback: redirectUri },\n });\n\nconst accessToken = async ({\n accessUrl,\n consumerKey,\n clientCredential,\n oauthToken,\n oauthVerifier,\n oauthTokenCredential,\n}) =>\n oauth1Request({\n method: 'POST',\n url: accessUrl,\n consumerKey,\n clientCredential,\n token: oauthToken,\n tokenCredential: oauthTokenCredential,\n params: { oauth_verifier: oauthVerifier },\n });\n\nconst twitterGet = async ({\n url,\n accessToken,\n accessCredential,\n consumerKey,\n clientCredential,\n qs = {},\n}) => {\n const target = new URL(url);\n const signedParams = {};\n\n Object.entries(qs).forEach(([key, value]) => {\n if (value !== undefined && value !== null) {\n const stringValue = String(value);\n target.searchParams.set(key, stringValue);\n // RFC 5849 §3.4.1: base-string URI excludes the query; params are signed separately.\n signedParams[key] = stringValue;\n }\n });\n\n const authorization = buildOAuth1Header({\n method: 'GET',\n url: target.origin + target.pathname,\n params: signedParams,\n consumerKey,\n clientCredential,\n token: accessToken,\n tokenCredential: accessCredential,\n });\n\n const response = await fetch(target, {\n headers: { Authorization: authorization },\n });\n\n const body = await response.json();\n if (!response.ok) {\n throw new Error(body.errors?.[0]?.message || `Twitter API error (${response.status})`);\n }\n\n return { body };\n};\n\nmodule.exports = {\n buildOAuth1Header,\n requestToken,\n accessToken,\n twitterGet,\n};\n"],"names":["crypto","require$$0","URLSearchParams","require$$1","encode","str","encodeURIComponent","replace","c","codePointAt","toString","toUpperCase","sortKeys","keys","sort","a","b","signRfc5849BaseString","signatureBaseString","signingMaterial","createHmac","update","digest","buildOAuth1Header","method","url","params","consumerKey","clientCredential","token","tokenCredential","requestParameters","oauth_consumer_key","oauth_nonce","randomBytes","oauth_signature_method","oauth_timestamp","Math","floor","Date","now","oauth_version","oauth_token","paramString","Object","map","key","join","signature","headerParameters","oauth_signature","header","oauth1Request","authorization","response","fetch","headers","Authorization","text","ok","Error","status","fromEntries","requestToken","requestUrl","redirectUri","oauth_callback","accessToken","accessUrl","oauthToken","oauthVerifier","oauthTokenCredential","oauth_verifier","twitterGet","accessCredential","qs","target","URL","signedParams","entries","forEach","value","undefined","stringValue","String","searchParams","set","origin","pathname","body","json","errors","message","oauth1"],"mappings":"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"}