@scality/data-browser-library 1.0.0-preview.9 → 1.0.3

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 (287) 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.js +271 -105
  9. package/dist/components/__tests__/BucketDetails.test.d.ts +1 -0
  10. package/dist/components/__tests__/BucketDetails.test.js +421 -0
  11. package/dist/components/__tests__/BucketLifecycleFormPage.test.d.ts +13 -0
  12. package/dist/components/__tests__/BucketLifecycleFormPage.test.js +178 -178
  13. package/dist/components/__tests__/BucketLifecycleList.test.js +85 -85
  14. package/dist/components/__tests__/BucketList.test.js +463 -239
  15. package/dist/components/__tests__/BucketNotificationFormPage.test.d.ts +1 -0
  16. package/dist/components/__tests__/BucketNotificationFormPage.test.js +348 -0
  17. package/dist/components/__tests__/BucketNotificationList.test.d.ts +1 -0
  18. package/dist/components/__tests__/BucketNotificationList.test.js +379 -0
  19. package/dist/components/__tests__/BucketOverview.test.js +281 -266
  20. package/dist/components/__tests__/BucketPolicyPage.test.js +151 -99
  21. package/dist/components/__tests__/BucketReplicationFormPage.test.d.ts +15 -0
  22. package/dist/components/__tests__/BucketReplicationFormPage.test.js +544 -544
  23. package/dist/components/__tests__/BucketReplicationList.test.js +106 -106
  24. package/dist/components/__tests__/CreateFolderButton.test.js +56 -56
  25. package/dist/components/__tests__/DeleteBucketButton.test.js +64 -64
  26. package/dist/components/__tests__/DeleteBucketConfigRuleButton.test.js +47 -47
  27. package/dist/components/__tests__/DeleteObjectButton.test.js +64 -64
  28. package/dist/components/__tests__/EmptyBucketButton.test.js +59 -59
  29. package/dist/components/__tests__/MetadataSearch.test.js +65 -65
  30. package/dist/components/__tests__/ObjectList.test.js +741 -240
  31. package/dist/components/__tests__/UploadButton.test.js +45 -45
  32. package/dist/components/breadcrumb/Breadcrumb.d.ts +6 -0
  33. package/dist/components/breadcrumb/Breadcrumb.js +37 -0
  34. package/dist/components/breadcrumb/DataBrowserBreadcrumb.d.ts +1 -0
  35. package/dist/components/breadcrumb/DataBrowserBreadcrumb.js +10 -0
  36. package/dist/components/breadcrumb/__tests__/Breadcrumb.test.d.ts +1 -0
  37. package/dist/components/breadcrumb/__tests__/Breadcrumb.test.js +196 -0
  38. package/dist/components/breadcrumb/__tests__/DataBrowserBreadcrumb.test.d.ts +1 -0
  39. package/dist/components/breadcrumb/__tests__/DataBrowserBreadcrumb.test.js +153 -0
  40. package/dist/components/breadcrumb/__tests__/useBreadcrumbPaths.test.d.ts +1 -0
  41. package/dist/components/breadcrumb/__tests__/useBreadcrumbPaths.test.js +134 -0
  42. package/dist/components/breadcrumb/index.d.ts +8 -0
  43. package/dist/components/breadcrumb/index.js +4 -0
  44. package/dist/components/breadcrumb/useBreadcrumbPaths.d.ts +2 -0
  45. package/dist/components/breadcrumb/useBreadcrumbPaths.js +82 -0
  46. package/dist/components/buckets/BucketAccessor.d.ts +2 -0
  47. package/dist/components/buckets/BucketAccessor.js +125 -0
  48. package/dist/components/buckets/BucketConfigEditButton.d.ts +8 -0
  49. package/dist/components/buckets/{BucketPolicyButton.js → BucketConfigEditButton.js} +9 -5
  50. package/dist/components/buckets/BucketCorsPage.d.ts +1 -0
  51. package/dist/components/buckets/BucketCorsPage.js +234 -0
  52. package/dist/components/buckets/BucketCreate.d.ts +3 -2
  53. package/dist/components/buckets/BucketCreate.js +93 -47
  54. package/dist/components/buckets/BucketDetails.d.ts +42 -0
  55. package/dist/components/buckets/BucketDetails.js +249 -85
  56. package/dist/components/buckets/BucketLifecycleFormPage.js +225 -191
  57. package/dist/components/buckets/BucketLifecycleList.d.ts +2 -2
  58. package/dist/components/buckets/BucketLifecycleList.js +59 -61
  59. package/dist/components/buckets/BucketList.d.ts +7 -8
  60. package/dist/components/buckets/BucketList.js +158 -101
  61. package/dist/components/buckets/BucketLocation.js +4 -4
  62. package/dist/components/buckets/BucketOverview.d.ts +22 -2
  63. package/dist/components/buckets/BucketOverview.js +394 -187
  64. package/dist/components/buckets/BucketPage.js +43 -21
  65. package/dist/components/buckets/BucketPolicyPage.js +155 -127
  66. package/dist/components/buckets/BucketReplicationFormPage.js +134 -133
  67. package/dist/components/buckets/BucketReplicationList.d.ts +2 -2
  68. package/dist/components/buckets/BucketReplicationList.js +48 -45
  69. package/dist/components/buckets/BucketVersioning.d.ts +4 -0
  70. package/dist/components/buckets/BucketVersioning.js +76 -0
  71. package/dist/components/buckets/DeleteBucketButton.js +8 -8
  72. package/dist/components/buckets/DeleteBucketConfigRuleButton.d.ts +2 -2
  73. package/dist/components/buckets/DeleteBucketConfigRuleButton.js +2 -2
  74. package/dist/components/buckets/EmptyBucketButton.js +24 -24
  75. package/dist/components/buckets/EmptyBucketSummary.d.ts +2 -2
  76. package/dist/components/buckets/EmptyBucketSummary.js +1 -1
  77. package/dist/components/buckets/EmptyBucketSummaryList.d.ts +1 -1
  78. package/dist/components/buckets/EmptyBucketSummaryList.js +22 -22
  79. package/dist/components/buckets/__tests__/BucketVersioning.test.d.ts +1 -0
  80. package/dist/components/buckets/__tests__/BucketVersioning.test.js +163 -0
  81. package/dist/components/buckets/notifications/BucketNotificationFormPage.d.ts +1 -0
  82. package/dist/components/buckets/notifications/BucketNotificationFormPage.js +316 -0
  83. package/dist/components/buckets/notifications/BucketNotificationList.d.ts +10 -0
  84. package/dist/components/buckets/notifications/BucketNotificationList.js +267 -0
  85. package/dist/components/buckets/notifications/EventsSection.js +145 -29
  86. package/dist/components/buckets/notifications/__tests__/events.test.d.ts +1 -0
  87. package/dist/components/buckets/notifications/__tests__/events.test.js +56 -0
  88. package/dist/components/buckets/notifications/events.d.ts +71 -7
  89. package/dist/components/buckets/notifications/events.js +98 -16
  90. package/dist/components/index.d.ts +27 -20
  91. package/dist/components/index.js +17 -10
  92. package/dist/components/layouts/ArrowNavigation.d.ts +3 -0
  93. package/dist/components/layouts/ArrowNavigation.js +28 -0
  94. package/dist/components/layouts/BrowserPageLayout.d.ts +5 -1
  95. package/dist/components/layouts/BrowserPageLayout.js +10 -5
  96. package/dist/components/objects/CreateFolderButton.d.ts +2 -2
  97. package/dist/components/objects/CreateFolderButton.js +12 -12
  98. package/dist/components/objects/DeleteObjectButton.d.ts +1 -1
  99. package/dist/components/objects/DeleteObjectButton.js +19 -21
  100. package/dist/components/objects/GetPresignedUrlButton.d.ts +7 -0
  101. package/dist/components/objects/GetPresignedUrlButton.js +255 -0
  102. package/dist/components/objects/ObjectDetails/ObjectMetadata.d.ts +2 -2
  103. package/dist/components/objects/ObjectDetails/ObjectMetadata.js +289 -230
  104. package/dist/components/objects/ObjectDetails/ObjectSummary.d.ts +2 -2
  105. package/dist/components/objects/ObjectDetails/ObjectSummary.js +540 -138
  106. package/dist/components/objects/ObjectDetails/ObjectTags.d.ts +2 -2
  107. package/dist/components/objects/ObjectDetails/ObjectTags.js +103 -123
  108. package/dist/components/objects/ObjectDetails/__tests__/ObjectDetails.test.d.ts +1 -0
  109. package/dist/components/objects/ObjectDetails/__tests__/ObjectDetails.test.js +516 -0
  110. package/dist/components/objects/ObjectDetails/__tests__/ObjectSummary.test.d.ts +1 -0
  111. package/dist/components/objects/ObjectDetails/__tests__/ObjectSummary.test.js +1064 -0
  112. package/dist/components/objects/ObjectDetails/formUtils.d.ts +15 -0
  113. package/dist/components/objects/ObjectDetails/formUtils.js +7 -0
  114. package/dist/components/objects/ObjectDetails/index.d.ts +18 -2
  115. package/dist/components/objects/ObjectDetails/index.js +152 -40
  116. package/dist/components/objects/ObjectList.d.ts +12 -10
  117. package/dist/components/objects/ObjectList.js +590 -263
  118. package/dist/components/objects/ObjectLock/EditRetentionButton.js +4 -4
  119. package/dist/components/objects/ObjectLock/ObjectLockRetentionSettings.js +15 -15
  120. package/dist/components/objects/ObjectLock/ObjectLockSettings.d.ts +1 -1
  121. package/dist/components/objects/ObjectLock/ObjectLockSettings.js +32 -31
  122. package/dist/components/objects/ObjectLock/ObjectLockSettingsUtils.d.ts +1 -1
  123. package/dist/components/objects/ObjectLock/ObjectLockSettingsUtils.js +6 -6
  124. package/dist/components/objects/ObjectLock/__tests__/EditRetentionButton.test.js +51 -51
  125. package/dist/components/objects/ObjectLock/__tests__/ObjectLockSettings.test.js +78 -78
  126. package/dist/components/objects/ObjectPage.js +12 -8
  127. package/dist/components/objects/UploadButton.d.ts +3 -3
  128. package/dist/components/objects/UploadButton.js +10 -10
  129. package/dist/components/objects/__tests__/GetPresignedUrlButton.test.d.ts +1 -0
  130. package/dist/components/objects/__tests__/GetPresignedUrlButton.test.js +531 -0
  131. package/dist/components/providers/DataBrowserProvider.d.ts +23 -12
  132. package/dist/components/providers/DataBrowserProvider.js +60 -38
  133. package/dist/components/providers/QueryProvider.d.ts +9 -0
  134. package/dist/components/providers/QueryProvider.js +21 -0
  135. package/dist/components/search/MetadataSearch.js +29 -28
  136. package/dist/components/search/SearchHints.js +1 -1
  137. package/dist/components/ui/ArrayFieldActions.js +12 -7
  138. package/dist/components/ui/ConfirmDeleteRuleModal.d.ts +2 -2
  139. package/dist/components/ui/ConfirmDeleteRuleModal.js +6 -1
  140. package/dist/components/ui/DeleteObjectModalContent.d.ts +1 -1
  141. package/dist/components/ui/DeleteObjectModalContent.js +12 -12
  142. package/dist/components/ui/FilterFormSection.d.ts +2 -2
  143. package/dist/components/ui/FilterFormSection.js +29 -29
  144. package/dist/components/ui/Search.elements.d.ts +2 -2
  145. package/dist/components/ui/Search.elements.js +7 -7
  146. package/dist/components/ui/Table.elements.d.ts +2 -1
  147. package/dist/components/ui/Table.elements.js +18 -12
  148. package/dist/config/__tests__/factory.test.d.ts +1 -0
  149. package/dist/config/__tests__/factory.test.js +311 -0
  150. package/dist/config/factory.d.ts +10 -56
  151. package/dist/config/factory.js +23 -71
  152. package/dist/config/types.d.ts +212 -34
  153. package/dist/contexts/DataBrowserUICustomizationContext.d.ts +27 -0
  154. package/dist/contexts/DataBrowserUICustomizationContext.js +13 -0
  155. package/dist/hooks/__tests__/useAccessibleBuckets.test.d.ts +1 -0
  156. package/dist/hooks/__tests__/useAccessibleBuckets.test.js +145 -0
  157. package/dist/hooks/__tests__/useISVBucketDetection.test.js +45 -45
  158. package/dist/hooks/__tests__/useIsBucketEmpty.test.js +27 -27
  159. package/dist/hooks/__tests__/useLoginMutation.test.d.ts +1 -0
  160. package/dist/hooks/__tests__/useLoginMutation.test.js +194 -0
  161. package/dist/hooks/bucketConfiguration.d.ts +8 -1
  162. package/dist/hooks/bucketConfiguration.js +52 -51
  163. package/dist/hooks/bucketOperations.d.ts +10 -1
  164. package/dist/hooks/bucketOperations.js +10 -9
  165. package/dist/hooks/factories/__tests__/useCreateS3FunctionMutationHook.test.js +80 -80
  166. package/dist/hooks/factories/__tests__/useCreateS3InfiniteQueryHook.test.js +80 -80
  167. package/dist/hooks/factories/__tests__/useCreateS3LoginHook.test.js +44 -44
  168. package/dist/hooks/factories/__tests__/useCreateS3MutationHook.test.js +63 -63
  169. package/dist/hooks/factories/__tests__/useCreateS3QueryHook.test.js +65 -65
  170. package/dist/hooks/factories/index.d.ts +4 -4
  171. package/dist/hooks/factories/index.js +2 -2
  172. package/dist/hooks/factories/useCreateS3InfiniteQueryHook.d.ts +2 -2
  173. package/dist/hooks/factories/useCreateS3InfiniteQueryHook.js +16 -13
  174. package/dist/hooks/factories/useCreateS3LoginHook.d.ts +2 -2
  175. package/dist/hooks/factories/useCreateS3LoginHook.js +1 -1
  176. package/dist/hooks/factories/useCreateS3MutationHook.d.ts +3 -3
  177. package/dist/hooks/factories/useCreateS3MutationHook.js +7 -2
  178. package/dist/hooks/factories/useCreateS3QueryHook.d.ts +2 -2
  179. package/dist/hooks/factories/useCreateS3QueryHook.js +11 -6
  180. package/dist/hooks/index.d.ts +19 -12
  181. package/dist/hooks/index.js +16 -9
  182. package/dist/hooks/loginOperations.d.ts +1 -1
  183. package/dist/hooks/loginOperations.js +1 -1
  184. package/dist/hooks/objectOperations.d.ts +2 -2
  185. package/dist/hooks/objectOperations.js +50 -49
  186. package/dist/hooks/presignedOperations.d.ts +4 -4
  187. package/dist/hooks/presignedOperations.js +5 -5
  188. package/dist/hooks/useAccessibleBuckets.d.ts +11 -0
  189. package/dist/hooks/useAccessibleBuckets.js +115 -0
  190. package/dist/hooks/useBatchObjectLegalHold.d.ts +11 -0
  191. package/dist/hooks/useBatchObjectLegalHold.js +48 -0
  192. package/dist/hooks/useBucketConfigEditor.d.ts +31 -0
  193. package/dist/hooks/useBucketConfigEditor.js +82 -0
  194. package/dist/hooks/useDataBrowserNavigate.d.ts +28 -0
  195. package/dist/hooks/useDataBrowserNavigate.js +24 -0
  196. package/dist/hooks/useDeleteBucketConfigRule.d.ts +2 -2
  197. package/dist/hooks/useDeleteBucketConfigRule.js +4 -4
  198. package/dist/hooks/useEmptyBucket.js +11 -11
  199. package/dist/hooks/useFeatures.d.ts +7 -0
  200. package/dist/hooks/useFeatures.js +8 -0
  201. package/dist/hooks/useISVBucketDetection.js +6 -6
  202. package/dist/hooks/useIsBucketEmpty.js +4 -4
  203. package/dist/hooks/useLimitedAccessFlow.d.ts +48 -0
  204. package/dist/hooks/useLimitedAccessFlow.js +23 -0
  205. package/dist/hooks/useS3Client.d.ts +6 -0
  206. package/dist/hooks/useS3Client.js +3 -2
  207. package/dist/hooks/useS3ConfigSwitch.d.ts +11 -0
  208. package/dist/hooks/useS3ConfigSwitch.js +37 -0
  209. package/dist/hooks/useSupportedNotificationEvents.d.ts +6 -0
  210. package/dist/hooks/useSupportedNotificationEvents.js +8 -0
  211. package/dist/index.d.ts +6 -6
  212. package/dist/index.js +2 -2
  213. package/dist/schemas/bucketPolicySchema.json +3 -13
  214. package/dist/test/msw/handlers/deleteBucket.d.ts +1 -1
  215. package/dist/test/msw/handlers/deleteBucket.js +20 -10
  216. package/dist/test/msw/handlers/getBucketAcl.d.ts +1 -1
  217. package/dist/test/msw/handlers/getBucketAcl.js +29 -17
  218. package/dist/test/msw/handlers/getBucketLocation.d.ts +1 -1
  219. package/dist/test/msw/handlers/getBucketLocation.js +29 -15
  220. package/dist/test/msw/handlers/getBucketPolicy.d.ts +1 -1
  221. package/dist/test/msw/handlers/getBucketPolicy.js +52 -32
  222. package/dist/test/msw/handlers/headObject.d.ts +1 -1
  223. package/dist/test/msw/handlers/headObject.js +31 -13
  224. package/dist/test/msw/handlers/listBuckets.d.ts +1 -1
  225. package/dist/test/msw/handlers/listBuckets.js +5 -3
  226. package/dist/test/msw/handlers/listObjectVersions.d.ts +1 -1
  227. package/dist/test/msw/handlers/listObjectVersions.js +38 -26
  228. package/dist/test/msw/handlers/listObjects.d.ts +1 -1
  229. package/dist/test/msw/handlers/listObjects.js +35 -23
  230. package/dist/test/msw/handlers/objectLegalHold.d.ts +1 -1
  231. package/dist/test/msw/handlers/objectLegalHold.js +32 -17
  232. package/dist/test/msw/handlers/objectRetention.d.ts +1 -1
  233. package/dist/test/msw/handlers/objectRetention.js +31 -17
  234. package/dist/test/msw/handlers/putBucketAcl.d.ts +1 -1
  235. package/dist/test/msw/handlers/putBucketAcl.js +29 -14
  236. package/dist/test/msw/handlers/putObject.d.ts +1 -1
  237. package/dist/test/msw/handlers/putObject.js +27 -12
  238. package/dist/test/msw/handlers.d.ts +3 -3
  239. package/dist/test/msw/handlers.js +77 -54
  240. package/dist/test/msw/index.d.ts +2 -2
  241. package/dist/test/msw/index.js +1 -1
  242. package/dist/test/msw/server.d.ts +1 -1
  243. package/dist/test/msw/server.js +1 -1
  244. package/dist/test/msw/utils.js +2 -2
  245. package/dist/test/setup.d.ts +1 -1
  246. package/dist/test/setup.js +13 -30
  247. package/dist/test/testUtils.d.ts +85 -33
  248. package/dist/test/testUtils.js +176 -111
  249. package/dist/test/utils/errorHandling.test.js +119 -119
  250. package/dist/types/index.d.ts +50 -37
  251. package/dist/types/monaco.d.ts +13 -0
  252. package/dist/types/monaco.js +0 -0
  253. package/dist/utils/__tests__/proxyMiddleware.test.d.ts +1 -0
  254. package/dist/utils/__tests__/proxyMiddleware.test.js +579 -0
  255. package/dist/utils/__tests__/s3Client.test.d.ts +1 -0
  256. package/dist/utils/__tests__/s3Client.test.js +340 -0
  257. package/dist/utils/__tests__/s3ConfigIdentifier.test.d.ts +1 -0
  258. package/dist/utils/__tests__/s3ConfigIdentifier.test.js +437 -0
  259. package/dist/utils/constants.d.ts +10 -0
  260. package/dist/utils/constants.js +19 -9
  261. package/dist/utils/deletion/index.d.ts +2 -2
  262. package/dist/utils/deletion/index.js +1 -1
  263. package/dist/utils/deletion/messages.d.ts +1 -1
  264. package/dist/utils/deletion/messages.js +4 -4
  265. package/dist/utils/errorHandling.d.ts +3 -3
  266. package/dist/utils/errorHandling.js +6 -6
  267. package/dist/utils/hooks.js +8 -8
  268. package/dist/utils/index.d.ts +5 -4
  269. package/dist/utils/index.js +4 -2
  270. package/dist/utils/proxyMiddleware.d.ts +32 -13
  271. package/dist/utils/proxyMiddleware.js +90 -36
  272. package/dist/utils/s3Client.d.ts +14 -4
  273. package/dist/utils/s3Client.js +5 -26
  274. package/dist/utils/s3ConfigIdentifier.d.ts +79 -0
  275. package/dist/utils/s3ConfigIdentifier.js +57 -0
  276. package/dist/utils/s3RuleUtils.d.ts +5 -5
  277. package/dist/utils/s3RuleUtils.js +17 -17
  278. package/package.json +10 -8
  279. package/dist/components/__tests__/BucketNotificationCreatePage.test.js +0 -316
  280. package/dist/components/buckets/BucketPolicyButton.d.ts +0 -7
  281. package/dist/components/buckets/notifications/BucketNotificationCreatePage.d.ts +0 -1
  282. package/dist/components/buckets/notifications/BucketNotificationCreatePage.js +0 -234
  283. package/dist/hooks/useLoginMutation.d.ts +0 -21
  284. package/dist/hooks/useLoginMutation.js +0 -9
  285. package/dist/utils/useFeatures.d.ts +0 -1
  286. package/dist/utils/useFeatures.js +0 -7
  287. /package/dist/components/__tests__/{BucketNotificationCreatePage.test.d.ts → BucketAccessor.test.d.ts} +0 -0
@@ -0,0 +1,340 @@
1
+ import { S3Client } from "@aws-sdk/client-s3";
2
+ import { createProxyMiddleware } from "../proxyMiddleware.js";
3
+ import { createS3Client } from "../s3Client.js";
4
+ jest.mock('@aws-sdk/client-s3');
5
+ jest.mock('../proxyMiddleware', ()=>({
6
+ createProxyMiddleware: jest.fn(),
7
+ resolveProxyEndpoint: jest.fn((endpoint)=>{
8
+ if ('origin' === endpoint) return 'http://localhost';
9
+ if (endpoint.startsWith('/')) return 'http://localhost' + endpoint;
10
+ return endpoint;
11
+ })
12
+ }));
13
+ const MockedS3Client = S3Client;
14
+ const mockedCreateProxyMiddleware = createProxyMiddleware;
15
+ describe('createS3Client', ()=>{
16
+ let mockMiddlewareStack;
17
+ const baseCredentials = {
18
+ accessKeyId: 'AKIAIOSFODNN7EXAMPLE',
19
+ secretAccessKey: 'wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY'
20
+ };
21
+ beforeEach(()=>{
22
+ jest.clearAllMocks();
23
+ mockMiddlewareStack = {
24
+ use: jest.fn()
25
+ };
26
+ MockedS3Client.mockImplementation(()=>({
27
+ middlewareStack: mockMiddlewareStack
28
+ }));
29
+ mockedCreateProxyMiddleware.mockReturnValue({
30
+ applyToStack: jest.fn()
31
+ });
32
+ });
33
+ describe('Basic S3Client configuration', ()=>{
34
+ it('should create S3Client with all provided parameters', ()=>{
35
+ const config = {
36
+ endpoint: 'https://s3.us-west-2.amazonaws.com',
37
+ region: 'us-west-2',
38
+ forcePathStyle: true,
39
+ credentials: baseCredentials
40
+ };
41
+ createS3Client(config);
42
+ expect(MockedS3Client).toHaveBeenCalledTimes(1);
43
+ expect(MockedS3Client).toHaveBeenCalledWith({
44
+ endpoint: 'https://s3.us-west-2.amazonaws.com',
45
+ region: 'us-west-2',
46
+ forcePathStyle: true,
47
+ credentials: baseCredentials
48
+ });
49
+ });
50
+ it('should default forcePathStyle to true when omitted', ()=>{
51
+ const config = {
52
+ endpoint: 'https://s3.amazonaws.com',
53
+ region: 'eu-west-1',
54
+ credentials: baseCredentials
55
+ };
56
+ createS3Client(config);
57
+ expect(MockedS3Client).toHaveBeenCalledWith({
58
+ endpoint: 'https://s3.amazonaws.com',
59
+ region: 'eu-west-1',
60
+ forcePathStyle: true,
61
+ credentials: baseCredentials
62
+ });
63
+ });
64
+ it('should respect explicit forcePathStyle false', ()=>{
65
+ const config = {
66
+ endpoint: 'https://bucket.s3.amazonaws.com',
67
+ region: 'us-east-1',
68
+ forcePathStyle: false,
69
+ credentials: baseCredentials
70
+ };
71
+ createS3Client(config);
72
+ expect(MockedS3Client).toHaveBeenCalledWith(expect.objectContaining({
73
+ forcePathStyle: false
74
+ }));
75
+ });
76
+ it('should handle config without endpoint', ()=>{
77
+ const config = {
78
+ region: 'ap-southeast-1',
79
+ credentials: baseCredentials
80
+ };
81
+ createS3Client(config);
82
+ expect(MockedS3Client).toHaveBeenCalledWith({
83
+ endpoint: void 0,
84
+ region: 'ap-southeast-1',
85
+ forcePathStyle: true,
86
+ credentials: baseCredentials
87
+ });
88
+ });
89
+ });
90
+ describe('Proxy endpoint selection', ()=>{
91
+ it('should use proxy endpoint when proxy is enabled', ()=>{
92
+ const config = {
93
+ endpoint: 'https://s3.amazonaws.com',
94
+ region: 'us-east-1',
95
+ credentials: baseCredentials,
96
+ proxy: {
97
+ enabled: true,
98
+ endpoint: 'http://localhost:3000/api/s3',
99
+ target: 'https://s3.amazonaws.com'
100
+ }
101
+ };
102
+ createS3Client(config);
103
+ expect(MockedS3Client).toHaveBeenCalledWith({
104
+ endpoint: 'http://localhost:3000/api/s3',
105
+ region: 'us-east-1',
106
+ forcePathStyle: true,
107
+ credentials: baseCredentials
108
+ });
109
+ });
110
+ it('should use real S3 endpoint when proxy.enabled is false', ()=>{
111
+ const config = {
112
+ endpoint: 'https://s3.eu-central-1.amazonaws.com',
113
+ region: 'eu-central-1',
114
+ credentials: baseCredentials,
115
+ proxy: {
116
+ enabled: false,
117
+ endpoint: 'http://localhost:3000/api/s3'
118
+ }
119
+ };
120
+ createS3Client(config);
121
+ expect(MockedS3Client).toHaveBeenCalledWith({
122
+ endpoint: 'https://s3.eu-central-1.amazonaws.com',
123
+ region: 'eu-central-1',
124
+ forcePathStyle: true,
125
+ credentials: baseCredentials
126
+ });
127
+ });
128
+ it('should use real S3 endpoint when proxy config is absent', ()=>{
129
+ const config = {
130
+ endpoint: 'https://s3.amazonaws.com',
131
+ region: 'us-west-1',
132
+ credentials: baseCredentials
133
+ };
134
+ createS3Client(config);
135
+ expect(MockedS3Client).toHaveBeenCalledWith({
136
+ endpoint: 'https://s3.amazonaws.com',
137
+ region: 'us-west-1',
138
+ forcePathStyle: true,
139
+ credentials: baseCredentials
140
+ });
141
+ });
142
+ });
143
+ describe('Proxy middleware application', ()=>{
144
+ it('should apply proxy middleware when enabled with target', ()=>{
145
+ const config = {
146
+ endpoint: 'https://s3.amazonaws.com',
147
+ region: 'us-east-1',
148
+ credentials: baseCredentials,
149
+ proxy: {
150
+ enabled: true,
151
+ endpoint: 'http://localhost:3000/api/s3',
152
+ target: 'http://s3.internal.local'
153
+ }
154
+ };
155
+ createS3Client(config);
156
+ expect(mockedCreateProxyMiddleware).toHaveBeenCalledTimes(1);
157
+ expect(mockedCreateProxyMiddleware).toHaveBeenCalledWith({
158
+ enabled: true,
159
+ endpoint: 'http://localhost:3000/api/s3',
160
+ target: 'http://s3.internal.local'
161
+ });
162
+ expect(mockMiddlewareStack.use).toHaveBeenCalledTimes(1);
163
+ });
164
+ it('should not apply middleware when proxy.target is not provided', ()=>{
165
+ const config = {
166
+ endpoint: 'https://s3.amazonaws.com',
167
+ region: 'us-east-1',
168
+ credentials: baseCredentials,
169
+ proxy: {
170
+ enabled: false,
171
+ endpoint: 'http://localhost:3000/api/s3'
172
+ }
173
+ };
174
+ createS3Client(config);
175
+ expect(mockedCreateProxyMiddleware).not.toHaveBeenCalled();
176
+ expect(mockMiddlewareStack.use).not.toHaveBeenCalled();
177
+ });
178
+ it('should pass proxy middleware to client middleware stack', ()=>{
179
+ const mockProxyMiddleware = {
180
+ applyToStack: jest.fn()
181
+ };
182
+ mockedCreateProxyMiddleware.mockReturnValue(mockProxyMiddleware);
183
+ const config = {
184
+ endpoint: 'https://s3.amazonaws.com',
185
+ region: 'us-east-1',
186
+ credentials: baseCredentials,
187
+ proxy: {
188
+ enabled: true,
189
+ endpoint: 'http://localhost:8080/proxy',
190
+ target: 'https://s3.amazonaws.com'
191
+ }
192
+ };
193
+ createS3Client(config);
194
+ expect(mockMiddlewareStack.use).toHaveBeenCalledWith(mockProxyMiddleware);
195
+ });
196
+ it('should not create proxy middleware when proxy is disabled', ()=>{
197
+ const config = {
198
+ endpoint: 'https://s3.amazonaws.com',
199
+ region: 'us-east-1',
200
+ credentials: baseCredentials,
201
+ proxy: {
202
+ enabled: false,
203
+ endpoint: 'http://localhost:3000/api/s3'
204
+ }
205
+ };
206
+ createS3Client(config);
207
+ expect(mockedCreateProxyMiddleware).not.toHaveBeenCalled();
208
+ expect(mockMiddlewareStack.use).not.toHaveBeenCalled();
209
+ });
210
+ it('should not create proxy middleware when proxy config is absent', ()=>{
211
+ const config = {
212
+ endpoint: 'https://s3.amazonaws.com',
213
+ region: 'us-east-1',
214
+ credentials: baseCredentials
215
+ };
216
+ createS3Client(config);
217
+ expect(mockedCreateProxyMiddleware).not.toHaveBeenCalled();
218
+ expect(mockMiddlewareStack.use).not.toHaveBeenCalled();
219
+ });
220
+ it('should throw error when proxy is enabled but target is missing', ()=>{
221
+ const config = {
222
+ region: 'us-east-1',
223
+ credentials: baseCredentials,
224
+ proxy: {
225
+ enabled: true,
226
+ endpoint: 'http://localhost:3000/api/s3'
227
+ }
228
+ };
229
+ expect(()=>createS3Client(config)).toThrow('Proxy configuration error: "target" is required when proxy is enabled');
230
+ });
231
+ });
232
+ describe('Edge cases', ()=>{
233
+ it('should handle minimal valid configuration', ()=>{
234
+ const config = {
235
+ region: 'us-east-1',
236
+ credentials: baseCredentials
237
+ };
238
+ const client = createS3Client(config);
239
+ expect(client).toBeDefined();
240
+ expect(MockedS3Client).toHaveBeenCalledWith({
241
+ endpoint: void 0,
242
+ region: 'us-east-1',
243
+ forcePathStyle: true,
244
+ credentials: baseCredentials
245
+ });
246
+ });
247
+ it('should return S3Client with middleware stack', ()=>{
248
+ const config = {
249
+ endpoint: 'https://s3.amazonaws.com',
250
+ region: 'us-east-1',
251
+ credentials: baseCredentials
252
+ };
253
+ const client = createS3Client(config);
254
+ expect(client).toBeDefined();
255
+ expect(client.middlewareStack).toBeDefined();
256
+ expect(typeof client.middlewareStack.use).toBe('function');
257
+ });
258
+ it('should handle proxy config with undefined endpoint property', ()=>{
259
+ const config = {
260
+ region: 'us-east-1',
261
+ credentials: baseCredentials,
262
+ proxy: {
263
+ enabled: false,
264
+ endpoint: 'http://localhost:3000/api/s3'
265
+ }
266
+ };
267
+ createS3Client(config);
268
+ expect(mockedCreateProxyMiddleware).not.toHaveBeenCalled();
269
+ });
270
+ it('should handle custom S3-compatible endpoint', ()=>{
271
+ const config = {
272
+ endpoint: 'http://minio.local:9000',
273
+ region: 'us-east-1',
274
+ credentials: baseCredentials,
275
+ forcePathStyle: true
276
+ };
277
+ createS3Client(config);
278
+ expect(MockedS3Client).toHaveBeenCalledWith({
279
+ endpoint: 'http://minio.local:9000',
280
+ region: 'us-east-1',
281
+ forcePathStyle: true,
282
+ credentials: baseCredentials
283
+ });
284
+ });
285
+ it('should handle proxy with custom S3-compatible endpoint', ()=>{
286
+ const config = {
287
+ endpoint: 'http://minio.local:9000',
288
+ region: 'us-east-1',
289
+ credentials: baseCredentials,
290
+ proxy: {
291
+ enabled: true,
292
+ endpoint: 'http://localhost:3000/minio-proxy',
293
+ target: 'http://minio.local:9000'
294
+ }
295
+ };
296
+ createS3Client(config);
297
+ expect(MockedS3Client).toHaveBeenCalledWith(expect.objectContaining({
298
+ endpoint: 'http://localhost:3000/minio-proxy'
299
+ }));
300
+ expect(mockedCreateProxyMiddleware).toHaveBeenCalledWith({
301
+ enabled: true,
302
+ endpoint: 'http://localhost:3000/minio-proxy',
303
+ target: 'http://minio.local:9000'
304
+ });
305
+ });
306
+ });
307
+ describe('Credentials handling', ()=>{
308
+ it('should pass credentials object correctly', ()=>{
309
+ const credentials = {
310
+ accessKeyId: 'CUSTOM_ACCESS_KEY',
311
+ secretAccessKey: 'custom-secret-key-123'
312
+ };
313
+ const config = {
314
+ endpoint: 'https://s3.amazonaws.com',
315
+ region: 'us-east-1',
316
+ credentials
317
+ };
318
+ createS3Client(config);
319
+ expect(MockedS3Client).toHaveBeenCalledWith(expect.objectContaining({
320
+ credentials
321
+ }));
322
+ });
323
+ it('should handle credentials with session token', ()=>{
324
+ const credentials = {
325
+ accessKeyId: 'ASIATEMP',
326
+ secretAccessKey: 'temp-secret',
327
+ sessionToken: 'FwoGZXIvYXdz...'
328
+ };
329
+ const config = {
330
+ endpoint: 'https://s3.amazonaws.com',
331
+ region: 'us-east-1',
332
+ credentials
333
+ };
334
+ createS3Client(config);
335
+ expect(MockedS3Client).toHaveBeenCalledWith(expect.objectContaining({
336
+ credentials
337
+ }));
338
+ });
339
+ });
340
+ });
@@ -0,0 +1 @@
1
+ export {};