UNPKG

@aws-sdk/middleware-signing

Version:

[![NPM version](https://img.shields.io/npm/v/@aws-sdk/middleware-signing/latest.svg)](https://www.npmjs.com/package/@aws-sdk/middleware-signing) [![NPM downloads](https://img.shields.io/npm/dm/@aws-sdk/middleware-signing.svg)](https://www.npmjs.com/packag

271 lines (261 loc) 10.5 kB
"use strict"; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __hasOwnProp = Object.prototype.hasOwnProperty; var __name = (target, value) => __defProp(target, "name", { value, configurable: true }); var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); // src/index.ts var src_exports = {}; __export(src_exports, { awsAuthMiddleware: () => awsAuthMiddleware, awsAuthMiddlewareOptions: () => awsAuthMiddlewareOptions, getAwsAuthPlugin: () => getAwsAuthPlugin, getSigV4AuthPlugin: () => getSigV4AuthPlugin, resolveAwsAuthConfig: () => resolveAwsAuthConfig, resolveSigV4AuthConfig: () => resolveSigV4AuthConfig }); module.exports = __toCommonJS(src_exports); // src/awsAuthConfiguration.ts var import_property_provider = require("@smithy/property-provider"); var import_signature_v4 = require("@smithy/signature-v4"); var import_util_middleware = require("@smithy/util-middleware"); var CREDENTIAL_EXPIRE_WINDOW = 3e5; var resolveAwsAuthConfig = /* @__PURE__ */ __name((input) => { const normalizedCreds = createConfigBoundCredentialProvider(input); const { signingEscapePath = true, systemClockOffset = input.systemClockOffset || 0, sha256 } = input; let signer; if (input.signer) { signer = (0, import_util_middleware.normalizeProvider)(input.signer); } else if (input.regionInfoProvider) { signer = /* @__PURE__ */ __name(() => (0, import_util_middleware.normalizeProvider)(input.region)().then( async (region) => [ await input.regionInfoProvider(region, { useFipsEndpoint: await input.useFipsEndpoint(), useDualstackEndpoint: await input.useDualstackEndpoint() }) || {}, region ] ).then(([regionInfo, region]) => { const { signingRegion, signingService } = regionInfo; input.signingRegion = input.signingRegion || signingRegion || region; input.signingName = input.signingName || signingService || input.serviceId; const params = { ...input, credentials: normalizedCreds, region: input.signingRegion, service: input.signingName, sha256, uriEscapePath: signingEscapePath }; const SignerCtor = input.signerConstructor || import_signature_v4.SignatureV4; return new SignerCtor(params); }), "signer"); } else { signer = /* @__PURE__ */ __name(async (authScheme) => { authScheme = Object.assign( {}, { name: "sigv4", signingName: input.signingName || input.defaultSigningName, signingRegion: await (0, import_util_middleware.normalizeProvider)(input.region)(), properties: {} }, authScheme ); const isSigv4a = authScheme?.name === "sigv4a"; const signingRegion = authScheme.signingRegion; const signingService = authScheme.signingName; let regionForSigner; if (isSigv4a) { regionForSigner = input.signingRegion || signingRegion; } else { input.signingRegion = input.signingRegion || signingRegion; regionForSigner = input.signingRegion; } input.signingName = input.signingName || signingService || input.serviceId; const params = { ...input, credentials: normalizedCreds, region: regionForSigner, service: input.signingName, sha256, uriEscapePath: signingEscapePath }; const SignerCtor = input.signerConstructor || import_signature_v4.SignatureV4; return new SignerCtor(params); }, "signer"); } return { ...input, systemClockOffset, signingEscapePath, credentials: normalizedCreds, signer }; }, "resolveAwsAuthConfig"); var resolveSigV4AuthConfig = /* @__PURE__ */ __name((input) => { const normalizedCreds = createConfigBoundCredentialProvider(input); const { signingEscapePath = true, systemClockOffset = input.systemClockOffset || 0, sha256 } = input; let signer; if (input.signer) { signer = (0, import_util_middleware.normalizeProvider)(input.signer); } else { signer = (0, import_util_middleware.normalizeProvider)( new import_signature_v4.SignatureV4({ credentials: normalizedCreds, region: input.region, service: input.signingName, sha256, uriEscapePath: signingEscapePath }) ); } return { ...input, systemClockOffset, signingEscapePath, credentials: normalizedCreds, signer }; }, "resolveSigV4AuthConfig"); var normalizeCredentialProvider = /* @__PURE__ */ __name((credentials) => { if (typeof credentials === "function") { return (0, import_property_provider.memoize)( credentials, (credentials2) => credentials2.expiration !== void 0 && credentials2.expiration.getTime() - Date.now() < CREDENTIAL_EXPIRE_WINDOW, (credentials2) => credentials2.expiration !== void 0 ); } return (0, import_util_middleware.normalizeProvider)(credentials); }, "normalizeCredentialProvider"); var createConfigBoundCredentialProvider = /* @__PURE__ */ __name((input) => { const normalizedCredentialsProvider = input.credentials ? normalizeCredentialProvider(input.credentials) : input.credentialDefaultProvider( Object.assign({}, input, { parentClientConfig: input }) ); const normalizedCreds = /* @__PURE__ */ __name(async () => normalizedCredentialsProvider({ callerClientConfig: { region: (0, import_util_middleware.normalizeProvider)(input.region), profile: input.profile } }), "normalizedCreds"); return normalizedCreds; }, "createConfigBoundCredentialProvider"); // src/awsAuthMiddleware.ts var import_protocol_http = require("@smithy/protocol-http"); // src/utils/getSkewCorrectedDate.ts var getSkewCorrectedDate = /* @__PURE__ */ __name((systemClockOffset) => new Date(Date.now() + systemClockOffset), "getSkewCorrectedDate"); // src/utils/isClockSkewed.ts var isClockSkewed = /* @__PURE__ */ __name((clockTime, systemClockOffset) => Math.abs(getSkewCorrectedDate(systemClockOffset).getTime() - clockTime) >= 3e5, "isClockSkewed"); // src/utils/getUpdatedSystemClockOffset.ts var getUpdatedSystemClockOffset = /* @__PURE__ */ __name((clockTime, currentSystemClockOffset) => { const clockTimeInMs = Date.parse(clockTime); if (isClockSkewed(clockTimeInMs, currentSystemClockOffset)) { return clockTimeInMs - Date.now(); } return currentSystemClockOffset; }, "getUpdatedSystemClockOffset"); // src/awsAuthMiddleware.ts var awsAuthMiddleware = /* @__PURE__ */ __name((options) => (next, context) => async function(args) { if (!import_protocol_http.HttpRequest.isInstance(args.request)) return next(args); let authScheme; let signer; const firstAuthScheme = context.endpointV2?.properties?.authSchemes?.[0]; const secondAuthScheme = context.endpointV2?.properties?.authSchemes?.[1]; const firstAuthSchemeIsSigv4a = firstAuthScheme?.name === "sigv4a"; if (firstAuthSchemeIsSigv4a && secondAuthScheme) { signer = await options.signer(authScheme = firstAuthScheme); const uncheckedSigner = signer; const sigv4aAvailable = (() => { if (typeof uncheckedSigner?.getSigv4aSigner === "function") { if (uncheckedSigner?.signerOptions?.runtime !== "node") { return false; } try { uncheckedSigner.getSigv4aSigner(); return true; } catch (e) { } } return false; })(); if (!sigv4aAvailable) { signer = await options.signer(authScheme = secondAuthScheme); } } else { signer = await options.signer(authScheme = firstAuthScheme); } let signedRequest; const multiRegionOverride = authScheme?.name === "sigv4a" ? authScheme?.signingRegionSet?.join(",") : void 0; const signingOptions = { signingDate: getSkewCorrectedDate(options.systemClockOffset), signingRegion: multiRegionOverride || context["signing_region"], signingService: context["signing_service"] }; if (context.s3ExpressIdentity) { const sigV4MultiRegion = signer; signedRequest = await sigV4MultiRegion.signWithCredentials( args.request, context.s3ExpressIdentity, signingOptions ); if (signedRequest.headers["X-Amz-Security-Token"] || signedRequest.headers["x-amz-security-token"]) { throw new Error("X-Amz-Security-Token must not be set for s3-express requests."); } } else { signedRequest = await signer.sign(args.request, signingOptions); } const output = await next({ ...args, request: signedRequest }).catch((error) => { const serverTime = error.ServerTime ?? getDateHeader(error.$response); if (serverTime) { options.systemClockOffset = getUpdatedSystemClockOffset(serverTime, options.systemClockOffset); } throw error; }); const dateHeader = getDateHeader(output.response); if (dateHeader) { options.systemClockOffset = getUpdatedSystemClockOffset(dateHeader, options.systemClockOffset); } return output; }, "awsAuthMiddleware"); var getDateHeader = /* @__PURE__ */ __name((response) => import_protocol_http.HttpResponse.isInstance(response) ? response.headers?.date ?? response.headers?.Date : void 0, "getDateHeader"); var awsAuthMiddlewareOptions = { name: "awsAuthMiddleware", tags: ["SIGNATURE", "AWSAUTH"], relation: "after", toMiddleware: "retryMiddleware", override: true }; var getAwsAuthPlugin = /* @__PURE__ */ __name((options) => ({ applyToStack: (clientStack) => { clientStack.addRelativeTo(awsAuthMiddleware(options), awsAuthMiddlewareOptions); } }), "getAwsAuthPlugin"); var getSigV4AuthPlugin = getAwsAuthPlugin; // Annotate the CommonJS export names for ESM import in node: 0 && (module.exports = { resolveAwsAuthConfig, resolveSigV4AuthConfig, awsAuthMiddleware, awsAuthMiddlewareOptions, getAwsAuthPlugin, getSigV4AuthPlugin });