@redacto.io/consent-sdk-react 10.0.0-beta.9 → 10.0.0

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/NOTICE.md +17 -0
  2. package/README.md +141 -3
  3. package/dist/chunk-FEGTW73Q.mjs +182 -0
  4. package/dist/fonts.d.mts +35 -0
  5. package/dist/fonts.d.ts +35 -0
  6. package/dist/fonts.js +183 -0
  7. package/dist/fonts.mjs +10 -0
  8. package/dist/index.d.mts +12 -1
  9. package/dist/index.d.ts +12 -1
  10. package/dist/index.js +724 -365
  11. package/dist/index.mjs +346 -201
  12. package/dist/montserrat.generated-NBTECYRW.mjs +22 -0
  13. package/dist/privacy-center.d.mts +0 -1
  14. package/dist/privacy-center.d.ts +0 -1
  15. package/dist/privacy-center.js +2 -66
  16. package/dist/privacy-center.mjs +2 -66
  17. package/dist/types-6Aj7faxL.d.mts +57 -0
  18. package/dist/types-6Aj7faxL.d.ts +57 -0
  19. package/package.json +10 -1
  20. package/.turbo/turbo-build.log +0 -22
  21. package/.turbo/turbo-test.log +0 -203
  22. package/.turbo/turbo-verify-pack.log +0 -6
  23. package/CHANGELOG.md +0 -353
  24. package/src/RedactoNoticeAssisted/RedactoNoticeAssisted.test.tsx +0 -934
  25. package/src/RedactoNoticeAssisted/RedactoNoticeAssisted.tsx +0 -2160
  26. package/src/RedactoNoticeAssisted/api/index.ts +0 -275
  27. package/src/RedactoNoticeAssisted/api/types.ts +0 -182
  28. package/src/RedactoNoticeAssisted/assets/redacto-logo.png +0 -0
  29. package/src/RedactoNoticeAssisted/constants.ts +0 -51
  30. package/src/RedactoNoticeAssisted/i18n.ts +0 -1408
  31. package/src/RedactoNoticeAssisted/index.ts +0 -1
  32. package/src/RedactoNoticeAssisted/injectStyles.ts +0 -251
  33. package/src/RedactoNoticeAssisted/styles.ts +0 -730
  34. package/src/RedactoNoticeAssisted/types.ts +0 -26
  35. package/src/RedactoNoticeAssisted/useMediaQuery.ts +0 -36
  36. package/src/RedactoNoticeConsent/RedactoNoticeConsent.test.tsx +0 -1152
  37. package/src/RedactoNoticeConsent/RedactoNoticeConsent.tsx +0 -4308
  38. package/src/RedactoNoticeConsent/api/index.ts +0 -542
  39. package/src/RedactoNoticeConsent/api/sandbox.ts +0 -150
  40. package/src/RedactoNoticeConsent/api/types.ts +0 -515
  41. package/src/RedactoNoticeConsent/assets/redacto-logo.png +0 -0
  42. package/src/RedactoNoticeConsent/components/DigiLockerCallback.tsx +0 -602
  43. package/src/RedactoNoticeConsent/components/index.ts +0 -7
  44. package/src/RedactoNoticeConsent/constants.ts +0 -20
  45. package/src/RedactoNoticeConsent/index.ts +0 -1
  46. package/src/RedactoNoticeConsent/injectStyles.ts +0 -151
  47. package/src/RedactoNoticeConsent/language-codes.ts +0 -95
  48. package/src/RedactoNoticeConsent/services/storage.ts +0 -122
  49. package/src/RedactoNoticeConsent/styles.ts +0 -409
  50. package/src/RedactoNoticeConsent/types.ts +0 -80
  51. package/src/RedactoNoticeConsent/useMediaQuery.ts +0 -36
  52. package/src/RedactoNoticeConsentInline/RedactoNoticeConsentInline.test.tsx +0 -369
  53. package/src/RedactoNoticeConsentInline/RedactoNoticeConsentInline.tsx +0 -687
  54. package/src/RedactoNoticeConsentInline/api/index.ts +0 -106
  55. package/src/RedactoNoticeConsentInline/api/types.ts +0 -183
  56. package/src/RedactoNoticeConsentInline/assets/redacto-logo.png +0 -0
  57. package/src/RedactoNoticeConsentInline/index.ts +0 -1
  58. package/src/RedactoNoticeConsentInline/injectStyles.ts +0 -40
  59. package/src/RedactoNoticeConsentInline/styles.ts +0 -397
  60. package/src/RedactoNoticeConsentInline/types.ts +0 -51
  61. package/src/RedactoNoticeConsentInline/useMediaQuery.ts +0 -36
  62. package/src/RedactoPrivacyCenter/NotificationsPage.tsx +0 -182
  63. package/src/RedactoPrivacyCenter/PrivacyCenterActivityPage.tsx +0 -19
  64. package/src/RedactoPrivacyCenter/PrivacyCenterCaseDetailsPage.tsx +0 -156
  65. package/src/RedactoPrivacyCenter/PrivacyCenterConsentManagerPage.tsx +0 -17
  66. package/src/RedactoPrivacyCenter/PrivacyCenterFormPage.tsx +0 -79
  67. package/src/RedactoPrivacyCenter/PrivacyCenterHomePage.tsx +0 -36
  68. package/src/RedactoPrivacyCenter/PrivacyCenterLayout.tsx +0 -177
  69. package/src/RedactoPrivacyCenter/PrivacyCenterMyReceiptPage.tsx +0 -26
  70. package/src/RedactoPrivacyCenter/RedactoPrivacyCenter.tsx +0 -93
  71. package/src/RedactoPrivacyCenter/api/actions.ts +0 -695
  72. package/src/RedactoPrivacyCenter/api/client.ts +0 -1003
  73. package/src/RedactoPrivacyCenter/api/config.ts +0 -33
  74. package/src/RedactoPrivacyCenter/api/fetcher.ts +0 -275
  75. package/src/RedactoPrivacyCenter/api/orgBranding.ts +0 -16
  76. package/src/RedactoPrivacyCenter/api/upload.ts +0 -93
  77. package/src/RedactoPrivacyCenter/assets/character.svg +0 -31
  78. package/src/RedactoPrivacyCenter/assets/fileAttach.svg +0 -9
  79. package/src/RedactoPrivacyCenter/assets/greenTick.svg +0 -4
  80. package/src/RedactoPrivacyCenter/assets/mail.svg +0 -3
  81. package/src/RedactoPrivacyCenter/assets/poweredByRedacto.svg +0 -9
  82. package/src/RedactoPrivacyCenter/assets/sentImg.svg +0 -9
  83. package/src/RedactoPrivacyCenter/assets/uploadFileIcon.svg +0 -9
  84. package/src/RedactoPrivacyCenter/components/ActivitiesList.tsx +0 -252
  85. package/src/RedactoPrivacyCenter/components/ActivityTimeline.tsx +0 -239
  86. package/src/RedactoPrivacyCenter/components/AppShell/AppShell.tsx +0 -268
  87. package/src/RedactoPrivacyCenter/components/AppShell/MobileNavDrawer.tsx +0 -218
  88. package/src/RedactoPrivacyCenter/components/AppShell/NavItem.tsx +0 -205
  89. package/src/RedactoPrivacyCenter/components/AppShell/PageHeader.tsx +0 -107
  90. package/src/RedactoPrivacyCenter/components/AppShell/SidebarNav.tsx +0 -100
  91. package/src/RedactoPrivacyCenter/components/AppShell/TopAppBar.tsx +0 -339
  92. package/src/RedactoPrivacyCenter/components/AppShell/UserMenu.tsx +0 -245
  93. package/src/RedactoPrivacyCenter/components/AppShell/hooks/useIsTruncated.ts +0 -28
  94. package/src/RedactoPrivacyCenter/components/AppShell/hooks/useKeyboardShortcut.ts +0 -40
  95. package/src/RedactoPrivacyCenter/components/AppShell/hooks/useSidebarState.ts +0 -62
  96. package/src/RedactoPrivacyCenter/components/AppShell/usePrivacyCenterExitAction.ts +0 -36
  97. package/src/RedactoPrivacyCenter/components/CaseDetails/AttachmentCard.tsx +0 -38
  98. package/src/RedactoPrivacyCenter/components/CaseDetails/ChatBubble.tsx +0 -31
  99. package/src/RedactoPrivacyCenter/components/CaseDetails/DocumentRequestCard.tsx +0 -79
  100. package/src/RedactoPrivacyCenter/components/CaseDetails/FinalizedTooltipWrapper.tsx +0 -25
  101. package/src/RedactoPrivacyCenter/components/CaseDetails/MessageComposer.tsx +0 -96
  102. package/src/RedactoPrivacyCenter/components/CaseDetails/MessageItem.tsx +0 -97
  103. package/src/RedactoPrivacyCenter/components/CaseDetails/MessagesTab.tsx +0 -156
  104. package/src/RedactoPrivacyCenter/components/CaseDetails/RequestDetailsTab.tsx +0 -171
  105. package/src/RedactoPrivacyCenter/components/CaseDetails/StatusEvent.tsx +0 -23
  106. package/src/RedactoPrivacyCenter/components/CaseDetails/useFileUpload.ts +0 -116
  107. package/src/RedactoPrivacyCenter/components/CaseDetails/useMessagePolling.ts +0 -43
  108. package/src/RedactoPrivacyCenter/components/CaseDetails/utils.ts +0 -71
  109. package/src/RedactoPrivacyCenter/components/CaseDetailsModal.tsx +0 -469
  110. package/src/RedactoPrivacyCenter/components/CaseHistory.tsx +0 -426
  111. package/src/RedactoPrivacyCenter/components/ConsentManager.tsx +0 -1206
  112. package/src/RedactoPrivacyCenter/components/ConsentManagerCells.tsx +0 -218
  113. package/src/RedactoPrivacyCenter/components/ConsentManagerColumns.tsx +0 -138
  114. package/src/RedactoPrivacyCenter/components/ConsentManagerConstants.ts +0 -7
  115. package/src/RedactoPrivacyCenter/components/ConsentManagerExpandedRow.tsx +0 -179
  116. package/src/RedactoPrivacyCenter/components/ConsentManagerGroupedColumns.tsx +0 -318
  117. package/src/RedactoPrivacyCenter/components/ConsentManagerProductCards.tsx +0 -333
  118. package/src/RedactoPrivacyCenter/components/ConsentManagerPurposeCards.tsx +0 -102
  119. package/src/RedactoPrivacyCenter/components/ConsentManagerTableSkeleton.tsx +0 -159
  120. package/src/RedactoPrivacyCenter/components/DataRequest/CorrectionDataSection.tsx +0 -189
  121. package/src/RedactoPrivacyCenter/components/DataRequest/GrievanceDataSection.tsx +0 -118
  122. package/src/RedactoPrivacyCenter/components/DataRequest/NominationDataSection.tsx +0 -66
  123. package/src/RedactoPrivacyCenter/components/DataRequest/ProductSelectionSection.tsx +0 -222
  124. package/src/RedactoPrivacyCenter/components/DataRequest/PurposeSelectionSection.tsx +0 -331
  125. package/src/RedactoPrivacyCenter/components/Form.tsx +0 -1821
  126. package/src/RedactoPrivacyCenter/components/GrievanceTable.tsx +0 -174
  127. package/src/RedactoPrivacyCenter/components/GrievanceTablePagination.tsx +0 -337
  128. package/src/RedactoPrivacyCenter/components/ModifyConsentModal.tsx +0 -334
  129. package/src/RedactoPrivacyCenter/components/NotificationHub/NotificationBell.tsx +0 -173
  130. package/src/RedactoPrivacyCenter/components/NotificationHub/NotificationCTAButton.tsx +0 -18
  131. package/src/RedactoPrivacyCenter/components/NotificationHub/NotificationDropdown.tsx +0 -54
  132. package/src/RedactoPrivacyCenter/components/NotificationHub/NotificationDropdownItem.tsx +0 -57
  133. package/src/RedactoPrivacyCenter/components/NotificationHub/NotificationIcon.tsx +0 -19
  134. package/src/RedactoPrivacyCenter/components/NotificationHub/NotificationListPanel.tsx +0 -92
  135. package/src/RedactoPrivacyCenter/components/NotificationHub/NotificationRefreshButton.tsx +0 -20
  136. package/src/RedactoPrivacyCenter/components/NotificationHub/NotificationRow.tsx +0 -58
  137. package/src/RedactoPrivacyCenter/components/NotificationHub/StatCard.tsx +0 -10
  138. package/src/RedactoPrivacyCenter/components/NotificationHub/useNotificationActions.ts +0 -112
  139. package/src/RedactoPrivacyCenter/components/NotificationHub/utils.ts +0 -27
  140. package/src/RedactoPrivacyCenter/components/Pagination.tsx +0 -140
  141. package/src/RedactoPrivacyCenter/components/PrivacyCenterEmptyState.tsx +0 -76
  142. package/src/RedactoPrivacyCenter/components/PrivacyCenterSessionExpired.tsx +0 -97
  143. package/src/RedactoPrivacyCenter/components/ReceiptsList.tsx +0 -454
  144. package/src/RedactoPrivacyCenter/components/RequestSubmit.tsx +0 -270
  145. package/src/RedactoPrivacyCenter/components/SelectUser.tsx +0 -95
  146. package/src/RedactoPrivacyCenter/components/SelectUserGate.tsx +0 -195
  147. package/src/RedactoPrivacyCenter/components/SideMenuBarPC/constants.tsx +0 -25
  148. package/src/RedactoPrivacyCenter/components/SideMenuBarPC/types.ts +0 -21
  149. package/src/RedactoPrivacyCenter/components/caseHistoryColumns.tsx +0 -159
  150. package/src/RedactoPrivacyCenter/components/constant.ts +0 -52
  151. package/src/RedactoPrivacyCenter/components/groupHelpers.ts +0 -155
  152. package/src/RedactoPrivacyCenter/components/receiptColumns.tsx +0 -203
  153. package/src/RedactoPrivacyCenter/components/types.ts +0 -123
  154. package/src/RedactoPrivacyCenter/components/utils.tsx +0 -10
  155. package/src/RedactoPrivacyCenter/config/routes.ts +0 -9
  156. package/src/RedactoPrivacyCenter/config/table.ts +0 -25
  157. package/src/RedactoPrivacyCenter/context/AuthContext.tsx +0 -252
  158. package/src/RedactoPrivacyCenter/context/BaseUrlContext.tsx +0 -47
  159. package/src/RedactoPrivacyCenter/context/BrandingContext.tsx +0 -52
  160. package/src/RedactoPrivacyCenter/context/DataAvailabilityContext.session-expired.test.tsx +0 -92
  161. package/src/RedactoPrivacyCenter/context/DataAvailabilityContext.tsx +0 -181
  162. package/src/RedactoPrivacyCenter/context/LocaleContext.tsx +0 -11
  163. package/src/RedactoPrivacyCenter/context/NavigationContext.tsx +0 -96
  164. package/src/RedactoPrivacyCenter/context/OrganizationContext.tsx +0 -30
  165. package/src/RedactoPrivacyCenter/context/PageChromeContext.tsx +0 -80
  166. package/src/RedactoPrivacyCenter/context/ProfileSwitchContext.tsx +0 -15
  167. package/src/RedactoPrivacyCenter/context/types.ts +0 -57
  168. package/src/RedactoPrivacyCenter/lib/api.ts +0 -759
  169. package/src/RedactoPrivacyCenter/lib/consent-manager/utils.tsx +0 -67
  170. package/src/RedactoPrivacyCenter/lib/constants.ts +0 -283
  171. package/src/RedactoPrivacyCenter/lib/i18n.ts +0 -81
  172. package/src/RedactoPrivacyCenter/lib/locales.ts +0 -102
  173. package/src/RedactoPrivacyCenter/lib/queries.ts +0 -141
  174. package/src/RedactoPrivacyCenter/lib/sandbox.ts +0 -104
  175. package/src/RedactoPrivacyCenter/lib/types.ts +0 -896
  176. package/src/RedactoPrivacyCenter/lib/useCurrentLanguage.ts +0 -37
  177. package/src/RedactoPrivacyCenter/lib/utils.refresh-circuit.test.ts +0 -127
  178. package/src/RedactoPrivacyCenter/lib/utils.refresh-storage.test.ts +0 -85
  179. package/src/RedactoPrivacyCenter/lib/utils.session-expired.test.ts +0 -109
  180. package/src/RedactoPrivacyCenter/lib/utils.ts +0 -798
  181. package/src/RedactoPrivacyCenter/locales/as/translation.json +0 -342
  182. package/src/RedactoPrivacyCenter/locales/bn/translation.json +0 -342
  183. package/src/RedactoPrivacyCenter/locales/brx/translation.json +0 -342
  184. package/src/RedactoPrivacyCenter/locales/doi/translation.json +0 -342
  185. package/src/RedactoPrivacyCenter/locales/en/translation.json +0 -357
  186. package/src/RedactoPrivacyCenter/locales/gom/translation.json +0 -342
  187. package/src/RedactoPrivacyCenter/locales/gu/translation.json +0 -342
  188. package/src/RedactoPrivacyCenter/locales/hi/translation.json +0 -345
  189. package/src/RedactoPrivacyCenter/locales/kn/translation.json +0 -342
  190. package/src/RedactoPrivacyCenter/locales/ks/translation.json +0 -342
  191. package/src/RedactoPrivacyCenter/locales/mai/translation.json +0 -342
  192. package/src/RedactoPrivacyCenter/locales/ml/translation.json +0 -342
  193. package/src/RedactoPrivacyCenter/locales/mni-Mtei/translation.json +0 -342
  194. package/src/RedactoPrivacyCenter/locales/mr/translation.json +0 -342
  195. package/src/RedactoPrivacyCenter/locales/ne/translation.json +0 -342
  196. package/src/RedactoPrivacyCenter/locales/or/translation.json +0 -342
  197. package/src/RedactoPrivacyCenter/locales/pa/translation.json +0 -342
  198. package/src/RedactoPrivacyCenter/locales/sa/translation.json +0 -342
  199. package/src/RedactoPrivacyCenter/locales/sat/translation.json +0 -342
  200. package/src/RedactoPrivacyCenter/locales/sd/translation.json +0 -342
  201. package/src/RedactoPrivacyCenter/locales/ta/translation.json +0 -342
  202. package/src/RedactoPrivacyCenter/locales/te/translation.json +0 -342
  203. package/src/RedactoPrivacyCenter/locales/ur/translation.json +0 -342
  204. package/src/RedactoPrivacyCenter/styles/applyBrandingTheme.ts +0 -66
  205. package/src/RedactoPrivacyCenter/styles/base.css +0 -117
  206. package/src/RedactoPrivacyCenter/styles/injectStyles.ts +0 -3108
  207. package/src/RedactoPrivacyCenter/styles/pcStyles.ts +0 -831
  208. package/src/RedactoPrivacyCenter/styles/responsive.ts +0 -138
  209. package/src/RedactoPrivacyCenter/styles/variables.css +0 -96
  210. package/src/RedactoPrivacyCenter/table/AdvancedTable.tsx +0 -387
  211. package/src/RedactoPrivacyCenter/table/AdvancedTablePagination.tsx +0 -468
  212. package/src/RedactoPrivacyCenter/table/index.ts +0 -2
  213. package/src/RedactoPrivacyCenter/types/images.d.ts +0 -29
  214. package/src/RedactoPrivacyCenter/ui/Footer.tsx +0 -69
  215. package/src/RedactoPrivacyCenter/ui/FormBlockWrapper.tsx +0 -54
  216. package/src/RedactoPrivacyCenter/ui/PCAccordion.tsx +0 -93
  217. package/src/RedactoPrivacyCenter/ui/PCActionIcon.tsx +0 -47
  218. package/src/RedactoPrivacyCenter/ui/PCAvatar.test.tsx +0 -83
  219. package/src/RedactoPrivacyCenter/ui/PCAvatar.tsx +0 -93
  220. package/src/RedactoPrivacyCenter/ui/PCBadge.tsx +0 -48
  221. package/src/RedactoPrivacyCenter/ui/PCButton.tsx +0 -77
  222. package/src/RedactoPrivacyCenter/ui/PCCheckbox.tsx +0 -55
  223. package/src/RedactoPrivacyCenter/ui/PCCollapse.tsx +0 -107
  224. package/src/RedactoPrivacyCenter/ui/PCEmpty.tsx +0 -35
  225. package/src/RedactoPrivacyCenter/ui/PCInput.tsx +0 -132
  226. package/src/RedactoPrivacyCenter/ui/PCLoader.tsx +0 -31
  227. package/src/RedactoPrivacyCenter/ui/PCModal.tsx +0 -106
  228. package/src/RedactoPrivacyCenter/ui/PCPopover.tsx +0 -206
  229. package/src/RedactoPrivacyCenter/ui/PCSelect.tsx +0 -433
  230. package/src/RedactoPrivacyCenter/ui/PCTable.tsx +0 -149
  231. package/src/RedactoPrivacyCenter/ui/PCText.tsx +0 -41
  232. package/src/RedactoPrivacyCenter/ui/PCTextarea.tsx +0 -43
  233. package/src/RedactoPrivacyCenter/ui/PCTitle.tsx +0 -37
  234. package/src/RedactoPrivacyCenter/ui/PCTooltip.tsx +0 -121
  235. package/src/RedactoPrivacyCenter/ui/SimpleBar.tsx +0 -25
  236. package/src/RedactoPrivacyCenter/ui/StatusBadge.tsx +0 -53
  237. package/src/RedactoPrivacyCenter/ui/index.ts +0 -18
  238. package/src/RedactoPrivacyCenter/utils/cn.ts +0 -28
  239. package/src/RedactoPrivacyCenter/utils/date.ts +0 -48
  240. package/src/RedactoPrivacyCenter/utils/status.ts +0 -111
  241. package/src/RedactoPrivacyCenter/utils/toast.ts +0 -130
  242. package/src/index.ts +0 -19
  243. package/src/privacy-center.ts +0 -113
  244. package/src/shared/api-errors.ts +0 -180
  245. package/src/shared/notice-consent-status.ts +0 -190
  246. package/src/shared/sandbox.ts +0 -6
  247. package/src/types/css.d.ts +0 -4
  248. package/src/types/images.d.ts +0 -19
  249. package/src/types/react-jsx.d.ts +0 -26
  250. package/tests/DataAvailabilityContext.test.tsx +0 -123
  251. package/tests/Form.test.tsx +0 -1424
  252. package/tests/ManageConsentErrorMapping.test.tsx +0 -85
  253. package/tests/ProductSelectionSection.test.tsx +0 -328
  254. package/tests/RequestSubmit.test.tsx +0 -135
  255. package/tests/RevocablePurpose.test.tsx +0 -146
  256. package/tests/RevokeWarningMessage.test.tsx +0 -151
  257. package/tests/consentClient.test.ts +0 -217
  258. package/tests/manageConsentServer.test.ts +0 -38
  259. package/tests/mocks.ts +0 -257
  260. package/tests/resolveContactFromJwt.test.ts +0 -44
  261. package/tests/setup.ts +0 -16
  262. package/tsconfig.json +0 -16
  263. package/tsup.config.ts +0 -31
  264. package/vitest.config.ts +0 -16
@@ -1,33 +0,0 @@
1
- /**
2
- * Client-side configuration for backend service URLs.
3
- * consent.baseUrl is set via BaseUrlProvider context.
4
- */
5
- let baseUrl: string | undefined = undefined;
6
-
7
- export const config = {
8
- consent: {
9
- get baseUrl() {
10
- return baseUrl;
11
- },
12
- },
13
- } as const;
14
-
15
- /**
16
- * Sets the base URL from the context provider.
17
- * This should be called by BaseUrlProvider when it mounts.
18
- */
19
- export function setUserBaseUrl(url: string): void {
20
- baseUrl = url;
21
- }
22
-
23
- /**
24
- * Validates that required base URL is set.
25
- * Throws an error if base URL is missing.
26
- */
27
- export function validateConfig(): void {
28
- if (!config.consent.baseUrl) {
29
- throw new Error(
30
- "Base URL is not defined. Ensure BaseUrlProvider is set up correctly."
31
- );
32
- }
33
- }
@@ -1,275 +0,0 @@
1
- import { sandboxAuthHeaders } from "../lib/sandbox";
2
-
3
- /**
4
- * Options for apiFetch function
5
- */
6
- export type ApiFetchOptions = RequestInit & {
7
- /**
8
- * Auth token getter function
9
- */
10
- getAuthToken?: () => Promise<string | null>;
11
- };
12
-
13
- /**
14
- * Standard API response wrapper
15
- */
16
- export type ApiResponse<T> = {
17
- code: number;
18
- status: string;
19
- detail: T;
20
- };
21
-
22
- /**
23
- * Error thrown by the fetch wrappers that preserves the HTTP status code and any
24
- * server-provided error code alongside the human-readable message.
25
- *
26
- * This exists so token-refresh classification (and react-query retry guards) can
27
- * reliably distinguish a *terminal* 4xx (the refresh token is dead — retrying just
28
- * hammers the server) from a *transient* 5xx/network failure, without resorting to
29
- * brittle substring matching on localized message strings. See the production
30
- * `/otp/refresh` retry storm on 2026-06-22.
31
- */
32
- export class ApiError extends Error {
33
- readonly status?: number;
34
- readonly code?: string;
35
- readonly detail?: unknown;
36
-
37
- constructor(
38
- message: string,
39
- options: { status?: number; code?: string; detail?: unknown } = {}
40
- ) {
41
- super(message);
42
- this.name = "ApiError";
43
- this.status = options.status;
44
- this.code = options.code;
45
- this.detail = options.detail;
46
- // Restore the prototype chain so `instanceof ApiError` works after the
47
- // class is transpiled down (tsup → ES targets).
48
- Object.setPrototypeOf(this, ApiError.prototype);
49
- }
50
- }
51
-
52
- // HTTP statuses that mean "this refresh token will never succeed" — retrying is
53
- // pointless and only adds server load. 5xx / 408 / 429 / network errors are NOT
54
- // in this set: those are transient and handled with backoff instead.
55
- const TERMINAL_REFRESH_STATUSES = new Set<number>([400, 401, 403, 422]);
56
-
57
- /**
58
- * True when an error from the OTP refresh endpoint is terminal — i.e. the refresh
59
- * token is expired, not found, already used, or otherwise invalid, so no amount of
60
- * immediate retrying will help. Prefers the HTTP status carried by {@link ApiError};
61
- * falls back to a deliberately narrow message match for non-typed throws.
62
- */
63
- export function isTerminalRefreshError(error: unknown): boolean {
64
- const e = error as { status?: unknown; message?: unknown } | null | undefined;
65
- if (!e) return false;
66
-
67
- // Primary, reliable signal: the HTTP status from the refresh response.
68
- if (typeof e.status === "number") {
69
- return TERMINAL_REFRESH_STATUSES.has(e.status);
70
- }
71
-
72
- // Fallback for errors without a status (older shapes / plain Error). Match only
73
- // the known terminal token phrases so transient failures aren't misclassified.
74
- const message = (typeof e.message === "string" ? e.message : "").toLowerCase();
75
- if (!message) return false;
76
- return (
77
- message.includes("expired") ||
78
- message.includes("revoked") ||
79
- message.includes("not found") ||
80
- message.includes("already used") ||
81
- message.includes("invalid refresh token") ||
82
- message.includes("unauthorized") ||
83
- message.includes("[401]") ||
84
- message.includes("[403]")
85
- );
86
- }
87
-
88
- /**
89
- * Unified fetch wrapper for client-side API calls.
90
- * Provides typed responses and automatic error handling.
91
- *
92
- * @param url - The URL to fetch
93
- * @param options - Fetch options including auth token getter
94
- * @returns Typed response data
95
- * @throws Error if the request fails
96
- */
97
- export async function apiFetch<T>(
98
- url: string,
99
- options: ApiFetchOptions = {}
100
- ): Promise<T> {
101
- const { getAuthToken, headers = {}, ...fetchOptions } = options;
102
-
103
- // Build headers using Headers object for better compatibility
104
- const requestHeaders = new Headers();
105
-
106
- // Set default headers (skip Content-Type for FormData - browser will set it with boundary)
107
- const isFormData = fetchOptions.body instanceof FormData;
108
- if (!isFormData) {
109
- requestHeaders.set("Content-Type", "application/json");
110
- }
111
- requestHeaders.set("Accept", "application/json");
112
-
113
- // Add custom headers from options
114
- if (headers && typeof headers === "object") {
115
- if (headers instanceof Headers) {
116
- headers.forEach((value, key) => {
117
- requestHeaders.set(key, value);
118
- });
119
- } else {
120
- Object.entries(headers as Record<string, string>).forEach(
121
- ([key, value]) => {
122
- if (value) {
123
- requestHeaders.set(key, value);
124
- }
125
- }
126
- );
127
- }
128
- }
129
-
130
- // Add auth AFTER custom headers so it's never overridden. Only for calls that
131
- // opt into auth (a `getAuthToken` is supplied) — public calls like org
132
- // branding (which hit the user server, not consent-server) stay unauthenticated
133
- // and must NOT receive the sandbox headers.
134
- if (getAuthToken) {
135
- // Sandbox PoC: send the single X-Consent-Token header instead of the session
136
- // token. The acting identity travels in the request payload (injected by the
137
- // client call sites), not a header.
138
- const sandboxHeaders = sandboxAuthHeaders();
139
- if (sandboxHeaders) {
140
- Object.entries(sandboxHeaders).forEach(([key, value]) => {
141
- requestHeaders.set(key, value);
142
- });
143
- } else {
144
- const token = await getAuthToken();
145
- if (token) {
146
- // Use the exact header format that works in other parts of the codebase
147
- // Other working API calls use 'X-Auth-Token' (capital A and T, rest lowercase)
148
- const trimmedToken = token.trim();
149
- requestHeaders.set("X-Auth-Token", trimmedToken);
150
- // Also set lowercase for compatibility (some servers are case-sensitive)
151
- requestHeaders.set("x-auth-token", trimmedToken);
152
- }
153
- }
154
- }
155
-
156
- // Build fetch options
157
- const fetchOptionsFinal: RequestInit = {
158
- ...fetchOptions,
159
- headers: requestHeaders,
160
- };
161
-
162
- try {
163
- const response = await fetch(url, fetchOptionsFinal);
164
-
165
- // Handle non-OK responses
166
- if (!response.ok) {
167
- let errorMessage = `Request failed with status ${response.status}`;
168
- let errorCode: string | undefined;
169
- let errorDetail: unknown;
170
-
171
- try {
172
- const errorData = (await response.json()) as {
173
- detail?: unknown;
174
- message?: string;
175
- code?: string;
176
- } | null;
177
- if (errorData) {
178
- errorDetail = errorData.detail;
179
- if (typeof errorData.code === "string") {
180
- errorCode = errorData.code;
181
- }
182
- if ("detail" in errorData && errorData.detail) {
183
- errorMessage =
184
- typeof errorData.detail === "string"
185
- ? errorData.detail
186
- : JSON.stringify(errorData.detail, null, 2);
187
- } else if ("message" in errorData && errorData.message) {
188
- errorMessage = errorData.message;
189
- }
190
- }
191
- } catch {
192
- // If response is not JSON, try to get text
193
- try {
194
- const errorText = await response.text();
195
- if (errorText) {
196
- errorMessage = errorText;
197
- }
198
- } catch {
199
- // Ignore parsing errors
200
- }
201
- }
202
-
203
- // Preserve status + server error code so callers can classify terminal vs.
204
- // transient failures without brittle string matching (incident 2026-06-22).
205
- throw new ApiError(errorMessage, {
206
- status: response.status,
207
- code: errorCode,
208
- detail: errorDetail,
209
- });
210
- }
211
-
212
- // Handle empty responses (common for DELETE requests with 204 No Content)
213
- const contentLength = response.headers.get("Content-Length");
214
- const contentType = response.headers.get("Content-Type") || "";
215
-
216
- // If content length is 0, return undefined for void types
217
- if (contentLength === "0") {
218
- return undefined as T;
219
- }
220
-
221
- // Read response text once (we can't read it twice)
222
- let text: string;
223
- try {
224
- text = await response.text();
225
- } catch (error) {
226
- // If reading fails, assume empty response is acceptable for void return types
227
- return undefined as T;
228
- }
229
-
230
- // If response is empty, return undefined for void types
231
- if (!text || text.trim() === "") {
232
- return undefined as T;
233
- }
234
-
235
- // Parse JSON response
236
- if (contentType && !contentType.includes("application/json")) {
237
- throw new Error(
238
- `Expected JSON response, got ${contentType}: ${text.substring(0, 100)}`
239
- );
240
- }
241
-
242
- let data: ApiResponse<T> | T;
243
- try {
244
- data = JSON.parse(text) as ApiResponse<T> | T;
245
- } catch (parseError) {
246
- // If JSON parsing fails, check if it's just whitespace or "null"
247
- if (text.trim() === "" || text.trim() === "null") {
248
- return undefined as T;
249
- }
250
- // Otherwise, throw the parsing error
251
- throw new Error(
252
- `Failed to parse JSON response: ${parseError instanceof Error ? parseError.message : String(parseError)}. Response: ${text.substring(0, 200)}`
253
- );
254
- }
255
-
256
- // Handle wrapped API responses (code, status, detail format)
257
- if (
258
- typeof data === "object" &&
259
- data !== null &&
260
- "code" in data &&
261
- "status" in data &&
262
- "detail" in data
263
- ) {
264
- const apiResponse = data as ApiResponse<T>;
265
- return apiResponse.detail as T;
266
- }
267
-
268
- return data as T;
269
- } catch (error) {
270
- if (error instanceof Error) {
271
- throw error;
272
- }
273
- throw new Error(`Unknown error occurred: ${String(error)}`);
274
- }
275
- }
@@ -1,16 +0,0 @@
1
- import { apiFetch } from './fetcher';
2
- import type { OrgBrandingDetail } from '../lib/types';
3
-
4
- function getUserServerBaseUrl(baseUrl: string): string {
5
- return baseUrl.includes('.io')
6
- ? 'https://api.redacto.io/user/api/0'
7
- : 'https://api.redacto.tech/user/api/0';
8
- }
9
-
10
- export async function fetchOrgBranding(
11
- slug: string,
12
- baseUrl: string,
13
- ): Promise<OrgBrandingDetail> {
14
- const url = `${getUserServerBaseUrl(baseUrl)}/public/org-branding/by-slug/${encodeURIComponent(slug)}`;
15
- return apiFetch<OrgBrandingDetail>(url, { method: 'GET' });
16
- }
@@ -1,93 +0,0 @@
1
- import { decodeJwtToken } from '../lib/utils';
2
-
3
- export type UploadParams = {
4
- formData: FormData;
5
- fileName: string;
6
- authToken: string;
7
- baseUrl: string;
8
- };
9
-
10
- export type UploadResult = {
11
- success: boolean;
12
- uuid?: string;
13
- name?: string;
14
- error?: string;
15
- };
16
-
17
- /**
18
- * Upload function using JWT Bearer token authentication
19
- * Used for privacy-center file uploads
20
- * Client-side version that uses baseUrl from BaseUrlProvider context and JWT Bearer token
21
- *
22
- * @param formData - FormData containing the file and payload (constructed on client)
23
- * @param fileName - Original file name for the response
24
- * @param authToken - JWT Bearer token for authentication
25
- * @param baseUrl - Base URL for the API (from BaseUrlProvider context)
26
- */
27
- export const uploadFileWithS2S = async ({
28
- formData,
29
- fileName,
30
- authToken,
31
- baseUrl,
32
- }: UploadParams): Promise<UploadResult> => {
33
- try {
34
- if (!authToken) {
35
- throw new Error('Auth token is required for document upload');
36
- }
37
-
38
- if (!baseUrl) {
39
- throw new Error('Base URL is required for document upload');
40
- }
41
-
42
- // Decode JWT token to extract organisation_uuid and workspace_uuid
43
- const decodedToken = decodeJwtToken(authToken);
44
- if (!decodedToken) {
45
- throw new Error('Invalid access token');
46
- }
47
-
48
- const { organisation_uuid, workspace_uuid } = decodedToken;
49
- if (!organisation_uuid || !workspace_uuid) {
50
- throw new Error('Invalid token: missing organization or workspace UUID');
51
- }
52
-
53
- // Use the new API endpoint
54
- const url = `${baseUrl}/organisations/${organisation_uuid}/workspaces/${workspace_uuid}/dsar/privacy-center/upload-document`;
55
-
56
- const response = await fetch(url, {
57
- method: 'POST',
58
- headers: {
59
- 'Authorization': `Bearer ${authToken}`,
60
- },
61
- body: formData,
62
- });
63
-
64
- if (!response.ok) {
65
- const errorText = await response.text();
66
- throw new Error(`Status: ${response.status} ${response.statusText}. ${errorText}`);
67
- }
68
-
69
- // The API returns the document wrapped in a response object with 'detail'
70
- const responseData = await response.json();
71
-
72
- // Extract the document from the detail field
73
- // API response structure: { code: 200, status: "OK", detail: { uuid: "...", ... } }
74
- const documentResponse = responseData.detail || responseData;
75
-
76
- if (documentResponse && documentResponse.uuid) {
77
- return {
78
- success: true,
79
- uuid: documentResponse.uuid,
80
- name: fileName,
81
- };
82
- } else {
83
- // Log the response for debugging
84
- console.error('Upload response missing UUID:', responseData);
85
- throw new Error('Upload failed - no UUID in response');
86
- }
87
- } catch (error) {
88
- return {
89
- success: false,
90
- error: error instanceof Error ? error.message : 'Unknown error',
91
- };
92
- }
93
- };
@@ -1,31 +0,0 @@
1
- <svg width="245" height="227" viewBox="0 0 245 227" fill="none" xmlns="http://www.w3.org/2000/svg">
2
- <path d="M244.751 96.7438C243.634 76.7186 238.251 56.4076 227.155 39.5295C221.631 31.0549 214.626 23.6452 206.474 17.6555C197.44 11.0715 186.882 6.65971 176.054 4.02525C164.449 1.20172 152.419 0.243735 140.503 0.0546596C128.587 -0.134416 116.512 0.1555 104.604 1.10508C91.9529 2.11349 79.3941 4.32778 67.7974 9.65551C59.3486 13.6129 51.677 19.0517 45.1462 25.7143C48.8226 27.2228 52.247 28.9202 53.7386 31.6219C55.331 34.5043 54.2512 39.0799 51.2176 47.1009C48.4697 54.3404 44.6462 63.9077 40.1461 78.4287C40.5121 78.3793 40.8842 78.3992 41.2428 78.4875C45.789 79.643 39.9193 99.3993 37.1419 107.004C35.2428 112.21 32.5201 115.887 31.5621 121.025C30.9403 124.387 30.3604 129.046 30.2344 130.051C30.5033 130.084 30.7722 130.118 31.0327 130.16C32.1981 134.553 33.0739 139.018 33.6545 143.525C37.5789 144.067 41.894 152.172 43.4823 156.168C46.3352 163.345 48.642 170.706 51.5957 177.883C55.5915 187.58 61.0159 200.046 72.3773 200.82C76.2617 201.075 80.151 200.399 83.7218 198.849C82.1672 193.181 82.2428 187.803 86.8353 184.332C83.4991 181.185 82.0454 175.164 82.2764 170.593C82.4823 166.555 84.2974 161.769 88.1378 160.147C87.9403 154.836 88.2596 147.883 88.2596 142.437C88.7512 142.437 89.2428 142.467 89.7302 142.475L89.5832 141.66L88.6168 131.13L88.5538 131.034C86.9668 130.813 85.5109 130.032 84.4487 128.832L83.6546 129.08C80.663 128.962 78.6672 129.651 75.8773 127.504C73.9193 125.996 72.2974 122.941 71.7596 120.084L70.8269 119.567C66.2302 116.5 64.0663 104.231 71.4361 103.773L72.5663 103.277C71.2428 97.1598 73.4949 93.8195 79.289 91.7228C80.5495 91.2606 81.9487 90.7774 83.3941 90.3447C79.7596 88.664 75.3857 86.5631 72.0033 84.3194C68.8647 82.248 65.4361 79.7564 63.2848 76.7564C61.3647 74.0673 58.8941 69.2564 62.3857 66.6388C66.2806 63.6976 70.2008 67.6219 72.8395 69.8236C76.8059 73.1346 81.5916 75.5085 86.1462 78.1388C90.4025 80.601 95.7554 82.9035 100.344 85.3867C109.167 90.1682 116.608 92.8615 115.684 104.479C114.919 114.059 110.222 124.156 111.432 135.277V135.433C111.94 135.051 112.47 134.647 113.029 134.214C113.953 138.37 114.613 147.756 114.613 147.756C119.94 146.235 121.991 153.303 124.071 160.299L124.209 160.198C126.398 157.462 128.604 154.756 130.932 152.13C139.335 142.63 148.999 131.122 154.461 125.84C154.659 126.143 154.882 126.45 155.113 126.761C157.008 122.164 161.256 111.983 163.655 107.219C166.659 101.261 171.247 92.9539 175.18 87.143C171.882 84.4245 159.415 77.2648 156.272 74.8699C167.424 70.1304 177.924 67.0421 188.701 65.7522C189.31 65.6808 189.961 65.6136 190.6 65.5547C189.181 64.124 188.041 62.4412 187.239 60.5925C186.785 59.5631 187.894 58.2732 188.953 59.0085C193.188 61.9497 198.617 60.1892 203.373 61.1598C207.155 61.9329 210.827 64.8446 210.63 68.9875C210.699 69.0116 210.766 69.0411 210.831 69.0757C211.249 69.3023 211.647 69.5637 212.02 69.8573C219.205 73.8867 218.743 85.1682 216.398 91.8531C216.172 92.4861 215.928 93.1122 215.667 93.7312C219.73 94.7943 222.974 97.2228 222.327 101.983C221.419 108.706 212.663 109.235 206.062 108.147L206.193 108.172C204.628 109.847 202.746 111.193 200.655 112.13C200.425 112.233 200.177 112.288 199.926 112.292C199.674 112.296 199.425 112.248 199.193 112.151C197.894 116.954 196.151 123.677 195.693 126.857C194.827 132.883 193.55 142.622 193.55 142.622L193.432 143.164C193.655 143.122 193.877 143.076 194.092 143.025C194.092 143.025 193.714 150.866 195.092 152.521C196.47 154.177 202.062 158.664 204.583 161.172C207.793 164.404 210.802 168.735 213.407 173.357C218.947 169.899 223.941 165.634 228.222 160.702C242.928 143.471 245.974 118.66 244.751 96.7438Z" fill="#F4F6F9"/>
3
- <path d="M114.593 135.148C114.593 135.148 113.934 125.762 113.009 121.606C109.387 124.392 107.056 126.169 102.955 127.846C98.3539 129.724 93.4967 130.022 88.2488 129.833C88.2488 135.296 87.9295 142.233 88.127 147.543C93.3941 147.483 98.5864 146.288 103.35 144.039C107.946 141.871 113.408 138.506 114.593 135.148Z" stroke="#333333" stroke-width="2.94118" stroke-linecap="round" stroke-linejoin="round"/>
4
- <path d="M147.652 126.04C147.131 128.914 145.093 138.843 150.438 135.742C154.463 133.41 157.038 128.217 160.572 125.41C161.038 131.431 157.144 138.982 160.345 145.028C163.349 150.704 172.215 147.272 177.005 145.423C180.366 144.124 186.589 141.721 189.938 141.124" stroke="#333333" stroke-width="2.94118" stroke-linecap="round" stroke-linejoin="round"/>
5
- <path d="M155.254 113.666C155.254 113.666 160.493 100.872 163.657 94.611C166.661 88.6531 171.25 80.3463 175.183 74.5354C171.884 71.8169 159.418 64.6572 156.275 62.2623C167.426 57.5228 177.926 54.4345 188.704 53.1446C198.006 52.0312 212.821 52.2539 210.8 65.8631C210.035 70.985 207.355 76.59 204.498 80.9892C210.069 79.6783 223.573 80.1194 222.313 89.3926C221.111 98.2665 206.12 96.359 200.683 94.1405C200.683 94.1405 196.435 109.014 195.678 114.275C194.813 120.3 193.535 130.04 193.535 130.04" stroke="#333333" stroke-width="2.94118" stroke-linecap="round" stroke-linejoin="round"/>
6
- <path d="M182.383 81.9893C183.618 83.2077 187.063 83.4304 188.685 82.8296" stroke="#333333" stroke-width="2.94118" stroke-linecap="round" stroke-linejoin="round"/>
7
- <path d="M185.162 68.0596C184.653 69.0974 183.809 70.8411 183.809 70.8411" stroke="#333333" stroke-width="2.94118" stroke-linecap="round" stroke-linejoin="round"/>
8
- <path d="M190.888 69.8545C190.376 70.8923 189.535 72.636 189.535 72.636" stroke="#333333" stroke-width="2.94118" stroke-linecap="round" stroke-linejoin="round"/>
9
- <path d="M88.1272 147.543C84.2869 149.169 82.4718 153.951 82.2659 157.988C82.0348 162.56 83.4886 168.581 86.8247 171.728C81.0096 176.123 82.434 183.577 85.2491 190.808C88.0642 198.039 93.8962 209.984 93.8962 213.976" stroke="#333333" stroke-width="2.94118" stroke-linecap="round" stroke-linejoin="round"/>
10
- <path d="M114.594 135.148C120.451 133.467 122.35 142.19 124.678 149.77C127.006 157.349 131.741 167.026 136.745 175.522C143.384 186.782 155.232 208.295 172.375 208.261C182.829 208.261 184.19 201.996 181.989 198.673C179.787 195.349 173.682 197.98 177.132 201.925C180.581 205.87 189.522 198.496 192.22 190.123" stroke="#333333" stroke-width="2.94118" stroke-linecap="round" stroke-linejoin="round"/>
11
- <path d="M124.191 147.589C126.38 144.853 128.586 142.147 130.914 139.521C139.317 130.021 148.981 118.513 154.444 113.231C156.696 116.639 160.872 120.555 167.889 124.626C174.906 128.698 185.956 132.32 194.078 130.425C194.078 130.425 193.7 138.265 195.078 139.925C196.456 141.584 202.065 146.055 204.586 148.563C211.208 155.227 216.969 166.576 219.956 175.521C221.561 180.337 223.267 188.618 223.965 193.526" stroke="#333333" stroke-width="2.94118" stroke-linecap="round" stroke-linejoin="round"/>
12
- <path d="M9.70073 136.779C9.70073 136.779 7.30997 121.489 6.95703 117.901C14.9175 116.588 23.0295 116.472 31.0243 117.556C32.1897 121.949 33.0655 126.414 33.6461 130.922C37.5705 131.464 41.8856 139.569 43.4739 143.565C46.3268 150.741 48.6335 158.102 51.5873 165.279C55.5831 174.976 61.0075 187.443 72.3689 188.216C76.2533 188.471 80.1426 187.796 83.7134 186.245" stroke="#333333" stroke-width="2.94118" stroke-linecap="round" stroke-linejoin="round"/>
13
- <path d="M33.6455 130.922C25.7925 130.922 10.6034 134.229 6.95637 139.258C3.3093 144.287 7.50259 162.392 9.13704 168.363C12.2337 179.666 14.7043 191.981 19.3471 202.687C22.1034 209.048 24.011 219.876 28.9816 224.661" stroke="#333333" stroke-width="2.94118" stroke-linecap="round" stroke-linejoin="round"/>
14
- <path d="M18.0664 93.5317C19.6252 87.9981 25.5202 85.4771 30.9446 82.2628C33.8857 74.6998 36.6841 64.7334 41.2345 65.8762C45.7849 67.0191 39.911 86.788 37.1337 94.3931C35.2345 99.599 32.5118 103.275 31.5538 108.414C30.8521 112.225 30.2051 117.637 30.2051 117.637" stroke="#333333" stroke-width="2.94118" stroke-linecap="round" stroke-linejoin="round"/>
15
- <path d="M89.5755 129.056L88.6133 118.522" stroke="#333333" stroke-width="2.94118" stroke-linecap="round" stroke-linejoin="round"/>
16
- <path d="M90.6312 118.211C85.0304 119.976 79.2615 111.325 84.6522 107.997" stroke="#333333" stroke-width="2.94118" stroke-linecap="round" stroke-linejoin="round"/>
17
- <path d="M19.2043 90.7073C19.2043 90.7073 13.7127 89.2871 11.1202 87.3459C7.37232 84.5476 8.75887 79.0224 9.12021 74.9047C10.6412 57.5434 15.1328 42.64 21.8471 26.7954C23.7925 22.203 26.2505 16.329 29.3723 12.5097C32.5782 8.58113 37.0152 9.87525 41.7967 11.7786C46.5782 13.682 51.8009 15.5013 53.7421 19.0223C55.3346 21.9047 54.2547 26.4803 51.2211 34.5013C48.4732 41.7408 44.6497 51.3081 40.1497 65.8291" stroke="#333333" stroke-width="2.94118" stroke-linecap="round" stroke-linejoin="round"/>
18
- <path d="M83.6481 116.472C80.6565 116.354 78.6607 117.043 75.8708 114.896C73.3036 112.921 71.3035 108.278 71.5851 104.917C71.9674 100.358 84.959 91.354 87.4464 94.6103" stroke="#333333" stroke-width="2.94118" stroke-linecap="round" stroke-linejoin="round"/>
19
- <path d="M7.41457 116.531C5.28432 106.968 6.93979 97.7197 4.89357 88.4508C3.07424 80.2743 0.422975 69.9004 3.21289 61.9172C4.70869 57.6398 7.83475 56.455 11.0827 58.8415" stroke="#333333" stroke-width="2.94118" stroke-linecap="round" stroke-linejoin="round"/>
20
- <path d="M72.3063 102.509C70.8988 96.0262 71.0752 92.7825 76.6424 89.1019C79.8693 86.9674 87.1719 83.1607 90.4576 84.0598" stroke="#333333" stroke-width="2.94118" stroke-linecap="round" stroke-linejoin="round"/>
21
- <path d="M5.84409 57.5213C4.58359 56.1683 5.04997 51.2986 6.113 49.4625C7.47435 47.0969 12.092 43.9582 14.8483 45.7818" stroke="#333333" stroke-width="2.94118" stroke-linecap="round" stroke-linejoin="round"/>
22
- <path d="M72.696 91.295C71.0784 84.7698 73.2969 81.2824 79.2633 79.1101C84.4019 77.2446 91.4481 75.0009 96.3893 77.3664" stroke="#333333" stroke-width="2.94118" stroke-linecap="round" stroke-linejoin="round"/>
23
- <path d="M8.84486 46.9627C7.43729 42.1014 11.0717 36.1098 17.2482 36.8367" stroke="#333333" stroke-width="2.94118" stroke-linecap="round" stroke-linejoin="round"/>
24
- <path d="M70.8226 106.959C66.2259 103.892 64.0621 91.623 71.4318 91.165" stroke="#333333" stroke-width="2.94118" stroke-linecap="round" stroke-linejoin="round"/>
25
- <path d="M11.6172 37.9211C11.6172 32.4925 16.6004 21.795 22.1214 25.0555" stroke="#333333" stroke-width="2.94118" stroke-linecap="round" stroke-linejoin="round"/>
26
- <path d="M83.4763 77.7828C79.8208 76.1021 75.3923 73.9676 71.9763 71.7113C68.8376 69.6399 65.4091 67.1483 63.2578 64.1483C61.3376 61.4592 58.867 56.6483 62.3586 54.0306C66.2536 51.0895 70.1738 55.0138 72.8124 57.2155C76.7788 60.5264 81.5645 62.9004 86.1191 65.5307C90.3755 67.9928 95.7284 70.2954 100.317 72.7786C109.14 77.5601 116.581 80.2534 115.657 91.871C114.892 101.451 110.195 111.548 111.405 122.669" stroke="#333333" stroke-width="2.94118" stroke-linecap="round" stroke-linejoin="round"/>
27
- <path d="M15.2227 83.0514C17.1302 63.1985 22.6848 47.8035 28.9832 28.8917C30.1554 25.3707 33.479 17.8539 36.3655 15.4043" stroke="#333333" stroke-width="2.94118" stroke-linecap="round" stroke-linejoin="round"/>
28
- <path d="M210.168 88.6183C210.786 88.1729 214.176 88.1309 214.176 88.1309" stroke="#333333" stroke-width="2.94118" stroke-linecap="round" stroke-linejoin="round"/>
29
- <path d="M199.156 99.5398C199.39 99.6417 199.643 99.6943 199.898 99.6943C200.153 99.6943 200.405 99.6417 200.639 99.5398C202.73 98.6019 204.613 97.2563 206.177 95.5818C204.299 95.3007 202.456 94.8175 200.681 94.1406C200.681 94.1406 200.009 96.4263 199.156 99.5398Z" fill="#333333"/>
30
- <path d="M212.007 57.2499C211.633 56.9564 211.236 56.6949 210.818 56.4684C210.753 56.4337 210.686 56.4042 210.616 56.3801C210.814 52.2373 207.158 49.3255 203.36 48.5524C198.608 47.5818 193.175 49.3507 188.94 46.4011C187.881 45.6658 186.772 46.9558 187.225 47.9852C190.679 55.8801 198.948 58.7247 206.973 59.3885C205.053 61.6028 204.31 64.7667 204.276 67.7415C204.221 72.5566 205.839 78.6659 201.604 82.2667C200.574 83.1365 201.822 84.9642 202.99 84.2205C204.663 83.1524 206.219 81.9117 207.633 80.5188C210.327 80.2877 213.041 80.492 215.671 81.1239C215.931 80.5048 216.175 79.8788 216.402 79.2457C218.738 72.5608 219.192 61.2793 212.007 57.2499Z" fill="#333333"/>
31
- </svg>
@@ -1,9 +0,0 @@
1
- <svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
2
- <rect width="20" height="20" fill="url(#pattern0_23786_24365)"/>
3
- <defs>
4
- <pattern id="pattern0_23786_24365" patternContentUnits="objectBoundingBox" width="1" height="1">
5
- <use xlink:href="#image0_23786_24365" transform="scale(0.00195312)"/>
6
- </pattern>
7
- <image id="image0_23786_24365" width="512" height="512" preserveAspectRatio="none" xlink:href="data:image/png;base64,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"/>
8
- </defs>
9
- </svg>
@@ -1,4 +0,0 @@
1
- <svg width="28" height="28" viewBox="0 0 28 28" fill="none" xmlns="http://www.w3.org/2000/svg">
2
- <circle cx="14" cy="14" r="14" fill="#00B41D"/>
3
- <path d="M10 14.8297C11.1536 16.0008 12.1379 17 12.1379 17L18 11" stroke="white" stroke-width="1.63076" stroke-linecap="round" stroke-linejoin="round"/>
4
- </svg>
@@ -1,3 +0,0 @@
1
- <svg width="22" height="18" viewBox="0 0 22 18" fill="none" xmlns="http://www.w3.org/2000/svg">
2
- <path d="M1 4L9.16492 9.71544C9.82609 10.1783 10.1567 10.4097 10.5163 10.4993C10.8339 10.5785 11.1661 10.5785 11.4837 10.4993C11.8433 10.4097 12.1739 10.1783 12.8351 9.71544L21 4M5.8 17H16.2C17.8802 17 18.7202 17 19.362 16.673C19.9265 16.3854 20.3854 15.9265 20.673 15.362C21 14.7202 21 13.8802 21 12.2V5.8C21 4.11984 21 3.27976 20.673 2.63803C20.3854 2.07354 19.9265 1.6146 19.362 1.32698C18.7202 1 17.8802 1 16.2 1H5.8C4.11984 1 3.27976 1 2.63803 1.32698C2.07354 1.6146 1.6146 2.07354 1.32698 2.63803C1 3.27976 1 4.11984 1 5.8V12.2C1 13.8802 1 14.7202 1.32698 15.362C1.6146 15.9265 2.07354 16.3854 2.63803 16.673C3.27976 17 4.11984 17 5.8 17Z" stroke="#344054" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
3
- </svg>