@aws-amplify/storage 6.7.16-unstable.cde36a7.0 → 6.7.17-unstable.b188564.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.
- package/dist/cjs/errors/IntegrityError.js +7 -6
- package/dist/cjs/errors/IntegrityError.js.map +1 -1
- package/dist/cjs/internals/apis/getDataAccess.js +1 -0
- package/dist/cjs/internals/apis/getDataAccess.js.map +1 -1
- package/dist/cjs/internals/apis/listCallerAccessGrants.js +4 -3
- package/dist/cjs/internals/apis/listCallerAccessGrants.js.map +1 -1
- package/dist/cjs/providers/s3/apis/internal/list.js +1 -1
- package/dist/cjs/providers/s3/apis/internal/list.js.map +1 -1
- package/dist/cjs/providers/s3/apis/internal/uploadData/multipart/uploadHandlers.js +2 -1
- package/dist/cjs/providers/s3/apis/internal/uploadData/multipart/uploadHandlers.js.map +1 -1
- package/dist/cjs/providers/s3/utils/client/runtime/s3TransferHandler/xhr.js +2 -0
- package/dist/cjs/providers/s3/utils/client/runtime/s3TransferHandler/xhr.js.map +1 -1
- package/dist/cjs/providers/s3/utils/client/s3control/getDataAccess.js +1 -2
- package/dist/cjs/providers/s3/utils/client/s3control/getDataAccess.js.map +1 -1
- package/dist/cjs/providers/s3/utils/client/s3control/listCallerAccessGrants.js +1 -2
- package/dist/cjs/providers/s3/utils/client/s3control/listCallerAccessGrants.js.map +1 -1
- package/dist/cjs/providers/s3/utils/client/s3data/abortMultipartUpload.js +3 -2
- package/dist/cjs/providers/s3/utils/client/s3data/abortMultipartUpload.js.map +1 -1
- package/dist/cjs/providers/s3/utils/client/s3data/completeMultipartUpload.js +6 -5
- package/dist/cjs/providers/s3/utils/client/s3data/completeMultipartUpload.js.map +1 -1
- package/dist/cjs/providers/s3/utils/client/s3data/copyObject.js +5 -2
- package/dist/cjs/providers/s3/utils/client/s3data/copyObject.js.map +1 -1
- package/dist/cjs/providers/s3/utils/client/s3data/createMultipartUpload.js +2 -2
- package/dist/cjs/providers/s3/utils/client/s3data/createMultipartUpload.js.map +1 -1
- package/dist/cjs/providers/s3/utils/client/s3data/deleteObject.js +4 -2
- package/dist/cjs/providers/s3/utils/client/s3data/deleteObject.js.map +1 -1
- package/dist/cjs/providers/s3/utils/client/s3data/getObject.js +5 -2
- package/dist/cjs/providers/s3/utils/client/s3data/getObject.js.map +1 -1
- package/dist/cjs/providers/s3/utils/client/s3data/headObject.js +1 -2
- package/dist/cjs/providers/s3/utils/client/s3data/headObject.js.map +1 -1
- package/dist/cjs/providers/s3/utils/client/s3data/listObjectsV2.js +2 -3
- package/dist/cjs/providers/s3/utils/client/s3data/listObjectsV2.js.map +1 -1
- package/dist/cjs/providers/s3/utils/client/s3data/listParts.js +3 -2
- package/dist/cjs/providers/s3/utils/client/s3data/listParts.js.map +1 -1
- package/dist/cjs/providers/s3/utils/client/s3data/putObject.js +5 -2
- package/dist/cjs/providers/s3/utils/client/s3data/putObject.js.map +1 -1
- package/dist/cjs/providers/s3/utils/client/s3data/uploadPart.js +2 -2
- package/dist/cjs/providers/s3/utils/client/s3data/uploadPart.js.map +1 -1
- package/dist/cjs/providers/s3/utils/client/utils/deserializeHelpers.js +8 -12
- package/dist/cjs/providers/s3/utils/client/utils/deserializeHelpers.js.map +1 -1
- package/dist/esm/errors/IntegrityError.d.ts +1 -1
- package/dist/esm/errors/IntegrityError.mjs +7 -6
- package/dist/esm/errors/IntegrityError.mjs.map +1 -1
- package/dist/esm/internals/apis/getDataAccess.mjs +1 -0
- package/dist/esm/internals/apis/getDataAccess.mjs.map +1 -1
- package/dist/esm/internals/apis/listCallerAccessGrants.mjs +4 -3
- package/dist/esm/internals/apis/listCallerAccessGrants.mjs.map +1 -1
- package/dist/esm/providers/s3/apis/internal/list.mjs +1 -1
- package/dist/esm/providers/s3/apis/internal/list.mjs.map +1 -1
- package/dist/esm/providers/s3/apis/internal/uploadData/multipart/uploadHandlers.mjs +2 -1
- package/dist/esm/providers/s3/apis/internal/uploadData/multipart/uploadHandlers.mjs.map +1 -1
- package/dist/esm/providers/s3/utils/client/runtime/s3TransferHandler/xhr.d.ts +2 -2
- package/dist/esm/providers/s3/utils/client/runtime/s3TransferHandler/xhr.mjs +3 -1
- package/dist/esm/providers/s3/utils/client/runtime/s3TransferHandler/xhr.mjs.map +1 -1
- package/dist/esm/providers/s3/utils/client/s3control/getDataAccess.d.ts +1 -1
- package/dist/esm/providers/s3/utils/client/s3control/getDataAccess.mjs +1 -2
- package/dist/esm/providers/s3/utils/client/s3control/getDataAccess.mjs.map +1 -1
- package/dist/esm/providers/s3/utils/client/s3control/listCallerAccessGrants.d.ts +1 -1
- package/dist/esm/providers/s3/utils/client/s3control/listCallerAccessGrants.mjs +1 -2
- package/dist/esm/providers/s3/utils/client/s3control/listCallerAccessGrants.mjs.map +1 -1
- package/dist/esm/providers/s3/utils/client/s3data/abortMultipartUpload.d.ts +1 -1
- package/dist/esm/providers/s3/utils/client/s3data/abortMultipartUpload.mjs +3 -2
- package/dist/esm/providers/s3/utils/client/s3data/abortMultipartUpload.mjs.map +1 -1
- package/dist/esm/providers/s3/utils/client/s3data/completeMultipartUpload.d.ts +1 -1
- package/dist/esm/providers/s3/utils/client/s3data/completeMultipartUpload.mjs +6 -5
- package/dist/esm/providers/s3/utils/client/s3data/completeMultipartUpload.mjs.map +1 -1
- package/dist/esm/providers/s3/utils/client/s3data/copyObject.d.ts +1 -1
- package/dist/esm/providers/s3/utils/client/s3data/copyObject.mjs +6 -3
- package/dist/esm/providers/s3/utils/client/s3data/copyObject.mjs.map +1 -1
- package/dist/esm/providers/s3/utils/client/s3data/createMultipartUpload.d.ts +1 -1
- package/dist/esm/providers/s3/utils/client/s3data/createMultipartUpload.mjs +2 -2
- package/dist/esm/providers/s3/utils/client/s3data/createMultipartUpload.mjs.map +1 -1
- package/dist/esm/providers/s3/utils/client/s3data/deleteObject.d.ts +1 -1
- package/dist/esm/providers/s3/utils/client/s3data/deleteObject.mjs +5 -3
- package/dist/esm/providers/s3/utils/client/s3data/deleteObject.mjs.map +1 -1
- package/dist/esm/providers/s3/utils/client/s3data/getObject.d.ts +1 -1
- package/dist/esm/providers/s3/utils/client/s3data/getObject.mjs +6 -3
- package/dist/esm/providers/s3/utils/client/s3data/getObject.mjs.map +1 -1
- package/dist/esm/providers/s3/utils/client/s3data/headObject.d.ts +1 -1
- package/dist/esm/providers/s3/utils/client/s3data/headObject.mjs +1 -2
- package/dist/esm/providers/s3/utils/client/s3data/headObject.mjs.map +1 -1
- package/dist/esm/providers/s3/utils/client/s3data/listObjectsV2.d.ts +1 -1
- package/dist/esm/providers/s3/utils/client/s3data/listObjectsV2.mjs +2 -3
- package/dist/esm/providers/s3/utils/client/s3data/listObjectsV2.mjs.map +1 -1
- package/dist/esm/providers/s3/utils/client/s3data/listParts.d.ts +1 -1
- package/dist/esm/providers/s3/utils/client/s3data/listParts.mjs +3 -2
- package/dist/esm/providers/s3/utils/client/s3data/listParts.mjs.map +1 -1
- package/dist/esm/providers/s3/utils/client/s3data/putObject.d.ts +1 -1
- package/dist/esm/providers/s3/utils/client/s3data/putObject.mjs +6 -3
- package/dist/esm/providers/s3/utils/client/s3data/putObject.mjs.map +1 -1
- package/dist/esm/providers/s3/utils/client/s3data/uploadPart.d.ts +1 -1
- package/dist/esm/providers/s3/utils/client/s3data/uploadPart.mjs +2 -2
- package/dist/esm/providers/s3/utils/client/s3data/uploadPart.mjs.map +1 -1
- package/dist/esm/providers/s3/utils/client/utils/deserializeHelpers.d.ts +6 -3
- package/dist/esm/providers/s3/utils/client/utils/deserializeHelpers.mjs +8 -12
- package/dist/esm/providers/s3/utils/client/utils/deserializeHelpers.mjs.map +1 -1
- package/package.json +5 -5
- package/src/errors/IntegrityError.ts +4 -5
- package/src/internals/apis/getDataAccess.ts +1 -0
- package/src/internals/apis/listCallerAccessGrants.ts +8 -3
- package/src/providers/s3/apis/internal/list.ts +1 -1
- package/src/providers/s3/apis/internal/uploadData/multipart/uploadHandlers.ts +2 -1
- package/src/providers/s3/utils/client/runtime/s3TransferHandler/xhr.ts +13 -1
- package/src/providers/s3/utils/client/s3control/getDataAccess.ts +1 -2
- package/src/providers/s3/utils/client/s3control/listCallerAccessGrants.ts +1 -2
- package/src/providers/s3/utils/client/s3data/abortMultipartUpload.ts +3 -2
- package/src/providers/s3/utils/client/s3data/completeMultipartUpload.ts +6 -5
- package/src/providers/s3/utils/client/s3data/copyObject.ts +9 -3
- package/src/providers/s3/utils/client/s3data/createMultipartUpload.ts +2 -2
- package/src/providers/s3/utils/client/s3data/deleteObject.ts +8 -3
- package/src/providers/s3/utils/client/s3data/getObject.ts +9 -3
- package/src/providers/s3/utils/client/s3data/headObject.ts +1 -2
- package/src/providers/s3/utils/client/s3data/listObjectsV2.ts +2 -3
- package/src/providers/s3/utils/client/s3data/listParts.ts +3 -2
- package/src/providers/s3/utils/client/s3data/putObject.ts +9 -3
- package/src/providers/s3/utils/client/s3data/uploadPart.ts +2 -2
- package/src/providers/s3/utils/client/utils/deserializeHelpers.ts +12 -14
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deserializeHelpers.mjs","sources":["../../../../../../../src/providers/s3/utils/client/utils/deserializeHelpers.ts"],"sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport { StorageError } from '../../../../../errors/StorageError';\n/**\n * Maps an object to a new object using the provided instructions.\n * The instructions are a map of the returning mapped object's property names to a single instruction of how to map the\n * value from the original object to the new object. There are two types of instructions:\n *\n * 1. A string representing the property name of the original object to map to the new object. The value mapped from\n * the original object will be the same as the value in the new object, and it can ONLY be string.\n *\n * 2. An array of two elements. The first element is the property name of the original object to map to the new object.\n * The second element is a function that takes the value from the original object and returns the value to be mapped to\n * the new object. The function can return any type.\n *\n * Example:\n * ```typescript\n * const input = {\n * Foo: 'foo',\n * BarList: [{value: 'bar1'}, {value: 'bar2'}]\n * }\n * const output = map(input, {\n * someFoo: 'Foo',\n * bar: ['BarList', (barList) => barList.map(bar => bar.value)]\n * baz: 'Baz' // Baz does not exist in input, so it will not be in the output.\n * });\n * // output = { someFoo: 'foo', bar: ['bar1', 'bar2'] }\n * ```\n *\n * @param obj The object containing the data to compose mapped object.\n * @param instructions The instructions mapping the object values to the new object.\n * @returns A new object with the mapped values.\n *\n * @internal\n */\nexport const map = (obj, instructions) => {\n const result = {};\n for (const [key, instruction] of Object.entries(instructions)) {\n const [accessor, deserializer] = Array.isArray(instruction)\n ? instruction\n : [instruction];\n if (Object.prototype.hasOwnProperty.call(obj, accessor)) {\n result[key] = deserializer\n ? deserializer(obj[accessor])\n : String(obj[accessor]);\n }\n }\n return result;\n};\n/**\n * Deserializes a string to a number. Returns undefined if input is undefined.\n *\n * @internal\n */\nexport const deserializeNumber = (value) => value ? Number(value) : undefined;\n/**\n * Deserializes a string to a boolean. Returns undefined if input is undefined. Returns true if input is 'true',\n * otherwise false.\n *\n * @internal\n */\nexport const deserializeBoolean = (value) => {\n return value ? value === 'true' : undefined;\n};\n/**\n * Deserializes a string to a Date. Returns undefined if input is undefined.\n * It supports epoch timestamp; rfc3339(cannot have a UTC, fractional precision supported); rfc7231(section 7.1.1.1)\n *\n * @see https://www.epoch101.com/\n * @see https://datatracker.ietf.org/doc/html/rfc3339.html#section-5.6\n * @see https://datatracker.ietf.org/doc/html/rfc7231.html#section-7.1.1.1\n *\n * @note For bundle size consideration, we use Date constructor to parse the timestamp string. There might be slight\n * difference among browsers.\n *\n * @internal\n */\nexport const deserializeTimestamp = (value) => {\n return value ? new Date(value) : undefined;\n};\n/**\n * Create a function deserializing a string to an enum value. If the string is not a valid enum value, it throws a\n * StorageError.\n *\n * @example\n * ```typescript\n * const deserializeStringEnum = createStringEnumDeserializer(['a', 'b', 'c'] as const, 'FieldName');\n * const deserializedArray = ['a', 'b', 'c'].map(deserializeStringEnum);\n * // deserializedArray = ['a', 'b', 'c']\n *\n * const invalidValue = deserializeStringEnum('d');\n * // Throws InvalidFieldName: Invalid FieldName: d\n * ```\n *\n * @internal\n */\nexport const createStringEnumDeserializer = (enumValues, fieldName) => {\n const deserializeStringEnum = (value) => {\n const parsedEnumValue = value\n ? enumValues.find(enumValue => enumValue === value)\n : undefined;\n if (!parsedEnumValue) {\n throw new StorageError({\n name: `Invalid${fieldName}`,\n message: `Invalid ${fieldName}: ${value}`,\n recoverySuggestion: 'This is likely to be a bug. Please reach out to library authors.',\n });\n }\n return parsedEnumValue;\n };\n return deserializeStringEnum;\n};\n/**\n * Function that makes sure the deserializer receives non-empty array.\n *\n * @internal\n */\nexport const emptyArrayGuard = (value, deserializer) => {\n if (value === '') {\n return [];\n }\n const valueArray = (Array.isArray(value) ? value : [value]).filter(e => e != null);\n return deserializer(valueArray);\n};\n/**\n * @internal\n */\nexport const deserializeMetadata = (headers) => {\n const objectMetadataHeaderPrefix = 'x-amz-meta-';\n const deserialized = Object.keys(headers)\n .filter(header => header.startsWith(objectMetadataHeaderPrefix))\n .reduce((acc, header) => {\n acc[header.replace(objectMetadataHeaderPrefix, '')] = headers[header];\n return acc;\n }, {});\n return Object.keys(deserialized).length > 0 ? deserialized : undefined;\n};\n/**\n * Internal-only method to create a new StorageError from a service error.\n *\n * @internal\n */\nexport const buildStorageServiceError = (error
|
|
1
|
+
{"version":3,"file":"deserializeHelpers.mjs","sources":["../../../../../../../src/providers/s3/utils/client/utils/deserializeHelpers.ts"],"sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport { StorageError } from '../../../../../errors/StorageError';\n/**\n * Maps an object to a new object using the provided instructions.\n * The instructions are a map of the returning mapped object's property names to a single instruction of how to map the\n * value from the original object to the new object. There are two types of instructions:\n *\n * 1. A string representing the property name of the original object to map to the new object. The value mapped from\n * the original object will be the same as the value in the new object, and it can ONLY be string.\n *\n * 2. An array of two elements. The first element is the property name of the original object to map to the new object.\n * The second element is a function that takes the value from the original object and returns the value to be mapped to\n * the new object. The function can return any type.\n *\n * Example:\n * ```typescript\n * const input = {\n * Foo: 'foo',\n * BarList: [{value: 'bar1'}, {value: 'bar2'}]\n * }\n * const output = map(input, {\n * someFoo: 'Foo',\n * bar: ['BarList', (barList) => barList.map(bar => bar.value)]\n * baz: 'Baz' // Baz does not exist in input, so it will not be in the output.\n * });\n * // output = { someFoo: 'foo', bar: ['bar1', 'bar2'] }\n * ```\n *\n * @param obj The object containing the data to compose mapped object.\n * @param instructions The instructions mapping the object values to the new object.\n * @returns A new object with the mapped values.\n *\n * @internal\n */\nexport const map = (obj, instructions) => {\n const result = {};\n for (const [key, instruction] of Object.entries(instructions)) {\n const [accessor, deserializer] = Array.isArray(instruction)\n ? instruction\n : [instruction];\n if (Object.prototype.hasOwnProperty.call(obj, accessor)) {\n result[key] = deserializer\n ? deserializer(obj[accessor])\n : String(obj[accessor]);\n }\n }\n return result;\n};\n/**\n * Deserializes a string to a number. Returns undefined if input is undefined.\n *\n * @internal\n */\nexport const deserializeNumber = (value) => value ? Number(value) : undefined;\n/**\n * Deserializes a string to a boolean. Returns undefined if input is undefined. Returns true if input is 'true',\n * otherwise false.\n *\n * @internal\n */\nexport const deserializeBoolean = (value) => {\n return value ? value === 'true' : undefined;\n};\n/**\n * Deserializes a string to a Date. Returns undefined if input is undefined.\n * It supports epoch timestamp; rfc3339(cannot have a UTC, fractional precision supported); rfc7231(section 7.1.1.1)\n *\n * @see https://www.epoch101.com/\n * @see https://datatracker.ietf.org/doc/html/rfc3339.html#section-5.6\n * @see https://datatracker.ietf.org/doc/html/rfc7231.html#section-7.1.1.1\n *\n * @note For bundle size consideration, we use Date constructor to parse the timestamp string. There might be slight\n * difference among browsers.\n *\n * @internal\n */\nexport const deserializeTimestamp = (value) => {\n return value ? new Date(value) : undefined;\n};\n/**\n * Create a function deserializing a string to an enum value. If the string is not a valid enum value, it throws a\n * StorageError.\n *\n * @example\n * ```typescript\n * const deserializeStringEnum = createStringEnumDeserializer(['a', 'b', 'c'] as const, 'FieldName');\n * const deserializedArray = ['a', 'b', 'c'].map(deserializeStringEnum);\n * // deserializedArray = ['a', 'b', 'c']\n *\n * const invalidValue = deserializeStringEnum('d');\n * // Throws InvalidFieldName: Invalid FieldName: d\n * ```\n *\n * @internal\n */\nexport const createStringEnumDeserializer = (enumValues, fieldName) => {\n const deserializeStringEnum = (value) => {\n const parsedEnumValue = value\n ? enumValues.find(enumValue => enumValue === value)\n : undefined;\n if (!parsedEnumValue) {\n throw new StorageError({\n name: `Invalid${fieldName}`,\n message: `Invalid ${fieldName}: ${value}`,\n recoverySuggestion: 'This is likely to be a bug. Please reach out to library authors.',\n });\n }\n return parsedEnumValue;\n };\n return deserializeStringEnum;\n};\n/**\n * Function that makes sure the deserializer receives non-empty array.\n *\n * @internal\n */\nexport const emptyArrayGuard = (value, deserializer) => {\n if (value === '') {\n return [];\n }\n const valueArray = (Array.isArray(value) ? value : [value]).filter(e => e != null);\n return deserializer(valueArray);\n};\n/**\n * @internal\n */\nexport const deserializeMetadata = (headers) => {\n const objectMetadataHeaderPrefix = 'x-amz-meta-';\n const deserialized = Object.keys(headers)\n .filter(header => header.startsWith(objectMetadataHeaderPrefix))\n .reduce((acc, header) => {\n acc[header.replace(objectMetadataHeaderPrefix, '')] = headers[header];\n return acc;\n }, {});\n return Object.keys(deserialized).length > 0 ? deserialized : undefined;\n};\n/**\n * Internal-only method to create a new StorageError from a service error with AWS SDK-compatible interfaces\n * @param error - The output of a service error parser, with AWS SDK-compatible interface(e.g. $metadata)\n * @returns A new StorageError.\n *\n * @internal\n */\nexport const buildStorageServiceError = (error) => new StorageError({\n name: error.name,\n message: error.message,\n metadata: error.$metadata,\n});\n/**\n * Internal-only method used for deserializing the parts of a multipart upload.\n *\n * @internal\n */\nexport const deserializeCompletedPartList = (input) => input.map(item => map(item, {\n PartNumber: ['PartNumber', deserializeNumber],\n ETag: 'ETag',\n ChecksumCRC32: 'ChecksumCRC32',\n}));\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aws-amplify/storage",
|
|
3
|
-
"version": "6.7.
|
|
3
|
+
"version": "6.7.17-unstable.b188564.0+b188564",
|
|
4
4
|
"description": "Storage category of aws-amplify",
|
|
5
5
|
"main": "./dist/cjs/index.js",
|
|
6
6
|
"module": "./dist/esm/index.mjs",
|
|
@@ -108,13 +108,13 @@
|
|
|
108
108
|
"./package.json": "./package.json"
|
|
109
109
|
},
|
|
110
110
|
"peerDependencies": {
|
|
111
|
-
"@aws-amplify/core": "6.10.
|
|
111
|
+
"@aws-amplify/core": "6.10.7-unstable.b188564.0+b188564"
|
|
112
112
|
},
|
|
113
113
|
"devDependencies": {
|
|
114
|
-
"@aws-amplify/core": "6.10.
|
|
115
|
-
"@aws-amplify/react-native": "1.1.8-unstable.
|
|
114
|
+
"@aws-amplify/core": "6.10.7-unstable.b188564.0+b188564",
|
|
115
|
+
"@aws-amplify/react-native": "1.1.8-unstable.b188564.0+b188564",
|
|
116
116
|
"@types/node": "20.14.12",
|
|
117
117
|
"typescript": "5.0.2"
|
|
118
118
|
},
|
|
119
|
-
"gitHead": "
|
|
119
|
+
"gitHead": "b1885648589e0549c0e7c257e8be5fb4936d5bde"
|
|
120
120
|
}
|
|
@@ -8,15 +8,14 @@ import {
|
|
|
8
8
|
import { StorageError } from './StorageError';
|
|
9
9
|
|
|
10
10
|
export class IntegrityError extends StorageError {
|
|
11
|
-
constructor(
|
|
12
|
-
|
|
11
|
+
constructor(params?: Pick<AmplifyErrorParams, 'metadata'>) {
|
|
12
|
+
super({
|
|
13
13
|
name: AmplifyErrorCode.Unknown,
|
|
14
14
|
message: 'An unknown error has occurred.',
|
|
15
15
|
recoverySuggestion:
|
|
16
16
|
'This may be a bug. Please reach out to library authors.',
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
super(params);
|
|
17
|
+
metadata: params?.metadata,
|
|
18
|
+
});
|
|
20
19
|
|
|
21
20
|
// TODO: Delete the following 2 lines after we change the build target to >= es2015
|
|
22
21
|
this.constructor = IntegrityError;
|
|
@@ -59,6 +59,7 @@ export const getDataAccess = async (
|
|
|
59
59
|
throw new StorageError({
|
|
60
60
|
name: AmplifyErrorCode.Unknown,
|
|
61
61
|
message: 'Service did not return valid temporary credentials.',
|
|
62
|
+
metadata: result.$metadata,
|
|
62
63
|
});
|
|
63
64
|
} else {
|
|
64
65
|
logger.debug(`Retrieved credentials for: ${result.MatchedGrantTarget}`);
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
|
|
4
4
|
import { StorageAction } from '@aws-amplify/core/internals/utils';
|
|
5
5
|
import { CredentialsProviderOptions } from '@aws-amplify/core/internals/aws-client-utils';
|
|
6
|
+
import { ResponseMetadata } from '@aws-amplify/core/dist/esm/types';
|
|
6
7
|
|
|
7
8
|
import { logger } from '../../utils';
|
|
8
9
|
import { listCallerAccessGrants as listCallerAccessGrantsClient } from '../../providers/s3/utils/client/s3control';
|
|
@@ -43,7 +44,7 @@ export const listCallerAccessGrants = async (
|
|
|
43
44
|
return credentials;
|
|
44
45
|
};
|
|
45
46
|
|
|
46
|
-
const { CallerAccessGrantsList, NextToken } =
|
|
47
|
+
const { CallerAccessGrantsList, NextToken, $metadata } =
|
|
47
48
|
await listCallerAccessGrantsClient(
|
|
48
49
|
{
|
|
49
50
|
credentials: clientCredentialsProvider,
|
|
@@ -63,7 +64,7 @@ export const listCallerAccessGrants = async (
|
|
|
63
64
|
|
|
64
65
|
const accessGrants: LocationAccess[] =
|
|
65
66
|
CallerAccessGrantsList?.map(grant => {
|
|
66
|
-
assertGrantScope(grant.GrantScope);
|
|
67
|
+
assertGrantScope(grant.GrantScope, $metadata);
|
|
67
68
|
|
|
68
69
|
return {
|
|
69
70
|
scope: grant.GrantScope,
|
|
@@ -94,11 +95,15 @@ const parseGrantType = (grantScope: string): LocationType => {
|
|
|
94
95
|
}
|
|
95
96
|
};
|
|
96
97
|
|
|
97
|
-
function assertGrantScope(
|
|
98
|
+
function assertGrantScope(
|
|
99
|
+
value: unknown,
|
|
100
|
+
responseMetadata: ResponseMetadata,
|
|
101
|
+
): asserts value is string {
|
|
98
102
|
if (typeof value !== 'string' || !value.startsWith('s3://')) {
|
|
99
103
|
throw new StorageError({
|
|
100
104
|
name: 'InvalidGrantScope',
|
|
101
105
|
message: `Expected a valid grant scope, got ${value}`,
|
|
106
|
+
metadata: responseMetadata,
|
|
102
107
|
});
|
|
103
108
|
}
|
|
104
109
|
}
|
|
@@ -264,7 +264,7 @@ export const getMultipartUploadHandlers = (
|
|
|
264
264
|
);
|
|
265
265
|
|
|
266
266
|
if (size) {
|
|
267
|
-
const { ContentLength: uploadedObjectSize } = await headObject(
|
|
267
|
+
const { ContentLength: uploadedObjectSize, $metadata } = await headObject(
|
|
268
268
|
resolvedS3Config,
|
|
269
269
|
{
|
|
270
270
|
Bucket: resolvedBucket,
|
|
@@ -276,6 +276,7 @@ export const getMultipartUploadHandlers = (
|
|
|
276
276
|
throw new StorageError({
|
|
277
277
|
name: 'Error',
|
|
278
278
|
message: `Upload failed. Expected object size ${size}, but got ${uploadedObjectSize}.`,
|
|
279
|
+
metadata: $metadata,
|
|
279
280
|
});
|
|
280
281
|
}
|
|
281
282
|
}
|
|
@@ -2,11 +2,14 @@
|
|
|
2
2
|
// SPDX-License-Identifier: Apache-2.0
|
|
3
3
|
|
|
4
4
|
import {
|
|
5
|
+
AmzSdkRequestHeaderMiddlewareOptions,
|
|
5
6
|
HttpRequest,
|
|
6
7
|
HttpResponse,
|
|
7
8
|
RetryOptions,
|
|
8
9
|
SigningOptions,
|
|
9
10
|
UserAgentOptions,
|
|
11
|
+
amzSdkInvocationIdHeaderMiddlewareFactory,
|
|
12
|
+
amzSdkRequestHeaderMiddlewareFactory,
|
|
10
13
|
retryMiddlewareFactory,
|
|
11
14
|
signingMiddlewareFactory,
|
|
12
15
|
userAgentMiddlewareFactory,
|
|
@@ -23,13 +26,22 @@ import { xhrTransferHandler } from '../xhrTransferHandler';
|
|
|
23
26
|
* @internal
|
|
24
27
|
*/
|
|
25
28
|
export const s3TransferHandler = composeTransferHandler<
|
|
26
|
-
[
|
|
29
|
+
[
|
|
30
|
+
object,
|
|
31
|
+
UserAgentOptions,
|
|
32
|
+
object,
|
|
33
|
+
RetryOptions<HttpResponse>,
|
|
34
|
+
AmzSdkRequestHeaderMiddlewareOptions,
|
|
35
|
+
SigningOptions,
|
|
36
|
+
],
|
|
27
37
|
HttpRequest,
|
|
28
38
|
HttpResponse,
|
|
29
39
|
typeof xhrTransferHandler
|
|
30
40
|
>(xhrTransferHandler, [
|
|
31
41
|
contentSha256MiddlewareFactory,
|
|
32
42
|
userAgentMiddlewareFactory,
|
|
43
|
+
amzSdkInvocationIdHeaderMiddlewareFactory,
|
|
33
44
|
retryMiddlewareFactory,
|
|
45
|
+
amzSdkRequestHeaderMiddlewareFactory,
|
|
34
46
|
signingMiddlewareFactory,
|
|
35
47
|
]);
|
|
@@ -64,8 +64,7 @@ const getDataAccessDeserializer = async (
|
|
|
64
64
|
): Promise<GetDataAccessCommandOutput> => {
|
|
65
65
|
if (response.statusCode >= 300) {
|
|
66
66
|
// error is always set when statusCode >= 300
|
|
67
|
-
|
|
68
|
-
throw buildStorageServiceError(error, response.statusCode);
|
|
67
|
+
throw buildStorageServiceError((await parseXmlError(response))!);
|
|
69
68
|
} else {
|
|
70
69
|
const parsed = await parseXmlBody(response);
|
|
71
70
|
const contents = map(parsed, {
|
|
@@ -71,8 +71,7 @@ const listCallerAccessGrantsDeserializer = async (
|
|
|
71
71
|
): Promise<ListCallerAccessGrantsOutput> => {
|
|
72
72
|
if (response.statusCode >= 300) {
|
|
73
73
|
// error is always set when statusCode >= 300
|
|
74
|
-
|
|
75
|
-
throw buildStorageServiceError(error, response.statusCode);
|
|
74
|
+
throw buildStorageServiceError((await parseXmlError(response))!);
|
|
76
75
|
} else {
|
|
77
76
|
const parsed = await parseXmlBody(response);
|
|
78
77
|
const contents = map(parsed, {
|
|
@@ -42,6 +42,7 @@ const abortMultipartUploadSerializer = (
|
|
|
42
42
|
url.pathname = serializePathnameObjectKey(url, input.Key);
|
|
43
43
|
validateS3RequiredParameter(!!input.UploadId, 'UploadId');
|
|
44
44
|
url.search = new AmplifyUrlSearchParams({
|
|
45
|
+
'x-id': 'AbortMultipartUpload',
|
|
45
46
|
uploadId: input.UploadId,
|
|
46
47
|
}).toString();
|
|
47
48
|
validateObjectUrl({
|
|
@@ -66,8 +67,8 @@ const abortMultipartUploadDeserializer = async (
|
|
|
66
67
|
response: HttpResponse,
|
|
67
68
|
): Promise<AbortMultipartUploadOutput> => {
|
|
68
69
|
if (response.statusCode >= 300) {
|
|
69
|
-
|
|
70
|
-
throw buildStorageServiceError(
|
|
70
|
+
// error is always set when statusCode >= 300
|
|
71
|
+
throw buildStorageServiceError((await parseXmlError(response))!);
|
|
71
72
|
} else {
|
|
72
73
|
return {
|
|
73
74
|
$metadata: parseMetadata(response),
|
|
@@ -135,11 +135,12 @@ const serializeCompletedPartList = (input: CompletedPart): string => {
|
|
|
135
135
|
const parseXmlBodyOrThrow = async (response: HttpResponse): Promise<any> => {
|
|
136
136
|
const parsed = await parseXmlBody(response); // Handles empty body case
|
|
137
137
|
if (parsed.Code !== undefined && parsed.Message !== undefined) {
|
|
138
|
-
const error =
|
|
138
|
+
const error = await parseXmlError({
|
|
139
139
|
...response,
|
|
140
140
|
statusCode: 500, // To workaround the >=300 status code check common to other APIs.
|
|
141
|
-
})
|
|
142
|
-
|
|
141
|
+
});
|
|
142
|
+
error!.$metadata.httpStatusCode = response.statusCode;
|
|
143
|
+
throw buildStorageServiceError(error!);
|
|
143
144
|
}
|
|
144
145
|
|
|
145
146
|
return parsed;
|
|
@@ -149,8 +150,8 @@ const completeMultipartUploadDeserializer = async (
|
|
|
149
150
|
response: HttpResponse,
|
|
150
151
|
): Promise<CompleteMultipartUploadOutput> => {
|
|
151
152
|
if (response.statusCode >= 300) {
|
|
152
|
-
|
|
153
|
-
throw buildStorageServiceError(
|
|
153
|
+
// error is always set when statusCode >= 300
|
|
154
|
+
throw buildStorageServiceError((await parseXmlError(response))!);
|
|
154
155
|
} else {
|
|
155
156
|
const parsed = await parseXmlBodyOrThrow(response);
|
|
156
157
|
const contents = map(parsed, {
|
|
@@ -7,7 +7,10 @@ import {
|
|
|
7
7
|
HttpResponse,
|
|
8
8
|
parseMetadata,
|
|
9
9
|
} from '@aws-amplify/core/internals/aws-client-utils';
|
|
10
|
-
import {
|
|
10
|
+
import {
|
|
11
|
+
AmplifyUrl,
|
|
12
|
+
AmplifyUrlSearchParams,
|
|
13
|
+
} from '@aws-amplify/core/internals/utils';
|
|
11
14
|
import { composeServiceApi } from '@aws-amplify/core/internals/aws-client-utils/composers';
|
|
12
15
|
|
|
13
16
|
import {
|
|
@@ -68,6 +71,9 @@ const copyObjectSerializer = async (
|
|
|
68
71
|
const url = new AmplifyUrl(endpoint.url.toString());
|
|
69
72
|
validateS3RequiredParameter(!!input.Key, 'Key');
|
|
70
73
|
url.pathname = serializePathnameObjectKey(url, input.Key);
|
|
74
|
+
url.search = new AmplifyUrlSearchParams({
|
|
75
|
+
'x-id': 'CopyObject',
|
|
76
|
+
}).toString();
|
|
71
77
|
validateObjectUrl({
|
|
72
78
|
bucketName: input.Bucket,
|
|
73
79
|
key: input.Key,
|
|
@@ -110,8 +116,8 @@ const copyObjectDeserializer = async (
|
|
|
110
116
|
response: HttpResponse,
|
|
111
117
|
): Promise<CopyObjectOutput> => {
|
|
112
118
|
if (response.statusCode >= 300) {
|
|
113
|
-
|
|
114
|
-
throw buildStorageServiceError(
|
|
119
|
+
// error is always set when statusCode >= 300
|
|
120
|
+
throw buildStorageServiceError((await parseXmlError(response))!);
|
|
115
121
|
} else {
|
|
116
122
|
await parseXmlBody(response);
|
|
117
123
|
|
|
@@ -71,8 +71,8 @@ const createMultipartUploadDeserializer = async (
|
|
|
71
71
|
response: HttpResponse,
|
|
72
72
|
): Promise<CreateMultipartUploadOutput> => {
|
|
73
73
|
if (response.statusCode >= 300) {
|
|
74
|
-
|
|
75
|
-
throw buildStorageServiceError(
|
|
74
|
+
// error is always set when statusCode >= 300
|
|
75
|
+
throw buildStorageServiceError((await parseXmlError(response))!);
|
|
76
76
|
} else {
|
|
77
77
|
const parsed = await parseXmlBody(response);
|
|
78
78
|
const contents = map(parsed, {
|
|
@@ -7,7 +7,10 @@ import {
|
|
|
7
7
|
HttpResponse,
|
|
8
8
|
parseMetadata,
|
|
9
9
|
} from '@aws-amplify/core/internals/aws-client-utils';
|
|
10
|
-
import {
|
|
10
|
+
import {
|
|
11
|
+
AmplifyUrl,
|
|
12
|
+
AmplifyUrlSearchParams,
|
|
13
|
+
} from '@aws-amplify/core/internals/utils';
|
|
11
14
|
import { composeServiceApi } from '@aws-amplify/core/internals/aws-client-utils/composers';
|
|
12
15
|
|
|
13
16
|
import {
|
|
@@ -41,6 +44,9 @@ const deleteObjectSerializer = (
|
|
|
41
44
|
const url = new AmplifyUrl(endpoint.url.toString());
|
|
42
45
|
validateS3RequiredParameter(!!input.Key, 'Key');
|
|
43
46
|
url.pathname = serializePathnameObjectKey(url, input.Key);
|
|
47
|
+
url.search = new AmplifyUrlSearchParams({
|
|
48
|
+
'x-id': 'DeleteObject',
|
|
49
|
+
}).toString();
|
|
44
50
|
validateObjectUrl({
|
|
45
51
|
bucketName: input.Bucket,
|
|
46
52
|
key: input.Key,
|
|
@@ -62,8 +68,7 @@ const deleteObjectDeserializer = async (
|
|
|
62
68
|
): Promise<DeleteObjectOutput> => {
|
|
63
69
|
if (response.statusCode >= 300) {
|
|
64
70
|
// error is always set when statusCode >= 300
|
|
65
|
-
|
|
66
|
-
throw buildStorageServiceError(error, response.statusCode);
|
|
71
|
+
throw buildStorageServiceError((await parseXmlError(response))!);
|
|
67
72
|
} else {
|
|
68
73
|
const content = map(response.headers, {
|
|
69
74
|
DeleteMarker: ['x-amz-delete-marker', deserializeBoolean],
|
|
@@ -12,7 +12,10 @@ import {
|
|
|
12
12
|
presignUrl,
|
|
13
13
|
} from '@aws-amplify/core/internals/aws-client-utils';
|
|
14
14
|
import { composeServiceApi } from '@aws-amplify/core/internals/aws-client-utils/composers';
|
|
15
|
-
import {
|
|
15
|
+
import {
|
|
16
|
+
AmplifyUrl,
|
|
17
|
+
AmplifyUrlSearchParams,
|
|
18
|
+
} from '@aws-amplify/core/internals/utils';
|
|
16
19
|
|
|
17
20
|
import {
|
|
18
21
|
CONTENT_SHA256_HEADER,
|
|
@@ -61,6 +64,9 @@ const getObjectSerializer = async (
|
|
|
61
64
|
const url = new AmplifyUrl(endpoint.url.toString());
|
|
62
65
|
validateS3RequiredParameter(!!input.Key, 'Key');
|
|
63
66
|
url.pathname = serializePathnameObjectKey(url, input.Key);
|
|
67
|
+
url.search = new AmplifyUrlSearchParams({
|
|
68
|
+
'x-id': 'GetObject',
|
|
69
|
+
}).toString();
|
|
64
70
|
validateObjectUrl({
|
|
65
71
|
bucketName: input.Bucket,
|
|
66
72
|
key: input.Key,
|
|
@@ -83,8 +89,8 @@ const getObjectDeserializer = async (
|
|
|
83
89
|
response: HttpResponse,
|
|
84
90
|
): Promise<GetObjectOutput> => {
|
|
85
91
|
if (response.statusCode >= 300) {
|
|
86
|
-
|
|
87
|
-
throw buildStorageServiceError(
|
|
92
|
+
// error is always set when statusCode >= 300
|
|
93
|
+
throw buildStorageServiceError((await parseXmlError(response))!);
|
|
88
94
|
} else {
|
|
89
95
|
return {
|
|
90
96
|
...map(response.headers, {
|
|
@@ -70,8 +70,7 @@ const headObjectDeserializer = async (
|
|
|
70
70
|
): Promise<HeadObjectOutput> => {
|
|
71
71
|
if (response.statusCode >= 300) {
|
|
72
72
|
// error is always set when statusCode >= 300
|
|
73
|
-
|
|
74
|
-
throw buildStorageServiceError(error, response.statusCode);
|
|
73
|
+
throw buildStorageServiceError((await parseXmlError(response))!);
|
|
75
74
|
} else {
|
|
76
75
|
const contents = {
|
|
77
76
|
...map(response.headers, {
|
|
@@ -69,8 +69,7 @@ const listObjectsV2Deserializer = async (
|
|
|
69
69
|
): Promise<ListObjectsV2Output> => {
|
|
70
70
|
if (response.statusCode >= 300) {
|
|
71
71
|
// error is always set when statusCode >= 300
|
|
72
|
-
|
|
73
|
-
throw buildStorageServiceError(error, response.statusCode);
|
|
72
|
+
throw buildStorageServiceError((await parseXmlError(response))!);
|
|
74
73
|
} else {
|
|
75
74
|
const parsed = await parseXmlBody(response);
|
|
76
75
|
const contents = map(parsed, {
|
|
@@ -152,7 +151,7 @@ const validateCorroboratingElements = (response: ListObjectsV2Output) => {
|
|
|
152
151
|
KeyCount === Contents.length + CommonPrefixes.length;
|
|
153
152
|
|
|
154
153
|
if (!validTruncation || !validNumberOfKeysReturned) {
|
|
155
|
-
throw new IntegrityError();
|
|
154
|
+
throw new IntegrityError({ metadata: response.$metadata });
|
|
156
155
|
}
|
|
157
156
|
};
|
|
158
157
|
|
|
@@ -47,6 +47,7 @@ const listPartsSerializer = async (
|
|
|
47
47
|
url.pathname = serializePathnameObjectKey(url, input.Key);
|
|
48
48
|
validateS3RequiredParameter(!!input.UploadId, 'UploadId');
|
|
49
49
|
url.search = new AmplifyUrlSearchParams({
|
|
50
|
+
'x-id': 'ListParts',
|
|
50
51
|
uploadId: input.UploadId,
|
|
51
52
|
}).toString();
|
|
52
53
|
|
|
@@ -61,8 +62,8 @@ const listPartsDeserializer = async (
|
|
|
61
62
|
response: HttpResponse,
|
|
62
63
|
): Promise<ListPartsOutput> => {
|
|
63
64
|
if (response.statusCode >= 300) {
|
|
64
|
-
|
|
65
|
-
throw buildStorageServiceError(
|
|
65
|
+
// error is always set when statusCode >= 300
|
|
66
|
+
throw buildStorageServiceError((await parseXmlError(response))!);
|
|
66
67
|
} else {
|
|
67
68
|
const parsed = await parseXmlBody(response);
|
|
68
69
|
const contents = map(parsed, {
|
|
@@ -7,7 +7,10 @@ import {
|
|
|
7
7
|
HttpResponse,
|
|
8
8
|
parseMetadata,
|
|
9
9
|
} from '@aws-amplify/core/internals/aws-client-utils';
|
|
10
|
-
import {
|
|
10
|
+
import {
|
|
11
|
+
AmplifyUrl,
|
|
12
|
+
AmplifyUrlSearchParams,
|
|
13
|
+
} from '@aws-amplify/core/internals/utils';
|
|
11
14
|
import { composeServiceApi } from '@aws-amplify/core/internals/aws-client-utils/composers';
|
|
12
15
|
|
|
13
16
|
import {
|
|
@@ -69,6 +72,9 @@ const putObjectSerializer = async (
|
|
|
69
72
|
const url = new AmplifyUrl(endpoint.url.toString());
|
|
70
73
|
validateS3RequiredParameter(!!input.Key, 'Key');
|
|
71
74
|
url.pathname = serializePathnameObjectKey(url, input.Key);
|
|
75
|
+
url.search = new AmplifyUrlSearchParams({
|
|
76
|
+
'x-id': 'PutObject',
|
|
77
|
+
}).toString();
|
|
72
78
|
validateObjectUrl({
|
|
73
79
|
bucketName: input.Bucket,
|
|
74
80
|
key: input.Key,
|
|
@@ -87,8 +93,8 @@ const putObjectDeserializer = async (
|
|
|
87
93
|
response: HttpResponse,
|
|
88
94
|
): Promise<PutObjectOutput> => {
|
|
89
95
|
if (response.statusCode >= 300) {
|
|
90
|
-
|
|
91
|
-
throw buildStorageServiceError(
|
|
96
|
+
// error is always set when statusCode >= 300
|
|
97
|
+
throw buildStorageServiceError((await parseXmlError(response))!);
|
|
92
98
|
} else {
|
|
93
99
|
return {
|
|
94
100
|
...map(response.headers, {
|
|
@@ -84,8 +84,8 @@ const uploadPartDeserializer = async (
|
|
|
84
84
|
response: HttpResponse,
|
|
85
85
|
): Promise<UploadPartOutput> => {
|
|
86
86
|
if (response.statusCode >= 300) {
|
|
87
|
-
|
|
88
|
-
throw buildStorageServiceError(
|
|
87
|
+
// error is always set when statusCode >= 300
|
|
88
|
+
throw buildStorageServiceError((await parseXmlError(response))!);
|
|
89
89
|
} else {
|
|
90
90
|
return {
|
|
91
91
|
...map(response.headers, {
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
2
2
|
// SPDX-License-Identifier: Apache-2.0
|
|
3
3
|
|
|
4
|
-
import {
|
|
4
|
+
import {
|
|
5
|
+
ErrorParser,
|
|
6
|
+
Headers,
|
|
7
|
+
} from '@aws-amplify/core/internals/aws-client-utils';
|
|
5
8
|
import { ServiceError } from '@aws-amplify/core/internals/utils';
|
|
6
9
|
|
|
7
10
|
import { StorageError } from '../../../../../errors/StorageError';
|
|
@@ -183,26 +186,21 @@ export const deserializeMetadata = (
|
|
|
183
186
|
return Object.keys(deserialized).length > 0 ? deserialized : undefined;
|
|
184
187
|
};
|
|
185
188
|
|
|
189
|
+
export type ParsedError = Awaited<ReturnType<ErrorParser>> & {};
|
|
190
|
+
|
|
186
191
|
/**
|
|
187
|
-
* Internal-only method to create a new StorageError from a service error
|
|
192
|
+
* Internal-only method to create a new StorageError from a service error with AWS SDK-compatible interfaces
|
|
193
|
+
* @param error - The output of a service error parser, with AWS SDK-compatible interface(e.g. $metadata)
|
|
194
|
+
* @returns A new StorageError.
|
|
188
195
|
*
|
|
189
196
|
* @internal
|
|
190
197
|
*/
|
|
191
|
-
export const buildStorageServiceError = (
|
|
192
|
-
|
|
193
|
-
statusCode: number,
|
|
194
|
-
): ServiceError => {
|
|
195
|
-
const storageError = new StorageError({
|
|
198
|
+
export const buildStorageServiceError = (error: ParsedError): ServiceError =>
|
|
199
|
+
new StorageError({
|
|
196
200
|
name: error.name,
|
|
197
201
|
message: error.message,
|
|
202
|
+
metadata: error.$metadata,
|
|
198
203
|
});
|
|
199
|
-
if (statusCode === 404) {
|
|
200
|
-
storageError.recoverySuggestion =
|
|
201
|
-
'Please add the object with this key to the bucket as the key is not found.';
|
|
202
|
-
}
|
|
203
|
-
|
|
204
|
-
return storageError;
|
|
205
|
-
};
|
|
206
204
|
|
|
207
205
|
/**
|
|
208
206
|
* Internal-only method used for deserializing the parts of a multipart upload.
|