diff --git a/firebase-debug.log b/firebase-debug.log deleted file mode 100644 index 426d91c..0000000 --- a/firebase-debug.log +++ /dev/null @@ -1,831 +0,0 @@ -[debug] [2025-09-08T11:30:00.226Z] ---------------------------------------------------------------------- -[debug] [2025-09-08T11:30:00.228Z] Command: /opt/homebrew/Cellar/node/24.1.0/bin/node /Users/thomasdemirdjian/.npm-global/bin/firebase emulators:start --only functions -[debug] [2025-09-08T11:30:00.228Z] CLI Version: 14.15.2 -[debug] [2025-09-08T11:30:00.228Z] Platform: darwin -[debug] [2025-09-08T11:30:00.228Z] Node Version: v24.1.0 -[debug] [2025-09-08T11:30:00.228Z] Time: Mon Sep 08 2025 13:30:00 GMT+0200 (Central European Summer Time) -[debug] [2025-09-08T11:30:00.228Z] ---------------------------------------------------------------------- -[debug] -[debug] [2025-09-08T11:30:00.310Z] Object "" in "firebase.json" has unknown property: {"additionalProperty":"react-native"} -[debug] [2025-09-08T11:30:00.313Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"] -[debug] [2025-09-08T11:30:00.313Z] > authorizing via signed-in user (tdtomthomas@gmail.com) -[info] i emulators: Starting emulators: functions {"metadata":{"emulator":{"name":"hub"},"message":"Starting emulators: functions"}} -[debug] [2025-09-08T11:30:00.759Z] [logging] Logging Emulator only supports listening on one address (127.0.0.1). Not listening on ::1 -[debug] [2025-09-08T11:30:00.759Z] assigned listening specs for emulators {"user":{"hub":[{"address":"127.0.0.1","family":"IPv4","port":4400},{"address":"::1","family":"IPv6","port":4400}],"ui":[{"address":"127.0.0.1","family":"IPv4","port":4000},{"address":"::1","family":"IPv6","port":4000}],"logging":[{"address":"127.0.0.1","family":"IPv4","port":4500}]},"metadata":{"message":"assigned listening specs for emulators"}} -[debug] [2025-09-08T11:30:00.761Z] [hub] writing locator at /var/folders/4x/n553v4ds6xq73gwblz9jm7t00000gn/T/hub-musicland-d33f9.json -[debug] [2025-09-08T11:30:01.193Z] [functions] Functions Emulator only supports listening on one address (127.0.0.1). Not listening on ::1 -[debug] [2025-09-08T11:30:01.193Z] [eventarc] Eventarc Emulator only supports listening on one address (127.0.0.1). Not listening on ::1 -[debug] [2025-09-08T11:30:01.193Z] [tasks] Cloud Tasks Emulator only supports listening on one address (127.0.0.1). Not listening on ::1 -[debug] [2025-09-08T11:30:01.194Z] late-assigned ports for functions and eventarc emulators {"user":{"hub":[{"address":"127.0.0.1","family":"IPv4","port":4400},{"address":"::1","family":"IPv6","port":4400}],"ui":[{"address":"127.0.0.1","family":"IPv4","port":4000},{"address":"::1","family":"IPv6","port":4000}],"logging":[{"address":"127.0.0.1","family":"IPv4","port":4500}],"functions":[{"address":"127.0.0.1","family":"IPv4","port":5001}],"eventarc":[{"address":"127.0.0.1","family":"IPv4","port":9299}],"tasks":[{"address":"127.0.0.1","family":"IPv4","port":9499}]},"metadata":{"message":"late-assigned ports for functions and eventarc emulators"}} -[warn] ⚠ functions: The following emulators are not running, calls to these services from the Functions emulator will affect production: apphosting, auth, firestore, database, hosting, pubsub, storage, dataconnect {"metadata":{"emulator":{"name":"functions"},"message":"The following emulators are not running, calls to these services from the Functions emulator will affect production: \u001b[1mapphosting, auth, firestore, database, hosting, pubsub, storage, dataconnect\u001b[22m"}} -[debug] [2025-09-08T11:30:01.199Z] defaultcredentials: writing to file /Users/thomasdemirdjian/.config/firebase/tdtomthomas_gmail_com_application_default_credentials.json -[debug] [2025-09-08T11:30:01.200Z] Setting GAC to /Users/thomasdemirdjian/.config/firebase/tdtomthomas_gmail_com_application_default_credentials.json {"metadata":{"emulator":{"name":"functions"},"message":"Setting GAC to /Users/thomasdemirdjian/.config/firebase/tdtomthomas_gmail_com_application_default_credentials.json"}} -[debug] [2025-09-08T11:30:01.200Z] Checked if tokens are valid: false, expires at: 1757330753427 -[debug] [2025-09-08T11:30:01.200Z] Checked if tokens are valid: false, expires at: 1757330753427 -[debug] [2025-09-08T11:30:01.200Z] > refreshing access token with scopes: [] -[debug] [2025-09-08T11:30:01.201Z] >>> [apiv2][query] POST https://www.googleapis.com/oauth2/v3/token [none] -[debug] [2025-09-08T11:30:01.201Z] >>> [apiv2][body] POST https://www.googleapis.com/oauth2/v3/token [omitted] -[debug] [2025-09-08T11:30:01.320Z] <<< [apiv2][status] POST https://www.googleapis.com/oauth2/v3/token 200 -[debug] [2025-09-08T11:30:01.320Z] <<< [apiv2][body] POST https://www.googleapis.com/oauth2/v3/token [omitted] -[debug] [2025-09-08T11:30:01.340Z] >>> [apiv2][query] GET https://firebase.googleapis.com/v1beta1/projects/musicland-d33f9/adminSdkConfig [none] -[debug] [2025-09-08T11:30:01.828Z] <<< [apiv2][status] GET https://firebase.googleapis.com/v1beta1/projects/musicland-d33f9/adminSdkConfig 200 -[debug] [2025-09-08T11:30:01.828Z] <<< [apiv2][body] GET https://firebase.googleapis.com/v1beta1/projects/musicland-d33f9/adminSdkConfig {"projectId":"musicland-d33f9","storageBucket":"musicland-d33f9.firebasestorage.app"} -[info] i functions: Watching "/Users/thomasdemirdjian/Minuit/musicland/functions" for Cloud Functions... {"metadata":{"emulator":{"name":"functions"},"message":"Watching \"/Users/thomasdemirdjian/Minuit/musicland/functions\" for Cloud Functions..."}} -[debug] [2025-09-08T11:30:01.865Z] Validating nodejs source -[debug] [2025-09-08T11:30:02.288Z] > [functions] package.json contents: { - "name": "functions", - "description": "Cloud Functions for Firebase", - "scripts": { - "lint": "eslint .", - "serve": "firebase emulators:start --only functions", - "shell": "firebase functions:shell", - "start": "npm run shell", - "deploy": "firebase deploy --only functions", - "logs": "firebase functions:log" - }, - "engines": { - "node": "20" - }, - "main": "index.js", - "dependencies": { - "@genkit-ai/googleai": "^1.18.0", - "axios": "^1.11.0", - "firebase-admin": "^12.7.0", - "firebase-functions": "^6.4.0", - "genkit": "^1.18.0" - }, - "devDependencies": { - "eslint": "^8.15.0", - "eslint-config-google": "^0.14.0" - }, - "private": true -} -[debug] [2025-09-08T11:30:02.288Z] Building nodejs source -[debug] [2025-09-08T11:30:02.289Z] Failed to find version of module node: reached end of search path /Users/thomasdemirdjian/Minuit/musicland/functions/node_modules -[warn] ⚠ functions: Your requested "node" version "20" doesn't match your global version "24". Using node@24 from host. -[debug] [2025-09-08T11:30:02.290Z] Could not find functions.yaml. Must use http discovery -[debug] [2025-09-08T11:30:02.293Z] Found firebase-functions binary at '/Users/thomasdemirdjian/Minuit/musicland/functions/node_modules/.bin/firebase-functions' -[info] Serving at port 8363 - -[debug] [2025-09-08T11:30:02.781Z] Got response from /__/functions.yaml {"endpoints":{"music-generateMusic":{"availableMemoryMb":null,"timeoutSeconds":null,"minInstances":null,"maxInstances":null,"ingressSettings":null,"concurrency":null,"serviceAccountEmail":null,"vpc":null,"platform":"gcfv2","labels":{},"callableTrigger":{},"entryPoint":"music.generateMusic"},"music-getSunoStatus":{"availableMemoryMb":null,"timeoutSeconds":null,"minInstances":null,"maxInstances":null,"ingressSettings":null,"concurrency":null,"serviceAccountEmail":null,"vpc":null,"platform":"gcfv2","labels":{},"callableTrigger":{},"entryPoint":"music.getSunoStatus"},"music-getSunoTimestamps":{"availableMemoryMb":null,"timeoutSeconds":null,"minInstances":null,"maxInstances":null,"ingressSettings":null,"concurrency":null,"serviceAccountEmail":null,"vpc":null,"platform":"gcfv2","labels":{},"callableTrigger":{},"entryPoint":"music.getSunoTimestamps"},"music-sunoCallback":{"availableMemoryMb":null,"timeoutSeconds":null,"minInstances":null,"maxInstances":null,"ingressSettings":null,"concurrency":null,"serviceAccountEmail":null,"vpc":null,"platform":"gcfv2","labels":{},"httpsTrigger":{},"entryPoint":"music.sunoCallback"},"lyrics-generateLyrics":{"availableMemoryMb":null,"timeoutSeconds":null,"minInstances":null,"maxInstances":null,"ingressSettings":null,"concurrency":null,"serviceAccountEmail":null,"vpc":null,"platform":"gcfv2","labels":{},"callableTrigger":{},"entryPoint":"lyrics.generateLyrics"},"lyrics-analyseLyricsToxicity":{"availableMemoryMb":null,"timeoutSeconds":null,"minInstances":null,"maxInstances":null,"ingressSettings":null,"concurrency":null,"serviceAccountEmail":null,"vpc":null,"platform":"gcfv2","labels":{},"callableTrigger":{},"entryPoint":"lyrics.analyseLyricsToxicity"},"cover-onTaskCreateGenerateCover":{"availableMemoryMb":1024,"timeoutSeconds":540,"minInstances":null,"maxInstances":null,"ingressSettings":null,"concurrency":null,"serviceAccountEmail":null,"vpc":null,"platform":"gcfv2","labels":{},"eventTrigger":{"eventType":"google.cloud.firestore.document.v1.created","eventFilters":{"database":"(default)","namespace":"(default)"},"eventFilterPathPatterns":{"document":"tasks/{taskId}"},"retry":false},"entryPoint":"cover.onTaskCreateGenerateCover"}},"specVersion":"v1alpha1","requiredAPIs":[],"extensions":{}} -[info] ✔ functions: Loaded functions definitions from source: music.generateMusic, music.getSunoStatus, music.getSunoTimestamps, music.sunoCallback, lyrics.generateLyrics, lyrics.analyseLyricsToxicity, cover.onTaskCreateGenerateCover. {"metadata":{"emulator":{"name":"functions"},"message":"Loaded functions definitions from source: music.generateMusic, music.getSunoStatus, music.getSunoTimestamps, music.sunoCallback, lyrics.generateLyrics, lyrics.analyseLyricsToxicity, cover.onTaskCreateGenerateCover."}} -[info] ✔ functions[us-central1-music-generateMusic]: http function initialized (http://127.0.0.1:5001/musicland-d33f9/us-central1/music-generateMusic). {"metadata":{"emulator":{"name":"functions"},"message":"\u001b[1mhttp\u001b[22m function initialized (http://127.0.0.1:5001/musicland-d33f9/us-central1/music-generateMusic)."}} -[info] ✔ functions[us-central1-music-getSunoStatus]: http function initialized (http://127.0.0.1:5001/musicland-d33f9/us-central1/music-getSunoStatus). {"metadata":{"emulator":{"name":"functions"},"message":"\u001b[1mhttp\u001b[22m function initialized (http://127.0.0.1:5001/musicland-d33f9/us-central1/music-getSunoStatus)."}} -[info] ✔ functions[us-central1-music-getSunoTimestamps]: http function initialized (http://127.0.0.1:5001/musicland-d33f9/us-central1/music-getSunoTimestamps). {"metadata":{"emulator":{"name":"functions"},"message":"\u001b[1mhttp\u001b[22m function initialized (http://127.0.0.1:5001/musicland-d33f9/us-central1/music-getSunoTimestamps)."}} -[info] ✔ functions[us-central1-music-sunoCallback]: http function initialized (http://127.0.0.1:5001/musicland-d33f9/us-central1/music-sunoCallback). {"metadata":{"emulator":{"name":"functions"},"message":"\u001b[1mhttp\u001b[22m function initialized (http://127.0.0.1:5001/musicland-d33f9/us-central1/music-sunoCallback)."}} -[info] ✔ functions[us-central1-lyrics-generateLyrics]: http function initialized (http://127.0.0.1:5001/musicland-d33f9/us-central1/lyrics-generateLyrics). {"metadata":{"emulator":{"name":"functions"},"message":"\u001b[1mhttp\u001b[22m function initialized (http://127.0.0.1:5001/musicland-d33f9/us-central1/lyrics-generateLyrics)."}} -[info] ✔ functions[us-central1-lyrics-analyseLyricsToxicity]: http function initialized (http://127.0.0.1:5001/musicland-d33f9/us-central1/lyrics-analyseLyricsToxicity). {"metadata":{"emulator":{"name":"functions"},"message":"\u001b[1mhttp\u001b[22m function initialized (http://127.0.0.1:5001/musicland-d33f9/us-central1/lyrics-analyseLyricsToxicity)."}} -[info] i functions[us-central1-cover-onTaskCreateGenerateCover]: function ignored because the firestore emulator does not exist or is not running. {"metadata":{"emulator":{"name":"functions"},"message":"function ignored because the firestore emulator does not exist or is not running."}} -[debug] [2025-09-08T11:30:06.816Z] Could not find VSCode notification endpoint: FetchError: request to http://localhost:40001/vscode/notify failed, reason: . If you are not running the Firebase Data Connect VSCode extension, this is expected and not an issue. -[info] -┌─────────────────────────────────────────────────────────────┐ -│ ✔ All emulators ready! It is now safe to connect your app. │ -│ i View Emulator UI at http://127.0.0.1:4000/ │ -└─────────────────────────────────────────────────────────────┘ - -┌───────────┬────────────────┬─────────────────────────────────┐ -│ Emulator │ Host:Port │ View in Emulator UI │ -├───────────┼────────────────┼─────────────────────────────────┤ -│ Functions │ 127.0.0.1:5001 │ http://127.0.0.1:4000/functions │ -└───────────┴────────────────┴─────────────────────────────────┘ - Emulator Hub host: 127.0.0.1 port: 4400 - Other reserved ports: 4500 - -Issues? Report them at https://github.com/firebase/firebase-tools/issues and attach the *-debug.log files. - -[debug] [2025-09-08T11:36:18.190Z] File /Users/thomasdemirdjian/Minuit/musicland/functions/helpers/gemini.js changed, reloading triggers {"metadata":{"emulator":{"name":"functions"},"message":"File /Users/thomasdemirdjian/Minuit/musicland/functions/helpers/gemini.js changed, reloading triggers"}} -[debug] [2025-09-08T11:36:19.192Z] Validating nodejs source -[debug] [2025-09-08T11:36:19.490Z] > [functions] package.json contents: { - "name": "functions", - "description": "Cloud Functions for Firebase", - "scripts": { - "lint": "eslint .", - "serve": "firebase emulators:start --only functions", - "shell": "firebase functions:shell", - "start": "npm run shell", - "deploy": "firebase deploy --only functions", - "logs": "firebase functions:log" - }, - "engines": { - "node": "20" - }, - "main": "index.js", - "dependencies": { - "@genkit-ai/googleai": "^1.18.0", - "axios": "^1.11.0", - "firebase-admin": "^12.7.0", - "firebase-functions": "^6.4.0", - "genkit": "^1.18.0" - }, - "devDependencies": { - "eslint": "^8.15.0", - "eslint-config-google": "^0.14.0" - }, - "private": true -} -[debug] [2025-09-08T11:36:19.490Z] Building nodejs source -[debug] [2025-09-08T11:36:19.490Z] Failed to find version of module node: reached end of search path /Users/thomasdemirdjian/Minuit/musicland/functions/node_modules -[warn] ⚠ functions: Your requested "node" version "20" doesn't match your global version "24". Using node@24 from host. -[debug] [2025-09-08T11:36:19.490Z] Could not find functions.yaml. Must use http discovery -[debug] [2025-09-08T11:36:19.491Z] Found firebase-functions binary at '/Users/thomasdemirdjian/Minuit/musicland/functions/node_modules/.bin/firebase-functions' -[info] Serving at port 8371 - -[debug] [2025-09-08T11:36:19.710Z] Got response from /__/functions.yaml {"endpoints":{"music-generateMusic":{"availableMemoryMb":null,"timeoutSeconds":null,"minInstances":null,"maxInstances":null,"ingressSettings":null,"concurrency":null,"serviceAccountEmail":null,"vpc":null,"platform":"gcfv2","labels":{},"callableTrigger":{},"entryPoint":"music.generateMusic"},"music-getSunoStatus":{"availableMemoryMb":null,"timeoutSeconds":null,"minInstances":null,"maxInstances":null,"ingressSettings":null,"concurrency":null,"serviceAccountEmail":null,"vpc":null,"platform":"gcfv2","labels":{},"callableTrigger":{},"entryPoint":"music.getSunoStatus"},"music-getSunoTimestamps":{"availableMemoryMb":null,"timeoutSeconds":null,"minInstances":null,"maxInstances":null,"ingressSettings":null,"concurrency":null,"serviceAccountEmail":null,"vpc":null,"platform":"gcfv2","labels":{},"callableTrigger":{},"entryPoint":"music.getSunoTimestamps"},"music-sunoCallback":{"availableMemoryMb":null,"timeoutSeconds":null,"minInstances":null,"maxInstances":null,"ingressSettings":null,"concurrency":null,"serviceAccountEmail":null,"vpc":null,"platform":"gcfv2","labels":{},"httpsTrigger":{},"entryPoint":"music.sunoCallback"},"lyrics-generateLyrics":{"availableMemoryMb":null,"timeoutSeconds":null,"minInstances":null,"maxInstances":null,"ingressSettings":null,"concurrency":null,"serviceAccountEmail":null,"vpc":null,"platform":"gcfv2","labels":{},"callableTrigger":{},"entryPoint":"lyrics.generateLyrics"},"lyrics-analyseLyricsToxicity":{"availableMemoryMb":null,"timeoutSeconds":null,"minInstances":null,"maxInstances":null,"ingressSettings":null,"concurrency":null,"serviceAccountEmail":null,"vpc":null,"platform":"gcfv2","labels":{},"callableTrigger":{},"entryPoint":"lyrics.analyseLyricsToxicity"},"cover-onTaskCreateGenerateCover":{"availableMemoryMb":1024,"timeoutSeconds":540,"minInstances":null,"maxInstances":null,"ingressSettings":null,"concurrency":null,"serviceAccountEmail":null,"vpc":null,"platform":"gcfv2","labels":{},"eventTrigger":{"eventType":"google.cloud.firestore.document.v1.created","eventFilters":{"database":"(default)","namespace":"(default)"},"eventFilterPathPatterns":{"document":"tasks/{taskId}"},"retry":false},"entryPoint":"cover.onTaskCreateGenerateCover"}},"specVersion":"v1alpha1","requiredAPIs":[],"extensions":{}} -[info] ✔ functions: Loaded functions definitions from source: music.generateMusic, music.getSunoStatus, music.getSunoTimestamps, music.sunoCallback, lyrics.generateLyrics, lyrics.analyseLyricsToxicity, cover.onTaskCreateGenerateCover. {"metadata":{"emulator":{"name":"functions"},"message":"Loaded functions definitions from source: music.generateMusic, music.getSunoStatus, music.getSunoTimestamps, music.sunoCallback, lyrics.generateLyrics, lyrics.analyseLyricsToxicity, cover.onTaskCreateGenerateCover."}} -[debug] [2025-09-08T11:49:20.766Z] File /Users/thomasdemirdjian/Minuit/musicland/functions/helpers/gemini.js changed, reloading triggers {"metadata":{"emulator":{"name":"functions"},"message":"File /Users/thomasdemirdjian/Minuit/musicland/functions/helpers/gemini.js changed, reloading triggers"}} -[debug] [2025-09-08T11:49:20.868Z] File /Users/thomasdemirdjian/Minuit/musicland/functions/helpers/gemini.js changed, reloading triggers {"metadata":{"emulator":{"name":"functions"},"message":"File /Users/thomasdemirdjian/Minuit/musicland/functions/helpers/gemini.js changed, reloading triggers"}} -[debug] [2025-09-08T11:49:21.870Z] Validating nodejs source -[debug] [2025-09-08T11:49:22.292Z] > [functions] package.json contents: { - "name": "functions", - "description": "Cloud Functions for Firebase", - "scripts": { - "lint": "eslint .", - "serve": "firebase emulators:start --only functions", - "shell": "firebase functions:shell", - "start": "npm run shell", - "deploy": "firebase deploy --only functions", - "logs": "firebase functions:log" - }, - "engines": { - "node": "20" - }, - "main": "index.js", - "dependencies": { - "@genkit-ai/googleai": "^1.18.0", - "axios": "^1.11.0", - "firebase-admin": "^12.7.0", - "firebase-functions": "^6.4.0", - "genkit": "^1.18.0" - }, - "devDependencies": { - "eslint": "^8.15.0", - "eslint-config-google": "^0.14.0" - }, - "private": true -} -[debug] [2025-09-08T11:49:22.292Z] Building nodejs source -[debug] [2025-09-08T11:49:22.292Z] Failed to find version of module node: reached end of search path /Users/thomasdemirdjian/Minuit/musicland/functions/node_modules -[warn] ⚠ functions: Your requested "node" version "20" doesn't match your global version "24". Using node@24 from host. -[debug] [2025-09-08T11:49:22.293Z] Could not find functions.yaml. Must use http discovery -[debug] [2025-09-08T11:49:22.295Z] Found firebase-functions binary at '/Users/thomasdemirdjian/Minuit/musicland/functions/node_modules/.bin/firebase-functions' -[info] Serving at port 8552 - -[debug] [2025-09-08T11:49:22.732Z] Got response from /__/functions.yaml {"endpoints":{"music-generateMusic":{"availableMemoryMb":null,"timeoutSeconds":null,"minInstances":null,"maxInstances":null,"ingressSettings":null,"concurrency":null,"serviceAccountEmail":null,"vpc":null,"platform":"gcfv2","labels":{},"callableTrigger":{},"entryPoint":"music.generateMusic"},"music-getSunoStatus":{"availableMemoryMb":null,"timeoutSeconds":null,"minInstances":null,"maxInstances":null,"ingressSettings":null,"concurrency":null,"serviceAccountEmail":null,"vpc":null,"platform":"gcfv2","labels":{},"callableTrigger":{},"entryPoint":"music.getSunoStatus"},"music-getSunoTimestamps":{"availableMemoryMb":null,"timeoutSeconds":null,"minInstances":null,"maxInstances":null,"ingressSettings":null,"concurrency":null,"serviceAccountEmail":null,"vpc":null,"platform":"gcfv2","labels":{},"callableTrigger":{},"entryPoint":"music.getSunoTimestamps"},"music-sunoCallback":{"availableMemoryMb":null,"timeoutSeconds":null,"minInstances":null,"maxInstances":null,"ingressSettings":null,"concurrency":null,"serviceAccountEmail":null,"vpc":null,"platform":"gcfv2","labels":{},"httpsTrigger":{},"entryPoint":"music.sunoCallback"},"lyrics-generateLyrics":{"availableMemoryMb":null,"timeoutSeconds":null,"minInstances":null,"maxInstances":null,"ingressSettings":null,"concurrency":null,"serviceAccountEmail":null,"vpc":null,"platform":"gcfv2","labels":{},"callableTrigger":{},"entryPoint":"lyrics.generateLyrics"},"lyrics-analyseLyricsToxicity":{"availableMemoryMb":null,"timeoutSeconds":null,"minInstances":null,"maxInstances":null,"ingressSettings":null,"concurrency":null,"serviceAccountEmail":null,"vpc":null,"platform":"gcfv2","labels":{},"callableTrigger":{},"entryPoint":"lyrics.analyseLyricsToxicity"},"cover-onTaskCreateGenerateCover":{"availableMemoryMb":1024,"timeoutSeconds":540,"minInstances":null,"maxInstances":null,"ingressSettings":null,"concurrency":null,"serviceAccountEmail":null,"vpc":null,"platform":"gcfv2","labels":{},"eventTrigger":{"eventType":"google.cloud.firestore.document.v1.created","eventFilters":{"database":"(default)","namespace":"(default)"},"eventFilterPathPatterns":{"document":"tasks/{taskId}"},"retry":false},"entryPoint":"cover.onTaskCreateGenerateCover"}},"specVersion":"v1alpha1","requiredAPIs":[],"extensions":{}} -[debug] [2025-09-08T11:49:23.905Z] File /Users/thomasdemirdjian/Minuit/musicland/functions/helpers/gemini.js changed, reloading triggers {"metadata":{"emulator":{"name":"functions"},"message":"File /Users/thomasdemirdjian/Minuit/musicland/functions/helpers/gemini.js changed, reloading triggers"}} -[debug] [2025-09-08T11:49:24.906Z] Validating nodejs source -[debug] [2025-09-08T11:49:25.204Z] > [functions] package.json contents: { - "name": "functions", - "description": "Cloud Functions for Firebase", - "scripts": { - "lint": "eslint .", - "serve": "firebase emulators:start --only functions", - "shell": "firebase functions:shell", - "start": "npm run shell", - "deploy": "firebase deploy --only functions", - "logs": "firebase functions:log" - }, - "engines": { - "node": "20" - }, - "main": "index.js", - "dependencies": { - "@genkit-ai/googleai": "^1.18.0", - "axios": "^1.11.0", - "firebase-admin": "^12.7.0", - "firebase-functions": "^6.4.0", - "genkit": "^1.18.0" - }, - "devDependencies": { - "eslint": "^8.15.0", - "eslint-config-google": "^0.14.0" - }, - "private": true -} -[debug] [2025-09-08T11:49:25.204Z] Building nodejs source -[debug] [2025-09-08T11:49:25.204Z] Failed to find version of module node: reached end of search path /Users/thomasdemirdjian/Minuit/musicland/functions/node_modules -[warn] ⚠ functions: Your requested "node" version "20" doesn't match your global version "24". Using node@24 from host. -[debug] [2025-09-08T11:49:25.204Z] Could not find functions.yaml. Must use http discovery -[debug] [2025-09-08T11:49:25.205Z] Found firebase-functions binary at '/Users/thomasdemirdjian/Minuit/musicland/functions/node_modules/.bin/firebase-functions' -[info] Serving at port 8001 - -[debug] [2025-09-08T11:49:25.422Z] Got response from /__/functions.yaml {"endpoints":{"music-generateMusic":{"availableMemoryMb":null,"timeoutSeconds":null,"minInstances":null,"maxInstances":null,"ingressSettings":null,"concurrency":null,"serviceAccountEmail":null,"vpc":null,"platform":"gcfv2","labels":{},"callableTrigger":{},"entryPoint":"music.generateMusic"},"music-getSunoStatus":{"availableMemoryMb":null,"timeoutSeconds":null,"minInstances":null,"maxInstances":null,"ingressSettings":null,"concurrency":null,"serviceAccountEmail":null,"vpc":null,"platform":"gcfv2","labels":{},"callableTrigger":{},"entryPoint":"music.getSunoStatus"},"music-getSunoTimestamps":{"availableMemoryMb":null,"timeoutSeconds":null,"minInstances":null,"maxInstances":null,"ingressSettings":null,"concurrency":null,"serviceAccountEmail":null,"vpc":null,"platform":"gcfv2","labels":{},"callableTrigger":{},"entryPoint":"music.getSunoTimestamps"},"music-sunoCallback":{"availableMemoryMb":null,"timeoutSeconds":null,"minInstances":null,"maxInstances":null,"ingressSettings":null,"concurrency":null,"serviceAccountEmail":null,"vpc":null,"platform":"gcfv2","labels":{},"httpsTrigger":{},"entryPoint":"music.sunoCallback"},"lyrics-generateLyrics":{"availableMemoryMb":null,"timeoutSeconds":null,"minInstances":null,"maxInstances":null,"ingressSettings":null,"concurrency":null,"serviceAccountEmail":null,"vpc":null,"platform":"gcfv2","labels":{},"callableTrigger":{},"entryPoint":"lyrics.generateLyrics"},"lyrics-analyseLyricsToxicity":{"availableMemoryMb":null,"timeoutSeconds":null,"minInstances":null,"maxInstances":null,"ingressSettings":null,"concurrency":null,"serviceAccountEmail":null,"vpc":null,"platform":"gcfv2","labels":{},"callableTrigger":{},"entryPoint":"lyrics.analyseLyricsToxicity"},"cover-onTaskCreateGenerateCover":{"availableMemoryMb":1024,"timeoutSeconds":540,"minInstances":null,"maxInstances":null,"ingressSettings":null,"concurrency":null,"serviceAccountEmail":null,"vpc":null,"platform":"gcfv2","labels":{},"eventTrigger":{"eventType":"google.cloud.firestore.document.v1.created","eventFilters":{"database":"(default)","namespace":"(default)"},"eventFilterPathPatterns":{"document":"tasks/{taskId}"},"retry":false},"entryPoint":"cover.onTaskCreateGenerateCover"}},"specVersion":"v1alpha1","requiredAPIs":[],"extensions":{}} -[info] ✔ functions: Loaded functions definitions from source: music.generateMusic, music.getSunoStatus, music.getSunoTimestamps, music.sunoCallback, lyrics.generateLyrics, lyrics.analyseLyricsToxicity, cover.onTaskCreateGenerateCover. {"metadata":{"emulator":{"name":"functions"},"message":"Loaded functions definitions from source: music.generateMusic, music.getSunoStatus, music.getSunoTimestamps, music.sunoCallback, lyrics.generateLyrics, lyrics.analyseLyricsToxicity, cover.onTaskCreateGenerateCover."}} -[info] ✔ functions: Loaded functions definitions from source: music.generateMusic, music.getSunoStatus, music.getSunoTimestamps, music.sunoCallback, lyrics.generateLyrics, lyrics.analyseLyricsToxicity, cover.onTaskCreateGenerateCover. {"metadata":{"emulator":{"name":"functions"},"message":"Loaded functions definitions from source: music.generateMusic, music.getSunoStatus, music.getSunoTimestamps, music.sunoCallback, lyrics.generateLyrics, lyrics.analyseLyricsToxicity, cover.onTaskCreateGenerateCover."}} -[debug] [2025-09-08T11:49:59.030Z] [work-queue] {"queuedWork":["/musicland-d33f9/us-central1/lyrics-analyseLyricsToxicity-2025-09-08T11:49:59.030Z"],"queueLength":1,"runningWork":[],"workRunningCount":0} -[debug] [2025-09-08T11:49:59.030Z] [work-queue] {"queuedWork":[],"queueLength":0,"runningWork":["/musicland-d33f9/us-central1/lyrics-analyseLyricsToxicity-2025-09-08T11:49:59.030Z"],"workRunningCount":1} -[debug] [2025-09-08T11:49:59.030Z] Accepted request POST /musicland-d33f9/us-central1/lyrics-analyseLyricsToxicity --> us-central1-lyrics-analyseLyricsToxicity -[debug] [2025-09-08T11:49:59.038Z] [functions] Runtime ready! Sending request! {"metadata":{"emulator":{"name":"functions"},"message":"[functions] Runtime ready! Sending request!"}} -[debug] [2025-09-08T11:49:59.039Z] [functions] Got req.url=/musicland-d33f9/us-central1/lyrics-analyseLyricsToxicity, mapping to path=/ {"metadata":{"emulator":{"name":"functions"},"message":"[functions] Got req.url=/musicland-d33f9/us-central1/lyrics-analyseLyricsToxicity, mapping to path=/"}} -[debug] [2025-09-08T11:49:59.044Z] [worker-pool] addWorker(us-central1-lyrics-analyseLyricsToxicity) {"metadata":{"emulator":{"name":"functions"},"message":"[worker-pool] addWorker(us-central1-lyrics-analyseLyricsToxicity)"}} -[debug] [2025-09-08T11:49:59.045Z] [worker-pool] Adding worker with key us-central1-lyrics-analyseLyricsToxicity, total=1 {"metadata":{"emulator":{"name":"functions"},"message":"[worker-pool] Adding worker with key us-central1-lyrics-analyseLyricsToxicity, total=1"}} -[debug] [2025-09-08T11:49:59.470Z] [runtime-status] [77309] Resolved module firebase-admin {"declared":true,"installed":true,"version":"12.7.0","resolution":"/Users/thomasdemirdjian/Minuit/musicland/functions/node_modules/firebase-admin/lib/index.js"} {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-lyrics-analyseLyricsToxicity"},"extension":{},"message":"[runtime-status] [77309] Resolved module firebase-admin {\"declared\":true,\"installed\":true,\"version\":\"12.7.0\",\"resolution\":\"/Users/thomasdemirdjian/Minuit/musicland/functions/node_modules/firebase-admin/lib/index.js\"}"}} -[debug] [2025-09-08T11:49:59.470Z] [runtime-status] [77309] Resolved module firebase-functions {"declared":true,"installed":true,"version":"6.4.0","resolution":"/Users/thomasdemirdjian/Minuit/musicland/functions/node_modules/firebase-functions/lib/v2/index.js"} {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-lyrics-analyseLyricsToxicity"},"extension":{},"message":"[runtime-status] [77309] Resolved module firebase-functions {\"declared\":true,\"installed\":true,\"version\":\"6.4.0\",\"resolution\":\"/Users/thomasdemirdjian/Minuit/musicland/functions/node_modules/firebase-functions/lib/v2/index.js\"}"}} -[debug] [2025-09-08T11:49:59.470Z] [runtime-status] [77309] Outgoing network have been stubbed. [{"name":"http","status":"mocked"},{"name":"http","status":"mocked"},{"name":"https","status":"mocked"},{"name":"https","status":"mocked"},{"name":"net","status":"mocked"}] {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-lyrics-analyseLyricsToxicity"},"extension":{},"message":"[runtime-status] [77309] Outgoing network have been stubbed. [{\"name\":\"http\",\"status\":\"mocked\"},{\"name\":\"http\",\"status\":\"mocked\"},{\"name\":\"https\",\"status\":\"mocked\"},{\"name\":\"https\",\"status\":\"mocked\"},{\"name\":\"net\",\"status\":\"mocked\"}]"}} -[debug] [2025-09-08T11:49:59.470Z] [runtime-status] [77309] Resolved module firebase-functions {"declared":true,"installed":true,"version":"6.4.0","resolution":"/Users/thomasdemirdjian/Minuit/musicland/functions/node_modules/firebase-functions/lib/v2/index.js"} {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-lyrics-analyseLyricsToxicity"},"extension":{},"message":"[runtime-status] [77309] Resolved module firebase-functions {\"declared\":true,\"installed\":true,\"version\":\"6.4.0\",\"resolution\":\"/Users/thomasdemirdjian/Minuit/musicland/functions/node_modules/firebase-functions/lib/v2/index.js\"}"}} -[debug] [2025-09-08T11:49:59.534Z] [runtime-status] [77309] Checked functions.config() {"config":{}} {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-lyrics-analyseLyricsToxicity"},"extension":{},"message":"[runtime-status] [77309] Checked functions.config() {\"config\":{}}"}} -[debug] [2025-09-08T11:49:59.534Z] [runtime-status] [77309] firebase-functions has been stubbed. {"functionsResolution":{"declared":true,"installed":true,"version":"6.4.0","resolution":"/Users/thomasdemirdjian/Minuit/musicland/functions/node_modules/firebase-functions/lib/v2/index.js"}} {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-lyrics-analyseLyricsToxicity"},"extension":{},"message":"[runtime-status] [77309] firebase-functions has been stubbed. {\"functionsResolution\":{\"declared\":true,\"installed\":true,\"version\":\"6.4.0\",\"resolution\":\"/Users/thomasdemirdjian/Minuit/musicland/functions/node_modules/firebase-functions/lib/v2/index.js\"}}"}} -[debug] [2025-09-08T11:49:59.534Z] [runtime-status] [77309] Resolved module firebase-functions {"declared":true,"installed":true,"version":"6.4.0","resolution":"/Users/thomasdemirdjian/Minuit/musicland/functions/node_modules/firebase-functions/lib/v2/index.js"} {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-lyrics-analyseLyricsToxicity"},"extension":{},"message":"[runtime-status] [77309] Resolved module firebase-functions {\"declared\":true,\"installed\":true,\"version\":\"6.4.0\",\"resolution\":\"/Users/thomasdemirdjian/Minuit/musicland/functions/node_modules/firebase-functions/lib/v2/index.js\"}"}} -[debug] [2025-09-08T11:49:59.536Z] [runtime-status] [77309] Resolved module firebase-admin {"declared":true,"installed":true,"version":"12.7.0","resolution":"/Users/thomasdemirdjian/Minuit/musicland/functions/node_modules/firebase-admin/lib/index.js"} {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-lyrics-analyseLyricsToxicity"},"extension":{},"message":"[runtime-status] [77309] Resolved module firebase-admin {\"declared\":true,\"installed\":true,\"version\":\"12.7.0\",\"resolution\":\"/Users/thomasdemirdjian/Minuit/musicland/functions/node_modules/firebase-admin/lib/index.js\"}"}} -[debug] [2025-09-08T11:49:59.536Z] [runtime-status] [77309] Resolved module firebase-functions {"declared":true,"installed":true,"version":"6.4.0","resolution":"/Users/thomasdemirdjian/Minuit/musicland/functions/node_modules/firebase-functions/lib/v2/index.js"} {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-lyrics-analyseLyricsToxicity"},"extension":{},"message":"[runtime-status] [77309] Resolved module firebase-functions {\"declared\":true,\"installed\":true,\"version\":\"6.4.0\",\"resolution\":\"/Users/thomasdemirdjian/Minuit/musicland/functions/node_modules/firebase-functions/lib/v2/index.js\"}"}} -[debug] [2025-09-08T11:49:59.536Z] [runtime-status] [77309] firebase-admin has been stubbed. {"adminResolution":{"declared":true,"installed":true,"version":"12.7.0","resolution":"/Users/thomasdemirdjian/Minuit/musicland/functions/node_modules/firebase-admin/lib/index.js"}} {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-lyrics-analyseLyricsToxicity"},"extension":{},"message":"[runtime-status] [77309] firebase-admin has been stubbed. {\"adminResolution\":{\"declared\":true,\"installed\":true,\"version\":\"12.7.0\",\"resolution\":\"/Users/thomasdemirdjian/Minuit/musicland/functions/node_modules/firebase-admin/lib/index.js\"}}"}} -[debug] [2025-09-08T11:49:59.537Z] [runtime-status] [77309] initializeApp(DEFAULT) {"storageBucket":"musicland-d33f9.firebasestorage.app","projectId":"musicland-d33f9"} {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-lyrics-analyseLyricsToxicity"},"extension":{},"message":"[runtime-status] [77309] initializeApp(DEFAULT) {\"storageBucket\":\"musicland-d33f9.firebasestorage.app\",\"projectId\":\"musicland-d33f9\"}"}} -[warn] ⚠ functions: The Cloud Firestore emulator is not running, so calls to Firestore will affect production. {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-lyrics-analyseLyricsToxicity"},"extension":{},"message":"The Cloud Firestore emulator is not running, so calls to Firestore will affect production."}} -[debug] [2025-09-08T11:49:59.649Z] [runtime-status] [77309] Functions runtime initialized. {"cwd":"/Users/thomasdemirdjian/Minuit/musicland/functions","node_version":"24.1.0"} {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-lyrics-analyseLyricsToxicity"},"extension":{},"message":"[runtime-status] [77309] Functions runtime initialized. {\"cwd\":\"/Users/thomasdemirdjian/Minuit/musicland/functions\",\"node_version\":\"24.1.0\"}"}} -[debug] [2025-09-08T11:49:59.649Z] [runtime-status] [77309] Listening to port: /var/folders/4x/n553v4ds6xq73gwblz9jm7t00000gn/T/fire_emu_04364927232a9fd0.sock {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-lyrics-analyseLyricsToxicity"},"extension":{},"message":"[runtime-status] [77309] Listening to port: /var/folders/4x/n553v4ds6xq73gwblz9jm7t00000gn/T/fire_emu_04364927232a9fd0.sock"}} -[debug] [2025-09-08T11:49:59.655Z] [worker-us-central1-lyrics-analyseLyricsToxicity-fa55f49a-7546-4632-a999-b93285b9a561]: IDLE {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-lyrics-analyseLyricsToxicity"},"extension":{},"message":"[worker-us-central1-lyrics-analyseLyricsToxicity-fa55f49a-7546-4632-a999-b93285b9a561]: IDLE"}} -[debug] [2025-09-08T11:49:59.655Z] [worker-pool] submitRequest(triggerId=us-central1-lyrics-analyseLyricsToxicity) {"metadata":{"emulator":{"name":"functions"},"message":"[worker-pool] submitRequest(triggerId=us-central1-lyrics-analyseLyricsToxicity)"}} -[info] i functions: Beginning execution of "us-central1-lyrics-analyseLyricsToxicity" {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-lyrics-analyseLyricsToxicity"},"extension":{},"message":"Beginning execution of \"us-central1-lyrics-analyseLyricsToxicity\""}} -[debug] [2025-09-08T11:49:59.655Z] [worker-us-central1-lyrics-analyseLyricsToxicity-fa55f49a-7546-4632-a999-b93285b9a561]: BUSY {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-lyrics-analyseLyricsToxicity"},"extension":{},"message":"[worker-us-central1-lyrics-analyseLyricsToxicity-fa55f49a-7546-4632-a999-b93285b9a561]: BUSY"}} -[info] > {"verifications":{"app":"MISSING","auth":"VALID"},"logging.googleapis.com/labels":{"firebase-log-type":"callable-request-verification"},"severity":"DEBUG","message":"Callable request verification passed"} {"user":{"verifications":{"app":"MISSING","auth":"VALID"},"logging.googleapis.com/labels":{"firebase-log-type":"callable-request-verification"},"severity":"DEBUG","message":"Callable request verification passed"},"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-lyrics-analyseLyricsToxicity"},"extension":{},"message":"\u001b[90m> \u001b[39m {\"verifications\":{\"app\":\"MISSING\",\"auth\":\"VALID\"},\"logging.googleapis.com/labels\":{\"firebase-log-type\":\"callable-request-verification\"},\"severity\":\"DEBUG\",\"message\":\"Callable request verification passed\"}"}} -[debug] [2025-09-08T11:50:06.588Z] Finishing up request with event=pause {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-lyrics-analyseLyricsToxicity"},"extension":{},"message":"Finishing up request with event=pause"}} -[info] i functions: Finished "us-central1-lyrics-analyseLyricsToxicity" in 6932.631917ms {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-lyrics-analyseLyricsToxicity"},"extension":{},"message":"Finished \"us-central1-lyrics-analyseLyricsToxicity\" in 6932.631917ms"}} -[debug] [2025-09-08T11:50:06.588Z] [worker-us-central1-lyrics-analyseLyricsToxicity-fa55f49a-7546-4632-a999-b93285b9a561]: IDLE {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-lyrics-analyseLyricsToxicity"},"extension":{},"message":"[worker-us-central1-lyrics-analyseLyricsToxicity-fa55f49a-7546-4632-a999-b93285b9a561]: IDLE"}} -[debug] [2025-09-08T11:50:06.588Z] Finishing up request with event=finish {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-lyrics-analyseLyricsToxicity"},"extension":{},"message":"Finishing up request with event=finish"}} -[debug] [2025-09-08T11:50:06.588Z] Finishing up request with event=close {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-lyrics-analyseLyricsToxicity"},"extension":{},"message":"Finishing up request with event=close"}} -[debug] [2025-09-08T11:50:06.588Z] [work-queue] {"queuedWork":[],"queueLength":0,"runningWork":[],"workRunningCount":0} -[debug] [2025-09-08T11:50:49.715Z] [work-queue] {"queuedWork":["/musicland-d33f9/us-central1/lyrics-analyseLyricsToxicity-2025-09-08T11:50:49.715Z"],"queueLength":1,"runningWork":[],"workRunningCount":0} -[debug] [2025-09-08T11:50:49.715Z] [work-queue] {"queuedWork":[],"queueLength":0,"runningWork":["/musicland-d33f9/us-central1/lyrics-analyseLyricsToxicity-2025-09-08T11:50:49.715Z"],"workRunningCount":1} -[debug] [2025-09-08T11:50:49.715Z] Accepted request POST /musicland-d33f9/us-central1/lyrics-analyseLyricsToxicity --> us-central1-lyrics-analyseLyricsToxicity -[debug] [2025-09-08T11:50:49.717Z] [functions] Runtime ready! Sending request! {"metadata":{"emulator":{"name":"functions"},"message":"[functions] Runtime ready! Sending request!"}} -[debug] [2025-09-08T11:50:49.719Z] [functions] Got req.url=/musicland-d33f9/us-central1/lyrics-analyseLyricsToxicity, mapping to path=/ {"metadata":{"emulator":{"name":"functions"},"message":"[functions] Got req.url=/musicland-d33f9/us-central1/lyrics-analyseLyricsToxicity, mapping to path=/"}} -[debug] [2025-09-08T11:50:49.719Z] [worker-pool] submitRequest(triggerId=us-central1-lyrics-analyseLyricsToxicity) {"metadata":{"emulator":{"name":"functions"},"message":"[worker-pool] submitRequest(triggerId=us-central1-lyrics-analyseLyricsToxicity)"}} -[info] i functions: Beginning execution of "us-central1-lyrics-analyseLyricsToxicity" {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-lyrics-analyseLyricsToxicity"},"extension":{},"message":"Beginning execution of \"us-central1-lyrics-analyseLyricsToxicity\""}} -[debug] [2025-09-08T11:50:49.719Z] [worker-us-central1-lyrics-analyseLyricsToxicity-fa55f49a-7546-4632-a999-b93285b9a561]: BUSY {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-lyrics-analyseLyricsToxicity"},"extension":{},"message":"[worker-us-central1-lyrics-analyseLyricsToxicity-fa55f49a-7546-4632-a999-b93285b9a561]: BUSY"}} -[info] > {"verifications":{"app":"MISSING","auth":"VALID"},"logging.googleapis.com/labels":{"firebase-log-type":"callable-request-verification"},"severity":"DEBUG","message":"Callable request verification passed"} {"user":{"verifications":{"app":"MISSING","auth":"VALID"},"logging.googleapis.com/labels":{"firebase-log-type":"callable-request-verification"},"severity":"DEBUG","message":"Callable request verification passed"},"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-lyrics-analyseLyricsToxicity"},"extension":{},"message":"\u001b[90m> \u001b[39m {\"verifications\":{\"app\":\"MISSING\",\"auth\":\"VALID\"},\"logging.googleapis.com/labels\":{\"firebase-log-type\":\"callable-request-verification\"},\"severity\":\"DEBUG\",\"message\":\"Callable request verification passed\"}"}} -[debug] [2025-09-08T11:50:57.088Z] Finishing up request with event=pause {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-lyrics-analyseLyricsToxicity"},"extension":{},"message":"Finishing up request with event=pause"}} -[info] i functions: Finished "us-central1-lyrics-analyseLyricsToxicity" in 7372.177333ms {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-lyrics-analyseLyricsToxicity"},"extension":{},"message":"Finished \"us-central1-lyrics-analyseLyricsToxicity\" in 7372.177333ms"}} -[debug] [2025-09-08T11:50:57.092Z] [worker-us-central1-lyrics-analyseLyricsToxicity-fa55f49a-7546-4632-a999-b93285b9a561]: IDLE {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-lyrics-analyseLyricsToxicity"},"extension":{},"message":"[worker-us-central1-lyrics-analyseLyricsToxicity-fa55f49a-7546-4632-a999-b93285b9a561]: IDLE"}} -[debug] [2025-09-08T11:50:57.092Z] Finishing up request with event=finish {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-lyrics-analyseLyricsToxicity"},"extension":{},"message":"Finishing up request with event=finish"}} -[debug] [2025-09-08T11:50:57.093Z] Finishing up request with event=close {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-lyrics-analyseLyricsToxicity"},"extension":{},"message":"Finishing up request with event=close"}} -[debug] [2025-09-08T11:50:57.093Z] [work-queue] {"queuedWork":[],"queueLength":0,"runningWork":[],"workRunningCount":0} -[debug] [2025-09-08T11:51:10.560Z] [work-queue] {"queuedWork":["/musicland-d33f9/us-central1/lyrics-analyseLyricsToxicity-2025-09-08T11:51:10.560Z"],"queueLength":1,"runningWork":[],"workRunningCount":0} -[debug] [2025-09-08T11:51:10.560Z] [work-queue] {"queuedWork":[],"queueLength":0,"runningWork":["/musicland-d33f9/us-central1/lyrics-analyseLyricsToxicity-2025-09-08T11:51:10.560Z"],"workRunningCount":1} -[debug] [2025-09-08T11:51:10.560Z] Accepted request POST /musicland-d33f9/us-central1/lyrics-analyseLyricsToxicity --> us-central1-lyrics-analyseLyricsToxicity -[debug] [2025-09-08T11:51:10.561Z] [functions] Runtime ready! Sending request! {"metadata":{"emulator":{"name":"functions"},"message":"[functions] Runtime ready! Sending request!"}} -[debug] [2025-09-08T11:51:10.561Z] [functions] Got req.url=/musicland-d33f9/us-central1/lyrics-analyseLyricsToxicity, mapping to path=/ {"metadata":{"emulator":{"name":"functions"},"message":"[functions] Got req.url=/musicland-d33f9/us-central1/lyrics-analyseLyricsToxicity, mapping to path=/"}} -[debug] [2025-09-08T11:51:10.561Z] [worker-pool] submitRequest(triggerId=us-central1-lyrics-analyseLyricsToxicity) {"metadata":{"emulator":{"name":"functions"},"message":"[worker-pool] submitRequest(triggerId=us-central1-lyrics-analyseLyricsToxicity)"}} -[info] i functions: Beginning execution of "us-central1-lyrics-analyseLyricsToxicity" {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-lyrics-analyseLyricsToxicity"},"extension":{},"message":"Beginning execution of \"us-central1-lyrics-analyseLyricsToxicity\""}} -[debug] [2025-09-08T11:51:10.562Z] [worker-us-central1-lyrics-analyseLyricsToxicity-fa55f49a-7546-4632-a999-b93285b9a561]: BUSY {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-lyrics-analyseLyricsToxicity"},"extension":{},"message":"[worker-us-central1-lyrics-analyseLyricsToxicity-fa55f49a-7546-4632-a999-b93285b9a561]: BUSY"}} -[info] > {"verifications":{"app":"MISSING","auth":"VALID"},"logging.googleapis.com/labels":{"firebase-log-type":"callable-request-verification"},"severity":"DEBUG","message":"Callable request verification passed"} {"user":{"verifications":{"app":"MISSING","auth":"VALID"},"logging.googleapis.com/labels":{"firebase-log-type":"callable-request-verification"},"severity":"DEBUG","message":"Callable request verification passed"},"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-lyrics-analyseLyricsToxicity"},"extension":{},"message":"\u001b[90m> \u001b[39m {\"verifications\":{\"app\":\"MISSING\",\"auth\":\"VALID\"},\"logging.googleapis.com/labels\":{\"firebase-log-type\":\"callable-request-verification\"},\"severity\":\"DEBUG\",\"message\":\"Callable request verification passed\"}"}} -[debug] [2025-09-08T11:51:19.240Z] Finishing up request with event=pause {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-lyrics-analyseLyricsToxicity"},"extension":{},"message":"Finishing up request with event=pause"}} -[info] i functions: Finished "us-central1-lyrics-analyseLyricsToxicity" in 8678.713042ms {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-lyrics-analyseLyricsToxicity"},"extension":{},"message":"Finished \"us-central1-lyrics-analyseLyricsToxicity\" in 8678.713042ms"}} -[debug] [2025-09-08T11:51:19.241Z] [worker-us-central1-lyrics-analyseLyricsToxicity-fa55f49a-7546-4632-a999-b93285b9a561]: IDLE {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-lyrics-analyseLyricsToxicity"},"extension":{},"message":"[worker-us-central1-lyrics-analyseLyricsToxicity-fa55f49a-7546-4632-a999-b93285b9a561]: IDLE"}} -[debug] [2025-09-08T11:51:19.241Z] Finishing up request with event=finish {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-lyrics-analyseLyricsToxicity"},"extension":{},"message":"Finishing up request with event=finish"}} -[debug] [2025-09-08T11:51:19.241Z] Finishing up request with event=close {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-lyrics-analyseLyricsToxicity"},"extension":{},"message":"Finishing up request with event=close"}} -[debug] [2025-09-08T11:51:19.241Z] [work-queue] {"queuedWork":[],"queueLength":0,"runningWork":[],"workRunningCount":0} -[debug] [2025-09-08T11:53:19.130Z] [work-queue] {"queuedWork":["/musicland-d33f9/us-central1/lyrics-analyseLyricsToxicity-2025-09-08T11:53:19.130Z"],"queueLength":1,"runningWork":[],"workRunningCount":0} -[debug] [2025-09-08T11:53:19.130Z] [work-queue] {"queuedWork":[],"queueLength":0,"runningWork":["/musicland-d33f9/us-central1/lyrics-analyseLyricsToxicity-2025-09-08T11:53:19.130Z"],"workRunningCount":1} -[debug] [2025-09-08T11:53:19.130Z] Accepted request POST /musicland-d33f9/us-central1/lyrics-analyseLyricsToxicity --> us-central1-lyrics-analyseLyricsToxicity -[debug] [2025-09-08T11:53:19.134Z] [functions] Runtime ready! Sending request! {"metadata":{"emulator":{"name":"functions"},"message":"[functions] Runtime ready! Sending request!"}} -[debug] [2025-09-08T11:53:19.134Z] [functions] Got req.url=/musicland-d33f9/us-central1/lyrics-analyseLyricsToxicity, mapping to path=/ {"metadata":{"emulator":{"name":"functions"},"message":"[functions] Got req.url=/musicland-d33f9/us-central1/lyrics-analyseLyricsToxicity, mapping to path=/"}} -[debug] [2025-09-08T11:53:19.134Z] [worker-pool] submitRequest(triggerId=us-central1-lyrics-analyseLyricsToxicity) {"metadata":{"emulator":{"name":"functions"},"message":"[worker-pool] submitRequest(triggerId=us-central1-lyrics-analyseLyricsToxicity)"}} -[info] i functions: Beginning execution of "us-central1-lyrics-analyseLyricsToxicity" {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-lyrics-analyseLyricsToxicity"},"extension":{},"message":"Beginning execution of \"us-central1-lyrics-analyseLyricsToxicity\""}} -[debug] [2025-09-08T11:53:19.135Z] [worker-us-central1-lyrics-analyseLyricsToxicity-fa55f49a-7546-4632-a999-b93285b9a561]: BUSY {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-lyrics-analyseLyricsToxicity"},"extension":{},"message":"[worker-us-central1-lyrics-analyseLyricsToxicity-fa55f49a-7546-4632-a999-b93285b9a561]: BUSY"}} -[info] > {"verifications":{"app":"MISSING","auth":"VALID"},"logging.googleapis.com/labels":{"firebase-log-type":"callable-request-verification"},"severity":"DEBUG","message":"Callable request verification passed"} {"user":{"verifications":{"app":"MISSING","auth":"VALID"},"logging.googleapis.com/labels":{"firebase-log-type":"callable-request-verification"},"severity":"DEBUG","message":"Callable request verification passed"},"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-lyrics-analyseLyricsToxicity"},"extension":{},"message":"\u001b[90m> \u001b[39m {\"verifications\":{\"app\":\"MISSING\",\"auth\":\"VALID\"},\"logging.googleapis.com/labels\":{\"firebase-log-type\":\"callable-request-verification\"},\"severity\":\"DEBUG\",\"message\":\"Callable request verification passed\"}"}} -[debug] [2025-09-08T11:53:41.019Z] Finishing up request with event=pause {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-lyrics-analyseLyricsToxicity"},"extension":{},"message":"Finishing up request with event=pause"}} -[info] i functions: Finished "us-central1-lyrics-analyseLyricsToxicity" in 21884.955625ms {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-lyrics-analyseLyricsToxicity"},"extension":{},"message":"Finished \"us-central1-lyrics-analyseLyricsToxicity\" in 21884.955625ms"}} -[debug] [2025-09-08T11:53:41.020Z] [worker-us-central1-lyrics-analyseLyricsToxicity-fa55f49a-7546-4632-a999-b93285b9a561]: IDLE {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-lyrics-analyseLyricsToxicity"},"extension":{},"message":"[worker-us-central1-lyrics-analyseLyricsToxicity-fa55f49a-7546-4632-a999-b93285b9a561]: IDLE"}} -[debug] [2025-09-08T11:53:41.020Z] Finishing up request with event=finish {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-lyrics-analyseLyricsToxicity"},"extension":{},"message":"Finishing up request with event=finish"}} -[debug] [2025-09-08T11:53:41.020Z] Finishing up request with event=close {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-lyrics-analyseLyricsToxicity"},"extension":{},"message":"Finishing up request with event=close"}} -[debug] [2025-09-08T11:53:41.021Z] [work-queue] {"queuedWork":[],"queueLength":0,"runningWork":[],"workRunningCount":0} -[debug] [2025-09-08T12:24:57.073Z] File /Users/thomasdemirdjian/Minuit/musicland/functions/src/music.js changed, reloading triggers {"metadata":{"emulator":{"name":"functions"},"message":"File /Users/thomasdemirdjian/Minuit/musicland/functions/src/music.js changed, reloading triggers"}} -[debug] [2025-09-08T12:24:58.075Z] Validating nodejs source -[debug] [2025-09-08T12:24:58.547Z] > [functions] package.json contents: { - "name": "functions", - "description": "Cloud Functions for Firebase", - "scripts": { - "lint": "eslint .", - "serve": "firebase emulators:start --only functions", - "shell": "firebase functions:shell", - "start": "npm run shell", - "deploy": "firebase deploy --only functions", - "logs": "firebase functions:log" - }, - "engines": { - "node": "20" - }, - "main": "index.js", - "dependencies": { - "@genkit-ai/googleai": "^1.18.0", - "axios": "^1.11.0", - "firebase-admin": "^12.7.0", - "firebase-functions": "^6.4.0", - "genkit": "^1.18.0" - }, - "devDependencies": { - "eslint": "^8.15.0", - "eslint-config-google": "^0.14.0" - }, - "private": true -} -[debug] [2025-09-08T12:24:58.547Z] Building nodejs source -[debug] [2025-09-08T12:24:58.548Z] Failed to find version of module node: reached end of search path /Users/thomasdemirdjian/Minuit/musicland/functions/node_modules -[warn] ⚠ functions: Your requested "node" version "20" doesn't match your global version "24". Using node@24 from host. -[debug] [2025-09-08T12:24:58.548Z] Could not find functions.yaml. Must use http discovery -[debug] [2025-09-08T12:24:58.549Z] Found firebase-functions binary at '/Users/thomasdemirdjian/Minuit/musicland/functions/node_modules/.bin/firebase-functions' -[info] Serving at port 8404 - -[debug] [2025-09-08T12:24:59.004Z] Got response from /__/functions.yaml {"endpoints":{"music-generateMusic":{"availableMemoryMb":null,"timeoutSeconds":null,"minInstances":null,"maxInstances":null,"ingressSettings":null,"concurrency":null,"serviceAccountEmail":null,"vpc":null,"platform":"gcfv2","labels":{},"callableTrigger":{},"entryPoint":"music.generateMusic"},"music-getSunoStatus":{"availableMemoryMb":null,"timeoutSeconds":null,"minInstances":null,"maxInstances":null,"ingressSettings":null,"concurrency":null,"serviceAccountEmail":null,"vpc":null,"platform":"gcfv2","labels":{},"callableTrigger":{},"entryPoint":"music.getSunoStatus"},"music-getSunoTimestamps":{"availableMemoryMb":null,"timeoutSeconds":null,"minInstances":null,"maxInstances":null,"ingressSettings":null,"concurrency":null,"serviceAccountEmail":null,"vpc":null,"platform":"gcfv2","labels":{},"callableTrigger":{},"entryPoint":"music.getSunoTimestamps"},"music-sunoCallback":{"availableMemoryMb":null,"timeoutSeconds":null,"minInstances":null,"maxInstances":null,"ingressSettings":null,"concurrency":null,"serviceAccountEmail":null,"vpc":null,"platform":"gcfv2","labels":{},"httpsTrigger":{},"entryPoint":"music.sunoCallback"},"lyrics-generateLyrics":{"availableMemoryMb":null,"timeoutSeconds":null,"minInstances":null,"maxInstances":null,"ingressSettings":null,"concurrency":null,"serviceAccountEmail":null,"vpc":null,"platform":"gcfv2","labels":{},"callableTrigger":{},"entryPoint":"lyrics.generateLyrics"},"lyrics-analyseLyricsToxicity":{"availableMemoryMb":null,"timeoutSeconds":null,"minInstances":null,"maxInstances":null,"ingressSettings":null,"concurrency":null,"serviceAccountEmail":null,"vpc":null,"platform":"gcfv2","labels":{},"callableTrigger":{},"entryPoint":"lyrics.analyseLyricsToxicity"},"cover-onTaskCreateGenerateCover":{"availableMemoryMb":1024,"timeoutSeconds":540,"minInstances":null,"maxInstances":null,"ingressSettings":null,"concurrency":null,"serviceAccountEmail":null,"vpc":null,"platform":"gcfv2","labels":{},"eventTrigger":{"eventType":"google.cloud.firestore.document.v1.created","eventFilters":{"database":"(default)","namespace":"(default)"},"eventFilterPathPatterns":{"document":"tasks/{taskId}"},"retry":false},"entryPoint":"cover.onTaskCreateGenerateCover"}},"specVersion":"v1alpha1","requiredAPIs":[],"extensions":{}} -[info] ✔ functions: Loaded functions definitions from source: music.generateMusic, music.getSunoStatus, music.getSunoTimestamps, music.sunoCallback, lyrics.generateLyrics, lyrics.analyseLyricsToxicity, cover.onTaskCreateGenerateCover. {"metadata":{"emulator":{"name":"functions"},"message":"Loaded functions definitions from source: music.generateMusic, music.getSunoStatus, music.getSunoTimestamps, music.sunoCallback, lyrics.generateLyrics, lyrics.analyseLyricsToxicity, cover.onTaskCreateGenerateCover."}} -[debug] [2025-09-08T12:25:03.021Z] [worker-pool] Shutting down IDLE worker (us-central1-lyrics-analyseLyricsToxicity) {"metadata":{"emulator":{"name":"functions"},"message":"[worker-pool] Shutting down IDLE worker (us-central1-lyrics-analyseLyricsToxicity)"}} -[debug] [2025-09-08T12:25:03.022Z] [worker-us-central1-lyrics-analyseLyricsToxicity-fa55f49a-7546-4632-a999-b93285b9a561]: FINISHING {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-lyrics-analyseLyricsToxicity"},"extension":{},"message":"[worker-us-central1-lyrics-analyseLyricsToxicity-fa55f49a-7546-4632-a999-b93285b9a561]: FINISHING"}} -[info] > Shutting down all Genkit servers... {"user":"Shutting down all Genkit servers...","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-lyrics-analyseLyricsToxicity"},"extension":{},"message":"\u001b[90m> \u001b[39m Shutting down all Genkit servers..."}} -[debug] [2025-09-08T12:25:03.032Z] [worker-us-central1-lyrics-analyseLyricsToxicity-fa55f49a-7546-4632-a999-b93285b9a561]: exited {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-lyrics-analyseLyricsToxicity"},"extension":{},"message":"[worker-us-central1-lyrics-analyseLyricsToxicity-fa55f49a-7546-4632-a999-b93285b9a561]: exited"}} -[debug] [2025-09-08T12:25:03.032Z] [worker-us-central1-lyrics-analyseLyricsToxicity-fa55f49a-7546-4632-a999-b93285b9a561]: FINISHED {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-lyrics-analyseLyricsToxicity"},"extension":{},"message":"[worker-us-central1-lyrics-analyseLyricsToxicity-fa55f49a-7546-4632-a999-b93285b9a561]: FINISHED"}} -[debug] [2025-09-08T12:26:25.144Z] File /Users/thomasdemirdjian/Minuit/musicland/functions/src/music.js changed, reloading triggers {"metadata":{"emulator":{"name":"functions"},"message":"File /Users/thomasdemirdjian/Minuit/musicland/functions/src/music.js changed, reloading triggers"}} -[debug] [2025-09-08T12:26:26.146Z] Validating nodejs source -[debug] [2025-09-08T12:26:26.442Z] > [functions] package.json contents: { - "name": "functions", - "description": "Cloud Functions for Firebase", - "scripts": { - "lint": "eslint .", - "serve": "firebase emulators:start --only functions", - "shell": "firebase functions:shell", - "start": "npm run shell", - "deploy": "firebase deploy --only functions", - "logs": "firebase functions:log" - }, - "engines": { - "node": "20" - }, - "main": "index.js", - "dependencies": { - "@genkit-ai/googleai": "^1.18.0", - "axios": "^1.11.0", - "firebase-admin": "^12.7.0", - "firebase-functions": "^6.4.0", - "genkit": "^1.18.0" - }, - "devDependencies": { - "eslint": "^8.15.0", - "eslint-config-google": "^0.14.0" - }, - "private": true -} -[debug] [2025-09-08T12:26:26.443Z] Building nodejs source -[debug] [2025-09-08T12:26:26.443Z] Failed to find version of module node: reached end of search path /Users/thomasdemirdjian/Minuit/musicland/functions/node_modules -[warn] ⚠ functions: Your requested "node" version "20" doesn't match your global version "24". Using node@24 from host. -[debug] [2025-09-08T12:26:26.443Z] Could not find functions.yaml. Must use http discovery -[debug] [2025-09-08T12:26:26.444Z] Found firebase-functions binary at '/Users/thomasdemirdjian/Minuit/musicland/functions/node_modules/.bin/firebase-functions' -[info] Serving at port 8689 - -[debug] [2025-09-08T12:26:26.684Z] Got response from /__/functions.yaml {"endpoints":{"music-generateMusic":{"availableMemoryMb":null,"timeoutSeconds":null,"minInstances":null,"maxInstances":null,"ingressSettings":null,"concurrency":null,"serviceAccountEmail":null,"vpc":null,"platform":"gcfv2","labels":{},"callableTrigger":{},"entryPoint":"music.generateMusic"},"music-getSunoStatus":{"availableMemoryMb":null,"timeoutSeconds":null,"minInstances":null,"maxInstances":null,"ingressSettings":null,"concurrency":null,"serviceAccountEmail":null,"vpc":null,"platform":"gcfv2","labels":{},"callableTrigger":{},"entryPoint":"music.getSunoStatus"},"music-getSunoTimestamps":{"availableMemoryMb":null,"timeoutSeconds":null,"minInstances":null,"maxInstances":null,"ingressSettings":null,"concurrency":null,"serviceAccountEmail":null,"vpc":null,"platform":"gcfv2","labels":{},"callableTrigger":{},"entryPoint":"music.getSunoTimestamps"},"music-sunoCallback":{"availableMemoryMb":null,"timeoutSeconds":null,"minInstances":null,"maxInstances":null,"ingressSettings":null,"concurrency":null,"serviceAccountEmail":null,"vpc":null,"platform":"gcfv2","labels":{},"httpsTrigger":{},"entryPoint":"music.sunoCallback"},"lyrics-generateLyrics":{"availableMemoryMb":null,"timeoutSeconds":null,"minInstances":null,"maxInstances":null,"ingressSettings":null,"concurrency":null,"serviceAccountEmail":null,"vpc":null,"platform":"gcfv2","labels":{},"callableTrigger":{},"entryPoint":"lyrics.generateLyrics"},"lyrics-analyseLyricsToxicity":{"availableMemoryMb":null,"timeoutSeconds":null,"minInstances":null,"maxInstances":null,"ingressSettings":null,"concurrency":null,"serviceAccountEmail":null,"vpc":null,"platform":"gcfv2","labels":{},"callableTrigger":{},"entryPoint":"lyrics.analyseLyricsToxicity"},"cover-onTaskCreateGenerateCover":{"availableMemoryMb":1024,"timeoutSeconds":540,"minInstances":null,"maxInstances":null,"ingressSettings":null,"concurrency":null,"serviceAccountEmail":null,"vpc":null,"platform":"gcfv2","labels":{},"eventTrigger":{"eventType":"google.cloud.firestore.document.v1.created","eventFilters":{"database":"(default)","namespace":"(default)"},"eventFilterPathPatterns":{"document":"tasks/{taskId}"},"retry":false},"entryPoint":"cover.onTaskCreateGenerateCover"}},"specVersion":"v1alpha1","requiredAPIs":[],"extensions":{}} -[info] ✔ functions: Loaded functions definitions from source: music.generateMusic, music.getSunoStatus, music.getSunoTimestamps, music.sunoCallback, lyrics.generateLyrics, lyrics.analyseLyricsToxicity, cover.onTaskCreateGenerateCover. {"metadata":{"emulator":{"name":"functions"},"message":"Loaded functions definitions from source: music.generateMusic, music.getSunoStatus, music.getSunoTimestamps, music.sunoCallback, lyrics.generateLyrics, lyrics.analyseLyricsToxicity, cover.onTaskCreateGenerateCover."}} -[debug] [2025-09-08T12:27:08.867Z] File /Users/thomasdemirdjian/Minuit/musicland/functions/src/music.js changed, reloading triggers {"metadata":{"emulator":{"name":"functions"},"message":"File /Users/thomasdemirdjian/Minuit/musicland/functions/src/music.js changed, reloading triggers"}} -[debug] [2025-09-08T12:27:08.968Z] File /Users/thomasdemirdjian/Minuit/musicland/functions/src/music.js changed, reloading triggers {"metadata":{"emulator":{"name":"functions"},"message":"File /Users/thomasdemirdjian/Minuit/musicland/functions/src/music.js changed, reloading triggers"}} -[debug] [2025-09-08T12:27:09.970Z] Validating nodejs source -[debug] [2025-09-08T12:27:10.266Z] > [functions] package.json contents: { - "name": "functions", - "description": "Cloud Functions for Firebase", - "scripts": { - "lint": "eslint .", - "serve": "firebase emulators:start --only functions", - "shell": "firebase functions:shell", - "start": "npm run shell", - "deploy": "firebase deploy --only functions", - "logs": "firebase functions:log" - }, - "engines": { - "node": "20" - }, - "main": "index.js", - "dependencies": { - "@genkit-ai/googleai": "^1.18.0", - "axios": "^1.11.0", - "firebase-admin": "^12.7.0", - "firebase-functions": "^6.4.0", - "genkit": "^1.18.0" - }, - "devDependencies": { - "eslint": "^8.15.0", - "eslint-config-google": "^0.14.0" - }, - "private": true -} -[debug] [2025-09-08T12:27:10.266Z] Building nodejs source -[debug] [2025-09-08T12:27:10.266Z] Failed to find version of module node: reached end of search path /Users/thomasdemirdjian/Minuit/musicland/functions/node_modules -[warn] ⚠ functions: Your requested "node" version "20" doesn't match your global version "24". Using node@24 from host. -[debug] [2025-09-08T12:27:10.267Z] Could not find functions.yaml. Must use http discovery -[debug] [2025-09-08T12:27:10.267Z] Found firebase-functions binary at '/Users/thomasdemirdjian/Minuit/musicland/functions/node_modules/.bin/firebase-functions' -[info] Serving at port 8979 - -[debug] [2025-09-08T12:27:10.478Z] Got response from /__/functions.yaml {"endpoints":{"music-generateMusic":{"availableMemoryMb":null,"timeoutSeconds":null,"minInstances":null,"maxInstances":null,"ingressSettings":null,"concurrency":null,"serviceAccountEmail":null,"vpc":null,"platform":"gcfv2","labels":{},"callableTrigger":{},"entryPoint":"music.generateMusic"},"music-getSunoStatus":{"availableMemoryMb":null,"timeoutSeconds":null,"minInstances":null,"maxInstances":null,"ingressSettings":null,"concurrency":null,"serviceAccountEmail":null,"vpc":null,"platform":"gcfv2","labels":{},"callableTrigger":{},"entryPoint":"music.getSunoStatus"},"music-getSunoTimestamps":{"availableMemoryMb":null,"timeoutSeconds":null,"minInstances":null,"maxInstances":null,"ingressSettings":null,"concurrency":null,"serviceAccountEmail":null,"vpc":null,"platform":"gcfv2","labels":{},"callableTrigger":{},"entryPoint":"music.getSunoTimestamps"},"music-sunoCallback":{"availableMemoryMb":null,"timeoutSeconds":null,"minInstances":null,"maxInstances":null,"ingressSettings":null,"concurrency":null,"serviceAccountEmail":null,"vpc":null,"platform":"gcfv2","labels":{},"httpsTrigger":{},"entryPoint":"music.sunoCallback"},"lyrics-generateLyrics":{"availableMemoryMb":null,"timeoutSeconds":null,"minInstances":null,"maxInstances":null,"ingressSettings":null,"concurrency":null,"serviceAccountEmail":null,"vpc":null,"platform":"gcfv2","labels":{},"callableTrigger":{},"entryPoint":"lyrics.generateLyrics"},"lyrics-analyseLyricsToxicity":{"availableMemoryMb":null,"timeoutSeconds":null,"minInstances":null,"maxInstances":null,"ingressSettings":null,"concurrency":null,"serviceAccountEmail":null,"vpc":null,"platform":"gcfv2","labels":{},"callableTrigger":{},"entryPoint":"lyrics.analyseLyricsToxicity"},"cover-onTaskCreateGenerateCover":{"availableMemoryMb":1024,"timeoutSeconds":540,"minInstances":null,"maxInstances":null,"ingressSettings":null,"concurrency":null,"serviceAccountEmail":null,"vpc":null,"platform":"gcfv2","labels":{},"eventTrigger":{"eventType":"google.cloud.firestore.document.v1.created","eventFilters":{"database":"(default)","namespace":"(default)"},"eventFilterPathPatterns":{"document":"tasks/{taskId}"},"retry":false},"entryPoint":"cover.onTaskCreateGenerateCover"}},"specVersion":"v1alpha1","requiredAPIs":[],"extensions":{}} -[info] ✔ functions: Loaded functions definitions from source: music.generateMusic, music.getSunoStatus, music.getSunoTimestamps, music.sunoCallback, lyrics.generateLyrics, lyrics.analyseLyricsToxicity, cover.onTaskCreateGenerateCover. {"metadata":{"emulator":{"name":"functions"},"message":"Loaded functions definitions from source: music.generateMusic, music.getSunoStatus, music.getSunoTimestamps, music.sunoCallback, lyrics.generateLyrics, lyrics.analyseLyricsToxicity, cover.onTaskCreateGenerateCover."}} -[debug] [2025-09-08T12:32:29.225Z] File /Users/thomasdemirdjian/Minuit/musicland/functions/src/music.js changed, reloading triggers {"metadata":{"emulator":{"name":"functions"},"message":"File /Users/thomasdemirdjian/Minuit/musicland/functions/src/music.js changed, reloading triggers"}} -[debug] [2025-09-08T12:32:30.226Z] Validating nodejs source -[debug] [2025-09-08T12:32:30.548Z] > [functions] package.json contents: { - "name": "functions", - "description": "Cloud Functions for Firebase", - "scripts": { - "lint": "eslint .", - "serve": "firebase emulators:start --only functions", - "shell": "firebase functions:shell", - "start": "npm run shell", - "deploy": "firebase deploy --only functions", - "logs": "firebase functions:log" - }, - "engines": { - "node": "20" - }, - "main": "index.js", - "dependencies": { - "@genkit-ai/googleai": "^1.18.0", - "axios": "^1.11.0", - "firebase-admin": "^12.7.0", - "firebase-functions": "^6.4.0", - "genkit": "^1.18.0" - }, - "devDependencies": { - "eslint": "^8.15.0", - "eslint-config-google": "^0.14.0" - }, - "private": true -} -[debug] [2025-09-08T12:32:30.548Z] Building nodejs source -[debug] [2025-09-08T12:32:30.548Z] Failed to find version of module node: reached end of search path /Users/thomasdemirdjian/Minuit/musicland/functions/node_modules -[warn] ⚠ functions: Your requested "node" version "20" doesn't match your global version "24". Using node@24 from host. -[debug] [2025-09-08T12:32:30.548Z] Could not find functions.yaml. Must use http discovery -[debug] [2025-09-08T12:32:30.549Z] Found firebase-functions binary at '/Users/thomasdemirdjian/Minuit/musicland/functions/node_modules/.bin/firebase-functions' -[info] Serving at port 8143 - -[debug] [2025-09-08T12:32:30.776Z] Got response from /__/functions.yaml {"endpoints":{"music-generateMusic":{"availableMemoryMb":null,"timeoutSeconds":null,"minInstances":null,"maxInstances":null,"ingressSettings":null,"concurrency":null,"serviceAccountEmail":null,"vpc":null,"platform":"gcfv2","labels":{},"callableTrigger":{},"entryPoint":"music.generateMusic"},"music-getSunoStatus":{"availableMemoryMb":null,"timeoutSeconds":null,"minInstances":null,"maxInstances":null,"ingressSettings":null,"concurrency":null,"serviceAccountEmail":null,"vpc":null,"platform":"gcfv2","labels":{},"callableTrigger":{},"entryPoint":"music.getSunoStatus"},"music-getSunoTimestamps":{"availableMemoryMb":null,"timeoutSeconds":null,"minInstances":null,"maxInstances":null,"ingressSettings":null,"concurrency":null,"serviceAccountEmail":null,"vpc":null,"platform":"gcfv2","labels":{},"callableTrigger":{},"entryPoint":"music.getSunoTimestamps"},"music-sunoCallback":{"availableMemoryMb":null,"timeoutSeconds":null,"minInstances":null,"maxInstances":null,"ingressSettings":null,"concurrency":null,"serviceAccountEmail":null,"vpc":null,"platform":"gcfv2","labels":{},"httpsTrigger":{},"entryPoint":"music.sunoCallback"},"lyrics-generateLyrics":{"availableMemoryMb":null,"timeoutSeconds":null,"minInstances":null,"maxInstances":null,"ingressSettings":null,"concurrency":null,"serviceAccountEmail":null,"vpc":null,"platform":"gcfv2","labels":{},"callableTrigger":{},"entryPoint":"lyrics.generateLyrics"},"lyrics-analyseLyricsToxicity":{"availableMemoryMb":null,"timeoutSeconds":null,"minInstances":null,"maxInstances":null,"ingressSettings":null,"concurrency":null,"serviceAccountEmail":null,"vpc":null,"platform":"gcfv2","labels":{},"callableTrigger":{},"entryPoint":"lyrics.analyseLyricsToxicity"},"cover-onTaskCreateGenerateCover":{"availableMemoryMb":1024,"timeoutSeconds":540,"minInstances":null,"maxInstances":null,"ingressSettings":null,"concurrency":null,"serviceAccountEmail":null,"vpc":null,"platform":"gcfv2","labels":{},"eventTrigger":{"eventType":"google.cloud.firestore.document.v1.created","eventFilters":{"database":"(default)","namespace":"(default)"},"eventFilterPathPatterns":{"document":"tasks/{taskId}"},"retry":false},"entryPoint":"cover.onTaskCreateGenerateCover"}},"specVersion":"v1alpha1","requiredAPIs":[],"extensions":{}} -[debug] [2025-09-08T12:32:33.479Z] File /Users/thomasdemirdjian/Minuit/musicland/functions/src/music.js changed, reloading triggers {"metadata":{"emulator":{"name":"functions"},"message":"File /Users/thomasdemirdjian/Minuit/musicland/functions/src/music.js changed, reloading triggers"}} -[debug] [2025-09-08T12:32:34.481Z] Validating nodejs source -[debug] [2025-09-08T12:32:34.788Z] > [functions] package.json contents: { - "name": "functions", - "description": "Cloud Functions for Firebase", - "scripts": { - "lint": "eslint .", - "serve": "firebase emulators:start --only functions", - "shell": "firebase functions:shell", - "start": "npm run shell", - "deploy": "firebase deploy --only functions", - "logs": "firebase functions:log" - }, - "engines": { - "node": "20" - }, - "main": "index.js", - "dependencies": { - "@genkit-ai/googleai": "^1.18.0", - "axios": "^1.11.0", - "firebase-admin": "^12.7.0", - "firebase-functions": "^6.4.0", - "genkit": "^1.18.0" - }, - "devDependencies": { - "eslint": "^8.15.0", - "eslint-config-google": "^0.14.0" - }, - "private": true -} -[debug] [2025-09-08T12:32:34.789Z] Building nodejs source -[debug] [2025-09-08T12:32:34.789Z] Failed to find version of module node: reached end of search path /Users/thomasdemirdjian/Minuit/musicland/functions/node_modules -[warn] ⚠ functions: Your requested "node" version "20" doesn't match your global version "24". Using node@24 from host. -[debug] [2025-09-08T12:32:34.789Z] Could not find functions.yaml. Must use http discovery -[debug] [2025-09-08T12:32:34.790Z] Found firebase-functions binary at '/Users/thomasdemirdjian/Minuit/musicland/functions/node_modules/.bin/firebase-functions' -[info] ✔ functions: Loaded functions definitions from source: music.generateMusic, music.getSunoStatus, music.getSunoTimestamps, music.sunoCallback, lyrics.generateLyrics, lyrics.analyseLyricsToxicity, cover.onTaskCreateGenerateCover. {"metadata":{"emulator":{"name":"functions"},"message":"Loaded functions definitions from source: music.generateMusic, music.getSunoStatus, music.getSunoTimestamps, music.sunoCallback, lyrics.generateLyrics, lyrics.analyseLyricsToxicity, cover.onTaskCreateGenerateCover."}} -[info] Serving at port 8400 - -[debug] [2025-09-08T12:32:35.036Z] Got response from /__/functions.yaml {"endpoints":{"music-generateMusic":{"availableMemoryMb":null,"timeoutSeconds":null,"minInstances":null,"maxInstances":null,"ingressSettings":null,"concurrency":null,"serviceAccountEmail":null,"vpc":null,"platform":"gcfv2","labels":{},"callableTrigger":{},"entryPoint":"music.generateMusic"},"music-getSunoStatus":{"availableMemoryMb":null,"timeoutSeconds":null,"minInstances":null,"maxInstances":null,"ingressSettings":null,"concurrency":null,"serviceAccountEmail":null,"vpc":null,"platform":"gcfv2","labels":{},"callableTrigger":{},"entryPoint":"music.getSunoStatus"},"music-getSunoTimestamps":{"availableMemoryMb":null,"timeoutSeconds":null,"minInstances":null,"maxInstances":null,"ingressSettings":null,"concurrency":null,"serviceAccountEmail":null,"vpc":null,"platform":"gcfv2","labels":{},"callableTrigger":{},"entryPoint":"music.getSunoTimestamps"},"music-sunoCallback":{"availableMemoryMb":null,"timeoutSeconds":null,"minInstances":null,"maxInstances":null,"ingressSettings":null,"concurrency":null,"serviceAccountEmail":null,"vpc":null,"platform":"gcfv2","labels":{},"httpsTrigger":{},"entryPoint":"music.sunoCallback"},"lyrics-generateLyrics":{"availableMemoryMb":null,"timeoutSeconds":null,"minInstances":null,"maxInstances":null,"ingressSettings":null,"concurrency":null,"serviceAccountEmail":null,"vpc":null,"platform":"gcfv2","labels":{},"callableTrigger":{},"entryPoint":"lyrics.generateLyrics"},"lyrics-analyseLyricsToxicity":{"availableMemoryMb":null,"timeoutSeconds":null,"minInstances":null,"maxInstances":null,"ingressSettings":null,"concurrency":null,"serviceAccountEmail":null,"vpc":null,"platform":"gcfv2","labels":{},"callableTrigger":{},"entryPoint":"lyrics.analyseLyricsToxicity"},"cover-onTaskCreateGenerateCover":{"availableMemoryMb":1024,"timeoutSeconds":540,"minInstances":null,"maxInstances":null,"ingressSettings":null,"concurrency":null,"serviceAccountEmail":null,"vpc":null,"platform":"gcfv2","labels":{},"eventTrigger":{"eventType":"google.cloud.firestore.document.v1.created","eventFilters":{"database":"(default)","namespace":"(default)"},"eventFilterPathPatterns":{"document":"tasks/{taskId}"},"retry":false},"entryPoint":"cover.onTaskCreateGenerateCover"}},"specVersion":"v1alpha1","requiredAPIs":[],"extensions":{}} -[info] ✔ functions: Loaded functions definitions from source: music.generateMusic, music.getSunoStatus, music.getSunoTimestamps, music.sunoCallback, lyrics.generateLyrics, lyrics.analyseLyricsToxicity, cover.onTaskCreateGenerateCover. {"metadata":{"emulator":{"name":"functions"},"message":"Loaded functions definitions from source: music.generateMusic, music.getSunoStatus, music.getSunoTimestamps, music.sunoCallback, lyrics.generateLyrics, lyrics.analyseLyricsToxicity, cover.onTaskCreateGenerateCover."}} -[debug] [2025-09-08T12:50:55.377Z] File /Users/thomasdemirdjian/Minuit/musicland/functions/src/music.js changed, reloading triggers {"metadata":{"emulator":{"name":"functions"},"message":"File /Users/thomasdemirdjian/Minuit/musicland/functions/src/music.js changed, reloading triggers"}} -[debug] [2025-09-08T12:50:56.379Z] Validating nodejs source -[debug] [2025-09-08T12:50:56.820Z] > [functions] package.json contents: { - "name": "functions", - "description": "Cloud Functions for Firebase", - "scripts": { - "lint": "eslint .", - "serve": "firebase emulators:start --only functions", - "shell": "firebase functions:shell", - "start": "npm run shell", - "deploy": "firebase deploy --only functions", - "logs": "firebase functions:log" - }, - "engines": { - "node": "20" - }, - "main": "index.js", - "dependencies": { - "@genkit-ai/googleai": "^1.18.0", - "axios": "^1.11.0", - "firebase-admin": "^12.7.0", - "firebase-functions": "^6.4.0", - "genkit": "^1.18.0" - }, - "devDependencies": { - "eslint": "^8.15.0", - "eslint-config-google": "^0.14.0" - }, - "private": true -} -[debug] [2025-09-08T12:50:56.820Z] Building nodejs source -[debug] [2025-09-08T12:50:56.820Z] Failed to find version of module node: reached end of search path /Users/thomasdemirdjian/Minuit/musicland/functions/node_modules -[warn] ⚠ functions: Your requested "node" version "20" doesn't match your global version "24". Using node@24 from host. -[debug] [2025-09-08T12:50:56.820Z] Could not find functions.yaml. Must use http discovery -[debug] [2025-09-08T12:50:56.821Z] Found firebase-functions binary at '/Users/thomasdemirdjian/Minuit/musicland/functions/node_modules/.bin/firebase-functions' -[info] Serving at port 8655 - -[debug] [2025-09-08T12:50:57.317Z] Got response from /__/functions.yaml {"endpoints":{"music-generateMusic":{"availableMemoryMb":null,"timeoutSeconds":null,"minInstances":null,"maxInstances":null,"ingressSettings":null,"concurrency":null,"serviceAccountEmail":null,"vpc":null,"platform":"gcfv2","labels":{},"callableTrigger":{},"entryPoint":"music.generateMusic"},"music-getSunoStatus":{"availableMemoryMb":null,"timeoutSeconds":null,"minInstances":null,"maxInstances":null,"ingressSettings":null,"concurrency":null,"serviceAccountEmail":null,"vpc":null,"platform":"gcfv2","labels":{},"callableTrigger":{},"entryPoint":"music.getSunoStatus"},"music-getSunoTimestamps":{"availableMemoryMb":null,"timeoutSeconds":null,"minInstances":null,"maxInstances":null,"ingressSettings":null,"concurrency":null,"serviceAccountEmail":null,"vpc":null,"platform":"gcfv2","labels":{},"callableTrigger":{},"entryPoint":"music.getSunoTimestamps"},"music-sunoCallback":{"availableMemoryMb":null,"timeoutSeconds":null,"minInstances":null,"maxInstances":null,"ingressSettings":null,"concurrency":null,"serviceAccountEmail":null,"vpc":null,"platform":"gcfv2","labels":{},"httpsTrigger":{},"entryPoint":"music.sunoCallback"},"lyrics-generateLyrics":{"availableMemoryMb":null,"timeoutSeconds":null,"minInstances":null,"maxInstances":null,"ingressSettings":null,"concurrency":null,"serviceAccountEmail":null,"vpc":null,"platform":"gcfv2","labels":{},"callableTrigger":{},"entryPoint":"lyrics.generateLyrics"},"lyrics-analyseLyricsToxicity":{"availableMemoryMb":null,"timeoutSeconds":null,"minInstances":null,"maxInstances":null,"ingressSettings":null,"concurrency":null,"serviceAccountEmail":null,"vpc":null,"platform":"gcfv2","labels":{},"callableTrigger":{},"entryPoint":"lyrics.analyseLyricsToxicity"},"cover-onTaskCreateGenerateCover":{"availableMemoryMb":1024,"timeoutSeconds":540,"minInstances":null,"maxInstances":null,"ingressSettings":null,"concurrency":null,"serviceAccountEmail":null,"vpc":null,"platform":"gcfv2","labels":{},"eventTrigger":{"eventType":"google.cloud.firestore.document.v1.created","eventFilters":{"database":"(default)","namespace":"(default)"},"eventFilterPathPatterns":{"document":"tasks/{taskId}"},"retry":false},"entryPoint":"cover.onTaskCreateGenerateCover"}},"specVersion":"v1alpha1","requiredAPIs":[],"extensions":{}} -[info] ✔ functions: Loaded functions definitions from source: music.generateMusic, music.getSunoStatus, music.getSunoTimestamps, music.sunoCallback, lyrics.generateLyrics, lyrics.analyseLyricsToxicity, cover.onTaskCreateGenerateCover. {"metadata":{"emulator":{"name":"functions"},"message":"Loaded functions definitions from source: music.generateMusic, music.getSunoStatus, music.getSunoTimestamps, music.sunoCallback, lyrics.generateLyrics, lyrics.analyseLyricsToxicity, cover.onTaskCreateGenerateCover."}} -[debug] [2025-09-08T12:57:11.410Z] [work-queue] {"queuedWork":["/musicland-d33f9/us-central1/music-generateMusic-2025-09-08T12:57:11.410Z"],"queueLength":1,"runningWork":[],"workRunningCount":0} -[debug] [2025-09-08T12:57:11.410Z] [work-queue] {"queuedWork":[],"queueLength":0,"runningWork":["/musicland-d33f9/us-central1/music-generateMusic-2025-09-08T12:57:11.410Z"],"workRunningCount":1} -[debug] [2025-09-08T12:57:11.410Z] Accepted request POST /musicland-d33f9/us-central1/music-generateMusic --> us-central1-music-generateMusic -[debug] [2025-09-08T12:57:11.414Z] [functions] Runtime ready! Sending request! {"metadata":{"emulator":{"name":"functions"},"message":"[functions] Runtime ready! Sending request!"}} -[debug] [2025-09-08T12:57:11.415Z] [functions] Got req.url=/musicland-d33f9/us-central1/music-generateMusic, mapping to path=/ {"metadata":{"emulator":{"name":"functions"},"message":"[functions] Got req.url=/musicland-d33f9/us-central1/music-generateMusic, mapping to path=/"}} -[debug] [2025-09-08T12:57:11.415Z] [worker-pool] Cleaned up workers for us-central1-lyrics-analyseLyricsToxicity: 1 --> 0 {"metadata":{"emulator":{"name":"functions"},"message":"[worker-pool] Cleaned up workers for us-central1-lyrics-analyseLyricsToxicity: 1 --> 0"}} -[debug] [2025-09-08T12:57:11.418Z] [worker-pool] addWorker(us-central1-music-generateMusic) {"metadata":{"emulator":{"name":"functions"},"message":"[worker-pool] addWorker(us-central1-music-generateMusic)"}} -[debug] [2025-09-08T12:57:11.419Z] [worker-pool] Adding worker with key us-central1-music-generateMusic, total=1 {"metadata":{"emulator":{"name":"functions"},"message":"[worker-pool] Adding worker with key us-central1-music-generateMusic, total=1"}} -[debug] [2025-09-08T12:57:11.947Z] [runtime-status] [30948] Resolved module firebase-admin {"declared":true,"installed":true,"version":"12.7.0","resolution":"/Users/thomasdemirdjian/Minuit/musicland/functions/node_modules/firebase-admin/lib/index.js"} {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"[runtime-status] [30948] Resolved module firebase-admin {\"declared\":true,\"installed\":true,\"version\":\"12.7.0\",\"resolution\":\"/Users/thomasdemirdjian/Minuit/musicland/functions/node_modules/firebase-admin/lib/index.js\"}"}} -[debug] [2025-09-08T12:57:11.948Z] [runtime-status] [30948] Resolved module firebase-functions {"declared":true,"installed":true,"version":"6.4.0","resolution":"/Users/thomasdemirdjian/Minuit/musicland/functions/node_modules/firebase-functions/lib/v2/index.js"} {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"[runtime-status] [30948] Resolved module firebase-functions {\"declared\":true,\"installed\":true,\"version\":\"6.4.0\",\"resolution\":\"/Users/thomasdemirdjian/Minuit/musicland/functions/node_modules/firebase-functions/lib/v2/index.js\"}"}} -[debug] [2025-09-08T12:57:11.948Z] [runtime-status] [30948] Outgoing network have been stubbed. [{"name":"http","status":"mocked"},{"name":"http","status":"mocked"},{"name":"https","status":"mocked"},{"name":"https","status":"mocked"},{"name":"net","status":"mocked"}] {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"[runtime-status] [30948] Outgoing network have been stubbed. [{\"name\":\"http\",\"status\":\"mocked\"},{\"name\":\"http\",\"status\":\"mocked\"},{\"name\":\"https\",\"status\":\"mocked\"},{\"name\":\"https\",\"status\":\"mocked\"},{\"name\":\"net\",\"status\":\"mocked\"}]"}} -[debug] [2025-09-08T12:57:11.948Z] [runtime-status] [30948] Resolved module firebase-functions {"declared":true,"installed":true,"version":"6.4.0","resolution":"/Users/thomasdemirdjian/Minuit/musicland/functions/node_modules/firebase-functions/lib/v2/index.js"} {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"[runtime-status] [30948] Resolved module firebase-functions {\"declared\":true,\"installed\":true,\"version\":\"6.4.0\",\"resolution\":\"/Users/thomasdemirdjian/Minuit/musicland/functions/node_modules/firebase-functions/lib/v2/index.js\"}"}} -[debug] [2025-09-08T12:57:12.008Z] [runtime-status] [30948] Checked functions.config() {"config":{}} {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"[runtime-status] [30948] Checked functions.config() {\"config\":{}}"}} -[debug] [2025-09-08T12:57:12.008Z] [runtime-status] [30948] firebase-functions has been stubbed. {"functionsResolution":{"declared":true,"installed":true,"version":"6.4.0","resolution":"/Users/thomasdemirdjian/Minuit/musicland/functions/node_modules/firebase-functions/lib/v2/index.js"}} {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"[runtime-status] [30948] firebase-functions has been stubbed. {\"functionsResolution\":{\"declared\":true,\"installed\":true,\"version\":\"6.4.0\",\"resolution\":\"/Users/thomasdemirdjian/Minuit/musicland/functions/node_modules/firebase-functions/lib/v2/index.js\"}}"}} -[debug] [2025-09-08T12:57:12.008Z] [runtime-status] [30948] Resolved module firebase-functions {"declared":true,"installed":true,"version":"6.4.0","resolution":"/Users/thomasdemirdjian/Minuit/musicland/functions/node_modules/firebase-functions/lib/v2/index.js"} {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"[runtime-status] [30948] Resolved module firebase-functions {\"declared\":true,\"installed\":true,\"version\":\"6.4.0\",\"resolution\":\"/Users/thomasdemirdjian/Minuit/musicland/functions/node_modules/firebase-functions/lib/v2/index.js\"}"}} -[debug] [2025-09-08T12:57:12.010Z] [runtime-status] [30948] Resolved module firebase-admin {"declared":true,"installed":true,"version":"12.7.0","resolution":"/Users/thomasdemirdjian/Minuit/musicland/functions/node_modules/firebase-admin/lib/index.js"} {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"[runtime-status] [30948] Resolved module firebase-admin {\"declared\":true,\"installed\":true,\"version\":\"12.7.0\",\"resolution\":\"/Users/thomasdemirdjian/Minuit/musicland/functions/node_modules/firebase-admin/lib/index.js\"}"}} -[debug] [2025-09-08T12:57:12.010Z] [runtime-status] [30948] Resolved module firebase-functions {"declared":true,"installed":true,"version":"6.4.0","resolution":"/Users/thomasdemirdjian/Minuit/musicland/functions/node_modules/firebase-functions/lib/v2/index.js"} {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"[runtime-status] [30948] Resolved module firebase-functions {\"declared\":true,\"installed\":true,\"version\":\"6.4.0\",\"resolution\":\"/Users/thomasdemirdjian/Minuit/musicland/functions/node_modules/firebase-functions/lib/v2/index.js\"}"}} -[debug] [2025-09-08T12:57:12.010Z] [runtime-status] [30948] firebase-admin has been stubbed. {"adminResolution":{"declared":true,"installed":true,"version":"12.7.0","resolution":"/Users/thomasdemirdjian/Minuit/musicland/functions/node_modules/firebase-admin/lib/index.js"}} {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"[runtime-status] [30948] firebase-admin has been stubbed. {\"adminResolution\":{\"declared\":true,\"installed\":true,\"version\":\"12.7.0\",\"resolution\":\"/Users/thomasdemirdjian/Minuit/musicland/functions/node_modules/firebase-admin/lib/index.js\"}}"}} -[debug] [2025-09-08T12:57:12.010Z] [runtime-status] [30948] initializeApp(DEFAULT) {"storageBucket":"musicland-d33f9.firebasestorage.app","projectId":"musicland-d33f9"} {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"[runtime-status] [30948] initializeApp(DEFAULT) {\"storageBucket\":\"musicland-d33f9.firebasestorage.app\",\"projectId\":\"musicland-d33f9\"}"}} -[debug] [2025-09-08T12:57:12.129Z] [runtime-status] [30948] Functions runtime initialized. {"cwd":"/Users/thomasdemirdjian/Minuit/musicland/functions","node_version":"24.1.0"} {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"[runtime-status] [30948] Functions runtime initialized. {\"cwd\":\"/Users/thomasdemirdjian/Minuit/musicland/functions\",\"node_version\":\"24.1.0\"}"}} -[debug] [2025-09-08T12:57:12.129Z] [runtime-status] [30948] Listening to port: /var/folders/4x/n553v4ds6xq73gwblz9jm7t00000gn/T/fire_emu_5a1da28295605e2a.sock {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"[runtime-status] [30948] Listening to port: /var/folders/4x/n553v4ds6xq73gwblz9jm7t00000gn/T/fire_emu_5a1da28295605e2a.sock"}} -[debug] [2025-09-08T12:57:12.230Z] [worker-us-central1-music-generateMusic-cbb6ce5c-b043-4553-ac98-63150057ee92]: IDLE {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"[worker-us-central1-music-generateMusic-cbb6ce5c-b043-4553-ac98-63150057ee92]: IDLE"}} -[debug] [2025-09-08T12:57:12.230Z] [worker-pool] submitRequest(triggerId=us-central1-music-generateMusic) {"metadata":{"emulator":{"name":"functions"},"message":"[worker-pool] submitRequest(triggerId=us-central1-music-generateMusic)"}} -[info] i functions: Beginning execution of "us-central1-music-generateMusic" {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"Beginning execution of \"us-central1-music-generateMusic\""}} -[debug] [2025-09-08T12:57:12.231Z] [worker-us-central1-music-generateMusic-cbb6ce5c-b043-4553-ac98-63150057ee92]: BUSY {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"[worker-us-central1-music-generateMusic-cbb6ce5c-b043-4553-ac98-63150057ee92]: BUSY"}} -[info] > {"verifications":{"app":"MISSING","auth":"VALID"},"logging.googleapis.com/labels":{"firebase-log-type":"callable-request-verification"},"severity":"DEBUG","message":"Callable request verification passed"} {"user":{"verifications":{"app":"MISSING","auth":"VALID"},"logging.googleapis.com/labels":{"firebase-log-type":"callable-request-verification"},"severity":"DEBUG","message":"Callable request verification passed"},"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m {\"verifications\":{\"app\":\"MISSING\",\"auth\":\"VALID\"},\"logging.googleapis.com/labels\":{\"firebase-log-type\":\"callable-request-verification\"},\"severity\":\"DEBUG\",\"message\":\"Callable request verification passed\"}"}} -[info] > PAYLOAD { {"user":"PAYLOAD {","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m PAYLOAD {"}} -[info] > customMode: true, {"user":" customMode: true,","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m customMode: true,"}} -[info] > instrumental: false, {"user":" instrumental: false,","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m instrumental: false,"}} -[info] > model: 'V4_5', {"user":" model: 'V4_5',","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m model: 'V4_5',"}} -[info] > prompt: '[couplet]\n' + {"user":" prompt: '[couplet]\\n' +","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m prompt: '[couplet]\\n' +"}} -[info] > 'Viens ce soir dans ma demeure\n' + {"user":" 'Viens ce soir dans ma demeure\\n' +","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m 'Viens ce soir dans ma demeure\\n' +"}} -[info] > 'Tu auras toute ma chaleur\n' + {"user":" 'Tu auras toute ma chaleur\\n' +","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m 'Tu auras toute ma chaleur\\n' +"}} -[info] > 'Viens ce soir dans ma cabane\n' + {"user":" 'Viens ce soir dans ma cabane\\n' +","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m 'Viens ce soir dans ma cabane\\n' +"}} -[info] > "Tu n'connaîtras pas la panne\n" + {"user":" \"Tu n'connaîtras pas la panne\\n\" +","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m \"Tu n'connaîtras pas la panne\\n\" +"}} -[info] > 'Viens ce soir dans ma bicoque\n' + {"user":" 'Viens ce soir dans ma bicoque\\n' +","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m 'Viens ce soir dans ma bicoque\\n' +"}} -[info] > 'Toi la poule et moi le coq\n' + {"user":" 'Toi la poule et moi le coq\\n' +","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m 'Toi la poule et moi le coq\\n' +"}} -[info] > 'Viens ce soir dans ma villa\n' + {"user":" 'Viens ce soir dans ma villa\\n' +","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m 'Viens ce soir dans ma villa\\n' +"}} -[info] > 'Tu verras tu reviendras\n' + {"user":" 'Tu verras tu reviendras\\n' +","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m 'Tu verras tu reviendras\\n' +"}} -[info] > '\n' + {"user":" '\\n' +","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m '\\n' +"}} -[info] > '[refrain]\n' + {"user":" '[refrain]\\n' +","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m '[refrain]\\n' +"}} -[info] > 'Tu veux mon zizi?\n' + {"user":" 'Tu veux mon zizi?\\n' +","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m 'Tu veux mon zizi?\\n' +"}} -[info] > '(Oui, oui, oui, oui)\n' + {"user":" '(Oui, oui, oui, oui)\\n' +","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m '(Oui, oui, oui, oui)\\n' +"}} -[info] > "J'vais te le donner oui, oui, oui, oui\n" + {"user":" \"J'vais te le donner oui, oui, oui, oui\\n\" +","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m \"J'vais te le donner oui, oui, oui, oui\\n\" +"}} -[info] > '\n' + {"user":" '\\n' +","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m '\\n' +"}} -[info] > '[couplet]\n' + {"user":" '[couplet]\\n' +","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m '[couplet]\\n' +"}} -[info] > 'Viens ce soir dans ma demeure\n' + {"user":" 'Viens ce soir dans ma demeure\\n' +","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m 'Viens ce soir dans ma demeure\\n' +"}} -[info] > 'Tu auras toute ma chaleur\n' + {"user":" 'Tu auras toute ma chaleur\\n' +","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m 'Tu auras toute ma chaleur\\n' +"}} -[info] > 'Viens ce soir dans ma cabane\n' + {"user":" 'Viens ce soir dans ma cabane\\n' +","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m 'Viens ce soir dans ma cabane\\n' +"}} -[info] > "Tu n'connaîtras pas la panne\n" + {"user":" \"Tu n'connaîtras pas la panne\\n\" +","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m \"Tu n'connaîtras pas la panne\\n\" +"}} -[info] > 'Viens ce soir dans ma bicoque\n' + {"user":" 'Viens ce soir dans ma bicoque\\n' +","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m 'Viens ce soir dans ma bicoque\\n' +"}} -[info] > 'Toi la poule et moi le coq\n' + {"user":" 'Toi la poule et moi le coq\\n' +","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m 'Toi la poule et moi le coq\\n' +"}} -[info] > 'Viens ce soir dans ma villa\n' + {"user":" 'Viens ce soir dans ma villa\\n' +","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m 'Viens ce soir dans ma villa\\n' +"}} -[info] > 'Tu verras tu reviendras\n' + {"user":" 'Tu verras tu reviendras\\n' +","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m 'Tu verras tu reviendras\\n' +"}} -[info] > '\n' + {"user":" '\\n' +","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m '\\n' +"}} -[info] > '[refrain]\n' + {"user":" '[refrain]\\n' +","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m '[refrain]\\n' +"}} -[info] > 'Tu veux mon zizi?\n' + {"user":" 'Tu veux mon zizi?\\n' +","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m 'Tu veux mon zizi?\\n' +"}} -[info] > '(Oui, oui, oui, oui)\n' + {"user":" '(Oui, oui, oui, oui)\\n' +","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m '(Oui, oui, oui, oui)\\n' +"}} -[info] > "J'vais te le donner oui, oui, oui, oui", {"user":" \"J'vais te le donner oui, oui, oui, oui\",","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m \"J'vais te le donner oui, oui, oui, oui\","}} -[info] > title: 'I’m In It', {"user":" title: 'I’m In It',","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m title: 'I’m In It',"}} -[info] > style: 'Genres: Trap, Latino ; Tempo: Normal ; Instruments: Banjo, Guitare acoustique, Synthétiseur, Guitare électrique, Piano éléctrique ; Vocal: Seductive, sensual tone ; Vocal (user): Technique vocale entre parler et chanter, typique de la musique expressionniste. ; Voix séduisante et sensuelle. ; Chant puissant (styles pop et Broadway). ; Mix: propre, punchy, large stéréo, radio-ready. Titre: I’m In It\n' + {"user":" style: 'Genres: Trap, Latino ; Tempo: Normal ; Instruments: Banjo, Guitare acoustique, Synthétiseur, Guitare électrique, Piano éléctrique ; Vocal: Seductive, sensual tone ; Vocal (user): Technique vocale entre parler et chanter, typique de la musique expressionniste. ; Voix séduisante et sensuelle. ; Chant puissant (styles pop et Broadway). ; Mix: propre, punchy, large stéréo, radio-ready. Titre: I’m In It\\n' +","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m style: 'Genres: Trap, Latino ; Tempo: Normal ; Instruments: Banjo, Guitare acoustique, Synthétiseur, Guitare électrique, Piano éléctrique ; Vocal: Seductive, sensual tone ; Vocal (user): Technique vocale entre parler et chanter, typique de la musique expressionniste. ; Voix séduisante et sensuelle. ; Chant puissant (styles pop et Broadway). ; Mix: propre, punchy, large stéréo, radio-ready. Titre: I’m In It\\n' +"}} -[info] > '\n' + {"user":" '\\n' +","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m '\\n' +"}} -[info] > 'Style: Genres: Trap, Latino Tempo normal. Instruments principaux: Banjo, Guitare acoustique, Synthétiseur, Guitare électrique, Piano éléctrique Vocal direction: Seductive, sensual tone User vocal r', {"user":" 'Style: Genres: Trap, Latino Tempo normal. Instruments principaux: Banjo, Guitare acoustique, Synthétiseur, Guitare électrique, Piano éléctrique Vocal direction: Seductive, sensual tone User vocal r',","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m 'Style: Genres: Trap, Latino Tempo normal. Instruments principaux: Banjo, Guitare acoustique, Synthétiseur, Guitare électrique, Piano éléctrique Vocal direction: Seductive, sensual tone User vocal r',"}} -[info] > callBackUrl: 'https://us-central1-musicland-d33f9.cloudfunctions.net/music-sunoCallback' {"user":" callBackUrl: 'https://us-central1-musicland-d33f9.cloudfunctions.net/music-sunoCallback'","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m callBackUrl: 'https://us-central1-musicland-d33f9.cloudfunctions.net/music-sunoCallback'"}} -[info] > } {"user":"}","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m }"}} -[debug] [2025-09-08T12:57:12.614Z] Finishing up request with event=pause {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"Finishing up request with event=pause"}} -[info] i functions: Finished "us-central1-music-generateMusic" in 383.260167ms {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"Finished \"us-central1-music-generateMusic\" in 383.260167ms"}} -[debug] [2025-09-08T12:57:12.615Z] [worker-us-central1-music-generateMusic-cbb6ce5c-b043-4553-ac98-63150057ee92]: IDLE {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"[worker-us-central1-music-generateMusic-cbb6ce5c-b043-4553-ac98-63150057ee92]: IDLE"}} -[debug] [2025-09-08T12:57:12.615Z] Finishing up request with event=finish {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"Finishing up request with event=finish"}} -[debug] [2025-09-08T12:57:12.615Z] Finishing up request with event=close {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"Finishing up request with event=close"}} -[debug] [2025-09-08T12:57:12.615Z] [work-queue] {"queuedWork":[],"queueLength":0,"runningWork":[],"workRunningCount":0} -[debug] [2025-09-08T13:11:33.078Z] [work-queue] {"queuedWork":["/musicland-d33f9/us-central1/lyrics-analyseLyricsToxicity-2025-09-08T13:11:33.078Z"],"queueLength":1,"runningWork":[],"workRunningCount":0} -[debug] [2025-09-08T13:11:33.079Z] [work-queue] {"queuedWork":[],"queueLength":0,"runningWork":["/musicland-d33f9/us-central1/lyrics-analyseLyricsToxicity-2025-09-08T13:11:33.078Z"],"workRunningCount":1} -[debug] [2025-09-08T13:11:33.079Z] Accepted request POST /musicland-d33f9/us-central1/lyrics-analyseLyricsToxicity --> us-central1-lyrics-analyseLyricsToxicity -[debug] [2025-09-08T13:11:33.081Z] [functions] Runtime ready! Sending request! {"metadata":{"emulator":{"name":"functions"},"message":"[functions] Runtime ready! Sending request!"}} -[debug] [2025-09-08T13:11:33.081Z] [functions] Got req.url=/musicland-d33f9/us-central1/lyrics-analyseLyricsToxicity, mapping to path=/ {"metadata":{"emulator":{"name":"functions"},"message":"[functions] Got req.url=/musicland-d33f9/us-central1/lyrics-analyseLyricsToxicity, mapping to path=/"}} -[debug] [2025-09-08T13:11:33.083Z] [worker-pool] addWorker(us-central1-lyrics-analyseLyricsToxicity) {"metadata":{"emulator":{"name":"functions"},"message":"[worker-pool] addWorker(us-central1-lyrics-analyseLyricsToxicity)"}} -[debug] [2025-09-08T13:11:33.083Z] [worker-pool] Adding worker with key us-central1-lyrics-analyseLyricsToxicity, total=1 {"metadata":{"emulator":{"name":"functions"},"message":"[worker-pool] Adding worker with key us-central1-lyrics-analyseLyricsToxicity, total=1"}} -[debug] [2025-09-08T13:11:33.514Z] [runtime-status] [41753] Resolved module firebase-admin {"declared":true,"installed":true,"version":"12.7.0","resolution":"/Users/thomasdemirdjian/Minuit/musicland/functions/node_modules/firebase-admin/lib/index.js"} {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-lyrics-analyseLyricsToxicity"},"extension":{},"message":"[runtime-status] [41753] Resolved module firebase-admin {\"declared\":true,\"installed\":true,\"version\":\"12.7.0\",\"resolution\":\"/Users/thomasdemirdjian/Minuit/musicland/functions/node_modules/firebase-admin/lib/index.js\"}"}} -[debug] [2025-09-08T13:11:33.514Z] [runtime-status] [41753] Resolved module firebase-functions {"declared":true,"installed":true,"version":"6.4.0","resolution":"/Users/thomasdemirdjian/Minuit/musicland/functions/node_modules/firebase-functions/lib/v2/index.js"} {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-lyrics-analyseLyricsToxicity"},"extension":{},"message":"[runtime-status] [41753] Resolved module firebase-functions {\"declared\":true,\"installed\":true,\"version\":\"6.4.0\",\"resolution\":\"/Users/thomasdemirdjian/Minuit/musicland/functions/node_modules/firebase-functions/lib/v2/index.js\"}"}} -[debug] [2025-09-08T13:11:33.514Z] [runtime-status] [41753] Outgoing network have been stubbed. [{"name":"http","status":"mocked"},{"name":"http","status":"mocked"},{"name":"https","status":"mocked"},{"name":"https","status":"mocked"},{"name":"net","status":"mocked"}] {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-lyrics-analyseLyricsToxicity"},"extension":{},"message":"[runtime-status] [41753] Outgoing network have been stubbed. [{\"name\":\"http\",\"status\":\"mocked\"},{\"name\":\"http\",\"status\":\"mocked\"},{\"name\":\"https\",\"status\":\"mocked\"},{\"name\":\"https\",\"status\":\"mocked\"},{\"name\":\"net\",\"status\":\"mocked\"}]"}} -[debug] [2025-09-08T13:11:33.515Z] [runtime-status] [41753] Resolved module firebase-functions {"declared":true,"installed":true,"version":"6.4.0","resolution":"/Users/thomasdemirdjian/Minuit/musicland/functions/node_modules/firebase-functions/lib/v2/index.js"} {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-lyrics-analyseLyricsToxicity"},"extension":{},"message":"[runtime-status] [41753] Resolved module firebase-functions {\"declared\":true,\"installed\":true,\"version\":\"6.4.0\",\"resolution\":\"/Users/thomasdemirdjian/Minuit/musicland/functions/node_modules/firebase-functions/lib/v2/index.js\"}"}} -[debug] [2025-09-08T13:11:33.625Z] [runtime-status] [41753] Checked functions.config() {"config":{}} {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-lyrics-analyseLyricsToxicity"},"extension":{},"message":"[runtime-status] [41753] Checked functions.config() {\"config\":{}}"}} -[debug] [2025-09-08T13:11:33.625Z] [runtime-status] [41753] firebase-functions has been stubbed. {"functionsResolution":{"declared":true,"installed":true,"version":"6.4.0","resolution":"/Users/thomasdemirdjian/Minuit/musicland/functions/node_modules/firebase-functions/lib/v2/index.js"}} {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-lyrics-analyseLyricsToxicity"},"extension":{},"message":"[runtime-status] [41753] firebase-functions has been stubbed. {\"functionsResolution\":{\"declared\":true,\"installed\":true,\"version\":\"6.4.0\",\"resolution\":\"/Users/thomasdemirdjian/Minuit/musicland/functions/node_modules/firebase-functions/lib/v2/index.js\"}}"}} -[debug] [2025-09-08T13:11:33.625Z] [runtime-status] [41753] Resolved module firebase-functions {"declared":true,"installed":true,"version":"6.4.0","resolution":"/Users/thomasdemirdjian/Minuit/musicland/functions/node_modules/firebase-functions/lib/v2/index.js"} {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-lyrics-analyseLyricsToxicity"},"extension":{},"message":"[runtime-status] [41753] Resolved module firebase-functions {\"declared\":true,\"installed\":true,\"version\":\"6.4.0\",\"resolution\":\"/Users/thomasdemirdjian/Minuit/musicland/functions/node_modules/firebase-functions/lib/v2/index.js\"}"}} -[debug] [2025-09-08T13:11:33.626Z] [runtime-status] [41753] Resolved module firebase-admin {"declared":true,"installed":true,"version":"12.7.0","resolution":"/Users/thomasdemirdjian/Minuit/musicland/functions/node_modules/firebase-admin/lib/index.js"} {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-lyrics-analyseLyricsToxicity"},"extension":{},"message":"[runtime-status] [41753] Resolved module firebase-admin {\"declared\":true,\"installed\":true,\"version\":\"12.7.0\",\"resolution\":\"/Users/thomasdemirdjian/Minuit/musicland/functions/node_modules/firebase-admin/lib/index.js\"}"}} -[debug] [2025-09-08T13:11:33.627Z] [runtime-status] [41753] Resolved module firebase-functions {"declared":true,"installed":true,"version":"6.4.0","resolution":"/Users/thomasdemirdjian/Minuit/musicland/functions/node_modules/firebase-functions/lib/v2/index.js"} {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-lyrics-analyseLyricsToxicity"},"extension":{},"message":"[runtime-status] [41753] Resolved module firebase-functions {\"declared\":true,\"installed\":true,\"version\":\"6.4.0\",\"resolution\":\"/Users/thomasdemirdjian/Minuit/musicland/functions/node_modules/firebase-functions/lib/v2/index.js\"}"}} -[debug] [2025-09-08T13:11:33.627Z] [runtime-status] [41753] firebase-admin has been stubbed. {"adminResolution":{"declared":true,"installed":true,"version":"12.7.0","resolution":"/Users/thomasdemirdjian/Minuit/musicland/functions/node_modules/firebase-admin/lib/index.js"}} {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-lyrics-analyseLyricsToxicity"},"extension":{},"message":"[runtime-status] [41753] firebase-admin has been stubbed. {\"adminResolution\":{\"declared\":true,\"installed\":true,\"version\":\"12.7.0\",\"resolution\":\"/Users/thomasdemirdjian/Minuit/musicland/functions/node_modules/firebase-admin/lib/index.js\"}}"}} -[debug] [2025-09-08T13:11:33.627Z] [runtime-status] [41753] initializeApp(DEFAULT) {"storageBucket":"musicland-d33f9.firebasestorage.app","projectId":"musicland-d33f9"} {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-lyrics-analyseLyricsToxicity"},"extension":{},"message":"[runtime-status] [41753] initializeApp(DEFAULT) {\"storageBucket\":\"musicland-d33f9.firebasestorage.app\",\"projectId\":\"musicland-d33f9\"}"}} -[debug] [2025-09-08T13:11:33.854Z] [runtime-status] [41753] Functions runtime initialized. {"cwd":"/Users/thomasdemirdjian/Minuit/musicland/functions","node_version":"24.1.0"} {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-lyrics-analyseLyricsToxicity"},"extension":{},"message":"[runtime-status] [41753] Functions runtime initialized. {\"cwd\":\"/Users/thomasdemirdjian/Minuit/musicland/functions\",\"node_version\":\"24.1.0\"}"}} -[debug] [2025-09-08T13:11:33.854Z] [runtime-status] [41753] Listening to port: /var/folders/4x/n553v4ds6xq73gwblz9jm7t00000gn/T/fire_emu_00b1638205f54e33.sock {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-lyrics-analyseLyricsToxicity"},"extension":{},"message":"[runtime-status] [41753] Listening to port: /var/folders/4x/n553v4ds6xq73gwblz9jm7t00000gn/T/fire_emu_00b1638205f54e33.sock"}} -[debug] [2025-09-08T13:11:33.893Z] [worker-us-central1-lyrics-analyseLyricsToxicity-d06c6683-6cd1-4724-b9c2-b0dc100edb16]: IDLE {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-lyrics-analyseLyricsToxicity"},"extension":{},"message":"[worker-us-central1-lyrics-analyseLyricsToxicity-d06c6683-6cd1-4724-b9c2-b0dc100edb16]: IDLE"}} -[debug] [2025-09-08T13:11:33.893Z] [worker-pool] submitRequest(triggerId=us-central1-lyrics-analyseLyricsToxicity) {"metadata":{"emulator":{"name":"functions"},"message":"[worker-pool] submitRequest(triggerId=us-central1-lyrics-analyseLyricsToxicity)"}} -[info] i functions: Beginning execution of "us-central1-lyrics-analyseLyricsToxicity" {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-lyrics-analyseLyricsToxicity"},"extension":{},"message":"Beginning execution of \"us-central1-lyrics-analyseLyricsToxicity\""}} -[debug] [2025-09-08T13:11:33.893Z] [worker-us-central1-lyrics-analyseLyricsToxicity-d06c6683-6cd1-4724-b9c2-b0dc100edb16]: BUSY {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-lyrics-analyseLyricsToxicity"},"extension":{},"message":"[worker-us-central1-lyrics-analyseLyricsToxicity-d06c6683-6cd1-4724-b9c2-b0dc100edb16]: BUSY"}} -[info] > {"verifications":{"app":"MISSING","auth":"VALID"},"logging.googleapis.com/labels":{"firebase-log-type":"callable-request-verification"},"severity":"DEBUG","message":"Callable request verification passed"} {"user":{"verifications":{"app":"MISSING","auth":"VALID"},"logging.googleapis.com/labels":{"firebase-log-type":"callable-request-verification"},"severity":"DEBUG","message":"Callable request verification passed"},"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-lyrics-analyseLyricsToxicity"},"extension":{},"message":"\u001b[90m> \u001b[39m {\"verifications\":{\"app\":\"MISSING\",\"auth\":\"VALID\"},\"logging.googleapis.com/labels\":{\"firebase-log-type\":\"callable-request-verification\"},\"severity\":\"DEBUG\",\"message\":\"Callable request verification passed\"}"}} -[debug] [2025-09-08T13:11:41.471Z] Finishing up request with event=pause {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-lyrics-analyseLyricsToxicity"},"extension":{},"message":"Finishing up request with event=pause"}} -[info] i functions: Finished "us-central1-lyrics-analyseLyricsToxicity" in 7580.713167ms {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-lyrics-analyseLyricsToxicity"},"extension":{},"message":"Finished \"us-central1-lyrics-analyseLyricsToxicity\" in 7580.713167ms"}} -[debug] [2025-09-08T13:11:41.471Z] [worker-us-central1-lyrics-analyseLyricsToxicity-d06c6683-6cd1-4724-b9c2-b0dc100edb16]: IDLE {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-lyrics-analyseLyricsToxicity"},"extension":{},"message":"[worker-us-central1-lyrics-analyseLyricsToxicity-d06c6683-6cd1-4724-b9c2-b0dc100edb16]: IDLE"}} -[debug] [2025-09-08T13:11:41.471Z] Finishing up request with event=finish {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-lyrics-analyseLyricsToxicity"},"extension":{},"message":"Finishing up request with event=finish"}} -[debug] [2025-09-08T13:11:41.471Z] Finishing up request with event=close {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-lyrics-analyseLyricsToxicity"},"extension":{},"message":"Finishing up request with event=close"}} -[debug] [2025-09-08T13:11:41.471Z] [work-queue] {"queuedWork":[],"queueLength":0,"runningWork":[],"workRunningCount":0} -[debug] [2025-09-08T13:12:46.554Z] [work-queue] {"queuedWork":["/musicland-d33f9/us-central1/lyrics-analyseLyricsToxicity-2025-09-08T13:12:46.554Z"],"queueLength":1,"runningWork":[],"workRunningCount":0} -[debug] [2025-09-08T13:12:46.554Z] [work-queue] {"queuedWork":[],"queueLength":0,"runningWork":["/musicland-d33f9/us-central1/lyrics-analyseLyricsToxicity-2025-09-08T13:12:46.554Z"],"workRunningCount":1} -[debug] [2025-09-08T13:12:46.554Z] Accepted request POST /musicland-d33f9/us-central1/lyrics-analyseLyricsToxicity --> us-central1-lyrics-analyseLyricsToxicity -[debug] [2025-09-08T13:12:46.556Z] [functions] Runtime ready! Sending request! {"metadata":{"emulator":{"name":"functions"},"message":"[functions] Runtime ready! Sending request!"}} -[debug] [2025-09-08T13:12:46.556Z] [functions] Got req.url=/musicland-d33f9/us-central1/lyrics-analyseLyricsToxicity, mapping to path=/ {"metadata":{"emulator":{"name":"functions"},"message":"[functions] Got req.url=/musicland-d33f9/us-central1/lyrics-analyseLyricsToxicity, mapping to path=/"}} -[debug] [2025-09-08T13:12:46.556Z] [worker-pool] submitRequest(triggerId=us-central1-lyrics-analyseLyricsToxicity) {"metadata":{"emulator":{"name":"functions"},"message":"[worker-pool] submitRequest(triggerId=us-central1-lyrics-analyseLyricsToxicity)"}} -[info] i functions: Beginning execution of "us-central1-lyrics-analyseLyricsToxicity" {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-lyrics-analyseLyricsToxicity"},"extension":{},"message":"Beginning execution of \"us-central1-lyrics-analyseLyricsToxicity\""}} -[debug] [2025-09-08T13:12:46.556Z] [worker-us-central1-lyrics-analyseLyricsToxicity-d06c6683-6cd1-4724-b9c2-b0dc100edb16]: BUSY {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-lyrics-analyseLyricsToxicity"},"extension":{},"message":"[worker-us-central1-lyrics-analyseLyricsToxicity-d06c6683-6cd1-4724-b9c2-b0dc100edb16]: BUSY"}} -[info] > {"verifications":{"app":"MISSING","auth":"VALID"},"logging.googleapis.com/labels":{"firebase-log-type":"callable-request-verification"},"severity":"DEBUG","message":"Callable request verification passed"} {"user":{"verifications":{"app":"MISSING","auth":"VALID"},"logging.googleapis.com/labels":{"firebase-log-type":"callable-request-verification"},"severity":"DEBUG","message":"Callable request verification passed"},"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-lyrics-analyseLyricsToxicity"},"extension":{},"message":"\u001b[90m> \u001b[39m {\"verifications\":{\"app\":\"MISSING\",\"auth\":\"VALID\"},\"logging.googleapis.com/labels\":{\"firebase-log-type\":\"callable-request-verification\"},\"severity\":\"DEBUG\",\"message\":\"Callable request verification passed\"}"}} -[debug] [2025-09-08T13:12:55.954Z] Finishing up request with event=pause {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-lyrics-analyseLyricsToxicity"},"extension":{},"message":"Finishing up request with event=pause"}} -[info] i functions: Finished "us-central1-lyrics-analyseLyricsToxicity" in 9398.485958ms {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-lyrics-analyseLyricsToxicity"},"extension":{},"message":"Finished \"us-central1-lyrics-analyseLyricsToxicity\" in 9398.485958ms"}} -[debug] [2025-09-08T13:12:55.956Z] [worker-us-central1-lyrics-analyseLyricsToxicity-d06c6683-6cd1-4724-b9c2-b0dc100edb16]: IDLE {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-lyrics-analyseLyricsToxicity"},"extension":{},"message":"[worker-us-central1-lyrics-analyseLyricsToxicity-d06c6683-6cd1-4724-b9c2-b0dc100edb16]: IDLE"}} -[debug] [2025-09-08T13:12:55.957Z] Finishing up request with event=finish {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-lyrics-analyseLyricsToxicity"},"extension":{},"message":"Finishing up request with event=finish"}} -[debug] [2025-09-08T13:12:55.957Z] Finishing up request with event=close {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-lyrics-analyseLyricsToxicity"},"extension":{},"message":"Finishing up request with event=close"}} -[debug] [2025-09-08T13:12:55.958Z] [work-queue] {"queuedWork":[],"queueLength":0,"runningWork":[],"workRunningCount":0} -[debug] [2025-09-08T13:20:51.552Z] [work-queue] {"queuedWork":["/musicland-d33f9/us-central1/music-generateMusic-2025-09-08T13:20:51.552Z"],"queueLength":1,"runningWork":[],"workRunningCount":0} -[debug] [2025-09-08T13:20:51.552Z] [work-queue] {"queuedWork":[],"queueLength":0,"runningWork":["/musicland-d33f9/us-central1/music-generateMusic-2025-09-08T13:20:51.552Z"],"workRunningCount":1} -[debug] [2025-09-08T13:20:51.552Z] Accepted request POST /musicland-d33f9/us-central1/music-generateMusic --> us-central1-music-generateMusic -[debug] [2025-09-08T13:20:51.556Z] [functions] Runtime ready! Sending request! {"metadata":{"emulator":{"name":"functions"},"message":"[functions] Runtime ready! Sending request!"}} -[debug] [2025-09-08T13:20:51.556Z] [functions] Got req.url=/musicland-d33f9/us-central1/music-generateMusic, mapping to path=/ {"metadata":{"emulator":{"name":"functions"},"message":"[functions] Got req.url=/musicland-d33f9/us-central1/music-generateMusic, mapping to path=/"}} -[debug] [2025-09-08T13:20:51.556Z] [worker-pool] submitRequest(triggerId=us-central1-music-generateMusic) {"metadata":{"emulator":{"name":"functions"},"message":"[worker-pool] submitRequest(triggerId=us-central1-music-generateMusic)"}} -[info] i functions: Beginning execution of "us-central1-music-generateMusic" {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"Beginning execution of \"us-central1-music-generateMusic\""}} -[debug] [2025-09-08T13:20:51.556Z] [worker-us-central1-music-generateMusic-cbb6ce5c-b043-4553-ac98-63150057ee92]: BUSY {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"[worker-us-central1-music-generateMusic-cbb6ce5c-b043-4553-ac98-63150057ee92]: BUSY"}} -[info] > {"verifications":{"app":"MISSING","auth":"VALID"},"logging.googleapis.com/labels":{"firebase-log-type":"callable-request-verification"},"severity":"DEBUG","message":"Callable request verification passed"} {"user":{"verifications":{"app":"MISSING","auth":"VALID"},"logging.googleapis.com/labels":{"firebase-log-type":"callable-request-verification"},"severity":"DEBUG","message":"Callable request verification passed"},"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m {\"verifications\":{\"app\":\"MISSING\",\"auth\":\"VALID\"},\"logging.googleapis.com/labels\":{\"firebase-log-type\":\"callable-request-verification\"},\"severity\":\"DEBUG\",\"message\":\"Callable request verification passed\"}"}} -[info] > PAYLOAD { {"user":"PAYLOAD {","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m PAYLOAD {"}} -[info] > customMode: true, {"user":" customMode: true,","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m customMode: true,"}} -[info] > instrumental: false, {"user":" instrumental: false,","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m instrumental: false,"}} -[info] > model: 'V4_5', {"user":" model: 'V4_5',","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m model: 'V4_5',"}} -[info] > prompt: '[couplet]\n' + {"user":" prompt: '[couplet]\\n' +","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m prompt: '[couplet]\\n' +"}} -[info] > 'Viens ce soir dans ma demeure\n' + {"user":" 'Viens ce soir dans ma demeure\\n' +","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m 'Viens ce soir dans ma demeure\\n' +"}} -[info] > 'Tu auras toute ma chaleur\n' + {"user":" 'Tu auras toute ma chaleur\\n' +","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m 'Tu auras toute ma chaleur\\n' +"}} -[info] > 'Viens ce soir dans ma cabane\n' + {"user":" 'Viens ce soir dans ma cabane\\n' +","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m 'Viens ce soir dans ma cabane\\n' +"}} -[info] > "Tu n'connaîtras pas la panne\n" + {"user":" \"Tu n'connaîtras pas la panne\\n\" +","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m \"Tu n'connaîtras pas la panne\\n\" +"}} -[info] > 'Viens ce soir dans ma bicoque\n' + {"user":" 'Viens ce soir dans ma bicoque\\n' +","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m 'Viens ce soir dans ma bicoque\\n' +"}} -[info] > 'Toi la poule et moi le coq\n' + {"user":" 'Toi la poule et moi le coq\\n' +","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m 'Toi la poule et moi le coq\\n' +"}} -[info] > 'Viens ce soir dans ma villa\n' + {"user":" 'Viens ce soir dans ma villa\\n' +","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m 'Viens ce soir dans ma villa\\n' +"}} -[info] > 'Tu verras tu reviendras\n' + {"user":" 'Tu verras tu reviendras\\n' +","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m 'Tu verras tu reviendras\\n' +"}} -[info] > '\n' + {"user":" '\\n' +","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m '\\n' +"}} -[info] > '[refrain]\n' + {"user":" '[refrain]\\n' +","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m '[refrain]\\n' +"}} -[info] > 'Tu veux mon zizi?\n' + {"user":" 'Tu veux mon zizi?\\n' +","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m 'Tu veux mon zizi?\\n' +"}} -[info] > '(Oui, oui, oui, oui)\n' + {"user":" '(Oui, oui, oui, oui)\\n' +","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m '(Oui, oui, oui, oui)\\n' +"}} -[info] > "J'vais te le donner oui, oui, oui, oui\n" + {"user":" \"J'vais te le donner oui, oui, oui, oui\\n\" +","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m \"J'vais te le donner oui, oui, oui, oui\\n\" +"}} -[info] > '\n' + {"user":" '\\n' +","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m '\\n' +"}} -[info] > '[couplet]\n' + {"user":" '[couplet]\\n' +","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m '[couplet]\\n' +"}} -[info] > 'Viens ce soir dans ma demeure\n' + {"user":" 'Viens ce soir dans ma demeure\\n' +","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m 'Viens ce soir dans ma demeure\\n' +"}} -[info] > 'Tu auras toute ma chaleur\n' + {"user":" 'Tu auras toute ma chaleur\\n' +","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m 'Tu auras toute ma chaleur\\n' +"}} -[info] > 'Viens ce soir dans ma cabane\n' + {"user":" 'Viens ce soir dans ma cabane\\n' +","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m 'Viens ce soir dans ma cabane\\n' +"}} -[info] > "Tu n'connaîtras pas la panne\n" + {"user":" \"Tu n'connaîtras pas la panne\\n\" +","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m \"Tu n'connaîtras pas la panne\\n\" +"}} -[info] > 'Viens ce soir dans ma bicoque\n' + {"user":" 'Viens ce soir dans ma bicoque\\n' +","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m 'Viens ce soir dans ma bicoque\\n' +"}} -[info] > 'Toi la poule et moi le coq\n' + {"user":" 'Toi la poule et moi le coq\\n' +","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m 'Toi la poule et moi le coq\\n' +"}} -[info] > 'Viens ce soir dans ma villa\n' + {"user":" 'Viens ce soir dans ma villa\\n' +","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m 'Viens ce soir dans ma villa\\n' +"}} -[info] > 'Tu verras tu reviendras\n' + {"user":" 'Tu verras tu reviendras\\n' +","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m 'Tu verras tu reviendras\\n' +"}} -[info] > '\n' + {"user":" '\\n' +","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m '\\n' +"}} -[info] > '[refrain]\n' + {"user":" '[refrain]\\n' +","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m '[refrain]\\n' +"}} -[info] > 'Tu veux mon zizi?\n' + {"user":" 'Tu veux mon zizi?\\n' +","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m 'Tu veux mon zizi?\\n' +"}} -[info] > '(Oui, oui, oui, oui)\n' + {"user":" '(Oui, oui, oui, oui)\\n' +","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m '(Oui, oui, oui, oui)\\n' +"}} -[info] > "J'vais te le donner oui, oui, oui, oui", {"user":" \"J'vais te le donner oui, oui, oui, oui\",","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m \"J'vais te le donner oui, oui, oui, oui\","}} -[info] > title: 'Tu veux mon zizi?', {"user":" title: 'Tu veux mon zizi?',","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m title: 'Tu veux mon zizi?',"}} -[info] > style: 'Genres: Rock, Rock progressif ; Tempo: Rapide ; Instruments: Synthétiseur, Guitare acoustique, Guitare électrique ; Vocal: Female lead vocal ; Vocal (user): Une voix féminine interpretra ta chanson. ; Mélange subtil de chuchotements et d’harmoniques. ; Mix: propre, punchy, large stéréo, radio-ready. Titre: Tu veux mon zizi?\n' + {"user":" style: 'Genres: Rock, Rock progressif ; Tempo: Rapide ; Instruments: Synthétiseur, Guitare acoustique, Guitare électrique ; Vocal: Female lead vocal ; Vocal (user): Une voix féminine interpretra ta chanson. ; Mélange subtil de chuchotements et d’harmoniques. ; Mix: propre, punchy, large stéréo, radio-ready. Titre: Tu veux mon zizi?\\n' +","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m style: 'Genres: Rock, Rock progressif ; Tempo: Rapide ; Instruments: Synthétiseur, Guitare acoustique, Guitare électrique ; Vocal: Female lead vocal ; Vocal (user): Une voix féminine interpretra ta chanson. ; Mélange subtil de chuchotements et d’harmoniques. ; Mix: propre, punchy, large stéréo, radio-ready. Titre: Tu veux mon zizi?\\n' +"}} -[info] > '\n' + {"user":" '\\n' +","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m '\\n' +"}} -[info] > 'Style: Genres: Rock, Rock progressif Rythme énergique et dynamique Instruments principaux: Synthétiseur, Guitare acoustique, Guitare électrique Vocal direction: Female lead vocal User vocal request: Une voix féminine interpretra ta chanson. ; Mélange subtil de chuchotement', {"user":" 'Style: Genres: Rock, Rock progressif Rythme énergique et dynamique Instruments principaux: Synthétiseur, Guitare acoustique, Guitare électrique Vocal direction: Female lead vocal User vocal request: Une voix féminine interpretra ta chanson. ; Mélange subtil de chuchotement',","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m 'Style: Genres: Rock, Rock progressif Rythme énergique et dynamique Instruments principaux: Synthétiseur, Guitare acoustique, Guitare électrique Vocal direction: Female lead vocal User vocal request: Une voix féminine interpretra ta chanson. ; Mélange subtil de chuchotement',"}} -[info] > callBackUrl: 'https://us-central1-musicland-d33f9.cloudfunctions.net/music-sunoCallback', {"user":" callBackUrl: 'https://us-central1-musicland-d33f9.cloudfunctions.net/music-sunoCallback',","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m callBackUrl: 'https://us-central1-musicland-d33f9.cloudfunctions.net/music-sunoCallback',"}} -[info] > vocalGender: 'f' {"user":" vocalGender: 'f'","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m vocalGender: 'f'"}} -[info] > } {"user":"}","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m }"}} -[debug] [2025-09-08T13:20:52.413Z] Finishing up request with event=pause {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"Finishing up request with event=pause"}} -[info] i functions: Finished "us-central1-music-generateMusic" in 856.882458ms {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"Finished \"us-central1-music-generateMusic\" in 856.882458ms"}} -[debug] [2025-09-08T13:20:52.414Z] [worker-us-central1-music-generateMusic-cbb6ce5c-b043-4553-ac98-63150057ee92]: IDLE {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"[worker-us-central1-music-generateMusic-cbb6ce5c-b043-4553-ac98-63150057ee92]: IDLE"}} -[debug] [2025-09-08T13:20:52.414Z] Finishing up request with event=finish {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"Finishing up request with event=finish"}} -[debug] [2025-09-08T13:20:52.414Z] Finishing up request with event=close {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"Finishing up request with event=close"}} -[debug] [2025-09-08T13:20:52.414Z] [work-queue] {"queuedWork":[],"queueLength":0,"runningWork":[],"workRunningCount":0} -[debug] [2025-09-08T13:26:46.623Z] [work-queue] {"queuedWork":["/musicland-d33f9/us-central1/music-generateMusic-2025-09-08T13:26:46.623Z"],"queueLength":1,"runningWork":[],"workRunningCount":0} -[debug] [2025-09-08T13:26:46.623Z] [work-queue] {"queuedWork":[],"queueLength":0,"runningWork":["/musicland-d33f9/us-central1/music-generateMusic-2025-09-08T13:26:46.623Z"],"workRunningCount":1} -[debug] [2025-09-08T13:26:46.623Z] Accepted request POST /musicland-d33f9/us-central1/music-generateMusic --> us-central1-music-generateMusic -[debug] [2025-09-08T13:26:46.626Z] [functions] Runtime ready! Sending request! {"metadata":{"emulator":{"name":"functions"},"message":"[functions] Runtime ready! Sending request!"}} -[debug] [2025-09-08T13:26:46.626Z] [functions] Got req.url=/musicland-d33f9/us-central1/music-generateMusic, mapping to path=/ {"metadata":{"emulator":{"name":"functions"},"message":"[functions] Got req.url=/musicland-d33f9/us-central1/music-generateMusic, mapping to path=/"}} -[debug] [2025-09-08T13:26:46.626Z] [worker-pool] submitRequest(triggerId=us-central1-music-generateMusic) {"metadata":{"emulator":{"name":"functions"},"message":"[worker-pool] submitRequest(triggerId=us-central1-music-generateMusic)"}} -[info] i functions: Beginning execution of "us-central1-music-generateMusic" {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"Beginning execution of \"us-central1-music-generateMusic\""}} -[debug] [2025-09-08T13:26:46.626Z] [worker-us-central1-music-generateMusic-cbb6ce5c-b043-4553-ac98-63150057ee92]: BUSY {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"[worker-us-central1-music-generateMusic-cbb6ce5c-b043-4553-ac98-63150057ee92]: BUSY"}} -[info] > {"verifications":{"app":"MISSING","auth":"VALID"},"logging.googleapis.com/labels":{"firebase-log-type":"callable-request-verification"},"severity":"DEBUG","message":"Callable request verification passed"} {"user":{"verifications":{"app":"MISSING","auth":"VALID"},"logging.googleapis.com/labels":{"firebase-log-type":"callable-request-verification"},"severity":"DEBUG","message":"Callable request verification passed"},"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m {\"verifications\":{\"app\":\"MISSING\",\"auth\":\"VALID\"},\"logging.googleapis.com/labels\":{\"firebase-log-type\":\"callable-request-verification\"},\"severity\":\"DEBUG\",\"message\":\"Callable request verification passed\"}"}} -[info] > PAYLOAD { {"user":"PAYLOAD {","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m PAYLOAD {"}} -[info] > customMode: true, {"user":" customMode: true,","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m customMode: true,"}} -[info] > instrumental: false, {"user":" instrumental: false,","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m instrumental: false,"}} -[info] > model: 'V4_5', {"user":" model: 'V4_5',","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m model: 'V4_5',"}} -[info] > prompt: '[couplet]\n' + {"user":" prompt: '[couplet]\\n' +","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m prompt: '[couplet]\\n' +"}} -[info] > 'Viens ce soir dans ma demeure\n' + {"user":" 'Viens ce soir dans ma demeure\\n' +","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m 'Viens ce soir dans ma demeure\\n' +"}} -[info] > 'Tu auras toute ma chaleur\n' + {"user":" 'Tu auras toute ma chaleur\\n' +","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m 'Tu auras toute ma chaleur\\n' +"}} -[info] > 'Viens ce soir dans ma cabane\n' + {"user":" 'Viens ce soir dans ma cabane\\n' +","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m 'Viens ce soir dans ma cabane\\n' +"}} -[info] > "Tu n'connaîtras pas la panne\n" + {"user":" \"Tu n'connaîtras pas la panne\\n\" +","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m \"Tu n'connaîtras pas la panne\\n\" +"}} -[info] > 'Viens ce soir dans ma bicoque\n' + {"user":" 'Viens ce soir dans ma bicoque\\n' +","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m 'Viens ce soir dans ma bicoque\\n' +"}} -[info] > 'Toi la poule et moi le coq\n' + {"user":" 'Toi la poule et moi le coq\\n' +","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m 'Toi la poule et moi le coq\\n' +"}} -[info] > 'Viens ce soir dans ma villa\n' + {"user":" 'Viens ce soir dans ma villa\\n' +","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m 'Viens ce soir dans ma villa\\n' +"}} -[info] > 'Tu verras tu reviendras\n' + {"user":" 'Tu verras tu reviendras\\n' +","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m 'Tu verras tu reviendras\\n' +"}} -[info] > '\n' + {"user":" '\\n' +","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m '\\n' +"}} -[info] > '[refrain]\n' + {"user":" '[refrain]\\n' +","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m '[refrain]\\n' +"}} -[info] > 'Tu veux mon zizi?\n' + {"user":" 'Tu veux mon zizi?\\n' +","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m 'Tu veux mon zizi?\\n' +"}} -[info] > '(Oui, oui, oui, oui)\n' + {"user":" '(Oui, oui, oui, oui)\\n' +","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m '(Oui, oui, oui, oui)\\n' +"}} -[info] > "J'vais te le donner oui, oui, oui, oui\n" + {"user":" \"J'vais te le donner oui, oui, oui, oui\\n\" +","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m \"J'vais te le donner oui, oui, oui, oui\\n\" +"}} -[info] > '\n' + {"user":" '\\n' +","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m '\\n' +"}} -[info] > '[couplet]\n' + {"user":" '[couplet]\\n' +","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m '[couplet]\\n' +"}} -[info] > 'Viens ce soir dans ma demeure\n' + {"user":" 'Viens ce soir dans ma demeure\\n' +","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m 'Viens ce soir dans ma demeure\\n' +"}} -[info] > 'Tu auras toute ma chaleur\n' + {"user":" 'Tu auras toute ma chaleur\\n' +","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m 'Tu auras toute ma chaleur\\n' +"}} -[info] > 'Viens ce soir dans ma cabane\n' + {"user":" 'Viens ce soir dans ma cabane\\n' +","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m 'Viens ce soir dans ma cabane\\n' +"}} -[info] > "Tu n'connaîtras pas la panne\n" + {"user":" \"Tu n'connaîtras pas la panne\\n\" +","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m \"Tu n'connaîtras pas la panne\\n\" +"}} -[info] > 'Viens ce soir dans ma bicoque\n' + {"user":" 'Viens ce soir dans ma bicoque\\n' +","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m 'Viens ce soir dans ma bicoque\\n' +"}} -[info] > 'Toi la poule et moi le coq\n' + {"user":" 'Toi la poule et moi le coq\\n' +","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m 'Toi la poule et moi le coq\\n' +"}} -[info] > 'Viens ce soir dans ma villa\n' + {"user":" 'Viens ce soir dans ma villa\\n' +","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m 'Viens ce soir dans ma villa\\n' +"}} -[info] > 'Tu verras tu reviendras\n' + {"user":" 'Tu verras tu reviendras\\n' +","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m 'Tu verras tu reviendras\\n' +"}} -[info] > '\n' + {"user":" '\\n' +","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m '\\n' +"}} -[info] > '[refrain]\n' + {"user":" '[refrain]\\n' +","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m '[refrain]\\n' +"}} -[info] > 'Tu veux mon zizi?\n' + {"user":" 'Tu veux mon zizi?\\n' +","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m 'Tu veux mon zizi?\\n' +"}} -[info] > '(Oui, oui, oui, oui)\n' + {"user":" '(Oui, oui, oui, oui)\\n' +","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m '(Oui, oui, oui, oui)\\n' +"}} -[info] > "J'vais te le donner oui, oui, oui, oui", {"user":" \"J'vais te le donner oui, oui, oui, oui\",","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m \"J'vais te le donner oui, oui, oui, oui\","}} -[info] > title: 'Tu veux mon zizi?', {"user":" title: 'Tu veux mon zizi?',","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m title: 'Tu veux mon zizi?',"}} -[info] > style: 'Genres: Rock, Rock progressif ; Tempo: Rapide ; Instruments: Synthétiseur, Guitare acoustique, Guitare électrique ; Vocal: Female lead vocal ; Vocal (user): Une voix féminine interpretra ta chanson. ; Mélange subtil de chuchotements et d’harmoniques. ; Mix: propre, punchy, large stéréo, radio-ready. Titre: Tu veux mon zizi?\n' + {"user":" style: 'Genres: Rock, Rock progressif ; Tempo: Rapide ; Instruments: Synthétiseur, Guitare acoustique, Guitare électrique ; Vocal: Female lead vocal ; Vocal (user): Une voix féminine interpretra ta chanson. ; Mélange subtil de chuchotements et d’harmoniques. ; Mix: propre, punchy, large stéréo, radio-ready. Titre: Tu veux mon zizi?\\n' +","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m style: 'Genres: Rock, Rock progressif ; Tempo: Rapide ; Instruments: Synthétiseur, Guitare acoustique, Guitare électrique ; Vocal: Female lead vocal ; Vocal (user): Une voix féminine interpretra ta chanson. ; Mélange subtil de chuchotements et d’harmoniques. ; Mix: propre, punchy, large stéréo, radio-ready. Titre: Tu veux mon zizi?\\n' +"}} -[info] > '\n' + {"user":" '\\n' +","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m '\\n' +"}} -[info] > 'Style: Genres: Rock, Rock progressif Rythme énergique et dynamique Instruments principaux: Synthétiseur, Guitare acoustique, Guitare électrique Vocal direction: Female lead vocal User vocal request: Une voix féminine interpretra ta chanson. ; Mélange subtil de chuchotement', {"user":" 'Style: Genres: Rock, Rock progressif Rythme énergique et dynamique Instruments principaux: Synthétiseur, Guitare acoustique, Guitare électrique Vocal direction: Female lead vocal User vocal request: Une voix féminine interpretra ta chanson. ; Mélange subtil de chuchotement',","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m 'Style: Genres: Rock, Rock progressif Rythme énergique et dynamique Instruments principaux: Synthétiseur, Guitare acoustique, Guitare électrique Vocal direction: Female lead vocal User vocal request: Une voix féminine interpretra ta chanson. ; Mélange subtil de chuchotement',"}} -[info] > callBackUrl: 'https://us-central1-musicland-d33f9.cloudfunctions.net/music-sunoCallback', {"user":" callBackUrl: 'https://us-central1-musicland-d33f9.cloudfunctions.net/music-sunoCallback',","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m callBackUrl: 'https://us-central1-musicland-d33f9.cloudfunctions.net/music-sunoCallback',"}} -[info] > vocalGender: 'f' {"user":" vocalGender: 'f'","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m vocalGender: 'f'"}} -[info] > } {"user":"}","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m }"}} -[debug] [2025-09-08T13:26:47.442Z] Finishing up request with event=pause {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"Finishing up request with event=pause"}} -[info] i functions: Finished "us-central1-music-generateMusic" in 816.262ms {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"Finished \"us-central1-music-generateMusic\" in 816.262ms"}} -[debug] [2025-09-08T13:26:47.443Z] [worker-us-central1-music-generateMusic-cbb6ce5c-b043-4553-ac98-63150057ee92]: IDLE {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"[worker-us-central1-music-generateMusic-cbb6ce5c-b043-4553-ac98-63150057ee92]: IDLE"}} -[debug] [2025-09-08T13:26:47.443Z] Finishing up request with event=finish {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"Finishing up request with event=finish"}} -[debug] [2025-09-08T13:26:47.444Z] Finishing up request with event=close {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"Finishing up request with event=close"}} -[debug] [2025-09-08T13:26:47.444Z] [work-queue] {"queuedWork":[],"queueLength":0,"runningWork":[],"workRunningCount":0} -[debug] [2025-09-08T13:29:44.642Z] [work-queue] {"queuedWork":["/musicland-d33f9/us-central1/music-getSunoTimestamps-2025-09-08T13:29:44.642Z"],"queueLength":1,"runningWork":[],"workRunningCount":0} -[debug] [2025-09-08T13:29:44.642Z] [work-queue] {"queuedWork":[],"queueLength":0,"runningWork":["/musicland-d33f9/us-central1/music-getSunoTimestamps-2025-09-08T13:29:44.642Z"],"workRunningCount":1} -[debug] [2025-09-08T13:29:44.642Z] Accepted request POST /musicland-d33f9/us-central1/music-getSunoTimestamps --> us-central1-music-getSunoTimestamps -[debug] [2025-09-08T13:29:44.644Z] [functions] Runtime ready! Sending request! {"metadata":{"emulator":{"name":"functions"},"message":"[functions] Runtime ready! Sending request!"}} -[debug] [2025-09-08T13:29:44.644Z] [functions] Got req.url=/musicland-d33f9/us-central1/music-getSunoTimestamps, mapping to path=/ {"metadata":{"emulator":{"name":"functions"},"message":"[functions] Got req.url=/musicland-d33f9/us-central1/music-getSunoTimestamps, mapping to path=/"}} -[debug] [2025-09-08T13:29:44.646Z] [worker-pool] addWorker(us-central1-music-getSunoTimestamps) {"metadata":{"emulator":{"name":"functions"},"message":"[worker-pool] addWorker(us-central1-music-getSunoTimestamps)"}} -[debug] [2025-09-08T13:29:44.646Z] [worker-pool] Adding worker with key us-central1-music-getSunoTimestamps, total=1 {"metadata":{"emulator":{"name":"functions"},"message":"[worker-pool] Adding worker with key us-central1-music-getSunoTimestamps, total=1"}} -[debug] [2025-09-08T13:29:45.114Z] [runtime-status] [55599] Resolved module firebase-admin {"declared":true,"installed":true,"version":"12.7.0","resolution":"/Users/thomasdemirdjian/Minuit/musicland/functions/node_modules/firebase-admin/lib/index.js"} {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-getSunoTimestamps"},"extension":{},"message":"[runtime-status] [55599] Resolved module firebase-admin {\"declared\":true,\"installed\":true,\"version\":\"12.7.0\",\"resolution\":\"/Users/thomasdemirdjian/Minuit/musicland/functions/node_modules/firebase-admin/lib/index.js\"}"}} -[debug] [2025-09-08T13:29:45.114Z] [runtime-status] [55599] Resolved module firebase-functions {"declared":true,"installed":true,"version":"6.4.0","resolution":"/Users/thomasdemirdjian/Minuit/musicland/functions/node_modules/firebase-functions/lib/v2/index.js"} {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-getSunoTimestamps"},"extension":{},"message":"[runtime-status] [55599] Resolved module firebase-functions {\"declared\":true,\"installed\":true,\"version\":\"6.4.0\",\"resolution\":\"/Users/thomasdemirdjian/Minuit/musicland/functions/node_modules/firebase-functions/lib/v2/index.js\"}"}} -[debug] [2025-09-08T13:29:45.114Z] [runtime-status] [55599] Outgoing network have been stubbed. [{"name":"http","status":"mocked"},{"name":"http","status":"mocked"},{"name":"https","status":"mocked"},{"name":"https","status":"mocked"},{"name":"net","status":"mocked"}] {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-getSunoTimestamps"},"extension":{},"message":"[runtime-status] [55599] Outgoing network have been stubbed. [{\"name\":\"http\",\"status\":\"mocked\"},{\"name\":\"http\",\"status\":\"mocked\"},{\"name\":\"https\",\"status\":\"mocked\"},{\"name\":\"https\",\"status\":\"mocked\"},{\"name\":\"net\",\"status\":\"mocked\"}]"}} -[debug] [2025-09-08T13:29:45.115Z] [runtime-status] [55599] Resolved module firebase-functions {"declared":true,"installed":true,"version":"6.4.0","resolution":"/Users/thomasdemirdjian/Minuit/musicland/functions/node_modules/firebase-functions/lib/v2/index.js"} {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-getSunoTimestamps"},"extension":{},"message":"[runtime-status] [55599] Resolved module firebase-functions {\"declared\":true,\"installed\":true,\"version\":\"6.4.0\",\"resolution\":\"/Users/thomasdemirdjian/Minuit/musicland/functions/node_modules/firebase-functions/lib/v2/index.js\"}"}} -[debug] [2025-09-08T13:29:45.256Z] [runtime-status] [55599] Checked functions.config() {"config":{}} {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-getSunoTimestamps"},"extension":{},"message":"[runtime-status] [55599] Checked functions.config() {\"config\":{}}"}} -[debug] [2025-09-08T13:29:45.256Z] [runtime-status] [55599] firebase-functions has been stubbed. {"functionsResolution":{"declared":true,"installed":true,"version":"6.4.0","resolution":"/Users/thomasdemirdjian/Minuit/musicland/functions/node_modules/firebase-functions/lib/v2/index.js"}} {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-getSunoTimestamps"},"extension":{},"message":"[runtime-status] [55599] firebase-functions has been stubbed. {\"functionsResolution\":{\"declared\":true,\"installed\":true,\"version\":\"6.4.0\",\"resolution\":\"/Users/thomasdemirdjian/Minuit/musicland/functions/node_modules/firebase-functions/lib/v2/index.js\"}}"}} -[debug] [2025-09-08T13:29:45.256Z] [runtime-status] [55599] Resolved module firebase-functions {"declared":true,"installed":true,"version":"6.4.0","resolution":"/Users/thomasdemirdjian/Minuit/musicland/functions/node_modules/firebase-functions/lib/v2/index.js"} {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-getSunoTimestamps"},"extension":{},"message":"[runtime-status] [55599] Resolved module firebase-functions {\"declared\":true,\"installed\":true,\"version\":\"6.4.0\",\"resolution\":\"/Users/thomasdemirdjian/Minuit/musicland/functions/node_modules/firebase-functions/lib/v2/index.js\"}"}} -[debug] [2025-09-08T13:29:45.257Z] [runtime-status] [55599] Resolved module firebase-admin {"declared":true,"installed":true,"version":"12.7.0","resolution":"/Users/thomasdemirdjian/Minuit/musicland/functions/node_modules/firebase-admin/lib/index.js"} {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-getSunoTimestamps"},"extension":{},"message":"[runtime-status] [55599] Resolved module firebase-admin {\"declared\":true,\"installed\":true,\"version\":\"12.7.0\",\"resolution\":\"/Users/thomasdemirdjian/Minuit/musicland/functions/node_modules/firebase-admin/lib/index.js\"}"}} -[debug] [2025-09-08T13:29:45.258Z] [runtime-status] [55599] Resolved module firebase-functions {"declared":true,"installed":true,"version":"6.4.0","resolution":"/Users/thomasdemirdjian/Minuit/musicland/functions/node_modules/firebase-functions/lib/v2/index.js"} {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-getSunoTimestamps"},"extension":{},"message":"[runtime-status] [55599] Resolved module firebase-functions {\"declared\":true,\"installed\":true,\"version\":\"6.4.0\",\"resolution\":\"/Users/thomasdemirdjian/Minuit/musicland/functions/node_modules/firebase-functions/lib/v2/index.js\"}"}} -[debug] [2025-09-08T13:29:45.258Z] [runtime-status] [55599] firebase-admin has been stubbed. {"adminResolution":{"declared":true,"installed":true,"version":"12.7.0","resolution":"/Users/thomasdemirdjian/Minuit/musicland/functions/node_modules/firebase-admin/lib/index.js"}} {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-getSunoTimestamps"},"extension":{},"message":"[runtime-status] [55599] firebase-admin has been stubbed. {\"adminResolution\":{\"declared\":true,\"installed\":true,\"version\":\"12.7.0\",\"resolution\":\"/Users/thomasdemirdjian/Minuit/musicland/functions/node_modules/firebase-admin/lib/index.js\"}}"}} -[debug] [2025-09-08T13:29:45.259Z] [runtime-status] [55599] initializeApp(DEFAULT) {"storageBucket":"musicland-d33f9.firebasestorage.app","projectId":"musicland-d33f9"} {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-getSunoTimestamps"},"extension":{},"message":"[runtime-status] [55599] initializeApp(DEFAULT) {\"storageBucket\":\"musicland-d33f9.firebasestorage.app\",\"projectId\":\"musicland-d33f9\"}"}} -[debug] [2025-09-08T13:29:45.518Z] [runtime-status] [55599] Functions runtime initialized. {"cwd":"/Users/thomasdemirdjian/Minuit/musicland/functions","node_version":"24.1.0"} {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-getSunoTimestamps"},"extension":{},"message":"[runtime-status] [55599] Functions runtime initialized. {\"cwd\":\"/Users/thomasdemirdjian/Minuit/musicland/functions\",\"node_version\":\"24.1.0\"}"}} -[debug] [2025-09-08T13:29:45.518Z] [runtime-status] [55599] Listening to port: /var/folders/4x/n553v4ds6xq73gwblz9jm7t00000gn/T/fire_emu_450fe7809337b83d.sock {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-getSunoTimestamps"},"extension":{},"message":"[runtime-status] [55599] Listening to port: /var/folders/4x/n553v4ds6xq73gwblz9jm7t00000gn/T/fire_emu_450fe7809337b83d.sock"}} -[debug] [2025-09-08T13:29:45.559Z] [worker-us-central1-music-getSunoTimestamps-ffcfe5f3-2ae1-4cd3-97e2-0ca7637c7abf]: IDLE {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-getSunoTimestamps"},"extension":{},"message":"[worker-us-central1-music-getSunoTimestamps-ffcfe5f3-2ae1-4cd3-97e2-0ca7637c7abf]: IDLE"}} -[debug] [2025-09-08T13:29:45.559Z] [worker-pool] submitRequest(triggerId=us-central1-music-getSunoTimestamps) {"metadata":{"emulator":{"name":"functions"},"message":"[worker-pool] submitRequest(triggerId=us-central1-music-getSunoTimestamps)"}} -[info] i functions: Beginning execution of "us-central1-music-getSunoTimestamps" {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-getSunoTimestamps"},"extension":{},"message":"Beginning execution of \"us-central1-music-getSunoTimestamps\""}} -[debug] [2025-09-08T13:29:45.560Z] [worker-us-central1-music-getSunoTimestamps-ffcfe5f3-2ae1-4cd3-97e2-0ca7637c7abf]: BUSY {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-getSunoTimestamps"},"extension":{},"message":"[worker-us-central1-music-getSunoTimestamps-ffcfe5f3-2ae1-4cd3-97e2-0ca7637c7abf]: BUSY"}} -[info] > {"verifications":{"app":"MISSING","auth":"VALID"},"logging.googleapis.com/labels":{"firebase-log-type":"callable-request-verification"},"severity":"DEBUG","message":"Callable request verification passed"} {"user":{"verifications":{"app":"MISSING","auth":"VALID"},"logging.googleapis.com/labels":{"firebase-log-type":"callable-request-verification"},"severity":"DEBUG","message":"Callable request verification passed"},"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-getSunoTimestamps"},"extension":{},"message":"\u001b[90m> \u001b[39m {\"verifications\":{\"app\":\"MISSING\",\"auth\":\"VALID\"},\"logging.googleapis.com/labels\":{\"firebase-log-type\":\"callable-request-verification\"},\"severity\":\"DEBUG\",\"message\":\"Callable request verification passed\"}"}} -[info] > 🔎 Récupération des timestamps Suno { taskId: '540fd9b09eb417e98178f718c23c8815', musicIndex: 0 } {"user":"🔎 Récupération des timestamps Suno { taskId: '540fd9b09eb417e98178f718c23c8815', musicIndex: 0 }","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-getSunoTimestamps"},"extension":{},"message":"\u001b[90m> \u001b[39m 🔎 Récupération des timestamps Suno { taskId: '540fd9b09eb417e98178f718c23c8815', musicIndex: 0 }"}} -[info] > 📊 Réponse timestamps Suno API: 200 success {"user":"📊 Réponse timestamps Suno API: 200 success","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-getSunoTimestamps"},"extension":{},"message":"\u001b[90m> \u001b[39m 📊 Réponse timestamps Suno API: 200 success"}} -[info] > ❌ Échec sauvegarde timestamps Firestore: Cannot read properties of undefined (reading 'serverTimestamp') {"user":"❌ Échec sauvegarde timestamps Firestore: Cannot read properties of undefined (reading 'serverTimestamp')","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-getSunoTimestamps"},"extension":{},"message":"\u001b[90m> \u001b[39m ❌ Échec sauvegarde timestamps Firestore: Cannot read properties of undefined (reading 'serverTimestamp')"}} -[debug] [2025-09-08T13:29:47.183Z] Finishing up request with event=pause {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-getSunoTimestamps"},"extension":{},"message":"Finishing up request with event=pause"}} -[info] i functions: Finished "us-central1-music-getSunoTimestamps" in 1623.7001249999998ms {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-getSunoTimestamps"},"extension":{},"message":"Finished \"us-central1-music-getSunoTimestamps\" in 1623.7001249999998ms"}} -[debug] [2025-09-08T13:29:47.184Z] [worker-us-central1-music-getSunoTimestamps-ffcfe5f3-2ae1-4cd3-97e2-0ca7637c7abf]: IDLE {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-getSunoTimestamps"},"extension":{},"message":"[worker-us-central1-music-getSunoTimestamps-ffcfe5f3-2ae1-4cd3-97e2-0ca7637c7abf]: IDLE"}} -[debug] [2025-09-08T13:29:47.184Z] Finishing up request with event=finish {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-getSunoTimestamps"},"extension":{},"message":"Finishing up request with event=finish"}} -[debug] [2025-09-08T13:29:47.184Z] Finishing up request with event=close {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-getSunoTimestamps"},"extension":{},"message":"Finishing up request with event=close"}} -[debug] [2025-09-08T13:29:47.184Z] [work-queue] {"queuedWork":[],"queueLength":0,"runningWork":[],"workRunningCount":0} -[debug] [2025-09-08T13:43:44.046Z] [work-queue] {"queuedWork":["/musicland-d33f9/us-central1/lyrics-generateLyrics-2025-09-08T13:43:44.046Z"],"queueLength":1,"runningWork":[],"workRunningCount":0} -[debug] [2025-09-08T13:43:44.046Z] [work-queue] {"queuedWork":[],"queueLength":0,"runningWork":["/musicland-d33f9/us-central1/lyrics-generateLyrics-2025-09-08T13:43:44.046Z"],"workRunningCount":1} -[debug] [2025-09-08T13:43:44.046Z] Accepted request POST /musicland-d33f9/us-central1/lyrics-generateLyrics --> us-central1-lyrics-generateLyrics -[debug] [2025-09-08T13:43:44.049Z] [functions] Runtime ready! Sending request! {"metadata":{"emulator":{"name":"functions"},"message":"[functions] Runtime ready! Sending request!"}} -[debug] [2025-09-08T13:43:44.049Z] [functions] Got req.url=/musicland-d33f9/us-central1/lyrics-generateLyrics, mapping to path=/ {"metadata":{"emulator":{"name":"functions"},"message":"[functions] Got req.url=/musicland-d33f9/us-central1/lyrics-generateLyrics, mapping to path=/"}} -[debug] [2025-09-08T13:43:44.053Z] [worker-pool] addWorker(us-central1-lyrics-generateLyrics) {"metadata":{"emulator":{"name":"functions"},"message":"[worker-pool] addWorker(us-central1-lyrics-generateLyrics)"}} -[debug] [2025-09-08T13:43:44.054Z] [worker-pool] Adding worker with key us-central1-lyrics-generateLyrics, total=1 {"metadata":{"emulator":{"name":"functions"},"message":"[worker-pool] Adding worker with key us-central1-lyrics-generateLyrics, total=1"}} -[debug] [2025-09-08T13:43:44.529Z] [runtime-status] [66591] Resolved module firebase-admin {"declared":true,"installed":true,"version":"12.7.0","resolution":"/Users/thomasdemirdjian/Minuit/musicland/functions/node_modules/firebase-admin/lib/index.js"} {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-lyrics-generateLyrics"},"extension":{},"message":"[runtime-status] [66591] Resolved module firebase-admin {\"declared\":true,\"installed\":true,\"version\":\"12.7.0\",\"resolution\":\"/Users/thomasdemirdjian/Minuit/musicland/functions/node_modules/firebase-admin/lib/index.js\"}"}} -[debug] [2025-09-08T13:43:44.529Z] [runtime-status] [66591] Resolved module firebase-functions {"declared":true,"installed":true,"version":"6.4.0","resolution":"/Users/thomasdemirdjian/Minuit/musicland/functions/node_modules/firebase-functions/lib/v2/index.js"} {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-lyrics-generateLyrics"},"extension":{},"message":"[runtime-status] [66591] Resolved module firebase-functions {\"declared\":true,\"installed\":true,\"version\":\"6.4.0\",\"resolution\":\"/Users/thomasdemirdjian/Minuit/musicland/functions/node_modules/firebase-functions/lib/v2/index.js\"}"}} -[debug] [2025-09-08T13:43:44.529Z] [runtime-status] [66591] Outgoing network have been stubbed. [{"name":"http","status":"mocked"},{"name":"http","status":"mocked"},{"name":"https","status":"mocked"},{"name":"https","status":"mocked"},{"name":"net","status":"mocked"}] {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-lyrics-generateLyrics"},"extension":{},"message":"[runtime-status] [66591] Outgoing network have been stubbed. [{\"name\":\"http\",\"status\":\"mocked\"},{\"name\":\"http\",\"status\":\"mocked\"},{\"name\":\"https\",\"status\":\"mocked\"},{\"name\":\"https\",\"status\":\"mocked\"},{\"name\":\"net\",\"status\":\"mocked\"}]"}} -[debug] [2025-09-08T13:43:44.529Z] [runtime-status] [66591] Resolved module firebase-functions {"declared":true,"installed":true,"version":"6.4.0","resolution":"/Users/thomasdemirdjian/Minuit/musicland/functions/node_modules/firebase-functions/lib/v2/index.js"} {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-lyrics-generateLyrics"},"extension":{},"message":"[runtime-status] [66591] Resolved module firebase-functions {\"declared\":true,\"installed\":true,\"version\":\"6.4.0\",\"resolution\":\"/Users/thomasdemirdjian/Minuit/musicland/functions/node_modules/firebase-functions/lib/v2/index.js\"}"}} -[debug] [2025-09-08T13:43:44.652Z] [runtime-status] [66591] Checked functions.config() {"config":{}} {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-lyrics-generateLyrics"},"extension":{},"message":"[runtime-status] [66591] Checked functions.config() {\"config\":{}}"}} -[debug] [2025-09-08T13:43:44.652Z] [runtime-status] [66591] firebase-functions has been stubbed. {"functionsResolution":{"declared":true,"installed":true,"version":"6.4.0","resolution":"/Users/thomasdemirdjian/Minuit/musicland/functions/node_modules/firebase-functions/lib/v2/index.js"}} {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-lyrics-generateLyrics"},"extension":{},"message":"[runtime-status] [66591] firebase-functions has been stubbed. {\"functionsResolution\":{\"declared\":true,\"installed\":true,\"version\":\"6.4.0\",\"resolution\":\"/Users/thomasdemirdjian/Minuit/musicland/functions/node_modules/firebase-functions/lib/v2/index.js\"}}"}} -[debug] [2025-09-08T13:43:44.653Z] [runtime-status] [66591] Resolved module firebase-functions {"declared":true,"installed":true,"version":"6.4.0","resolution":"/Users/thomasdemirdjian/Minuit/musicland/functions/node_modules/firebase-functions/lib/v2/index.js"} {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-lyrics-generateLyrics"},"extension":{},"message":"[runtime-status] [66591] Resolved module firebase-functions {\"declared\":true,\"installed\":true,\"version\":\"6.4.0\",\"resolution\":\"/Users/thomasdemirdjian/Minuit/musicland/functions/node_modules/firebase-functions/lib/v2/index.js\"}"}} -[debug] [2025-09-08T13:43:44.654Z] [runtime-status] [66591] Resolved module firebase-admin {"declared":true,"installed":true,"version":"12.7.0","resolution":"/Users/thomasdemirdjian/Minuit/musicland/functions/node_modules/firebase-admin/lib/index.js"} {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-lyrics-generateLyrics"},"extension":{},"message":"[runtime-status] [66591] Resolved module firebase-admin {\"declared\":true,\"installed\":true,\"version\":\"12.7.0\",\"resolution\":\"/Users/thomasdemirdjian/Minuit/musicland/functions/node_modules/firebase-admin/lib/index.js\"}"}} -[debug] [2025-09-08T13:43:44.655Z] [runtime-status] [66591] Resolved module firebase-functions {"declared":true,"installed":true,"version":"6.4.0","resolution":"/Users/thomasdemirdjian/Minuit/musicland/functions/node_modules/firebase-functions/lib/v2/index.js"} {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-lyrics-generateLyrics"},"extension":{},"message":"[runtime-status] [66591] Resolved module firebase-functions {\"declared\":true,\"installed\":true,\"version\":\"6.4.0\",\"resolution\":\"/Users/thomasdemirdjian/Minuit/musicland/functions/node_modules/firebase-functions/lib/v2/index.js\"}"}} -[debug] [2025-09-08T13:43:44.655Z] [runtime-status] [66591] firebase-admin has been stubbed. {"adminResolution":{"declared":true,"installed":true,"version":"12.7.0","resolution":"/Users/thomasdemirdjian/Minuit/musicland/functions/node_modules/firebase-admin/lib/index.js"}} {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-lyrics-generateLyrics"},"extension":{},"message":"[runtime-status] [66591] firebase-admin has been stubbed. {\"adminResolution\":{\"declared\":true,\"installed\":true,\"version\":\"12.7.0\",\"resolution\":\"/Users/thomasdemirdjian/Minuit/musicland/functions/node_modules/firebase-admin/lib/index.js\"}}"}} -[debug] [2025-09-08T13:43:44.655Z] [runtime-status] [66591] initializeApp(DEFAULT) {"storageBucket":"musicland-d33f9.firebasestorage.app","projectId":"musicland-d33f9"} {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-lyrics-generateLyrics"},"extension":{},"message":"[runtime-status] [66591] initializeApp(DEFAULT) {\"storageBucket\":\"musicland-d33f9.firebasestorage.app\",\"projectId\":\"musicland-d33f9\"}"}} -[debug] [2025-09-08T13:43:44.899Z] [runtime-status] [66591] Functions runtime initialized. {"cwd":"/Users/thomasdemirdjian/Minuit/musicland/functions","node_version":"24.1.0"} {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-lyrics-generateLyrics"},"extension":{},"message":"[runtime-status] [66591] Functions runtime initialized. {\"cwd\":\"/Users/thomasdemirdjian/Minuit/musicland/functions\",\"node_version\":\"24.1.0\"}"}} -[debug] [2025-09-08T13:43:44.899Z] [runtime-status] [66591] Listening to port: /var/folders/4x/n553v4ds6xq73gwblz9jm7t00000gn/T/fire_emu_b4e84136337bd967.sock {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-lyrics-generateLyrics"},"extension":{},"message":"[runtime-status] [66591] Listening to port: /var/folders/4x/n553v4ds6xq73gwblz9jm7t00000gn/T/fire_emu_b4e84136337bd967.sock"}} -[debug] [2025-09-08T13:43:44.972Z] [worker-us-central1-lyrics-generateLyrics-e2c64583-f8d3-44f3-860f-b229af7c62e3]: IDLE {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-lyrics-generateLyrics"},"extension":{},"message":"[worker-us-central1-lyrics-generateLyrics-e2c64583-f8d3-44f3-860f-b229af7c62e3]: IDLE"}} -[debug] [2025-09-08T13:43:44.972Z] [worker-pool] submitRequest(triggerId=us-central1-lyrics-generateLyrics) {"metadata":{"emulator":{"name":"functions"},"message":"[worker-pool] submitRequest(triggerId=us-central1-lyrics-generateLyrics)"}} -[info] i functions: Beginning execution of "us-central1-lyrics-generateLyrics" {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-lyrics-generateLyrics"},"extension":{},"message":"Beginning execution of \"us-central1-lyrics-generateLyrics\""}} -[debug] [2025-09-08T13:43:44.972Z] [worker-us-central1-lyrics-generateLyrics-e2c64583-f8d3-44f3-860f-b229af7c62e3]: BUSY {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-lyrics-generateLyrics"},"extension":{},"message":"[worker-us-central1-lyrics-generateLyrics-e2c64583-f8d3-44f3-860f-b229af7c62e3]: BUSY"}} -[info] > {"verifications":{"app":"MISSING","auth":"VALID"},"logging.googleapis.com/labels":{"firebase-log-type":"callable-request-verification"},"severity":"DEBUG","message":"Callable request verification passed"} {"user":{"verifications":{"app":"MISSING","auth":"VALID"},"logging.googleapis.com/labels":{"firebase-log-type":"callable-request-verification"},"severity":"DEBUG","message":"Callable request verification passed"},"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-lyrics-generateLyrics"},"extension":{},"message":"\u001b[90m> \u001b[39m {\"verifications\":{\"app\":\"MISSING\",\"auth\":\"VALID\"},\"logging.googleapis.com/labels\":{\"firebase-log-type\":\"callable-request-verification\"},\"severity\":\"DEBUG\",\"message\":\"Callable request verification passed\"}"}} -[info] > Function generate lyrics start with data { {"user":"Function generate lyrics start with data {","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-lyrics-generateLyrics"},"extension":{},"message":"\u001b[90m> \u001b[39m Function generate lyrics start with data {"}} -[info] > objective: 'Pour mon club sportif', {"user":" objective: 'Pour mon club sportif',","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-lyrics-generateLyrics"},"extension":{},"message":"\u001b[90m> \u001b[39m objective: 'Pour mon club sportif',"}} -[info] > context: null, {"user":" context: null,","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-lyrics-generateLyrics"},"extension":{},"message":"\u001b[90m> \u001b[39m context: null,"}} -[info] > emotion: "L’Amour : sous entends un sentiment profond d'attachement et d'attraction vers une personne, désir de bien-être et de proximité. Inconditionnel, compassion, ouverture du coeur.", {"user":" emotion: \"L’Amour : sous entends un sentiment profond d'attachement et d'attraction vers une personne, désir de bien-être et de proximité. Inconditionnel, compassion, ouverture du coeur.\",","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-lyrics-generateLyrics"},"extension":{},"message":"\u001b[90m> \u001b[39m emotion: \"L’Amour : sous entends un sentiment profond d'attachement et d'attraction vers une personne, désir de bien-être et de proximité. Inconditionnel, compassion, ouverture du coeur.\","}} -[info] > style: 'Epic', {"user":" style: 'Epic',","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-lyrics-generateLyrics"},"extension":{},"message":"\u001b[90m> \u001b[39m style: 'Epic',"}} -[info] > audience: null, {"user":" audience: null,","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-lyrics-generateLyrics"},"extension":{},"message":"\u001b[90m> \u001b[39m audience: null,"}} -[info] > structure: [ 'couplet', 'refrain', 'couplet', 'refrain', 'refrain' ], {"user":" structure: [ 'couplet', 'refrain', 'couplet', 'refrain', 'refrain' ],","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-lyrics-generateLyrics"},"extension":{},"message":"\u001b[90m> \u001b[39m structure: [ 'couplet', 'refrain', 'couplet', 'refrain', 'refrain' ],"}} -[info] > rhymes: 'Avec rimes' {"user":" rhymes: 'Avec rimes'","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-lyrics-generateLyrics"},"extension":{},"message":"\u001b[90m> \u001b[39m rhymes: 'Avec rimes'"}} -[info] > } {"user":"}","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-lyrics-generateLyrics"},"extension":{},"message":"\u001b[90m> \u001b[39m }"}} -[debug] [2025-09-08T13:43:55.318Z] Finishing up request with event=pause {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-lyrics-generateLyrics"},"extension":{},"message":"Finishing up request with event=pause"}} -[info] i functions: Finished "us-central1-lyrics-generateLyrics" in 10342.935166ms {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-lyrics-generateLyrics"},"extension":{},"message":"Finished \"us-central1-lyrics-generateLyrics\" in 10342.935166ms"}} -[debug] [2025-09-08T13:43:55.318Z] [worker-us-central1-lyrics-generateLyrics-e2c64583-f8d3-44f3-860f-b229af7c62e3]: IDLE {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-lyrics-generateLyrics"},"extension":{},"message":"[worker-us-central1-lyrics-generateLyrics-e2c64583-f8d3-44f3-860f-b229af7c62e3]: IDLE"}} -[debug] [2025-09-08T13:43:55.318Z] Finishing up request with event=finish {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-lyrics-generateLyrics"},"extension":{},"message":"Finishing up request with event=finish"}} -[debug] [2025-09-08T13:43:55.318Z] Finishing up request with event=close {"metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-lyrics-generateLyrics"},"extension":{},"message":"Finishing up request with event=close"}} -[debug] [2025-09-08T13:43:55.318Z] [work-queue] {"queuedWork":[],"queueLength":0,"runningWork":[],"workRunningCount":0} diff --git a/package.json b/package.json index e0726f1..e53a947 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "name": "minuit.starter", + "name": "MusicLand", "version": "1.0.0", "scripts": { "start": "expo start --dev-client", @@ -33,7 +33,6 @@ "@react-navigation/stack": "~6.0.11", "@stripe/react-stripe-js": "~2.5.0", "@stripe/stripe-js": "~3.0.0", - "add": "~2.0.6", "deprecated-react-native-prop-types": "~3.0.1", "expo": "~52.0.47", "expo-audio": "~0.3.5", diff --git a/src/components/ListSelection/ListSelection.js b/src/components/ListSelection/ListSelection.js new file mode 100644 index 0000000..c296728 --- /dev/null +++ b/src/components/ListSelection/ListSelection.js @@ -0,0 +1,262 @@ +import React, { useMemo, useState } from "react"; +import { FlatList, SectionList, Text, View, Platform } from "react-native"; +import { BlurView } from "expo-blur"; +import CreateLyricsHeader from "../../screens/Writing/components/CreateLyricsHeader"; +import { Palette } from "../../styles"; +import { FONT_FAMILY } from "../../styles/Fonts"; + +// Reusable selection list supporting single, multiple and sectioned data. +// Variants supported: +// - "simple": options are strings +// - "titleDescription": options are { title, description } +// - "emotion": options are { title, description, color } (uses gradient colors) +// - "sectioned": options are sections [{ title, data: [] }] (single per section) +const ListSelection = ({ + options = [], + variant = "simple", + selected: selectedProp, + setSelected: setSelectedProp, + multiple = false, + maxSelection, + getItemValue, + selectedValueExtractor, + formatSelectedValue, + // styles + contentContainerStyle, + itemContainerStyle, + itemOuterStyle, + itemTextStyle, + highlightColor = "#F94697", +}) => { + // Internal fallback state when not provided by parent + const [internalSelected, setInternalSelected] = useState( + variant === "sectioned" ? {} : multiple ? [] : null, + ); + const selected = selectedProp !== undefined ? selectedProp : internalSelected; + const setSelected = + setSelectedProp !== undefined ? setSelectedProp : setInternalSelected; + + const valueOf = useMemo(() => { + if (typeof getItemValue === "function") return getItemValue; + if (variant === "simple") return (item) => item; + return (item) => item?.title ?? item; // default to title when present + }, [getItemValue, variant]); + + const formatValue = (item) => + typeof formatSelectedValue === "function" + ? formatSelectedValue(item) + : valueOf(item); + + const extractSelectedComparable = (s) => { + if (typeof selectedValueExtractor === "function") + return selectedValueExtractor(s); + if (s && typeof s === "object" && "title" in s) return s.title; + return s; + }; + + const isSelected = (val, category) => { + if (variant === "sectioned") { + return selected?.[category] === val; + } + if (multiple) { + const list = Array.isArray(selected) ? selected : []; + return list.some((v) => v === val); + } + return extractSelectedComparable(selected) === val; + }; + + const toggleSelect = (item, category) => { + const val = valueOf(item); + if (variant === "sectioned") { + const current = selected && typeof selected === "object" ? selected : {}; + const next = { ...current }; + if (current?.[category] === val) next[category] = null; + else next[category] = formatValue(item); + setSelected(next); + return; + } + + if (multiple) { + const list = Array.isArray(selected) ? selected : []; + const exists = list.some((v) => v === val); + if (exists) { + setSelected(list.filter((v) => v !== val)); + } else { + if (!maxSelection || list.length < maxSelection) { + setSelected([...list, formatValue(item)]); + } + } + } else { + if (selected === val) setSelected(null); + else setSelected(formatValue(item)); + } + }; + + const renderSimpleContent = (label) => ( + + + {label} + + + ); + + const renderTitleDescriptionContent = (item) => ( + + + {item?.title}{" "} + : {item?.description} + + + ); + + if (variant === "sectioned") { + // Sectioned list: options as [{ title, data: [] }] + return ( + { + const cat = section?.title; + const val = valueOf(item); + const sel = isSelected(val, cat); + return ( + + toggleSelect(item, cat)} + tint={sel ? "default" : "dark"} + colors={[Palette.tran, Palette.tran]} + containerStyle={{ + borderWidth: 0, + borderColor: "transparent", + borderRadius: 14, + ...itemContainerStyle, + }} + > + {renderSimpleContent(item)} + + {sel && ( + + )} + + ); + }} + renderSectionHeader={({ section: { title } }) => ( + + + + {title} + + + + )} + /> + ); + } + + return ( + { + const val = valueOf(item); + const sel = isSelected(val); + const useEmotionColors = variant === "emotion"; + // For emotion variant, hide the left color when selected + const borderColors = useEmotionColors + ? sel + ? [Palette.tran, Palette.tran] + : item?.color + : [Palette.tran, Palette.tran]; + const tint = useEmotionColors ? "dark" : sel ? "default" : "dark"; + + return ( + + toggleSelect(item)} + gradientProps={ + useEmotionColors && !sel ? { locations: [0.24, 1] } : undefined + } + containerStyle={{ + borderWidth: 0, + borderColor: "transparent", + borderRadius: 14, + ...itemContainerStyle, + }} + > + {variant === "simple" + ? renderSimpleContent(item) + : renderTitleDescriptionContent(item)} + + {sel && ( + + )} + + ); + }} + keyExtractor={(item, idx) => `${valueOf(item)}-${idx}`} + /> + ); +}; + +export default ListSelection; diff --git a/src/components/bottomsheets/CommentsBottomSheet.js b/src/components/bottomsheets/CommentsBottomSheet.js index 382c38f..1e9d3e7 100644 --- a/src/components/bottomsheets/CommentsBottomSheet.js +++ b/src/components/bottomsheets/CommentsBottomSheet.js @@ -31,9 +31,13 @@ import { FONT_FAMILY } from "../../styles/Fonts"; import { size } from "../../styles/Style"; let externalOpen; +let externalClose; export const openComments = (projectId) => { if (typeof externalOpen === "function") externalOpen(projectId); }; +export const closeComments = () => { + if (typeof externalClose === "function") externalClose(); +}; const formatRelativeTime = (date) => { try { @@ -67,8 +71,14 @@ const CommentsBottomSheet = () => { setProjectId(pid || null); requestAnimationFrame(() => modalRef.current?.present()); }; + externalClose = () => { + try { + modalRef.current?.dismiss?.(); + } catch {} + }; return () => { externalOpen = undefined; + externalClose = undefined; }; }, []); @@ -141,10 +151,10 @@ const CommentsBottomSheet = () => { {...props} appearsOnIndex={0} disappearsOnIndex={-1} - pressBehavior={typing ? "none" : "close"} + pressBehavior="close" /> ), - [typing] + [] ); const handleScroll = useCallback( @@ -170,14 +180,19 @@ const CommentsBottomSheet = () => { snapPoints={snapPoints} keyboardBehavior="interactive" // l’input est dans le contenu → mode interactif OK keyboardBlurBehavior="restore" - enablePanDownToClose={!typing} // évite un dismiss pendant la frappe - enableContentPanningGesture={!typing} + enablePanDownToClose + enableContentPanningGesture stackBehavior="push" topInset={insets.top} bottomInset={insets.bottom} backdropComponent={renderBackdrop} handleIndicatorStyle={{ backgroundColor: Palette.white }} backgroundStyle={{ backgroundColor: "transparent" }} + onDismiss={() => { + setProjectId(null); + setTyping(false); + setText(""); + }} > { } > + modalRef.current?.dismiss?.()} + style={{ position: "absolute", right: 10, top: 8, padding: 6 }} + hitSlop={8} + > + + { { clearInterval(checkSongEndRef.current); checkSongEndRef.current = null; } + // Inform the user when using a simulator where recording isn't supported + const msg = String(e?.message || e || ""); + if (/not supported on the simulator/i.test(msg)) { + Alert.alert( + "Indisponible sur simulateur", + "L’enregistrement vidéo n’est pas disponible sur le simulateur. Merci d’utiliser un appareil réel.", + [ + { + text: "OK", + onPress: () => { + try { + goBack(); + } catch (_) {} + }, + }, + ], + { cancelable: false } + ); + } } }; diff --git a/src/screens/Profile/Profile.js b/src/screens/Profile/Profile.js index e7b7155..d8b9e99 100644 --- a/src/screens/Profile/Profile.js +++ b/src/screens/Profile/Profile.js @@ -65,7 +65,7 @@ const Profile = () => { setFollowers( Array.isArray(currentUserData?.followedBy) ? currentUserData.followedBy.length - : 0 + : 0, ); return; } @@ -230,7 +230,7 @@ const Profile = () => { { const [containerLayout, setContainerLayout] = useState(null); - const onPressSelect = (item) => { - if (!setSelected) return; - const value = item?.title; - const list = _.isArray(selected) ? selected : []; - const exists = _.includes(list, value); - if (exists) { - setSelected(_.filter(list, (v) => !_.isEqual(v, value))); - } else if (_.size(list) < 2) { - setSelected([...list, value]); - } - }; + // Selection handled by ListSelection return ( @@ -33,45 +21,21 @@ const ChooseGenre = ({ selected = [], setSelected }) => { onLayout={(event) => setContainerLayout(event.nativeEvent.layout)} > - item?.title} contentContainerStyle={{ gap: 16, flexGrow: 1, zIndex: 2, paddingTop: 5, }} - renderItem={({ item, index }) => { - const list = Array.isArray(selected) ? selected : []; - const selectedItem = _.includes(list, item.title); - - return ( - - onPressSelect(item)} - containerStyle={{ - borderWidth: selectedItem ? 2 : 0, - borderColor: selectedItem ? "#F94697" : "transparent", - }} - > - - - {item.title} - {" "} - : {item.description} - - - - ); - }} + itemOuterStyle={{ paddingHorizontal: 5 }} /> diff --git a/src/screens/Studio/ChooseInstruments.js b/src/screens/Studio/ChooseInstruments.js index dc58675..463744d 100644 --- a/src/screens/Studio/ChooseInstruments.js +++ b/src/screens/Studio/ChooseInstruments.js @@ -1,25 +1,16 @@ -import { View, Text, FlatList, StyleSheet } from "react-native"; +import { View, StyleSheet } from "react-native"; import React, { useState } from "react"; import CreateLyricsHeader from "../Writing/components/CreateLyricsHeader"; import ItemContainer from "../../components/ItemContainer/ItemContainer"; import { Palette } from "../../styles"; import { FONT_FAMILY } from "../../styles/Fonts"; -import { BlurView } from "expo-blur"; import { INSTRUMENTS } from "../../data/data"; +import ListSelection from "../../components/ListSelection/ListSelection"; const ChooseInstruments = ({ selected = [], setSelected }) => { const [containerLayout, setContainerLayout] = useState(null); - const onPressSelect = (item) => { - if (!setSelected) return; - const list = Array.isArray(selected) ? selected : []; - const exists = list.includes(item); - if (exists) { - setSelected(list.filter((v) => v !== item)); - } else if (list.length < 5) { - setSelected([...list, item]); - } - }; + // Selection handled by ListSelection return ( @@ -32,36 +23,16 @@ const ChooseInstruments = ({ selected = [], setSelected }) => { onLayout={(event) => setContainerLayout(event.nativeEvent.layout)} > - { - const list = Array.isArray(selected) ? selected : []; - const selectedItem = list.includes(item); - - return ( - onPressSelect(item)} - tint={selectedItem ? "default" : "dark"} - colors={[Palette.tran, Palette.tran]} - containerStyle={{ - ...styles.itemContainer, - borderWidth: selectedItem ? 2 : 0, - borderColor: selectedItem ? "#F94697" : "transparent", - }} - > - - {item} - - - ); - }} + itemContainerStyle={styles.itemContainer} + itemTextStyle={styles.itemText} /> diff --git a/src/screens/Studio/ChooseRhythm.js b/src/screens/Studio/ChooseRhythm.js index df959e8..835ad1b 100644 --- a/src/screens/Studio/ChooseRhythm.js +++ b/src/screens/Studio/ChooseRhythm.js @@ -1,55 +1,27 @@ -import { View, Text, FlatList, StyleSheet } from "react-native"; -import React, { useState } from "react"; +import { View, StyleSheet } from "react-native"; +import React from "react"; import CreateLyricsHeader from "../Writing/components/CreateLyricsHeader"; import ItemContainer from "../../components/ItemContainer/ItemContainer"; -import { BlurView } from "expo-blur"; import { Palette } from "../../styles"; import { FONT_FAMILY } from "../../styles/Fonts"; import { RHYTHM } from "../../data/data"; +import ListSelection from "../../components/ListSelection/ListSelection"; const ChooseRhythm = ({ selected, setSelected }) => { - const onPressSelect = (item) => { - if (!setSelected) return; - if (selected === item) setSelected(null); - else setSelected(item); - }; - return ( - { - const selectedItem = selected === item; - - return ( - onPressSelect(item)} - tint={selectedItem ? "default" : "dark"} - // Keep transparent colors; highlight selection with border only - colors={[Palette.tran, Palette.tran]} - containerStyle={{ - ...styles.itemContainer, - borderWidth: selectedItem ? 2 : 0, - borderColor: selectedItem ? "#F94697" : "transparent", - }} - > - - {item} - - - ); - }} + itemContainerStyle={styles.itemContainer} + itemTextStyle={styles.itemText} /> diff --git a/src/screens/Studio/CustomizeVoice.js b/src/screens/Studio/CustomizeVoice.js index 1dc6804..ecc9e4d 100644 --- a/src/screens/Studio/CustomizeVoice.js +++ b/src/screens/Studio/CustomizeVoice.js @@ -1,11 +1,10 @@ -import { View, Text, FlatList, StyleSheet, SectionList } from "react-native"; +import { View, StyleSheet } from "react-native"; import React, { useState } from "react"; import CreateLyricsHeader from "../Writing/components/CreateLyricsHeader"; import ItemContainer from "../../components/ItemContainer/ItemContainer"; -import { Palette, Style } from "../../styles"; -import { FONT_FAMILY } from "../../styles/Fonts"; -import { BlurView } from "expo-blur"; +import { Palette } from "../../styles"; import { VOICE } from "../../data/data"; +import ListSelection from "../../components/ListSelection/ListSelection"; const CustomizeVoice = ({ selected = {}, setSelected }) => { const [containerLayout, setContainerLayout] = useState(null); @@ -33,49 +32,13 @@ const CustomizeVoice = ({ selected = {}, setSelected }) => { > - { - const cat = section?.title; - const selectedItem = selected?.[cat] === item; - - return ( - onPressSelect(cat, item)} - tint={selectedItem ? "default" : "dark"} - // Ne pas changer le blur; garder fond transparent comme ChooseInstruments - colors={[Palette.tran, Palette.tran]} - containerStyle={{ - ...styles.itemContainer, - borderWidth: selectedItem ? 2 : 0, - borderColor: selectedItem ? "#F94697" : "transparent", - }} - > - - {item} - - - ); - }} - renderSectionHeader={({ section: { title } }) => ( - - {title} - - )} + itemContainerStyle={styles.itemContainer} /> @@ -109,9 +72,5 @@ const styles = StyleSheet.create({ elevation: 5, }, - itemText: { - fontSize: 16, - color: Palette.white, - fontFamily: FONT_FAMILY.InterRegular, - }, + // itemText was used in legacy implementation; kept here for consistency if needed later }); diff --git a/src/screens/Writing/CreateLyricsWithAi.js b/src/screens/Writing/CreateLyricsWithAi.js index 22a572c..4c0c374 100644 --- a/src/screens/Writing/CreateLyricsWithAi.js +++ b/src/screens/Writing/CreateLyricsWithAi.js @@ -159,6 +159,45 @@ const CreateLyricsWithAi = () => { customStructure, ]); + const isNextDisabled = React.useMemo(() => { + switch (selectedIndex) { + case 0: { + const hasObjective = typeof objective === "string" && objective.length > 0; + const hasOther = typeof otherObjective === "string" && otherObjective.trim().length > 0; + return !(hasObjective || hasOther); + } + case 1: { + const hasContext = typeof context === "string" && context.trim().length > 0; + return !hasContext; + } + case 2: { + const hasEmotion = + (emotion && typeof emotion === "object" && !!emotion.title) || + (typeof emotion === "string" && emotion.trim().length > 0); + return !hasEmotion; + } + case 3: { + const hasStyle = typeof style === "string" && style.length > 0; + const hasOther = typeof otherStyle === "string" && otherStyle.trim().length > 0; + return !(hasStyle || hasOther); + } + case 4: { + const hasAudience = typeof audience === "string" && audience.trim().length > 0; + return !hasAudience; + } + case 5: { + const hasStructure = typeof structure === "string" && structure.length > 0; + return !hasStructure; + } + case 7: { + const hasRhymes = typeof rhymes === "string" && rhymes.length > 0; + return !hasRhymes; + } + default: + return false; + } + }, [selectedIndex, objective, otherObjective, context, emotion, style, otherStyle, audience, structure, rhymes]); + const onPressNext = async () => { // Si l'utilisateur a déjà des paroles et vient de finir CustomizeSongStructure (index 6), // sauter Rhymes et CreatingLyrics et aller directement sur Lyrics @@ -362,6 +401,7 @@ const CreateLyricsWithAi = () => { {selectedIndex !== 8 && ( )} diff --git a/src/screens/Writing/CustomizeSongStructure.js b/src/screens/Writing/CustomizeSongStructure.js index 1709bd5..60cf2e2 100644 --- a/src/screens/Writing/CustomizeSongStructure.js +++ b/src/screens/Writing/CustomizeSongStructure.js @@ -1,5 +1,6 @@ import { View, StyleSheet, Image, Platform, Text } from "react-native"; import React, { useMemo, useState, useCallback, useEffect } from "react"; +import Animated, { useAnimatedRef } from "react-native-reanimated"; import { BlurView } from "expo-blur"; import CreateLyricsHeader from "./components/CreateLyricsHeader"; import { Palette, Style } from "../../styles"; @@ -11,6 +12,7 @@ import { icons } from "../../assets"; // onChange: callback that receives array like ['couplet','refrain',...] const CustomizeSongStructure = ({ baseStructure = [], onChange }) => { const [containerLayout, setContainerLayout] = useState(null); + const scrollRef = useAnimatedRef(); // Build stable keyed data like { 'couplet-1': { label, value }, ... } const data = useMemo(() => { @@ -78,17 +80,25 @@ const CustomizeSongStructure = ({ baseStructure = [], onChange }) => { subTitle="Réorganise par glisser-déposer" /> setContainerLayout(e.nativeEvent.layout)}> - } - customHandle - onDragEnd={({ data: newData }) => { - const values = (newData || []).map((it) => it?.value).filter(Boolean); - onChange?.(values); - }} - /> + + } + customHandle + // Enable auto-scroll when dragging near edges + scrollableRef={scrollRef} + onDragEnd={({ data: newData }) => { + const values = (newData || []).map((it) => it?.value).filter(Boolean); + onChange?.(values); + }} + /> + ); diff --git a/src/screens/Writing/EmotionConvey.js b/src/screens/Writing/EmotionConvey.js index 3350ae5..d57bf40 100644 --- a/src/screens/Writing/EmotionConvey.js +++ b/src/screens/Writing/EmotionConvey.js @@ -1,10 +1,9 @@ -import { View, Text, FlatList } from "react-native"; +import { View } from "react-native"; import React, { useState } from "react"; import CreateLyricsHeader from "./components/CreateLyricsHeader"; -import { Palette } from "../../styles"; -import { FONT_FAMILY } from "../../styles/Fonts"; import { EMOTION_CONVEY } from "../../data/data"; import ItemContainer from "../../components/ItemContainer/ItemContainer"; +import ListSelection from "../../components/ListSelection/ListSelection"; const EmotionConvey = ({ selected: selectedProp, @@ -15,14 +14,7 @@ const EmotionConvey = ({ const selected = selectedProp ?? internalSelected; const setSelected = setSelectedProp ?? setInternalSelected; - const onPressSelect = (item) => { - // item is full object { title, description, color } - if (selected?.title === item.title) { - setSelected(null); - } else { - setSelected({ title: item.title, description: item.description }); - } - }; + // Selection handled by ListSelection return ( @@ -36,45 +28,25 @@ const EmotionConvey = ({ onLayout={(event) => setContainerLayout(event.nativeEvent.layout)} > - ({ + title: item.title, + description: item.description, + })} + // selected is object; compare via selected.title + selectedValueExtractor={(s) => (s && s.title) || s} contentContainerStyle={{ gap: 16, flexGrow: 1, zIndex: 2, paddingTop: 5, }} - renderItem={({ item, index }) => { - const selectedItem = selected?.title === item.title; - - return ( - - onPressSelect(item)} - containerStyle={{ - borderWidth: selectedItem ? 2 : 0, - borderColor: selectedItem ? "#F94697" : "transparent", - borderRadius: 14, - }} - > - - - {item.title} - {" "} - : {item.description} - - - - ); - }} + itemOuterStyle={{ paddingHorizontal: 5 }} /> diff --git a/src/screens/Writing/Goals.js b/src/screens/Writing/Goals.js index 9935f4d..82a739a 100644 --- a/src/screens/Writing/Goals.js +++ b/src/screens/Writing/Goals.js @@ -1,21 +1,12 @@ -import { - View, - Text, - FlatList, - StyleSheet, - Pressable, - KeyboardAvoidingView, - Platform, -} from "react-native"; +import { View, StyleSheet } from "react-native"; import React, { useState } from "react"; import CreateLyricsHeader from "./components/CreateLyricsHeader"; -import { Palette, Style } from "../../styles"; +import { Palette } from "../../styles"; import { GOALS } from "../../data/data"; import { FONT_FAMILY } from "../../styles/Fonts"; import CustomInput from "./components/CustomInput"; import ItemContainer from "../../components/ItemContainer/ItemContainer"; -import { useKeyboard } from "@react-native-community/hooks"; -import { responsiveHeight } from "react-native-responsive-dimensions"; +import ListSelection from "../../components/ListSelection/ListSelection"; const Goals = ({ selected: selectedProp, @@ -28,48 +19,21 @@ const Goals = ({ const selected = selectedProp ?? internalSelected; const setSelected = setSelectedProp ?? setInternalSelected; - const onPressSelect = (item) => { - if (selected === item) { - setSelected(null); - } else { - setSelected(item); - } - }; + // Selection handled by ListSelection return ( - + - { - const selectedItem = selected === item; - - return ( - onPressSelect(item)} - tint={selectedItem ? "default" : "dark"} - colors={[Palette.tran, Palette.tran]} - containerStyle={{ - ...styles.itemContainer, - borderWidth: selectedItem ? 2 : 0, - borderColor: selectedItem ? "#F94697" : "transparent", - }} - > - - {item} - - - ); - }} + itemContainerStyle={styles.itemContainer} + itemTextStyle={styles.itemText} /> diff --git a/src/screens/Writing/Rhymes.js b/src/screens/Writing/Rhymes.js index e1f2287..8243b9c 100644 --- a/src/screens/Writing/Rhymes.js +++ b/src/screens/Writing/Rhymes.js @@ -1,59 +1,31 @@ -import { View, Text, StyleSheet } from "react-native"; +import { View, StyleSheet } from "react-native"; import React, { useState } from "react"; import CreateLyricsHeader from "./components/CreateLyricsHeader"; -import { BlurView } from "expo-blur"; -import { Palette, Style } from "../../styles"; +import { Palette } from "../../styles"; import { FONT_FAMILY } from "../../styles/Fonts"; import ItemContainer from "../../components/ItemContainer/ItemContainer"; +import ListSelection from "../../components/ListSelection/ListSelection"; const Rhymes = ({ selected: selectedProp, setSelected: setSelectedProp }) => { const [internalSelected, setInternalSelected] = useState(null); const selected = selectedProp ?? internalSelected; const setSelected = setSelectedProp ?? setInternalSelected; - const onPressSelect = (item) => { - if (selected === item) { - setSelected(null); - } else { - setSelected(item); - } - }; + // Selection handled by ListSelection return ( - - {["Avec rimes", "Sans rimes", "Mélange des deux"].map( - (item, index) => { - const selectedItem = selected === item; - - return ( - onPressSelect(item)} - tint={selectedItem ? "default" : "dark"} - colors={[Palette.tran, Palette.tran]} - containerStyle={{ - ...styles.itemContainer, - borderWidth: selectedItem ? 2 : 0, - borderColor: selectedItem ? "#F94697" : "transparent", - }} - > - - {item} - - - ); - } - )} - + ); diff --git a/src/screens/Writing/SongStructure.js b/src/screens/Writing/SongStructure.js index ccbc127..59b9b3a 100644 --- a/src/screens/Writing/SongStructure.js +++ b/src/screens/Writing/SongStructure.js @@ -1,10 +1,11 @@ -import { View, Text, StyleSheet, FlatList } from "react-native"; +import { View, StyleSheet } from "react-native"; import React, { useState } from "react"; import CreateLyricsHeader from "./components/CreateLyricsHeader"; import { SONG_STRUCTURE } from "../../data/data"; import { Palette } from "../../styles"; import { FONT_FAMILY } from "../../styles/Fonts"; import ItemContainer from "../../components/ItemContainer/ItemContainer"; +import ListSelection from "../../components/ListSelection/ListSelection"; const SongStructure = ({ selected: selectedProp, @@ -14,13 +15,7 @@ const SongStructure = ({ const selected = selectedProp ?? internalSelected; const setSelected = setSelectedProp ?? setInternalSelected; - const onPressSelect = (item) => { - if (selected === item) { - setSelected(null); - } else { - setSelected(item); - } - }; + // Selection handled by ListSelection return ( @@ -29,36 +24,14 @@ const SongStructure = ({ subTitle="Sélectionne une structure." /> - { - const selectedItem = selected === item; - - return ( - onPressSelect(item)} - tint={selectedItem ? "default" : "dark"} - colors={[Palette.tran, Palette.tran]} - containerStyle={{ - ...styles.itemContainer, - borderWidth: selectedItem ? 2 : 0, - borderColor: selectedItem ? "#F94697" : "transparent", - }} - > - - {item} - - - ); - }} + itemContainerStyle={styles.itemContainer} + itemTextStyle={styles.itemText} /> diff --git a/src/screens/Writing/SongStyle.js b/src/screens/Writing/SongStyle.js index c331418..8ea4bc2 100644 --- a/src/screens/Writing/SongStyle.js +++ b/src/screens/Writing/SongStyle.js @@ -1,12 +1,12 @@ -import { View, Text, FlatList, Pressable, StyleSheet } from "react-native"; +import { View, StyleSheet } from "react-native"; import React, { useState } from "react"; import CreateLyricsHeader from "./components/CreateLyricsHeader"; -import { BlurView } from "expo-blur"; -import { GOALS, SONG_STYLE } from "../../data/data"; -import { Palette, Style } from "../../styles"; +import { SONG_STYLE } from "../../data/data"; +import { Palette } from "../../styles"; import CustomInput from "./components/CustomInput"; import { FONT_FAMILY } from "../../styles/Fonts"; import ItemContainer from "../../components/ItemContainer/ItemContainer"; +import ListSelection from "../../components/ListSelection/ListSelection"; const SongStyle = ({ selected: selectedProp, @@ -18,13 +18,7 @@ const SongStyle = ({ const selected = selectedProp ?? internalSelected; const setSelected = setSelectedProp ?? setInternalSelected; - const onPressSelect = (item) => { - if (selected === item) { - setSelected(null); - } else { - setSelected(item); - } - }; + // Selection handled by ListSelection return ( @@ -34,41 +28,13 @@ const SongStyle = ({ subTitle="Choisis l'ambiance émotions que tu veux faire passer." /> - { - const selectedItem = selected === item.title; - - return ( - onPressSelect(item.title)} - containerStyle={{ - ...styles.itemContainer, - borderWidth: selectedItem ? 2 : 0, - borderColor: selectedItem ? "#F94697" : "transparent", - }} - > - - - - {item.title} - {" "} - : {item.description} - - - - ); - }} + itemContainerStyle={styles.itemContainer} /> diff --git a/web/.well-known/apple-app-site-association b/web/.well-known/apple-app-site-association deleted file mode 100644 index 01d3197..0000000 --- a/web/.well-known/apple-app-site-association +++ /dev/null @@ -1,18 +0,0 @@ -{ - "applinks": { - "apps": [], - "details": [ - { - "appID": "MW8MX2T3ZL.com.minuit.starter", - "paths": [ - "/tasks/*" - ] - } - ] - }, - "webcredentials": { - "apps": [ - "MW8MX2T3ZL.com.minuit.starter" - ] - } -} diff --git a/web/index.html b/web/index.html deleted file mode 100644 index 80540e2..0000000 --- a/web/index.html +++ /dev/null @@ -1,130 +0,0 @@ - - - - - - - - - - - - - - - - minuit.starter - Suivi de projet - - - - - - -
- - diff --git a/web/minuit.dmg b/web/minuit.dmg deleted file mode 100644 index bcdb660..0000000 Binary files a/web/minuit.dmg and /dev/null differ diff --git a/web/minuitdev.dmg b/web/minuitdev.dmg deleted file mode 100644 index e6ea11f..0000000 Binary files a/web/minuitdev.dmg and /dev/null differ diff --git a/yarn.lock b/yarn.lock index 4d0a1d3..b9abeec 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2896,11 +2896,6 @@ acorn@^8.15.0, acorn@^8.9.0: resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.15.0.tgz#a360898bc415edaac46c8241f6383975b930b816" integrity sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg== -add@~2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/add/-/add-2.0.6.tgz#248f0a9f6e5a528ef2295dbeec30532130ae2235" - integrity sha512-j5QzrmsokwWWp6kUcJQySpbG+xfOBqqKnup3OIk1pz+kB/80SLorZ9V8zHFLO92Lcd+hbvq8bT+zOGoPkmBV0Q== - aggregate-error@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a"