- PRs must include: clear description, screenshots/video for UI changes, reproduction and verification steps, linked issues, and notes on breaking changes.
- Verify the app launches on Android, iOS, and Web locally; fix lint and type warnings before requesting review.
## Security & Configuration Tips
- Never commit secrets (e.g., `functions/serviceAccountKey.json`, API keys). Use Firebase/Expo secrets and environment config.
- Manage runtime config via `app.json`/`eas.json` or remote config; avoid hardcoding credentials.
- Before EAS builds, run `yarn clean` to resync native projects.
[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: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[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.
[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":{}}
[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: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":{}}
[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.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.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\"}}"}}
[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."}}
[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: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] 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"}}
[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: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] 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"}}
[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: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] 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"}}
[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: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] 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-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] > 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: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":{}}
[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":{}}
[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: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'
[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":{}}
[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.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: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.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\"}}"}}
[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\""}}
[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] > '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] > "J'vais te le donner oui, oui, oui, oui", {"user":" \"J'vais te le donner oui, oui, oui, oui\",","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m \"J'vais te le donner oui, oui, oui, oui\","}}
[info] > title: 'I’m In It', {"user":" title: 'I’m In It',","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m title: 'I’m In It',"}}
[info] > style: 'Genres: Trap, Latino ; Tempo: Normal ; Instruments: Banjo, Guitare acoustique, Synthétiseur, Guitare électrique, Piano éléctrique ; Vocal: Seductive, sensual tone ; Vocal (user): Technique vocale entre parler et chanter, typique de la musique expressionniste. ; Voix séduisante et sensuelle. ; Chant puissant (styles pop et Broadway). ; Mix: propre, punchy, large stéréo, radio-ready. Titre: I’m In It\n' + {"user":" style: 'Genres: Trap, Latino ; Tempo: Normal ; Instruments: Banjo, Guitare acoustique, Synthétiseur, Guitare électrique, Piano éléctrique ; Vocal: Seductive, sensual tone ; Vocal (user): Technique vocale entre parler et chanter, typique de la musique expressionniste. ; Voix séduisante et sensuelle. ; Chant puissant (styles pop et Broadway). ; Mix: propre, punchy, large stéréo, radio-ready. Titre: I’m In It\\n' +","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-music-generateMusic"},"extension":{},"message":"\u001b[90m> \u001b[39m style: 'Genres: Trap, Latino ; Tempo: Normal ; Instruments: Banjo, Guitare acoustique, Synthétiseur, Guitare électrique, Piano éléctrique ; Vocal: Seductive, sensual tone ; Vocal (user): Technique vocale entre parler et chanter, typique de la musique expressionniste. ; Voix séduisante et sensuelle. ; Chant puissant (styles pop et Broadway). ; Mix: propre, punchy, large stéréo, radio-ready. Titre: I’m In It\\n' +"}}
[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] 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-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.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.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\"}}"}}
[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: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] 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"}}
[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: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.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"}}
[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\""}}
[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] > '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] > "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] > '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',"}}
[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] 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"}}
[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\""}}
[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] > '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] > "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] > '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',"}}
[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] 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: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.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.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\"}}"}}
[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: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] 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: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.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.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\"}}"}}
[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\""}}
[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] > emotion: "L’Amour : sous entends un sentiment profond d'attachement et d'attraction vers une personne, désir de bien-être et de proximité. Inconditionnel, compassion, ouverture du coeur.", {"user":" emotion: \"L’Amour : sous entends un sentiment profond d'attachement et d'attraction vers une personne, désir de bien-être et de proximité. Inconditionnel, compassion, ouverture du coeur.\",","metadata":{"emulator":{"name":"functions"},"function":{"name":"us-central1-lyrics-generateLyrics"},"extension":{},"message":"\u001b[90m> \u001b[39m emotion: \"L’Amour : sous entends un sentiment profond d'attachement et d'attraction vers une personne, désir de bien-être et de proximité. Inconditionnel, compassion, ouverture du coeur.\","}}
[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] 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"}}
.describe("none|low|medium|high|critical pour l'extrait"),
}),
)
.max(10)
.describe("Jusqu'à 10 extraits problématiques"),
success:z.boolean().describe("Toujours true si l'analyse a abouti"),
});
// --- Politique : davantage de place à la création tout en restant sûre ---
constsystem=`
Tu es un modérateur de contenu spécialisé dans l'analyse de paroles de chanson.
Objectif: protéger les utilisateurs en BLOQUANT uniquement les cas réellement problématiques et non ambigus, tout en LAISSANT PASSER les œuvres qui utilisent la narration, la satire, la critique ou la représentation de personnages.
Sois STRICT sur les risques graves, mais NE SOIS PAS PUNITIF envers l'expression artistique.
Évalue TOUJOURS: 1) l'intention, 2) le contexte (récit, citation, dénonciation, rôle/persona), 3) la cible, 4) la probabilité de tort réel.
Retourne UNIQUEMENT un JSON conforme au schéma. Pas de texte hors JSON.
`.trim();
// Règles détaillées injectées dans le prompt utilisateur pour guider la décision
constpolicy=`
RUBRIQUE DE DÉCISION (résumée):
A. QUAND BLOQUER (blocked = true) — cas graves et clairs (pas ambigus):
1) Sexualité impliquant des mineurs (référence explicite, érotisation, incitation).
2) Apologie explicite et sérieuse de terrorisme/extrémisme réel, ou appel à rejoindre/soutenir.
3) Appels explicites à la violence ou à un préjudice grave contre une personne/groupe réel.
4) Déshumanisation évidente et sérieuse de groupes protégés couplée à menace/incitation.
5) Instruction ou encouragement clair à commettre des crimes violents.
6) Nazisme/fascisme réel promu (praise/advocacy) ou symboles glorifiés sans critique.
7) Partage de contenu sexuel non consenti réel (ex: doxxing sexuel, vengeance) ou exploitation.
B. QUAND NE PAS BLOQUER (blocked = false, mais flagged peut être true):
- Œuvres qui mettent en scène un personnage toxique pour le critiquer, le montrer ou le contextualiser.
- Citations, descriptions historiques, satire, ironie, mises en garde, ou re-appropriation par les communautés visées.
- Métaphores violentes ou langage dur SANS cible réelle ni intention d'incitation.
- Références à des thèmes sombres dans un but narratif/éducatif/critique, sans promotion réelle.
C. SCORE ET SEVERITY:
- Calibre "score" selon l'impact potentiel et la clarté du tort.
- Utilise severity par extrait pour refléter le pire passage.
D. RELECTURE DE CONTEXTE:
- Demande-toi si le passage est: (i) narration/roleplay/critique —> plutôt allow; (ii) injonction réelle —> plutôt block.
- Si ambigu OU probablement artistique, NE PAS bloquer: flagged=true si nécessaire, blocked=false.
`.trim();
constuserPrompt=`
Analyse de paroles de chanson
Titre: ${title||"Sans titre"}
Paroles:
"""
${lyricsText}
"""
Consigne:
- Applique la RUBRIQUE DE DÉCISION ci-dessous pour autoriser la création artistique tout en bloquant les cas réellement dangereux.
- "blocked" = true UNIQUEMENT pour les cas A.1 à A.7 (non ambigus).
- Si le contenu semble artistique (récit, personnage, satire, citation, dénonciation) et ne fait pas d'apologie/incitation réelle: "blocked" = false (tu peux mettre "flagged" = true + "score" adapté).
- Donne des "excerpts" courts (citations EXACTES) si possible.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.