{
  "globals": {
    "collectionPreRequestScripts": [
      "var CryptoJS = require('crypto-js');",
      "",
      "var gateName = \"aidaSalesApiGateway\";",
      "setPostmanVariables(gateName + \"BaseUrl\");",
      "var authHeader = getAuthHeader(gateName, false);",
      "pm.collectionVariables.set(\"apiKey\", authHeader);",
      "//console.info(authHeader);",
      "",
      "function setPostmanVariables(baseUrlName) {",
      "    var baseUrl = pm.variables.get(baseUrlName);",
      "    if (baseUrl.endsWith(\"/\")) {",
      "        baseUrl = baseUrl.substring(0, baseUrl.length - 1);",
      "    }",
      "    pm.collectionVariables.set(\"baseUrl\", baseUrl)",
      "}",
      "",
      "function getAuthHeader(gateName, includePayload) {",
      "",
      "    var username = pm.variables.get(gateName + \"Username\");",
      "    var secretKey = pm.variables.get(gateName + \"SecretKey\");",
      "    var accessKey = pm.variables.get(gateName + \"AccessKey\");",
      "",
      "    var utcDate = new Date().toISOString();",
      "    var isoDate = utcDate.substring(0, 10).replace(/-/g, \"\") + utcDate.substring(11, 19).replace(/:/g, \"\");",
      "",
      "    var httpVerb = pm.request.method.toUpperCase();",
      "    var encodedPathAndQuery = getEncodedPathAndQuery();",
      "",
      "    var bodyHash = \"\";",
      "    if (includePayload) {",
      "        bodyHash = getBodyHash(pm.request.body);",
      "    }",
      "",
      "    var assemble = (isoDate + httpVerb + encodedPathAndQuery + bodyHash);",
      "",
      "    var hmac = CryptoJS.HmacSHA256(assemble, secretKey);",
      "    var signatureInBase64 = CryptoJS.enc.Base64.stringify(hmac);",
      "",
      "    var authorization = \"DirectGrant \" + username + \" \" + accessKey + \" \" + isoDate + \" \" + signatureInBase64;",
      "    return authorization;",
      "}",
      "",
      "function getEncodedPathAndQuery() {",
      "",
      "    pm.variables.replaceIn(pm.request.url);",
      "    var encodedPathAndQuery = pm.request.url.getPathWithQuery(true).toUpperCase();",
      "    return encodedPathAndQuery;",
      "}",
      "",
      "function getBodyHash(body) {",
      "    var bodyHash = \"\";",
      "    if (pm.request.body.isEmpty() == false) {",
      "        pm.request.headers.add(\"x-nt-content-sha256: true\");",
      "        var body = interpolate(pm.request.body.toString());",
      "        var body256 = CryptoJS.SHA256(body);",
      "        bodyHash = CryptoJS.enc.Base64.stringify(body256);",
      "    }",
      "    return bodyHash;",
      "}",
      "",
      "function interpolate(value) {",
      "    const { Property } = require('postman-collection');",
      "    return Property.replaceSubstitutions(value, pm.variables.toObject());",
      "}"
    ],
    "securityOverwrites": {
      "apiKey": {
        "in": "header",
        "key": "Authorization",
        "value": "{{apiKey}}"
      }
    }
  }
}