@scality/data-browser-library 1.0.0-preview.8 → 1.0.1

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 (303) hide show
  1. package/dist/components/DataBrowserUI.d.ts +12 -0
  2. package/dist/components/DataBrowserUI.js +99 -0
  3. package/dist/components/Editor.d.ts +1 -1
  4. package/dist/components/Editor.js +3 -3
  5. package/dist/components/__tests__/BucketAccessor.test.js +214 -0
  6. package/dist/components/__tests__/BucketCorsPage.test.d.ts +1 -0
  7. package/dist/components/__tests__/BucketCorsPage.test.js +263 -0
  8. package/dist/components/__tests__/BucketCreate.test.d.ts +1 -0
  9. package/dist/components/__tests__/BucketCreate.test.js +574 -0
  10. package/dist/components/__tests__/BucketDetails.test.d.ts +1 -0
  11. package/dist/components/__tests__/BucketDetails.test.js +421 -0
  12. package/dist/components/__tests__/BucketLifecycleFormPage.test.d.ts +14 -0
  13. package/dist/components/__tests__/BucketLifecycleFormPage.test.js +618 -0
  14. package/dist/components/__tests__/BucketLifecycleList.test.d.ts +1 -0
  15. package/dist/components/__tests__/BucketLifecycleList.test.js +325 -0
  16. package/dist/components/__tests__/BucketList.test.js +495 -81
  17. package/dist/components/__tests__/BucketNotificationFormPage.test.d.ts +1 -0
  18. package/dist/components/__tests__/BucketNotificationFormPage.test.js +348 -0
  19. package/dist/components/__tests__/BucketNotificationList.test.d.ts +1 -0
  20. package/dist/components/__tests__/BucketNotificationList.test.js +379 -0
  21. package/dist/components/__tests__/BucketOverview.test.js +484 -179
  22. package/dist/components/__tests__/BucketPolicyPage.test.js +151 -99
  23. package/dist/components/__tests__/BucketReplicationFormPage.test.d.ts +16 -0
  24. package/dist/components/__tests__/BucketReplicationFormPage.test.js +1757 -0
  25. package/dist/components/__tests__/BucketReplicationList.test.d.ts +1 -0
  26. package/dist/components/__tests__/BucketReplicationList.test.js +344 -0
  27. package/dist/components/__tests__/CreateFolderButton.test.js +56 -56
  28. package/dist/components/__tests__/DeleteBucketButton.test.js +64 -64
  29. package/dist/components/__tests__/DeleteBucketConfigRuleButton.test.d.ts +1 -0
  30. package/dist/components/__tests__/DeleteBucketConfigRuleButton.test.js +196 -0
  31. package/dist/components/__tests__/DeleteObjectButton.test.js +64 -64
  32. package/dist/components/__tests__/EmptyBucketButton.test.d.ts +1 -0
  33. package/dist/components/__tests__/EmptyBucketButton.test.js +302 -0
  34. package/dist/components/__tests__/MetadataSearch.test.js +65 -65
  35. package/dist/components/__tests__/ObjectList.test.js +741 -240
  36. package/dist/components/__tests__/UploadButton.test.js +45 -45
  37. package/dist/components/breadcrumb/Breadcrumb.d.ts +6 -0
  38. package/dist/components/breadcrumb/Breadcrumb.js +37 -0
  39. package/dist/components/breadcrumb/DataBrowserBreadcrumb.d.ts +1 -0
  40. package/dist/components/breadcrumb/DataBrowserBreadcrumb.js +10 -0
  41. package/dist/components/breadcrumb/__tests__/Breadcrumb.test.d.ts +1 -0
  42. package/dist/components/breadcrumb/__tests__/Breadcrumb.test.js +196 -0
  43. package/dist/components/breadcrumb/__tests__/DataBrowserBreadcrumb.test.d.ts +1 -0
  44. package/dist/components/breadcrumb/__tests__/DataBrowserBreadcrumb.test.js +153 -0
  45. package/dist/components/breadcrumb/__tests__/useBreadcrumbPaths.test.d.ts +1 -0
  46. package/dist/components/breadcrumb/__tests__/useBreadcrumbPaths.test.js +134 -0
  47. package/dist/components/breadcrumb/index.d.ts +8 -0
  48. package/dist/components/breadcrumb/index.js +4 -0
  49. package/dist/components/breadcrumb/useBreadcrumbPaths.d.ts +2 -0
  50. package/dist/components/breadcrumb/useBreadcrumbPaths.js +82 -0
  51. package/dist/components/buckets/BucketAccessor.d.ts +2 -0
  52. package/dist/components/buckets/BucketAccessor.js +125 -0
  53. package/dist/components/buckets/BucketConfigEditButton.d.ts +8 -0
  54. package/dist/components/buckets/{BucketPolicyButton.js → BucketConfigEditButton.js} +9 -5
  55. package/dist/components/buckets/BucketCorsPage.d.ts +1 -0
  56. package/dist/components/buckets/BucketCorsPage.js +234 -0
  57. package/dist/components/buckets/BucketCreate.d.ts +50 -0
  58. package/dist/components/buckets/BucketCreate.js +279 -0
  59. package/dist/components/buckets/BucketDetails.d.ts +42 -0
  60. package/dist/components/buckets/BucketDetails.js +256 -40
  61. package/dist/components/buckets/BucketLifecycleFormPage.d.ts +15 -0
  62. package/dist/components/buckets/BucketLifecycleFormPage.js +1086 -0
  63. package/dist/components/buckets/BucketLifecycleList.d.ts +10 -0
  64. package/dist/components/buckets/BucketLifecycleList.js +270 -0
  65. package/dist/components/buckets/BucketList.d.ts +6 -4
  66. package/dist/components/buckets/BucketList.js +161 -94
  67. package/dist/components/buckets/BucketLocation.js +4 -4
  68. package/dist/components/buckets/BucketOverview.d.ts +86 -5
  69. package/dist/components/buckets/BucketOverview.js +481 -192
  70. package/dist/components/buckets/BucketPage.js +44 -22
  71. package/dist/components/buckets/BucketPolicyPage.js +155 -127
  72. package/dist/components/buckets/BucketReplicationFormPage.d.ts +1 -0
  73. package/dist/components/buckets/BucketReplicationFormPage.js +835 -0
  74. package/dist/components/buckets/BucketReplicationList.d.ts +11 -0
  75. package/dist/components/buckets/BucketReplicationList.js +189 -0
  76. package/dist/components/buckets/BucketVersioning.d.ts +4 -0
  77. package/dist/components/buckets/BucketVersioning.js +76 -0
  78. package/dist/components/buckets/DeleteBucketButton.js +8 -8
  79. package/dist/components/buckets/DeleteBucketConfigRuleButton.d.ts +18 -0
  80. package/dist/components/buckets/DeleteBucketConfigRuleButton.js +53 -0
  81. package/dist/components/buckets/EmptyBucketButton.d.ts +5 -0
  82. package/dist/components/buckets/EmptyBucketButton.js +232 -0
  83. package/dist/components/buckets/EmptyBucketSummary.d.ts +9 -0
  84. package/dist/components/buckets/EmptyBucketSummary.js +60 -0
  85. package/dist/components/buckets/EmptyBucketSummaryList.d.ts +13 -0
  86. package/dist/components/buckets/EmptyBucketSummaryList.js +140 -0
  87. package/dist/components/buckets/__tests__/BucketVersioning.test.d.ts +1 -0
  88. package/dist/components/buckets/__tests__/BucketVersioning.test.js +163 -0
  89. package/dist/components/buckets/notifications/BucketNotificationFormPage.d.ts +1 -0
  90. package/dist/components/buckets/notifications/BucketNotificationFormPage.js +316 -0
  91. package/dist/components/buckets/notifications/BucketNotificationList.d.ts +10 -0
  92. package/dist/components/buckets/notifications/BucketNotificationList.js +267 -0
  93. package/dist/components/buckets/notifications/EventsSection.js +145 -29
  94. package/dist/components/buckets/notifications/__tests__/events.test.d.ts +1 -0
  95. package/dist/components/buckets/notifications/__tests__/events.test.js +56 -0
  96. package/dist/components/buckets/notifications/events.d.ts +71 -7
  97. package/dist/components/buckets/notifications/events.js +98 -16
  98. package/dist/components/index.d.ts +27 -13
  99. package/dist/components/index.js +20 -6
  100. package/dist/components/layouts/ArrowNavigation.d.ts +3 -0
  101. package/dist/components/layouts/ArrowNavigation.js +28 -0
  102. package/dist/components/layouts/BrowserPageLayout.d.ts +5 -1
  103. package/dist/components/layouts/BrowserPageLayout.js +10 -5
  104. package/dist/components/objects/CreateFolderButton.d.ts +2 -2
  105. package/dist/components/objects/CreateFolderButton.js +12 -12
  106. package/dist/components/objects/DeleteObjectButton.d.ts +1 -1
  107. package/dist/components/objects/DeleteObjectButton.js +19 -21
  108. package/dist/components/objects/GetPresignedUrlButton.d.ts +7 -0
  109. package/dist/components/objects/GetPresignedUrlButton.js +255 -0
  110. package/dist/components/objects/ObjectDetails/ObjectMetadata.d.ts +2 -2
  111. package/dist/components/objects/ObjectDetails/ObjectMetadata.js +263 -230
  112. package/dist/components/objects/ObjectDetails/ObjectSummary.d.ts +2 -2
  113. package/dist/components/objects/ObjectDetails/ObjectSummary.js +540 -138
  114. package/dist/components/objects/ObjectDetails/ObjectTags.d.ts +2 -2
  115. package/dist/components/objects/ObjectDetails/ObjectTags.js +95 -123
  116. package/dist/components/objects/ObjectDetails/__tests__/ObjectDetails.test.d.ts +1 -0
  117. package/dist/components/objects/ObjectDetails/__tests__/ObjectDetails.test.js +516 -0
  118. package/dist/components/objects/ObjectDetails/__tests__/ObjectSummary.test.d.ts +1 -0
  119. package/dist/components/objects/ObjectDetails/__tests__/ObjectSummary.test.js +1064 -0
  120. package/dist/components/objects/ObjectDetails/index.d.ts +18 -2
  121. package/dist/components/objects/ObjectDetails/index.js +152 -40
  122. package/dist/components/objects/ObjectList.d.ts +12 -10
  123. package/dist/components/objects/ObjectList.js +590 -263
  124. package/dist/components/objects/ObjectLock/EditRetentionButton.d.ts +4 -0
  125. package/dist/components/objects/ObjectLock/EditRetentionButton.js +32 -0
  126. package/dist/components/objects/ObjectLock/ObjectLockRetentionSettings.d.ts +3 -0
  127. package/dist/components/objects/ObjectLock/ObjectLockRetentionSettings.js +211 -0
  128. package/dist/components/objects/ObjectLock/ObjectLockSettings.d.ts +9 -0
  129. package/dist/components/objects/ObjectLock/ObjectLockSettings.js +159 -0
  130. package/dist/components/objects/ObjectLock/ObjectLockSettingsUtils.d.ts +8 -0
  131. package/dist/components/objects/ObjectLock/ObjectLockSettingsUtils.js +39 -0
  132. package/dist/components/objects/ObjectLock/__tests__/EditRetentionButton.test.d.ts +1 -0
  133. package/dist/components/objects/ObjectLock/__tests__/EditRetentionButton.test.js +204 -0
  134. package/dist/components/objects/ObjectLock/__tests__/ObjectLockSettings.test.d.ts +1 -0
  135. package/dist/components/objects/ObjectLock/__tests__/ObjectLockSettings.test.js +374 -0
  136. package/dist/components/objects/ObjectPage.js +12 -8
  137. package/dist/components/objects/UploadButton.d.ts +3 -3
  138. package/dist/components/objects/UploadButton.js +10 -10
  139. package/dist/components/objects/__tests__/GetPresignedUrlButton.test.d.ts +1 -0
  140. package/dist/components/objects/__tests__/GetPresignedUrlButton.test.js +531 -0
  141. package/dist/components/providers/DataBrowserProvider.d.ts +23 -12
  142. package/dist/components/providers/DataBrowserProvider.js +60 -38
  143. package/dist/components/providers/QueryProvider.d.ts +9 -0
  144. package/dist/components/providers/QueryProvider.js +21 -0
  145. package/dist/components/search/MetadataSearch.js +29 -28
  146. package/dist/components/search/SearchHints.js +1 -1
  147. package/dist/components/ui/ArrayFieldActions.d.ts +36 -0
  148. package/dist/components/ui/ArrayFieldActions.js +43 -0
  149. package/dist/components/ui/ConfirmDeleteRuleModal.d.ts +16 -0
  150. package/dist/components/ui/ConfirmDeleteRuleModal.js +48 -0
  151. package/dist/components/ui/DeleteObjectModalContent.d.ts +1 -1
  152. package/dist/components/ui/DeleteObjectModalContent.js +12 -12
  153. package/dist/components/ui/FilterFormSection.d.ts +44 -0
  154. package/dist/components/ui/FilterFormSection.js +159 -0
  155. package/dist/components/ui/Search.elements.d.ts +2 -2
  156. package/dist/components/ui/Search.elements.js +7 -7
  157. package/dist/components/ui/Table.elements.d.ts +2 -1
  158. package/dist/components/ui/Table.elements.js +18 -12
  159. package/dist/config/__tests__/factory.test.d.ts +1 -0
  160. package/dist/config/__tests__/factory.test.js +311 -0
  161. package/dist/config/factory.d.ts +14 -49
  162. package/dist/config/factory.js +23 -68
  163. package/dist/config/types.d.ts +212 -34
  164. package/dist/contexts/DataBrowserUICustomizationContext.d.ts +27 -0
  165. package/dist/contexts/DataBrowserUICustomizationContext.js +13 -0
  166. package/dist/hooks/__tests__/useAccessibleBuckets.test.d.ts +1 -0
  167. package/dist/hooks/__tests__/useAccessibleBuckets.test.js +145 -0
  168. package/dist/hooks/__tests__/useISVBucketDetection.test.d.ts +1 -0
  169. package/dist/hooks/__tests__/useISVBucketDetection.test.js +188 -0
  170. package/dist/hooks/__tests__/useIsBucketEmpty.test.js +27 -27
  171. package/dist/hooks/__tests__/useLoginMutation.test.d.ts +1 -0
  172. package/dist/hooks/__tests__/useLoginMutation.test.js +194 -0
  173. package/dist/hooks/bucketConfiguration.d.ts +8 -1
  174. package/dist/hooks/bucketConfiguration.js +52 -51
  175. package/dist/hooks/bucketOperations.d.ts +10 -1
  176. package/dist/hooks/bucketOperations.js +10 -9
  177. package/dist/hooks/factories/__tests__/useCreateS3FunctionMutationHook.test.js +80 -80
  178. package/dist/hooks/factories/__tests__/useCreateS3InfiniteQueryHook.test.js +80 -80
  179. package/dist/hooks/factories/__tests__/useCreateS3LoginHook.test.js +44 -44
  180. package/dist/hooks/factories/__tests__/useCreateS3MutationHook.test.js +63 -63
  181. package/dist/hooks/factories/__tests__/useCreateS3QueryHook.test.js +95 -52
  182. package/dist/hooks/factories/index.d.ts +4 -4
  183. package/dist/hooks/factories/index.js +2 -2
  184. package/dist/hooks/factories/useCreateS3InfiniteQueryHook.d.ts +2 -2
  185. package/dist/hooks/factories/useCreateS3InfiniteQueryHook.js +16 -13
  186. package/dist/hooks/factories/useCreateS3LoginHook.d.ts +2 -2
  187. package/dist/hooks/factories/useCreateS3LoginHook.js +1 -1
  188. package/dist/hooks/factories/useCreateS3MutationHook.d.ts +3 -3
  189. package/dist/hooks/factories/useCreateS3MutationHook.js +7 -2
  190. package/dist/hooks/factories/useCreateS3QueryHook.d.ts +2 -2
  191. package/dist/hooks/factories/useCreateS3QueryHook.js +29 -3
  192. package/dist/hooks/index.d.ts +19 -8
  193. package/dist/hooks/index.js +16 -5
  194. package/dist/hooks/loginOperations.d.ts +1 -1
  195. package/dist/hooks/loginOperations.js +1 -1
  196. package/dist/hooks/objectOperations.d.ts +2 -2
  197. package/dist/hooks/objectOperations.js +50 -49
  198. package/dist/hooks/presignedOperations.d.ts +4 -4
  199. package/dist/hooks/presignedOperations.js +5 -5
  200. package/dist/hooks/useAccessibleBuckets.d.ts +11 -0
  201. package/dist/hooks/useAccessibleBuckets.js +115 -0
  202. package/dist/hooks/useBatchObjectLegalHold.d.ts +11 -0
  203. package/dist/hooks/useBatchObjectLegalHold.js +48 -0
  204. package/dist/hooks/useBucketConfigEditor.d.ts +31 -0
  205. package/dist/hooks/useBucketConfigEditor.js +82 -0
  206. package/dist/hooks/useDataBrowserNavigate.d.ts +28 -0
  207. package/dist/hooks/useDataBrowserNavigate.js +24 -0
  208. package/dist/hooks/useDeleteBucketConfigRule.d.ts +26 -0
  209. package/dist/hooks/useDeleteBucketConfigRule.js +46 -0
  210. package/dist/hooks/useEmptyBucket.d.ts +27 -0
  211. package/dist/hooks/useEmptyBucket.js +116 -0
  212. package/dist/hooks/useFeatures.d.ts +7 -0
  213. package/dist/hooks/useFeatures.js +8 -0
  214. package/dist/hooks/useISVBucketDetection.d.ts +15 -0
  215. package/dist/hooks/useISVBucketDetection.js +27 -0
  216. package/dist/hooks/useIsBucketEmpty.js +4 -4
  217. package/dist/hooks/useLimitedAccessFlow.d.ts +48 -0
  218. package/dist/hooks/useLimitedAccessFlow.js +23 -0
  219. package/dist/hooks/useS3Client.d.ts +6 -0
  220. package/dist/hooks/useS3Client.js +3 -2
  221. package/dist/hooks/useS3ConfigSwitch.d.ts +11 -0
  222. package/dist/hooks/useS3ConfigSwitch.js +37 -0
  223. package/dist/hooks/useSupportedNotificationEvents.d.ts +6 -0
  224. package/dist/hooks/useSupportedNotificationEvents.js +8 -0
  225. package/dist/hooks/useTableRowSelection.d.ts +9 -0
  226. package/dist/hooks/useTableRowSelection.js +45 -0
  227. package/dist/index.d.ts +6 -6
  228. package/dist/index.js +2 -2
  229. package/dist/schemas/bucketPolicySchema.json +3 -13
  230. package/dist/test/msw/handlers/deleteBucket.d.ts +1 -1
  231. package/dist/test/msw/handlers/deleteBucket.js +20 -10
  232. package/dist/test/msw/handlers/getBucketAcl.d.ts +1 -1
  233. package/dist/test/msw/handlers/getBucketAcl.js +29 -17
  234. package/dist/test/msw/handlers/getBucketLocation.d.ts +1 -1
  235. package/dist/test/msw/handlers/getBucketLocation.js +29 -15
  236. package/dist/test/msw/handlers/getBucketPolicy.d.ts +1 -1
  237. package/dist/test/msw/handlers/getBucketPolicy.js +52 -32
  238. package/dist/test/msw/handlers/headObject.d.ts +1 -1
  239. package/dist/test/msw/handlers/headObject.js +31 -13
  240. package/dist/test/msw/handlers/listBuckets.d.ts +1 -1
  241. package/dist/test/msw/handlers/listBuckets.js +5 -3
  242. package/dist/test/msw/handlers/listObjectVersions.d.ts +1 -1
  243. package/dist/test/msw/handlers/listObjectVersions.js +38 -26
  244. package/dist/test/msw/handlers/listObjects.d.ts +1 -1
  245. package/dist/test/msw/handlers/listObjects.js +35 -23
  246. package/dist/test/msw/handlers/objectLegalHold.d.ts +1 -1
  247. package/dist/test/msw/handlers/objectLegalHold.js +32 -17
  248. package/dist/test/msw/handlers/objectRetention.d.ts +1 -1
  249. package/dist/test/msw/handlers/objectRetention.js +31 -17
  250. package/dist/test/msw/handlers/putBucketAcl.d.ts +1 -1
  251. package/dist/test/msw/handlers/putBucketAcl.js +29 -14
  252. package/dist/test/msw/handlers/putObject.d.ts +1 -1
  253. package/dist/test/msw/handlers/putObject.js +27 -12
  254. package/dist/test/msw/handlers.d.ts +3 -3
  255. package/dist/test/msw/handlers.js +77 -54
  256. package/dist/test/msw/index.d.ts +2 -2
  257. package/dist/test/msw/index.js +1 -1
  258. package/dist/test/msw/server.d.ts +1 -1
  259. package/dist/test/msw/server.js +1 -1
  260. package/dist/test/msw/utils.js +2 -2
  261. package/dist/test/setup.d.ts +1 -1
  262. package/dist/test/setup.js +13 -30
  263. package/dist/test/testUtils.d.ts +170 -36
  264. package/dist/test/testUtils.js +229 -116
  265. package/dist/test/utils/errorHandling.test.js +146 -108
  266. package/dist/types/index.d.ts +49 -36
  267. package/dist/types/monaco.d.ts +13 -0
  268. package/dist/types/monaco.js +0 -0
  269. package/dist/utils/__tests__/proxyMiddleware.test.d.ts +1 -0
  270. package/dist/utils/__tests__/proxyMiddleware.test.js +579 -0
  271. package/dist/utils/__tests__/s3Client.test.d.ts +1 -0
  272. package/dist/utils/__tests__/s3Client.test.js +340 -0
  273. package/dist/utils/__tests__/s3ConfigIdentifier.test.d.ts +1 -0
  274. package/dist/utils/__tests__/s3ConfigIdentifier.test.js +437 -0
  275. package/dist/utils/constants.d.ts +22 -0
  276. package/dist/utils/constants.js +19 -0
  277. package/dist/utils/deletion/index.d.ts +2 -2
  278. package/dist/utils/deletion/index.js +1 -1
  279. package/dist/utils/deletion/messages.d.ts +1 -1
  280. package/dist/utils/deletion/messages.js +4 -4
  281. package/dist/utils/errorHandling.d.ts +12 -3
  282. package/dist/utils/errorHandling.js +12 -7
  283. package/dist/utils/hooks.js +8 -8
  284. package/dist/utils/index.d.ts +5 -2
  285. package/dist/utils/index.js +5 -1
  286. package/dist/utils/proxyMiddleware.d.ts +32 -13
  287. package/dist/utils/proxyMiddleware.js +90 -36
  288. package/dist/utils/s3Client.d.ts +14 -4
  289. package/dist/utils/s3Client.js +5 -26
  290. package/dist/utils/s3ConfigIdentifier.d.ts +79 -0
  291. package/dist/utils/s3ConfigIdentifier.js +57 -0
  292. package/dist/utils/s3RuleUtils.d.ts +53 -0
  293. package/dist/utils/s3RuleUtils.js +101 -0
  294. package/package.json +10 -8
  295. package/dist/components/__tests__/BucketNotificationCreatePage.test.js +0 -316
  296. package/dist/components/buckets/BucketPolicyButton.d.ts +0 -7
  297. package/dist/components/buckets/notifications/BucketNotificationCreatePage.d.ts +0 -1
  298. package/dist/components/buckets/notifications/BucketNotificationCreatePage.js +0 -234
  299. package/dist/hooks/useLoginMutation.d.ts +0 -21
  300. package/dist/hooks/useLoginMutation.js +0 -9
  301. package/dist/utils/useFeatures.d.ts +0 -1
  302. package/dist/utils/useFeatures.js +0 -7
  303. /package/dist/components/__tests__/{BucketNotificationCreatePage.test.d.ts → BucketAccessor.test.d.ts} +0 -0
@@ -0,0 +1,159 @@
1
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
2
+ import { FormGroup, FormSection, Stack, Text } from "@scality/core-ui";
3
+ import { convertRemToPixels } from "@scality/core-ui/dist/components/tablev2/TableUtils";
4
+ import { Box, Input, Select } from "@scality/core-ui/dist/next";
5
+ import { ArrayFieldActions } from "./ArrayFieldActions.js";
6
+ const filterTypeOptions = [
7
+ {
8
+ value: 'none',
9
+ label: 'All objects'
10
+ },
11
+ {
12
+ value: 'prefix',
13
+ label: 'Prefix filter'
14
+ },
15
+ {
16
+ value: 'tags',
17
+ label: 'Tags filter'
18
+ },
19
+ {
20
+ value: 'and',
21
+ label: 'Prefix and tags filter'
22
+ }
23
+ ];
24
+ const shouldShowPrefix = (filterType)=>'prefix' === filterType || 'and' === filterType;
25
+ const shouldShowTags = (filterType)=>'tags' === filterType || 'and' === filterType;
26
+ function FilterFormSection({ filterType, onFilterTypeChange, prefixRegister, tagFields, tagKeyRegister, tagValueRegister, getTagKeyValue, getTagValueValue, appendTag, removeTag, errors, forceLabelWidth = convertRemToPixels(15) }) {
27
+ return /*#__PURE__*/ jsxs(FormSection, {
28
+ title: {
29
+ name: 'Filter'
30
+ },
31
+ forceLabelWidth: forceLabelWidth,
32
+ children: [
33
+ /*#__PURE__*/ jsx(FormGroup, {
34
+ label: "Filter",
35
+ id: "filterType",
36
+ direction: "horizontal",
37
+ content: /*#__PURE__*/ jsx(Select, {
38
+ id: "filterType",
39
+ value: filterType,
40
+ onChange: onFilterTypeChange,
41
+ children: filterTypeOptions.map((option)=>/*#__PURE__*/ jsx(Select.Option, {
42
+ value: option.value,
43
+ children: option.label
44
+ }, option.value))
45
+ })
46
+ }),
47
+ shouldShowPrefix(filterType) ? /*#__PURE__*/ jsx(FormGroup, {
48
+ label: "Prefix",
49
+ id: "prefix",
50
+ direction: "horizontal",
51
+ error: errors?.prefix?.message,
52
+ helpErrorPosition: "bottom",
53
+ required: 'prefix' === filterType,
54
+ content: /*#__PURE__*/ jsx(Input, {
55
+ id: "prefix",
56
+ placeholder: "folder/",
57
+ ...prefixRegister
58
+ })
59
+ }) : /*#__PURE__*/ jsx(Fragment, {}),
60
+ shouldShowTags(filterType) ? /*#__PURE__*/ jsx(FormGroup, {
61
+ label: "Tags",
62
+ id: "tags",
63
+ direction: "horizontal",
64
+ error: errors?.tags?.message,
65
+ helpErrorPosition: "bottom",
66
+ required: true,
67
+ content: /*#__PURE__*/ jsxs(Stack, {
68
+ direction: "vertical",
69
+ gap: "r8",
70
+ children: [
71
+ /*#__PURE__*/ jsxs(Stack, {
72
+ gap: "r8",
73
+ children: [
74
+ /*#__PURE__*/ jsx(Box, {
75
+ flex: "1",
76
+ children: /*#__PURE__*/ jsx(Text, {
77
+ color: "textSecondary",
78
+ children: "Key"
79
+ })
80
+ }),
81
+ /*#__PURE__*/ jsx(Box, {
82
+ flex: "1",
83
+ children: /*#__PURE__*/ jsx(Text, {
84
+ color: "textSecondary",
85
+ children: "Value"
86
+ })
87
+ }),
88
+ /*#__PURE__*/ jsx(Box, {
89
+ width: "80px"
90
+ })
91
+ ]
92
+ }),
93
+ tagFields.map((field, index)=>/*#__PURE__*/ jsxs(Stack, {
94
+ gap: "r8",
95
+ children: [
96
+ /*#__PURE__*/ jsx(Input, {
97
+ id: `tag-key-${index}`,
98
+ placeholder: "Key",
99
+ size: "1/2",
100
+ ...tagKeyRegister(index)
101
+ }),
102
+ /*#__PURE__*/ jsx(Input, {
103
+ id: `tag-value-${index}`,
104
+ placeholder: "Value",
105
+ size: "1/2",
106
+ ...tagValueRegister(index)
107
+ }),
108
+ /*#__PURE__*/ jsx(ArrayFieldActions, {
109
+ showAdd: index === tagFields.length - 1,
110
+ onRemove: ()=>removeTag(index),
111
+ onAdd: ()=>appendTag({
112
+ key: '',
113
+ value: ''
114
+ }),
115
+ canRemove: tagFields.length > 1,
116
+ canAdd: !!getTagKeyValue(index) && !!getTagValueValue(index),
117
+ removeLabel: "Remove tag",
118
+ addLabel: "Add tag"
119
+ })
120
+ ]
121
+ }, field.id))
122
+ ]
123
+ })
124
+ }) : /*#__PURE__*/ jsx(Fragment, {})
125
+ ]
126
+ });
127
+ }
128
+ const createFilterValidationSchema = (Joi)=>({
129
+ filterType: Joi.string().valid('none', 'prefix', 'tags', 'and').required(),
130
+ prefix: Joi.when('filterType', {
131
+ is: 'prefix',
132
+ then: Joi.string().required().min(1).messages({
133
+ 'string.empty': 'Prefix is required when using prefix filter',
134
+ 'string.min': 'Prefix is required when using prefix filter'
135
+ }),
136
+ otherwise: Joi.when('filterType', {
137
+ is: 'and',
138
+ then: Joi.string().allow('').optional(),
139
+ otherwise: Joi.any()
140
+ })
141
+ }),
142
+ tags: Joi.when('filterType', {
143
+ is: Joi.valid('tags', 'and'),
144
+ then: Joi.array().items(Joi.object({
145
+ key: Joi.string().required().max(128).messages({
146
+ 'string.empty': 'Tag key is required',
147
+ 'string.max': 'Tag key must not exceed 128 characters'
148
+ }),
149
+ value: Joi.string().required().max(256).messages({
150
+ 'string.empty': 'Tag value is required',
151
+ 'string.max': 'Tag value must not exceed 256 characters'
152
+ })
153
+ })).min(1).messages({
154
+ 'array.min': 'At least one tag is required when using tag filter'
155
+ }),
156
+ otherwise: Joi.array().optional()
157
+ })
158
+ });
159
+ export { FilterFormSection, createFilterValidationSchema };
@@ -1,4 +1,4 @@
1
- import { IconColor, IconName } from "@scality/core-ui/dist/components/icon/Icon.component";
1
+ import type { IconColor, IconName } from '@scality/core-ui/dist/components/icon/Icon.component';
2
2
  export declare const SearchContainer: import("styled-components").StyledComponent<"form", any, {
3
3
  isHidden?: boolean;
4
4
  }, never>;
@@ -10,7 +10,7 @@ type SearchIcon = {
10
10
  name: IconName;
11
11
  color: IconColor;
12
12
  };
13
- export declare const searchIcon: ({ isMetadata, isError, }: {
13
+ export declare const searchIcon: ({ isMetadata, isError }: {
14
14
  isMetadata: boolean;
15
15
  isError: boolean;
16
16
  }) => SearchIcon;
@@ -5,7 +5,7 @@ const SearchContainer = styled_components.form`
5
5
  display: flex;
6
6
  max-width: 600px;
7
7
  margin-right: ${spacing.r20};
8
- visibility: ${(props)=>props.isHidden ? "hidden" : "visible"};
8
+ visibility: ${(props)=>props.isHidden ? 'hidden' : 'visible'};
9
9
  gap: ${spacing.r8};
10
10
  `;
11
11
  const SearchInputContainer = styled_components.div`
@@ -44,16 +44,16 @@ const HintsTitle = styled_components.div`
44
44
  `;
45
45
  const searchIcon = ({ isMetadata, isError })=>{
46
46
  if (isError) return {
47
- name: "Close",
48
- color: "statusCritical"
47
+ name: 'Close',
48
+ color: 'statusCritical'
49
49
  };
50
50
  if (isMetadata) return {
51
- name: "Check",
52
- color: "statusHealthy"
51
+ name: 'Check',
52
+ color: 'statusHealthy'
53
53
  };
54
54
  return {
55
- name: "Search",
56
- color: "textSecondary"
55
+ name: 'Search',
56
+ color: 'textSecondary'
57
57
  };
58
58
  };
59
59
  export { HintItem, HintsContainer, HintsTitle, SearchContainer, SearchInputContainer, searchIcon };
@@ -7,8 +7,9 @@ export declare const Body: ({ children, ...props }: {
7
7
  export declare const Group: ({ children, ...props }: {
8
8
  children: React.ReactNode;
9
9
  }) => import("react/jsx-runtime").JSX.Element;
10
- export declare const GroupName: ({ children, ...props }: {
10
+ export declare const GroupName: ({ children, action, ...props }: {
11
11
  children: React.ReactNode;
12
+ action?: React.ReactNode;
12
13
  }) => import("react/jsx-runtime").JSX.Element;
13
14
  export declare const GroupContent: ({ children, ...props }: {
14
15
  children: React.ReactNode;
@@ -1,4 +1,4 @@
1
- import { jsx } from "react/jsx-runtime";
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
2
  import { Text, spacing } from "@scality/core-ui";
3
3
  import { Box } from "@scality/core-ui/dist/next";
4
4
  import styled_components from "styled-components";
@@ -20,14 +20,20 @@ const Group = ({ children, ...props })=>/*#__PURE__*/ jsx(Box, {
20
20
  ...props,
21
21
  children: children
22
22
  });
23
- const GroupName = ({ children, ...props })=>/*#__PURE__*/ jsx(Box, {
23
+ const GroupName = ({ children, action, ...props })=>/*#__PURE__*/ jsxs(Box, {
24
+ display: "flex",
25
+ justifyContent: "space-between",
26
+ alignItems: "center",
24
27
  marginBottom: spacing.r10,
25
28
  ...props,
26
- children: /*#__PURE__*/ jsx(Text, {
27
- isEmphazed: true,
28
- color: "textPrimary",
29
- children: children
30
- })
29
+ children: [
30
+ /*#__PURE__*/ jsx(Text, {
31
+ isEmphazed: true,
32
+ color: "textPrimary",
33
+ children: children
34
+ }),
35
+ action
36
+ ]
31
37
  });
32
38
  const GroupContent = ({ children, ...props })=>/*#__PURE__*/ jsx(Box, {
33
39
  display: "flex",
@@ -47,16 +53,16 @@ const Row = ({ children, ...props })=>/*#__PURE__*/ jsx(Box, {
47
53
  });
48
54
  const RawKey = styled_components.div`
49
55
  color: ${(props)=>props.principal ? props.theme.textPrimary : props.theme?.textSecondary};
50
- font-weight: ${(props)=>props.principal ? "bold" : "normal"};
56
+ font-weight: ${(props)=>props.principal ? 'bold' : 'normal'};
51
57
  ${(props)=>props.required ? `
52
58
  &:after {
53
59
  content: '*';
54
60
  }
55
- ` : ""}
61
+ ` : ''}
56
62
  `;
57
63
  const Key = styled_components(RawKey)`
58
64
  && {
59
- flex: ${(props)=>props.size || "0.35"};
65
+ flex: ${(props)=>props.size || '0.35'};
60
66
  min-width: 0;
61
67
  }
62
68
  `;
@@ -76,12 +82,12 @@ const TableContainer = ({ children, ...props })=>/*#__PURE__*/ jsx(Box, {
76
82
  });
77
83
  const GroupValues = styled_components.div`
78
84
  display: flex;
79
- flex: ${(props)=>props.size || "0.65"};
85
+ flex: ${(props)=>props.size || '0.65'};
80
86
  justify-content: space-between;
81
87
  align-items: center;
82
88
  min-width: 0;
83
89
  `;
84
90
  const ExtraCell = styled_components.div`
85
- margin-left: ${(props)=>props.marginLeft || "1.429rem"};
91
+ margin-left: ${(props)=>props.marginLeft || '1.429rem'};
86
92
  `;
87
93
  export { Body, ExtraCell, Group, GroupContent, GroupName, GroupValues, Key, Row, Table, TableContainer, Value };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,311 @@
1
+ import { HttpResponse, http } from "msw";
2
+ import { setupServer } from "msw/node";
3
+ import { loadRuntimeConfig, s3RuntimeConfigSchema } from "../factory.js";
4
+ const server = setupServer();
5
+ const CONFIG_URL = 'http://localhost/config.json';
6
+ describe('loadRuntimeConfig', ()=>{
7
+ beforeAll(()=>server.listen({
8
+ onUnhandledRequest: 'error'
9
+ }));
10
+ afterEach(()=>server.resetHandlers());
11
+ afterAll(()=>server.close());
12
+ describe('Successful configuration loading', ()=>{
13
+ it('should load and return valid runtime configuration', async ()=>{
14
+ const mockConfig = {
15
+ s3: {
16
+ endpoint: 'https://s3.us-west-2.amazonaws.com',
17
+ region: 'us-west-2',
18
+ forcePathStyle: true
19
+ }
20
+ };
21
+ server.use(http.get(CONFIG_URL, ()=>HttpResponse.json(mockConfig)));
22
+ const config = await loadRuntimeConfig(CONFIG_URL);
23
+ expect(config).toEqual(mockConfig);
24
+ expect(config.s3.endpoint).toBe('https://s3.us-west-2.amazonaws.com');
25
+ expect(config.s3.region).toBe('us-west-2');
26
+ expect(config.s3.forcePathStyle).toBe(true);
27
+ });
28
+ it('should support generic type for extended configuration', async ()=>{
29
+ const mockConfig = {
30
+ s3: {
31
+ endpoint: 'https://s3.amazonaws.com',
32
+ region: 'us-east-1'
33
+ },
34
+ basePath: '/app',
35
+ theme: 'dark',
36
+ customSettings: {
37
+ feature1: true,
38
+ feature2: 42
39
+ }
40
+ };
41
+ server.use(http.get(CONFIG_URL, ()=>HttpResponse.json(mockConfig)));
42
+ const config = await loadRuntimeConfig(CONFIG_URL);
43
+ expect(config.basePath).toBe('/app');
44
+ expect(config.theme).toBe('dark');
45
+ expect(config.customSettings).toEqual({
46
+ feature1: true,
47
+ feature2: 42
48
+ });
49
+ });
50
+ it('should replace "origin" endpoint with window.location.origin', async ()=>{
51
+ const mockConfig = {
52
+ s3: {
53
+ endpoint: 'origin',
54
+ region: 'us-east-1'
55
+ }
56
+ };
57
+ server.use(http.get(CONFIG_URL, ()=>HttpResponse.json(mockConfig)));
58
+ const config = await loadRuntimeConfig(CONFIG_URL);
59
+ expect(config.s3.endpoint).not.toBe('origin');
60
+ expect(config.s3.endpoint).toBe(window.location.origin);
61
+ expect(config.s3.endpoint).toMatch(/^http/);
62
+ });
63
+ it('should handle configuration without optional forcePathStyle', async ()=>{
64
+ const mockConfig = {
65
+ s3: {
66
+ endpoint: 'https://s3.ap-northeast-1.amazonaws.com',
67
+ region: 'ap-northeast-1'
68
+ }
69
+ };
70
+ server.use(http.get(CONFIG_URL, ()=>HttpResponse.json(mockConfig)));
71
+ const config = await loadRuntimeConfig(CONFIG_URL);
72
+ expect(config.s3.forcePathStyle).toBeUndefined();
73
+ expect(config.s3.endpoint).toBe('https://s3.ap-northeast-1.amazonaws.com');
74
+ });
75
+ it('should handle configuration without endpoint', async ()=>{
76
+ const mockConfig = {
77
+ s3: {
78
+ region: 'us-east-1'
79
+ }
80
+ };
81
+ server.use(http.get(CONFIG_URL, ()=>HttpResponse.json(mockConfig)));
82
+ const config = await loadRuntimeConfig(CONFIG_URL);
83
+ expect(config.s3.endpoint).toBeUndefined();
84
+ expect(config.s3.region).toBe('us-east-1');
85
+ });
86
+ });
87
+ describe('HTTP errors', ()=>{
88
+ it("should throw descriptive error when fetch returns 404", async ()=>{
89
+ server.use(http.get(CONFIG_URL, ()=>HttpResponse.json(null, {
90
+ status: 404
91
+ })));
92
+ await expect(loadRuntimeConfig(CONFIG_URL)).rejects.toThrow('Failed to load config: Not Found');
93
+ });
94
+ it("should throw descriptive error when fetch returns 500", async ()=>{
95
+ server.use(http.get(CONFIG_URL, ()=>HttpResponse.json(null, {
96
+ status: 500
97
+ })));
98
+ await expect(loadRuntimeConfig(CONFIG_URL)).rejects.toThrow('Failed to load config: Internal Server Error');
99
+ });
100
+ it('should throw error when fetch returns 403', async ()=>{
101
+ server.use(http.get(CONFIG_URL, ()=>HttpResponse.json(null, {
102
+ status: 403
103
+ })));
104
+ await expect(loadRuntimeConfig(CONFIG_URL)).rejects.toThrow('Failed to load config: Forbidden');
105
+ });
106
+ it('should throw error when response is network error', async ()=>{
107
+ server.use(http.get(CONFIG_URL, ()=>HttpResponse.error()));
108
+ await expect(loadRuntimeConfig(CONFIG_URL)).rejects.toThrow();
109
+ });
110
+ });
111
+ describe('Validation errors', ()=>{
112
+ it('should reject config missing required s3.region field', async ()=>{
113
+ const invalidConfig = {
114
+ s3: {
115
+ endpoint: 'https://s3.amazonaws.com'
116
+ }
117
+ };
118
+ server.use(http.get(CONFIG_URL, ()=>HttpResponse.json(invalidConfig)));
119
+ const error = await loadRuntimeConfig(CONFIG_URL).catch((e)=>e);
120
+ expect(error).toBeInstanceOf(Error);
121
+ expect(error.message).toContain('Invalid config');
122
+ expect(error.message).toContain('region');
123
+ });
124
+ it('should reject config completely missing s3 section', async ()=>{
125
+ const invalidConfig = {
126
+ someOtherField: 'value',
127
+ anotherField: 123
128
+ };
129
+ server.use(http.get(CONFIG_URL, ()=>HttpResponse.json(invalidConfig)));
130
+ const error = await loadRuntimeConfig(CONFIG_URL).catch((e)=>e);
131
+ expect(error).toBeInstanceOf(Error);
132
+ expect(error.message).toContain('Invalid config');
133
+ expect(error.message).toContain('s3');
134
+ });
135
+ it('should reject config with invalid region type', async ()=>{
136
+ const invalidConfig = {
137
+ s3: {
138
+ endpoint: 'https://s3.amazonaws.com',
139
+ region: 123
140
+ }
141
+ };
142
+ server.use(http.get(CONFIG_URL, ()=>HttpResponse.json(invalidConfig)));
143
+ const error = await loadRuntimeConfig(CONFIG_URL).catch((e)=>e);
144
+ expect(error).toBeInstanceOf(Error);
145
+ expect(error.message).toContain('Invalid config');
146
+ });
147
+ it('should reject config with invalid forcePathStyle type', async ()=>{
148
+ const invalidConfig = {
149
+ s3: {
150
+ endpoint: 'https://s3.amazonaws.com',
151
+ region: 'us-east-1',
152
+ forcePathStyle: 'yes'
153
+ }
154
+ };
155
+ server.use(http.get(CONFIG_URL, ()=>HttpResponse.json(invalidConfig)));
156
+ const error = await loadRuntimeConfig(CONFIG_URL).catch((e)=>e);
157
+ expect(error).toBeInstanceOf(Error);
158
+ expect(error.message).toContain('Invalid config');
159
+ });
160
+ });
161
+ describe('Edge cases', ()=>{
162
+ it('should handle empty s3 object with only region', async ()=>{
163
+ const mockConfig = {
164
+ s3: {
165
+ region: 'eu-west-1'
166
+ }
167
+ };
168
+ server.use(http.get(CONFIG_URL, ()=>HttpResponse.json(mockConfig)));
169
+ const config = await loadRuntimeConfig(CONFIG_URL);
170
+ expect(config.s3.region).toBe('eu-west-1');
171
+ expect(config.s3.endpoint).toBeUndefined();
172
+ expect(config.s3.forcePathStyle).toBeUndefined();
173
+ });
174
+ it('should preserve all unknown fields for extended configs', async ()=>{
175
+ const mockConfig = {
176
+ s3: {
177
+ region: 'us-east-1'
178
+ },
179
+ customField1: 'value1',
180
+ customField2: 42,
181
+ nested: {
182
+ field: true
183
+ }
184
+ };
185
+ server.use(http.get(CONFIG_URL, ()=>HttpResponse.json(mockConfig)));
186
+ const config = await loadRuntimeConfig(CONFIG_URL);
187
+ expect(config.customField1).toBe('value1');
188
+ expect(config.customField2).toBe(42);
189
+ expect(config.nested).toEqual({
190
+ field: true
191
+ });
192
+ });
193
+ it('should not modify original endpoint when not "origin"', async ()=>{
194
+ const originalEndpoint = 'https://custom-s3.example.com:9000';
195
+ const mockConfig = {
196
+ s3: {
197
+ endpoint: originalEndpoint,
198
+ region: 'us-east-1'
199
+ }
200
+ };
201
+ server.use(http.get(CONFIG_URL, ()=>HttpResponse.json(mockConfig)));
202
+ const config = await loadRuntimeConfig(CONFIG_URL);
203
+ expect(config.s3.endpoint).toBe(originalEndpoint);
204
+ });
205
+ });
206
+ });
207
+ describe('s3RuntimeConfigSchema', ()=>{
208
+ describe('Valid configurations', ()=>{
209
+ it('should validate complete configuration with all fields', ()=>{
210
+ const config = {
211
+ s3: {
212
+ endpoint: 'https://s3.amazonaws.com',
213
+ region: 'us-east-1',
214
+ forcePathStyle: true
215
+ }
216
+ };
217
+ const { error } = s3RuntimeConfigSchema.validate(config);
218
+ expect(error).toBeUndefined();
219
+ });
220
+ it('should validate minimal configuration with only required fields', ()=>{
221
+ const config = {
222
+ s3: {
223
+ region: 'eu-west-1'
224
+ }
225
+ };
226
+ const { error } = s3RuntimeConfigSchema.validate(config);
227
+ expect(error).toBeUndefined();
228
+ });
229
+ it('should allow unknown fields when allowUnknown is true', ()=>{
230
+ const config = {
231
+ s3: {
232
+ endpoint: 'https://s3.amazonaws.com',
233
+ region: 'us-east-1'
234
+ },
235
+ customField: 'value',
236
+ anotherField: 123
237
+ };
238
+ const { error } = s3RuntimeConfigSchema.validate(config, {
239
+ allowUnknown: true
240
+ });
241
+ expect(error).toBeUndefined();
242
+ });
243
+ });
244
+ describe('Invalid configurations', ()=>{
245
+ it('should reject config without s3.region', ()=>{
246
+ const config = {
247
+ s3: {
248
+ endpoint: 'https://s3.amazonaws.com'
249
+ }
250
+ };
251
+ const { error } = s3RuntimeConfigSchema.validate(config);
252
+ expect(error).toBeDefined();
253
+ expect(error?.details[0].path).toContain('region');
254
+ expect(error?.message).toContain('region');
255
+ });
256
+ it('should reject config without s3 object', ()=>{
257
+ const config = {};
258
+ const { error } = s3RuntimeConfigSchema.validate(config);
259
+ expect(error).toBeDefined();
260
+ expect(error?.details[0].path).toContain('s3');
261
+ });
262
+ it('should reject config with wrong type for region', ()=>{
263
+ const config = {
264
+ s3: {
265
+ region: 123
266
+ }
267
+ };
268
+ const { error } = s3RuntimeConfigSchema.validate(config);
269
+ expect(error).toBeDefined();
270
+ expect(error?.message).toContain('string');
271
+ });
272
+ it('should reject config with wrong type for forcePathStyle', ()=>{
273
+ const config = {
274
+ s3: {
275
+ region: 'us-east-1',
276
+ forcePathStyle: 'not-a-boolean'
277
+ }
278
+ };
279
+ const { error } = s3RuntimeConfigSchema.validate(config, {
280
+ convert: false
281
+ });
282
+ expect(error).toBeDefined();
283
+ expect(error?.message).toContain('boolean');
284
+ });
285
+ });
286
+ describe('Schema behavior', ()=>{
287
+ it('should return all validation errors when abortEarly is false', ()=>{
288
+ const config = {
289
+ s3: {}
290
+ };
291
+ const { error } = s3RuntimeConfigSchema.validate(config, {
292
+ abortEarly: false
293
+ });
294
+ expect(error).toBeDefined();
295
+ expect(error?.details.length).toBeGreaterThanOrEqual(1);
296
+ });
297
+ it('should preserve unknown fields when stripUnknown is false', ()=>{
298
+ const config = {
299
+ s3: {
300
+ region: 'us-east-1'
301
+ },
302
+ customField: 'should-be-kept'
303
+ };
304
+ const { value } = s3RuntimeConfigSchema.validate(config, {
305
+ allowUnknown: true,
306
+ stripUnknown: false
307
+ });
308
+ expect(value.customField).toBe('should-be-kept');
309
+ });
310
+ });
311
+ });
@@ -1,52 +1,17 @@
1
- import type { S3ClientConfiguration } from "./types";
2
- import type { S3BrowserConfig, S3Credentials } from "../types";
3
- /**
4
- * Configuration factory that uses build-time constants
5
- * No runtime environment detection or hardcoded values
6
- */
7
- export declare class S3ConfigurationFactory {
8
- /**
9
- * Load runtime configuration from config.json
10
- * Should be called at app startup
11
- */
12
- static loadRuntimeConfig(): Promise<void>;
13
- private static getBuildTimeConfig;
14
- /**
15
- * Create S3 client configuration based on build-time settings
16
- */
17
- static createClientConfiguration(credentials: S3Credentials): S3BrowserConfig & {
18
- credentials: S3Credentials;
19
- };
20
- /**
21
- * Create proxy middleware configuration
22
- */
23
- static createProxyConfiguration(): S3ClientConfiguration;
24
- /**
25
- * Check if proxy middleware should be enabled
26
- */
27
- static shouldUseProxyMiddleware(): boolean;
28
- /**
29
- * Get build-time environment info for debugging
30
- */
31
- static getBuildInfo(): {
32
- environment: string;
33
- useProxy: boolean;
34
- s3Endpoint: string;
35
- proxyEndpoint: string | undefined;
1
+ import Joi from 'joi';
2
+ export type S3RuntimeConfig = {
3
+ s3: {
4
+ endpoint?: string;
5
+ region: string;
6
+ forcePathStyle?: boolean;
36
7
  };
37
- }
8
+ };
9
+ export declare const s3RuntimeConfigSchema: Joi.ObjectSchema<any>;
38
10
  /**
39
- * Convenience functions for common use cases
11
+ * Load runtime configuration from config.json
12
+ *
13
+ * @template T - Extended runtime config type that must include S3RuntimeConfig
14
+ * @param configUrl - URL to fetch the config.json from
15
+ * @returns Promise resolving to the loaded config
40
16
  */
41
- export declare const createS3Config: (credentials: S3Credentials) => S3BrowserConfig & {
42
- credentials: S3Credentials;
43
- };
44
- export declare const shouldUseProxy: () => boolean;
45
- export declare const getProxyConfig: () => S3ClientConfiguration;
46
- export declare const getBuildInfo: () => {
47
- environment: string;
48
- useProxy: boolean;
49
- s3Endpoint: string;
50
- proxyEndpoint: string | undefined;
51
- };
52
- export declare const loadRuntimeConfig: () => Promise<void>;
17
+ export declare function loadRuntimeConfig<T extends S3RuntimeConfig = S3RuntimeConfig>(configUrl: string): Promise<T>;