@aws-amplify/storage 6.0.28 → 6.0.29-gen2-storage.e54bfa9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (194) hide show
  1. package/dist/cjs/errors/types/validation.js +22 -2
  2. package/dist/cjs/errors/types/validation.js.map +1 -1
  3. package/dist/cjs/providers/s3/apis/copy.js +2 -12
  4. package/dist/cjs/providers/s3/apis/copy.js.map +1 -1
  5. package/dist/cjs/providers/s3/apis/downloadData.js +13 -38
  6. package/dist/cjs/providers/s3/apis/downloadData.js.map +1 -1
  7. package/dist/cjs/providers/s3/apis/getProperties.js +2 -11
  8. package/dist/cjs/providers/s3/apis/getProperties.js.map +1 -1
  9. package/dist/cjs/providers/s3/apis/getUrl.js +2 -18
  10. package/dist/cjs/providers/s3/apis/getUrl.js.map +1 -1
  11. package/dist/cjs/providers/s3/apis/internal/copy.js +41 -7
  12. package/dist/cjs/providers/s3/apis/internal/copy.js.map +1 -1
  13. package/dist/cjs/providers/s3/apis/internal/getProperties.js +10 -6
  14. package/dist/cjs/providers/s3/apis/internal/getProperties.js.map +1 -1
  15. package/dist/cjs/providers/s3/apis/internal/getUrl.js +8 -6
  16. package/dist/cjs/providers/s3/apis/internal/getUrl.js.map +1 -1
  17. package/dist/cjs/providers/s3/apis/internal/list.js +86 -16
  18. package/dist/cjs/providers/s3/apis/internal/list.js.map +1 -1
  19. package/dist/cjs/providers/s3/apis/internal/remove.js +20 -7
  20. package/dist/cjs/providers/s3/apis/internal/remove.js.map +1 -1
  21. package/dist/cjs/providers/s3/apis/list.js +4 -4
  22. package/dist/cjs/providers/s3/apis/list.js.map +1 -1
  23. package/dist/cjs/providers/s3/apis/remove.js +2 -9
  24. package/dist/cjs/providers/s3/apis/remove.js.map +1 -1
  25. package/dist/cjs/providers/s3/apis/server/copy.js +4 -4
  26. package/dist/cjs/providers/s3/apis/server/copy.js.map +1 -1
  27. package/dist/cjs/providers/s3/apis/server/getProperties.js +2 -2
  28. package/dist/cjs/providers/s3/apis/server/getProperties.js.map +1 -1
  29. package/dist/cjs/providers/s3/apis/server/getUrl.js +2 -2
  30. package/dist/cjs/providers/s3/apis/server/getUrl.js.map +1 -1
  31. package/dist/cjs/providers/s3/apis/server/list.js +4 -4
  32. package/dist/cjs/providers/s3/apis/server/list.js.map +1 -1
  33. package/dist/cjs/providers/s3/apis/server/remove.js +2 -2
  34. package/dist/cjs/providers/s3/apis/server/remove.js.map +1 -1
  35. package/dist/cjs/providers/s3/apis/uploadData/index.js +4 -50
  36. package/dist/cjs/providers/s3/apis/uploadData/index.js.map +1 -1
  37. package/dist/cjs/providers/s3/apis/uploadData/multipart/initialUpload.js +1 -1
  38. package/dist/cjs/providers/s3/apis/uploadData/multipart/initialUpload.js.map +1 -1
  39. package/dist/cjs/providers/s3/apis/uploadData/multipart/uploadCache.js +8 -1
  40. package/dist/cjs/providers/s3/apis/uploadData/multipart/uploadCache.js.map +1 -1
  41. package/dist/cjs/providers/s3/apis/uploadData/multipart/uploadHandlers.js +28 -13
  42. package/dist/cjs/providers/s3/apis/uploadData/multipart/uploadHandlers.js.map +1 -1
  43. package/dist/cjs/providers/s3/apis/uploadData/putObjectJob.js +10 -5
  44. package/dist/cjs/providers/s3/apis/uploadData/putObjectJob.js.map +1 -1
  45. package/dist/cjs/providers/s3/utils/client/utils/parsePayload.js +1 -1
  46. package/dist/cjs/providers/s3/utils/client/utils/parsePayload.js.map +1 -1
  47. package/dist/cjs/providers/s3/utils/constants.js +4 -1
  48. package/dist/cjs/providers/s3/utils/constants.js.map +1 -1
  49. package/dist/cjs/providers/s3/utils/index.js +7 -1
  50. package/dist/cjs/providers/s3/utils/index.js.map +1 -1
  51. package/dist/cjs/providers/s3/utils/isInputWithPath.js +11 -0
  52. package/dist/cjs/providers/s3/utils/isInputWithPath.js.map +1 -0
  53. package/dist/cjs/providers/s3/utils/resolveS3ConfigAndInput.js +2 -1
  54. package/dist/cjs/providers/s3/utils/resolveS3ConfigAndInput.js.map +1 -1
  55. package/dist/cjs/providers/s3/utils/validateStorageOperationInput.js +31 -0
  56. package/dist/cjs/providers/s3/utils/validateStorageOperationInput.js.map +1 -0
  57. package/dist/cjs/providers/s3/utils/validateStorageOperationInputWithPrefix.js +32 -0
  58. package/dist/cjs/providers/s3/utils/validateStorageOperationInputWithPrefix.js.map +1 -0
  59. package/dist/esm/errors/types/validation.d.ts +7 -2
  60. package/dist/esm/errors/types/validation.mjs +22 -2
  61. package/dist/esm/errors/types/validation.mjs.map +1 -1
  62. package/dist/esm/index.d.ts +2 -2
  63. package/dist/esm/providers/s3/apis/copy.d.ts +22 -9
  64. package/dist/esm/providers/s3/apis/copy.mjs +2 -12
  65. package/dist/esm/providers/s3/apis/copy.mjs.map +1 -1
  66. package/dist/esm/providers/s3/apis/downloadData.d.ts +41 -7
  67. package/dist/esm/providers/s3/apis/downloadData.mjs +15 -39
  68. package/dist/esm/providers/s3/apis/downloadData.mjs.map +1 -1
  69. package/dist/esm/providers/s3/apis/getProperties.d.ts +18 -5
  70. package/dist/esm/providers/s3/apis/getProperties.mjs +2 -11
  71. package/dist/esm/providers/s3/apis/getProperties.mjs.map +1 -1
  72. package/dist/esm/providers/s3/apis/getUrl.d.ts +27 -7
  73. package/dist/esm/providers/s3/apis/getUrl.mjs +2 -18
  74. package/dist/esm/providers/s3/apis/getUrl.mjs.map +1 -1
  75. package/dist/esm/providers/s3/apis/internal/copy.d.ts +4 -2
  76. package/dist/esm/providers/s3/apis/internal/copy.mjs +41 -6
  77. package/dist/esm/providers/s3/apis/internal/copy.mjs.map +1 -1
  78. package/dist/esm/providers/s3/apis/internal/getProperties.d.ts +2 -2
  79. package/dist/esm/providers/s3/apis/internal/getProperties.mjs +11 -6
  80. package/dist/esm/providers/s3/apis/internal/getProperties.mjs.map +1 -1
  81. package/dist/esm/providers/s3/apis/internal/getUrl.d.ts +2 -2
  82. package/dist/esm/providers/s3/apis/internal/getUrl.mjs +10 -7
  83. package/dist/esm/providers/s3/apis/internal/getUrl.mjs.map +1 -1
  84. package/dist/esm/providers/s3/apis/internal/list.d.ts +2 -2
  85. package/dist/esm/providers/s3/apis/internal/list.mjs +87 -16
  86. package/dist/esm/providers/s3/apis/internal/list.mjs.map +1 -1
  87. package/dist/esm/providers/s3/apis/internal/remove.d.ts +2 -2
  88. package/dist/esm/providers/s3/apis/internal/remove.mjs +21 -7
  89. package/dist/esm/providers/s3/apis/internal/remove.mjs.map +1 -1
  90. package/dist/esm/providers/s3/apis/list.d.ts +39 -22
  91. package/dist/esm/providers/s3/apis/list.mjs +2 -2
  92. package/dist/esm/providers/s3/apis/list.mjs.map +1 -1
  93. package/dist/esm/providers/s3/apis/remove.d.ts +18 -5
  94. package/dist/esm/providers/s3/apis/remove.mjs +2 -9
  95. package/dist/esm/providers/s3/apis/remove.mjs.map +1 -1
  96. package/dist/esm/providers/s3/apis/server/copy.d.ts +27 -2
  97. package/dist/esm/providers/s3/apis/server/copy.mjs +2 -2
  98. package/dist/esm/providers/s3/apis/server/copy.mjs.map +1 -1
  99. package/dist/esm/providers/s3/apis/server/getProperties.d.ts +26 -2
  100. package/dist/esm/providers/s3/apis/server/getProperties.mjs +2 -2
  101. package/dist/esm/providers/s3/apis/server/getProperties.mjs.map +1 -1
  102. package/dist/esm/providers/s3/apis/server/getUrl.d.ts +40 -2
  103. package/dist/esm/providers/s3/apis/server/getUrl.mjs +2 -2
  104. package/dist/esm/providers/s3/apis/server/getUrl.mjs.map +1 -1
  105. package/dist/esm/providers/s3/apis/server/list.d.ts +41 -22
  106. package/dist/esm/providers/s3/apis/server/list.mjs +2 -2
  107. package/dist/esm/providers/s3/apis/server/list.mjs.map +1 -1
  108. package/dist/esm/providers/s3/apis/server/remove.d.ts +24 -2
  109. package/dist/esm/providers/s3/apis/server/remove.mjs +2 -2
  110. package/dist/esm/providers/s3/apis/server/remove.mjs.map +1 -1
  111. package/dist/esm/providers/s3/apis/uploadData/index.d.ts +64 -7
  112. package/dist/esm/providers/s3/apis/uploadData/index.mjs +4 -50
  113. package/dist/esm/providers/s3/apis/uploadData/index.mjs.map +1 -1
  114. package/dist/esm/providers/s3/apis/uploadData/multipart/initialUpload.d.ts +2 -2
  115. package/dist/esm/providers/s3/apis/uploadData/multipart/initialUpload.mjs +1 -1
  116. package/dist/esm/providers/s3/apis/uploadData/multipart/initialUpload.mjs.map +1 -1
  117. package/dist/esm/providers/s3/apis/uploadData/multipart/uploadCache.d.ts +1 -1
  118. package/dist/esm/providers/s3/apis/uploadData/multipart/uploadCache.mjs +8 -1
  119. package/dist/esm/providers/s3/apis/uploadData/multipart/uploadCache.mjs.map +1 -1
  120. package/dist/esm/providers/s3/apis/uploadData/multipart/uploadHandlers.d.ts +4 -4
  121. package/dist/esm/providers/s3/apis/uploadData/multipart/uploadHandlers.mjs +30 -14
  122. package/dist/esm/providers/s3/apis/uploadData/multipart/uploadHandlers.mjs.map +1 -1
  123. package/dist/esm/providers/s3/apis/uploadData/putObjectJob.d.ts +3 -3
  124. package/dist/esm/providers/s3/apis/uploadData/putObjectJob.mjs +11 -5
  125. package/dist/esm/providers/s3/apis/uploadData/putObjectJob.mjs.map +1 -1
  126. package/dist/esm/providers/s3/index.d.ts +2 -2
  127. package/dist/esm/providers/s3/types/index.d.ts +3 -3
  128. package/dist/esm/providers/s3/types/inputs.d.ts +51 -11
  129. package/dist/esm/providers/s3/types/options.d.ts +41 -10
  130. package/dist/esm/providers/s3/types/outputs.d.ts +68 -13
  131. package/dist/esm/providers/s3/utils/client/utils/parsePayload.mjs +1 -1
  132. package/dist/esm/providers/s3/utils/client/utils/parsePayload.mjs.map +1 -1
  133. package/dist/esm/providers/s3/utils/constants.d.ts +3 -0
  134. package/dist/esm/providers/s3/utils/constants.mjs +4 -1
  135. package/dist/esm/providers/s3/utils/constants.mjs.map +1 -1
  136. package/dist/esm/providers/s3/utils/index.d.ts +3 -0
  137. package/dist/esm/providers/s3/utils/index.mjs +3 -0
  138. package/dist/esm/providers/s3/utils/index.mjs.map +1 -1
  139. package/dist/esm/providers/s3/utils/isInputWithPath.d.ts +2 -0
  140. package/dist/esm/providers/s3/utils/isInputWithPath.mjs +8 -0
  141. package/dist/esm/providers/s3/utils/isInputWithPath.mjs.map +1 -0
  142. package/dist/esm/providers/s3/utils/resolveS3ConfigAndInput.d.ts +2 -1
  143. package/dist/esm/providers/s3/utils/resolveS3ConfigAndInput.mjs +2 -1
  144. package/dist/esm/providers/s3/utils/resolveS3ConfigAndInput.mjs.map +1 -1
  145. package/dist/esm/providers/s3/utils/validateStorageOperationInput.d.ts +5 -0
  146. package/dist/esm/providers/s3/utils/validateStorageOperationInput.mjs +29 -0
  147. package/dist/esm/providers/s3/utils/validateStorageOperationInput.mjs.map +1 -0
  148. package/dist/esm/providers/s3/utils/validateStorageOperationInputWithPrefix.d.ts +5 -0
  149. package/dist/esm/providers/s3/utils/validateStorageOperationInputWithPrefix.mjs +30 -0
  150. package/dist/esm/providers/s3/utils/validateStorageOperationInputWithPrefix.mjs.map +1 -0
  151. package/dist/esm/types/index.d.ts +2 -2
  152. package/dist/esm/types/inputs.d.ts +41 -13
  153. package/dist/esm/types/options.d.ts +1 -0
  154. package/dist/esm/types/outputs.d.ts +26 -6
  155. package/package.json +107 -107
  156. package/src/errors/types/validation.ts +23 -2
  157. package/src/index.ts +16 -0
  158. package/src/providers/s3/apis/copy.ts +30 -11
  159. package/src/providers/s3/apis/downloadData.ts +78 -19
  160. package/src/providers/s3/apis/getProperties.ts +31 -8
  161. package/src/providers/s3/apis/getUrl.ts +37 -10
  162. package/src/providers/s3/apis/internal/copy.ts +89 -8
  163. package/src/providers/s3/apis/internal/getProperties.ts +27 -12
  164. package/src/providers/s3/apis/internal/getUrl.ts +28 -14
  165. package/src/providers/s3/apis/internal/list.ts +135 -29
  166. package/src/providers/s3/apis/internal/remove.ts +36 -13
  167. package/src/providers/s3/apis/list.ts +54 -26
  168. package/src/providers/s3/apis/remove.ts +28 -7
  169. package/src/providers/s3/apis/server/copy.ts +42 -5
  170. package/src/providers/s3/apis/server/getProperties.ts +41 -4
  171. package/src/providers/s3/apis/server/getUrl.ts +55 -4
  172. package/src/providers/s3/apis/server/list.ts +64 -32
  173. package/src/providers/s3/apis/server/remove.ts +39 -4
  174. package/src/providers/s3/apis/uploadData/index.ts +77 -8
  175. package/src/providers/s3/apis/uploadData/multipart/initialUpload.ts +4 -3
  176. package/src/providers/s3/apis/uploadData/multipart/uploadCache.ts +11 -2
  177. package/src/providers/s3/apis/uploadData/multipart/uploadHandlers.ts +50 -20
  178. package/src/providers/s3/apis/uploadData/putObjectJob.ts +23 -9
  179. package/src/providers/s3/index.ts +16 -0
  180. package/src/providers/s3/types/index.ts +37 -14
  181. package/src/providers/s3/types/inputs.ts +95 -26
  182. package/src/providers/s3/types/options.ts +73 -27
  183. package/src/providers/s3/types/outputs.ts +80 -13
  184. package/src/providers/s3/utils/client/utils/parsePayload.ts +1 -1
  185. package/src/providers/s3/utils/constants.ts +4 -0
  186. package/src/providers/s3/utils/index.ts +3 -0
  187. package/src/providers/s3/utils/isInputWithPath.ts +13 -0
  188. package/src/providers/s3/utils/resolveS3ConfigAndInput.ts +3 -2
  189. package/src/providers/s3/utils/validateStorageOperationInput.ts +39 -0
  190. package/src/providers/s3/utils/validateStorageOperationInputWithPrefix.ts +46 -0
  191. package/src/types/index.ts +16 -8
  192. package/src/types/inputs.ts +73 -20
  193. package/src/types/options.ts +1 -0
  194. package/src/types/outputs.ts +29 -6
@@ -1,6 +1,5 @@
1
1
  // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
2
  // SPDX-License-Identifier: Apache-2.0
3
-
4
3
  import {
5
4
  AmplifyServer,
6
5
  getAmplifyServerContext,
@@ -9,45 +8,78 @@ import {
9
8
  import {
10
9
  ListAllInput,
11
10
  ListAllOutput,
11
+ ListAllWithPathInput,
12
+ ListAllWithPathOutput,
12
13
  ListPaginateInput,
13
14
  ListPaginateOutput,
14
- S3Exception,
15
+ ListPaginateWithPathInput,
16
+ ListPaginateWithPathOutput,
15
17
  } from '../../types';
16
18
  import { list as listInternal } from '../internal/list';
17
- import { StorageValidationErrorCode } from '../../../../errors/types/validation';
18
19
 
19
- interface ListApi {
20
- /**
21
- * Lists bucket objects with pagination.
22
- * @param {ListPaginateInput} input The input object
23
- * @return {Promise<ListPaginateOutput>} - Promise resolves to list of keys and metadata with
24
- * pageSize defaulting to 1000. Additionally the result will include a nextToken if there are more items to retrieve
25
- * @throws service: {@link S3Exception} - S3 service errors thrown when checking for existence of bucket
26
- * @throws validation: {@link StorageValidationErrorCode } - thrown when there are issues with credentials
27
- */
28
- (
29
- contextSpec: AmplifyServer.ContextSpec,
30
- input?: ListPaginateInput,
31
- ): Promise<ListPaginateOutput>;
32
- /**
33
- * Lists all bucket objects.
34
- * @param {ListAllInput} input The input object
35
- * @return {Promise<ListAllOutput>} - Promise resolves to list of keys and metadata for all objects in path
36
- * @throws service: {@link S3Exception} - S3 service errors thrown when checking for existence of bucket
37
- * @throws validation: {@link StorageValidationErrorCode } - thrown when there are issues with credentials
38
- */
39
- (
40
- contextSpec: AmplifyServer.ContextSpec,
41
- input?: ListAllInput,
42
- ): Promise<ListAllOutput>;
43
- }
20
+ /**
21
+ * List files in pages with the given `path`.
22
+ * `pageSize` is defaulted to 1000. Additionally, the result will include a `nextToken` if there are more items to retrieve.
23
+ * @param input - The `ListPaginateWithPathInput` object.
24
+ * @param contextSpec - The context spec used to get the Amplify server context.
25
+ * @returns A list of objects with path and metadata
26
+ * @throws service: `S3Exception` - S3 service errors thrown when checking for existence of bucket
27
+ * @throws validation: `StorageValidationErrorCode` - thrown when there are issues with credentials
28
+ */
29
+ export function list(
30
+ contextSpec: AmplifyServer.ContextSpec,
31
+ input: ListPaginateWithPathInput,
32
+ ): Promise<ListPaginateWithPathOutput>;
33
+ /**
34
+ * List all files from S3 for a given `path`. You can set `listAll` to true in `options` to get all the files from S3.
35
+ * @param input - The `ListAllWithPathInput` object.
36
+ * @param contextSpec - The context spec used to get the Amplify server context.
37
+ * @returns A list of all objects with path and metadata
38
+ * @throws service: `S3Exception` - S3 service errors thrown when checking for existence of bucket
39
+ * @throws validation: `StorageValidationErrorCode` - thrown when there are issues with credentials
40
+ */
41
+ export function list(
42
+ contextSpec: AmplifyServer.ContextSpec,
43
+ input: ListAllWithPathInput,
44
+ ): Promise<ListAllWithPathOutput>;
45
+ /**
46
+ * @deprecated The `prefix` and `accessLevel` parameters are deprecated and may be removed in the next major version.
47
+ * Please use {@link https://docs.amplify.aws/react/build-a-backend/storage/list | path} instead.
48
+ * List files in pages with the given `prefix`.
49
+ * `pageSize` is defaulted to 1000. Additionally, the result will include a `nextToken` if there are more items to retrieve.
50
+ * @param input - The `ListPaginateInput` object.
51
+ * @returns A list of objects with key and metadata
52
+ * @throws service: `S3Exception` - S3 service errors thrown when checking for existence of bucket
53
+ * @throws validation: `StorageValidationErrorCode` - thrown when there are issues with credentials
54
+ */
55
+ export function list(
56
+ contextSpec: AmplifyServer.ContextSpec,
57
+ input?: ListPaginateInput,
58
+ ): Promise<ListPaginateOutput>;
59
+ /**
60
+ * @deprecated The `prefix` and `accessLevel` parameters are deprecated and may be removed in the next major version.
61
+ * Please use {@link https://docs.amplify.aws/react/build-a-backend/storage/list | path} instead.
62
+ * List all files from S3 for a given `prefix`. You can set `listAll` to true in `options` to get all the files from S3.
63
+ * @param input - The `ListAllInput` object.
64
+ * @returns A list of all objects with key and metadata
65
+ * @throws service: `S3Exception` - S3 service errors thrown when checking for existence of bucket
66
+ * @throws validation: `StorageValidationErrorCode` - thrown when there are issues with credentials
67
+ */
68
+ export function list(
69
+ contextSpec: AmplifyServer.ContextSpec,
70
+ input?: ListAllInput,
71
+ ): Promise<ListAllOutput>;
44
72
 
45
- export const list: ListApi = (
73
+ export function list(
46
74
  contextSpec: AmplifyServer.ContextSpec,
47
- input?: ListAllInput | ListPaginateInput,
48
- ): Promise<ListAllOutput | ListPaginateOutput> => {
75
+ input?:
76
+ | ListAllInput
77
+ | ListPaginateInput
78
+ | ListAllWithPathInput
79
+ | ListPaginateWithPathInput,
80
+ ) {
49
81
  return listInternal(
50
82
  getAmplifyServerContext(contextSpec).amplify,
51
83
  input ?? {},
52
84
  );
53
- };
85
+ }
@@ -6,12 +6,47 @@ import {
6
6
  getAmplifyServerContext,
7
7
  } from '@aws-amplify/core/internals/adapter-core';
8
8
 
9
- import { RemoveInput, RemoveOutput } from '../../types';
9
+ import {
10
+ RemoveInput,
11
+ RemoveOutput,
12
+ RemoveWithPathInput,
13
+ RemoveWithPathOutput,
14
+ } from '../../types';
10
15
  import { remove as removeInternal } from '../internal/remove';
11
16
 
12
- export const remove = (
17
+ /**
18
+ * Remove a file from your S3 bucket.
19
+ * @param input - The `RemoveWithPathInput` object.
20
+ * @param contextSpec - The context spec used to get the Amplify server context.
21
+ * @return Output containing the removed object path.
22
+ * @throws service: `S3Exception` - S3 service errors thrown while while removing the object.
23
+ * @throws validation: `StorageValidationErrorCode` - Validation errors thrown
24
+ * when there is no path or path is empty or path has a leading slash.
25
+ */
26
+ export function remove(
27
+ contextSpec: AmplifyServer.ContextSpec,
28
+ input: RemoveWithPathInput,
29
+ ): Promise<RemoveWithPathOutput>;
30
+ /**
31
+ * @deprecated The `key` and `accessLevel` parameters are deprecated and may be removed in the next major version.
32
+ * Please use {@link https://docs.amplify.aws/react/build-a-backend/storage/remove | path} instead.
33
+ *
34
+ * Remove a file from your S3 bucket.
35
+ * @param input - The `RemoveInput` object.
36
+ * @param contextSpec - The context spec used to get the Amplify server context.
37
+ * @return Output containing the removed object key
38
+ * @throws service: `S3Exception` - S3 service errors thrown while while removing the object
39
+ * @throws validation: `StorageValidationErrorCode` - Validation errors thrown
40
+ * when there is no key or its empty.
41
+ */
42
+ export function remove(
13
43
  contextSpec: AmplifyServer.ContextSpec,
14
44
  input: RemoveInput,
15
- ): Promise<RemoveOutput> => {
45
+ ): Promise<RemoveOutput>;
46
+
47
+ export function remove(
48
+ contextSpec: AmplifyServer.ContextSpec,
49
+ input: RemoveInput | RemoveWithPathInput,
50
+ ) {
16
51
  return removeInternal(getAmplifyServerContext(contextSpec).amplify, input);
17
- };
52
+ }
@@ -1,7 +1,12 @@
1
1
  // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
2
  // SPDX-License-Identifier: Apache-2.0
3
3
 
4
- import { S3Exception, UploadDataInput, UploadDataOutput } from '../../types';
4
+ import {
5
+ UploadDataInput,
6
+ UploadDataOutput,
7
+ UploadDataWithPathInput,
8
+ UploadDataWithPathOutput,
9
+ } from '../../types';
5
10
  import { createUploadTask } from '../../utils';
6
11
  import { assertValidationError } from '../../../../errors/utils/assertValidationError';
7
12
  import { StorageValidationErrorCode } from '../../../../errors/types/validation';
@@ -12,18 +17,77 @@ import { putObjectJob } from './putObjectJob';
12
17
  import { getMultipartUploadHandlers } from './multipart';
13
18
 
14
19
  /**
15
- * Upload data to specified S3 object. By default, it uses single PUT operation to upload if the data is less than 5MB.
16
- * Otherwise, it uses multipart upload to upload the data. If the data length is unknown, it uses multipart upload.
20
+ * Upload data to the specified S3 object path. By default uses single PUT operation to upload if the payload is less than 5MB.
21
+ * Otherwise, uses multipart upload to upload the payload. If the payload length cannot be determined, uses multipart upload.
17
22
  *
18
23
  * Limitations:
19
24
  * * Maximum object size is 5TB.
20
25
  * * Maximum object size if the size cannot be determined before upload is 50GB.
21
26
  *
22
- * @param input - The UploadDataInput object.
27
+ * @throws Service: `S3Exception` thrown when checking for existence of the object.
28
+ * @throws Validation: `StorageValidationErrorCode` thrown when a validation error occurs.
29
+ *
30
+ * @param input - A `UploadDataWithPathInput` object.
31
+ *
23
32
  * @returns A cancelable and resumable task exposing result promise from `result`
24
33
  * property.
25
- * @throws service: {@link S3Exception} - thrown when checking for existence of the object
26
- * @throws validation: {@link StorageValidationErrorCode } - Validation errors.
34
+ *
35
+ * @example
36
+ * ```ts
37
+ * // Upload a file to s3 bucket
38
+ * await uploadData({ path, data: file, options: {
39
+ * onProgress, // Optional progress callback.
40
+ * } }).result;
41
+ * ```
42
+ *
43
+ * @example
44
+ * ```ts
45
+ * // Cancel a task
46
+ * const uploadTask = uploadData({ path, data: file });
47
+ * //...
48
+ * uploadTask.cancel();
49
+ * try {
50
+ * await uploadTask.result;
51
+ * } catch (error) {
52
+ * if(isCancelError(error)) {
53
+ * // Handle error thrown by task cancelation.
54
+ * }
55
+ * }
56
+ *```
57
+ *
58
+ * @example
59
+ * ```ts
60
+ * // Pause and resume a task
61
+ * const uploadTask = uploadData({ path, data: file });
62
+ * //...
63
+ * uploadTask.pause();
64
+ * //...
65
+ * uploadTask.resume();
66
+ * //...
67
+ * await uploadTask.result;
68
+ * ```
69
+ */
70
+ export function uploadData(
71
+ input: UploadDataWithPathInput,
72
+ ): UploadDataWithPathOutput;
73
+
74
+ /**
75
+ * Upload data to the specified S3 object key. By default uses single PUT operation to upload if the payload is less than 5MB.
76
+ * Otherwise, uses multipart upload to upload the payload. If the payload length cannot be determined, uses multipart upload.
77
+ *
78
+ * Limitations:
79
+ * * Maximum object size is 5TB.
80
+ * * Maximum object size if the size cannot be determined before upload is 50GB.
81
+ *
82
+ * @deprecated The `key` and `accessLevel` parameters are deprecated and will be removed in next major version.
83
+ * Please use {@link https://docs.amplify.aws/javascript/build-a-backend/storage/upload/#uploaddata | path} instead.
84
+ *
85
+ * @throws Service: `S3Exception` thrown when checking for existence of the object.
86
+ * @throws Validation: `StorageValidationErrorCode` thrown when a validation error occurs.
87
+ *
88
+ * @param input - A `UploadDataInput` object.
89
+ *
90
+ * @returns A cancelable and resumable task exposing result promise from the `result` property.
27
91
  *
28
92
  * @example
29
93
  * ```ts
@@ -32,6 +96,7 @@ import { getMultipartUploadHandlers } from './multipart';
32
96
  * onProgress, // Optional progress callback.
33
97
  * } }).result;
34
98
  * ```
99
+ *
35
100
  * @example
36
101
  * ```ts
37
102
  * // Cancel a task
@@ -59,7 +124,9 @@ import { getMultipartUploadHandlers } from './multipart';
59
124
  * await uploadTask.result;
60
125
  * ```
61
126
  */
62
- export const uploadData = (input: UploadDataInput): UploadDataOutput => {
127
+ export function uploadData(input: UploadDataInput): UploadDataOutput;
128
+
129
+ export function uploadData(input: UploadDataInput | UploadDataWithPathInput) {
63
130
  const { data } = input;
64
131
 
65
132
  const dataByteLength = byteLength(data);
@@ -69,6 +136,7 @@ export const uploadData = (input: UploadDataInput): UploadDataOutput => {
69
136
  );
70
137
 
71
138
  if (dataByteLength && dataByteLength <= DEFAULT_PART_SIZE) {
139
+ // Single part upload
72
140
  const abortController = new AbortController();
73
141
 
74
142
  return createUploadTask({
@@ -79,6 +147,7 @@ export const uploadData = (input: UploadDataInput): UploadDataOutput => {
79
147
  },
80
148
  });
81
149
  } else {
150
+ // Multipart upload
82
151
  const { multipartUploadJob, onPause, onResume, onCancel } =
83
152
  getMultipartUploadHandlers(input, dataByteLength);
84
153
 
@@ -92,4 +161,4 @@ export const uploadData = (input: UploadDataInput): UploadDataOutput => {
92
161
  onResume,
93
162
  });
94
163
  }
95
- };
164
+ }
@@ -18,8 +18,8 @@ interface LoadOrCreateMultipartUploadOptions {
18
18
  s3Config: ResolvedS3Config;
19
19
  data: StorageUploadDataPayload;
20
20
  bucket: string;
21
- accessLevel: StorageAccessLevel;
22
- keyPrefix: string;
21
+ accessLevel?: StorageAccessLevel;
22
+ keyPrefix?: string;
23
23
  key: string;
24
24
  contentType?: string;
25
25
  contentDisposition?: string;
@@ -54,7 +54,7 @@ export const loadOrCreateMultipartUpload = async ({
54
54
  metadata,
55
55
  abortSignal,
56
56
  }: LoadOrCreateMultipartUploadOptions): Promise<LoadOrCreateMultipartUploadResult> => {
57
- const finalKey = keyPrefix + key;
57
+ const finalKey = keyPrefix !== undefined ? keyPrefix + key : key;
58
58
 
59
59
  let cachedUpload:
60
60
  | {
@@ -75,6 +75,7 @@ export const loadOrCreateMultipartUpload = async ({
75
75
  accessLevel,
76
76
  key,
77
77
  });
78
+
78
79
  const cachedUploadParts = await findCachedUploadParts({
79
80
  s3Config,
80
81
  cacheKey: uploadCacheKey,
@@ -94,7 +94,7 @@ interface UploadsCacheKeyOptions {
94
94
  size: number;
95
95
  contentType?: string;
96
96
  bucket: string;
97
- accessLevel: StorageAccessLevel;
97
+ accessLevel?: StorageAccessLevel;
98
98
  key: string;
99
99
  file?: File;
100
100
  }
@@ -112,10 +112,19 @@ export const getUploadsCacheKey = ({
112
112
  accessLevel,
113
113
  key,
114
114
  }: UploadsCacheKeyOptions) => {
115
+ let levelStr;
115
116
  const resolvedContentType =
116
117
  contentType ?? file?.type ?? 'application/octet-stream';
117
- const levelStr = accessLevel === 'guest' ? 'public' : accessLevel;
118
+
119
+ // If no access level is defined, we're using custom gen2 access rules
120
+ if (accessLevel === undefined) {
121
+ levelStr = 'custom';
122
+ } else {
123
+ levelStr = accessLevel === 'guest' ? 'public' : accessLevel;
124
+ }
125
+
118
126
  const baseId = `${size}_${resolvedContentType}_${bucket}_${levelStr}_${key}`;
127
+
119
128
  if (file) {
120
129
  return `${file.name}_${file.lastModified}_${baseId}`;
121
130
  } else {
@@ -4,14 +4,21 @@
4
4
  import { Amplify, StorageAccessLevel } from '@aws-amplify/core';
5
5
  import { StorageAction } from '@aws-amplify/core/internals/utils';
6
6
 
7
- import { UploadDataInput } from '../../../types';
8
- import { resolveS3ConfigAndInput } from '../../../utils';
9
- import { Item as S3Item } from '../../../types/outputs';
7
+ import { UploadDataInput, UploadDataWithPathInput } from '../../../types';
8
+ import {
9
+ resolveS3ConfigAndInput,
10
+ validateStorageOperationInput,
11
+ } from '../../../utils';
12
+ import { ItemWithKey, ItemWithPath } from '../../../types/outputs';
10
13
  import {
11
14
  DEFAULT_ACCESS_LEVEL,
12
15
  DEFAULT_QUEUE_SIZE,
16
+ STORAGE_INPUT_KEY,
13
17
  } from '../../../utils/constants';
14
- import { ResolvedS3Config } from '../../../types/options';
18
+ import {
19
+ ResolvedS3Config,
20
+ UploadDataOptionsWithKey,
21
+ } from '../../../types/options';
15
22
  import { StorageError } from '../../../../../errors/StorageError';
16
23
  import { CanceledError } from '../../../../../errors/CanceledError';
17
24
  import {
@@ -36,10 +43,12 @@ import { getDataChunker } from './getDataChunker';
36
43
  * @internal
37
44
  */
38
45
  export const getMultipartUploadHandlers = (
39
- { options: uploadDataOptions, key, data }: UploadDataInput,
46
+ uploadDataInput: UploadDataInput | UploadDataWithPathInput,
40
47
  size?: number,
41
48
  ) => {
42
- let resolveCallback: ((value: S3Item) => void) | undefined;
49
+ let resolveCallback:
50
+ | ((value: ItemWithKey | ItemWithPath) => void)
51
+ | undefined;
43
52
  let rejectCallback: ((reason?: any) => void) | undefined;
44
53
  let inProgressUpload:
45
54
  | {
@@ -49,43 +58,62 @@ export const getMultipartUploadHandlers = (
49
58
  | undefined;
50
59
  let resolvedS3Config: ResolvedS3Config | undefined;
51
60
  let abortController: AbortController | undefined;
61
+ let resolvedAccessLevel: StorageAccessLevel | undefined;
52
62
  let resolvedBucket: string | undefined;
53
63
  let resolvedKeyPrefix: string | undefined;
64
+ let resolvedIdentityId: string | undefined;
54
65
  let uploadCacheKey: string | undefined;
66
+ let finalKey: string;
55
67
  // Special flag that differentiates HTTP requests abort error caused by pause() from ones caused by cancel().
56
68
  // The former one should NOT cause the upload job to throw, but cancels any pending HTTP requests.
57
69
  // This should be replaced by a special abort reason. However,the support of this API is lagged behind.
58
70
  let isAbortSignalFromPause = false;
59
71
 
60
- const startUpload = async (): Promise<S3Item> => {
72
+ const startUpload = async (): Promise<ItemWithKey | ItemWithPath> => {
73
+ const { options: uploadDataOptions, data } = uploadDataInput;
61
74
  const resolvedS3Options = await resolveS3ConfigAndInput(
62
75
  Amplify,
63
76
  uploadDataOptions,
64
77
  );
65
78
 
79
+ abortController = new AbortController();
80
+ isAbortSignalFromPause = false;
66
81
  resolvedS3Config = resolvedS3Options.s3Config;
67
82
  resolvedBucket = resolvedS3Options.bucket;
68
- resolvedKeyPrefix = resolvedS3Options.keyPrefix;
83
+ resolvedIdentityId = resolvedS3Options.identityId;
69
84
 
70
- abortController = new AbortController();
71
- isAbortSignalFromPause = false;
85
+ const { inputType, objectKey } = validateStorageOperationInput(
86
+ uploadDataInput,
87
+ resolvedIdentityId,
88
+ );
72
89
 
73
90
  const {
74
91
  contentDisposition,
75
92
  contentEncoding,
76
93
  contentType = 'application/octet-stream',
77
94
  metadata,
78
- accessLevel,
79
95
  onProgress,
80
96
  } = uploadDataOptions ?? {};
81
97
 
98
+ finalKey = objectKey;
99
+
100
+ // Resolve "key" specific options
101
+ if (inputType === STORAGE_INPUT_KEY) {
102
+ const accessLevel = (uploadDataOptions as UploadDataOptionsWithKey)
103
+ ?.accessLevel;
104
+
105
+ resolvedKeyPrefix = resolvedS3Options.keyPrefix;
106
+ finalKey = resolvedKeyPrefix + objectKey;
107
+ resolvedAccessLevel = resolveAccessLevel(accessLevel);
108
+ }
109
+
82
110
  if (!inProgressUpload) {
83
111
  const { uploadId, cachedParts } = await loadOrCreateMultipartUpload({
84
112
  s3Config: resolvedS3Config,
85
- accessLevel: resolveAccessLevel(accessLevel),
113
+ accessLevel: resolvedAccessLevel,
86
114
  bucket: resolvedBucket,
87
115
  keyPrefix: resolvedKeyPrefix,
88
- key,
116
+ key: objectKey,
89
117
  contentType,
90
118
  contentDisposition,
91
119
  contentEncoding,
@@ -100,15 +128,14 @@ export const getMultipartUploadHandlers = (
100
128
  };
101
129
  }
102
130
 
103
- const finalKey = resolvedKeyPrefix + key;
104
131
  uploadCacheKey = size
105
132
  ? getUploadsCacheKey({
106
133
  file: data instanceof File ? data : undefined,
107
- accessLevel: resolveAccessLevel(uploadDataOptions?.accessLevel),
134
+ accessLevel: resolvedAccessLevel,
108
135
  contentType: uploadDataOptions?.contentType,
109
136
  bucket: resolvedBucket!,
110
137
  size,
111
- key,
138
+ key: objectKey,
112
139
  })
113
140
  : undefined;
114
141
 
@@ -186,12 +213,15 @@ export const getMultipartUploadHandlers = (
186
213
  await removeCachedUpload(uploadCacheKey);
187
214
  }
188
215
 
189
- return {
190
- key,
216
+ const result = {
191
217
  eTag,
192
218
  contentType,
193
219
  metadata,
194
220
  };
221
+
222
+ return inputType === STORAGE_INPUT_KEY
223
+ ? { key: objectKey, ...result }
224
+ : { path: objectKey, ...result };
195
225
  };
196
226
 
197
227
  const startUploadWithResumability = () =>
@@ -208,7 +238,7 @@ export const getMultipartUploadHandlers = (
208
238
  });
209
239
 
210
240
  const multipartUploadJob = () =>
211
- new Promise<S3Item>((resolve, reject) => {
241
+ new Promise<ItemWithKey | ItemWithPath>((resolve, reject) => {
212
242
  resolveCallback = resolve;
213
243
  rejectCallback = reject;
214
244
  startUploadWithResumability();
@@ -232,7 +262,7 @@ export const getMultipartUploadHandlers = (
232
262
  // 3. clear multipart upload on server side.
233
263
  await abortMultipartUpload(resolvedS3Config!, {
234
264
  Bucket: resolvedBucket,
235
- Key: resolvedKeyPrefix! + key,
265
+ Key: finalKey,
236
266
  UploadId: inProgressUpload?.uploadId,
237
267
  });
238
268
  };
@@ -4,11 +4,16 @@
4
4
  import { Amplify } from '@aws-amplify/core';
5
5
  import { StorageAction } from '@aws-amplify/core/internals/utils';
6
6
 
7
- import { UploadDataInput } from '../../types';
8
- import { calculateContentMd5, resolveS3ConfigAndInput } from '../../utils';
9
- import { Item as S3Item } from '../../types/outputs';
7
+ import { UploadDataInput, UploadDataWithPathInput } from '../../types';
8
+ import {
9
+ calculateContentMd5,
10
+ resolveS3ConfigAndInput,
11
+ validateStorageOperationInput,
12
+ } from '../../utils';
13
+ import { ItemWithKey, ItemWithPath } from '../../types/outputs';
10
14
  import { putObject } from '../../utils/client';
11
15
  import { getStorageUserAgentValue } from '../../utils/userAgent';
16
+ import { STORAGE_INPUT_KEY } from '../../utils/constants';
12
17
 
13
18
  /**
14
19
  * Get a function the returns a promise to call putObject API to S3.
@@ -17,15 +22,21 @@ import { getStorageUserAgentValue } from '../../utils/userAgent';
17
22
  */
18
23
  export const putObjectJob =
19
24
  (
20
- { options: uploadDataOptions, key, data }: UploadDataInput,
25
+ uploadDataInput: UploadDataInput | UploadDataWithPathInput,
21
26
  abortSignal: AbortSignal,
22
27
  totalLength?: number,
23
28
  ) =>
24
- async (): Promise<S3Item> => {
25
- const { bucket, keyPrefix, s3Config, isObjectLockEnabled } =
29
+ async (): Promise<ItemWithKey | ItemWithPath> => {
30
+ const { options: uploadDataOptions, data } = uploadDataInput;
31
+ const { bucket, keyPrefix, s3Config, isObjectLockEnabled, identityId } =
26
32
  await resolveS3ConfigAndInput(Amplify, uploadDataOptions);
33
+ const { inputType, objectKey } = validateStorageOperationInput(
34
+ uploadDataInput,
35
+ identityId,
36
+ );
27
37
 
28
- const finalKey = keyPrefix + key;
38
+ const finalKey =
39
+ inputType === STORAGE_INPUT_KEY ? keyPrefix + objectKey : objectKey;
29
40
  const {
30
41
  contentDisposition,
31
42
  contentEncoding,
@@ -55,12 +66,15 @@ export const putObjectJob =
55
66
  },
56
67
  );
57
68
 
58
- return {
59
- key,
69
+ const result = {
60
70
  eTag,
61
71
  versionId,
62
72
  contentType,
63
73
  metadata,
64
74
  size: totalLength,
65
75
  };
76
+
77
+ return inputType === STORAGE_INPUT_KEY
78
+ ? { key: objectKey, ...result }
79
+ : { path: objectKey, ...result };
66
80
  };
@@ -13,22 +13,38 @@ export {
13
13
 
14
14
  export {
15
15
  UploadDataInput,
16
+ UploadDataWithPathInput,
16
17
  DownloadDataInput,
18
+ DownloadDataWithPathInput,
17
19
  RemoveInput,
20
+ RemoveWithPathInput,
18
21
  ListAllInput,
22
+ ListAllWithPathInput,
19
23
  ListPaginateInput,
24
+ ListPaginateWithPathInput,
20
25
  GetPropertiesInput,
26
+ GetPropertiesWithPathInput,
21
27
  CopyInput,
28
+ CopyWithPathInput,
22
29
  GetUrlInput,
30
+ GetUrlWithPathInput,
23
31
  } from './types/inputs';
24
32
 
25
33
  export {
26
34
  UploadDataOutput,
35
+ UploadDataWithPathOutput,
27
36
  DownloadDataOutput,
37
+ DownloadDataWithPathOutput,
28
38
  RemoveOutput,
39
+ RemoveWithPathOutput,
29
40
  ListAllOutput,
41
+ ListAllWithPathOutput,
30
42
  ListPaginateOutput,
43
+ ListPaginateWithPathOutput,
31
44
  GetPropertiesOutput,
45
+ GetPropertiesWithPathOutput,
32
46
  CopyOutput,
47
+ CopyWithPathOutput,
33
48
  GetUrlOutput,
49
+ GetUrlWithPathOutput,
34
50
  } from './types/outputs';