@cdk8s/awscdk-resolver 0.0.691 → 0.0.693

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 (77) hide show
  1. package/.jsii +3 -3
  2. package/lib/resolve.js +1 -1
  3. package/node_modules/@aws-sdk/client-cloudformation/dist-cjs/index.js +3 -3
  4. package/node_modules/@aws-sdk/client-cloudformation/dist-es/schemas/schemas_0.js +2 -2
  5. package/node_modules/@aws-sdk/client-cloudformation/dist-types/CloudFormation.d.ts +187 -181
  6. package/node_modules/@aws-sdk/client-cloudformation/dist-types/ts3.4/CloudFormation.d.ts +184 -180
  7. package/node_modules/@aws-sdk/client-cloudformation/package.json +8 -8
  8. package/node_modules/@aws-sdk/core/package.json +6 -6
  9. package/node_modules/@aws-sdk/credential-provider-env/package.json +5 -5
  10. package/node_modules/@aws-sdk/credential-provider-http/package.json +7 -7
  11. package/node_modules/@aws-sdk/credential-provider-ini/package.json +13 -13
  12. package/node_modules/@aws-sdk/credential-provider-login/package.json +6 -6
  13. package/node_modules/@aws-sdk/credential-provider-node/package.json +11 -11
  14. package/node_modules/@aws-sdk/credential-provider-process/package.json +5 -5
  15. package/node_modules/@aws-sdk/credential-provider-sso/package.json +7 -7
  16. package/node_modules/@aws-sdk/credential-provider-web-identity/package.json +6 -6
  17. package/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/cognito-identity/index.js +3 -3
  18. package/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/signin/index.js +3 -3
  19. package/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/sso/index.js +3 -3
  20. package/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/sso-oidc/index.js +3 -3
  21. package/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/sts/index.js +14 -11
  22. package/node_modules/@aws-sdk/nested-clients/dist-es/submodules/cognito-identity/schemas/schemas_0.js +2 -2
  23. package/node_modules/@aws-sdk/nested-clients/dist-es/submodules/signin/schemas/schemas_0.js +2 -2
  24. package/node_modules/@aws-sdk/nested-clients/dist-es/submodules/sso/schemas/schemas_0.js +2 -2
  25. package/node_modules/@aws-sdk/nested-clients/dist-es/submodules/sso-oidc/schemas/schemas_0.js +2 -2
  26. package/node_modules/@aws-sdk/nested-clients/dist-es/submodules/sts/schemas/schemas_0.js +13 -10
  27. package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/cognito-identity/CognitoIdentity.d.ts +11 -5
  28. package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/signin/Signin.d.ts +11 -5
  29. package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sso/SSO.d.ts +9 -3
  30. package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sso-oidc/SSOOIDC.d.ts +9 -3
  31. package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sts/STS.d.ts +33 -8
  32. package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sts/STSClient.d.ts +22 -3
  33. package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sts/commands/AssumeRoleCommand.d.ts +3 -0
  34. package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sts/commands/AssumeRoleWithWebIdentityCommand.d.ts +3 -0
  35. package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sts/index.d.ts +22 -3
  36. package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sts/models/models_0.d.ts +40 -0
  37. package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/cognito-identity/CognitoIdentity.d.ts +14 -5
  38. package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/signin/Signin.d.ts +11 -5
  39. package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sso/SSO.d.ts +9 -3
  40. package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sso-oidc/SSOOIDC.d.ts +9 -3
  41. package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sts/STS.d.ts +11 -5
  42. package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sts/models/models_0.d.ts +6 -0
  43. package/node_modules/@aws-sdk/nested-clients/package.json +8 -8
  44. package/node_modules/@aws-sdk/signature-v4-multi-region/package.json +4 -4
  45. package/node_modules/@aws-sdk/token-providers/package.json +6 -6
  46. package/node_modules/@aws-sdk/types/dist-types/feature-ids.d.ts +1 -0
  47. package/node_modules/@aws-sdk/types/dist-types/ts3.4/feature-ids.d.ts +1 -0
  48. package/node_modules/@aws-sdk/types/package.json +2 -2
  49. package/node_modules/@aws-sdk/xml-builder/package.json +2 -2
  50. package/node_modules/@smithy/core/dist-cjs/submodules/cbor/index.js +22 -37
  51. package/node_modules/@smithy/core/dist-cjs/submodules/client/index.js +26 -4
  52. package/node_modules/@smithy/core/dist-cjs/submodules/protocols/index.js +49 -8
  53. package/node_modules/@smithy/core/dist-cjs/submodules/schema/index.js +12 -7
  54. package/node_modules/@smithy/core/dist-es/submodules/cbor/SmithyRpcV2CborProtocol.js +22 -22
  55. package/node_modules/@smithy/core/dist-es/submodules/cbor/parseCborBody.js +0 -15
  56. package/node_modules/@smithy/core/dist-es/submodules/client/index.js +1 -1
  57. package/node_modules/@smithy/core/dist-es/submodules/client/smithy-client/command.js +8 -1
  58. package/node_modules/@smithy/core/dist-es/submodules/client/smithy-client/exceptions.js +18 -3
  59. package/node_modules/@smithy/core/dist-es/submodules/protocols/HttpProtocol.js +49 -8
  60. package/node_modules/@smithy/core/dist-es/submodules/schema/TypeRegistry.js +12 -7
  61. package/node_modules/@smithy/core/dist-types/submodules/cbor/parseCborBody.d.ts +3 -0
  62. package/node_modules/@smithy/core/dist-types/submodules/client/index.d.ts +1 -1
  63. package/node_modules/@smithy/core/dist-types/submodules/client/smithy-client/client.d.ts +11 -3
  64. package/node_modules/@smithy/core/dist-types/submodules/protocols/HttpProtocol.d.ts +17 -7
  65. package/node_modules/@smithy/core/dist-types/submodules/schema/TypeRegistry.d.ts +2 -2
  66. package/node_modules/@smithy/core/dist-types/ts3.4/submodules/cbor/parseCborBody.d.ts +3 -0
  67. package/node_modules/@smithy/core/dist-types/ts3.4/submodules/client/index.d.ts +1 -1
  68. package/node_modules/@smithy/core/dist-types/ts3.4/submodules/client/smithy-client/client.d.ts +11 -3
  69. package/node_modules/@smithy/core/dist-types/ts3.4/submodules/protocols/HttpProtocol.d.ts +21 -7
  70. package/node_modules/@smithy/core/dist-types/ts3.4/submodules/schema/TypeRegistry.d.ts +2 -2
  71. package/node_modules/@smithy/core/package.json +2 -2
  72. package/node_modules/@smithy/types/dist-types/metrics.d.ts +8 -7
  73. package/node_modules/@smithy/types/dist-types/middleware.d.ts +5 -0
  74. package/node_modules/@smithy/types/dist-types/ts3.4/metrics.d.ts +8 -7
  75. package/node_modules/@smithy/types/dist-types/ts3.4/middleware.d.ts +5 -0
  76. package/node_modules/@smithy/types/package.json +1 -1
  77. package/package.json +3 -3
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aws-sdk/xml-builder",
3
- "version": "3.972.40",
3
+ "version": "3.972.41",
4
4
  "description": "XML utilities for the AWS SDK",
5
5
  "homepage": "https://github.com/aws/aws-sdk-js-v3/tree/main/packages-internal/xml-builder",
6
6
  "license": "Apache-2.0",
@@ -47,7 +47,7 @@
47
47
  "test:fuzz": "jazzer tests/xml-parser.fuzz.js corpus --sync -i xml-parser -- -max_total_time=300"
48
48
  },
49
49
  "dependencies": {
50
- "@smithy/types": "^4.17.2",
50
+ "@smithy/types": "^4.19.0",
51
51
  "tslib": "^2.6.2"
52
52
  },
53
53
  "devDependencies": {
@@ -902,26 +902,11 @@ const loadSmithyRpcV2CborErrorCode = (output, data) => {
902
902
  if (cleanValue.indexOf(":") >= 0) {
903
903
  cleanValue = cleanValue.split(":")[0];
904
904
  }
905
- if (cleanValue.indexOf("#") >= 0) {
906
- cleanValue = cleanValue.split("#")[1];
907
- }
908
905
  return cleanValue;
909
906
  };
910
907
  if (data["__type"] !== undefined) {
911
908
  return sanitizeErrorCode(data["__type"]);
912
909
  }
913
- let codeKey;
914
- for (const key in data) {
915
- if (!hasOwn(data, key))
916
- continue;
917
- if (key.toLowerCase() === "code") {
918
- codeKey = key;
919
- break;
920
- }
921
- }
922
- if (codeKey && data[codeKey] !== undefined) {
923
- return sanitizeErrorCode(data[codeKey]);
924
- }
925
910
  };
926
911
  const checkCborResponse = (response) => {
927
912
  if (String(response.headers["smithy-protocol"]).toLowerCase() !== "rpc-v2-cbor") {
@@ -2278,37 +2263,37 @@ class SmithyRpcV2CborProtocol extends RpcProtocol {
2278
2263
  return super.deserializeResponse(operationSchema, context, response);
2279
2264
  }
2280
2265
  async handleError(operationSchema, context, response, dataObject, metadata) {
2281
- const errorName = loadSmithyRpcV2CborErrorCode(response, dataObject) ?? "Unknown";
2266
+ const errorIdentifier = loadSmithyRpcV2CborErrorCode(response, dataObject) ?? "Unknown";
2267
+ const preferredNamespaces = ["*"];
2268
+ const { defaultNamespace } = this.options;
2269
+ preferredNamespaces.unshift(defaultNamespace);
2270
+ const [namespace, errorShapeName] = (() => {
2271
+ if (errorIdentifier.includes("#")) {
2272
+ return errorIdentifier.split("#");
2273
+ }
2274
+ return [undefined, errorIdentifier];
2275
+ })();
2276
+ if (namespace) {
2277
+ preferredNamespaces.unshift(namespace);
2278
+ }
2282
2279
  const errorMetadata = {
2283
2280
  $metadata: metadata,
2284
- $fault: response.statusCode <= 500 ? "client" : "server",
2281
+ $fault: response.statusCode < 500 ? "client" : "server",
2285
2282
  };
2286
- let namespace = this.options.defaultNamespace;
2287
- if (errorName.includes("#")) {
2288
- [namespace] = errorName.split("#");
2289
- }
2290
- const registry = this.compositeErrorRegistry;
2291
- const nsRegistry = TypeRegistry.for(namespace);
2292
- registry.copyFrom(nsRegistry);
2293
- let errorSchema;
2294
- try {
2295
- errorSchema = registry.getSchema(errorName);
2283
+ const preferredRegistries = [this.compositeErrorRegistry];
2284
+ if (namespace) {
2285
+ preferredRegistries.push(TypeRegistry.for(namespace));
2296
2286
  }
2297
- catch (ignored) {
2287
+ preferredRegistries.push(TypeRegistry.for(defaultNamespace));
2288
+ const [errorSchema, ErrorCtor, errorMode] = this.resolveError(errorShapeName, preferredNamespaces, preferredRegistries);
2289
+ if (errorMode === "native" || errorMode === "synthetic") {
2298
2290
  if (dataObject.Message) {
2299
2291
  dataObject.message = dataObject.Message;
2300
2292
  }
2301
- const syntheticRegistry = TypeRegistry.for("smithy.ts.sdk.synthetic." + namespace);
2302
- registry.copyFrom(syntheticRegistry);
2303
- const baseExceptionSchema = registry.getBaseException();
2304
- if (baseExceptionSchema) {
2305
- const ErrorCtor = registry.getErrorCtor(baseExceptionSchema);
2306
- throw Object.assign(new ErrorCtor({ name: errorName }), errorMetadata, dataObject);
2307
- }
2308
- throw Object.assign(new Error(errorName), errorMetadata, dataObject);
2293
+ const error = errorMode === "synthetic" ? new ErrorCtor({ name: errorShapeName }) : new Error(errorShapeName);
2294
+ throw Object.assign(error, errorMetadata, dataObject);
2309
2295
  }
2310
2296
  const ns = NormalizedSchema.of(errorSchema);
2311
- const ErrorCtor = registry.getErrorCtor(errorSchema);
2312
2297
  const message = dataObject.message ?? dataObject.Message ?? "Unknown";
2313
2298
  const exception = new ErrorCtor({});
2314
2299
  const output = {};
@@ -590,20 +590,27 @@ class Command {
590
590
  }
591
591
  const stack = clientStack.concat(this.middlewareStack);
592
592
  const { logger } = configuration;
593
+ const additionalSmithyContext = additionalContext[SMITHY_CONTEXT_KEY];
593
594
  const handlerExecutionContext = {
594
595
  logger,
595
596
  clientName,
596
597
  commandName,
597
598
  inputFilterSensitiveLog,
598
599
  outputFilterSensitiveLog,
600
+ ...additionalContext,
599
601
  [SMITHY_CONTEXT_KEY]: {
602
+ ...additionalSmithyContext,
600
603
  commandInstance: this,
601
604
  ...smithyContext,
605
+ ...(options?.metricsRecorder === undefined ? {} : { metricsRecorder: options.metricsRecorder }),
602
606
  },
603
- ...additionalContext,
604
607
  };
605
608
  const { requestHandler } = configuration;
606
609
  let requestOptions = options ?? {};
610
+ if (requestOptions.metricsRecorder) {
611
+ requestOptions = { ...requestOptions };
612
+ delete requestOptions.metricsRecorder;
613
+ }
607
614
  if (smithyContext.eventStream) {
608
615
  requestOptions = {
609
616
  isEventStream: true,
@@ -786,10 +793,25 @@ class ServiceException extends Error {
786
793
  return ServiceException.isInstance(instance);
787
794
  }
788
795
  if (ServiceException.isInstance(instance)) {
789
- if (candidate.name && this.name) {
790
- return this.prototype.isPrototypeOf(instance) || candidate.name === this.name;
796
+ if (this.prototype.isPrototypeOf(instance)) {
797
+ return true;
798
+ }
799
+ const targetName = this.name;
800
+ if (!targetName || !candidate.name) {
801
+ return false;
791
802
  }
792
- return this.prototype.isPrototypeOf(instance);
803
+ if (candidate.name === targetName) {
804
+ return true;
805
+ }
806
+ let proto = Object.getPrototypeOf(candidate);
807
+ while (proto && proto !== Object.prototype) {
808
+ const ctorName = proto.constructor?.name;
809
+ if (ctorName && ctorName !== "Error" && ctorName === targetName) {
810
+ return true;
811
+ }
812
+ proto = Object.getPrototypeOf(proto);
813
+ }
814
+ return false;
793
815
  }
794
816
  return false;
795
817
  }
@@ -39,7 +39,7 @@ class HttpProtocol extends SerdeContext {
39
39
  constructor(options) {
40
40
  super();
41
41
  this.options = options;
42
- this.compositeErrorRegistry = TypeRegistry.for(options.defaultNamespace);
42
+ this.compositeErrorRegistry = new TypeRegistry(options.defaultNamespace);
43
43
  for (const etr of options.errorTypeRegistries ?? []) {
44
44
  this.compositeErrorRegistry.copyFrom(etr);
45
45
  }
@@ -134,6 +134,47 @@ class HttpProtocol extends SerdeContext {
134
134
  cfId: output.headers["x-amz-cf-id"],
135
135
  };
136
136
  }
137
+ resolveError(name, namespaces, registries) {
138
+ const defaultErrorSchema = [-3, "", "Error", 0, [], [], 0];
139
+ let schema;
140
+ for (const registry of registries) {
141
+ for (const ns of namespaces) {
142
+ try {
143
+ if (ns === "*") {
144
+ schema = registry.getSchema(name);
145
+ }
146
+ else {
147
+ schema = registry.getSchema(ns + "#" + name);
148
+ }
149
+ const errorCtor = registry.getErrorCtor(schema);
150
+ if (errorCtor) {
151
+ return [schema, errorCtor, "modeled"];
152
+ }
153
+ else {
154
+ const syntheticErrorSchema = registry.getBaseException();
155
+ if (syntheticErrorSchema) {
156
+ const syntheticErrorCtor = registry.getErrorCtor(syntheticErrorSchema);
157
+ if (syntheticErrorCtor) {
158
+ return [schema, syntheticErrorCtor, "synthetic"];
159
+ }
160
+ }
161
+ }
162
+ }
163
+ catch (ignored) {
164
+ }
165
+ }
166
+ }
167
+ for (const registry of registries) {
168
+ const syntheticErrorSchema = registry.getBaseException();
169
+ if (syntheticErrorSchema) {
170
+ const syntheticErrorCtor = registry.getErrorCtor(syntheticErrorSchema);
171
+ if (syntheticErrorCtor) {
172
+ return [syntheticErrorSchema, syntheticErrorCtor, "synthetic"];
173
+ }
174
+ }
175
+ }
176
+ return [defaultErrorSchema, Error, "native"];
177
+ }
137
178
  async serializeEventStream({ eventStream, requestSchema, initialRequest, }) {
138
179
  const eventStreamSerde = await this.loadEventStreamCapability();
139
180
  return eventStreamSerde.serializeEventStream({
@@ -162,13 +203,6 @@ class HttpProtocol extends SerdeContext {
162
203
  compositeErrorRegistry: this.compositeErrorRegistry,
163
204
  });
164
205
  }
165
- resolveEventStreamMarshaller(importedProvider) {
166
- const context = this.serdeContext;
167
- if (context.eventStreamMarshaller) {
168
- return context.eventStreamMarshaller;
169
- }
170
- return importedProvider(this.serdeContext);
171
- }
172
206
  getDefaultContentType() {
173
207
  throw new Error(`@smithy/core/protocols - ${this.constructor.name} getDefaultContentType() implementation missing.`);
174
208
  }
@@ -182,6 +216,13 @@ class HttpProtocol extends SerdeContext {
182
216
  }
183
217
  return context.eventStreamMarshaller;
184
218
  }
219
+ resolveEventStreamMarshaller(importedProvider) {
220
+ const context = this.serdeContext;
221
+ if (context.eventStreamMarshaller) {
222
+ return context.eventStreamMarshaller;
223
+ }
224
+ return importedProvider(this.serdeContext);
225
+ }
185
226
  }
186
227
 
187
228
  class HttpBindingProtocol extends HttpProtocol {
@@ -579,12 +579,12 @@ class TypeRegistry {
579
579
  this.namespace = namespace;
580
580
  this.schemas = schemas;
581
581
  this.exceptions = exceptions;
582
- }
583
- static for(namespace) {
584
582
  if (!TypeRegistry.registries.has(namespace)) {
585
- TypeRegistry.registries.set(namespace, new TypeRegistry(namespace));
583
+ TypeRegistry.registries.set(namespace, this);
586
584
  }
587
- return TypeRegistry.registries.get(namespace);
585
+ }
586
+ static for(namespace) {
587
+ return TypeRegistry.registries.get(namespace) ?? new TypeRegistry(namespace);
588
588
  }
589
589
  copyFrom(other) {
590
590
  const { schemas, exceptions } = this;
@@ -602,7 +602,9 @@ class TypeRegistry {
602
602
  register(shapeId, schema) {
603
603
  const qualifiedName = this.normalizeShapeId(shapeId);
604
604
  for (const r of [this, TypeRegistry.for(qualifiedName.split("#")[0])]) {
605
- r.schemas.set(qualifiedName, schema);
605
+ if (!r.schemas.has(qualifiedName)) {
606
+ r.schemas.set(qualifiedName, schema);
607
+ }
606
608
  }
607
609
  }
608
610
  getSchema(shapeId) {
@@ -627,9 +629,12 @@ class TypeRegistry {
627
629
  registerError(es, ctor) {
628
630
  const $error = es;
629
631
  const ns = $error[1];
632
+ const qualifiedName = ns + "#" + $error[2];
630
633
  for (const r of [this, TypeRegistry.for(ns)]) {
631
- r.schemas.set(ns + "#" + $error[2], $error);
632
- r.exceptions.set($error, ctor);
634
+ if (!r.schemas.has(qualifiedName) && !r.exceptions.has($error)) {
635
+ r.schemas.set(qualifiedName, $error);
636
+ r.exceptions.set($error, ctor);
637
+ }
633
638
  }
634
639
  }
635
640
  getErrorCtor(es) {
@@ -50,37 +50,37 @@ export class SmithyRpcV2CborProtocol extends RpcProtocol {
50
50
  return super.deserializeResponse(operationSchema, context, response);
51
51
  }
52
52
  async handleError(operationSchema, context, response, dataObject, metadata) {
53
- const errorName = loadSmithyRpcV2CborErrorCode(response, dataObject) ?? "Unknown";
53
+ const errorIdentifier = loadSmithyRpcV2CborErrorCode(response, dataObject) ?? "Unknown";
54
+ const preferredNamespaces = ["*"];
55
+ const { defaultNamespace } = this.options;
56
+ preferredNamespaces.unshift(defaultNamespace);
57
+ const [namespace, errorShapeName] = (() => {
58
+ if (errorIdentifier.includes("#")) {
59
+ return errorIdentifier.split("#");
60
+ }
61
+ return [undefined, errorIdentifier];
62
+ })();
63
+ if (namespace) {
64
+ preferredNamespaces.unshift(namespace);
65
+ }
54
66
  const errorMetadata = {
55
67
  $metadata: metadata,
56
- $fault: response.statusCode <= 500 ? "client" : "server",
68
+ $fault: response.statusCode < 500 ? "client" : "server",
57
69
  };
58
- let namespace = this.options.defaultNamespace;
59
- if (errorName.includes("#")) {
60
- [namespace] = errorName.split("#");
70
+ const preferredRegistries = [this.compositeErrorRegistry];
71
+ if (namespace) {
72
+ preferredRegistries.push(TypeRegistry.for(namespace));
61
73
  }
62
- const registry = this.compositeErrorRegistry;
63
- const nsRegistry = TypeRegistry.for(namespace);
64
- registry.copyFrom(nsRegistry);
65
- let errorSchema;
66
- try {
67
- errorSchema = registry.getSchema(errorName);
68
- }
69
- catch (ignored) {
74
+ preferredRegistries.push(TypeRegistry.for(defaultNamespace));
75
+ const [errorSchema, ErrorCtor, errorMode] = this.resolveError(errorShapeName, preferredNamespaces, preferredRegistries);
76
+ if (errorMode === "native" || errorMode === "synthetic") {
70
77
  if (dataObject.Message) {
71
78
  dataObject.message = dataObject.Message;
72
79
  }
73
- const syntheticRegistry = TypeRegistry.for("smithy.ts.sdk.synthetic." + namespace);
74
- registry.copyFrom(syntheticRegistry);
75
- const baseExceptionSchema = registry.getBaseException();
76
- if (baseExceptionSchema) {
77
- const ErrorCtor = registry.getErrorCtor(baseExceptionSchema);
78
- throw Object.assign(new ErrorCtor({ name: errorName }), errorMetadata, dataObject);
79
- }
80
- throw Object.assign(new Error(errorName), errorMetadata, dataObject);
80
+ const error = errorMode === "synthetic" ? new ErrorCtor({ name: errorShapeName }) : new Error(errorShapeName);
81
+ throw Object.assign(error, errorMetadata, dataObject);
81
82
  }
82
83
  const ns = NormalizedSchema.of(errorSchema);
83
- const ErrorCtor = registry.getErrorCtor(errorSchema);
84
84
  const message = dataObject.message ?? dataObject.Message ?? "Unknown";
85
85
  const exception = new ErrorCtor({});
86
86
  const output = {};
@@ -42,26 +42,11 @@ export const loadSmithyRpcV2CborErrorCode = (output, data) => {
42
42
  if (cleanValue.indexOf(":") >= 0) {
43
43
  cleanValue = cleanValue.split(":")[0];
44
44
  }
45
- if (cleanValue.indexOf("#") >= 0) {
46
- cleanValue = cleanValue.split("#")[1];
47
- }
48
45
  return cleanValue;
49
46
  };
50
47
  if (data["__type"] !== undefined) {
51
48
  return sanitizeErrorCode(data["__type"]);
52
49
  }
53
- let codeKey;
54
- for (const key in data) {
55
- if (!hasOwn(data, key))
56
- continue;
57
- if (key.toLowerCase() === "code") {
58
- codeKey = key;
59
- break;
60
- }
61
- }
62
- if (codeKey && data[codeKey] !== undefined) {
63
- return sanitizeErrorCode(data[codeKey]);
64
- }
65
50
  };
66
51
  export const checkCborResponse = (response) => {
67
52
  if (String(response.headers["smithy-protocol"]).toLowerCase() !== "rpc-v2-cbor") {
@@ -5,7 +5,7 @@ export { invalidFunction } from "./invalid-dependency/invalidFunction";
5
5
  export { invalidProvider } from "./invalid-dependency/invalidProvider";
6
6
  export { createWaiter } from "./util-waiter/createWaiter";
7
7
  export { waiterServiceDefaults, WaiterState, checkExceptions, } from "./util-waiter/waiter";
8
- export { Client } from "./smithy-client/client";
8
+ export { Client, } from "./smithy-client/client";
9
9
  export { Command } from "./smithy-client/command";
10
10
  export { SENSITIVE_STRING } from "./smithy-client/constants";
11
11
  export { createAggregatedClient } from "./smithy-client/create-aggregated-client";
@@ -13,20 +13,27 @@ export class Command {
13
13
  }
14
14
  const stack = clientStack.concat(this.middlewareStack);
15
15
  const { logger } = configuration;
16
+ const additionalSmithyContext = additionalContext[SMITHY_CONTEXT_KEY];
16
17
  const handlerExecutionContext = {
17
18
  logger,
18
19
  clientName,
19
20
  commandName,
20
21
  inputFilterSensitiveLog,
21
22
  outputFilterSensitiveLog,
23
+ ...additionalContext,
22
24
  [SMITHY_CONTEXT_KEY]: {
25
+ ...additionalSmithyContext,
23
26
  commandInstance: this,
24
27
  ...smithyContext,
28
+ ...(options?.metricsRecorder === undefined ? {} : { metricsRecorder: options.metricsRecorder }),
25
29
  },
26
- ...additionalContext,
27
30
  };
28
31
  const { requestHandler } = configuration;
29
32
  let requestOptions = options ?? {};
33
+ if (requestOptions.metricsRecorder) {
34
+ requestOptions = { ...requestOptions };
35
+ delete requestOptions.metricsRecorder;
36
+ }
30
37
  if (smithyContext.eventStream) {
31
38
  requestOptions = {
32
39
  isEventStream: true,
@@ -27,10 +27,25 @@ export class ServiceException extends Error {
27
27
  return ServiceException.isInstance(instance);
28
28
  }
29
29
  if (ServiceException.isInstance(instance)) {
30
- if (candidate.name && this.name) {
31
- return this.prototype.isPrototypeOf(instance) || candidate.name === this.name;
30
+ if (this.prototype.isPrototypeOf(instance)) {
31
+ return true;
32
32
  }
33
- return this.prototype.isPrototypeOf(instance);
33
+ const targetName = this.name;
34
+ if (!targetName || !candidate.name) {
35
+ return false;
36
+ }
37
+ if (candidate.name === targetName) {
38
+ return true;
39
+ }
40
+ let proto = Object.getPrototypeOf(candidate);
41
+ while (proto && proto !== Object.prototype) {
42
+ const ctorName = proto.constructor?.name;
43
+ if (ctorName && ctorName !== "Error" && ctorName === targetName) {
44
+ return true;
45
+ }
46
+ proto = Object.getPrototypeOf(proto);
47
+ }
48
+ return false;
34
49
  }
35
50
  return false;
36
51
  }
@@ -8,7 +8,7 @@ export class HttpProtocol extends SerdeContext {
8
8
  constructor(options) {
9
9
  super();
10
10
  this.options = options;
11
- this.compositeErrorRegistry = TypeRegistry.for(options.defaultNamespace);
11
+ this.compositeErrorRegistry = new TypeRegistry(options.defaultNamespace);
12
12
  for (const etr of options.errorTypeRegistries ?? []) {
13
13
  this.compositeErrorRegistry.copyFrom(etr);
14
14
  }
@@ -103,6 +103,47 @@ export class HttpProtocol extends SerdeContext {
103
103
  cfId: output.headers["x-amz-cf-id"],
104
104
  };
105
105
  }
106
+ resolveError(name, namespaces, registries) {
107
+ const defaultErrorSchema = [-3, "", "Error", 0, [], [], 0];
108
+ let schema;
109
+ for (const registry of registries) {
110
+ for (const ns of namespaces) {
111
+ try {
112
+ if (ns === "*") {
113
+ schema = registry.getSchema(name);
114
+ }
115
+ else {
116
+ schema = registry.getSchema(ns + "#" + name);
117
+ }
118
+ const errorCtor = registry.getErrorCtor(schema);
119
+ if (errorCtor) {
120
+ return [schema, errorCtor, "modeled"];
121
+ }
122
+ else {
123
+ const syntheticErrorSchema = registry.getBaseException();
124
+ if (syntheticErrorSchema) {
125
+ const syntheticErrorCtor = registry.getErrorCtor(syntheticErrorSchema);
126
+ if (syntheticErrorCtor) {
127
+ return [schema, syntheticErrorCtor, "synthetic"];
128
+ }
129
+ }
130
+ }
131
+ }
132
+ catch (ignored) {
133
+ }
134
+ }
135
+ }
136
+ for (const registry of registries) {
137
+ const syntheticErrorSchema = registry.getBaseException();
138
+ if (syntheticErrorSchema) {
139
+ const syntheticErrorCtor = registry.getErrorCtor(syntheticErrorSchema);
140
+ if (syntheticErrorCtor) {
141
+ return [syntheticErrorSchema, syntheticErrorCtor, "synthetic"];
142
+ }
143
+ }
144
+ }
145
+ return [defaultErrorSchema, Error, "native"];
146
+ }
106
147
  async serializeEventStream({ eventStream, requestSchema, initialRequest, }) {
107
148
  const eventStreamSerde = await this.loadEventStreamCapability();
108
149
  return eventStreamSerde.serializeEventStream({
@@ -131,13 +172,6 @@ export class HttpProtocol extends SerdeContext {
131
172
  compositeErrorRegistry: this.compositeErrorRegistry,
132
173
  });
133
174
  }
134
- resolveEventStreamMarshaller(importedProvider) {
135
- const context = this.serdeContext;
136
- if (context.eventStreamMarshaller) {
137
- return context.eventStreamMarshaller;
138
- }
139
- return importedProvider(this.serdeContext);
140
- }
141
175
  getDefaultContentType() {
142
176
  throw new Error(`@smithy/core/protocols - ${this.constructor.name} getDefaultContentType() implementation missing.`);
143
177
  }
@@ -156,4 +190,11 @@ export class HttpProtocol extends SerdeContext {
156
190
  }
157
191
  return context.eventStreamMarshaller;
158
192
  }
193
+ resolveEventStreamMarshaller(importedProvider) {
194
+ const context = this.serdeContext;
195
+ if (context.eventStreamMarshaller) {
196
+ return context.eventStreamMarshaller;
197
+ }
198
+ return importedProvider(this.serdeContext);
199
+ }
159
200
  }
@@ -7,12 +7,12 @@ export class TypeRegistry {
7
7
  this.namespace = namespace;
8
8
  this.schemas = schemas;
9
9
  this.exceptions = exceptions;
10
- }
11
- static for(namespace) {
12
10
  if (!TypeRegistry.registries.has(namespace)) {
13
- TypeRegistry.registries.set(namespace, new TypeRegistry(namespace));
11
+ TypeRegistry.registries.set(namespace, this);
14
12
  }
15
- return TypeRegistry.registries.get(namespace);
13
+ }
14
+ static for(namespace) {
15
+ return TypeRegistry.registries.get(namespace) ?? new TypeRegistry(namespace);
16
16
  }
17
17
  copyFrom(other) {
18
18
  const { schemas, exceptions } = this;
@@ -30,7 +30,9 @@ export class TypeRegistry {
30
30
  register(shapeId, schema) {
31
31
  const qualifiedName = this.normalizeShapeId(shapeId);
32
32
  for (const r of [this, TypeRegistry.for(qualifiedName.split("#")[0])]) {
33
- r.schemas.set(qualifiedName, schema);
33
+ if (!r.schemas.has(qualifiedName)) {
34
+ r.schemas.set(qualifiedName, schema);
35
+ }
34
36
  }
35
37
  }
36
38
  getSchema(shapeId) {
@@ -55,9 +57,12 @@ export class TypeRegistry {
55
57
  registerError(es, ctor) {
56
58
  const $error = es;
57
59
  const ns = $error[1];
60
+ const qualifiedName = ns + "#" + $error[2];
58
61
  for (const r of [this, TypeRegistry.for(ns)]) {
59
- r.schemas.set(ns + "#" + $error[2], $error);
60
- r.exceptions.set($error, ctor);
62
+ if (!r.schemas.has(qualifiedName) && !r.exceptions.has($error)) {
63
+ r.schemas.set(qualifiedName, $error);
64
+ r.exceptions.set($error, ctor);
65
+ }
61
66
  }
62
67
  }
63
68
  getErrorCtor(es) {
@@ -18,6 +18,9 @@ export declare const dateToTag: (date: Date) => {
18
18
  */
19
19
  export declare const parseCborErrorBody: (errorBody: any, context: SerdeContext) => Promise<any>;
20
20
  /**
21
+ * Trims error.__type
22
+ * "com.a.b#Error:Sender,tag" -> "com.a.b#Error"
23
+ *
21
24
  * @internal
22
25
  */
23
26
  export declare const loadSmithyRpcV2CborErrorCode: (output: HttpResponse, data: any) => string | undefined;
@@ -5,7 +5,7 @@ export { invalidFunction } from "./invalid-dependency/invalidFunction";
5
5
  export { invalidProvider } from "./invalid-dependency/invalidProvider";
6
6
  export { createWaiter } from "./util-waiter/createWaiter";
7
7
  export { waiterServiceDefaults, WaiterState, checkExceptions, type WaiterConfiguration, type WaiterOptions, type WaiterResult, } from "./util-waiter/waiter";
8
- export { Client, type SmithyConfiguration, type SmithyResolvedConfiguration } from "./smithy-client/client";
8
+ export { Client, type SmithyClientRequestOptions, type SmithyConfiguration, type SmithyResolvedConfiguration, } from "./smithy-client/client";
9
9
  export { Command, type CommandImpl } from "./smithy-client/command";
10
10
  export { SENSITIVE_STRING } from "./smithy-client/constants";
11
11
  export { createAggregatedClient } from "./smithy-client/create-aggregated-client";
@@ -1,4 +1,12 @@
1
- import type { $ClientProtocol, $ClientProtocolCtor, ClientProtocol, ClientProtocolCtor, Command, FetchHttpHandlerOptions, Client as IClient, MetadataBearer, MiddlewareStack, NodeHttpHandlerOptions, RequestHandler } from "@smithy/types";
1
+ import type { $ClientProtocol, $ClientProtocolCtor, ClientProtocol, ClientProtocolCtor, Command, FetchHttpHandlerOptions, Client as IClient, MetadataBearer, MetricsRecorder, MiddlewareStack, NodeHttpHandlerOptions, RequestHandler } from "@smithy/types";
2
+ /**
3
+ * Options accepted for an individual Smithy client request.
4
+ *
5
+ * @public
6
+ */
7
+ export type SmithyClientRequestOptions<HandlerOptions> = unknown extends HandlerOptions ? HandlerOptions : HandlerOptions extends unknown ? keyof HandlerOptions extends never ? HandlerOptions : HandlerOptions & {
8
+ metricsRecorder?: MetricsRecorder<unknown>;
9
+ } : never;
2
10
  /**
3
11
  * @public
4
12
  */
@@ -77,8 +85,8 @@ export declare class Client<HandlerOptions, ClientInput extends object, ClientOu
77
85
  */
78
86
  private handlers?;
79
87
  constructor(config: ResolvedClientConfiguration);
80
- send<InputType extends ClientInput, OutputType extends ClientOutput>(command: Command<ClientInput, InputType, ClientOutput, OutputType, SmithyResolvedConfiguration<HandlerOptions>>, options?: HandlerOptions): Promise<OutputType>;
88
+ send<InputType extends ClientInput, OutputType extends ClientOutput>(command: Command<ClientInput, InputType, ClientOutput, OutputType, SmithyResolvedConfiguration<HandlerOptions>>, options?: SmithyClientRequestOptions<HandlerOptions>): Promise<OutputType>;
81
89
  send<InputType extends ClientInput, OutputType extends ClientOutput>(command: Command<ClientInput, InputType, ClientOutput, OutputType, SmithyResolvedConfiguration<HandlerOptions>>, cb: (err: any, data?: OutputType) => void): void;
82
- send<InputType extends ClientInput, OutputType extends ClientOutput>(command: Command<ClientInput, InputType, ClientOutput, OutputType, SmithyResolvedConfiguration<HandlerOptions>>, options: HandlerOptions, cb: (err: any, data?: OutputType) => void): void;
90
+ send<InputType extends ClientInput, OutputType extends ClientOutput>(command: Command<ClientInput, InputType, ClientOutput, OutputType, SmithyResolvedConfiguration<HandlerOptions>>, options: SmithyClientRequestOptions<HandlerOptions>, cb: (err: any, data?: OutputType) => void): void;
83
91
  destroy(): void;
84
92
  }