use cli b2 instead of s3 library

This commit is contained in:
CJ_Clippy 2025-08-27 16:29:55 -08:00
parent f238c13739
commit 3ffbcbab8e
5 changed files with 37 additions and 28 deletions

View File

@ -7,5 +7,6 @@
"https://json.schemastore.org/kustomization.json": "file:///home/cj/Documents/futureporn-monorepo/clusters/production/infrastructure.yaml" "https://json.schemastore.org/kustomization.json": "file:///home/cj/Documents/futureporn-monorepo/clusters/production/infrastructure.yaml"
}, },
"editor.tabSize": 2, "editor.tabSize": 2,
"editor.formatOnSave": true "editor.formatOnSave": true,
"git.ignoreLimitWarning": true
} }

View File

@ -19,7 +19,8 @@ echo(" * Remote pin the IPFS CID")
echo(" [Press Enter When Complete...]") echo(" [Press Enter When Complete...]")
_ = stdin() _ = stdin()
echo(" * Create magnet link. ex: `torf ~/Downloads/projektmelody-chaturbate-2025-08-25.mp4 --notorrent --notracker --webseed https://futureporn-b2.b-cdn.net/projektmelody-chaturbate-2025-08-25.mp4'") echo(" * Create magnet link. ex: `mktorrent --web-seed https://futureporn-b2.b-cdn.net/projektmelody-fansly-2025-08-27.mp4 ~/Documents/voddo/projektmelody-fansly-2025-08-27.mp4`")
echo(" * Create magnet link. ex: `torf ~/Downloads/projektmelody-chaturbate-2025-08-27.mp4 --notorrent --notracker`")
echo(" [Press Enter When Complete...]") echo(" [Press Enter When Complete...]")
_ = stdin() _ = stdin()

View File

@ -1,7 +1,7 @@
{ {
"name": "futureporn", "name": "futureporn",
"private": true, "private": true,
"version": "2.4.14", "version": "2.5.0",
"type": "module", "type": "module",
"scripts": { "scripts": {
"dev": "concurrently npm:dev:serve npm:dev:build npm:dev:worker npm:dev:compose npm:dev:sftp", "dev": "concurrently npm:dev:serve npm:dev:build npm:dev:worker npm:dev:compose npm:dev:sftp",
@ -101,4 +101,4 @@
"prisma": { "prisma": {
"seed": "tsx prisma/seed.ts" "seed": "tsx prisma/seed.ts"
} }
} }

View File

@ -6,6 +6,7 @@ import {
import { readFile } from 'fs/promises'; import { readFile } from 'fs/promises';
import { env } from '../config/env' // adjust this path based on your project structure import { env } from '../config/env' // adjust this path based on your project structure
import logger from "./logger"; import logger from "./logger";
import { getNanoSpawn } from "./nanoSpawn";
let client: S3Client | null = null let client: S3Client | null = null
@ -24,33 +25,38 @@ export async function uploadFile(
if (!mimetype) throw new Error('uploadFile requires mimetype as fifth param'); if (!mimetype) throw new Error('uploadFile requires mimetype as fifth param');
logger.debug(`[uploadFile] filePath=${filePath} with key=${key} bucket=${bucket}`); logger.debug(`[uploadFile] filePath=${filePath} with key=${key} bucket=${bucket}`);
try { const spawn = await getNanoSpawn();
// Read file content from disk await spawn('b2', ['file', 'upload', bucket, filePath, key])
const fileBuffer = await readFile(filePath);
// Upload to S3 return key
await s3Client.send(
new PutObjectCommand({
Bucket: bucket,
Key: key,
Body: fileBuffer,
ContentType: mimetype, // or determine dynamically if needed
}),
);
return key; // try {
// // Read file content from disk
// const fileBuffer = await readFile(filePath);
} catch (caught) { // // Upload to S3
if (caught instanceof S3ServiceException) { // await s3Client.send(
logger.error( // new PutObjectCommand({
`Error from S3 while uploading to ${bucket}. ${caught.name}: ${caught.message}`, // Bucket: bucket,
); // Key: key,
} else { // Body: fileBuffer,
logger.error(`Unexpected error during upload:`, caught); // ContentType: mimetype, // or determine dynamically if needed
} // }),
// );
throw new Error(`Failed to upload ${filePath} to s3://${bucket}/${key}`); // return key;
}
// } catch (caught) {
// if (caught instanceof S3ServiceException) {
// logger.error(
// `Error from S3 while uploading to ${bucket}. ${caught.name}: ${caught.message}`,
// );
// } else {
// logger.error(`Unexpected error during upload:`, caught);
// }
// throw new Error(`Failed to upload ${filePath} to s3://${bucket}/${key}`);
// }
} }

View File

@ -40,7 +40,8 @@ async function getJson(username) {
const formatted = formatTwitterDate(sinceDate); const formatted = formatTwitterDate(sinceDate);
const { defaultDatasetId } = await client.actor('kaitoeasyapi/twitter-x-data-tweet-scraper-pay-per-result-cheapest').call({ const { defaultDatasetId } = await client.actor('kaitoeasyapi/twitter-x-data-tweet-scraper-pay-per-result-cheapest').call({
searchTerms: [`from:${username} since:${formatted}`] searchTerms: [`from:${username} since:${formatted}`],
maxItems: 15,
}); });
// Fetches results from the actor's dataset. // Fetches results from the actor's dataset.