Skip to content

Commit c86ba44

Browse files
committed
fix(core/protocols): decorate service exceptions with unmodeled fields
1 parent 99f5f06 commit c86ba44

File tree

7 files changed

+82
-95
lines changed

7 files changed

+82
-95
lines changed

packages/core/src/submodules/protocols/ProtocolLib.ts

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { NormalizedSchema, TypeRegistry } from "@smithy/core/schema";
2+
import { decorateServiceException, ServiceException as SDKBaseServiceException } from "@smithy/smithy-client";
23
import type { HttpResponse as IHttpResponse, MetadataBearer, ResponseMetadata, StaticErrorSchema } from "@smithy/types";
34

45
/**
@@ -90,12 +91,27 @@ export class ProtocolLib {
9091
const baseExceptionSchema = synthetic.getBaseException();
9192
if (baseExceptionSchema) {
9293
const ErrorCtor = synthetic.getErrorCtor(baseExceptionSchema) ?? Error;
93-
throw Object.assign(new ErrorCtor({ name: errorName }), errorMetadata, dataObject);
94+
throw this.decorateServiceException(
95+
Object.assign(new ErrorCtor({ name: errorName }), errorMetadata),
96+
dataObject
97+
);
9498
}
95-
throw Object.assign(new Error(errorName), errorMetadata, dataObject);
99+
throw this.decorateServiceException(Object.assign(new Error(errorName), errorMetadata), dataObject);
96100
}
97101
}
98102

103+
/**
104+
* Assigns additions onto exception if not already present.
105+
* @param exception
106+
* @param additions
107+
*/
108+
public decorateServiceException<E extends SDKBaseServiceException>(
109+
exception: E,
110+
additions: Record<string, any> = {}
111+
): E {
112+
return decorateServiceException(exception, additions);
113+
}
114+
99115
/**
100116
* Reads the x-amzn-query-error header for awsQuery compatibility.
101117
*

packages/core/src/submodules/protocols/cbor/AwsSmithyRpcV2CborProtocol.ts

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -84,14 +84,17 @@ export class AwsSmithyRpcV2CborProtocol extends SmithyRpcV2CborProtocol {
8484
this.mixin.queryCompatOutput(dataObject, output);
8585
}
8686

87-
throw Object.assign(
88-
exception,
89-
errorMetadata,
90-
{
91-
$fault: ns.getMergedTraits().error,
92-
message,
93-
},
94-
output
87+
throw this.mixin.decorateServiceException(
88+
Object.assign(
89+
exception,
90+
errorMetadata,
91+
{
92+
$fault: ns.getMergedTraits().error,
93+
message,
94+
},
95+
output
96+
),
97+
dataObject
9598
);
9699
}
97100
}

packages/core/src/submodules/protocols/json/AwsJsonRpcProtocol.ts

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,9 @@ export abstract class AwsJsonRpcProtocol extends RpcProtocol {
8484

8585
protected abstract getJsonRpcVersion(): "1.1" | "1.0";
8686

87+
/**
88+
* @override
89+
*/
8790
protected async handleError(
8891
operationSchema: OperationSchema,
8992
context: HandlerExecutionContext & SerdeFunctions,
@@ -120,14 +123,17 @@ export abstract class AwsJsonRpcProtocol extends RpcProtocol {
120123
this.mixin.queryCompatOutput(dataObject, output);
121124
}
122125

123-
throw Object.assign(
124-
exception,
125-
errorMetadata,
126-
{
127-
$fault: ns.getMergedTraits().error,
128-
message,
129-
},
130-
output
126+
throw this.mixin.decorateServiceException(
127+
Object.assign(
128+
exception,
129+
errorMetadata,
130+
{
131+
$fault: ns.getMergedTraits().error,
132+
message,
133+
},
134+
output
135+
),
136+
dataObject
131137
);
132138
}
133139
}

packages/core/src/submodules/protocols/json/AwsRestJsonProtocol.ts

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -139,14 +139,17 @@ export class AwsRestJsonProtocol extends HttpBindingProtocol {
139139
output[name] = this.codec.createDeserializer().readObject(member, dataObject[target]);
140140
}
141141

142-
throw Object.assign(
143-
exception,
144-
errorMetadata,
145-
{
146-
$fault: ns.getMergedTraits().error,
147-
message,
148-
},
149-
output
142+
throw this.mixin.decorateServiceException(
143+
Object.assign(
144+
exception,
145+
errorMetadata,
146+
{
147+
$fault: ns.getMergedTraits().error,
148+
message,
149+
},
150+
output
151+
),
152+
dataObject
150153
);
151154
}
152155

packages/core/src/submodules/protocols/query/AwsQueryProtocol.ts

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,9 @@ export class AwsQueryProtocol extends RpcProtocol {
135135
return true;
136136
}
137137

138+
/**
139+
* override
140+
*/
138141
protected async handleError(
139142
operationSchema: OperationSchema,
140143
context: HandlerExecutionContext & SerdeFunctions,
@@ -183,14 +186,17 @@ export class AwsQueryProtocol extends RpcProtocol {
183186
output[name] = this.deserializer.readSchema(member, value);
184187
}
185188

186-
throw Object.assign(
187-
exception,
188-
errorMetadata,
189-
{
190-
$fault: ns.getMergedTraits().error,
191-
message,
192-
},
193-
output
189+
throw this.mixin.decorateServiceException(
190+
Object.assign(
191+
exception,
192+
errorMetadata,
193+
{
194+
$fault: ns.getMergedTraits().error,
195+
message,
196+
},
197+
output
198+
),
199+
dataObject
194200
);
195201
}
196202

packages/core/src/submodules/protocols/xml/AwsRestXmlProtocol.ts

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,9 @@ export class AwsRestXmlProtocol extends HttpBindingProtocol {
8989
return super.deserializeResponse<Output>(operationSchema, context, response);
9090
}
9191

92+
/**
93+
* @override
94+
*/
9295
protected async handleError(
9396
operationSchema: OperationSchema,
9497
context: HandlerExecutionContext & SerdeFunctions,
@@ -120,14 +123,17 @@ export class AwsRestXmlProtocol extends HttpBindingProtocol {
120123
output[name] = this.codec.createDeserializer().readSchema(member, value);
121124
}
122125

123-
throw Object.assign(
124-
exception,
125-
errorMetadata,
126-
{
127-
$fault: ns.getMergedTraits().error,
128-
message,
129-
},
130-
output
126+
throw this.mixin.decorateServiceException(
127+
Object.assign(
128+
exception,
129+
errorMetadata,
130+
{
131+
$fault: ns.getMergedTraits().error,
132+
message,
133+
},
134+
output
135+
),
136+
dataObject
131137
);
132138
}
133139

scripts/validation/api.json

Lines changed: 0 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -584,9 +584,6 @@
584584
"Upload": "function, since <=3.930.0"
585585
},
586586
"@aws-sdk/client-s3": {
587-
"AnalyticsFilter": "object, since <=3.930.0",
588-
"MetricsFilter": "object, since <=3.930.0",
589-
"SelectObjectContentEventStream": "object, since <=3.930.0",
590587
"$Command": "function, since <=3.930.0",
591588
"__Client": "function, since <=3.930.0",
592589
"AbortMultipartUploadCommand": "function, since <=3.930.0",
@@ -604,21 +601,13 @@
604601
"ChecksumMode": "object, since <=3.930.0",
605602
"ChecksumType": "object, since <=3.930.0",
606603
"CompleteMultipartUploadCommand": "function, since <=3.930.0",
607-
"CompleteMultipartUploadOutputFilterSensitiveLog": "function, since <=3.930.0",
608-
"CompleteMultipartUploadRequestFilterSensitiveLog": "function, since <=3.930.0",
609604
"CompressionType": "object, since <=3.930.0",
610605
"CopyObjectCommand": "function, since <=3.930.0",
611-
"CopyObjectOutputFilterSensitiveLog": "function, since <=3.930.0",
612-
"CopyObjectRequestFilterSensitiveLog": "function, since <=3.930.0",
613606
"CreateBucketCommand": "function, since <=3.930.0",
614607
"CreateBucketMetadataConfigurationCommand": "function, since <=3.930.0",
615608
"CreateBucketMetadataTableConfigurationCommand": "function, since <=3.930.0",
616609
"CreateMultipartUploadCommand": "function, since <=3.930.0",
617-
"CreateMultipartUploadOutputFilterSensitiveLog": "function, since <=3.930.0",
618-
"CreateMultipartUploadRequestFilterSensitiveLog": "function, since <=3.930.0",
619610
"CreateSessionCommand": "function, since <=3.930.0",
620-
"CreateSessionOutputFilterSensitiveLog": "function, since <=3.930.0",
621-
"CreateSessionRequestFilterSensitiveLog": "function, since <=3.930.0",
622611
"DataRedundancy": "object, since <=3.930.0",
623612
"DeleteBucketAnalyticsConfigurationCommand": "function, since <=3.930.0",
624613
"DeleteBucketCommand": "function, since <=3.930.0",
@@ -641,7 +630,6 @@
641630
"DeleteObjectsCommand": "function, since <=3.930.0",
642631
"DeletePublicAccessBlockCommand": "function, since <=3.930.0",
643632
"EncodingType": "object, since <=3.930.0",
644-
"EncryptionFilterSensitiveLog": "function, since <=3.930.0",
645633
"EncryptionTypeMismatch": "function, since <=3.930.0",
646634
"Event": "object, since <=3.930.0",
647635
"ExistingObjectReplicationStatus": "object, since <=3.930.0",
@@ -655,10 +643,8 @@
655643
"GetBucketAnalyticsConfigurationCommand": "function, since <=3.930.0",
656644
"GetBucketCorsCommand": "function, since <=3.930.0",
657645
"GetBucketEncryptionCommand": "function, since <=3.930.0",
658-
"GetBucketEncryptionOutputFilterSensitiveLog": "function, since <=3.930.0",
659646
"GetBucketIntelligentTieringConfigurationCommand": "function, since <=3.930.0",
660647
"GetBucketInventoryConfigurationCommand": "function, since <=3.930.0",
661-
"GetBucketInventoryConfigurationOutputFilterSensitiveLog": "function, since <=3.930.0",
662648
"GetBucketLifecycleConfigurationCommand": "function, since <=3.930.0",
663649
"GetBucketLocationCommand": "function, since <=3.930.0",
664650
"GetBucketLoggingCommand": "function, since <=3.930.0",
@@ -676,41 +662,30 @@
676662
"GetBucketWebsiteCommand": "function, since <=3.930.0",
677663
"GetObjectAclCommand": "function, since <=3.930.0",
678664
"GetObjectAttributesCommand": "function, since <=3.930.0",
679-
"GetObjectAttributesRequestFilterSensitiveLog": "function, since <=3.930.0",
680665
"GetObjectCommand": "function, since <=3.930.0",
681666
"GetObjectLegalHoldCommand": "function, since <=3.930.0",
682667
"GetObjectLockConfigurationCommand": "function, since <=3.930.0",
683-
"GetObjectOutputFilterSensitiveLog": "function, since <=3.930.0",
684-
"GetObjectRequestFilterSensitiveLog": "function, since <=3.930.0",
685668
"GetObjectRetentionCommand": "function, since <=3.930.0",
686669
"GetObjectTaggingCommand": "function, since <=3.930.0",
687670
"GetObjectTorrentCommand": "function, since <=3.930.0",
688-
"GetObjectTorrentOutputFilterSensitiveLog": "function, since <=3.930.0",
689671
"GetPublicAccessBlockCommand": "function, since <=3.930.0",
690672
"HeadBucketCommand": "function, since <=3.930.0",
691673
"HeadObjectCommand": "function, since <=3.930.0",
692-
"HeadObjectOutputFilterSensitiveLog": "function, since <=3.930.0",
693-
"HeadObjectRequestFilterSensitiveLog": "function, since <=3.930.0",
694674
"IdempotencyParameterMismatch": "function, since <=3.930.0",
695675
"IntelligentTieringAccessTier": "object, since <=3.930.0",
696676
"IntelligentTieringStatus": "object, since <=3.930.0",
697677
"InvalidObjectState": "function, since <=3.930.0",
698678
"InvalidRequest": "function, since <=3.930.0",
699679
"InvalidWriteOffset": "function, since <=3.930.0",
700-
"InventoryConfigurationFilterSensitiveLog": "function, since <=3.930.0",
701680
"InventoryConfigurationState": "object, since <=3.930.0",
702-
"InventoryDestinationFilterSensitiveLog": "function, since <=3.930.0",
703-
"InventoryEncryptionFilterSensitiveLog": "function, since <=3.930.0",
704681
"InventoryFormat": "object, since <=3.930.0",
705682
"InventoryFrequency": "object, since <=3.930.0",
706683
"InventoryIncludedObjectVersions": "object, since <=3.930.0",
707684
"InventoryOptionalField": "object, since <=3.930.0",
708-
"InventoryS3BucketDestinationFilterSensitiveLog": "function, since <=3.930.0",
709685
"JSONType": "object, since <=3.930.0",
710686
"ListBucketAnalyticsConfigurationsCommand": "function, since <=3.930.0",
711687
"ListBucketIntelligentTieringConfigurationsCommand": "function, since <=3.930.0",
712688
"ListBucketInventoryConfigurationsCommand": "function, since <=3.930.0",
713-
"ListBucketInventoryConfigurationsOutputFilterSensitiveLog": "function, since <=3.930.0",
714689
"ListBucketMetricsConfigurationsCommand": "function, since <=3.930.0",
715690
"ListBucketsCommand": "function, since <=3.930.0",
716691
"ListDirectoryBucketsCommand": "function, since <=3.930.0",
@@ -719,7 +694,6 @@
719694
"ListObjectsCommand": "function, since <=3.930.0",
720695
"ListObjectsV2Command": "function, since <=3.930.0",
721696
"ListPartsCommand": "function, since <=3.930.0",
722-
"ListPartsRequestFilterSensitiveLog": "function, since <=3.930.0",
723697
"LocationType": "object, since <=3.930.0",
724698
"MFADelete": "object, since <=3.930.0",
725699
"MFADeleteStatus": "object, since <=3.930.0",
@@ -741,7 +715,6 @@
741715
"ObjectStorageClass": "object, since <=3.930.0",
742716
"ObjectVersionStorageClass": "object, since <=3.930.0",
743717
"OptionalObjectAttributes": "object, since <=3.930.0",
744-
"OutputLocationFilterSensitiveLog": "function, since <=3.930.0",
745718
"OwnerOverride": "object, since <=3.930.0",
746719
"PartitionDateSource": "object, since <=3.930.0",
747720
"Payer": "object, since <=3.930.0",
@@ -752,10 +725,8 @@
752725
"PutBucketAnalyticsConfigurationCommand": "function, since <=3.930.0",
753726
"PutBucketCorsCommand": "function, since <=3.930.0",
754727
"PutBucketEncryptionCommand": "function, since <=3.930.0",
755-
"PutBucketEncryptionRequestFilterSensitiveLog": "function, since <=3.930.0",
756728
"PutBucketIntelligentTieringConfigurationCommand": "function, since <=3.930.0",
757729
"PutBucketInventoryConfigurationCommand": "function, since <=3.930.0",
758-
"PutBucketInventoryConfigurationRequestFilterSensitiveLog": "function, since <=3.930.0",
759730
"PutBucketLifecycleConfigurationCommand": "function, since <=3.930.0",
760731
"PutBucketLoggingCommand": "function, since <=3.930.0",
761732
"PutBucketMetricsConfigurationCommand": "function, since <=3.930.0",
@@ -771,8 +742,6 @@
771742
"PutObjectCommand": "function, since <=3.930.0",
772743
"PutObjectLegalHoldCommand": "function, since <=3.930.0",
773744
"PutObjectLockConfigurationCommand": "function, since <=3.930.0",
774-
"PutObjectOutputFilterSensitiveLog": "function, since <=3.930.0",
775-
"PutObjectRequestFilterSensitiveLog": "function, since <=3.930.0",
776745
"PutObjectRetentionCommand": "function, since <=3.930.0",
777746
"PutObjectTaggingCommand": "function, since <=3.930.0",
778747
"PutPublicAccessBlockCommand": "function, since <=3.930.0",
@@ -785,24 +754,13 @@
785754
"RequestCharged": "object, since <=3.930.0",
786755
"RequestPayer": "object, since <=3.930.0",
787756
"RestoreObjectCommand": "function, since <=3.930.0",
788-
"RestoreObjectRequestFilterSensitiveLog": "function, since <=3.930.0",
789-
"RestoreRequestFilterSensitiveLog": "function, since <=3.930.0",
790757
"RestoreRequestType": "object, since <=3.930.0",
791758
"S3": "function, since <=3.930.0",
792759
"S3Client": "function, since <=3.930.0",
793-
"S3LocationFilterSensitiveLog": "function, since <=3.930.0",
794760
"S3ServiceException": "function, since <=3.930.0",
795761
"S3TablesBucketType": "object, since <=3.930.0",
796-
"SSEKMSFilterSensitiveLog": "function, since <=3.930.0",
797762
"SelectObjectContentCommand": "function, since <=3.930.0",
798-
"SelectObjectContentEventStreamFilterSensitiveLog": "function, since <=3.930.0",
799-
"SelectObjectContentOutputFilterSensitiveLog": "function, since <=3.930.0",
800-
"SelectObjectContentRequestFilterSensitiveLog": "function, since <=3.930.0",
801763
"ServerSideEncryption": "object, since <=3.930.0",
802-
"ServerSideEncryptionByDefaultFilterSensitiveLog": "function, since <=3.930.0",
803-
"ServerSideEncryptionConfigurationFilterSensitiveLog": "function, since <=3.930.0",
804-
"ServerSideEncryptionRuleFilterSensitiveLog": "function, since <=3.930.0",
805-
"SessionCredentialsFilterSensitiveLog": "function, since <=3.930.0",
806764
"SessionMode": "object, since <=3.930.0",
807765
"SseKmsEncryptedObjectsStatus": "object, since <=3.930.0",
808766
"StorageClass": "object, since <=3.930.0",
@@ -818,12 +776,7 @@
818776
"UpdateBucketMetadataJournalTableConfigurationCommand": "function, since <=3.930.0",
819777
"UploadPartCommand": "function, since <=3.930.0",
820778
"UploadPartCopyCommand": "function, since <=3.930.0",
821-
"UploadPartCopyOutputFilterSensitiveLog": "function, since <=3.930.0",
822-
"UploadPartCopyRequestFilterSensitiveLog": "function, since <=3.930.0",
823-
"UploadPartOutputFilterSensitiveLog": "function, since <=3.930.0",
824-
"UploadPartRequestFilterSensitiveLog": "function, since <=3.930.0",
825779
"WriteGetObjectResponseCommand": "function, since <=3.930.0",
826-
"WriteGetObjectResponseRequestFilterSensitiveLog": "function, since <=3.930.0",
827780
"paginateListBuckets": "function, since <=3.930.0",
828781
"paginateListDirectoryBuckets": "function, since <=3.930.0",
829782
"paginateListObjectsV2": "function, since <=3.930.0",
@@ -838,9 +791,6 @@
838791
"waitUntilObjectNotExists": "function, since <=3.930.0"
839792
},
840793
"@aws-sdk/client-s3-control": {
841-
"ObjectLambdaContentTransformation": "object, since <=3.930.0",
842-
"ObjectEncryptionFilter": "object, since <=3.930.0",
843-
"JobManifestGenerator": "object, since <=3.930.0",
844794
"$Command": "function, since <=3.930.0",
845795
"__Client": "function, since <=3.930.0",
846796
"AssociateAccessGrantsIdentityCenterCommand": "function, since <=3.930.0",
@@ -862,7 +812,6 @@
862812
"CreateJobCommand": "function, since <=3.930.0",
863813
"CreateMultiRegionAccessPointCommand": "function, since <=3.930.0",
864814
"CreateStorageLensGroupCommand": "function, since <=3.930.0",
865-
"CredentialsFilterSensitiveLog": "function, since <=3.930.0",
866815
"DeleteAccessGrantCommand": "function, since <=3.930.0",
867816
"DeleteAccessGrantsInstanceCommand": "function, since <=3.930.0",
868817
"DeleteAccessGrantsInstanceResourcePolicyCommand": "function, since <=3.930.0",
@@ -911,7 +860,6 @@
911860
"GetBucketTaggingCommand": "function, since <=3.930.0",
912861
"GetBucketVersioningCommand": "function, since <=3.930.0",
913862
"GetDataAccessCommand": "function, since <=3.930.0",
914-
"GetDataAccessResultFilterSensitiveLog": "function, since <=3.930.0",
915863
"GetJobTaggingCommand": "function, since <=3.930.0",
916864
"GetMultiRegionAccessPointCommand": "function, since <=3.930.0",
917865
"GetMultiRegionAccessPointPolicyCommand": "function, since <=3.930.0",
@@ -1022,7 +970,6 @@
1022970
"paginateListStorageLensGroups": "function, since <=3.930.0"
1023971
},
1024972
"@aws-sdk/client-dynamodb": {
1025-
"AttributeValue": "object, since <=3.930.0",
1026973
"$Command": "function, since <=3.930.0",
1027974
"__Client": "function, since <=3.930.0",
1028975
"ApproximateCreationDateTimePrecision": "object, since <=3.930.0",

0 commit comments

Comments
 (0)