From 2a5d94a4ec9141ed17b0520dfb47ea1556639832 Mon Sep 17 00:00:00 2001 From: mattcasey Date: Mon, 9 Dec 2024 16:28:40 -0700 Subject: [PATCH 1/3] use aws package to upload to s32 --- .../src/builderNfts/artwork/uploadMetadata.ts | 51 ++++------------- .../starterPack/uploadStarterPackArtwork.ts | 56 ++++--------------- 2 files changed, 23 insertions(+), 84 deletions(-) diff --git a/packages/scoutgame/src/builderNfts/artwork/uploadMetadata.ts b/packages/scoutgame/src/builderNfts/artwork/uploadMetadata.ts index d77dae4368..f0abc9e16d 100644 --- a/packages/scoutgame/src/builderNfts/artwork/uploadMetadata.ts +++ b/packages/scoutgame/src/builderNfts/artwork/uploadMetadata.ts @@ -1,18 +1,16 @@ -/** - * OpenSea Metadata Specification Type - * Represents the metadata schema used for OpenSea items. - * - * @docs https://docs.opensea.io/docs/metadata-standards - */ -import type { PutObjectCommandInput, S3ClientConfig } from '@aws-sdk/client-s3'; -import { S3Client } from '@aws-sdk/client-s3'; -import { Upload } from '@aws-sdk/lib-storage'; +import { uploadFileToS3 } from '@packages/aws/uploadToS3Server'; import { getBuilderStarterPackContractAddress } from '../constants'; import { builderNftArtworkContractName } from './constants'; import { getNftTokenUrlPath, imageDomain } from './utils'; +/** + * OpenSea Metadata Specification Type + * Represents the metadata schema used for OpenSea items. + * + * @docs https://docs.opensea.io/docs/metadata-standards + */ type OpenSeaMetadata = { /** * URL to the image of the item. @@ -83,22 +81,6 @@ type OpenSeaMetadata = { youtube_url?: string; }; -function getS3ClientConfig() { - const config: Pick = { - region: process.env.S3_UPLOAD_REGION - }; - - if (process.env.S3_UPLOAD_KEY && process.env.S3_UPLOAD_SECRET) { - config.credentials = { - accessKeyId: process.env.S3_UPLOAD_KEY as string, - secretAccessKey: process.env.S3_UPLOAD_SECRET as string - }; - } - return config; -} - -const client = new S3Client(getS3ClientConfig()); - /** * Uploads OpenSea metadata to S3. * @@ -151,21 +133,12 @@ export async function uploadMetadata({ // Convert metadata to JSON buffer const metadataBuffer = Buffer.from(JSON.stringify(metadata)); - // Set up the S3 upload parameters - const params: PutObjectCommandInput = { - ACL: 'public-read', - Bucket: process.env.SCOUTGAME_S3_BUCKET, - Key: `nft/${metadataPath}`, - Body: metadataBuffer, - ContentType: 'application/json' - }; - - const s3Upload = new Upload({ - client, - params + await uploadFileToS3({ + pathInS3: `nft/${metadataPath}`, + bucket: process.env.SCOUTGAME_S3_BUCKET, + content: metadataBuffer, + contentType: 'application/json' }); - await s3Upload.done(); - return `${imageDomain}/${metadataPath}`; } diff --git a/packages/scoutgame/src/builderNfts/builderRegistration/starterPack/uploadStarterPackArtwork.ts b/packages/scoutgame/src/builderNfts/builderRegistration/starterPack/uploadStarterPackArtwork.ts index d96d52dcbb..d7a9cdc320 100644 --- a/packages/scoutgame/src/builderNfts/builderRegistration/starterPack/uploadStarterPackArtwork.ts +++ b/packages/scoutgame/src/builderNfts/builderRegistration/starterPack/uploadStarterPackArtwork.ts @@ -1,6 +1,4 @@ -import { S3Client } from '@aws-sdk/client-s3'; -import type { PutObjectCommandInput, S3ClientConfig } from '@aws-sdk/client-s3'; -import { Upload } from '@aws-sdk/lib-storage'; +import { uploadFileToS3 } from '@packages/aws/uploadToS3Server'; import { getBuilderActivities } from '../../../builders/getBuilderActivities'; import { getBuilderNft } from '../../../builders/getBuilderNft'; @@ -15,22 +13,6 @@ import { updateNftStarterPackImage } from './generateStarterPackNftImage'; -function getS3ClientConfig() { - const config: Pick = { - region: process.env.S3_UPLOAD_REGION - }; - - if (process.env.S3_UPLOAD_KEY && process.env.S3_UPLOAD_SECRET) { - config.credentials = { - accessKeyId: process.env.S3_UPLOAD_KEY as string, - secretAccessKey: process.env.S3_UPLOAD_SECRET as string - }; - } - return config; -} - -const client = new S3Client(getS3ClientConfig()); - export async function uploadStarterPackArtwork({ imageHostingBaseUrl, avatar, @@ -64,21 +46,13 @@ export async function uploadStarterPackArtwork({ contractName: getBuilderStarterPackContractAddress() }); - const params: PutObjectCommandInput = { - ACL: 'public-read', - Bucket: process.env.SCOUTGAME_S3_BUCKET, - Key: `nft/${imagePath}`, - Body: imageBuffer, - ContentType: 'image/png' - }; - - const s3Upload = new Upload({ - client, - params + await uploadFileToS3({ + pathInS3: `nft/${imagePath}`, + bucket: process.env.SCOUTGAME_S3_BUCKET, + content: imageBuffer, + contentType: 'image/png' }); - await s3Upload.done(); - return `${imageDomain}/${imagePath}`; } @@ -116,20 +90,12 @@ export async function uploadStarterPackArtworkCongrats({ contractName: getBuilderStarterPackContractAddress() }); - const params: PutObjectCommandInput = { - ACL: 'public-read', - Bucket: process.env.SCOUTGAME_S3_BUCKET, - Key: `nft/${imagePath}`, - Body: imageBuffer, - ContentType: 'image/png' - }; - - const s3Upload = new Upload({ - client, - params + await uploadFileToS3({ + pathInS3: `nft/${imagePath}`, + bucket: process.env.SCOUTGAME_S3_BUCKET, + content: imageBuffer, + contentType: 'image/png' }); - await s3Upload.done(); - return `${imageDomain}/${imagePath}`; } From 6e2bf4a919774b032f0f14857893fc9cc8239900 Mon Sep 17 00:00:00 2001 From: mattcasey Date: Mon, 9 Dec 2024 16:32:58 -0700 Subject: [PATCH 2/3] update lock --- package-lock.json | 52 ++++++++++++++++++- packages/mixpanel/package.json | 3 ++ .../src/actions/createUserClaimScreen.tsx | 32 ++++-------- 3 files changed, 63 insertions(+), 24 deletions(-) diff --git a/package-lock.json b/package-lock.json index e70f52d558..a400e47832 100644 --- a/package-lock.json +++ b/package-lock.json @@ -72154,7 +72154,33 @@ }, "packages/mixpanel": { "name": "@packages/mixpanel", - "version": "0.0.0" + "version": "0.0.0", + "dependencies": { + "mixpanel": "^0.18.0" + } + }, + "packages/mixpanel/node_modules/https-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", + "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "packages/mixpanel/node_modules/mixpanel": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/mixpanel/-/mixpanel-0.18.0.tgz", + "integrity": "sha512-VyUoiLB/S/7abYYHGD5x0LijeuJCUabG8Hb+FvYU3Y99xHf1Qh+s4/pH9lt50fRitAHncWbU1FE01EknUfVVjQ==", + "dependencies": { + "https-proxy-agent": "5.0.0" + }, + "engines": { + "node": ">=10.0" + } }, "packages/onchain": { "name": "@packages/onchain", @@ -86868,7 +86894,29 @@ "version": "file:packages/mailer" }, "@packages/mixpanel": { - "version": "file:packages/mixpanel" + "version": "file:packages/mixpanel", + "requires": { + "mixpanel": "^0.18.0" + }, + "dependencies": { + "https-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", + "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", + "requires": { + "agent-base": "6", + "debug": "4" + } + }, + "mixpanel": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/mixpanel/-/mixpanel-0.18.0.tgz", + "integrity": "sha512-VyUoiLB/S/7abYYHGD5x0LijeuJCUabG8Hb+FvYU3Y99xHf1Qh+s4/pH9lt50fRitAHncWbU1FE01EknUfVVjQ==", + "requires": { + "https-proxy-agent": "5.0.0" + } + } + } }, "@packages/scoutgame": { "version": "file:packages/scoutgame", diff --git a/packages/mixpanel/package.json b/packages/mixpanel/package.json index 399ac01c27..9b70324207 100644 --- a/packages/mixpanel/package.json +++ b/packages/mixpanel/package.json @@ -8,5 +8,8 @@ }, "exports": { "./*": "./src/*.ts" + }, + "dependencies": { + "mixpanel": "^0.18.0" } } diff --git a/packages/scoutgame-ui/src/actions/createUserClaimScreen.tsx b/packages/scoutgame-ui/src/actions/createUserClaimScreen.tsx index df7a1ed66a..85990110b5 100644 --- a/packages/scoutgame-ui/src/actions/createUserClaimScreen.tsx +++ b/packages/scoutgame-ui/src/actions/createUserClaimScreen.tsx @@ -1,19 +1,15 @@ -import { S3Client, type PutObjectCommandInput } from '@aws-sdk/client-s3'; -import { Upload } from '@aws-sdk/lib-storage'; import { log } from '@charmverse/core/log'; import { prisma } from '@charmverse/core/prisma-client'; -import { getS3ClientConfig } from '@packages/aws/getS3ClientConfig'; +import { uploadFileToS3 } from '@packages/aws/uploadToS3Server'; +import { getLastWeek } from '@packages/scoutgame/dates'; import { getClaimablePointsWithSources } from '@packages/scoutgame/points/getClaimablePointsWithSources'; import { baseUrl } from '@packages/utils/constants'; import puppeteer from 'puppeteer'; -import React from 'react'; import { PointsClaimBuilderScreen } from '../components/claim/components/PointsClaimScreen/PointsClaimModal/PointsClaimBuilderScreen'; import { PointsClaimScoutScreen } from '../components/claim/components/PointsClaimScreen/PointsClaimModal/PointsClaimScoutScreen'; -const client = new S3Client(getS3ClientConfig()); - -export async function createUserClaimScreen({ userId, week }: { userId: string; week: string }) { +export async function createUserClaimScreen(userId: string) { const { renderToString } = await import('react-dom/server'); const user = await prisma.scout.findUniqueOrThrow({ @@ -93,26 +89,18 @@ export async function createUserClaimScreen({ userId, week }: { userId: string; await page.waitForNetworkIdle(); const screenshot = await page.screenshot(); - const bucket = process.env.S3_UPLOAD_BUCKET; - - const params: PutObjectCommandInput = { - Bucket: bucket, - Key: `points-claim/${userId}/${week}.png`, - Body: screenshot, - ContentType: 'image/png' - }; - const s3Upload = new Upload({ - client, - params + await uploadFileToS3({ + pathInS3: `points-claim/${userId}/${getLastWeek()}.png`, + bucket: process.env.S3_UPLOAD_BUCKET, + content: screenshot as Buffer, + contentType: 'image/png' }); - await s3Upload.done(); - log.info('generated claim creen', { claimedPoints, bucket, week, userId }); + log.info('generated claim screen', { userId }); } catch (e) { - log.error('error generating claim screen', { userId, week, claimedPoints, error: e }); + log.error('error generating claim screen', { userId, error: e }); } finally { await browser.close(); } - return { week }; } From 2c883607770832e9bc612e5ad664b86020ee7c15 Mon Sep 17 00:00:00 2001 From: mattcasey Date: Tue, 10 Dec 2024 13:28:35 -0700 Subject: [PATCH 3/3] fix types --- packages/scoutgame-ui/src/actions/createUserClaimScreen.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/scoutgame-ui/src/actions/createUserClaimScreen.tsx b/packages/scoutgame-ui/src/actions/createUserClaimScreen.tsx index 85990110b5..f4b7500cf5 100644 --- a/packages/scoutgame-ui/src/actions/createUserClaimScreen.tsx +++ b/packages/scoutgame-ui/src/actions/createUserClaimScreen.tsx @@ -9,7 +9,7 @@ import puppeteer from 'puppeteer'; import { PointsClaimBuilderScreen } from '../components/claim/components/PointsClaimScreen/PointsClaimModal/PointsClaimBuilderScreen'; import { PointsClaimScoutScreen } from '../components/claim/components/PointsClaimScreen/PointsClaimModal/PointsClaimScoutScreen'; -export async function createUserClaimScreen(userId: string) { +export async function createUserClaimScreen({ userId, week }: { userId: string; week: string }) { const { renderToString } = await import('react-dom/server'); const user = await prisma.scout.findUniqueOrThrow({ @@ -91,7 +91,7 @@ export async function createUserClaimScreen(userId: string) { const screenshot = await page.screenshot(); await uploadFileToS3({ - pathInS3: `points-claim/${userId}/${getLastWeek()}.png`, + pathInS3: `points-claim/${userId}/${week}.png`, bucket: process.env.S3_UPLOAD_BUCKET, content: screenshot as Buffer, contentType: 'image/png'