{ "name": "functions", "scripts": { "lint": "eslint --ext .js,.ts .", "build": "tsc", "build:watch": "tsc --watch", "export:usersv2-emails": "npm run build && node lib/scripts/exportUsersV2Emails.js --all-emails", "serve": "npm run build && firebase emulators:start --only functions", "shell": "npm run build && firebase functions:shell", "start": "npm run shell", "deploy": "firebase deploy --only functions", "logs": "firebase functions:log", "migrate:username-lower": "npm run build && node lib/scripts/backfillUsernameLower.js", "migrate:favourite-contributions": "npm run build && node lib/backfillFavouriteContributions.js", "migrate:view-stats": "npm run build && node lib/scripts/migrateGithubViewStats.js", "migrate:wall-collections": "npm run build && node lib/scripts/backfillWallCollections.js", "migrate:wall-search-terms": "npm run build && node lib/scripts/backfillWallSearchTerms.js", "migrate:github-to-r2": "npm run build && node lib/scripts/migrateGithubToR2.js", "migrate:ai-receipts": "npm run build && node lib/scripts/backfillAiGenerationReceipts.js", "migrate:dedupe-wall-ids": "npm run build && node lib/scripts/dedupeWallIds.js", "migrate:wall-authors": "npm run build && node lib/scripts/backfillWallAuthors.js", "economy:config": "node lib/scripts/economyConfig.js", "drops:reserve": "npm run build && node lib/scripts/reserveDrop.js", "studio:account": "npm run build && node lib/scripts/setupStudioAccount.js", "studio:run": "npm run build && node lib/scripts/runStudioBatch.js" }, "engines": { "node": "24" }, "main": "lib/index.js", "dependencies": { "@google-cloud/vision": "^4.0.0", "firebase-admin": "^13.6.0", "firebase-functions": "^7.0.0", "sharp": "^0.35.5" }, "devDependencies": { "@typescript-eslint/eslint-plugin": "^5.12.0", "@typescript-eslint/parser": "^5.12.0", "eslint": "^8.9.0", "eslint-config-google": "^0.14.0", "eslint-plugin-import": "^2.25.4", "typescript": "^5.7.3" }, "private": true, "overrides": { "uuid": "^11.1.1" } }