fix list selection and other tickets

This commit is contained in:
Thomas Demirdjian
2025-09-09 11:57:21 +02:00
parent 69977aba2b
commit 11f65023b7
23 changed files with 483 additions and 1397 deletions
-831
View File
@@ -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: 'Im In It', {"user":" title: 'Im In It',","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m title: 'Im 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: Im 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: Im 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: Im 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 dharmoniques. ; 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 dharmoniques. ; 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 dharmoniques. ; 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 dharmoniques. ; 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 dharmoniques. ; 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 dharmoniques. ; 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: "LAmour : 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: \"LAmour : 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: \"LAmour : 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}
+1 -2
View File
@@ -1,5 +1,5 @@
{ {
"name": "minuit.starter", "name": "MusicLand",
"version": "1.0.0", "version": "1.0.0",
"scripts": { "scripts": {
"start": "expo start --dev-client", "start": "expo start --dev-client",
@@ -33,7 +33,6 @@
"@react-navigation/stack": "~6.0.11", "@react-navigation/stack": "~6.0.11",
"@stripe/react-stripe-js": "~2.5.0", "@stripe/react-stripe-js": "~2.5.0",
"@stripe/stripe-js": "~3.0.0", "@stripe/stripe-js": "~3.0.0",
"add": "~2.0.6",
"deprecated-react-native-prop-types": "~3.0.1", "deprecated-react-native-prop-types": "~3.0.1",
"expo": "~52.0.47", "expo": "~52.0.47",
"expo-audio": "~0.3.5", "expo-audio": "~0.3.5",
@@ -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) => (
<View style={{ minHeight: 40, justifyContent: "center" }}>
<Text
style={{
fontSize: 16,
color: Palette.white,
fontFamily: FONT_FAMILY.InterRegular,
textAlign: "left",
...itemTextStyle,
}}
>
{label}
</Text>
</View>
);
const renderTitleDescriptionContent = (item) => (
<View style={{ paddingVertical: 6 }}>
<Text
style={{
fontSize: 16,
color: Palette.white,
fontFamily: FONT_FAMILY.InterRegular,
...itemTextStyle,
}}
>
<Text style={{ fontFamily: FONT_FAMILY.InterBold }}>{item?.title}</Text>{" "}
: {item?.description}
</Text>
</View>
);
if (variant === "sectioned") {
// Sectioned list: options as [{ title, data: [] }]
return (
<SectionList
sections={options}
showsVerticalScrollIndicator={false}
contentContainerStyle={contentContainerStyle}
renderItem={({ item, section }) => {
const cat = section?.title;
const val = valueOf(item);
const sel = isSelected(val, cat);
return (
<View style={[{ position: "relative" }, itemOuterStyle]}>
<CreateLyricsHeader
onPress={() => toggleSelect(item, cat)}
tint={sel ? "default" : "dark"}
colors={[Palette.tran, Palette.tran]}
containerStyle={{
borderWidth: 0,
borderColor: "transparent",
borderRadius: 14,
...itemContainerStyle,
}}
>
{renderSimpleContent(item)}
</CreateLyricsHeader>
{sel && (
<View
pointerEvents="none"
style={{
position: "absolute",
top: 0,
left: 0,
right: 0,
bottom: 0,
borderWidth: 2,
borderRadius: 14,
borderColor: highlightColor,
zIndex: 2,
}}
/>
)}
</View>
);
}}
renderSectionHeader={({ section: { title } }) => (
<View style={{ alignSelf: "flex-start", marginLeft: 10, marginBottom: 6 }}>
<BlurView
intensity={40}
tint="dark"
experimentalBlurMethod={Platform.OS !== "ios" ? "dimezisBlurView" : "none"}
style={{
borderRadius: 18,
overflow: "hidden",
paddingHorizontal: 8,
paddingVertical: 4,
}}
>
<Text
style={{
fontSize: 16,
color: Palette.white,
fontFamily: FONT_FAMILY.InterBold,
}}
>
{title}
</Text>
</BlurView>
</View>
)}
/>
);
}
return (
<FlatList
data={options}
showsVerticalScrollIndicator={false}
contentContainerStyle={contentContainerStyle}
renderItem={({ item }) => {
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 (
<View style={[{ position: "relative" }, itemOuterStyle]}>
<CreateLyricsHeader
colors={borderColors}
tint={tint}
onPress={() => toggleSelect(item)}
gradientProps={
useEmotionColors && !sel ? { locations: [0.24, 1] } : undefined
}
containerStyle={{
borderWidth: 0,
borderColor: "transparent",
borderRadius: 14,
...itemContainerStyle,
}}
>
{variant === "simple"
? renderSimpleContent(item)
: renderTitleDescriptionContent(item)}
</CreateLyricsHeader>
{sel && (
<View
pointerEvents="none"
style={{
position: "absolute",
top: 0,
left: 0,
right: 0,
bottom: 0,
borderWidth: 2,
borderRadius: 14,
borderColor: highlightColor,
zIndex: 2,
}}
/>
)}
</View>
);
}}
keyExtractor={(item, idx) => `${valueOf(item)}-${idx}`}
/>
);
};
export default ListSelection;
@@ -31,9 +31,13 @@ import { FONT_FAMILY } from "../../styles/Fonts";
import { size } from "../../styles/Style"; import { size } from "../../styles/Style";
let externalOpen; let externalOpen;
let externalClose;
export const openComments = (projectId) => { export const openComments = (projectId) => {
if (typeof externalOpen === "function") externalOpen(projectId); if (typeof externalOpen === "function") externalOpen(projectId);
}; };
export const closeComments = () => {
if (typeof externalClose === "function") externalClose();
};
const formatRelativeTime = (date) => { const formatRelativeTime = (date) => {
try { try {
@@ -67,8 +71,14 @@ const CommentsBottomSheet = () => {
setProjectId(pid || null); setProjectId(pid || null);
requestAnimationFrame(() => modalRef.current?.present()); requestAnimationFrame(() => modalRef.current?.present());
}; };
externalClose = () => {
try {
modalRef.current?.dismiss?.();
} catch {}
};
return () => { return () => {
externalOpen = undefined; externalOpen = undefined;
externalClose = undefined;
}; };
}, []); }, []);
@@ -141,10 +151,10 @@ const CommentsBottomSheet = () => {
{...props} {...props}
appearsOnIndex={0} appearsOnIndex={0}
disappearsOnIndex={-1} disappearsOnIndex={-1}
pressBehavior={typing ? "none" : "close"} pressBehavior="close"
/> />
), ),
[typing] []
); );
const handleScroll = useCallback( const handleScroll = useCallback(
@@ -170,14 +180,19 @@ const CommentsBottomSheet = () => {
snapPoints={snapPoints} snapPoints={snapPoints}
keyboardBehavior="interactive" // linput est dans le contenu → mode interactif OK keyboardBehavior="interactive" // linput est dans le contenu → mode interactif OK
keyboardBlurBehavior="restore" keyboardBlurBehavior="restore"
enablePanDownToClose={!typing} // évite un dismiss pendant la frappe enablePanDownToClose
enableContentPanningGesture={!typing} enableContentPanningGesture
stackBehavior="push" stackBehavior="push"
topInset={insets.top} topInset={insets.top}
bottomInset={insets.bottom} bottomInset={insets.bottom}
backdropComponent={renderBackdrop} backdropComponent={renderBackdrop}
handleIndicatorStyle={{ backgroundColor: Palette.white }} handleIndicatorStyle={{ backgroundColor: Palette.white }}
backgroundStyle={{ backgroundColor: "transparent" }} backgroundStyle={{ backgroundColor: "transparent" }}
onDismiss={() => {
setProjectId(null);
setTyping(false);
setText("");
}}
> >
<BlurView <BlurView
intensity={20} intensity={20}
@@ -192,6 +207,17 @@ const CommentsBottomSheet = () => {
} }
> >
<View style={{ paddingTop: 10, paddingBottom: 8 }}> <View style={{ paddingTop: 10, paddingBottom: 8 }}>
<Pressable
onPress={() => modalRef.current?.dismiss?.()}
style={{ position: "absolute", right: 10, top: 8, padding: 6 }}
hitSlop={8}
>
<Image
source={icons.close}
style={{ width: 22, height: 22, tintColor: Palette.white }}
resizeMode="contain"
/>
</Pressable>
<Text <Text
style={{ style={{
fontSize: 22, fontSize: 22,
+1
View File
@@ -95,6 +95,7 @@ export const BottomTabScreen = () => {
<BottomTab.Screen <BottomTab.Screen
name={Routes.Profile} name={Routes.Profile}
component={Profile} component={Profile}
initialParams={{ noBack: true }}
options={{ options={{
tabBarLabel: "Profil", tabBarLabel: "Profil",
headerShown: false, headerShown: false,
+20 -1
View File
@@ -8,7 +8,7 @@ import React, {
useRef, useRef,
useState, useState,
} from "react"; } from "react";
import { Text, View } from "react-native"; import { Alert, Text, View } from "react-native";
import { useSafeAreaInsets } from "react-native-safe-area-context"; import { useSafeAreaInsets } from "react-native-safe-area-context";
import Svg, { Circle } from "react-native-svg"; import Svg, { Circle } from "react-native-svg";
import GradientButton from "../../components/GradientButton"; import GradientButton from "../../components/GradientButton";
@@ -355,6 +355,25 @@ const RecordPlayback = ({ route }) => {
clearInterval(checkSongEndRef.current); clearInterval(checkSongEndRef.current);
checkSongEndRef.current = null; 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",
"Lenregistrement vidéo nest pas disponible sur le simulateur. Merci dutiliser un appareil réel.",
[
{
text: "OK",
onPress: () => {
try {
goBack();
} catch (_) {}
},
},
],
{ cancelable: false }
);
}
} }
}; };
+2 -2
View File
@@ -65,7 +65,7 @@ const Profile = () => {
setFollowers( setFollowers(
Array.isArray(currentUserData?.followedBy) Array.isArray(currentUserData?.followedBy)
? currentUserData.followedBy.length ? currentUserData.followedBy.length
: 0 : 0,
); );
return; return;
} }
@@ -230,7 +230,7 @@ const Profile = () => {
<Page <Page
backgroundImg={background.profileBG} backgroundImg={background.profileBG}
headerType="NAVIGATE" headerType="NAVIGATE"
hideBackButton={isSelf} hideBackButton={params?.noBack}
contentContainerStyle={{ contentContainerStyle={{
paddingBottom: gutters * 2, paddingBottom: gutters * 2,
}} }}
+12 -48
View File
@@ -1,26 +1,14 @@
import { View, Text, FlatList } from "react-native"; import { View } from "react-native";
import React, { useState } from "react"; import React, { useState } from "react";
import CreateLyricsHeader from "../Writing/components/CreateLyricsHeader"; import CreateLyricsHeader from "../Writing/components/CreateLyricsHeader";
import { FONT_FAMILY } from "../../styles/Fonts";
import { Palette } from "../../styles";
import { CHOOSE_GENRE } from "../../data/data"; import { CHOOSE_GENRE } from "../../data/data";
import ItemContainer from "../../components/ItemContainer/ItemContainer"; import ItemContainer from "../../components/ItemContainer/ItemContainer";
import _ from "lodash"; import ListSelection from "../../components/ListSelection/ListSelection";
const ChooseGenre = ({ selected = [], setSelected }) => { const ChooseGenre = ({ selected = [], setSelected }) => {
const [containerLayout, setContainerLayout] = useState(null); const [containerLayout, setContainerLayout] = useState(null);
const onPressSelect = (item) => { // Selection handled by ListSelection
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]);
}
};
return ( return (
<View style={{ flex: 1, gap: 10, paddingTop: 16 }}> <View style={{ flex: 1, gap: 10, paddingTop: 16 }}>
@@ -33,45 +21,21 @@ const ChooseGenre = ({ selected = [], setSelected }) => {
onLayout={(event) => setContainerLayout(event.nativeEvent.layout)} onLayout={(event) => setContainerLayout(event.nativeEvent.layout)}
> >
<ItemContainer height={containerLayout?.height}> <ItemContainer height={containerLayout?.height}>
<FlatList <ListSelection
data={CHOOSE_GENRE} options={CHOOSE_GENRE}
variant="titleDescription"
selected={selected}
setSelected={setSelected}
multiple
maxSelection={2}
getItemValue={(item) => item?.title}
contentContainerStyle={{ contentContainerStyle={{
gap: 16, gap: 16,
flexGrow: 1, flexGrow: 1,
zIndex: 2, zIndex: 2,
paddingTop: 5, paddingTop: 5,
}} }}
renderItem={({ item, index }) => { itemOuterStyle={{ paddingHorizontal: 5 }}
const list = Array.isArray(selected) ? selected : [];
const selectedItem = _.includes(list, item.title);
return (
<View style={{ paddingHorizontal: 5 }}>
<CreateLyricsHeader
colors={[Palette.tran, Palette.tran]}
tint={selectedItem ? "default" : "dark"}
onPress={() => onPressSelect(item)}
containerStyle={{
borderWidth: selectedItem ? 2 : 0,
borderColor: selectedItem ? "#F94697" : "transparent",
}}
>
<Text
style={{
fontSize: 16,
color: Palette.white,
fontFamily: FONT_FAMILY.InterRegular,
}}
>
<Text style={{ fontFamily: FONT_FAMILY.InterBold }}>
{item.title}
</Text>{" "}
: {item.description}
</Text>
</CreateLyricsHeader>
</View>
);
}}
/> />
</ItemContainer> </ItemContainer>
</View> </View>
+12 -41
View File
@@ -1,25 +1,16 @@
import { View, Text, FlatList, StyleSheet } from "react-native"; import { View, StyleSheet } from "react-native";
import React, { useState } from "react"; import React, { useState } from "react";
import CreateLyricsHeader from "../Writing/components/CreateLyricsHeader"; import CreateLyricsHeader from "../Writing/components/CreateLyricsHeader";
import ItemContainer from "../../components/ItemContainer/ItemContainer"; import ItemContainer from "../../components/ItemContainer/ItemContainer";
import { Palette } from "../../styles"; import { Palette } from "../../styles";
import { FONT_FAMILY } from "../../styles/Fonts"; import { FONT_FAMILY } from "../../styles/Fonts";
import { BlurView } from "expo-blur";
import { INSTRUMENTS } from "../../data/data"; import { INSTRUMENTS } from "../../data/data";
import ListSelection from "../../components/ListSelection/ListSelection";
const ChooseInstruments = ({ selected = [], setSelected }) => { const ChooseInstruments = ({ selected = [], setSelected }) => {
const [containerLayout, setContainerLayout] = useState(null); const [containerLayout, setContainerLayout] = useState(null);
const onPressSelect = (item) => { // Selection handled by ListSelection
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]);
}
};
return ( return (
<View style={{ flex: 1, gap: 10, paddingTop: 16 }}> <View style={{ flex: 1, gap: 10, paddingTop: 16 }}>
@@ -32,36 +23,16 @@ const ChooseInstruments = ({ selected = [], setSelected }) => {
onLayout={(event) => setContainerLayout(event.nativeEvent.layout)} onLayout={(event) => setContainerLayout(event.nativeEvent.layout)}
> >
<ItemContainer height={containerLayout?.height}> <ItemContainer height={containerLayout?.height}>
<FlatList <ListSelection
data={INSTRUMENTS} options={INSTRUMENTS}
showsVerticalScrollIndicator={false} variant="simple"
selected={selected}
setSelected={setSelected}
multiple
maxSelection={5}
contentContainerStyle={styles.contentContainer} contentContainerStyle={styles.contentContainer}
renderItem={({ item }) => { itemContainerStyle={styles.itemContainer}
const list = Array.isArray(selected) ? selected : []; itemTextStyle={styles.itemText}
const selectedItem = list.includes(item);
return (
<CreateLyricsHeader
onPress={() => onPressSelect(item)}
tint={selectedItem ? "default" : "dark"}
colors={[Palette.tran, Palette.tran]}
containerStyle={{
...styles.itemContainer,
borderWidth: selectedItem ? 2 : 0,
borderColor: selectedItem ? "#F94697" : "transparent",
}}
>
<View
style={{
height: 40,
justifyContent: "center",
}}
>
<Text style={styles.itemText}>{item}</Text>
</View>
</CreateLyricsHeader>
);
}}
/> />
</ItemContainer> </ItemContainer>
</View> </View>
+10 -38
View File
@@ -1,55 +1,27 @@
import { View, Text, FlatList, StyleSheet } from "react-native"; import { View, StyleSheet } from "react-native";
import React, { useState } from "react"; import React from "react";
import CreateLyricsHeader from "../Writing/components/CreateLyricsHeader"; import CreateLyricsHeader from "../Writing/components/CreateLyricsHeader";
import ItemContainer from "../../components/ItemContainer/ItemContainer"; import ItemContainer from "../../components/ItemContainer/ItemContainer";
import { BlurView } from "expo-blur";
import { Palette } from "../../styles"; import { Palette } from "../../styles";
import { FONT_FAMILY } from "../../styles/Fonts"; import { FONT_FAMILY } from "../../styles/Fonts";
import { RHYTHM } from "../../data/data"; import { RHYTHM } from "../../data/data";
import ListSelection from "../../components/ListSelection/ListSelection";
const ChooseRhythm = ({ selected, setSelected }) => { const ChooseRhythm = ({ selected, setSelected }) => {
const onPressSelect = (item) => {
if (!setSelected) return;
if (selected === item) setSelected(null);
else setSelected(item);
};
return ( return (
<View style={{ flex: 1, gap: 10, paddingTop: 16 }}> <View style={{ flex: 1, gap: 10, paddingTop: 16 }}>
<CreateLyricsHeader title="Choisis un rythme" /> <CreateLyricsHeader title="Choisis un rythme" />
<View style={{ flex: 1 }}> <View style={{ flex: 1 }}>
<ItemContainer height={340}> <ItemContainer height={340}>
<FlatList <ListSelection
data={RHYTHM} options={RHYTHM}
showsVerticalScrollIndicator={false} variant="simple"
selected={selected}
setSelected={setSelected}
contentContainerStyle={styles.contentContainer} contentContainerStyle={styles.contentContainer}
renderItem={({ item }) => { itemContainerStyle={styles.itemContainer}
const selectedItem = selected === item; itemTextStyle={styles.itemText}
return (
<CreateLyricsHeader
onPress={() => 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",
}}
>
<View
style={{
height: 40,
justifyContent: "center",
}}
>
<Text style={styles.itemText}>{item}</Text>
</View>
</CreateLyricsHeader>
);
}}
/> />
</ItemContainer> </ItemContainer>
</View> </View>
+10 -51
View File
@@ -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 React, { useState } from "react";
import CreateLyricsHeader from "../Writing/components/CreateLyricsHeader"; import CreateLyricsHeader from "../Writing/components/CreateLyricsHeader";
import ItemContainer from "../../components/ItemContainer/ItemContainer"; import ItemContainer from "../../components/ItemContainer/ItemContainer";
import { Palette, Style } from "../../styles"; import { Palette } from "../../styles";
import { FONT_FAMILY } from "../../styles/Fonts";
import { BlurView } from "expo-blur";
import { VOICE } from "../../data/data"; import { VOICE } from "../../data/data";
import ListSelection from "../../components/ListSelection/ListSelection";
const CustomizeVoice = ({ selected = {}, setSelected }) => { const CustomizeVoice = ({ selected = {}, setSelected }) => {
const [containerLayout, setContainerLayout] = useState(null); const [containerLayout, setContainerLayout] = useState(null);
@@ -33,49 +32,13 @@ const CustomizeVoice = ({ selected = {}, setSelected }) => {
> >
<ItemContainer height={containerLayout?.height}> <ItemContainer height={containerLayout?.height}>
<View style={{ flex: 1, gap: 10 }}> <View style={{ flex: 1, gap: 10 }}>
<SectionList <ListSelection
sections={VOICE} options={VOICE}
showsVerticalScrollIndicator={false} variant="sectioned"
selected={selected}
setSelected={setSelected}
contentContainerStyle={styles.contentContainer} contentContainerStyle={styles.contentContainer}
renderItem={({ item, section }) => { itemContainerStyle={styles.itemContainer}
const cat = section?.title;
const selectedItem = selected?.[cat] === item;
return (
<CreateLyricsHeader
onPress={() => 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",
}}
>
<View
style={{
height: 40,
justifyContent: "center",
}}
>
<Text style={styles.itemText}>{item}</Text>
</View>
</CreateLyricsHeader>
);
}}
renderSectionHeader={({ section: { title } }) => (
<Text
style={{
fontSize: 16,
color: Palette.white,
fontFamily: FONT_FAMILY.InterBold,
left: 10,
}}
>
{title}
</Text>
)}
/> />
</View> </View>
</ItemContainer> </ItemContainer>
@@ -109,9 +72,5 @@ const styles = StyleSheet.create({
elevation: 5, elevation: 5,
}, },
itemText: { // itemText was used in legacy implementation; kept here for consistency if needed later
fontSize: 16,
color: Palette.white,
fontFamily: FONT_FAMILY.InterRegular,
},
}); });
+40
View File
@@ -159,6 +159,45 @@ const CreateLyricsWithAi = () => {
customStructure, 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 () => { const onPressNext = async () => {
// Si l'utilisateur a déjà des paroles et vient de finir CustomizeSongStructure (index 6), // Si l'utilisateur a déjà des paroles et vient de finir CustomizeSongStructure (index 6),
// sauter Rhymes et CreatingLyrics et aller directement sur Lyrics // sauter Rhymes et CreatingLyrics et aller directement sur Lyrics
@@ -362,6 +401,7 @@ const CreateLyricsWithAi = () => {
{selectedIndex !== 8 && ( {selectedIndex !== 8 && (
<GradientButton <GradientButton
title={selectedIndex === 7 ? "Générer" : "Suivant"} title={selectedIndex === 7 ? "Générer" : "Suivant"}
disabled={isNextDisabled}
onPress={onPressNext} onPress={onPressNext}
/> />
)} )}
@@ -1,5 +1,6 @@
import { View, StyleSheet, Image, Platform, Text } from "react-native"; import { View, StyleSheet, Image, Platform, Text } from "react-native";
import React, { useMemo, useState, useCallback, useEffect } from "react"; import React, { useMemo, useState, useCallback, useEffect } from "react";
import Animated, { useAnimatedRef } from "react-native-reanimated";
import { BlurView } from "expo-blur"; import { BlurView } from "expo-blur";
import CreateLyricsHeader from "./components/CreateLyricsHeader"; import CreateLyricsHeader from "./components/CreateLyricsHeader";
import { Palette, Style } from "../../styles"; import { Palette, Style } from "../../styles";
@@ -11,6 +12,7 @@ import { icons } from "../../assets";
// onChange: callback that receives array like ['couplet','refrain',...] // onChange: callback that receives array like ['couplet','refrain',...]
const CustomizeSongStructure = ({ baseStructure = [], onChange }) => { const CustomizeSongStructure = ({ baseStructure = [], onChange }) => {
const [containerLayout, setContainerLayout] = useState(null); const [containerLayout, setContainerLayout] = useState(null);
const scrollRef = useAnimatedRef();
// Build stable keyed data like { 'couplet-1': { label, value }, ... } // Build stable keyed data like { 'couplet-1': { label, value }, ... }
const data = useMemo(() => { const data = useMemo(() => {
@@ -78,17 +80,25 @@ const CustomizeSongStructure = ({ baseStructure = [], onChange }) => {
subTitle="Réorganise par glisser-déposer" subTitle="Réorganise par glisser-déposer"
/> />
<View style={{ flex: 1 }} onLayout={(e) => setContainerLayout(e.nativeEvent.layout)}> <View style={{ flex: 1 }} onLayout={(e) => setContainerLayout(e.nativeEvent.layout)}>
<Animated.ScrollView
ref={scrollRef}
contentContainerStyle={{ paddingVertical: 4, paddingBottom: 24 }}
showsVerticalScrollIndicator={false}
>
<Sortable.Grid <Sortable.Grid
columns={1} columns={1}
rowGap={12} rowGap={12}
data={items} data={items}
renderItem={({ item }) => <Row item={item} />} renderItem={({ item }) => <Row item={item} />}
customHandle customHandle
// Enable auto-scroll when dragging near edges
scrollableRef={scrollRef}
onDragEnd={({ data: newData }) => { onDragEnd={({ data: newData }) => {
const values = (newData || []).map((it) => it?.value).filter(Boolean); const values = (newData || []).map((it) => it?.value).filter(Boolean);
onChange?.(values); onChange?.(values);
}} }}
/> />
</Animated.ScrollView>
</View> </View>
</View> </View>
); );
+16 -44
View File
@@ -1,10 +1,9 @@
import { View, Text, FlatList } from "react-native"; import { View } from "react-native";
import React, { useState } from "react"; import React, { useState } from "react";
import CreateLyricsHeader from "./components/CreateLyricsHeader"; import CreateLyricsHeader from "./components/CreateLyricsHeader";
import { Palette } from "../../styles";
import { FONT_FAMILY } from "../../styles/Fonts";
import { EMOTION_CONVEY } from "../../data/data"; import { EMOTION_CONVEY } from "../../data/data";
import ItemContainer from "../../components/ItemContainer/ItemContainer"; import ItemContainer from "../../components/ItemContainer/ItemContainer";
import ListSelection from "../../components/ListSelection/ListSelection";
const EmotionConvey = ({ const EmotionConvey = ({
selected: selectedProp, selected: selectedProp,
@@ -15,14 +14,7 @@ const EmotionConvey = ({
const selected = selectedProp ?? internalSelected; const selected = selectedProp ?? internalSelected;
const setSelected = setSelectedProp ?? setInternalSelected; const setSelected = setSelectedProp ?? setInternalSelected;
const onPressSelect = (item) => { // Selection handled by ListSelection
// item is full object { title, description, color }
if (selected?.title === item.title) {
setSelected(null);
} else {
setSelected({ title: item.title, description: item.description });
}
};
return ( return (
<View style={{ flex: 1, gap: 10, marginTop: 16 }}> <View style={{ flex: 1, gap: 10, marginTop: 16 }}>
@@ -36,45 +28,25 @@ const EmotionConvey = ({
onLayout={(event) => setContainerLayout(event.nativeEvent.layout)} onLayout={(event) => setContainerLayout(event.nativeEvent.layout)}
> >
<ItemContainer height={containerLayout?.height}> <ItemContainer height={containerLayout?.height}>
<FlatList <ListSelection
data={EMOTION_CONVEY} options={EMOTION_CONVEY}
variant="emotion"
selected={selected}
setSelected={setSelected}
// Ensure selection remains an object {title, description}
formatSelectedValue={(item) => ({
title: item.title,
description: item.description,
})}
// selected is object; compare via selected.title
selectedValueExtractor={(s) => (s && s.title) || s}
contentContainerStyle={{ contentContainerStyle={{
gap: 16, gap: 16,
flexGrow: 1, flexGrow: 1,
zIndex: 2, zIndex: 2,
paddingTop: 5, paddingTop: 5,
}} }}
renderItem={({ item, index }) => { itemOuterStyle={{ paddingHorizontal: 5 }}
const selectedItem = selected?.title === item.title;
return (
<View style={{ paddingHorizontal: 5 }}>
<CreateLyricsHeader
colors={item.color}
tint={"dark"}
onPress={() => onPressSelect(item)}
containerStyle={{
borderWidth: selectedItem ? 2 : 0,
borderColor: selectedItem ? "#F94697" : "transparent",
borderRadius: 14,
}}
>
<Text
style={{
fontSize: 16,
color: Palette.white,
fontFamily: FONT_FAMILY.InterRegular,
}}
>
<Text style={{ fontFamily: FONT_FAMILY.InterBold }}>
{item.title}
</Text>{" "}
: {item.description}
</Text>
</CreateLyricsHeader>
</View>
);
}}
/> />
</ItemContainer> </ItemContainer>
</View> </View>
+12 -48
View File
@@ -1,21 +1,12 @@
import { import { View, StyleSheet } from "react-native";
View,
Text,
FlatList,
StyleSheet,
Pressable,
KeyboardAvoidingView,
Platform,
} from "react-native";
import React, { useState } from "react"; import React, { useState } from "react";
import CreateLyricsHeader from "./components/CreateLyricsHeader"; import CreateLyricsHeader from "./components/CreateLyricsHeader";
import { Palette, Style } from "../../styles"; import { Palette } from "../../styles";
import { GOALS } from "../../data/data"; import { GOALS } from "../../data/data";
import { FONT_FAMILY } from "../../styles/Fonts"; import { FONT_FAMILY } from "../../styles/Fonts";
import CustomInput from "./components/CustomInput"; import CustomInput from "./components/CustomInput";
import ItemContainer from "../../components/ItemContainer/ItemContainer"; import ItemContainer from "../../components/ItemContainer/ItemContainer";
import { useKeyboard } from "@react-native-community/hooks"; import ListSelection from "../../components/ListSelection/ListSelection";
import { responsiveHeight } from "react-native-responsive-dimensions";
const Goals = ({ const Goals = ({
selected: selectedProp, selected: selectedProp,
@@ -28,48 +19,21 @@ const Goals = ({
const selected = selectedProp ?? internalSelected; const selected = selectedProp ?? internalSelected;
const setSelected = setSelectedProp ?? setInternalSelected; const setSelected = setSelectedProp ?? setInternalSelected;
const onPressSelect = (item) => { // Selection handled by ListSelection
if (selected === item) {
setSelected(null);
} else {
setSelected(item);
}
};
return ( return (
<View style={{ flex: 1, gap: 16, marginTop: 16 }}> <View style={{ flex: 1, gap: 16, marginTop: 16 }}>
<View style={{ gap: 10 }}> <View style={{ gap: 10 }}>
<CreateLyricsHeader title="Quels sont tes objectifs ?" /> <CreateLyricsHeader title="Quels est ton objectif ?" />
<ItemContainer> <ItemContainer>
<FlatList <ListSelection
data={GOALS} options={GOALS}
showsVerticalScrollIndicator={false} variant="simple"
selected={selected}
setSelected={setSelected}
contentContainerStyle={styles.contentContainer} contentContainerStyle={styles.contentContainer}
renderItem={({ item }) => { itemContainerStyle={styles.itemContainer}
const selectedItem = selected === item; itemTextStyle={styles.itemText}
return (
<CreateLyricsHeader
onPress={() => onPressSelect(item)}
tint={selectedItem ? "default" : "dark"}
colors={[Palette.tran, Palette.tran]}
containerStyle={{
...styles.itemContainer,
borderWidth: selectedItem ? 2 : 0,
borderColor: selectedItem ? "#F94697" : "transparent",
}}
>
<View
style={{
height: 54,
...Style.containerCenter,
}}
>
<Text style={styles.itemText}>{item}</Text>
</View>
</CreateLyricsHeader>
);
}}
/> />
</ItemContainer> </ItemContainer>
</View> </View>
+13 -41
View File
@@ -1,59 +1,31 @@
import { View, Text, StyleSheet } from "react-native"; import { View, StyleSheet } from "react-native";
import React, { useState } from "react"; import React, { useState } from "react";
import CreateLyricsHeader from "./components/CreateLyricsHeader"; import CreateLyricsHeader from "./components/CreateLyricsHeader";
import { BlurView } from "expo-blur"; import { Palette } from "../../styles";
import { Palette, Style } from "../../styles";
import { FONT_FAMILY } from "../../styles/Fonts"; import { FONT_FAMILY } from "../../styles/Fonts";
import ItemContainer from "../../components/ItemContainer/ItemContainer"; import ItemContainer from "../../components/ItemContainer/ItemContainer";
import ListSelection from "../../components/ListSelection/ListSelection";
const Rhymes = ({ selected: selectedProp, setSelected: setSelectedProp }) => { const Rhymes = ({ selected: selectedProp, setSelected: setSelectedProp }) => {
const [internalSelected, setInternalSelected] = useState(null); const [internalSelected, setInternalSelected] = useState(null);
const selected = selectedProp ?? internalSelected; const selected = selectedProp ?? internalSelected;
const setSelected = setSelectedProp ?? setInternalSelected; const setSelected = setSelectedProp ?? setInternalSelected;
const onPressSelect = (item) => { // Selection handled by ListSelection
if (selected === item) {
setSelected(null);
} else {
setSelected(item);
}
};
return ( return (
<View style={{ flex: 1, gap: 10, marginTop: 16 }}> <View style={{ flex: 1, gap: 10, marginTop: 16 }}>
<CreateLyricsHeader title="Avec ou sans rimes" /> <CreateLyricsHeader title="Avec ou sans rimes" />
<ItemContainer height={200}> <ItemContainer height={200}>
<View style={{ gap: 10 }}> <ListSelection
{["Avec rimes", "Sans rimes", "Mélange des deux"].map( options={["Avec rimes", "Sans rimes", "Mélange des deux"]}
(item, index) => { variant="simple"
const selectedItem = selected === item; selected={selected}
setSelected={setSelected}
return ( contentContainerStyle={{ gap: 10 }}
<CreateLyricsHeader itemContainerStyle={styles.itemContainer}
key={index} itemTextStyle={styles.dropzone}
onPress={() => onPressSelect(item)} />
tint={selectedItem ? "default" : "dark"}
colors={[Palette.tran, Palette.tran]}
containerStyle={{
...styles.itemContainer,
borderWidth: selectedItem ? 2 : 0,
borderColor: selectedItem ? "#F94697" : "transparent",
}}
>
<View
style={{
height: 54,
...Style.containerCenter,
paddingHorizontal: 14,
}}
>
<Text style={styles.dropzone}>{item}</Text>
</View>
</CreateLyricsHeader>
);
}
)}
</View>
</ItemContainer> </ItemContainer>
</View> </View>
); );
+10 -37
View File
@@ -1,10 +1,11 @@
import { View, Text, StyleSheet, FlatList } from "react-native"; import { View, StyleSheet } from "react-native";
import React, { useState } from "react"; import React, { useState } from "react";
import CreateLyricsHeader from "./components/CreateLyricsHeader"; import CreateLyricsHeader from "./components/CreateLyricsHeader";
import { SONG_STRUCTURE } from "../../data/data"; import { SONG_STRUCTURE } from "../../data/data";
import { Palette } from "../../styles"; import { Palette } from "../../styles";
import { FONT_FAMILY } from "../../styles/Fonts"; import { FONT_FAMILY } from "../../styles/Fonts";
import ItemContainer from "../../components/ItemContainer/ItemContainer"; import ItemContainer from "../../components/ItemContainer/ItemContainer";
import ListSelection from "../../components/ListSelection/ListSelection";
const SongStructure = ({ const SongStructure = ({
selected: selectedProp, selected: selectedProp,
@@ -14,13 +15,7 @@ const SongStructure = ({
const selected = selectedProp ?? internalSelected; const selected = selectedProp ?? internalSelected;
const setSelected = setSelectedProp ?? setInternalSelected; const setSelected = setSelectedProp ?? setInternalSelected;
const onPressSelect = (item) => { // Selection handled by ListSelection
if (selected === item) {
setSelected(null);
} else {
setSelected(item);
}
};
return ( return (
<View style={{ flex: 1, gap: 10, marginTop: 16 }}> <View style={{ flex: 1, gap: 10, marginTop: 16 }}>
@@ -29,36 +24,14 @@ const SongStructure = ({
subTitle="Sélectionne une structure." subTitle="Sélectionne une structure."
/> />
<ItemContainer> <ItemContainer>
<FlatList <ListSelection
data={SONG_STRUCTURE} options={SONG_STRUCTURE}
showsVerticalScrollIndicator={false} variant="simple"
selected={selected}
setSelected={setSelected}
contentContainerStyle={styles.contentContainer} contentContainerStyle={styles.contentContainer}
renderItem={({ item }) => { itemContainerStyle={styles.itemContainer}
const selectedItem = selected === item; itemTextStyle={styles.itemText}
return (
<CreateLyricsHeader
onPress={() => onPressSelect(item)}
tint={selectedItem ? "default" : "dark"}
colors={[Palette.tran, Palette.tran]}
containerStyle={{
...styles.itemContainer,
borderWidth: selectedItem ? 2 : 0,
borderColor: selectedItem ? "#F94697" : "transparent",
}}
>
<View
style={{
height: 40,
paddingHorizontal: 14,
justifyContent: "center",
}}
>
<Text style={styles.itemText}>{item}</Text>
</View>
</CreateLyricsHeader>
);
}}
/> />
</ItemContainer> </ItemContainer>
</View> </View>
+11 -45
View File
@@ -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 React, { useState } from "react";
import CreateLyricsHeader from "./components/CreateLyricsHeader"; import CreateLyricsHeader from "./components/CreateLyricsHeader";
import { BlurView } from "expo-blur"; import { SONG_STYLE } from "../../data/data";
import { GOALS, SONG_STYLE } from "../../data/data"; import { Palette } from "../../styles";
import { Palette, Style } from "../../styles";
import CustomInput from "./components/CustomInput"; import CustomInput from "./components/CustomInput";
import { FONT_FAMILY } from "../../styles/Fonts"; import { FONT_FAMILY } from "../../styles/Fonts";
import ItemContainer from "../../components/ItemContainer/ItemContainer"; import ItemContainer from "../../components/ItemContainer/ItemContainer";
import ListSelection from "../../components/ListSelection/ListSelection";
const SongStyle = ({ const SongStyle = ({
selected: selectedProp, selected: selectedProp,
@@ -18,13 +18,7 @@ const SongStyle = ({
const selected = selectedProp ?? internalSelected; const selected = selectedProp ?? internalSelected;
const setSelected = setSelectedProp ?? setInternalSelected; const setSelected = setSelectedProp ?? setInternalSelected;
const onPressSelect = (item) => { // Selection handled by ListSelection
if (selected === item) {
setSelected(null);
} else {
setSelected(item);
}
};
return ( return (
<View style={{ flex: 1, gap: 16, marginTop: 16 }}> <View style={{ flex: 1, gap: 16, marginTop: 16 }}>
@@ -34,41 +28,13 @@ const SongStyle = ({
subTitle="Choisis l'ambiance émotions que tu veux faire passer." subTitle="Choisis l'ambiance émotions que tu veux faire passer."
/> />
<ItemContainer> <ItemContainer>
<FlatList <ListSelection
data={SONG_STYLE} options={SONG_STYLE}
showsVerticalScrollIndicator={false} variant="titleDescription"
selected={selected}
setSelected={setSelected}
contentContainerStyle={styles.contentContainer} contentContainerStyle={styles.contentContainer}
renderItem={({ item }) => { itemContainerStyle={styles.itemContainer}
const selectedItem = selected === item.title;
return (
<CreateLyricsHeader
colors={[Palette.tran, Palette.tran]}
tint={selectedItem ? "default" : "dark"}
onPress={() => onPressSelect(item.title)}
containerStyle={{
...styles.itemContainer,
borderWidth: selectedItem ? 2 : 0,
borderColor: selectedItem ? "#F94697" : "transparent",
}}
>
<View style={{ paddingVertical: 6 }}>
<Text
style={{
fontSize: 16,
color: Palette.white,
fontFamily: FONT_FAMILY.InterRegular,
}}
>
<Text style={{ fontFamily: FONT_FAMILY.InterBold }}>
{item.title}
</Text>{" "}
: {item.description}
</Text>
</View>
</CreateLyricsHeader>
);
}}
/> />
</ItemContainer> </ItemContainer>
</View> </View>
@@ -1,18 +0,0 @@
{
"applinks": {
"apps": [],
"details": [
{
"appID": "MW8MX2T3ZL.com.minuit.starter",
"paths": [
"/tasks/*"
]
}
]
},
"webcredentials": {
"apps": [
"MW8MX2T3ZL.com.minuit.starter"
]
}
}
-130
View File
@@ -1,130 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta httpEquiv="X-UA-Compatible" content="IE=edge" />
<meta
name="viewport"
content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1.00001, viewport-fit=cover"
/>
<!-- SEO Meta Tags -->
<meta
name="description"
content="Gérez vos projets de développement efficacement avec minuit.starter"
/>
<meta
name="keywords"
content="minuit.agency, développement, gestion de projets, minuit, bordeaux"
/>
<meta name="author" content="minuit.agency" />
<!-- Apple iTunes Meta Tag -->
<meta name="apple-itunes-app" content="app-id=1661696886" />
<title>minuit.starter - Suivi de projet</title>
<style>
@import url("https://fonts.googleapis.com/css2?family=Raleway:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&display=swap");
::-webkit-scrollbar {
display: none;
}
html,
body,
#root {
width: 100%;
-webkit-overflow-scrolling: touch;
margin: 0px;
padding: 0px;
min-height: 100%;
overflow: -moz-scrollbars-none;
scrollbar-width: none;
}
#root {
flex-shrink: 0;
flex-basis: auto;
flex-grow: 1;
display: flex;
flex: 1;
}
input:focus,
textarea:focus,
select:focus,
input:-internal-autofill-selected {
outline: none;
}
input[type="text" i] {
outline-width: 0;
}
html {
scroll-behavior: smooth;
-webkit-text-size-adjust: 100%;
height: calc(100% + env(safe-area-inset-top));
}
body {
display: flex;
overflow-y: auto;
overscroll-behavior-y: none;
text-rendering: optimizeLegibility;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
-ms-overflow-style: scrollbar;
}
</style>
</head>
<body>
<noscript>
<form
action=""
style="
background-color: #fff;
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
z-index: 9999;
"
>
<div
style="
font-size: 18px;
font-family: Helvetica, sans-serif;
line-height: 24px;
margin: 10%;
width: 80%;
"
>
<p>Oh no! It looks like JavaScript is not enabled in your browser.</p>
<p style="margin: 20px 0">
<button
type="submit"
style="
background-color: #4630eb;
border-radius: 100px;
border: none;
box-shadow: none;
color: #fff;
cursor: pointer;
font-weight: bold;
line-height: 20px;
padding: 6px 16px;
"
>
Reload
</button>
</p>
</div>
</form>
</noscript>
<div id="root"></div>
</body>
</html>
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
-5
View File
@@ -2896,11 +2896,6 @@ acorn@^8.15.0, acorn@^8.9.0:
resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.15.0.tgz#a360898bc415edaac46c8241f6383975b930b816" resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.15.0.tgz#a360898bc415edaac46c8241f6383975b930b816"
integrity sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg== 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: aggregate-error@^3.0.0:
version "3.1.0" version "3.1.0"
resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a"