@scality/data-browser-library 1.0.0-preview.13 → 1.0.0-preview.16

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 (212) hide show
  1. package/dist/components/DataBrowserUI.d.ts +6 -14
  2. package/dist/components/DataBrowserUI.js +79 -55
  3. package/dist/components/Editor.d.ts +1 -1
  4. package/dist/components/Editor.js +3 -3
  5. package/dist/components/__tests__/BucketCreate.test.js +102 -102
  6. package/dist/components/__tests__/BucketDetails.test.js +122 -123
  7. package/dist/components/__tests__/BucketLifecycleFormPage.test.js +177 -177
  8. package/dist/components/__tests__/BucketLifecycleList.test.js +85 -85
  9. package/dist/components/__tests__/BucketList.test.js +175 -176
  10. package/dist/components/__tests__/BucketNotificationCreatePage.test.js +84 -84
  11. package/dist/components/__tests__/BucketOverview.test.js +257 -201
  12. package/dist/components/__tests__/BucketPolicyPage.test.js +62 -62
  13. package/dist/components/__tests__/BucketReplicationFormPage.test.js +542 -542
  14. package/dist/components/__tests__/BucketReplicationList.test.js +106 -106
  15. package/dist/components/__tests__/CreateFolderButton.test.js +56 -56
  16. package/dist/components/__tests__/DeleteBucketButton.test.js +62 -62
  17. package/dist/components/__tests__/DeleteBucketConfigRuleButton.test.js +47 -47
  18. package/dist/components/__tests__/DeleteObjectButton.test.js +63 -63
  19. package/dist/components/__tests__/EmptyBucketButton.test.js +56 -56
  20. package/dist/components/__tests__/MetadataSearch.test.js +65 -65
  21. package/dist/components/__tests__/ObjectList.test.js +252 -251
  22. package/dist/components/__tests__/UploadButton.test.js +45 -45
  23. package/dist/components/buckets/BucketCreate.d.ts +2 -2
  24. package/dist/components/buckets/BucketCreate.js +41 -41
  25. package/dist/components/buckets/BucketDetails.d.ts +2 -2
  26. package/dist/components/buckets/BucketDetails.js +48 -36
  27. package/dist/components/buckets/BucketLifecycleFormPage.js +161 -160
  28. package/dist/components/buckets/BucketLifecycleList.d.ts +2 -2
  29. package/dist/components/buckets/BucketLifecycleList.js +46 -46
  30. package/dist/components/buckets/BucketList.d.ts +2 -2
  31. package/dist/components/buckets/BucketList.js +28 -27
  32. package/dist/components/buckets/BucketLocation.js +3 -3
  33. package/dist/components/buckets/BucketOverview.d.ts +1 -1
  34. package/dist/components/buckets/BucketOverview.js +64 -65
  35. package/dist/components/buckets/BucketPage.js +19 -11
  36. package/dist/components/buckets/BucketPolicyButton.js +2 -2
  37. package/dist/components/buckets/BucketPolicyPage.js +27 -25
  38. package/dist/components/buckets/BucketReplicationFormPage.js +133 -132
  39. package/dist/components/buckets/BucketReplicationList.d.ts +2 -2
  40. package/dist/components/buckets/BucketReplicationList.js +41 -41
  41. package/dist/components/buckets/BucketVersioning.js +11 -11
  42. package/dist/components/buckets/DeleteBucketButton.js +5 -5
  43. package/dist/components/buckets/DeleteBucketConfigRuleButton.d.ts +2 -2
  44. package/dist/components/buckets/DeleteBucketConfigRuleButton.js +1 -1
  45. package/dist/components/buckets/EmptyBucketButton.js +19 -19
  46. package/dist/components/buckets/EmptyBucketSummary.d.ts +1 -1
  47. package/dist/components/buckets/EmptyBucketSummary.js +1 -1
  48. package/dist/components/buckets/EmptyBucketSummaryList.js +22 -22
  49. package/dist/components/buckets/__tests__/BucketVersioning.test.js +45 -45
  50. package/dist/components/buckets/notifications/BucketNotificationCreatePage.js +34 -33
  51. package/dist/components/buckets/notifications/EventsSection.js +144 -28
  52. package/dist/components/buckets/notifications/__tests__/events.test.d.ts +1 -0
  53. package/dist/components/buckets/notifications/__tests__/events.test.js +56 -0
  54. package/dist/components/buckets/notifications/events.d.ts +71 -7
  55. package/dist/components/buckets/notifications/events.js +98 -16
  56. package/dist/components/index.d.ts +24 -22
  57. package/dist/components/index.js +5 -3
  58. package/dist/components/layouts/ArrowNavigation.d.ts +1 -2
  59. package/dist/components/layouts/ArrowNavigation.js +3 -3
  60. package/dist/components/layouts/BrowserPageLayout.d.ts +2 -3
  61. package/dist/components/layouts/BrowserPageLayout.js +1 -1
  62. package/dist/components/objects/CreateFolderButton.d.ts +2 -2
  63. package/dist/components/objects/CreateFolderButton.js +9 -9
  64. package/dist/components/objects/DeleteObjectButton.d.ts +1 -1
  65. package/dist/components/objects/DeleteObjectButton.js +20 -20
  66. package/dist/components/objects/ObjectDetails/ObjectMetadata.d.ts +1 -1
  67. package/dist/components/objects/ObjectDetails/ObjectMetadata.js +56 -56
  68. package/dist/components/objects/ObjectDetails/ObjectSummary.d.ts +1 -1
  69. package/dist/components/objects/ObjectDetails/ObjectSummary.js +39 -39
  70. package/dist/components/objects/ObjectDetails/ObjectTags.d.ts +1 -1
  71. package/dist/components/objects/ObjectDetails/ObjectTags.js +25 -25
  72. package/dist/components/objects/ObjectDetails/__tests__/ObjectDetails.test.js +119 -119
  73. package/dist/components/objects/ObjectDetails/__tests__/ObjectSummary.test.js +211 -211
  74. package/dist/components/objects/ObjectDetails/index.d.ts +1 -1
  75. package/dist/components/objects/ObjectDetails/index.js +30 -30
  76. package/dist/components/objects/ObjectList.d.ts +5 -5
  77. package/dist/components/objects/ObjectList.js +113 -112
  78. package/dist/components/objects/ObjectLock/EditRetentionButton.js +3 -3
  79. package/dist/components/objects/ObjectLock/ObjectLockRetentionSettings.js +14 -14
  80. package/dist/components/objects/ObjectLock/ObjectLockSettings.d.ts +1 -1
  81. package/dist/components/objects/ObjectLock/ObjectLockSettings.js +29 -28
  82. package/dist/components/objects/ObjectLock/ObjectLockSettingsUtils.d.ts +1 -1
  83. package/dist/components/objects/ObjectLock/ObjectLockSettingsUtils.js +6 -6
  84. package/dist/components/objects/ObjectLock/__tests__/EditRetentionButton.test.js +50 -50
  85. package/dist/components/objects/ObjectLock/__tests__/ObjectLockSettings.test.js +77 -77
  86. package/dist/components/objects/ObjectPage.js +5 -4
  87. package/dist/components/objects/UploadButton.d.ts +3 -3
  88. package/dist/components/objects/UploadButton.js +5 -5
  89. package/dist/components/providers/DataBrowserProvider.d.ts +23 -12
  90. package/dist/components/providers/DataBrowserProvider.js +60 -38
  91. package/dist/components/providers/QueryProvider.d.ts +9 -0
  92. package/dist/components/providers/QueryProvider.js +22 -0
  93. package/dist/components/search/MetadataSearch.js +26 -25
  94. package/dist/components/search/SearchHints.js +1 -1
  95. package/dist/components/ui/ArrayFieldActions.js +4 -4
  96. package/dist/components/ui/ConfirmDeleteRuleModal.d.ts +1 -1
  97. package/dist/components/ui/ConfirmDeleteRuleModal.js +1 -1
  98. package/dist/components/ui/DeleteObjectModalContent.d.ts +1 -1
  99. package/dist/components/ui/DeleteObjectModalContent.js +12 -12
  100. package/dist/components/ui/FilterFormSection.d.ts +2 -2
  101. package/dist/components/ui/FilterFormSection.js +29 -29
  102. package/dist/components/ui/Search.elements.d.ts +1 -1
  103. package/dist/components/ui/Search.elements.js +7 -7
  104. package/dist/components/ui/Table.elements.js +5 -5
  105. package/dist/config/factory.d.ts +23 -10
  106. package/dist/config/factory.js +22 -7
  107. package/dist/config/types.d.ts +20 -3
  108. package/dist/contexts/DataBrowserUICustomizationContext.d.ts +2 -2
  109. package/dist/hooks/__tests__/useISVBucketDetection.test.js +42 -42
  110. package/dist/hooks/__tests__/useIsBucketEmpty.test.js +25 -25
  111. package/dist/hooks/bucketConfiguration.d.ts +1 -1
  112. package/dist/hooks/bucketConfiguration.js +48 -48
  113. package/dist/hooks/bucketOperations.d.ts +1 -1
  114. package/dist/hooks/bucketOperations.js +6 -6
  115. package/dist/hooks/factories/__tests__/useCreateS3FunctionMutationHook.test.js +78 -78
  116. package/dist/hooks/factories/__tests__/useCreateS3InfiniteQueryHook.test.js +78 -78
  117. package/dist/hooks/factories/__tests__/useCreateS3LoginHook.test.js +42 -42
  118. package/dist/hooks/factories/__tests__/useCreateS3MutationHook.test.js +61 -61
  119. package/dist/hooks/factories/__tests__/useCreateS3QueryHook.test.js +63 -63
  120. package/dist/hooks/factories/index.d.ts +4 -4
  121. package/dist/hooks/factories/useCreateS3InfiniteQueryHook.d.ts +2 -2
  122. package/dist/hooks/factories/useCreateS3InfiniteQueryHook.js +15 -12
  123. package/dist/hooks/factories/useCreateS3LoginHook.d.ts +2 -2
  124. package/dist/hooks/factories/useCreateS3MutationHook.d.ts +3 -3
  125. package/dist/hooks/factories/useCreateS3MutationHook.js +6 -1
  126. package/dist/hooks/factories/useCreateS3QueryHook.d.ts +2 -2
  127. package/dist/hooks/factories/useCreateS3QueryHook.js +8 -5
  128. package/dist/hooks/index.d.ts +16 -13
  129. package/dist/hooks/index.js +4 -1
  130. package/dist/hooks/loginOperations.d.ts +1 -1
  131. package/dist/hooks/loginOperations.js +1 -1
  132. package/dist/hooks/objectOperations.d.ts +2 -2
  133. package/dist/hooks/objectOperations.js +49 -49
  134. package/dist/hooks/presignedOperations.d.ts +2 -2
  135. package/dist/hooks/presignedOperations.js +3 -3
  136. package/dist/hooks/useBatchObjectLegalHold.js +7 -4
  137. package/dist/hooks/useDataBrowserNavigate.d.ts +28 -0
  138. package/dist/hooks/useDataBrowserNavigate.js +24 -0
  139. package/dist/hooks/useDeleteBucketConfigRule.d.ts +2 -2
  140. package/dist/hooks/useDeleteBucketConfigRule.js +4 -4
  141. package/dist/hooks/useEmptyBucket.js +10 -10
  142. package/dist/hooks/useFeatures.d.ts +7 -0
  143. package/dist/hooks/useFeatures.js +8 -0
  144. package/dist/hooks/useISVBucketDetection.js +5 -5
  145. package/dist/hooks/useIsBucketEmpty.js +4 -4
  146. package/dist/hooks/useLoginMutation.d.ts +1 -1
  147. package/dist/hooks/useLoginMutation.js +1 -1
  148. package/dist/hooks/useS3Client.d.ts +6 -0
  149. package/dist/hooks/useS3Client.js +3 -2
  150. package/dist/hooks/useS3ConfigSwitch.d.ts +11 -0
  151. package/dist/hooks/useS3ConfigSwitch.js +37 -0
  152. package/dist/hooks/useSupportedNotificationEvents.d.ts +6 -0
  153. package/dist/hooks/useSupportedNotificationEvents.js +8 -0
  154. package/dist/index.d.ts +6 -6
  155. package/dist/test/msw/handlers/deleteBucket.d.ts +1 -1
  156. package/dist/test/msw/handlers/deleteBucket.js +20 -10
  157. package/dist/test/msw/handlers/getBucketAcl.d.ts +1 -1
  158. package/dist/test/msw/handlers/getBucketAcl.js +29 -17
  159. package/dist/test/msw/handlers/getBucketLocation.d.ts +1 -1
  160. package/dist/test/msw/handlers/getBucketLocation.js +29 -15
  161. package/dist/test/msw/handlers/getBucketPolicy.d.ts +1 -1
  162. package/dist/test/msw/handlers/getBucketPolicy.js +52 -32
  163. package/dist/test/msw/handlers/headObject.d.ts +1 -1
  164. package/dist/test/msw/handlers/headObject.js +31 -13
  165. package/dist/test/msw/handlers/listBuckets.d.ts +1 -1
  166. package/dist/test/msw/handlers/listBuckets.js +5 -3
  167. package/dist/test/msw/handlers/listObjectVersions.d.ts +1 -1
  168. package/dist/test/msw/handlers/listObjectVersions.js +38 -26
  169. package/dist/test/msw/handlers/listObjects.d.ts +1 -1
  170. package/dist/test/msw/handlers/listObjects.js +35 -23
  171. package/dist/test/msw/handlers/objectLegalHold.d.ts +1 -1
  172. package/dist/test/msw/handlers/objectLegalHold.js +31 -16
  173. package/dist/test/msw/handlers/objectRetention.d.ts +1 -1
  174. package/dist/test/msw/handlers/objectRetention.js +31 -17
  175. package/dist/test/msw/handlers/putBucketAcl.d.ts +1 -1
  176. package/dist/test/msw/handlers/putBucketAcl.js +29 -14
  177. package/dist/test/msw/handlers/putObject.d.ts +1 -1
  178. package/dist/test/msw/handlers/putObject.js +27 -12
  179. package/dist/test/msw/handlers.d.ts +3 -3
  180. package/dist/test/msw/handlers.js +72 -49
  181. package/dist/test/msw/index.d.ts +2 -2
  182. package/dist/test/msw/server.d.ts +1 -1
  183. package/dist/test/msw/server.js +1 -1
  184. package/dist/test/msw/utils.js +2 -2
  185. package/dist/test/setup.d.ts +1 -1
  186. package/dist/test/setup.js +19 -19
  187. package/dist/test/testUtils.d.ts +9 -15
  188. package/dist/test/testUtils.js +73 -91
  189. package/dist/test/utils/errorHandling.test.js +119 -119
  190. package/dist/types/index.d.ts +6 -31
  191. package/dist/utils/__tests__/s3ConfigIdentifier.test.d.ts +1 -0
  192. package/dist/utils/__tests__/s3ConfigIdentifier.test.js +429 -0
  193. package/dist/utils/constants.js +8 -8
  194. package/dist/utils/deletion/index.d.ts +2 -2
  195. package/dist/utils/deletion/messages.d.ts +1 -1
  196. package/dist/utils/deletion/messages.js +4 -4
  197. package/dist/utils/errorHandling.d.ts +3 -3
  198. package/dist/utils/errorHandling.js +6 -6
  199. package/dist/utils/hooks.js +8 -8
  200. package/dist/utils/index.d.ts +5 -4
  201. package/dist/utils/index.js +2 -0
  202. package/dist/utils/proxyMiddleware.d.ts +1 -1
  203. package/dist/utils/proxyMiddleware.js +6 -11
  204. package/dist/utils/s3Client.d.ts +2 -2
  205. package/dist/utils/s3Client.js +1 -1
  206. package/dist/utils/s3ConfigIdentifier.d.ts +68 -0
  207. package/dist/utils/s3ConfigIdentifier.js +55 -0
  208. package/dist/utils/s3RuleUtils.d.ts +5 -5
  209. package/dist/utils/s3RuleUtils.js +17 -17
  210. package/package.json +2 -2
  211. package/dist/utils/useFeatures.d.ts +0 -1
  212. package/dist/utils/useFeatures.js +0 -7
@@ -1 +1 @@
1
- export declare const getObjectRetentionHandler: import("msw").RestHandler<import("msw").MockedRequest<import("msw").DefaultRequestBody>>;
1
+ export declare const getObjectRetentionHandler: import("msw").HttpHandler;
@@ -1,27 +1,41 @@
1
- import { rest } from "msw";
1
+ import { HttpResponse, http } from "msw";
2
2
  import { createS3ErrorXml, getS3BaseUrl } from "../utils.js";
3
- const getObjectRetentionHandler = rest.get(`${getS3BaseUrl()}/:bucketName/*`, (req, res, ctx)=>{
4
- const { bucketName } = req.params;
5
- const url = new URL(req.url);
6
- const objectKey = url.pathname.substring(url.pathname.indexOf("/", 1) + 1);
7
- if (!url.searchParams.has("retention")) return;
8
- if ("string" == typeof bucketName) {
9
- if (bucketName.includes("non-existent-bucket")) return res(ctx.status(404), ctx.xml(createS3ErrorXml("NoSuchBucket", "The specified bucket does not exist", bucketName)));
10
- if (objectKey.includes("non-existent-object")) return res(ctx.status(404), ctx.xml(createS3ErrorXml("NoSuchKey", "The specified key does not exist.", bucketName, objectKey)));
11
- if (bucketName.includes("restricted-bucket")) return res(ctx.status(403), ctx.xml(createS3ErrorXml("AccessDenied", "Access Denied")));
12
- if (objectKey.includes("no-retention-object")) return res(ctx.status(404), ctx.xml(createS3ErrorXml("NoSuchObjectLockConfiguration", "The specified object does not have a ObjectLock configuration", bucketName, objectKey)));
13
- if (bucketName.includes("network-error-bucket")) return res.networkError("Failed to connect");
14
- if (objectKey.includes("compliance-retention")) return res(ctx.status(200), ctx.xml(`<?xml version="1.0" encoding="UTF-8"?>
3
+ const getObjectRetentionHandler = http.get(`${getS3BaseUrl()}/:bucketName/*`, async ({ request, params })=>{
4
+ const { bucketName } = params;
5
+ const url = new URL(request.url);
6
+ const objectKey = url.pathname.substring(url.pathname.indexOf('/', 1) + 1);
7
+ if (!url.searchParams.has('retention')) return;
8
+ if ('string' == typeof bucketName) {
9
+ if (bucketName.includes('non-existent-bucket')) return HttpResponse.xml(createS3ErrorXml('NoSuchBucket', 'The specified bucket does not exist', bucketName), {
10
+ status: 404
11
+ });
12
+ if (objectKey.includes('non-existent-object')) return HttpResponse.xml(createS3ErrorXml('NoSuchKey', 'The specified key does not exist.', bucketName, objectKey), {
13
+ status: 404
14
+ });
15
+ if (bucketName.includes('restricted-bucket')) return HttpResponse.xml(createS3ErrorXml('AccessDenied', 'Access Denied'), {
16
+ status: 403
17
+ });
18
+ if (objectKey.includes('no-retention-object')) return HttpResponse.xml(createS3ErrorXml('NoSuchObjectLockConfiguration', 'The specified object does not have a ObjectLock configuration', bucketName, objectKey), {
19
+ status: 404
20
+ });
21
+ if (bucketName.includes('network-error-bucket')) return HttpResponse.error();
22
+ if (objectKey.includes('compliance-retention')) return HttpResponse.xml(`<?xml version="1.0" encoding="UTF-8"?>
15
23
  <Retention xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
16
24
  <Mode>COMPLIANCE</Mode>
17
25
  <RetainUntilDate>2024-12-31T23:59:59.000Z</RetainUntilDate>
18
- </Retention>`));
19
- return res(ctx.status(200), ctx.xml(`<?xml version="1.0" encoding="UTF-8"?>
26
+ </Retention>`, {
27
+ status: 200
28
+ });
29
+ return HttpResponse.xml(`<?xml version="1.0" encoding="UTF-8"?>
20
30
  <Retention xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
21
31
  <Mode>GOVERNANCE</Mode>
22
32
  <RetainUntilDate>2024-06-30T23:59:59.000Z</RetainUntilDate>
23
- </Retention>`));
33
+ </Retention>`, {
34
+ status: 200
35
+ });
24
36
  }
25
- return res(ctx.status(400), ctx.xml(createS3ErrorXml("InvalidArgument", "Invalid request parameters")));
37
+ return HttpResponse.xml(createS3ErrorXml('InvalidArgument', 'Invalid request parameters'), {
38
+ status: 400
39
+ });
26
40
  });
27
41
  export { getObjectRetentionHandler };
@@ -1 +1 @@
1
- export declare const putBucketAclHandler: import("msw").RestHandler<import("msw").MockedRequest<import("msw").DefaultRequestBody>>;
1
+ export declare const putBucketAclHandler: import("msw").HttpHandler;
@@ -1,18 +1,33 @@
1
- import { rest } from "msw";
1
+ import { HttpResponse, http } from "msw";
2
2
  import { createS3ErrorXml, getS3BaseUrl } from "../utils.js";
3
- const putBucketAclHandler = rest.put(`${getS3BaseUrl()}/:bucketName`, (req, res, ctx)=>{
4
- const { bucketName } = req.params;
5
- const url = new URL(req.url);
6
- if (!url.searchParams.has("acl")) return;
7
- if ("string" == typeof bucketName) {
8
- if (bucketName.includes("non-existent-bucket")) return res(ctx.status(404), ctx.xml(createS3ErrorXml("NoSuchBucket", "The specified bucket does not exist", bucketName)));
9
- if (bucketName.includes("access-denied-bucket")) return res(ctx.status(403), ctx.xml(createS3ErrorXml("AccessDenied", "Access Denied")));
10
- if (bucketName.includes("invalid-acl-bucket")) return res(ctx.status(400), ctx.xml(createS3ErrorXml("InvalidRequest", "The ACL configuration is invalid")));
11
- if (bucketName.includes("malformed-acl-bucket")) return res(ctx.status(400), ctx.xml(createS3ErrorXml("MalformedACLError", "The XML provided does not match the expected format")));
12
- if (bucketName.includes("network-error-bucket")) return res.networkError("Failed to connect");
13
- const aclParam = url.searchParams.get("acl");
14
- if ("invalid-acl-type" === aclParam) return res(ctx.status(400), ctx.xml(createS3ErrorXml("InvalidArgument", "Invalid canned ACL value")));
3
+ const putBucketAclHandler = http.put(`${getS3BaseUrl()}/:bucketName`, async ({ request, params })=>{
4
+ const { bucketName } = params;
5
+ const url = new URL(request.url);
6
+ if (!url.searchParams.has('acl')) return;
7
+ if ('string' == typeof bucketName) {
8
+ if (bucketName.includes('non-existent-bucket')) return HttpResponse.xml(createS3ErrorXml('NoSuchBucket', 'The specified bucket does not exist', bucketName), {
9
+ status: 404
10
+ });
11
+ if (bucketName.includes('access-denied-bucket')) return HttpResponse.xml(createS3ErrorXml('AccessDenied', 'Access Denied'), {
12
+ status: 403
13
+ });
14
+ if (bucketName.includes('invalid-acl-bucket')) return HttpResponse.xml(createS3ErrorXml('InvalidRequest', 'The ACL configuration is invalid'), {
15
+ status: 400
16
+ });
17
+ if (bucketName.includes('malformed-acl-bucket')) return HttpResponse.xml(createS3ErrorXml('MalformedACLError', 'The XML provided does not match the expected format'), {
18
+ status: 400
19
+ });
20
+ if (bucketName.includes('network-error-bucket')) return HttpResponse.error();
21
+ const aclParam = url.searchParams.get('acl');
22
+ if ('invalid-acl-type' === aclParam) return HttpResponse.xml(createS3ErrorXml('InvalidArgument', 'Invalid canned ACL value'), {
23
+ status: 400
24
+ });
15
25
  }
16
- return res(ctx.status(200), ctx.set("Content-Type", "application/xml"), ctx.body(""));
26
+ return new Response('', {
27
+ status: 200,
28
+ headers: {
29
+ 'Content-Type': 'application/xml'
30
+ }
31
+ });
17
32
  });
18
33
  export { putBucketAclHandler };
@@ -1 +1 @@
1
- export declare const putObjectHandler: import("msw").RestHandler<import("msw").MockedRequest<import("msw").DefaultRequestBody>>;
1
+ export declare const putObjectHandler: import("msw").HttpHandler;
@@ -1,16 +1,31 @@
1
- import { rest } from "msw";
1
+ import { HttpResponse, http } from "msw";
2
2
  import { createS3ErrorXml, getS3BaseUrl } from "../utils.js";
3
- const putObjectHandler = rest.put(`${getS3BaseUrl()}/:bucketName/*`, (req, res, ctx)=>{
4
- const { bucketName } = req.params;
5
- const url = new URL(req.url);
6
- const objectKey = url.pathname.substring(url.pathname.indexOf("/", 1) + 1);
7
- if ("string" == typeof bucketName) {
8
- if (bucketName.includes("non-existent-bucket")) return res(ctx.status(404), ctx.xml(createS3ErrorXml("NoSuchBucket", "The specified bucket does not exist", bucketName)));
9
- if (bucketName.includes("access-denied-bucket")) return res(ctx.status(403), ctx.xml(createS3ErrorXml("AccessDenied", "Access Denied")));
10
- if (bucketName.includes("network-error-bucket")) return res.networkError("Failed to connect");
11
- if (objectKey.includes("invalid-key")) return res(ctx.status(400), ctx.xml(createS3ErrorXml("InvalidRequest", "The specified key is not valid")));
12
- return res(ctx.status(200), ctx.set("ETag", '"mock-etag-123"'), ctx.set("x-amz-version-id", "mock-version-id"), ctx.set("x-amz-server-side-encryption", "AES256"), ctx.body(""));
3
+ const putObjectHandler = http.put(`${getS3BaseUrl()}/:bucketName/*`, async ({ request, params })=>{
4
+ const { bucketName } = params;
5
+ const url = new URL(request.url);
6
+ const objectKey = url.pathname.substring(url.pathname.indexOf('/', 1) + 1);
7
+ if ('string' == typeof bucketName) {
8
+ if (bucketName.includes('non-existent-bucket')) return HttpResponse.xml(createS3ErrorXml('NoSuchBucket', 'The specified bucket does not exist', bucketName), {
9
+ status: 404
10
+ });
11
+ if (bucketName.includes('access-denied-bucket')) return HttpResponse.xml(createS3ErrorXml('AccessDenied', 'Access Denied'), {
12
+ status: 403
13
+ });
14
+ if (bucketName.includes('network-error-bucket')) return HttpResponse.error();
15
+ if (objectKey.includes('invalid-key')) return HttpResponse.xml(createS3ErrorXml('InvalidRequest', 'The specified key is not valid'), {
16
+ status: 400
17
+ });
18
+ return new Response('', {
19
+ status: 200,
20
+ headers: {
21
+ ETag: '"mock-etag-123"',
22
+ 'x-amz-version-id': 'mock-version-id',
23
+ 'x-amz-server-side-encryption': 'AES256'
24
+ }
25
+ });
13
26
  }
14
- return res(ctx.status(400), ctx.xml(createS3ErrorXml("InvalidArgument", "Invalid request parameters")));
27
+ return HttpResponse.xml(createS3ErrorXml('InvalidArgument', 'Invalid request parameters'), {
28
+ status: 400
29
+ });
15
30
  });
16
31
  export { putObjectHandler };
@@ -1,4 +1,4 @@
1
- export declare const createBucketHandler: import("msw").RestHandler<import("msw").MockedRequest<import("msw").DefaultRequestBody>>;
2
- export declare const getBucketVersioningHandler: import("msw").RestHandler<import("msw").MockedRequest<import("msw").DefaultRequestBody>>;
3
- export declare const s3Handlers: import("msw").RestHandler<import("msw").MockedRequest<import("msw").DefaultRequestBody>>[];
1
+ export declare const createBucketHandler: import("msw").HttpHandler;
2
+ export declare const getBucketVersioningHandler: import("msw").HttpHandler;
3
+ export declare const s3Handlers: import("msw").HttpHandler[];
4
4
  export default s3Handlers;
@@ -1,4 +1,4 @@
1
- import { rest } from "msw";
1
+ import { HttpResponse, http } from "msw";
2
2
  import { listBucketsHandler } from "./handlers/listBuckets.js";
3
3
  import { deleteBucketHandler } from "./handlers/deleteBucket.js";
4
4
  import { getBucketLocationHandler } from "./handlers/getBucketLocation.js";
@@ -14,80 +14,103 @@ import { putBucketAclHandler } from "./handlers/putBucketAcl.js";
14
14
  import { createS3ErrorXml, getS3BaseUrl } from "./utils.js";
15
15
  const isBucketConfigurationRequest = (url)=>{
16
16
  const configParams = [
17
- "acl",
18
- "policy",
19
- "versioning",
20
- "lifecycle",
21
- "cors",
22
- "website",
23
- "tagging",
24
- "encryption",
25
- "notification",
26
- "replication",
27
- "requestPayment",
28
- "accelerate",
29
- "metrics",
30
- "inventory",
31
- "analytics",
32
- "intelligentTiering",
33
- "ownershipControls",
34
- "publicAccessBlock",
35
- "logging",
36
- "location"
17
+ 'acl',
18
+ 'policy',
19
+ 'versioning',
20
+ 'lifecycle',
21
+ 'cors',
22
+ 'website',
23
+ 'tagging',
24
+ 'encryption',
25
+ 'notification',
26
+ 'replication',
27
+ 'requestPayment',
28
+ 'accelerate',
29
+ 'metrics',
30
+ 'inventory',
31
+ 'analytics',
32
+ 'intelligentTiering',
33
+ 'ownershipControls',
34
+ 'publicAccessBlock',
35
+ 'logging',
36
+ 'location'
37
37
  ];
38
38
  return configParams.some((param)=>url.searchParams.has(param));
39
39
  };
40
- const createBucketHandler = rest.put(`${getS3BaseUrl()}/:bucketName`, (req, res, ctx)=>{
41
- const { bucketName } = req.params;
42
- const url = new URL(req.url);
40
+ const createBucketHandler = http.put(`${getS3BaseUrl()}/:bucketName`, async ({ request, params })=>{
41
+ const { bucketName } = params;
42
+ const url = new URL(request.url);
43
43
  if (isBucketConfigurationRequest(url)) return;
44
- if ("string" == typeof bucketName) {
45
- if (bucketName.includes("existing-bucket")) return res(ctx.status(409), ctx.xml(createS3ErrorXml("BucketAlreadyExists", "The requested bucket name is not available", bucketName)));
46
- if (bucketName.includes("restricted-bucket")) return res(ctx.status(403), ctx.xml(createS3ErrorXml("AccessDenied", "Access Denied")));
47
- if (bucketName.includes("invalid-bucket-name")) return res(ctx.status(400), ctx.xml(createS3ErrorXml("InvalidBucketName", "Invalid bucket name")));
48
- if (bucketName.includes("network-test-bucket")) return res.networkError("Network connection failed");
44
+ if ('string' == typeof bucketName) {
45
+ if (bucketName.includes('existing-bucket')) return HttpResponse.xml(createS3ErrorXml('BucketAlreadyExists', 'The requested bucket name is not available', bucketName), {
46
+ status: 409
47
+ });
48
+ if (bucketName.includes('restricted-bucket')) return HttpResponse.xml(createS3ErrorXml('AccessDenied', 'Access Denied'), {
49
+ status: 403
50
+ });
51
+ if (bucketName.includes('invalid-bucket-name')) return HttpResponse.xml(createS3ErrorXml('InvalidBucketName', 'Invalid bucket name'), {
52
+ status: 400
53
+ });
54
+ if (bucketName.includes('network-test-bucket')) return HttpResponse.error();
49
55
  }
50
- return res(ctx.status(200), ctx.set("Location", `/${bucketName}`), ctx.xml(`<?xml version="1.0" encoding="UTF-8"?>
56
+ return HttpResponse.xml(`<?xml version="1.0" encoding="UTF-8"?>
51
57
  <CreateBucketResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
52
58
  <Location>/${bucketName}</Location>
53
- </CreateBucketResult>`));
59
+ </CreateBucketResult>`, {
60
+ status: 200,
61
+ headers: {
62
+ Location: `/${bucketName}`
63
+ }
64
+ });
54
65
  });
55
- const getBucketVersioningHandler = rest.get(`${getS3BaseUrl()}/:bucketName`, (req, res, ctx)=>{
56
- const { bucketName } = req.params;
57
- const url = new URL(req.url);
58
- if (!url.searchParams.has("versioning")) return;
59
- if ("string" == typeof bucketName) {
60
- if (bucketName.includes("nonexistent-bucket")) return res(ctx.status(404), ctx.xml(`<?xml version="1.0" encoding="UTF-8"?>
66
+ const getBucketVersioningHandler = http.get(`${getS3BaseUrl()}/:bucketName`, async ({ request, params })=>{
67
+ const { bucketName } = params;
68
+ const url = new URL(request.url);
69
+ if (!url.searchParams.has('versioning')) return;
70
+ if ('string' == typeof bucketName) {
71
+ if (bucketName.includes('nonexistent-bucket')) return HttpResponse.xml(`<?xml version="1.0" encoding="UTF-8"?>
61
72
  <Error>
62
73
  <Code>NoSuchBucket</Code>
63
74
  <Message>The specified bucket does not exist</Message>
64
75
  <BucketName>${bucketName}</BucketName>
65
- </Error>`));
66
- if (bucketName.includes("access-denied-bucket")) return res(ctx.status(403), ctx.xml(`<?xml version="1.0" encoding="UTF-8"?>
76
+ </Error>`, {
77
+ status: 404
78
+ });
79
+ if (bucketName.includes('access-denied-bucket')) return HttpResponse.xml(`<?xml version="1.0" encoding="UTF-8"?>
67
80
  <Error>
68
81
  <Code>AccessDenied</Code>
69
82
  <Message>Access Denied</Message>
70
- </Error>`));
71
- if (bucketName.includes("network-error-bucket")) return res.networkError("Network connection failed");
72
- if (bucketName.includes("enabled-versioning-bucket")) return res(ctx.status(200), ctx.xml(`<?xml version="1.0" encoding="UTF-8"?>
83
+ </Error>`, {
84
+ status: 403
85
+ });
86
+ if (bucketName.includes('network-error-bucket')) return HttpResponse.error();
87
+ if (bucketName.includes('enabled-versioning-bucket')) return HttpResponse.xml(`<?xml version="1.0" encoding="UTF-8"?>
73
88
  <VersioningConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
74
89
  <Status>Enabled</Status>
75
90
  <MfaDelete>Disabled</MfaDelete>
76
- </VersioningConfiguration>`));
77
- if (bucketName.includes("suspended-versioning-bucket")) return res(ctx.status(200), ctx.xml(`<?xml version="1.0" encoding="UTF-8"?>
91
+ </VersioningConfiguration>`, {
92
+ status: 200
93
+ });
94
+ if (bucketName.includes('suspended-versioning-bucket')) return HttpResponse.xml(`<?xml version="1.0" encoding="UTF-8"?>
78
95
  <VersioningConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
79
96
  <Status>Suspended</Status>
80
97
  <MfaDelete>Disabled</MfaDelete>
81
- </VersioningConfiguration>`));
82
- if (bucketName.includes("mfa-enabled-bucket")) return res(ctx.status(200), ctx.xml(`<?xml version="1.0" encoding="UTF-8"?>
98
+ </VersioningConfiguration>`, {
99
+ status: 200
100
+ });
101
+ if (bucketName.includes('mfa-enabled-bucket')) return HttpResponse.xml(`<?xml version="1.0" encoding="UTF-8"?>
83
102
  <VersioningConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
84
103
  <Status>Enabled</Status>
85
104
  <MfaDelete>Enabled</MfaDelete>
86
- </VersioningConfiguration>`));
105
+ </VersioningConfiguration>`, {
106
+ status: 200
107
+ });
87
108
  }
88
- return res(ctx.status(200), ctx.xml(`<?xml version="1.0" encoding="UTF-8"?>
109
+ return HttpResponse.xml(`<?xml version="1.0" encoding="UTF-8"?>
89
110
  <VersioningConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
90
- </VersioningConfiguration>`));
111
+ </VersioningConfiguration>`, {
112
+ status: 200
113
+ });
91
114
  });
92
115
  const s3Handlers = [
93
116
  listBucketsHandler,
@@ -1,2 +1,2 @@
1
- export { server, setupMswServer, overrideHandlers } from "./server";
2
- export { s3Handlers, createBucketHandler, getBucketVersioningHandler, } from "./handlers";
1
+ export { server, setupMswServer, overrideHandlers } from './server';
2
+ export { s3Handlers, createBucketHandler, getBucketVersioningHandler, } from './handlers';
@@ -1,4 +1,4 @@
1
1
  export declare const server: import("msw/node").SetupServerApi;
2
2
  export declare const setupMswServer: () => void;
3
3
  export declare const overrideHandlers: (...handlers: Parameters<typeof server.use>) => void;
4
- export { s3Handlers } from "./handlers";
4
+ export { s3Handlers } from './handlers';
@@ -4,7 +4,7 @@ const server = setupServer(...s3Handlers);
4
4
  const setupMswServer = ()=>{
5
5
  beforeAll(()=>{
6
6
  server.listen({
7
- onUnhandledRequest: "warn"
7
+ onUnhandledRequest: 'warn'
8
8
  });
9
9
  });
10
10
  afterEach(()=>{
@@ -1,6 +1,6 @@
1
- const getS3BaseUrl = ()=>"https://s3.amazonaws.com";
1
+ const getS3BaseUrl = ()=>'https://s3.amazonaws.com';
2
2
  const createS3ErrorXml = (code, message, bucketName, key)=>{
3
- let resourceDetails = "";
3
+ let resourceDetails = '';
4
4
  if (bucketName) resourceDetails += `<BucketName>${bucketName}</BucketName>`;
5
5
  if (key) resourceDetails += `<Key>${key}</Key>`;
6
6
  return `<?xml version="1.0" encoding="UTF-8"?>
@@ -1 +1 @@
1
- import "@testing-library/jest-dom";
1
+ import '@testing-library/jest-dom';
@@ -11,20 +11,20 @@ var __webpack_require__ = {};
11
11
  }
12
12
  })();
13
13
  })();
14
- process.env.AWS_ACCESS_KEY_ID = "test-access-key";
15
- process.env.AWS_SECRET_ACCESS_KEY = "test-secret-key";
16
- process.env.AWS_DEFAULT_REGION = "us-east-1";
14
+ process.env.AWS_ACCESS_KEY_ID = 'test-access-key';
15
+ process.env.AWS_SECRET_ACCESS_KEY = 'test-secret-key';
16
+ process.env.AWS_DEFAULT_REGION = 'us-east-1';
17
17
  const testS3Config = {
18
- endpoint: "http://localhost:8000",
19
- region: "us-east-1",
20
- realHost: "s3.amazonaws.com",
18
+ endpoint: 'http://localhost:8000',
19
+ region: 'us-east-1',
20
+ realHost: 's3.amazonaws.com',
21
21
  forcePathStyle: true
22
22
  };
23
23
  const testDevConfig = {
24
24
  useProxy: false,
25
- proxyEndpoint: "http://localhost:3000/api/s3",
26
- proxyBasePath: "/api/s3",
27
- proxyHost: "localhost",
25
+ proxyEndpoint: 'http://localhost:3000/api/s3',
26
+ proxyBasePath: '/api/s3',
27
+ proxyHost: 'localhost',
28
28
  proxyPort: 3000
29
29
  };
30
30
  globalThis.__S3_CONFIG__ = testS3Config;
@@ -36,17 +36,17 @@ Object.assign(__webpack_require__.g, {
36
36
  TextDecoder: TextDecoder,
37
37
  TextEncoder: TextEncoder
38
38
  });
39
- Object.defineProperty(HTMLCanvasElement.prototype, "getContext", {
39
+ Object.defineProperty(HTMLCanvasElement.prototype, 'getContext', {
40
40
  value: ()=>null
41
41
  });
42
- jest.mock("pretty-bytes", ()=>({
42
+ jest.mock('pretty-bytes', ()=>({
43
43
  __esModule: true,
44
44
  default: (bytes)=>{
45
45
  const sizes = [
46
- "B",
47
- "KB",
48
- "MB",
49
- "GB"
46
+ 'B',
47
+ 'KB',
48
+ 'MB',
49
+ 'GB'
50
50
  ];
51
51
  let i = 0;
52
52
  let num = bytes;
@@ -57,8 +57,8 @@ jest.mock("pretty-bytes", ()=>({
57
57
  return `${Math.round(num)} ${sizes[i]}`;
58
58
  }
59
59
  }));
60
- jest.mock("joi", ()=>{
61
- const Joi = jest.requireActual("joi");
60
+ jest.mock('joi', ()=>{
61
+ const Joi = jest.requireActual('joi');
62
62
  return {
63
63
  __esModule: true,
64
64
  default: Joi,
@@ -76,11 +76,11 @@ const originalError = console.error;
76
76
  const originalWarn = console.warn;
77
77
  beforeAll(()=>{
78
78
  console.error = (...args)=>{
79
- if ("string" == typeof args[0] && (args[0].includes("AWS") || args[0].includes("S3") || args[0].includes("Warning: An update to") || args[0].includes('Warning: A props object containing a "key" prop'))) return;
79
+ if ('string' == typeof args[0] && (args[0].includes('AWS') || args[0].includes('S3') || args[0].includes('Warning: An update to') || args[0].includes('Warning: A props object containing a "key" prop'))) return;
80
80
  originalError(...args);
81
81
  };
82
82
  console.warn = (...args)=>{
83
- if ("string" == typeof args[0] && (args[0].includes("AWS") || args[0].includes("S3") || args[0].includes("Warning: An update to") || args[0].includes('Warning: A props object containing a "key" prop'))) return;
83
+ if ('string' == typeof args[0] && (args[0].includes('AWS') || args[0].includes('S3') || args[0].includes('Warning: An update to') || args[0].includes('Warning: A props object containing a "key" prop'))) return;
84
84
  originalWarn(...args);
85
85
  };
86
86
  });
@@ -10,11 +10,11 @@
10
10
  * - Factory pattern validation utilities
11
11
  * - Form testing helpers
12
12
  */
13
- import React from "react";
14
- import { S3Client, PutObjectCommand } from "@aws-sdk/client-s3";
15
- import { UseQueryResult } from "@tanstack/react-query";
16
- import { S3BrowserConfig, S3Credentials } from "../types";
17
- import type { S3Configuration, DevelopmentConfiguration } from "../config/types";
13
+ import React from 'react';
14
+ import { S3Client, PutObjectCommand } from '@aws-sdk/client-s3';
15
+ import { UseQueryResult } from '@tanstack/react-query';
16
+ import { S3BrowserConfig, S3Credentials } from '../types';
17
+ import type { S3Configuration, DevelopmentConfiguration } from '../config/types';
18
18
  /**
19
19
  * Default S3 configuration for tests
20
20
  */
@@ -46,12 +46,6 @@ export declare const setupCommonMocks: () => void;
46
46
  * @param height - The mock height in pixels
47
47
  */
48
48
  export declare function mockOffsetSize(width: number, height: number): void;
49
- /**
50
- * Creates a simple QueryClient wrapper for tests that don't need DataBrowser context
51
- */
52
- export declare const createQueryWrapper: () => ({ children }: {
53
- children: React.ReactNode;
54
- }) => import("react/jsx-runtime").JSX.Element;
55
49
  /**
56
50
  * Creates a test wrapper with DataBrowser context and QueryClient
57
51
  */
@@ -178,10 +172,10 @@ export declare const mockSuccessSubmit: (mockMutate: jest.Mock) => void;
178
172
  * @param errorMessage - The error message to return (default: "Network Error")
179
173
  */
180
174
  export declare const mockErrorSubmit: (mockMutate: jest.Mock, errorMessage?: string) => void;
181
- import type { GetBucketAclCommandOutput, GetBucketCorsCommandOutput, GetBucketLifecycleConfigurationCommandOutput, GetBucketLocationCommandOutput, GetObjectLockConfigurationCommandOutput, GetBucketPolicyCommandOutput, GetBucketReplicationCommandOutput, GetBucketTaggingCommandOutput, GetBucketVersioningCommandOutput } from "@aws-sdk/client-s3";
175
+ import type { GetBucketAclCommandOutput, GetBucketCorsCommandOutput, GetBucketLifecycleConfigurationCommandOutput, GetBucketLocationCommandOutput, GetObjectLockConfigurationCommandOutput, GetBucketPolicyCommandOutput, GetBucketReplicationCommandOutput, GetBucketTaggingCommandOutput, GetBucketVersioningCommandOutput } from '@aws-sdk/client-s3';
182
176
  export type MockQueryResult<T> = {
183
177
  data: T | undefined;
184
- status: "idle" | "pending" | "success" | "error";
178
+ status: 'idle' | 'pending' | 'success' | 'error';
185
179
  error?: Error | null;
186
180
  };
187
181
  export type ISVBucketStatusMock = {
@@ -190,7 +184,7 @@ export type ISVBucketStatusMock = {
190
184
  isISVManaged: boolean;
191
185
  isvApplication: string | undefined;
192
186
  isLoading: boolean;
193
- bucketTagsStatus: "idle" | "pending" | "success" | "error";
187
+ bucketTagsStatus: 'idle' | 'pending' | 'success' | 'error';
194
188
  };
195
189
  export interface BucketMockData {
196
190
  versioning: MockQueryResult<GetBucketVersioningCommandOutput>;
@@ -242,4 +236,4 @@ export declare const applyBucketMocks: (mocks: {
242
236
  useISVBucketStatus: jest.Mock;
243
237
  useFeatures: jest.Mock;
244
238
  }, mockData?: Partial<BucketMockData>) => void;
245
- export { setupMswServer, overrideHandlers } from "./msw";
239
+ export { setupMswServer, overrideHandlers } from './msw';