@jjrawlins/cdk-iam-policy-builder-helper 0.0.81 → 0.0.83

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 (51) hide show
  1. package/.jsii +3 -3
  2. package/cdkiampolicybuilderhelper/jsii/jsii.go +2 -2
  3. package/cdkiampolicybuilderhelper/version +1 -1
  4. package/lib/constructs/Actions.d.ts +26 -0
  5. package/lib/constructs/Actions.js +27 -1
  6. package/lib/constructs/ManagedPolicies.d.ts +16 -0
  7. package/lib/constructs/ManagedPolicies.js +17 -1
  8. package/methods_list.txt +24 -0
  9. package/node_modules/@aws-sdk/client-iam/package.json +5 -5
  10. package/node_modules/@aws-sdk/client-sso/package.json +4 -4
  11. package/node_modules/@aws-sdk/core/dist-cjs/index.js +44 -17
  12. package/node_modules/@aws-sdk/core/dist-cjs/submodules/protocols/index.js +44 -17
  13. package/node_modules/@aws-sdk/core/dist-es/submodules/protocols/ProtocolLib.js +19 -3
  14. package/node_modules/@aws-sdk/core/dist-es/submodules/protocols/cbor/AwsSmithyRpcV2CborProtocol.js +4 -3
  15. package/node_modules/@aws-sdk/core/dist-es/submodules/protocols/json/AwsJsonRpcProtocol.js +4 -3
  16. package/node_modules/@aws-sdk/core/dist-es/submodules/protocols/json/AwsRestJsonProtocol.js +13 -3
  17. package/node_modules/@aws-sdk/core/dist-es/submodules/protocols/query/AwsQueryProtocol.js +2 -2
  18. package/node_modules/@aws-sdk/core/dist-es/submodules/protocols/xml/AwsRestXmlProtocol.js +2 -2
  19. package/node_modules/@aws-sdk/core/dist-types/submodules/protocols/ProtocolLib.d.ts +7 -1
  20. package/node_modules/@aws-sdk/core/dist-types/submodules/protocols/json/AwsJsonRpcProtocol.d.ts +3 -0
  21. package/node_modules/@aws-sdk/core/dist-types/submodules/protocols/json/AwsRestJsonProtocol.d.ts +11 -1
  22. package/node_modules/@aws-sdk/core/dist-types/submodules/protocols/query/AwsQueryProtocol.d.ts +3 -0
  23. package/node_modules/@aws-sdk/core/dist-types/submodules/protocols/xml/AwsRestXmlProtocol.d.ts +3 -0
  24. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/ProtocolLib.d.ts +7 -1
  25. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/json/AwsRestJsonProtocol.d.ts +6 -0
  26. package/node_modules/@aws-sdk/core/package.json +1 -1
  27. package/node_modules/@aws-sdk/credential-provider-env/package.json +2 -2
  28. package/node_modules/@aws-sdk/credential-provider-http/package.json +2 -2
  29. package/node_modules/@aws-sdk/credential-provider-ini/package.json +8 -8
  30. package/node_modules/@aws-sdk/credential-provider-node/package.json +7 -7
  31. package/node_modules/@aws-sdk/credential-provider-process/package.json +2 -2
  32. package/node_modules/@aws-sdk/credential-provider-sso/package.json +4 -4
  33. package/node_modules/@aws-sdk/credential-provider-web-identity/package.json +3 -3
  34. package/node_modules/@aws-sdk/middleware-user-agent/package.json +2 -2
  35. package/node_modules/@aws-sdk/nested-clients/package.json +4 -4
  36. package/node_modules/@aws-sdk/token-providers/package.json +3 -3
  37. package/node_modules/@aws-sdk/util-user-agent-node/package.json +2 -2
  38. package/node_modules/@smithy/core/dist-cjs/submodules/cbor/index.js +0 -1
  39. package/node_modules/@smithy/core/dist-cjs/submodules/schema/index.js +3 -0
  40. package/node_modules/@smithy/core/dist-es/submodules/cbor/SmithyRpcV2CborProtocol.js +0 -1
  41. package/node_modules/@smithy/core/dist-es/submodules/schema/middleware/schemaDeserializationMiddleware.js +3 -0
  42. package/node_modules/@smithy/core/package.json +2 -2
  43. package/node_modules/@smithy/middleware-endpoint/package.json +3 -3
  44. package/node_modules/@smithy/middleware-retry/package.json +2 -2
  45. package/node_modules/@smithy/middleware-serde/dist-cjs/index.js +3 -0
  46. package/node_modules/@smithy/middleware-serde/dist-es/deserializerMiddleware.js +3 -0
  47. package/node_modules/@smithy/middleware-serde/package.json +1 -1
  48. package/node_modules/@smithy/smithy-client/package.json +3 -3
  49. package/node_modules/@smithy/util-defaults-mode-browser/package.json +2 -2
  50. package/node_modules/@smithy/util-defaults-mode-node/package.json +2 -2
  51. package/package.json +2 -2
package/methods_list.txt CHANGED
@@ -229,6 +229,21 @@ aiops:UpdateInvestigationEvent
229
229
  aiops:UpdateInvestigationGroup
230
230
  aiops:UpdateReport
231
231
  aiops:ValidateInvestigationGroup
232
+ airflow-serverless:CreateWorkflow
233
+ airflow-serverless:DeleteWorkflow
234
+ airflow-serverless:GetTaskInstance
235
+ airflow-serverless:GetWorkflow
236
+ airflow-serverless:GetWorkflowRun
237
+ airflow-serverless:ListTagsForResource
238
+ airflow-serverless:ListTaskInstances
239
+ airflow-serverless:ListWorkflowRuns
240
+ airflow-serverless:ListWorkflows
241
+ airflow-serverless:ListWorkflowVersions
242
+ airflow-serverless:StartWorkflowRun
243
+ airflow-serverless:StopWorkflowRun
244
+ airflow-serverless:TagResource
245
+ airflow-serverless:UntagResource
246
+ airflow-serverless:UpdateWorkflow
232
247
  airflow:CreateCliToken
233
248
  airflow:CreateEnvironment
234
249
  airflow:CreateWebLoginToken
@@ -2838,6 +2853,7 @@ cloudformation:EstimateTemplateCost
2838
2853
  cloudformation:ExecuteChangeSet
2839
2854
  cloudformation:ExecuteStackRefactor
2840
2855
  cloudformation:GetGeneratedTemplate
2856
+ cloudformation:GetHookResult
2841
2857
  cloudformation:GetResource
2842
2858
  cloudformation:GetResourceRequestStatus
2843
2859
  cloudformation:GetStackPolicy
@@ -8290,6 +8306,7 @@ glue:DescribeConnectionType
8290
8306
  glue:DescribeEntity
8291
8307
  glue:DescribeInboundIntegrations
8292
8308
  glue:DescribeIntegrations
8309
+ glue:FederateAuthorization
8293
8310
  glue:GetBlueprint
8294
8311
  glue:GetBlueprintRun
8295
8312
  glue:GetBlueprintRuns
@@ -8792,10 +8809,12 @@ health:DescribeHealthServiceStatusForOrganization
8792
8809
  health:DisableHealthServiceAccessForOrganization
8793
8810
  health:EnableHealthServiceAccessForOrganization
8794
8811
  healthlake:CancelFHIRExportJobWithDelete
8812
+ healthlake:ConfirmAttributionList
8795
8813
  healthlake:CreateFHIRDatastore
8796
8814
  healthlake:CreateResource
8797
8815
  healthlake:DeleteFHIRDatastore
8798
8816
  healthlake:DeleteResource
8817
+ healthlake:DescribeFHIRBulkDeleteJob
8799
8818
  healthlake:DescribeFHIRDatastore
8800
8819
  healthlake:DescribeFHIRExportJob
8801
8820
  healthlake:DescribeFHIRExportJobWithGet
@@ -8813,12 +8832,17 @@ healthlake:ListFHIRImportJobs
8813
8832
  healthlake:ListTagsForResource
8814
8833
  healthlake:LookupCodeSystemWithGet
8815
8834
  healthlake:LookupCodeSystemWithPost
8835
+ healthlake:MemberAdd
8836
+ healthlake:MemberMatch
8837
+ healthlake:MemberRemove
8816
8838
  healthlake:PatchResource
8817
8839
  healthlake:ProcessBundle
8818
8840
  healthlake:ReadResource
8841
+ healthlake:RetrieveAttributionStatus
8819
8842
  healthlake:SearchEverything
8820
8843
  healthlake:SearchWithGet
8821
8844
  healthlake:SearchWithPost
8845
+ healthlake:StartFHIRBulkDeleteJob
8822
8846
  healthlake:StartFHIRExportJob
8823
8847
  healthlake:StartFHIRExportJobWithGet
8824
8848
  healthlake:StartFHIRExportJobWithPost
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@aws-sdk/client-iam",
3
3
  "description": "AWS SDK for JavaScript Iam Client for Node.js, Browser and React Native",
4
- "version": "3.930.0",
4
+ "version": "3.932.0",
5
5
  "scripts": {
6
6
  "build": "concurrently 'yarn:build:cjs' 'yarn:build:es' 'yarn:build:types'",
7
7
  "build:cjs": "node ../../scripts/compilation/inline client-iam",
@@ -20,17 +20,17 @@
20
20
  "dependencies": {
21
21
  "@aws-crypto/sha256-browser": "5.2.0",
22
22
  "@aws-crypto/sha256-js": "5.2.0",
23
- "@aws-sdk/core": "3.930.0",
24
- "@aws-sdk/credential-provider-node": "3.930.0",
23
+ "@aws-sdk/core": "3.932.0",
24
+ "@aws-sdk/credential-provider-node": "3.932.0",
25
25
  "@aws-sdk/middleware-host-header": "3.930.0",
26
26
  "@aws-sdk/middleware-logger": "3.930.0",
27
27
  "@aws-sdk/middleware-recursion-detection": "3.930.0",
28
- "@aws-sdk/middleware-user-agent": "3.930.0",
28
+ "@aws-sdk/middleware-user-agent": "3.932.0",
29
29
  "@aws-sdk/region-config-resolver": "3.930.0",
30
30
  "@aws-sdk/types": "3.930.0",
31
31
  "@aws-sdk/util-endpoints": "3.930.0",
32
32
  "@aws-sdk/util-user-agent-browser": "3.930.0",
33
- "@aws-sdk/util-user-agent-node": "3.930.0",
33
+ "@aws-sdk/util-user-agent-node": "3.932.0",
34
34
  "@smithy/config-resolver": "^4.4.3",
35
35
  "@smithy/core": "^3.18.2",
36
36
  "@smithy/fetch-http-handler": "^5.3.6",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@aws-sdk/client-sso",
3
3
  "description": "AWS SDK for JavaScript Sso Client for Node.js, Browser and React Native",
4
- "version": "3.930.0",
4
+ "version": "3.932.0",
5
5
  "scripts": {
6
6
  "build": "concurrently 'yarn:build:cjs' 'yarn:build:es' 'yarn:build:types'",
7
7
  "build:cjs": "node ../../scripts/compilation/inline client-sso",
@@ -20,16 +20,16 @@
20
20
  "dependencies": {
21
21
  "@aws-crypto/sha256-browser": "5.2.0",
22
22
  "@aws-crypto/sha256-js": "5.2.0",
23
- "@aws-sdk/core": "3.930.0",
23
+ "@aws-sdk/core": "3.932.0",
24
24
  "@aws-sdk/middleware-host-header": "3.930.0",
25
25
  "@aws-sdk/middleware-logger": "3.930.0",
26
26
  "@aws-sdk/middleware-recursion-detection": "3.930.0",
27
- "@aws-sdk/middleware-user-agent": "3.930.0",
27
+ "@aws-sdk/middleware-user-agent": "3.932.0",
28
28
  "@aws-sdk/region-config-resolver": "3.930.0",
29
29
  "@aws-sdk/types": "3.930.0",
30
30
  "@aws-sdk/util-endpoints": "3.930.0",
31
31
  "@aws-sdk/util-user-agent-browser": "3.930.0",
32
- "@aws-sdk/util-user-agent-node": "3.930.0",
32
+ "@aws-sdk/util-user-agent-node": "3.932.0",
33
33
  "@smithy/config-resolver": "^4.4.3",
34
34
  "@smithy/core": "^3.18.2",
35
35
  "@smithy/fetch-http-handler": "^5.3.6",
@@ -7,10 +7,10 @@ var client = require('@aws-sdk/core/client');
7
7
  var signatureV4 = require('@smithy/signature-v4');
8
8
  var cbor = require('@smithy/core/cbor');
9
9
  var schema = require('@smithy/core/schema');
10
+ var smithyClient = require('@smithy/smithy-client');
10
11
  var protocols = require('@smithy/core/protocols');
11
12
  var serde = require('@smithy/core/serde');
12
13
  var utilBase64 = require('@smithy/util-base64');
13
- var smithyClient = require('@smithy/smithy-client');
14
14
  var utilUtf8 = require('@smithy/util-utf8');
15
15
  var xmlBuilder = require('@aws-sdk/xml-builder');
16
16
 
@@ -340,6 +340,10 @@ function bindCallerConfig(config, credentialsProvider) {
340
340
  }
341
341
 
342
342
  class ProtocolLib {
343
+ queryCompat;
344
+ constructor(queryCompat = false) {
345
+ this.queryCompat = queryCompat;
346
+ }
343
347
  resolveRestContentType(defaultContentType, inputSchema) {
344
348
  const members = inputSchema.getMemberSchemas();
345
349
  const httpPayloadMember = Object.values(members).find((m) => {
@@ -379,7 +383,6 @@ class ProtocolLib {
379
383
  }
380
384
  const errorMetadata = {
381
385
  $metadata: metadata,
382
- $response: response,
383
386
  $fault: response.statusCode < 500 ? "client" : "server",
384
387
  };
385
388
  const registry = schema.TypeRegistry.for(namespace);
@@ -393,11 +396,23 @@ class ProtocolLib {
393
396
  const baseExceptionSchema = synthetic.getBaseException();
394
397
  if (baseExceptionSchema) {
395
398
  const ErrorCtor = synthetic.getErrorCtor(baseExceptionSchema) ?? Error;
396
- throw Object.assign(new ErrorCtor({ name: errorName }), errorMetadata, dataObject);
399
+ throw this.decorateServiceException(Object.assign(new ErrorCtor({ name: errorName }), errorMetadata), dataObject);
397
400
  }
398
- throw Object.assign(new Error(errorName), errorMetadata, dataObject);
401
+ throw this.decorateServiceException(Object.assign(new Error(errorName), errorMetadata), dataObject);
399
402
  }
400
403
  }
404
+ decorateServiceException(exception, additions = {}) {
405
+ if (this.queryCompat) {
406
+ const msg = exception.Message ?? additions.Message;
407
+ const error = smithyClient.decorateServiceException(exception, additions);
408
+ if (msg) {
409
+ error.Message = msg;
410
+ error.message = msg;
411
+ }
412
+ return error;
413
+ }
414
+ return smithyClient.decorateServiceException(exception, additions);
415
+ }
401
416
  setQueryCompatError(output, response) {
402
417
  const queryErrorHeader = response.headers?.["x-amzn-query-error"];
403
418
  if (output !== undefined && queryErrorHeader != null) {
@@ -430,10 +445,11 @@ class ProtocolLib {
430
445
 
431
446
  class AwsSmithyRpcV2CborProtocol extends cbor.SmithyRpcV2CborProtocol {
432
447
  awsQueryCompatible;
433
- mixin = new ProtocolLib();
448
+ mixin;
434
449
  constructor({ defaultNamespace, awsQueryCompatible, }) {
435
450
  super({ defaultNamespace });
436
451
  this.awsQueryCompatible = !!awsQueryCompatible;
452
+ this.mixin = new ProtocolLib(this.awsQueryCompatible);
437
453
  }
438
454
  async serializeRequest(operationSchema, input, context) {
439
455
  const request = await super.serializeRequest(operationSchema, input, context);
@@ -459,10 +475,10 @@ class AwsSmithyRpcV2CborProtocol extends cbor.SmithyRpcV2CborProtocol {
459
475
  if (this.awsQueryCompatible) {
460
476
  this.mixin.queryCompatOutput(dataObject, output);
461
477
  }
462
- throw Object.assign(exception, errorMetadata, {
478
+ throw this.mixin.decorateServiceException(Object.assign(exception, errorMetadata, {
463
479
  $fault: ns.getMergedTraits().error,
464
480
  message,
465
- }, output);
481
+ }, output), dataObject);
466
482
  }
467
483
  }
468
484
 
@@ -907,7 +923,7 @@ class AwsJsonRpcProtocol extends protocols.RpcProtocol {
907
923
  deserializer;
908
924
  serviceTarget;
909
925
  codec;
910
- mixin = new ProtocolLib();
926
+ mixin;
911
927
  awsQueryCompatible;
912
928
  constructor({ defaultNamespace, serviceTarget, awsQueryCompatible, }) {
913
929
  super({
@@ -924,6 +940,7 @@ class AwsJsonRpcProtocol extends protocols.RpcProtocol {
924
940
  this.serializer = this.codec.createSerializer();
925
941
  this.deserializer = this.codec.createDeserializer();
926
942
  this.awsQueryCompatible = !!awsQueryCompatible;
943
+ this.mixin = new ProtocolLib(this.awsQueryCompatible);
927
944
  }
928
945
  async serializeRequest(operationSchema, input, context) {
929
946
  const request = await super.serializeRequest(operationSchema, input, context);
@@ -963,10 +980,10 @@ class AwsJsonRpcProtocol extends protocols.RpcProtocol {
963
980
  if (this.awsQueryCompatible) {
964
981
  this.mixin.queryCompatOutput(dataObject, output);
965
982
  }
966
- throw Object.assign(exception, errorMetadata, {
983
+ throw this.mixin.decorateServiceException(Object.assign(exception, errorMetadata, {
967
984
  $fault: ns.getMergedTraits().error,
968
985
  message,
969
- }, output);
986
+ }, output), dataObject);
970
987
  }
971
988
  }
972
989
 
@@ -1048,11 +1065,21 @@ class AwsRestJsonProtocol extends protocols.HttpBindingProtocol {
1048
1065
  request.headers["content-type"] = contentType;
1049
1066
  }
1050
1067
  }
1051
- if (request.headers["content-type"] && !request.body) {
1068
+ if (request.body == null && request.headers["content-type"] === this.getDefaultContentType()) {
1052
1069
  request.body = "{}";
1053
1070
  }
1054
1071
  return request;
1055
1072
  }
1073
+ async deserializeResponse(operationSchema, context, response) {
1074
+ const output = await super.deserializeResponse(operationSchema, context, response);
1075
+ const outputSchema = schema.NormalizedSchema.of(operationSchema.output);
1076
+ for (const [name, member] of outputSchema.structIterator()) {
1077
+ if (member.getMemberTraits().httpPayload && !(name in output)) {
1078
+ output[name] = null;
1079
+ }
1080
+ }
1081
+ return output;
1082
+ }
1056
1083
  async handleError(operationSchema, context, response, dataObject, metadata) {
1057
1084
  const errorIdentifier = loadRestJsonErrorCode(response, dataObject) ?? "Unknown";
1058
1085
  const { errorSchema, errorMetadata } = await this.mixin.getErrorSchemaOrThrowBaseException(errorIdentifier, this.options.defaultNamespace, response, dataObject, metadata);
@@ -1066,10 +1093,10 @@ class AwsRestJsonProtocol extends protocols.HttpBindingProtocol {
1066
1093
  const target = member.getMergedTraits().jsonName ?? name;
1067
1094
  output[name] = this.codec.createDeserializer().readObject(member, dataObject[target]);
1068
1095
  }
1069
- throw Object.assign(exception, errorMetadata, {
1096
+ throw this.mixin.decorateServiceException(Object.assign(exception, errorMetadata, {
1070
1097
  $fault: ns.getMergedTraits().error,
1071
1098
  message,
1072
- }, output);
1099
+ }, output), dataObject);
1073
1100
  }
1074
1101
  getDefaultContentType() {
1075
1102
  return "application/json";
@@ -1485,10 +1512,10 @@ class AwsQueryProtocol extends protocols.RpcProtocol {
1485
1512
  const value = errorData[target] ?? dataObject[target];
1486
1513
  output[name] = this.deserializer.readSchema(member, value);
1487
1514
  }
1488
- throw Object.assign(exception, errorMetadata, {
1515
+ throw this.mixin.decorateServiceException(Object.assign(exception, errorMetadata, {
1489
1516
  $fault: ns.getMergedTraits().error,
1490
1517
  message,
1491
- }, output);
1518
+ }, output), dataObject);
1492
1519
  }
1493
1520
  loadQueryErrorCode(output, data) {
1494
1521
  const code = (data.Errors?.[0]?.Error ?? data.Errors?.Error ?? data.Error)?.Code;
@@ -1922,10 +1949,10 @@ class AwsRestXmlProtocol extends protocols.HttpBindingProtocol {
1922
1949
  const value = dataObject.Error?.[target] ?? dataObject[target];
1923
1950
  output[name] = this.codec.createDeserializer().readSchema(member, value);
1924
1951
  }
1925
- throw Object.assign(exception, errorMetadata, {
1952
+ throw this.mixin.decorateServiceException(Object.assign(exception, errorMetadata, {
1926
1953
  $fault: ns.getMergedTraits().error,
1927
1954
  message,
1928
- }, output);
1955
+ }, output), dataObject);
1929
1956
  }
1930
1957
  getDefaultContentType() {
1931
1958
  return "application/xml";
@@ -2,14 +2,18 @@
2
2
 
3
3
  var cbor = require('@smithy/core/cbor');
4
4
  var schema = require('@smithy/core/schema');
5
+ var smithyClient = require('@smithy/smithy-client');
5
6
  var protocols = require('@smithy/core/protocols');
6
7
  var serde = require('@smithy/core/serde');
7
8
  var utilBase64 = require('@smithy/util-base64');
8
- var smithyClient = require('@smithy/smithy-client');
9
9
  var utilUtf8 = require('@smithy/util-utf8');
10
10
  var xmlBuilder = require('@aws-sdk/xml-builder');
11
11
 
12
12
  class ProtocolLib {
13
+ queryCompat;
14
+ constructor(queryCompat = false) {
15
+ this.queryCompat = queryCompat;
16
+ }
13
17
  resolveRestContentType(defaultContentType, inputSchema) {
14
18
  const members = inputSchema.getMemberSchemas();
15
19
  const httpPayloadMember = Object.values(members).find((m) => {
@@ -49,7 +53,6 @@ class ProtocolLib {
49
53
  }
50
54
  const errorMetadata = {
51
55
  $metadata: metadata,
52
- $response: response,
53
56
  $fault: response.statusCode < 500 ? "client" : "server",
54
57
  };
55
58
  const registry = schema.TypeRegistry.for(namespace);
@@ -63,11 +66,23 @@ class ProtocolLib {
63
66
  const baseExceptionSchema = synthetic.getBaseException();
64
67
  if (baseExceptionSchema) {
65
68
  const ErrorCtor = synthetic.getErrorCtor(baseExceptionSchema) ?? Error;
66
- throw Object.assign(new ErrorCtor({ name: errorName }), errorMetadata, dataObject);
69
+ throw this.decorateServiceException(Object.assign(new ErrorCtor({ name: errorName }), errorMetadata), dataObject);
67
70
  }
68
- throw Object.assign(new Error(errorName), errorMetadata, dataObject);
71
+ throw this.decorateServiceException(Object.assign(new Error(errorName), errorMetadata), dataObject);
69
72
  }
70
73
  }
74
+ decorateServiceException(exception, additions = {}) {
75
+ if (this.queryCompat) {
76
+ const msg = exception.Message ?? additions.Message;
77
+ const error = smithyClient.decorateServiceException(exception, additions);
78
+ if (msg) {
79
+ error.Message = msg;
80
+ error.message = msg;
81
+ }
82
+ return error;
83
+ }
84
+ return smithyClient.decorateServiceException(exception, additions);
85
+ }
71
86
  setQueryCompatError(output, response) {
72
87
  const queryErrorHeader = response.headers?.["x-amzn-query-error"];
73
88
  if (output !== undefined && queryErrorHeader != null) {
@@ -100,10 +115,11 @@ class ProtocolLib {
100
115
 
101
116
  class AwsSmithyRpcV2CborProtocol extends cbor.SmithyRpcV2CborProtocol {
102
117
  awsQueryCompatible;
103
- mixin = new ProtocolLib();
118
+ mixin;
104
119
  constructor({ defaultNamespace, awsQueryCompatible, }) {
105
120
  super({ defaultNamespace });
106
121
  this.awsQueryCompatible = !!awsQueryCompatible;
122
+ this.mixin = new ProtocolLib(this.awsQueryCompatible);
107
123
  }
108
124
  async serializeRequest(operationSchema, input, context) {
109
125
  const request = await super.serializeRequest(operationSchema, input, context);
@@ -129,10 +145,10 @@ class AwsSmithyRpcV2CborProtocol extends cbor.SmithyRpcV2CborProtocol {
129
145
  if (this.awsQueryCompatible) {
130
146
  this.mixin.queryCompatOutput(dataObject, output);
131
147
  }
132
- throw Object.assign(exception, errorMetadata, {
148
+ throw this.mixin.decorateServiceException(Object.assign(exception, errorMetadata, {
133
149
  $fault: ns.getMergedTraits().error,
134
150
  message,
135
- }, output);
151
+ }, output), dataObject);
136
152
  }
137
153
  }
138
154
 
@@ -577,7 +593,7 @@ class AwsJsonRpcProtocol extends protocols.RpcProtocol {
577
593
  deserializer;
578
594
  serviceTarget;
579
595
  codec;
580
- mixin = new ProtocolLib();
596
+ mixin;
581
597
  awsQueryCompatible;
582
598
  constructor({ defaultNamespace, serviceTarget, awsQueryCompatible, }) {
583
599
  super({
@@ -594,6 +610,7 @@ class AwsJsonRpcProtocol extends protocols.RpcProtocol {
594
610
  this.serializer = this.codec.createSerializer();
595
611
  this.deserializer = this.codec.createDeserializer();
596
612
  this.awsQueryCompatible = !!awsQueryCompatible;
613
+ this.mixin = new ProtocolLib(this.awsQueryCompatible);
597
614
  }
598
615
  async serializeRequest(operationSchema, input, context) {
599
616
  const request = await super.serializeRequest(operationSchema, input, context);
@@ -633,10 +650,10 @@ class AwsJsonRpcProtocol extends protocols.RpcProtocol {
633
650
  if (this.awsQueryCompatible) {
634
651
  this.mixin.queryCompatOutput(dataObject, output);
635
652
  }
636
- throw Object.assign(exception, errorMetadata, {
653
+ throw this.mixin.decorateServiceException(Object.assign(exception, errorMetadata, {
637
654
  $fault: ns.getMergedTraits().error,
638
655
  message,
639
- }, output);
656
+ }, output), dataObject);
640
657
  }
641
658
  }
642
659
 
@@ -718,11 +735,21 @@ class AwsRestJsonProtocol extends protocols.HttpBindingProtocol {
718
735
  request.headers["content-type"] = contentType;
719
736
  }
720
737
  }
721
- if (request.headers["content-type"] && !request.body) {
738
+ if (request.body == null && request.headers["content-type"] === this.getDefaultContentType()) {
722
739
  request.body = "{}";
723
740
  }
724
741
  return request;
725
742
  }
743
+ async deserializeResponse(operationSchema, context, response) {
744
+ const output = await super.deserializeResponse(operationSchema, context, response);
745
+ const outputSchema = schema.NormalizedSchema.of(operationSchema.output);
746
+ for (const [name, member] of outputSchema.structIterator()) {
747
+ if (member.getMemberTraits().httpPayload && !(name in output)) {
748
+ output[name] = null;
749
+ }
750
+ }
751
+ return output;
752
+ }
726
753
  async handleError(operationSchema, context, response, dataObject, metadata) {
727
754
  const errorIdentifier = loadRestJsonErrorCode(response, dataObject) ?? "Unknown";
728
755
  const { errorSchema, errorMetadata } = await this.mixin.getErrorSchemaOrThrowBaseException(errorIdentifier, this.options.defaultNamespace, response, dataObject, metadata);
@@ -736,10 +763,10 @@ class AwsRestJsonProtocol extends protocols.HttpBindingProtocol {
736
763
  const target = member.getMergedTraits().jsonName ?? name;
737
764
  output[name] = this.codec.createDeserializer().readObject(member, dataObject[target]);
738
765
  }
739
- throw Object.assign(exception, errorMetadata, {
766
+ throw this.mixin.decorateServiceException(Object.assign(exception, errorMetadata, {
740
767
  $fault: ns.getMergedTraits().error,
741
768
  message,
742
- }, output);
769
+ }, output), dataObject);
743
770
  }
744
771
  getDefaultContentType() {
745
772
  return "application/json";
@@ -1155,10 +1182,10 @@ class AwsQueryProtocol extends protocols.RpcProtocol {
1155
1182
  const value = errorData[target] ?? dataObject[target];
1156
1183
  output[name] = this.deserializer.readSchema(member, value);
1157
1184
  }
1158
- throw Object.assign(exception, errorMetadata, {
1185
+ throw this.mixin.decorateServiceException(Object.assign(exception, errorMetadata, {
1159
1186
  $fault: ns.getMergedTraits().error,
1160
1187
  message,
1161
- }, output);
1188
+ }, output), dataObject);
1162
1189
  }
1163
1190
  loadQueryErrorCode(output, data) {
1164
1191
  const code = (data.Errors?.[0]?.Error ?? data.Errors?.Error ?? data.Error)?.Code;
@@ -1592,10 +1619,10 @@ class AwsRestXmlProtocol extends protocols.HttpBindingProtocol {
1592
1619
  const value = dataObject.Error?.[target] ?? dataObject[target];
1593
1620
  output[name] = this.codec.createDeserializer().readSchema(member, value);
1594
1621
  }
1595
- throw Object.assign(exception, errorMetadata, {
1622
+ throw this.mixin.decorateServiceException(Object.assign(exception, errorMetadata, {
1596
1623
  $fault: ns.getMergedTraits().error,
1597
1624
  message,
1598
- }, output);
1625
+ }, output), dataObject);
1599
1626
  }
1600
1627
  getDefaultContentType() {
1601
1628
  return "application/xml";
@@ -1,5 +1,10 @@
1
1
  import { TypeRegistry } from "@smithy/core/schema";
2
+ import { decorateServiceException } from "@smithy/smithy-client";
2
3
  export class ProtocolLib {
4
+ queryCompat;
5
+ constructor(queryCompat = false) {
6
+ this.queryCompat = queryCompat;
7
+ }
3
8
  resolveRestContentType(defaultContentType, inputSchema) {
4
9
  const members = inputSchema.getMemberSchemas();
5
10
  const httpPayloadMember = Object.values(members).find((m) => {
@@ -39,7 +44,6 @@ export class ProtocolLib {
39
44
  }
40
45
  const errorMetadata = {
41
46
  $metadata: metadata,
42
- $response: response,
43
47
  $fault: response.statusCode < 500 ? "client" : "server",
44
48
  };
45
49
  const registry = TypeRegistry.for(namespace);
@@ -53,10 +57,22 @@ export class ProtocolLib {
53
57
  const baseExceptionSchema = synthetic.getBaseException();
54
58
  if (baseExceptionSchema) {
55
59
  const ErrorCtor = synthetic.getErrorCtor(baseExceptionSchema) ?? Error;
56
- throw Object.assign(new ErrorCtor({ name: errorName }), errorMetadata, dataObject);
60
+ throw this.decorateServiceException(Object.assign(new ErrorCtor({ name: errorName }), errorMetadata), dataObject);
61
+ }
62
+ throw this.decorateServiceException(Object.assign(new Error(errorName), errorMetadata), dataObject);
63
+ }
64
+ }
65
+ decorateServiceException(exception, additions = {}) {
66
+ if (this.queryCompat) {
67
+ const msg = exception.Message ?? additions.Message;
68
+ const error = decorateServiceException(exception, additions);
69
+ if (msg) {
70
+ error.Message = msg;
71
+ error.message = msg;
57
72
  }
58
- throw Object.assign(new Error(errorName), errorMetadata, dataObject);
73
+ return error;
59
74
  }
75
+ return decorateServiceException(exception, additions);
60
76
  }
61
77
  setQueryCompatError(output, response) {
62
78
  const queryErrorHeader = response.headers?.["x-amzn-query-error"];
@@ -3,10 +3,11 @@ import { NormalizedSchema, TypeRegistry } from "@smithy/core/schema";
3
3
  import { ProtocolLib } from "../ProtocolLib";
4
4
  export class AwsSmithyRpcV2CborProtocol extends SmithyRpcV2CborProtocol {
5
5
  awsQueryCompatible;
6
- mixin = new ProtocolLib();
6
+ mixin;
7
7
  constructor({ defaultNamespace, awsQueryCompatible, }) {
8
8
  super({ defaultNamespace });
9
9
  this.awsQueryCompatible = !!awsQueryCompatible;
10
+ this.mixin = new ProtocolLib(this.awsQueryCompatible);
10
11
  }
11
12
  async serializeRequest(operationSchema, input, context) {
12
13
  const request = await super.serializeRequest(operationSchema, input, context);
@@ -32,9 +33,9 @@ export class AwsSmithyRpcV2CborProtocol extends SmithyRpcV2CborProtocol {
32
33
  if (this.awsQueryCompatible) {
33
34
  this.mixin.queryCompatOutput(dataObject, output);
34
35
  }
35
- throw Object.assign(exception, errorMetadata, {
36
+ throw this.mixin.decorateServiceException(Object.assign(exception, errorMetadata, {
36
37
  $fault: ns.getMergedTraits().error,
37
38
  message,
38
- }, output);
39
+ }, output), dataObject);
39
40
  }
40
41
  }
@@ -8,7 +8,7 @@ export class AwsJsonRpcProtocol extends RpcProtocol {
8
8
  deserializer;
9
9
  serviceTarget;
10
10
  codec;
11
- mixin = new ProtocolLib();
11
+ mixin;
12
12
  awsQueryCompatible;
13
13
  constructor({ defaultNamespace, serviceTarget, awsQueryCompatible, }) {
14
14
  super({
@@ -25,6 +25,7 @@ export class AwsJsonRpcProtocol extends RpcProtocol {
25
25
  this.serializer = this.codec.createSerializer();
26
26
  this.deserializer = this.codec.createDeserializer();
27
27
  this.awsQueryCompatible = !!awsQueryCompatible;
28
+ this.mixin = new ProtocolLib(this.awsQueryCompatible);
28
29
  }
29
30
  async serializeRequest(operationSchema, input, context) {
30
31
  const request = await super.serializeRequest(operationSchema, input, context);
@@ -64,9 +65,9 @@ export class AwsJsonRpcProtocol extends RpcProtocol {
64
65
  if (this.awsQueryCompatible) {
65
66
  this.mixin.queryCompatOutput(dataObject, output);
66
67
  }
67
- throw Object.assign(exception, errorMetadata, {
68
+ throw this.mixin.decorateServiceException(Object.assign(exception, errorMetadata, {
68
69
  $fault: ns.getMergedTraits().error,
69
70
  message,
70
- }, output);
71
+ }, output), dataObject);
71
72
  }
72
73
  }
@@ -43,11 +43,21 @@ export class AwsRestJsonProtocol extends HttpBindingProtocol {
43
43
  request.headers["content-type"] = contentType;
44
44
  }
45
45
  }
46
- if (request.headers["content-type"] && !request.body) {
46
+ if (request.body == null && request.headers["content-type"] === this.getDefaultContentType()) {
47
47
  request.body = "{}";
48
48
  }
49
49
  return request;
50
50
  }
51
+ async deserializeResponse(operationSchema, context, response) {
52
+ const output = await super.deserializeResponse(operationSchema, context, response);
53
+ const outputSchema = NormalizedSchema.of(operationSchema.output);
54
+ for (const [name, member] of outputSchema.structIterator()) {
55
+ if (member.getMemberTraits().httpPayload && !(name in output)) {
56
+ output[name] = null;
57
+ }
58
+ }
59
+ return output;
60
+ }
51
61
  async handleError(operationSchema, context, response, dataObject, metadata) {
52
62
  const errorIdentifier = loadRestJsonErrorCode(response, dataObject) ?? "Unknown";
53
63
  const { errorSchema, errorMetadata } = await this.mixin.getErrorSchemaOrThrowBaseException(errorIdentifier, this.options.defaultNamespace, response, dataObject, metadata);
@@ -61,10 +71,10 @@ export class AwsRestJsonProtocol extends HttpBindingProtocol {
61
71
  const target = member.getMergedTraits().jsonName ?? name;
62
72
  output[name] = this.codec.createDeserializer().readObject(member, dataObject[target]);
63
73
  }
64
- throw Object.assign(exception, errorMetadata, {
74
+ throw this.mixin.decorateServiceException(Object.assign(exception, errorMetadata, {
65
75
  $fault: ns.getMergedTraits().error,
66
76
  message,
67
- }, output);
77
+ }, output), dataObject);
68
78
  }
69
79
  getDefaultContentType() {
70
80
  return "application/json";
@@ -114,10 +114,10 @@ export class AwsQueryProtocol extends RpcProtocol {
114
114
  const value = errorData[target] ?? dataObject[target];
115
115
  output[name] = this.deserializer.readSchema(member, value);
116
116
  }
117
- throw Object.assign(exception, errorMetadata, {
117
+ throw this.mixin.decorateServiceException(Object.assign(exception, errorMetadata, {
118
118
  $fault: ns.getMergedTraits().error,
119
119
  message,
120
- }, output);
120
+ }, output), dataObject);
121
121
  }
122
122
  loadQueryErrorCode(output, data) {
123
123
  const code = (data.Errors?.[0]?.Error ?? data.Errors?.Error ?? data.Error)?.Code;
@@ -62,10 +62,10 @@ export class AwsRestXmlProtocol extends HttpBindingProtocol {
62
62
  const value = dataObject.Error?.[target] ?? dataObject[target];
63
63
  output[name] = this.codec.createDeserializer().readSchema(member, value);
64
64
  }
65
- throw Object.assign(exception, errorMetadata, {
65
+ throw this.mixin.decorateServiceException(Object.assign(exception, errorMetadata, {
66
66
  $fault: ns.getMergedTraits().error,
67
67
  message,
68
- }, output);
68
+ }, output), dataObject);
69
69
  }
70
70
  getDefaultContentType() {
71
71
  return "application/xml";
@@ -1,10 +1,10 @@
1
1
  import { NormalizedSchema, TypeRegistry } from "@smithy/core/schema";
2
+ import { ServiceException as SDKBaseServiceException } from "@smithy/smithy-client";
2
3
  import type { HttpResponse as IHttpResponse, MetadataBearer, ResponseMetadata, StaticErrorSchema } from "@smithy/types";
3
4
  /**
4
5
  * @internal
5
6
  */
6
7
  type ErrorMetadataBearer = MetadataBearer & {
7
- $response: IHttpResponse;
8
8
  $fault: "client" | "server";
9
9
  };
10
10
  /**
@@ -13,6 +13,8 @@ type ErrorMetadataBearer = MetadataBearer & {
13
13
  * @internal
14
14
  */
15
15
  export declare class ProtocolLib {
16
+ private queryCompat;
17
+ constructor(queryCompat?: boolean);
16
18
  /**
17
19
  * This is only for REST protocols.
18
20
  *
@@ -32,6 +34,10 @@ export declare class ProtocolLib {
32
34
  errorSchema: StaticErrorSchema;
33
35
  errorMetadata: ErrorMetadataBearer;
34
36
  }>;
37
+ /**
38
+ * Assigns additions onto exception if not already present.
39
+ */
40
+ decorateServiceException<E extends SDKBaseServiceException>(exception: E, additions?: Record<string, any>): E;
35
41
  /**
36
42
  * Reads the x-amzn-query-error header for awsQuery compatibility.
37
43
  *