@payloadcms/figma 0.0.1-alpha.39 → 0.0.1-alpha.4

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 (264) hide show
  1. package/dist/api/control-plane.d.ts +1 -22
  2. package/dist/api/control-plane.d.ts.map +1 -1
  3. package/dist/api/control-plane.js +22 -55
  4. package/dist/api/control-plane.js.map +1 -1
  5. package/dist/api/figma-api.d.ts.map +1 -1
  6. package/dist/api/figma-api.js +26 -45
  7. package/dist/api/figma-api.js.map +1 -1
  8. package/dist/auth/callback-server.d.ts.map +1 -1
  9. package/dist/auth/callback-server.js +1 -2
  10. package/dist/auth/callback-server.js.map +1 -1
  11. package/dist/auth/crypto-utils.d.ts.map +1 -1
  12. package/dist/auth/crypto-utils.js +5 -5
  13. package/dist/auth/crypto-utils.js.map +1 -1
  14. package/dist/auth/jwt-validator.d.ts +1 -2
  15. package/dist/auth/jwt-validator.d.ts.map +1 -1
  16. package/dist/auth/jwt-validator.js +2 -2
  17. package/dist/auth/jwt-validator.js.map +1 -1
  18. package/dist/auth/oauth-flow.d.ts +1 -1
  19. package/dist/auth/oauth-flow.d.ts.map +1 -1
  20. package/dist/auth/oauth-flow.js +8 -9
  21. package/dist/auth/oauth-flow.js.map +1 -1
  22. package/dist/auth/project-token.d.ts.map +1 -1
  23. package/dist/auth/project-token.js +4 -9
  24. package/dist/auth/project-token.js.map +1 -1
  25. package/dist/auth/refresh.d.ts.map +1 -1
  26. package/dist/auth/refresh.js +9 -14
  27. package/dist/auth/refresh.js.map +1 -1
  28. package/dist/auth/token-store.d.ts +0 -10
  29. package/dist/auth/token-store.d.ts.map +1 -1
  30. package/dist/auth/token-store.js +0 -20
  31. package/dist/auth/token-store.js.map +1 -1
  32. package/dist/cli.d.ts.map +1 -1
  33. package/dist/cli.js +0 -22
  34. package/dist/cli.js.map +1 -1
  35. package/dist/commands/deploy.d.ts +0 -4
  36. package/dist/commands/deploy.d.ts.map +1 -1
  37. package/dist/commands/deploy.js +129 -71
  38. package/dist/commands/deploy.js.map +1 -1
  39. package/dist/commands/init.d.ts +5 -1
  40. package/dist/commands/init.d.ts.map +1 -1
  41. package/dist/commands/init.js +85 -90
  42. package/dist/commands/init.js.map +1 -1
  43. package/dist/commands/list-tokens.d.ts.map +1 -1
  44. package/dist/commands/list-tokens.js +3 -6
  45. package/dist/commands/list-tokens.js.map +1 -1
  46. package/dist/commands/login.d.ts +1 -8
  47. package/dist/commands/login.d.ts.map +1 -1
  48. package/dist/commands/login.js +11 -21
  49. package/dist/commands/login.js.map +1 -1
  50. package/dist/commands/logout.js +2 -2
  51. package/dist/commands/logout.js.map +1 -1
  52. package/dist/config/oauth.d.ts +14 -4
  53. package/dist/config/oauth.d.ts.map +1 -1
  54. package/dist/config/oauth.js +40 -19
  55. package/dist/config/oauth.js.map +1 -1
  56. package/dist/constants.d.ts +18 -26
  57. package/dist/constants.d.ts.map +1 -1
  58. package/dist/constants.js +20 -34
  59. package/dist/constants.js.map +1 -1
  60. package/dist/index.d.ts +1 -2
  61. package/dist/index.d.ts.map +1 -1
  62. package/dist/index.js +1 -3
  63. package/dist/index.js.map +1 -1
  64. package/dist/oauth/components/LoginButton/index.d.ts.map +1 -1
  65. package/dist/oauth/components/LoginButton/index.js +6 -50
  66. package/dist/oauth/components/LoginButton/index.js.map +1 -1
  67. package/dist/oauth/components/LoginButton/index.scss +3 -50
  68. package/dist/oauth/components/LogoutButton/index.d.ts.map +1 -1
  69. package/dist/oauth/components/LogoutButton/index.js +1 -0
  70. package/dist/oauth/components/LogoutButton/index.js.map +1 -1
  71. package/dist/oauth/defaults.d.ts.map +1 -1
  72. package/dist/oauth/defaults.js +5 -29
  73. package/dist/oauth/defaults.js.map +1 -1
  74. package/dist/oauth/endpoints/getLoginEndpoint.d.ts.map +1 -1
  75. package/dist/oauth/endpoints/getLoginEndpoint.js +4 -4
  76. package/dist/oauth/endpoints/getLoginEndpoint.js.map +1 -1
  77. package/dist/oauth/index.d.ts.map +1 -1
  78. package/dist/oauth/index.js +7 -42
  79. package/dist/oauth/index.js.map +1 -1
  80. package/dist/oauth/strategy/index.d.ts +2 -0
  81. package/dist/oauth/strategy/index.d.ts.map +1 -1
  82. package/dist/oauth/strategy/index.js +15 -38
  83. package/dist/oauth/strategy/index.js.map +1 -1
  84. package/dist/oauth/types.d.ts +6 -6
  85. package/dist/oauth/types.d.ts.map +1 -1
  86. package/dist/oauth/types.js.map +1 -1
  87. package/dist/oauth/utilities/createCookieOptions.d.ts.map +1 -1
  88. package/dist/oauth/utilities/createCookieOptions.js.map +1 -1
  89. package/dist/oauth/utilities/refreshTokens.d.ts.map +1 -1
  90. package/dist/oauth/utilities/refreshTokens.js +1 -1
  91. package/dist/oauth/utilities/refreshTokens.js.map +1 -1
  92. package/dist/plugin/build-config.d.ts +4 -21
  93. package/dist/plugin/build-config.d.ts.map +1 -1
  94. package/dist/plugin/build-config.js +8 -114
  95. package/dist/plugin/build-config.js.map +1 -1
  96. package/dist/types.d.ts +0 -1
  97. package/dist/types.d.ts.map +1 -1
  98. package/dist/types.js.map +1 -1
  99. package/dist/utils/asset-collection.d.ts +6 -3
  100. package/dist/utils/asset-collection.d.ts.map +1 -1
  101. package/dist/utils/asset-collection.js +34 -10
  102. package/dist/utils/asset-collection.js.map +1 -1
  103. package/dist/utils/config.js +1 -1
  104. package/dist/utils/config.js.map +1 -1
  105. package/dist/utils/env-management.d.ts +8 -9
  106. package/dist/utils/env-management.d.ts.map +1 -1
  107. package/dist/utils/env-management.js +74 -73
  108. package/dist/utils/env-management.js.map +1 -1
  109. package/dist/utils/formatter.d.ts.map +1 -1
  110. package/dist/utils/formatter.js +5 -3
  111. package/dist/utils/formatter.js.map +1 -1
  112. package/dist/utils/lambda-config.d.ts +1 -3
  113. package/dist/utils/lambda-config.d.ts.map +1 -1
  114. package/dist/utils/lambda-config.js +21 -13
  115. package/dist/utils/lambda-config.js.map +1 -1
  116. package/dist/utils/messages.js +7 -7
  117. package/dist/utils/messages.js.map +1 -1
  118. package/dist/utils/payload-config-ast.d.ts +3 -22
  119. package/dist/utils/payload-config-ast.d.ts.map +1 -1
  120. package/dist/utils/payload-config-ast.js +31 -89
  121. package/dist/utils/payload-config-ast.js.map +1 -1
  122. package/dist/utils/payload-config-finder.d.ts +2 -2
  123. package/dist/utils/payload-config-finder.d.ts.map +1 -1
  124. package/dist/utils/payload-config-finder.js +9 -48
  125. package/dist/utils/payload-config-finder.js.map +1 -1
  126. package/dist/utils/payload-config-modifier.d.ts.map +1 -1
  127. package/dist/utils/payload-config-modifier.js +6 -54
  128. package/dist/utils/payload-config-modifier.js.map +1 -1
  129. package/dist/utils/payload-package-check.d.ts +1 -12
  130. package/dist/utils/payload-package-check.d.ts.map +1 -1
  131. package/dist/utils/payload-package-check.js +5 -63
  132. package/dist/utils/payload-package-check.js.map +1 -1
  133. package/dist/utils/project.d.ts.map +1 -1
  134. package/dist/utils/project.js +5 -8
  135. package/dist/utils/project.js.map +1 -1
  136. package/dist/utils/s3-upload.d.ts +1 -0
  137. package/dist/utils/s3-upload.d.ts.map +1 -1
  138. package/dist/utils/s3-upload.js +3 -10
  139. package/dist/utils/s3-upload.js.map +1 -1
  140. package/dist/utils/token-display.d.ts.map +1 -1
  141. package/dist/utils/token-display.js +5 -11
  142. package/dist/utils/token-display.js.map +1 -1
  143. package/dist/utils/typescript-validator.d.ts.map +1 -1
  144. package/dist/utils/typescript-validator.js +6 -4
  145. package/dist/utils/typescript-validator.js.map +1 -1
  146. package/package.json +7 -31
  147. package/dist/commands/build-lambda-zip.d.ts +0 -5
  148. package/dist/commands/build-lambda-zip.d.ts.map +0 -1
  149. package/dist/commands/build-lambda-zip.js +0 -19
  150. package/dist/commands/build-lambda-zip.js.map +0 -1
  151. package/dist/db-content-api/README.md +0 -98
  152. package/dist/db-content-api/generated/content-api-types.d.ts +0 -3848
  153. package/dist/db-content-api/generated/content-api-types.d.ts.map +0 -1
  154. package/dist/db-content-api/generated/content-api-types.js +0 -7
  155. package/dist/db-content-api/generated/content-api-types.js.map +0 -1
  156. package/dist/db-content-api/index.d.ts +0 -18
  157. package/dist/db-content-api/index.d.ts.map +0 -1
  158. package/dist/db-content-api/index.js +0 -571
  159. package/dist/db-content-api/index.js.map +0 -1
  160. package/dist/db-content-api/temp-utilities/pagination.d.ts +0 -13
  161. package/dist/db-content-api/temp-utilities/pagination.d.ts.map +0 -1
  162. package/dist/db-content-api/temp-utilities/pagination.js +0 -45
  163. package/dist/db-content-api/temp-utilities/pagination.js.map +0 -1
  164. package/dist/db-content-api/temp-utilities/slug.d.ts +0 -2
  165. package/dist/db-content-api/temp-utilities/slug.d.ts.map +0 -1
  166. package/dist/db-content-api/temp-utilities/slug.js +0 -3
  167. package/dist/db-content-api/temp-utilities/slug.js.map +0 -1
  168. package/dist/db-content-api/temp-utilities/sorting.d.ts +0 -3
  169. package/dist/db-content-api/temp-utilities/sorting.d.ts.map +0 -1
  170. package/dist/db-content-api/temp-utilities/sorting.js +0 -32
  171. package/dist/db-content-api/temp-utilities/sorting.js.map +0 -1
  172. package/dist/db-content-api/temp-utilities/unwrapDocument.d.ts +0 -4
  173. package/dist/db-content-api/temp-utilities/unwrapDocument.d.ts.map +0 -1
  174. package/dist/db-content-api/temp-utilities/unwrapDocument.js +0 -53
  175. package/dist/db-content-api/temp-utilities/unwrapDocument.js.map +0 -1
  176. package/dist/db-content-api/utilities/auth.d.ts +0 -30
  177. package/dist/db-content-api/utilities/auth.d.ts.map +0 -1
  178. package/dist/db-content-api/utilities/auth.js +0 -81
  179. package/dist/db-content-api/utilities/auth.js.map +0 -1
  180. package/dist/db-content-api/utilities/data/applyDefaults.d.ts +0 -7
  181. package/dist/db-content-api/utilities/data/applyDefaults.d.ts.map +0 -1
  182. package/dist/db-content-api/utilities/data/applyDefaults.js +0 -59
  183. package/dist/db-content-api/utilities/data/applyDefaults.js.map +0 -1
  184. package/dist/db-content-api/utilities/data/castFieldValue.d.ts +0 -11
  185. package/dist/db-content-api/utilities/data/castFieldValue.d.ts.map +0 -1
  186. package/dist/db-content-api/utilities/data/castFieldValue.js +0 -66
  187. package/dist/db-content-api/utilities/data/castFieldValue.js.map +0 -1
  188. package/dist/db-content-api/utilities/data/index.d.ts +0 -30
  189. package/dist/db-content-api/utilities/data/index.d.ts.map +0 -1
  190. package/dist/db-content-api/utilities/data/index.js +0 -173
  191. package/dist/db-content-api/utilities/data/index.js.map +0 -1
  192. package/dist/db-content-api/utilities/data/removeVirtualFields.d.ts +0 -12
  193. package/dist/db-content-api/utilities/data/removeVirtualFields.d.ts.map +0 -1
  194. package/dist/db-content-api/utilities/data/removeVirtualFields.js +0 -54
  195. package/dist/db-content-api/utilities/data/removeVirtualFields.js.map +0 -1
  196. package/dist/db-content-api/utilities/data/stripFields.d.ts +0 -48
  197. package/dist/db-content-api/utilities/data/stripFields.d.ts.map +0 -1
  198. package/dist/db-content-api/utilities/data/stripFields.js +0 -195
  199. package/dist/db-content-api/utilities/data/stripFields.js.map +0 -1
  200. package/dist/db-content-api/utilities/joins.d.ts +0 -55
  201. package/dist/db-content-api/utilities/joins.d.ts.map +0 -1
  202. package/dist/db-content-api/utilities/joins.js +0 -136
  203. package/dist/db-content-api/utilities/joins.js.map +0 -1
  204. package/dist/db-content-api/utilities/where.d.ts +0 -12
  205. package/dist/db-content-api/utilities/where.d.ts.map +0 -1
  206. package/dist/db-content-api/utilities/where.js +0 -107
  207. package/dist/db-content-api/utilities/where.js.map +0 -1
  208. package/dist/endpoints/health.d.ts +0 -3
  209. package/dist/endpoints/health.d.ts.map +0 -1
  210. package/dist/endpoints/health.js +0 -11
  211. package/dist/endpoints/health.js.map +0 -1
  212. package/dist/exports/client.d.ts +0 -4
  213. package/dist/exports/client.d.ts.map +0 -1
  214. package/dist/exports/client.js +0 -5
  215. package/dist/exports/client.js.map +0 -1
  216. package/dist/oauth/utilities/isDuplicateKeyError.d.ts +0 -7
  217. package/dist/oauth/utilities/isDuplicateKeyError.d.ts.map +0 -1
  218. package/dist/oauth/utilities/isDuplicateKeyError.js +0 -14
  219. package/dist/oauth/utilities/isDuplicateKeyError.js.map +0 -1
  220. package/dist/storage-content-api/api-types.d.ts +0 -161
  221. package/dist/storage-content-api/api-types.d.ts.map +0 -1
  222. package/dist/storage-content-api/api-types.js +0 -6
  223. package/dist/storage-content-api/api-types.js.map +0 -1
  224. package/dist/storage-content-api/client-uploads/ClientUploadHandler.d.ts +0 -9
  225. package/dist/storage-content-api/client-uploads/ClientUploadHandler.d.ts.map +0 -1
  226. package/dist/storage-content-api/client-uploads/ClientUploadHandler.js +0 -42
  227. package/dist/storage-content-api/client-uploads/ClientUploadHandler.js.map +0 -1
  228. package/dist/storage-content-api/client-uploads/generateSignedURL.d.ts +0 -13
  229. package/dist/storage-content-api/client-uploads/generateSignedURL.d.ts.map +0 -1
  230. package/dist/storage-content-api/client-uploads/generateSignedURL.js +0 -31
  231. package/dist/storage-content-api/client-uploads/generateSignedURL.js.map +0 -1
  232. package/dist/storage-content-api/client.d.ts +0 -6
  233. package/dist/storage-content-api/client.d.ts.map +0 -1
  234. package/dist/storage-content-api/client.js +0 -36
  235. package/dist/storage-content-api/client.js.map +0 -1
  236. package/dist/storage-content-api/generateURL.d.ts +0 -7
  237. package/dist/storage-content-api/generateURL.d.ts.map +0 -1
  238. package/dist/storage-content-api/generateURL.js +0 -7
  239. package/dist/storage-content-api/generateURL.js.map +0 -1
  240. package/dist/storage-content-api/handleDelete.d.ts +0 -8
  241. package/dist/storage-content-api/handleDelete.d.ts.map +0 -1
  242. package/dist/storage-content-api/handleDelete.js +0 -15
  243. package/dist/storage-content-api/handleDelete.js.map +0 -1
  244. package/dist/storage-content-api/handleUpload.d.ts +0 -11
  245. package/dist/storage-content-api/handleUpload.d.ts.map +0 -1
  246. package/dist/storage-content-api/handleUpload.js +0 -136
  247. package/dist/storage-content-api/handleUpload.js.map +0 -1
  248. package/dist/storage-content-api/index.d.ts +0 -5
  249. package/dist/storage-content-api/index.d.ts.map +0 -1
  250. package/dist/storage-content-api/index.js +0 -31
  251. package/dist/storage-content-api/index.js.map +0 -1
  252. package/dist/storage-content-api/staticHandler.d.ts +0 -10
  253. package/dist/storage-content-api/staticHandler.d.ts.map +0 -1
  254. package/dist/storage-content-api/staticHandler.js +0 -55
  255. package/dist/storage-content-api/staticHandler.js.map +0 -1
  256. package/dist/storage-content-api/types.d.ts +0 -10
  257. package/dist/storage-content-api/types.d.ts.map +0 -1
  258. package/dist/storage-content-api/types.js +0 -3
  259. package/dist/storage-content-api/types.js.map +0 -1
  260. package/dist/templates/README.md +0 -19
  261. package/dist/utils/build-lambda-zip.d.ts +0 -14
  262. package/dist/utils/build-lambda-zip.d.ts.map +0 -1
  263. package/dist/utils/build-lambda-zip.js +0 -81
  264. package/dist/utils/build-lambda-zip.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/commands/logout.ts"],"sourcesContent":["import * as p from '@clack/prompts'\nimport pc from 'picocolors'\n\nimport { getTokenStore } from '../auth/token-store.js'\nimport * as log from '../utils/log.js'\n\n/**\n * Options for logout command\n */\nexport interface LogoutCommandOptions {\n /** Enable debug mode */\n debug?: boolean\n}\n\n/**\n * Handle the `@payloadcms/figma logout` command\n *\n * Clears all stored tokens (OAuth and project tokens) after confirmation.\n *\n * @param _options - Command options (unused)\n */\nexport async function logoutCommand(_options: LogoutCommandOptions = {}): Promise<void> {\n const tokenStore = getTokenStore()\n\n const hasTokens = tokenStore.getTokens() !== null\n\n if (!hasTokens) {\n p.log.warn(pc.yellow('No tokens found. Already logged out.'))\n return\n }\n\n // Confirm logout\n const confirmed = await p.confirm({\n initialValue: false,\n message: 'This will clear all OAuth and project tokens. Continue?',\n })\n\n if (p.isCancel(confirmed) || !confirmed) {\n p.log.info('Logout cancelled')\n return\n }\n\n const s = p.spinner()\n s.start('Clearing tokens...')\n\n try {\n // Clear OAuth tokens\n tokenStore.clearTokens()\n // Clear all project tokens\n tokenStore.clearAllProjectTokens()\n s.stop(pc.green('✓ Logged out successfully'))\n p.log.step('All OAuth and project tokens have been cleared')\n } catch (error) {\n s.stop(pc.red('✗ Failed to clear tokens'))\n log.error(error instanceof Error ? error.message : 'Unknown error')\n process.exit(1)\n }\n}\n"],"names":["p","pc","getTokenStore","log","logoutCommand","_options","tokenStore","hasTokens","getTokens","warn","yellow","confirmed","confirm","initialValue","message","isCancel","info","s","spinner","start","clearTokens","clearAllProjectTokens","stop","green","step","error","red","Error","process","exit"],"mappings":"AAAA,YAAYA,OAAO,iBAAgB;AACnC,OAAOC,QAAQ,aAAY;AAE3B,SAASC,aAAa,QAAQ,yBAAwB;AACtD,YAAYC,SAAS,kBAAiB;AAUtC;;;;;;CAMC,GACD,OAAO,eAAeC,cAAcC,WAAiC,CAAC,CAAC;IACrE,MAAMC,aAAaJ;IAEnB,MAAMK,YAAYD,WAAWE,SAAS,OAAO;IAE7C,IAAI,CAACD,WAAW;QACdP,EAAEG,GAAG,CAACM,IAAI,CAACR,GAAGS,MAAM,CAAC;QACrB;IACF;IAEA,iBAAiB;IACjB,MAAMC,YAAY,MAAMX,EAAEY,OAAO,CAAC;QAChCC,cAAc;QACdC,SAAS;IACX;IAEA,IAAId,EAAEe,QAAQ,CAACJ,cAAc,CAACA,WAAW;QACvCX,EAAEG,GAAG,CAACa,IAAI,CAAC;QACX;IACF;IAEA,MAAMC,IAAIjB,EAAEkB,OAAO;IACnBD,EAAEE,KAAK,CAAC;IAER,IAAI;QACF,qBAAqB;QACrBb,WAAWc,WAAW;QACtB,2BAA2B;QAC3Bd,WAAWe,qBAAqB;QAChCJ,EAAEK,IAAI,CAACrB,GAAGsB,KAAK,CAAC;QAChBvB,EAAEG,GAAG,CAACqB,IAAI,CAAC;IACb,EAAE,OAAOC,OAAO;QACdR,EAAEK,IAAI,CAACrB,GAAGyB,GAAG,CAAC;QACdvB,IAAIsB,KAAK,CAACA,iBAAiBE,QAAQF,MAAMX,OAAO,GAAG;QACnDc,QAAQC,IAAI,CAAC;IACf;AACF"}
1
+ {"version":3,"sources":["../../src/commands/logout.ts"],"sourcesContent":["import * as p from '@clack/prompts'\nimport pc from 'picocolors'\n\nimport { TokenStore } from '../auth/token-store.js'\nimport * as log from '../utils/log.js'\n\n/**\n * Options for logout command\n */\nexport interface LogoutCommandOptions {\n /** Enable debug mode */\n debug?: boolean\n}\n\n/**\n * Handle the `@payloadcms/figma logout` command\n *\n * Clears all stored tokens (OAuth and project tokens) after confirmation.\n *\n * @param _options - Command options (unused)\n */\nexport async function logoutCommand(_options: LogoutCommandOptions = {}): Promise<void> {\n const tokenStore = new TokenStore()\n\n const hasTokens = tokenStore.getTokens() !== null\n\n if (!hasTokens) {\n p.log.warn(pc.yellow('No tokens found. Already logged out.'))\n return\n }\n\n // Confirm logout\n const confirmed = await p.confirm({\n initialValue: false,\n message: 'This will clear all OAuth and project tokens. Continue?',\n })\n\n if (p.isCancel(confirmed) || !confirmed) {\n p.log.info('Logout cancelled')\n return\n }\n\n const s = p.spinner()\n s.start('Clearing tokens...')\n\n try {\n // Clear OAuth tokens\n tokenStore.clearTokens()\n // Clear all project tokens\n tokenStore.clearAllProjectTokens()\n s.stop(pc.green('✓ Logged out successfully'))\n p.log.step('All OAuth and project tokens have been cleared')\n } catch (error) {\n s.stop(pc.red('✗ Failed to clear tokens'))\n log.error(error instanceof Error ? error.message : 'Unknown error')\n process.exit(1)\n }\n}\n"],"names":["p","pc","TokenStore","log","logoutCommand","_options","tokenStore","hasTokens","getTokens","warn","yellow","confirmed","confirm","initialValue","message","isCancel","info","s","spinner","start","clearTokens","clearAllProjectTokens","stop","green","step","error","red","Error","process","exit"],"mappings":"AAAA,YAAYA,OAAO,iBAAgB;AACnC,OAAOC,QAAQ,aAAY;AAE3B,SAASC,UAAU,QAAQ,yBAAwB;AACnD,YAAYC,SAAS,kBAAiB;AAUtC;;;;;;CAMC,GACD,OAAO,eAAeC,cAAcC,WAAiC,CAAC,CAAC;IACrE,MAAMC,aAAa,IAAIJ;IAEvB,MAAMK,YAAYD,WAAWE,SAAS,OAAO;IAE7C,IAAI,CAACD,WAAW;QACdP,EAAEG,GAAG,CAACM,IAAI,CAACR,GAAGS,MAAM,CAAC;QACrB;IACF;IAEA,iBAAiB;IACjB,MAAMC,YAAY,MAAMX,EAAEY,OAAO,CAAC;QAChCC,cAAc;QACdC,SAAS;IACX;IAEA,IAAId,EAAEe,QAAQ,CAACJ,cAAc,CAACA,WAAW;QACvCX,EAAEG,GAAG,CAACa,IAAI,CAAC;QACX;IACF;IAEA,MAAMC,IAAIjB,EAAEkB,OAAO;IACnBD,EAAEE,KAAK,CAAC;IAER,IAAI;QACF,qBAAqB;QACrBb,WAAWc,WAAW;QACtB,2BAA2B;QAC3Bd,WAAWe,qBAAqB;QAChCJ,EAAEK,IAAI,CAACrB,GAAGsB,KAAK,CAAC;QAChBvB,EAAEG,GAAG,CAACqB,IAAI,CAAC;IACb,EAAE,OAAOC,OAAO;QACdR,EAAEK,IAAI,CAACrB,GAAGyB,GAAG,CAAC;QACdvB,IAAIsB,KAAK,CAACA,iBAAiBE,QAAQF,MAAMX,OAAO,GAAG;QACnDc,QAAQC,IAAI,CAAC;IACf;AACF"}
@@ -1,9 +1,19 @@
1
1
  import type { OAuthConfig } from '../auth/types.js';
2
- export declare const DEFAULT_CALLBACK_PORT = 34462;
2
+ export declare const URLS: Record<'prod' | 'staging', Pick<OAuthConfig, 'authorizationUrl' | 'refreshUrl' | 'tokenUrl'>>;
3
3
  /**
4
- * Get OAuth configuration for current environment
5
- * Uses getEnvironment() to determine staging vs production
4
+ * Figma OAuth2 configuration for public CLI client
5
+ *
6
+ * This is a PUBLIC OAuth client using PKCE (Proof Key for Code Exchange).
7
+ * No client secret is used because CLIs cannot securely store secrets.
8
+ * PKCE provides security through the code_verifier/code_challenge mechanism.
9
+ *
10
+ * For production use, register a public OAuth app with Figma.
11
+ * To register an OAuth app, visit: https://www.figma.com/developers/api#oauth2
12
+ */
13
+ export declare const OAUTH_CONFIG: OAuthConfig;
14
+ /**
15
+ * Buffer time (in seconds) before token expiration to consider token as expired
16
+ * This helps avoid using tokens that are about to expire
6
17
  */
7
- export declare function getOAuthConfig(): OAuthConfig;
8
18
  export declare const TOKEN_EXPIRY_BUFFER_SECONDS = 300;
9
19
  //# sourceMappingURL=oauth.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"oauth.d.ts","sourceRoot":"","sources":["../../src/config/oauth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAInD,eAAO,MAAM,qBAAqB,QAAQ,CAAA;AAE1C;;;GAGG;AACH,wBAAgB,cAAc,IAAI,WAAW,CAa5C;AAED,eAAO,MAAM,2BAA2B,MAAM,CAAA"}
1
+ {"version":3,"file":"oauth.d.ts","sourceRoot":"","sources":["../../src/config/oauth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAInD,eAAO,MAAM,IAAI,EAAE,MAAM,CACvB,MAAM,GAAG,SAAS,EAClB,IAAI,CAAC,WAAW,EAAE,kBAAkB,GAAG,YAAY,GAAG,UAAU,CAAC,CAYlE,CAAA;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,YAAY,EAAE,WAe1B,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,2BAA2B,MAAM,CAAA"}
@@ -1,22 +1,43 @@
1
- import { ENV_CONFIG, getEnvironment } from '../constants.js';
2
- export const DEFAULT_CALLBACK_PORT = 34462;
1
+ import { FIGMA_CLIENT_IDS } from '../constants.js';
2
+ export const URLS = {
3
+ prod: {
4
+ authorizationUrl: 'https://www.figma.com/oauth',
5
+ refreshUrl: 'https://api.figma.com/v1/oauth/refresh',
6
+ tokenUrl: 'https://api.figma.com/v1/oauth/token'
7
+ },
8
+ staging: {
9
+ authorizationUrl: 'https://staging.figma.com/oauth',
10
+ refreshUrl: 'https://api.staging.figma.com/v1/oauth/refresh',
11
+ tokenUrl: 'https://api.staging.figma.com/v1/oauth/token'
12
+ }
13
+ };
3
14
  /**
4
- * Get OAuth configuration for current environment
5
- * Uses getEnvironment() to determine staging vs production
6
- */ export function getOAuthConfig() {
7
- const env = getEnvironment();
8
- const { apiBaseUrl, authorizationUrl, clientId } = ENV_CONFIG[env];
9
- return {
10
- authorizationUrl,
11
- clientId: process.env.FIGMA_CLIENT_ID || clientId,
12
- redirectUri: process.env.FIGMA_REDIRECT_URI || `http://localhost:${DEFAULT_CALLBACK_PORT}/callback`,
13
- refreshUrl: `${apiBaseUrl}/v1/oauth/refresh`,
14
- scopes: [
15
- 'current_user:read'
16
- ],
17
- tokenUrl: `${apiBaseUrl}/v1/oauth/token`
18
- };
19
- }
20
- export const TOKEN_EXPIRY_BUFFER_SECONDS = 300;
15
+ * Figma OAuth2 configuration for public CLI client
16
+ *
17
+ * This is a PUBLIC OAuth client using PKCE (Proof Key for Code Exchange).
18
+ * No client secret is used because CLIs cannot securely store secrets.
19
+ * PKCE provides security through the code_verifier/code_challenge mechanism.
20
+ *
21
+ * For production use, register a public OAuth app with Figma.
22
+ * To register an OAuth app, visit: https://www.figma.com/developers/api#oauth2
23
+ */ export const OAUTH_CONFIG = {
24
+ // OAuth client ID (public client)
25
+ // Uses staging client ID by default since we use staging endpoints
26
+ clientId: process.env.FIGMA_CLIENT_ID || FIGMA_CLIENT_IDS.staging,
27
+ // No client secret - this is a public OAuth client using PKCE
28
+ // Public clients cannot securely store secrets in CLI environments
29
+ redirectUri: process.env.FIGMA_REDIRECT_URI || 'http://localhost:3000/callback',
30
+ // Only current_user:read scope is needed for basic user info
31
+ scopes: [
32
+ 'current_user:read'
33
+ ],
34
+ // TODO: Dynamically choose between prod and staging based on environment
35
+ ...URLS.staging
36
+ };
37
+ /**
38
+ * Buffer time (in seconds) before token expiration to consider token as expired
39
+ * This helps avoid using tokens that are about to expire
40
+ */ export const TOKEN_EXPIRY_BUFFER_SECONDS = 300 // 5 minutes
41
+ ;
21
42
 
22
43
  //# sourceMappingURL=oauth.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/config/oauth.ts"],"sourcesContent":["import type { OAuthConfig } from '../auth/types.js'\n\nimport { ENV_CONFIG, getEnvironment } from '../constants.js'\n\nexport const DEFAULT_CALLBACK_PORT = 34462\n\n/**\n * Get OAuth configuration for current environment\n * Uses getEnvironment() to determine staging vs production\n */\nexport function getOAuthConfig(): OAuthConfig {\n const env = getEnvironment()\n const { apiBaseUrl, authorizationUrl, clientId } = ENV_CONFIG[env]\n\n return {\n authorizationUrl,\n clientId: process.env.FIGMA_CLIENT_ID || clientId,\n redirectUri:\n process.env.FIGMA_REDIRECT_URI || `http://localhost:${DEFAULT_CALLBACK_PORT}/callback`,\n refreshUrl: `${apiBaseUrl}/v1/oauth/refresh`,\n scopes: ['current_user:read'],\n tokenUrl: `${apiBaseUrl}/v1/oauth/token`,\n }\n}\n\nexport const TOKEN_EXPIRY_BUFFER_SECONDS = 300\n"],"names":["ENV_CONFIG","getEnvironment","DEFAULT_CALLBACK_PORT","getOAuthConfig","env","apiBaseUrl","authorizationUrl","clientId","process","FIGMA_CLIENT_ID","redirectUri","FIGMA_REDIRECT_URI","refreshUrl","scopes","tokenUrl","TOKEN_EXPIRY_BUFFER_SECONDS"],"mappings":"AAEA,SAASA,UAAU,EAAEC,cAAc,QAAQ,kBAAiB;AAE5D,OAAO,MAAMC,wBAAwB,MAAK;AAE1C;;;CAGC,GACD,OAAO,SAASC;IACd,MAAMC,MAAMH;IACZ,MAAM,EAAEI,UAAU,EAAEC,gBAAgB,EAAEC,QAAQ,EAAE,GAAGP,UAAU,CAACI,IAAI;IAElE,OAAO;QACLE;QACAC,UAAUC,QAAQJ,GAAG,CAACK,eAAe,IAAIF;QACzCG,aACEF,QAAQJ,GAAG,CAACO,kBAAkB,IAAI,CAAC,iBAAiB,EAAET,sBAAsB,SAAS,CAAC;QACxFU,YAAY,GAAGP,WAAW,iBAAiB,CAAC;QAC5CQ,QAAQ;YAAC;SAAoB;QAC7BC,UAAU,GAAGT,WAAW,eAAe,CAAC;IAC1C;AACF;AAEA,OAAO,MAAMU,8BAA8B,IAAG"}
1
+ {"version":3,"sources":["../../src/config/oauth.ts"],"sourcesContent":["import type { OAuthConfig } from '../auth/types.js'\n\nimport { FIGMA_CLIENT_IDS } from '../constants.js'\n\nexport const URLS: Record<\n 'prod' | 'staging',\n Pick<OAuthConfig, 'authorizationUrl' | 'refreshUrl' | 'tokenUrl'>\n> = {\n prod: {\n authorizationUrl: 'https://www.figma.com/oauth',\n refreshUrl: 'https://api.figma.com/v1/oauth/refresh',\n tokenUrl: 'https://api.figma.com/v1/oauth/token',\n },\n staging: {\n authorizationUrl: 'https://staging.figma.com/oauth',\n refreshUrl: 'https://api.staging.figma.com/v1/oauth/refresh',\n tokenUrl: 'https://api.staging.figma.com/v1/oauth/token',\n },\n}\n\n/**\n * Figma OAuth2 configuration for public CLI client\n *\n * This is a PUBLIC OAuth client using PKCE (Proof Key for Code Exchange).\n * No client secret is used because CLIs cannot securely store secrets.\n * PKCE provides security through the code_verifier/code_challenge mechanism.\n *\n * For production use, register a public OAuth app with Figma.\n * To register an OAuth app, visit: https://www.figma.com/developers/api#oauth2\n */\nexport const OAUTH_CONFIG: OAuthConfig = {\n // OAuth client ID (public client)\n // Uses staging client ID by default since we use staging endpoints\n clientId: process.env.FIGMA_CLIENT_ID || FIGMA_CLIENT_IDS.staging,\n\n // No client secret - this is a public OAuth client using PKCE\n // Public clients cannot securely store secrets in CLI environments\n\n redirectUri: process.env.FIGMA_REDIRECT_URI || 'http://localhost:3000/callback',\n\n // Only current_user:read scope is needed for basic user info\n scopes: ['current_user:read'],\n\n // TODO: Dynamically choose between prod and staging based on environment\n ...URLS.staging,\n}\n\n/**\n * Buffer time (in seconds) before token expiration to consider token as expired\n * This helps avoid using tokens that are about to expire\n */\nexport const TOKEN_EXPIRY_BUFFER_SECONDS = 300 // 5 minutes\n"],"names":["FIGMA_CLIENT_IDS","URLS","prod","authorizationUrl","refreshUrl","tokenUrl","staging","OAUTH_CONFIG","clientId","process","env","FIGMA_CLIENT_ID","redirectUri","FIGMA_REDIRECT_URI","scopes","TOKEN_EXPIRY_BUFFER_SECONDS"],"mappings":"AAEA,SAASA,gBAAgB,QAAQ,kBAAiB;AAElD,OAAO,MAAMC,OAGT;IACFC,MAAM;QACJC,kBAAkB;QAClBC,YAAY;QACZC,UAAU;IACZ;IACAC,SAAS;QACPH,kBAAkB;QAClBC,YAAY;QACZC,UAAU;IACZ;AACF,EAAC;AAED;;;;;;;;;CASC,GACD,OAAO,MAAME,eAA4B;IACvC,kCAAkC;IAClC,mEAAmE;IACnEC,UAAUC,QAAQC,GAAG,CAACC,eAAe,IAAIX,iBAAiBM,OAAO;IAEjE,8DAA8D;IAC9D,mEAAmE;IAEnEM,aAAaH,QAAQC,GAAG,CAACG,kBAAkB,IAAI;IAE/C,6DAA6D;IAC7DC,QAAQ;QAAC;KAAoB;IAE7B,yEAAyE;IACzE,GAAGb,KAAKK,OAAO;AACjB,EAAC;AAED;;;CAGC,GACD,OAAO,MAAMS,8BAA8B,IAAI,YAAY;CAAb"}
@@ -1,35 +1,27 @@
1
+ export declare const FIGMA_CLIENT_IDS: {
2
+ production: string;
3
+ staging: string;
4
+ };
5
+ export declare const JWKS_URI: {
6
+ production: string;
7
+ staging: string;
8
+ };
1
9
  /**
2
10
  * Figma environment (production or staging)
3
11
  */
4
12
  export type Environment = 'production' | 'staging';
5
- type EnvironmentConfig = {
6
- /** Figma API base URL. Override: FIGMA_API_BASE_URL */
7
- apiBaseUrl: string;
8
- /** OAuth authorization URL (CLI auth) */
9
- authorizationUrl: string;
10
- /** OAuth client ID. Override: FIGMA_CLIENT_ID or FIGMA_OAUTH_CLIENT_ID */
11
- clientId: string;
12
- /** Content API base URL. Override: FIGMA_CONTENT_API_URL */
13
- contentApiUrl: string;
14
- /** OIDC discovery endpoint */
15
- identityMetadata: string;
16
- /** JSON Web Key Set URL for token validation */
17
- jwksUri: string;
18
- };
19
13
  /**
20
- * Environment-specific configuration for Figma integration.
21
- * Selected via FIGMA_ENV ('production' | 'staging'), defaults to 'production'.
14
+ * Get current Figma environment from environment variable
15
+ * Defaults to 'staging' if not specified
16
+ *
17
+ * @returns Current environment
22
18
  */
23
- export declare const ENV_CONFIG: Record<Environment, EnvironmentConfig>;
24
- /**
25
- * Set environment override (used by --env CLI flag)
26
- * Pass undefined to clear the override
27
- */
28
- export declare function setEnvironment(env: Environment | undefined): void;
19
+ export declare function getEnvironment(): Environment;
29
20
  /**
30
- * Get current Figma environment
31
- * Priority: 1) setEnvironment override, 2) FIGMA_ENV env var, 3) 'production' default
21
+ * Get JWKS URI for a given environment
22
+ *
23
+ * @param env - Environment (defaults to current environment)
24
+ * @returns JWKS URI for the environment
32
25
  */
33
- export declare function getEnvironment(): Environment;
34
- export {};
26
+ export declare function getJWKSUri(env?: Environment): string;
35
27
  //# sourceMappingURL=constants.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,YAAY,GAAG,SAAS,CAAA;AAElD,KAAK,iBAAiB,GAAG;IACvB,uDAAuD;IACvD,UAAU,EAAE,MAAM,CAAA;IAClB,yCAAyC;IACzC,gBAAgB,EAAE,MAAM,CAAA;IACxB,0EAA0E;IAC1E,QAAQ,EAAE,MAAM,CAAA;IAChB,4DAA4D;IAC5D,aAAa,EAAE,MAAM,CAAA;IACrB,8BAA8B;IAC9B,gBAAgB,EAAE,MAAM,CAAA;IACxB,gDAAgD;IAChD,OAAO,EAAE,MAAM,CAAA;CAChB,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,UAAU,EAAE,MAAM,CAAC,WAAW,EAAE,iBAAiB,CAiB7D,CAAA;AAID;;;GAGG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,WAAW,GAAG,SAAS,GAAG,IAAI,CAEjE;AAED;;;GAGG;AACH,wBAAgB,cAAc,IAAI,WAAW,CAK5C"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,gBAAgB;;;CAG5B,CAAA;AAED,eAAO,MAAM,QAAQ;;;CAGpB,CAAA;AAED;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,YAAY,GAAG,SAAS,CAAA;AAElD;;;;;GAKG;AACH,wBAAgB,cAAc,IAAI,WAAW,CAE5C;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,GAAG,CAAC,EAAE,WAAW,GAAG,MAAM,CAGpD"}
package/dist/constants.js CHANGED
@@ -1,41 +1,27 @@
1
- /**
2
- * Figma environment (production or staging)
3
- */ /**
4
- * Environment-specific configuration for Figma integration.
5
- * Selected via FIGMA_ENV ('production' | 'staging'), defaults to 'production'.
6
- */ export const ENV_CONFIG = {
7
- production: {
8
- apiBaseUrl: 'https://api.figma.com',
9
- authorizationUrl: 'https://www.figma.com/oauth',
10
- clientId: 'lelKVTAzOekFnirnlAMbuD',
11
- contentApiUrl: 'https://us-east-1.cms-tenants-001-production.figmacontent.com',
12
- identityMetadata: 'https://www.figma.com/.well-known/openid-configuration',
13
- jwksUri: 'https://static.figmacontent.com/.well_known/jwks.json'
14
- },
15
- staging: {
16
- apiBaseUrl: 'https://api.staging.figma.com',
17
- authorizationUrl: 'https://staging.figma.com/oauth',
18
- clientId: 'wqAToBAp4UI9AZ5M6wTfT9',
19
- contentApiUrl: 'https://us-east-1.cms-tenants-001-staging.figmacontentstaging.com',
20
- identityMetadata: 'https://staging.figma.com/.well-known/openid-configuration',
21
- jwksUri: 'https://static.figmacontentstaging.com/.well_known/jwks.json'
22
- }
1
+ export const FIGMA_CLIENT_IDS = {
2
+ production: '',
3
+ staging: 'wqAToBAp4UI9AZ5M6wTfT9'
4
+ };
5
+ export const JWKS_URI = {
6
+ production: 'https://static.figmacontent.com/.well_known/jwks.json',
7
+ staging: 'https://static.figmacontentstaging.com/.well_known/jwks.json'
23
8
  };
24
- let envOverride;
25
9
  /**
26
- * Set environment override (used by --env CLI flag)
27
- * Pass undefined to clear the override
28
- */ export function setEnvironment(env) {
29
- envOverride = env;
10
+ * Get current Figma environment from environment variable
11
+ * Defaults to 'staging' if not specified
12
+ *
13
+ * @returns Current environment
14
+ */ export function getEnvironment() {
15
+ return process.env.FIGMA_ENV === 'production' ? 'production' : 'staging';
30
16
  }
31
17
  /**
32
- * Get current Figma environment
33
- * Priority: 1) setEnvironment override, 2) FIGMA_ENV env var, 3) 'production' default
34
- */ export function getEnvironment() {
35
- if (envOverride) {
36
- return envOverride;
37
- }
38
- return process.env.FIGMA_ENV === 'staging' ? 'staging' : 'production';
18
+ * Get JWKS URI for a given environment
19
+ *
20
+ * @param env - Environment (defaults to current environment)
21
+ * @returns JWKS URI for the environment
22
+ */ export function getJWKSUri(env) {
23
+ const environment = env || getEnvironment();
24
+ return JWKS_URI[environment];
39
25
  }
40
26
 
41
27
  //# sourceMappingURL=constants.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/constants.ts"],"sourcesContent":["/**\n * Figma environment (production or staging)\n */\nexport type Environment = 'production' | 'staging'\n\ntype EnvironmentConfig = {\n /** Figma API base URL. Override: FIGMA_API_BASE_URL */\n apiBaseUrl: string\n /** OAuth authorization URL (CLI auth) */\n authorizationUrl: string\n /** OAuth client ID. Override: FIGMA_CLIENT_ID or FIGMA_OAUTH_CLIENT_ID */\n clientId: string\n /** Content API base URL. Override: FIGMA_CONTENT_API_URL */\n contentApiUrl: string\n /** OIDC discovery endpoint */\n identityMetadata: string\n /** JSON Web Key Set URL for token validation */\n jwksUri: string\n}\n\n/**\n * Environment-specific configuration for Figma integration.\n * Selected via FIGMA_ENV ('production' | 'staging'), defaults to 'production'.\n */\nexport const ENV_CONFIG: Record<Environment, EnvironmentConfig> = {\n production: {\n apiBaseUrl: 'https://api.figma.com',\n authorizationUrl: 'https://www.figma.com/oauth',\n clientId: 'lelKVTAzOekFnirnlAMbuD',\n contentApiUrl: 'https://us-east-1.cms-tenants-001-production.figmacontent.com',\n identityMetadata: 'https://www.figma.com/.well-known/openid-configuration',\n jwksUri: 'https://static.figmacontent.com/.well_known/jwks.json',\n },\n staging: {\n apiBaseUrl: 'https://api.staging.figma.com',\n authorizationUrl: 'https://staging.figma.com/oauth',\n clientId: 'wqAToBAp4UI9AZ5M6wTfT9',\n contentApiUrl: 'https://us-east-1.cms-tenants-001-staging.figmacontentstaging.com',\n identityMetadata: 'https://staging.figma.com/.well-known/openid-configuration',\n jwksUri: 'https://static.figmacontentstaging.com/.well_known/jwks.json',\n },\n}\n\nlet envOverride: Environment | undefined\n\n/**\n * Set environment override (used by --env CLI flag)\n * Pass undefined to clear the override\n */\nexport function setEnvironment(env: Environment | undefined): void {\n envOverride = env\n}\n\n/**\n * Get current Figma environment\n * Priority: 1) setEnvironment override, 2) FIGMA_ENV env var, 3) 'production' default\n */\nexport function getEnvironment(): Environment {\n if (envOverride) {\n return envOverride\n }\n return process.env.FIGMA_ENV === 'staging' ? 'staging' : 'production'\n}\n"],"names":["ENV_CONFIG","production","apiBaseUrl","authorizationUrl","clientId","contentApiUrl","identityMetadata","jwksUri","staging","envOverride","setEnvironment","env","getEnvironment","process","FIGMA_ENV"],"mappings":"AAAA;;CAEC,GAkBD;;;CAGC,GACD,OAAO,MAAMA,aAAqD;IAChEC,YAAY;QACVC,YAAY;QACZC,kBAAkB;QAClBC,UAAU;QACVC,eAAe;QACfC,kBAAkB;QAClBC,SAAS;IACX;IACAC,SAAS;QACPN,YAAY;QACZC,kBAAkB;QAClBC,UAAU;QACVC,eAAe;QACfC,kBAAkB;QAClBC,SAAS;IACX;AACF,EAAC;AAED,IAAIE;AAEJ;;;CAGC,GACD,OAAO,SAASC,eAAeC,GAA4B;IACzDF,cAAcE;AAChB;AAEA;;;CAGC,GACD,OAAO,SAASC;IACd,IAAIH,aAAa;QACf,OAAOA;IACT;IACA,OAAOI,QAAQF,GAAG,CAACG,SAAS,KAAK,YAAY,YAAY;AAC3D"}
1
+ {"version":3,"sources":["../src/constants.ts"],"sourcesContent":["export const FIGMA_CLIENT_IDS = {\n production: '',\n staging: 'wqAToBAp4UI9AZ5M6wTfT9', // Hard-coded staging client ID\n}\n\nexport const JWKS_URI = {\n production: 'https://static.figmacontent.com/.well_known/jwks.json',\n staging: 'https://static.figmacontentstaging.com/.well_known/jwks.json',\n}\n\n/**\n * Figma environment (production or staging)\n */\nexport type Environment = 'production' | 'staging'\n\n/**\n * Get current Figma environment from environment variable\n * Defaults to 'staging' if not specified\n *\n * @returns Current environment\n */\nexport function getEnvironment(): Environment {\n return process.env.FIGMA_ENV === 'production' ? 'production' : 'staging'\n}\n\n/**\n * Get JWKS URI for a given environment\n *\n * @param env - Environment (defaults to current environment)\n * @returns JWKS URI for the environment\n */\nexport function getJWKSUri(env?: Environment): string {\n const environment = env || getEnvironment()\n return JWKS_URI[environment]\n}\n"],"names":["FIGMA_CLIENT_IDS","production","staging","JWKS_URI","getEnvironment","process","env","FIGMA_ENV","getJWKSUri","environment"],"mappings":"AAAA,OAAO,MAAMA,mBAAmB;IAC9BC,YAAY;IACZC,SAAS;AACX,EAAC;AAED,OAAO,MAAMC,WAAW;IACtBF,YAAY;IACZC,SAAS;AACX,EAAC;AAOD;;;;;CAKC,GACD,OAAO,SAASE;IACd,OAAOC,QAAQC,GAAG,CAACC,SAAS,KAAK,eAAe,eAAe;AACjE;AAEA;;;;;CAKC,GACD,OAAO,SAASC,WAAWF,GAAiB;IAC1C,MAAMG,cAAcH,OAAOF;IAC3B,OAAOD,QAAQ,CAACM,YAAY;AAC9B"}
package/dist/index.d.ts CHANGED
@@ -1,6 +1,5 @@
1
- export { contentAPIAdapter } from './db-content-api/index.js';
2
1
  export { figmaContentSystem } from './plugin/adapter.js';
3
2
  export type { FigmaContentSystemOptions } from './plugin/adapter.js';
4
- export { buildFigmaConfig } from './plugin/build-config.js';
3
+ export { buildConfig } from './plugin/build-config.js';
5
4
  export type { FigmaConfig } from './plugin/build-config.js';
6
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAA;AAG7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAA;AACxD,YAAY,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAA;AAGpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAC3D,YAAY,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAA;AACxD,YAAY,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAA;AAGpE,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AACtD,YAAY,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA"}
package/dist/index.js CHANGED
@@ -1,8 +1,6 @@
1
- // Export contentAPIAdapter for testing use cases
2
- export { contentAPIAdapter } from './db-content-api/index.js';
3
1
  // Export database adapter for advanced use cases
4
2
  export { figmaContentSystem } from './plugin/adapter.js';
5
3
  // Export buildConfig wrapper and its config type
6
- export { buildFigmaConfig } from './plugin/build-config.js';
4
+ export { buildConfig } from './plugin/build-config.js';
7
5
 
8
6
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["// Export contentAPIAdapter for testing use cases\nexport { contentAPIAdapter } from './db-content-api/index.js'\n\n// Export database adapter for advanced use cases\nexport { figmaContentSystem } from './plugin/adapter.js'\nexport type { FigmaContentSystemOptions } from './plugin/adapter.js'\n\n// Export buildConfig wrapper and its config type\nexport { buildFigmaConfig } from './plugin/build-config.js'\nexport type { FigmaConfig } from './plugin/build-config.js'\n"],"names":["contentAPIAdapter","figmaContentSystem","buildFigmaConfig"],"mappings":"AAAA,iDAAiD;AACjD,SAASA,iBAAiB,QAAQ,4BAA2B;AAE7D,iDAAiD;AACjD,SAASC,kBAAkB,QAAQ,sBAAqB;AAGxD,iDAAiD;AACjD,SAASC,gBAAgB,QAAQ,2BAA0B"}
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["// Export database adapter for advanced use cases\nexport { figmaContentSystem } from './plugin/adapter.js'\nexport type { FigmaContentSystemOptions } from './plugin/adapter.js'\n\n// Export buildConfig wrapper and its config type\nexport { buildConfig } from './plugin/build-config.js'\nexport type { FigmaConfig } from './plugin/build-config.js'\n"],"names":["figmaContentSystem","buildConfig"],"mappings":"AAAA,iDAAiD;AACjD,SAASA,kBAAkB,QAAQ,sBAAqB;AAGxD,iDAAiD;AACjD,SAASC,WAAW,QAAQ,2BAA0B"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/oauth/components/LoginButton/index.tsx"],"names":[],"mappings":"AAIA,OAAO,KAA8B,MAAM,OAAO,CAAA;AAElD,OAAO,cAAc,CAAA;AAgDrB,KAAK,uBAAuB,GAAG;IAC7B,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,YAAY,EAAE,MAAM,CAAA;CACrB,CAAA;AAED,eAAO,MAAM,kBAAkB,EAAE,KAAK,CAAC,EAAE,CAAC,uBAAuB,CAqDhE,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/oauth/components/LoginButton/index.tsx"],"names":[],"mappings":"AAIA,OAAO,KAA8B,MAAM,OAAO,CAAA;AAElD,OAAO,cAAc,CAAA;AAIrB,KAAK,uBAAuB,GAAG;IAC7B,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,YAAY,EAAE,MAAM,CAAA;CACrB,CAAA;AAED,eAAO,MAAM,kBAAkB,EAAE,KAAK,CAAC,EAAE,CAAC,uBAAuB,CAoDhE,CAAA"}
@@ -1,49 +1,10 @@
1
1
  'use client';
2
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
- import { useConfig } from '@payloadcms/ui';
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { Button, useConfig } from '@payloadcms/ui';
4
4
  import { useSearchParams } from 'next/navigation.js';
5
5
  import React, { useEffect, useState } from 'react';
6
6
  import './index.scss';
7
7
  const baseClass = 'oauth-login';
8
- // Figma logo SVG colored version
9
- // const FigmaIcon: React.FC = () => (
10
- // <svg fill="none" height="27" viewBox="0 0 400 600" width="18">
11
- // <path
12
- // d="M0 500C0 444.772 44.772 400 100 400H200V500C200 555.228 155.228 600 100 600C44.772 600 0 555.228 0 500Z"
13
- // fill="#24CB71"
14
- // />
15
- // <path
16
- // d="M200 0V200H300C355.228 200 400 155.228 400 100C400 44.772 355.228 0 300 0H200Z"
17
- // fill="#FF7237"
18
- // />
19
- // <path
20
- // d="M299.167 400C354.395 400 399.167 355.228 399.167 300C399.167 244.772 354.395 200 299.167 200C243.939 200 199.167 244.772 199.167 300C199.167 355.228 243.939 400 299.167 400Z"
21
- // fill="#00B6FF"
22
- // />
23
- // <path
24
- // d="M0 100C0 155.228 44.772 200 100 200H200V0H100C44.772 0 0 44.772 0 100Z"
25
- // fill="#FF3737"
26
- // />
27
- // <path
28
- // d="M0 300C0 355.228 44.772 400 100 400H200V200H100C44.772 200 0 244.772 0 300Z"
29
- // fill="#874FFF"
30
- // />
31
- // </svg>
32
- // )
33
- // Figma logo SVG monochrome version
34
- const FigmaIcon = ()=>/*#__PURE__*/ _jsx("svg", {
35
- fill: "none",
36
- height: "20px",
37
- viewBox: "0 0 15 15",
38
- width: "20px",
39
- xmlns: "http://www.w3.org/2000/svg",
40
- children: /*#__PURE__*/ _jsx("path", {
41
- clipRule: "evenodd",
42
- d: "M7.00005 2.04999H5.52505C4.71043 2.04999 4.05005 2.71037 4.05005 3.52499C4.05005 4.33961 4.71043 4.99999 5.52505 4.99999H7.00005V2.04999ZM7.00005 1.04999H8.00005H9.47505C10.842 1.04999 11.95 2.15808 11.95 3.52499C11.95 4.33163 11.5642 5.04815 10.9669 5.49999C11.5642 5.95184 11.95 6.66836 11.95 7.475C11.95 8.8419 10.842 9.95 9.47505 9.95C8.92236 9.95 8.41198 9.76884 8.00005 9.46266V9.95L8.00005 11.425C8.00005 12.7919 6.89195 13.9 5.52505 13.9C4.15814 13.9 3.05005 12.7919 3.05005 11.425C3.05005 10.6183 3.43593 9.90184 4.03317 9.44999C3.43593 8.99814 3.05005 8.28163 3.05005 7.475C3.05005 6.66836 3.43594 5.95184 4.03319 5.5C3.43594 5.04815 3.05005 4.33163 3.05005 3.52499C3.05005 2.15808 4.15814 1.04999 5.52505 1.04999H7.00005ZM8.00005 2.04999V4.99999H9.47505C10.2897 4.99999 10.95 4.33961 10.95 3.52499C10.95 2.71037 10.2897 2.04999 9.47505 2.04999H8.00005ZM5.52505 8.94998H7.00005L7.00005 7.4788L7.00005 7.475L7.00005 7.4712V6H5.52505C4.71043 6 4.05005 6.66038 4.05005 7.475C4.05005 8.28767 4.70727 8.94684 5.5192 8.94999L5.52505 8.94998ZM4.05005 11.425C4.05005 10.6123 4.70727 9.95315 5.5192 9.94999L5.52505 9.95H7.00005L7.00005 11.425C7.00005 12.2396 6.33967 12.9 5.52505 12.9C4.71043 12.9 4.05005 12.2396 4.05005 11.425ZM8.00005 7.47206C8.00164 6.65879 8.66141 6 9.47505 6C10.2897 6 10.95 6.66038 10.95 7.475C10.95 8.28962 10.2897 8.95 9.47505 8.95C8.66141 8.95 8.00164 8.29121 8.00005 7.47794V7.47206Z",
43
- fill: "#FFFFFF",
44
- fillRule: "evenodd"
45
- })
46
- });
47
8
  export const DefaultLoginButton = ({ disabled, endpointSlug })=>{
48
9
  const { config: { admin: { user: userSlug }, routes: { api }, serverURL } } = useConfig();
49
10
  const [authorizeURL, setAuthorizeURL] = useState('');
@@ -79,16 +40,11 @@ export const DefaultLoginButton = ({ disabled, endpointSlug })=>{
79
40
  }
80
41
  return /*#__PURE__*/ _jsx("div", {
81
42
  className: baseClass,
82
- children: /*#__PURE__*/ _jsxs("a", {
43
+ children: /*#__PURE__*/ _jsx(Button, {
83
44
  className: `${baseClass}__btn`,
84
- href: authorizeURL,
85
- children: [
86
- /*#__PURE__*/ _jsx(FigmaIcon, {}),
87
- /*#__PURE__*/ _jsx("span", {
88
- className: `${baseClass}__text`,
89
- children: "Log in with Figma"
90
- })
91
- ]
45
+ el: "anchor",
46
+ url: authorizeURL,
47
+ children: "Log in"
92
48
  })
93
49
  });
94
50
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/oauth/components/LoginButton/index.tsx"],"sourcesContent":["'use client'\n\nimport { useConfig } from '@payloadcms/ui'\nimport { useSearchParams } from 'next/navigation.js'\nimport React, { useEffect, useState } from 'react'\n\nimport './index.scss'\n\nconst baseClass = 'oauth-login'\n\n// Figma logo SVG colored version\n// const FigmaIcon: React.FC = () => (\n// <svg fill=\"none\" height=\"27\" viewBox=\"0 0 400 600\" width=\"18\">\n// <path\n// d=\"M0 500C0 444.772 44.772 400 100 400H200V500C200 555.228 155.228 600 100 600C44.772 600 0 555.228 0 500Z\"\n// fill=\"#24CB71\"\n// />\n// <path\n// d=\"M200 0V200H300C355.228 200 400 155.228 400 100C400 44.772 355.228 0 300 0H200Z\"\n// fill=\"#FF7237\"\n// />\n// <path\n// d=\"M299.167 400C354.395 400 399.167 355.228 399.167 300C399.167 244.772 354.395 200 299.167 200C243.939 200 199.167 244.772 199.167 300C199.167 355.228 243.939 400 299.167 400Z\"\n// fill=\"#00B6FF\"\n// />\n// <path\n// d=\"M0 100C0 155.228 44.772 200 100 200H200V0H100C44.772 0 0 44.772 0 100Z\"\n// fill=\"#FF3737\"\n// />\n// <path\n// d=\"M0 300C0 355.228 44.772 400 100 400H200V200H100C44.772 200 0 244.772 0 300Z\"\n// fill=\"#874FFF\"\n// />\n// </svg>\n// )\n\n// Figma logo SVG monochrome version\nconst FigmaIcon: React.FC = () => (\n <svg\n fill=\"none\"\n height=\"20px\"\n viewBox=\"0 0 15 15\"\n width=\"20px\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n clipRule=\"evenodd\"\n d=\"M7.00005 2.04999H5.52505C4.71043 2.04999 4.05005 2.71037 4.05005 3.52499C4.05005 4.33961 4.71043 4.99999 5.52505 4.99999H7.00005V2.04999ZM7.00005 1.04999H8.00005H9.47505C10.842 1.04999 11.95 2.15808 11.95 3.52499C11.95 4.33163 11.5642 5.04815 10.9669 5.49999C11.5642 5.95184 11.95 6.66836 11.95 7.475C11.95 8.8419 10.842 9.95 9.47505 9.95C8.92236 9.95 8.41198 9.76884 8.00005 9.46266V9.95L8.00005 11.425C8.00005 12.7919 6.89195 13.9 5.52505 13.9C4.15814 13.9 3.05005 12.7919 3.05005 11.425C3.05005 10.6183 3.43593 9.90184 4.03317 9.44999C3.43593 8.99814 3.05005 8.28163 3.05005 7.475C3.05005 6.66836 3.43594 5.95184 4.03319 5.5C3.43594 5.04815 3.05005 4.33163 3.05005 3.52499C3.05005 2.15808 4.15814 1.04999 5.52505 1.04999H7.00005ZM8.00005 2.04999V4.99999H9.47505C10.2897 4.99999 10.95 4.33961 10.95 3.52499C10.95 2.71037 10.2897 2.04999 9.47505 2.04999H8.00005ZM5.52505 8.94998H7.00005L7.00005 7.4788L7.00005 7.475L7.00005 7.4712V6H5.52505C4.71043 6 4.05005 6.66038 4.05005 7.475C4.05005 8.28767 4.70727 8.94684 5.5192 8.94999L5.52505 8.94998ZM4.05005 11.425C4.05005 10.6123 4.70727 9.95315 5.5192 9.94999L5.52505 9.95H7.00005L7.00005 11.425C7.00005 12.2396 6.33967 12.9 5.52505 12.9C4.71043 12.9 4.05005 12.2396 4.05005 11.425ZM8.00005 7.47206C8.00164 6.65879 8.66141 6 9.47505 6C10.2897 6 10.95 6.66038 10.95 7.475C10.95 8.28962 10.2897 8.95 9.47505 8.95C8.66141 8.95 8.00164 8.29121 8.00005 7.47794V7.47206Z\"\n fill=\"#FFFFFF\"\n fillRule=\"evenodd\"\n />\n </svg>\n)\n\ntype DefaultLoginButtonProps = {\n disabled?: boolean\n endpointSlug: string\n}\n\nexport const DefaultLoginButton: React.FC<DefaultLoginButtonProps> = ({\n disabled,\n endpointSlug,\n}: {\n disabled?: boolean\n endpointSlug: string\n}) => {\n const {\n config: {\n admin: { user: userSlug },\n routes: { api },\n serverURL,\n },\n } = useConfig()\n const [authorizeURL, setAuthorizeURL] = useState('')\n\n const searchParams = useSearchParams()\n const payloadRedirect = searchParams.get('redirect')\n\n useEffect(() => {\n if (payloadRedirect && !disabled) {\n // set cookie to redirect to the original page\n document.cookie = `payloadRedirect=${payloadRedirect}; path=/`\n }\n }, [payloadRedirect, disabled])\n\n useEffect(() => {\n const getAuthorizeURL = async () => {\n const serverURLFromWindow = window.location.origin\n const data = await fetch(\n `${serverURL}${api}/${userSlug}/${endpointSlug}/meta?serverURL=${serverURLFromWindow}`,\n ).then((res) => res.json())\n\n if (!disabled) {\n setAuthorizeURL(data.authorizeURL)\n }\n }\n\n void getAuthorizeURL()\n }, [api, serverURL, userSlug, disabled, endpointSlug])\n\n if (disabled) {\n return null\n }\n\n return (\n <div className={baseClass}>\n <a className={`${baseClass}__btn`} href={authorizeURL}>\n <FigmaIcon />\n <span className={`${baseClass}__text`}>Log in with Figma</span>\n </a>\n </div>\n )\n}\n"],"names":["useConfig","useSearchParams","React","useEffect","useState","baseClass","FigmaIcon","svg","fill","height","viewBox","width","xmlns","path","clipRule","d","fillRule","DefaultLoginButton","disabled","endpointSlug","config","admin","user","userSlug","routes","api","serverURL","authorizeURL","setAuthorizeURL","searchParams","payloadRedirect","get","document","cookie","getAuthorizeURL","serverURLFromWindow","window","location","origin","data","fetch","then","res","json","div","className","a","href","span"],"mappings":"AAAA;;AAEA,SAASA,SAAS,QAAQ,iBAAgB;AAC1C,SAASC,eAAe,QAAQ,qBAAoB;AACpD,OAAOC,SAASC,SAAS,EAAEC,QAAQ,QAAQ,QAAO;AAElD,OAAO,eAAc;AAErB,MAAMC,YAAY;AAElB,iCAAiC;AACjC,sCAAsC;AACtC,mEAAmE;AACnE,YAAY;AACZ,oHAAoH;AACpH,uBAAuB;AACvB,SAAS;AACT,YAAY;AACZ,2FAA2F;AAC3F,uBAAuB;AACvB,SAAS;AACT,YAAY;AACZ,0LAA0L;AAC1L,uBAAuB;AACvB,SAAS;AACT,YAAY;AACZ,mFAAmF;AACnF,uBAAuB;AACvB,SAAS;AACT,YAAY;AACZ,wFAAwF;AACxF,uBAAuB;AACvB,SAAS;AACT,WAAW;AACX,IAAI;AAEJ,oCAAoC;AACpC,MAAMC,YAAsB,kBAC1B,KAACC;QACCC,MAAK;QACLC,QAAO;QACPC,SAAQ;QACRC,OAAM;QACNC,OAAM;kBAEN,cAAA,KAACC;YACCC,UAAS;YACTC,GAAE;YACFP,MAAK;YACLQ,UAAS;;;AAUf,OAAO,MAAMC,qBAAwD,CAAC,EACpEC,QAAQ,EACRC,YAAY,EAIb;IACC,MAAM,EACJC,QAAQ,EACNC,OAAO,EAAEC,MAAMC,QAAQ,EAAE,EACzBC,QAAQ,EAAEC,GAAG,EAAE,EACfC,SAAS,EACV,EACF,GAAG1B;IACJ,MAAM,CAAC2B,cAAcC,gBAAgB,GAAGxB,SAAS;IAEjD,MAAMyB,eAAe5B;IACrB,MAAM6B,kBAAkBD,aAAaE,GAAG,CAAC;IAEzC5B,UAAU;QACR,IAAI2B,mBAAmB,CAACZ,UAAU;YAChC,8CAA8C;YAC9Cc,SAASC,MAAM,GAAG,CAAC,gBAAgB,EAAEH,gBAAgB,QAAQ,CAAC;QAChE;IACF,GAAG;QAACA;QAAiBZ;KAAS;IAE9Bf,UAAU;QACR,MAAM+B,kBAAkB;YACtB,MAAMC,sBAAsBC,OAAOC,QAAQ,CAACC,MAAM;YAClD,MAAMC,OAAO,MAAMC,MACjB,GAAGd,YAAYD,IAAI,CAAC,EAAEF,SAAS,CAAC,EAAEJ,aAAa,gBAAgB,EAAEgB,qBAAqB,EACtFM,IAAI,CAAC,CAACC,MAAQA,IAAIC,IAAI;YAExB,IAAI,CAACzB,UAAU;gBACbU,gBAAgBW,KAAKZ,YAAY;YACnC;QACF;QAEA,KAAKO;IACP,GAAG;QAACT;QAAKC;QAAWH;QAAUL;QAAUC;KAAa;IAErD,IAAID,UAAU;QACZ,OAAO;IACT;IAEA,qBACE,KAAC0B;QAAIC,WAAWxC;kBACd,cAAA,MAACyC;YAAED,WAAW,GAAGxC,UAAU,KAAK,CAAC;YAAE0C,MAAMpB;;8BACvC,KAACrB;8BACD,KAAC0C;oBAAKH,WAAW,GAAGxC,UAAU,MAAM,CAAC;8BAAE;;;;;AAI/C,EAAC"}
1
+ {"version":3,"sources":["../../../../src/oauth/components/LoginButton/index.tsx"],"sourcesContent":["'use client'\n\nimport { Button, useConfig } from '@payloadcms/ui'\nimport { useSearchParams } from 'next/navigation.js'\nimport React, { useEffect, useState } from 'react'\n\nimport './index.scss'\n\nconst baseClass = 'oauth-login'\n\ntype DefaultLoginButtonProps = {\n disabled?: boolean\n endpointSlug: string\n}\n\nexport const DefaultLoginButton: React.FC<DefaultLoginButtonProps> = ({\n disabled,\n endpointSlug,\n}: {\n disabled?: boolean\n endpointSlug: string\n}) => {\n const {\n config: {\n admin: { user: userSlug },\n routes: { api },\n serverURL,\n },\n } = useConfig()\n const [authorizeURL, setAuthorizeURL] = useState('')\n\n const searchParams = useSearchParams()\n const payloadRedirect = searchParams.get('redirect')\n\n useEffect(() => {\n if (payloadRedirect && !disabled) {\n // set cookie to redirect to the original page\n document.cookie = `payloadRedirect=${payloadRedirect}; path=/`\n }\n }, [payloadRedirect, disabled])\n\n useEffect(() => {\n const getAuthorizeURL = async () => {\n const serverURLFromWindow = window.location.origin\n const data = await fetch(\n `${serverURL}${api}/${userSlug}/${endpointSlug}/meta?serverURL=${serverURLFromWindow}`,\n ).then((res) => res.json())\n\n if (!disabled) {\n setAuthorizeURL(data.authorizeURL)\n }\n }\n\n void getAuthorizeURL()\n }, [api, serverURL, userSlug, disabled, endpointSlug])\n\n if (disabled) {\n return null\n }\n\n return (\n <div className={baseClass}>\n <Button className={`${baseClass}__btn`} el=\"anchor\" url={authorizeURL}>\n Log in\n </Button>\n </div>\n )\n}\n"],"names":["Button","useConfig","useSearchParams","React","useEffect","useState","baseClass","DefaultLoginButton","disabled","endpointSlug","config","admin","user","userSlug","routes","api","serverURL","authorizeURL","setAuthorizeURL","searchParams","payloadRedirect","get","document","cookie","getAuthorizeURL","serverURLFromWindow","window","location","origin","data","fetch","then","res","json","div","className","el","url"],"mappings":"AAAA;;AAEA,SAASA,MAAM,EAAEC,SAAS,QAAQ,iBAAgB;AAClD,SAASC,eAAe,QAAQ,qBAAoB;AACpD,OAAOC,SAASC,SAAS,EAAEC,QAAQ,QAAQ,QAAO;AAElD,OAAO,eAAc;AAErB,MAAMC,YAAY;AAOlB,OAAO,MAAMC,qBAAwD,CAAC,EACpEC,QAAQ,EACRC,YAAY,EAIb;IACC,MAAM,EACJC,QAAQ,EACNC,OAAO,EAAEC,MAAMC,QAAQ,EAAE,EACzBC,QAAQ,EAAEC,GAAG,EAAE,EACfC,SAAS,EACV,EACF,GAAGf;IACJ,MAAM,CAACgB,cAAcC,gBAAgB,GAAGb,SAAS;IAEjD,MAAMc,eAAejB;IACrB,MAAMkB,kBAAkBD,aAAaE,GAAG,CAAC;IAEzCjB,UAAU;QACR,IAAIgB,mBAAmB,CAACZ,UAAU;YAChC,8CAA8C;YAC9Cc,SAASC,MAAM,GAAG,CAAC,gBAAgB,EAAEH,gBAAgB,QAAQ,CAAC;QAChE;IACF,GAAG;QAACA;QAAiBZ;KAAS;IAE9BJ,UAAU;QACR,MAAMoB,kBAAkB;YACtB,MAAMC,sBAAsBC,OAAOC,QAAQ,CAACC,MAAM;YAClD,MAAMC,OAAO,MAAMC,MACjB,GAAGd,YAAYD,IAAI,CAAC,EAAEF,SAAS,CAAC,EAAEJ,aAAa,gBAAgB,EAAEgB,qBAAqB,EACtFM,IAAI,CAAC,CAACC,MAAQA,IAAIC,IAAI;YAExB,IAAI,CAACzB,UAAU;gBACbU,gBAAgBW,KAAKZ,YAAY;YACnC;QACF;QAEA,KAAKO;IACP,GAAG;QAACT;QAAKC;QAAWH;QAAUL;QAAUC;KAAa;IAErD,IAAID,UAAU;QACZ,OAAO;IACT;IAEA,qBACE,KAAC0B;QAAIC,WAAW7B;kBACd,cAAA,KAACN;YAAOmC,WAAW,GAAG7B,UAAU,KAAK,CAAC;YAAE8B,IAAG;YAASC,KAAKpB;sBAAc;;;AAK7E,EAAC"}
@@ -1,57 +1,10 @@
1
1
  .oauth-login {
2
2
  display: flex;
3
3
  justify-content: center;
4
- padding: 1rem 0;
5
4
 
6
- &__btn {
7
- display: inline-flex;
8
- align-items: center;
9
- justify-content: center;
10
- gap: 0.75rem;
11
- padding: 0.75rem 1.5rem;
12
- min-height: 3rem;
13
- background-color: #4d49fc;
14
- color: #ffffff;
15
- border: none;
16
- border-radius: 0.5rem;
17
- font-size: 1rem;
18
- font-weight: 450;
19
- letter-spacing: 0.05px;
20
- text-decoration: none;
21
- cursor: pointer;
22
- transition: background-color 0.2s ease, transform 0.1s ease;
23
- box-shadow: none;
24
-
25
- &:hover {
26
- background-color: #4440e8;
27
- transform: translateY(-1px);
28
- }
29
-
30
- &:active {
31
- background-color: #3c38d4;
32
- transform: translateY(0);
33
- }
34
-
35
- &:focus {
36
- outline: none;
37
- box-shadow: 0 0 0 2px rgba(77, 73, 252, 0.4);
5
+ &__btn:focus {
6
+ .btn__icon {
7
+ background: none;
38
8
  }
39
9
  }
40
-
41
- &__icon {
42
- flex-shrink: 0;
43
- width: 20px;
44
- height: 20px;
45
- display: flex;
46
- align-items: center;
47
- justify-content: center;
48
- color: #ffffff;
49
- }
50
-
51
- &__text {
52
- white-space: nowrap;
53
- line-height: 1rem;
54
- font-family: Inter, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto,
55
- Oxygen, Ubuntu, Cantarell, sans-serif;
56
- }
57
10
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/oauth/components/LogoutButton/index.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,MAAM,OAAO,CAAA;AAGzB,OAAO,cAAc,CAAA;AAIrB,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC;IAAE,QAAQ,CAAC,EAAE,OAAO,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,CA0D/E,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/oauth/components/LogoutButton/index.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,MAAM,OAAO,CAAA;AAGzB,OAAO,cAAc,CAAA;AAIrB,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC;IAAE,QAAQ,CAAC,EAAE,OAAO,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,CA2D/E,CAAA"}
@@ -17,6 +17,7 @@ export const LogoutButton = ({ disabled, endpointSlug })=>{
17
17
  redirectToSet += `:${port}`;
18
18
  }
19
19
  redirectToSet += getAdminPath(config);
20
+ // eslint-disable-next-line @eslint-react/hooks-extra/no-direct-set-state-in-use-effect
20
21
  setRedirect(redirectToSet);
21
22
  }, [
22
23
  config
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/oauth/components/LogoutButton/index.tsx"],"sourcesContent":["'use client'\n\nimport { Logout, useConfig } from '@payloadcms/ui'\nimport React from 'react'\n\nimport { getAdminPath } from '../../utilities/getAdminPath.js'\nimport './index.scss'\n\nconst baseClass = 'oauth-logout'\n\nexport const LogoutButton: React.FC<{ disabled?: boolean; endpointSlug: string }> = ({\n disabled,\n endpointSlug,\n}) => {\n const {\n config,\n config: {\n admin: { user: userSlug },\n routes: { api },\n serverURL,\n },\n } = useConfig()\n\n const [redirect, setRedirect] = React.useState('')\n React.useEffect(() => {\n const protocol = window.location.protocol\n const domain = window.location.hostname\n const port = window.location.port\n\n let redirectToSet = `${protocol}//${domain}`\n if (port) {\n redirectToSet += `:${port}`\n }\n\n redirectToSet += getAdminPath(config)\n\n setRedirect(redirectToSet)\n }, [config])\n\n if (!redirect) {\n return null\n }\n\n if (disabled) {\n return <Logout />\n }\n\n return (\n <div className={baseClass}>\n <a\n aria-label=\"Logout\"\n href={`${serverURL}${api}/${userSlug}/${endpointSlug}/logout?redirect=${redirect}`}\n >\n <svg\n className=\"icon icon--logout\"\n fill=\"none\"\n viewBox=\"0 0 25 25\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path className=\"stroke\" d=\"M10 5H18V19H10\" />\n <g>\n <path className=\"stroke\" d=\"M8 8.5L4.46447 12.0355L8 15.5711\" />\n <line className=\"stroke\" x1=\"5\" x2=\"13\" y1=\"12\" y2=\"12\" />\n </g>\n </svg>\n </a>\n </div>\n )\n}\n"],"names":["Logout","useConfig","React","getAdminPath","baseClass","LogoutButton","disabled","endpointSlug","config","admin","user","userSlug","routes","api","serverURL","redirect","setRedirect","useState","useEffect","protocol","window","location","domain","hostname","port","redirectToSet","div","className","a","aria-label","href","svg","fill","viewBox","xmlns","path","d","g","line","x1","x2","y1","y2"],"mappings":"AAAA;;AAEA,SAASA,MAAM,EAAEC,SAAS,QAAQ,iBAAgB;AAClD,OAAOC,WAAW,QAAO;AAEzB,SAASC,YAAY,QAAQ,kCAAiC;AAC9D,OAAO,eAAc;AAErB,MAAMC,YAAY;AAElB,OAAO,MAAMC,eAAuE,CAAC,EACnFC,QAAQ,EACRC,YAAY,EACb;IACC,MAAM,EACJC,MAAM,EACNA,QAAQ,EACNC,OAAO,EAAEC,MAAMC,QAAQ,EAAE,EACzBC,QAAQ,EAAEC,GAAG,EAAE,EACfC,SAAS,EACV,EACF,GAAGb;IAEJ,MAAM,CAACc,UAAUC,YAAY,GAAGd,MAAMe,QAAQ,CAAC;IAC/Cf,MAAMgB,SAAS,CAAC;QACd,MAAMC,WAAWC,OAAOC,QAAQ,CAACF,QAAQ;QACzC,MAAMG,SAASF,OAAOC,QAAQ,CAACE,QAAQ;QACvC,MAAMC,OAAOJ,OAAOC,QAAQ,CAACG,IAAI;QAEjC,IAAIC,gBAAgB,GAAGN,SAAS,EAAE,EAAEG,QAAQ;QAC5C,IAAIE,MAAM;YACRC,iBAAiB,CAAC,CAAC,EAAED,MAAM;QAC7B;QAEAC,iBAAiBtB,aAAaK;QAE9BQ,YAAYS;IACd,GAAG;QAACjB;KAAO;IAEX,IAAI,CAACO,UAAU;QACb,OAAO;IACT;IAEA,IAAIT,UAAU;QACZ,qBAAO,KAACN;IACV;IAEA,qBACE,KAAC0B;QAAIC,WAAWvB;kBACd,cAAA,KAACwB;YACCC,cAAW;YACXC,MAAM,GAAGhB,YAAYD,IAAI,CAAC,EAAEF,SAAS,CAAC,EAAEJ,aAAa,iBAAiB,EAAEQ,UAAU;sBAElF,cAAA,MAACgB;gBACCJ,WAAU;gBACVK,MAAK;gBACLC,SAAQ;gBACRC,OAAM;;kCAEN,KAACC;wBAAKR,WAAU;wBAASS,GAAE;;kCAC3B,MAACC;;0CACC,KAACF;gCAAKR,WAAU;gCAASS,GAAE;;0CAC3B,KAACE;gCAAKX,WAAU;gCAASY,IAAG;gCAAIC,IAAG;gCAAKC,IAAG;gCAAKC,IAAG;;;;;;;;AAM/D,EAAC"}
1
+ {"version":3,"sources":["../../../../src/oauth/components/LogoutButton/index.tsx"],"sourcesContent":["'use client'\n\nimport { Logout, useConfig } from '@payloadcms/ui'\nimport React from 'react'\n\nimport { getAdminPath } from '../../utilities/getAdminPath.js'\nimport './index.scss'\n\nconst baseClass = 'oauth-logout'\n\nexport const LogoutButton: React.FC<{ disabled?: boolean; endpointSlug: string }> = ({\n disabled,\n endpointSlug,\n}) => {\n const {\n config,\n config: {\n admin: { user: userSlug },\n routes: { api },\n serverURL,\n },\n } = useConfig()\n\n const [redirect, setRedirect] = React.useState('')\n React.useEffect(() => {\n const protocol = window.location.protocol\n const domain = window.location.hostname\n const port = window.location.port\n\n let redirectToSet = `${protocol}//${domain}`\n if (port) {\n redirectToSet += `:${port}`\n }\n\n redirectToSet += getAdminPath(config)\n\n // eslint-disable-next-line @eslint-react/hooks-extra/no-direct-set-state-in-use-effect\n setRedirect(redirectToSet)\n }, [config])\n\n if (!redirect) {\n return null\n }\n\n if (disabled) {\n return <Logout />\n }\n\n return (\n <div className={baseClass}>\n <a\n aria-label=\"Logout\"\n href={`${serverURL}${api}/${userSlug}/${endpointSlug}/logout?redirect=${redirect}`}\n >\n <svg\n className=\"icon icon--logout\"\n fill=\"none\"\n viewBox=\"0 0 25 25\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path className=\"stroke\" d=\"M10 5H18V19H10\" />\n <g>\n <path className=\"stroke\" d=\"M8 8.5L4.46447 12.0355L8 15.5711\" />\n <line className=\"stroke\" x1=\"5\" x2=\"13\" y1=\"12\" y2=\"12\" />\n </g>\n </svg>\n </a>\n </div>\n )\n}\n"],"names":["Logout","useConfig","React","getAdminPath","baseClass","LogoutButton","disabled","endpointSlug","config","admin","user","userSlug","routes","api","serverURL","redirect","setRedirect","useState","useEffect","protocol","window","location","domain","hostname","port","redirectToSet","div","className","a","aria-label","href","svg","fill","viewBox","xmlns","path","d","g","line","x1","x2","y1","y2"],"mappings":"AAAA;;AAEA,SAASA,MAAM,EAAEC,SAAS,QAAQ,iBAAgB;AAClD,OAAOC,WAAW,QAAO;AAEzB,SAASC,YAAY,QAAQ,kCAAiC;AAC9D,OAAO,eAAc;AAErB,MAAMC,YAAY;AAElB,OAAO,MAAMC,eAAuE,CAAC,EACnFC,QAAQ,EACRC,YAAY,EACb;IACC,MAAM,EACJC,MAAM,EACNA,QAAQ,EACNC,OAAO,EAAEC,MAAMC,QAAQ,EAAE,EACzBC,QAAQ,EAAEC,GAAG,EAAE,EACfC,SAAS,EACV,EACF,GAAGb;IAEJ,MAAM,CAACc,UAAUC,YAAY,GAAGd,MAAMe,QAAQ,CAAC;IAC/Cf,MAAMgB,SAAS,CAAC;QACd,MAAMC,WAAWC,OAAOC,QAAQ,CAACF,QAAQ;QACzC,MAAMG,SAASF,OAAOC,QAAQ,CAACE,QAAQ;QACvC,MAAMC,OAAOJ,OAAOC,QAAQ,CAACG,IAAI;QAEjC,IAAIC,gBAAgB,GAAGN,SAAS,EAAE,EAAEG,QAAQ;QAC5C,IAAIE,MAAM;YACRC,iBAAiB,CAAC,CAAC,EAAED,MAAM;QAC7B;QAEAC,iBAAiBtB,aAAaK;QAE9B,uFAAuF;QACvFQ,YAAYS;IACd,GAAG;QAACjB;KAAO;IAEX,IAAI,CAACO,UAAU;QACb,OAAO;IACT;IAEA,IAAIT,UAAU;QACZ,qBAAO,KAACN;IACV;IAEA,qBACE,KAAC0B;QAAIC,WAAWvB;kBACd,cAAA,KAACwB;YACCC,cAAW;YACXC,MAAM,GAAGhB,YAAYD,IAAI,CAAC,EAAEF,SAAS,CAAC,EAAEJ,aAAa,iBAAiB,EAAEQ,UAAU;sBAElF,cAAA,MAACgB;gBACCJ,WAAU;gBACVK,MAAK;gBACLC,SAAQ;gBACRC,OAAM;;kCAEN,KAACC;wBAAKR,WAAU;wBAASS,GAAE;;kCAC3B,MAACC;;0CACC,KAACF;gCAAKR,WAAU;gCAASS,GAAE;;0CAC3B,KAACE;gCAAKX,WAAU;gCAASY,IAAG;gCAAIC,IAAG;gCAAKC,IAAG;gCAAKC,IAAG;;;;;;;;AAM/D,EAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../src/oauth/defaults.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,UAAU,EAAE,SAAS,EAAQ,MAAM,SAAS,CAAA;AAI5E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAKhD,eAAO,MAAM,YAAY,UAAiC,CAAA;AAE1D,eAAO,MAAM,oBAAoB,EAAE,SAQlC,CAAA;AAED,eAAO,MAAM,aAAa,iDAKrB;IACD,UAAU,EAAE,gBAAgB,CAAA;IAC5B,YAAY,EAAE,MAAM,CAAA;IACpB,aAAa,EAAE,UAAU,GAAG,SAAS,CAAA;CACtC,KAAG,cAuGH,CAAA"}
1
+ {"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../src/oauth/defaults.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,UAAU,EAAE,SAAS,EAAQ,MAAM,SAAS,CAAA;AAI5E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAIhD,eAAO,MAAM,YAAY,UAAiC,CAAA;AAE1D,eAAO,MAAM,oBAAoB,EAAE,SAQlC,CAAA;AAED,eAAO,MAAM,aAAa,iDAKrB;IACD,UAAU,EAAE,gBAAgB,CAAA;IAC5B,YAAY,EAAE,MAAM,CAAA;IACpB,aAAa,EAAE,UAAU,GAAG,SAAS,CAAA;CACtC,KAAG,cAiFH,CAAA"}
@@ -1,6 +1,5 @@
1
1
  import { v4 as uuid } from 'uuid';
2
2
  import { hasUserTokenPropsChanged } from './utilities/hasUserTokenPropsChanged.js';
3
- import { isDuplicateKeyError } from './utilities/isDuplicateKeyError.js';
4
3
  export const defaultScope = [
5
4
  'openid',
6
5
  'profile',
@@ -61,34 +60,11 @@ export const defaultVerify = ({ collection, strategyName, usernameField })=>asyn
61
60
  if (typeof collection.auth === 'object' && !collection.auth.disableLocalStrategy) {
62
61
  newUser.password = uuid();
63
62
  }
64
- try {
65
- user = await payload.create({
66
- collection: collection.slug,
67
- data: newUser,
68
- depth,
69
- overrideAccess: true
70
- });
71
- } catch (createErr) {
72
- // Race condition: if unique constraint violation, user was created by concurrent request
73
- if (isDuplicateKeyError(createErr)) {
74
- const retryResults = await payload.find({
75
- collection: collection.slug,
76
- depth,
77
- limit: 1,
78
- pagination: false,
79
- where: {
80
- [usernameField.name]: {
81
- equals: token[tokenUsername]
82
- }
83
- }
84
- });
85
- if (retryResults.docs.length > 0) {
86
- user = retryResults.docs[0];
87
- }
88
- } else {
89
- throw createErr;
90
- }
91
- }
63
+ user = await payload.create({
64
+ collection: collection.slug,
65
+ data: newUser,
66
+ depth
67
+ });
92
68
  }
93
69
  } catch (err) {
94
70
  payload.logger.error({
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/oauth/defaults.ts"],"sourcesContent":["import type { CollectionConfig, EmailField, TextField, User } from 'payload'\n\nimport { v4 as uuid } from 'uuid'\n\nimport type { VerifyFunction } from './types.js'\n\nimport { hasUserTokenPropsChanged } from './utilities/hasUserTokenPropsChanged.js'\nimport { isDuplicateKeyError } from './utilities/isDuplicateKeyError.js'\n\nexport const defaultScope = ['openid', 'profile', 'email']\n\nexport const defaultUsernameField: TextField = {\n name: 'preferredUsername',\n type: 'text',\n admin: {\n position: 'sidebar',\n readOnly: true,\n },\n unique: true,\n}\n\nexport const defaultVerify =\n ({\n collection,\n strategyName,\n usernameField,\n }: {\n collection: CollectionConfig\n strategyName: string\n usernameField: EmailField | TextField\n }): VerifyFunction =>\n async ({ payload, token }) => {\n let tokenUsername = 'preferred_username'\n\n if (usernameField.name !== 'preferredUsername') {\n tokenUsername = usernameField.name\n }\n\n if (!token[tokenUsername]) {\n return {\n user: null,\n }\n }\n\n let user: null | User = null\n const depth = typeof collection.auth === 'object' ? collection.auth.depth : undefined\n\n try {\n const results = await payload.find({\n collection: collection.slug,\n depth,\n limit: 1,\n pagination: false,\n where: {\n [usernameField.name]: { equals: token[tokenUsername] },\n },\n })\n\n if (results.docs.length > 0) {\n user = results.docs[0] as User\n // Update user with new token data\n if (hasUserTokenPropsChanged(user, token)) {\n user = (await payload.update({\n id: user.id,\n collection: collection.slug,\n data: {\n ...token,\n },\n depth,\n })) as User\n }\n } else {\n const newUser = {\n email: token.preferredUsername || token.email,\n [usernameField.name]: token[tokenUsername],\n ...token,\n }\n\n if (typeof collection.auth === 'object' && !collection.auth.disableLocalStrategy) {\n newUser.password = uuid()\n }\n\n try {\n user = (await payload.create({\n collection: collection.slug,\n data: newUser,\n depth,\n overrideAccess: true,\n })) as User\n } catch (createErr: unknown) {\n // Race condition: if unique constraint violation, user was created by concurrent request\n if (isDuplicateKeyError(createErr)) {\n const retryResults = await payload.find({\n collection: collection.slug,\n depth,\n limit: 1,\n pagination: false,\n where: {\n [usernameField.name]: { equals: token[tokenUsername] },\n },\n })\n\n if (retryResults.docs.length > 0) {\n user = retryResults.docs[0] as User\n }\n } else {\n throw createErr\n }\n }\n }\n } catch (err: unknown) {\n payload.logger.error({\n err,\n msg: 'Error verifying user from defaultVerify.',\n })\n return {\n user: null,\n }\n }\n\n if (user) {\n user.collection = collection.slug\n user._strategy = strategyName\n user.exp = token.exp\n\n return {\n user,\n }\n }\n\n return {\n user: null,\n }\n }\n"],"names":["v4","uuid","hasUserTokenPropsChanged","isDuplicateKeyError","defaultScope","defaultUsernameField","name","type","admin","position","readOnly","unique","defaultVerify","collection","strategyName","usernameField","payload","token","tokenUsername","user","depth","auth","undefined","results","find","slug","limit","pagination","where","equals","docs","length","update","id","data","newUser","email","preferredUsername","disableLocalStrategy","password","create","overrideAccess","createErr","retryResults","err","logger","error","msg","_strategy","exp"],"mappings":"AAEA,SAASA,MAAMC,IAAI,QAAQ,OAAM;AAIjC,SAASC,wBAAwB,QAAQ,0CAAyC;AAClF,SAASC,mBAAmB,QAAQ,qCAAoC;AAExE,OAAO,MAAMC,eAAe;IAAC;IAAU;IAAW;CAAQ,CAAA;AAE1D,OAAO,MAAMC,uBAAkC;IAC7CC,MAAM;IACNC,MAAM;IACNC,OAAO;QACLC,UAAU;QACVC,UAAU;IACZ;IACAC,QAAQ;AACV,EAAC;AAED,OAAO,MAAMC,gBACX,CAAC,EACCC,UAAU,EACVC,YAAY,EACZC,aAAa,EAKd,GACD,OAAO,EAAEC,OAAO,EAAEC,KAAK,EAAE;QACvB,IAAIC,gBAAgB;QAEpB,IAAIH,cAAcT,IAAI,KAAK,qBAAqB;YAC9CY,gBAAgBH,cAAcT,IAAI;QACpC;QAEA,IAAI,CAACW,KAAK,CAACC,cAAc,EAAE;YACzB,OAAO;gBACLC,MAAM;YACR;QACF;QAEA,IAAIA,OAAoB;QACxB,MAAMC,QAAQ,OAAOP,WAAWQ,IAAI,KAAK,WAAWR,WAAWQ,IAAI,CAACD,KAAK,GAAGE;QAE5E,IAAI;YACF,MAAMC,UAAU,MAAMP,QAAQQ,IAAI,CAAC;gBACjCX,YAAYA,WAAWY,IAAI;gBAC3BL;gBACAM,OAAO;gBACPC,YAAY;gBACZC,OAAO;oBACL,CAACb,cAAcT,IAAI,CAAC,EAAE;wBAAEuB,QAAQZ,KAAK,CAACC,cAAc;oBAAC;gBACvD;YACF;YAEA,IAAIK,QAAQO,IAAI,CAACC,MAAM,GAAG,GAAG;gBAC3BZ,OAAOI,QAAQO,IAAI,CAAC,EAAE;gBACtB,kCAAkC;gBAClC,IAAI5B,yBAAyBiB,MAAMF,QAAQ;oBACzCE,OAAQ,MAAMH,QAAQgB,MAAM,CAAC;wBAC3BC,IAAId,KAAKc,EAAE;wBACXpB,YAAYA,WAAWY,IAAI;wBAC3BS,MAAM;4BACJ,GAAGjB,KAAK;wBACV;wBACAG;oBACF;gBACF;YACF,OAAO;gBACL,MAAMe,UAAU;oBACdC,OAAOnB,MAAMoB,iBAAiB,IAAIpB,MAAMmB,KAAK;oBAC7C,CAACrB,cAAcT,IAAI,CAAC,EAAEW,KAAK,CAACC,cAAc;oBAC1C,GAAGD,KAAK;gBACV;gBAEA,IAAI,OAAOJ,WAAWQ,IAAI,KAAK,YAAY,CAACR,WAAWQ,IAAI,CAACiB,oBAAoB,EAAE;oBAChFH,QAAQI,QAAQ,GAAGtC;gBACrB;gBAEA,IAAI;oBACFkB,OAAQ,MAAMH,QAAQwB,MAAM,CAAC;wBAC3B3B,YAAYA,WAAWY,IAAI;wBAC3BS,MAAMC;wBACNf;wBACAqB,gBAAgB;oBAClB;gBACF,EAAE,OAAOC,WAAoB;oBAC3B,yFAAyF;oBACzF,IAAIvC,oBAAoBuC,YAAY;wBAClC,MAAMC,eAAe,MAAM3B,QAAQQ,IAAI,CAAC;4BACtCX,YAAYA,WAAWY,IAAI;4BAC3BL;4BACAM,OAAO;4BACPC,YAAY;4BACZC,OAAO;gCACL,CAACb,cAAcT,IAAI,CAAC,EAAE;oCAAEuB,QAAQZ,KAAK,CAACC,cAAc;gCAAC;4BACvD;wBACF;wBAEA,IAAIyB,aAAab,IAAI,CAACC,MAAM,GAAG,GAAG;4BAChCZ,OAAOwB,aAAab,IAAI,CAAC,EAAE;wBAC7B;oBACF,OAAO;wBACL,MAAMY;oBACR;gBACF;YACF;QACF,EAAE,OAAOE,KAAc;YACrB5B,QAAQ6B,MAAM,CAACC,KAAK,CAAC;gBACnBF;gBACAG,KAAK;YACP;YACA,OAAO;gBACL5B,MAAM;YACR;QACF;QAEA,IAAIA,MAAM;YACRA,KAAKN,UAAU,GAAGA,WAAWY,IAAI;YACjCN,KAAK6B,SAAS,GAAGlC;YACjBK,KAAK8B,GAAG,GAAGhC,MAAMgC,GAAG;YAEpB,OAAO;gBACL9B;YACF;QACF;QAEA,OAAO;YACLA,MAAM;QACR;IACF,EAAC"}
1
+ {"version":3,"sources":["../../src/oauth/defaults.ts"],"sourcesContent":["import type { CollectionConfig, EmailField, TextField, User } from 'payload'\n\nimport { v4 as uuid } from 'uuid'\n\nimport type { VerifyFunction } from './types.js'\n\nimport { hasUserTokenPropsChanged } from './utilities/hasUserTokenPropsChanged.js'\n\nexport const defaultScope = ['openid', 'profile', 'email']\n\nexport const defaultUsernameField: TextField = {\n name: 'preferredUsername',\n type: 'text',\n admin: {\n position: 'sidebar',\n readOnly: true,\n },\n unique: true,\n}\n\nexport const defaultVerify =\n ({\n collection,\n strategyName,\n usernameField,\n }: {\n collection: CollectionConfig\n strategyName: string\n usernameField: EmailField | TextField\n }): VerifyFunction =>\n async ({ payload, token }) => {\n let tokenUsername = 'preferred_username'\n\n if (usernameField.name !== 'preferredUsername') {\n tokenUsername = usernameField.name\n }\n\n if (!token[tokenUsername]) {\n return {\n user: null,\n }\n }\n\n let user: null | User = null\n const depth = typeof collection.auth === 'object' ? collection.auth.depth : undefined\n\n try {\n const results = await payload.find({\n collection: collection.slug,\n depth,\n limit: 1,\n pagination: false,\n where: {\n [usernameField.name]: { equals: token[tokenUsername] },\n },\n })\n\n if (results.docs.length > 0) {\n user = results.docs[0] as User\n // Update user with new token data\n if (hasUserTokenPropsChanged(user, token)) {\n user = (await payload.update({\n id: user.id,\n collection: collection.slug,\n data: {\n ...token,\n },\n depth,\n })) as User\n }\n } else {\n const newUser = {\n email: token.preferredUsername || token.email,\n [usernameField.name]: token[tokenUsername],\n ...token,\n }\n\n if (typeof collection.auth === 'object' && !collection.auth.disableLocalStrategy) {\n newUser.password = uuid()\n }\n\n user = (await payload.create({\n collection: collection.slug,\n data: newUser,\n depth,\n })) as User\n }\n } catch (err: unknown) {\n payload.logger.error({\n err,\n msg: 'Error verifying user from defaultVerify.',\n })\n return {\n user: null,\n }\n }\n\n if (user) {\n user.collection = collection.slug\n user._strategy = strategyName\n user.exp = token.exp\n\n return {\n user,\n }\n }\n\n return {\n user: null,\n }\n }\n"],"names":["v4","uuid","hasUserTokenPropsChanged","defaultScope","defaultUsernameField","name","type","admin","position","readOnly","unique","defaultVerify","collection","strategyName","usernameField","payload","token","tokenUsername","user","depth","auth","undefined","results","find","slug","limit","pagination","where","equals","docs","length","update","id","data","newUser","email","preferredUsername","disableLocalStrategy","password","create","err","logger","error","msg","_strategy","exp"],"mappings":"AAEA,SAASA,MAAMC,IAAI,QAAQ,OAAM;AAIjC,SAASC,wBAAwB,QAAQ,0CAAyC;AAElF,OAAO,MAAMC,eAAe;IAAC;IAAU;IAAW;CAAQ,CAAA;AAE1D,OAAO,MAAMC,uBAAkC;IAC7CC,MAAM;IACNC,MAAM;IACNC,OAAO;QACLC,UAAU;QACVC,UAAU;IACZ;IACAC,QAAQ;AACV,EAAC;AAED,OAAO,MAAMC,gBACX,CAAC,EACCC,UAAU,EACVC,YAAY,EACZC,aAAa,EAKd,GACD,OAAO,EAAEC,OAAO,EAAEC,KAAK,EAAE;QACvB,IAAIC,gBAAgB;QAEpB,IAAIH,cAAcT,IAAI,KAAK,qBAAqB;YAC9CY,gBAAgBH,cAAcT,IAAI;QACpC;QAEA,IAAI,CAACW,KAAK,CAACC,cAAc,EAAE;YACzB,OAAO;gBACLC,MAAM;YACR;QACF;QAEA,IAAIA,OAAoB;QACxB,MAAMC,QAAQ,OAAOP,WAAWQ,IAAI,KAAK,WAAWR,WAAWQ,IAAI,CAACD,KAAK,GAAGE;QAE5E,IAAI;YACF,MAAMC,UAAU,MAAMP,QAAQQ,IAAI,CAAC;gBACjCX,YAAYA,WAAWY,IAAI;gBAC3BL;gBACAM,OAAO;gBACPC,YAAY;gBACZC,OAAO;oBACL,CAACb,cAAcT,IAAI,CAAC,EAAE;wBAAEuB,QAAQZ,KAAK,CAACC,cAAc;oBAAC;gBACvD;YACF;YAEA,IAAIK,QAAQO,IAAI,CAACC,MAAM,GAAG,GAAG;gBAC3BZ,OAAOI,QAAQO,IAAI,CAAC,EAAE;gBACtB,kCAAkC;gBAClC,IAAI3B,yBAAyBgB,MAAMF,QAAQ;oBACzCE,OAAQ,MAAMH,QAAQgB,MAAM,CAAC;wBAC3BC,IAAId,KAAKc,EAAE;wBACXpB,YAAYA,WAAWY,IAAI;wBAC3BS,MAAM;4BACJ,GAAGjB,KAAK;wBACV;wBACAG;oBACF;gBACF;YACF,OAAO;gBACL,MAAMe,UAAU;oBACdC,OAAOnB,MAAMoB,iBAAiB,IAAIpB,MAAMmB,KAAK;oBAC7C,CAACrB,cAAcT,IAAI,CAAC,EAAEW,KAAK,CAACC,cAAc;oBAC1C,GAAGD,KAAK;gBACV;gBAEA,IAAI,OAAOJ,WAAWQ,IAAI,KAAK,YAAY,CAACR,WAAWQ,IAAI,CAACiB,oBAAoB,EAAE;oBAChFH,QAAQI,QAAQ,GAAGrC;gBACrB;gBAEAiB,OAAQ,MAAMH,QAAQwB,MAAM,CAAC;oBAC3B3B,YAAYA,WAAWY,IAAI;oBAC3BS,MAAMC;oBACNf;gBACF;YACF;QACF,EAAE,OAAOqB,KAAc;YACrBzB,QAAQ0B,MAAM,CAACC,KAAK,CAAC;gBACnBF;gBACAG,KAAK;YACP;YACA,OAAO;gBACLzB,MAAM;YACR;QACF;QAEA,IAAIA,MAAM;YACRA,KAAKN,UAAU,GAAGA,WAAWY,IAAI;YACjCN,KAAK0B,SAAS,GAAG/B;YACjBK,KAAK2B,GAAG,GAAG7B,MAAM6B,GAAG;YAEpB,OAAO;gBACL3B;YACF;QACF;QAEA,OAAO;YACLA,MAAM;QACR;IACF,EAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"getLoginEndpoint.d.ts","sourceRoot":"","sources":["../../../src/oauth/endpoints/getLoginEndpoint.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAKzD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAA;AACpD,OAAO,KAAK,EAAE,iBAAiB,EAAE,aAAa,EAAY,MAAM,aAAa,CAAA;AAS7E,UAAU,IAAI;IACZ,UAAU,EAAE,gBAAgB,CAAA;IAC5B,iBAAiB,EAAE,iBAAiB,CAAA;IACpC,YAAY,EAAE,MAAM,CAAA;IACpB,aAAa,EAAE,aAAa,CAAA;IAC5B,QAAQ,EAAE,QAAQ,CAAA;CACnB;AAID,eAAO,MAAM,gBAAgB,8EAM1B,IAAI,KAAG,QAkPR,CAAA"}
1
+ {"version":3,"file":"getLoginEndpoint.d.ts","sourceRoot":"","sources":["../../../src/oauth/endpoints/getLoginEndpoint.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAMzD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAA;AACpD,OAAO,KAAK,EAEV,iBAAiB,EACjB,aAAa,EAEd,MAAM,aAAa,CAAA;AAcpB,UAAU,IAAI;IACZ,UAAU,EAAE,gBAAgB,CAAA;IAC5B,iBAAiB,EAAE,iBAAiB,CAAA;IACpC,YAAY,EAAE,MAAM,CAAA;IACpB,aAAa,EAAE,aAAa,CAAA;IAC5B,QAAQ,EAAE,QAAQ,CAAA;CACnB;AAID,eAAO,MAAM,gBAAgB,8EAM1B,IAAI,KAAG,QA+OR,CAAA"}