diff --git a/src/Network.ts b/src/Network.ts index dd80197..d9d8b02 100644 --- a/src/Network.ts +++ b/src/Network.ts @@ -1,5 +1,4 @@ import * as Request from "request-promise-native"; -const aws4 = require("aws4"); export function esGet(url: string, settings: object, requestOpts: Partial, credentials: NetworkCredentials) { return networkCall("get", url, settings, requestOpts, credentials); @@ -22,24 +21,14 @@ export interface NetworkCredentials { } export function networkCall(requestFunc: "post" | "put" | "get" | "delete", url: string, settings: object, requestOpts: Partial = {}, credentials: NetworkCredentials = {}) { - const { headers: requestHeaders, ...remainingOptions } = requestOpts; - const headers = { - ...requestHeaders, - "Content-Type": "application/json", - }; - const urlObj = new URL(url); - const { region, service } = credentials; - const fullRequestOptions = { - ...remainingOptions, - headers, - region, - service, - path: urlObj.pathname, - host: urlObj.host, - }; - const signedOptions = aws4.sign(fullRequestOptions, credentials); return Request[requestFunc](url, { - ...signedOptions, + ...requestOpts, + aws: { + key: credentials.accessKeyId, + secret: credentials.secretAccessKey, + sign_version: 4, + service: "es", + } as any, json: settings }); } \ No newline at end of file diff --git a/src/SetupRepo.ts b/src/SetupRepo.ts index 686e588..aab9ed0 100644 --- a/src/SetupRepo.ts +++ b/src/SetupRepo.ts @@ -13,13 +13,24 @@ export async function discoverRepoArn(sts: STS, repo: S3Repository): Promise result.Account); + const partition = getPartition(repo.settings.region); repoCopy.settings = { ...repoCopy.settings }; - repoCopy.settings.role_arn = `arn:aws:iam::${accountId}:role/${repo.settings.role_name}`; + repoCopy.settings.role_arn = `arn:${partition}:iam::${accountId}:role/${repo.settings.role_name}`; delete repoCopy.settings.role_name; } return repoCopy; } +function getPartition(region: string) { + if (region.startsWith("cn-")) { + return "aws-cn"; + } + if (region.startsWith("us-gov")) { + return "aws-us-gov"; + } + return "aws"; +} + export interface SetupRepoProps { baseUrl: string; sts: STS;