From d5455ac6b4b868e77357b2a19214f4ff91414e5f Mon Sep 17 00:00:00 2001 From: Alejo Thomas Ortega Date: Fri, 19 Apr 2024 11:30:38 -0300 Subject: [PATCH] refactor: manifest upload to avoid using signed urls (#453) --- src/entities/CheckScenes/utils.ts | 49 +++++++++---------------------- 1 file changed, 14 insertions(+), 35 deletions(-) diff --git a/src/entities/CheckScenes/utils.ts b/src/entities/CheckScenes/utils.ts index 3b8f6d7a..4848d6c0 100644 --- a/src/entities/CheckScenes/utils.ts +++ b/src/entities/CheckScenes/utils.ts @@ -1,5 +1,3 @@ -import { Readable } from "stream" - import { EntityType } from "@dcl/schemas/dist/platform/entity" import AWS from "aws-sdk" import logger from "decentraland-gatsby/dist/entities/Development/logger" @@ -12,8 +10,6 @@ import { } from "decentraland-gatsby/dist/utils/api/Catalyst.types" import ContentServer from "decentraland-gatsby/dist/utils/api/ContentServer" import env from "decentraland-gatsby/dist/utils/env" -import fetch from "node-fetch" -import { retry } from "radash" import allCoordinates from "../../__data__/AllCoordinates.json" import roadCoordinates from "../../__data__/RoadCoordinates.json" @@ -24,7 +20,6 @@ import { DeploymentTrackAttributes, WorldAbout } from "./types" const ACCESS_KEY = env("AWS_ACCESS_KEY") const ACCESS_SECRET = env("AWS_ACCESS_SECRET") -const BUCKET_HOSTNAME = env("BUCKET_HOSTNAME") const BUCKET_NAME = env("PUBLIC_BUCKET", "") type Pointer = string @@ -70,45 +65,29 @@ export async function updateGenesisCityManifest() { const s3 = new AWS.S3({ accessKeyId: ACCESS_KEY, secretAccessKey: ACCESS_SECRET, - signatureVersion: "v4", + s3ForcePathStyle: true, }) logger.log("Updating Genesis City manifest") - const signedUrl = await retry({ times: 10, delay: 100 }, async () => { - const responseUrl = s3.getSignedUrl("putObject", { - Bucket: BUCKET_NAME, - Key: `WorldManifest.json`, - Expires: 60 * 1000, - ContentType: "application/json", - CacheControl: "no-store, no-cache, must-revalidate, proxy-revalidate", - }) - - const url = new URL(responseUrl) - if (url.searchParams.size === 0) { - throw new Error("Invalid AWS response") - } - - return url.toString() - }) - const genesisCityManifestPositions = await calculateGenesisCityManifestPositions() - const stream = Readable.from(JSON.stringify(genesisCityManifestPositions)) - const response = await fetch(signedUrl, { - method: "PUT", - headers: { - "Content-Type": "application/json", - }, - body: stream, - }) + const uploadParams = { + Bucket: BUCKET_NAME, + Key: `WorldManifest.json`, + Body: JSON.stringify(genesisCityManifestPositions), + ContentType: "application/json", + CacheControl: "no-store, no-cache, must-revalidate, proxy-revalidate", + } + + try { + await s3.upload(uploadParams).promise() - if (!response.ok) { + logger.log("Genesis City manifest updated correctly") + } catch (error: any) { logger.error("Failed to update Genesis City manifest", { - error: await response.text(), + error: error?.message, }) - } else { - logger.log("Genesis City manifest updated correctly") } }