api.ts 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. import { ProjectMember } from '@/shared/context/types/project-metadata'
  2. import {
  3. deleteJSON,
  4. getJSON,
  5. postJSON,
  6. putJSON,
  7. } from '../../../infrastructure/fetch-json'
  8. import { executeV2Captcha } from './captcha'
  9. import getMeta from '@/utils/meta'
  10. import { PermissionsLevel } from '@/features/ide-react/types/permissions'
  11. export type SharingLinkPrivileges =
  12. | 'readAndWrite'
  13. | 'review'
  14. | 'readOnly'
  15. | false
  16. export type SharingLinkData = {
  17. _id: string
  18. token: string
  19. privileges: SharingLinkPrivileges
  20. subscriptionId?: string
  21. }
  22. export function getSharingLink(projectId: string) {
  23. return getJSON<SharingLinkData>(`/project/${projectId}/sharing-link`)
  24. }
  25. export function updateSharingLink(
  26. projectId: string,
  27. data: Pick<SharingLinkData, 'privileges' | 'subscriptionId'>
  28. ) {
  29. return postJSON<SharingLinkData>(`/project/${projectId}/sharing-link`, {
  30. body: data,
  31. })
  32. }
  33. export function sendInvite(
  34. projectId: string,
  35. email: string,
  36. privileges: PermissionsLevel
  37. ) {
  38. return executeV2Captcha(
  39. getMeta('ol-ExposedSettings').recaptchaDisabled?.invite
  40. ).then(grecaptchaResponse => {
  41. return postJSON(`/project/${projectId}/invite`, {
  42. body: {
  43. email, // TODO: normalisedEmail?
  44. privileges,
  45. 'g-recaptcha-response': grecaptchaResponse,
  46. },
  47. })
  48. })
  49. }
  50. export function resendInvite(projectId: string, invite: ProjectMember) {
  51. return postJSON(`/project/${projectId}/invite/${invite._id}/resend`)
  52. }
  53. export function revokeInvite(projectId: string, invite: ProjectMember) {
  54. return deleteJSON(`/project/${projectId}/invite/${invite._id}`)
  55. }
  56. export function updateMember(
  57. projectId: string,
  58. member: ProjectMember,
  59. data: { privilegeLevel: PermissionsLevel }
  60. ) {
  61. return putJSON(`/project/${projectId}/users/${member._id}`, {
  62. body: data,
  63. })
  64. }
  65. export function removeMemberFromProject(
  66. projectId: string,
  67. member: ProjectMember
  68. ) {
  69. return deleteJSON(`/project/${projectId}/users/${member._id}`)
  70. }
  71. export function transferProjectOwnership(
  72. projectId: string,
  73. member: ProjectMember
  74. ) {
  75. return postJSON(`/project/${projectId}/transfer-ownership`, {
  76. body: {
  77. user_id: member._id,
  78. },
  79. })
  80. }
  81. export function setPublicAccessLevel(
  82. projectId: string,
  83. publicAccessLevel: string
  84. ) {
  85. return postJSON(`/project/${projectId}/settings/admin`, {
  86. body: { publicAccessLevel },
  87. })
  88. }
  89. export function listProjectMembers(projectId: string) {
  90. return getJSON(`/project/${projectId}/members`)
  91. }
  92. export function listProjectInvites(projectId: string) {
  93. return getJSON(`/project/${projectId}/invites`)
  94. }