Fireside 0.1.0-next.9
Cloud Tasks emulator, every configuration shape, the CLI surface. Published on , as a preview.
Published as @fireside-dev/cli, before Firenook’s rename. About the former name.
A newer release is out: Firenook 0.2.0, the first release for public use.
What changed
The changes, as the release notes give them.
Cloud Tasks is a full emulator (Phase K). The Tasks port serves the four routes of the official emulator — queue registration, enqueue, delete and
/queueStats— with its Express-shaped answers, registers a queue for everyonTaskDispatchedexport at readiness and after each reload with the function's URL as the default target, and dispatches exactly astaskQueue.jsdoes: a token bucket per queue that starts empty and refills once a second, dispatch slots sized bymaxConcurrentDispatches, theX-CloudTasks-QueueName/TaskName/TaskRetryCount/TaskExecutionCount/TaskETAheaders with the caller's headers overriding them andTaskPreviousResponsefrom the second attempt, the retry ladder with its backoff formula and themaxAttemptsoff-by-one, the execution count incremented on non-5xx failures only, thedispatchDeadlineabort, and the controller's cadence (idle queues polled once a second, active queues continuously).getFunctions().taskQueue().enqueue()and.delete()from a function or an app withCLOUD_TASKS_EMULATOR_HOSTset reach the handler as on the official suite. The corpus recorded from firebase-tools 15.22.0 (6 programs, 61 steps, 39 handler observations inconformance/fixtures/tasks-v1) replays with 0 mismatches and no named divergence, three runs identical; the Functions runtime corpus replays unchanged with the emulator mounted. Not done because the official emulator does not do it either:scheduleTimeas a delay, OIDC tokens on dispatch, queue pause/resume/purge, task listing, the Cloud Tasks v2 API, persistence, a UI tab.Every configuration shape of the tracker starts (Phase L). A service starts when
firebase.jsonconfigures it, exactly as the officialfilterEmulatorTargetsdecides, and--onlynarrows the set; a project without Functions or Storage runs (Eventarc and Tasks follow Functions, the requests WebSocket follows Firestore, the UI and logging listeners followemulators.ui.enabled, the hub always runs). Any project id is accepted: ademo-*id prints the official demo line, a real id prints the official "will affect production" warning for services not running, and the suite never contacts Firebase either way (every worker gets the emulator hosts and no Google credentials; user code with explicit credentials can still reach the real project). Any listen host is bound; a wildcard is announced to clients as the loopback address as the officialconnectableHostnamedoes, and a non-loopback bind prints one warning because the emulators have no authentication.emulators.singleProjectMode(default true) warns once per foreign project id with the official Auth wording.firestoremay list several databases, each with its own rules (a project-wide hot reload replaces every database's rules, as officially); every database is exported and imported. The storage section may be the{rules}object, the target array, or absent (demo projects get the official open default rules);.firebasercmay be absent;emulators.database/hosting/dataconnect/apphostingentries are skipped with a warning instead of refused. The rules parser now acceptsallow read, write;without a condition andrules_version='2'without a semicolon, both written by the official templates. The Functions worker declares its routes in Express 4 and 5 syntax (firebase-functions 7.3 and later ship Express 5) and sees a gcloud directory under the suite state holding a synthetic credential, so the Admin SDK's task-queue client never probes the Compute Engine metadata server.The CLI carries every command row except the terminal launch experience (Phase M):
emulators:exporton a running suite through the official hub locator,init(non-interactive, official rules and index templates, a JavaScript codebase) andinit --adopt(diagnoses an existingfirebase.jsonand adds what Fireside needs),use,target:apply/target:clear(pure.firebasercedits, no login),firestore:delete(a new path-scoped emulator route; recursive and whole-database deletes need--force),functions:invoke --event-data(the official shell's envelopes for Firestore, Storage, Pub/Sub, Auth, schedules, Eventarc custom events and task queues, posted to the running suite),mcp(a dependency-free stdio Model Context Protocol server with status, Firestore, Auth, Storage, Functions, Pub/Sub, Tasks and export tools),--debug(onefireside-debug.logper run under.fireside/runs, never deleted), the official-P/-c/--json/--non-interactive/--log-verbosity/--ui/--forceflags, andemulators:exec "<script>"run through the shell as the official CLI does (the--argv form stays free of shell interpretation).emulators:execkeeps the Emulator UI off unless--uiis given, as officially.functions:shellis deliberately not provided: Fireside never starts a second Functions runtime. The default auxiliary ports are now the official ones (logging 4500, Eventarc 9299, Tasks 9499) whenfirebase.jsonnames none.
Known limits
What this release was known not to do yet, as its notes recorded it.
- Left for
0.1.0-next.10: the own Emulator UI and the terminal launch experience (banner and status table).
How it was checked
The source it was built from, the runs it passed, and how it was published.
- Pin the engine to
7fb0c350078c94fc65a83a6f3c012a917779fbbd, the qualified head of PR #55 (Phases K, L and M) on the next.8 engine. This exact revision passed CI (run 35437156565) and the five-platform packed-install matrix (run 35437156569), and a local candidate built from it passed a representative private consumer's extensions, integration and installed-launcher gates and its nine browser journeys on the full-data stack, plus an end-to-end run of every new command on a project scaffolded byfireside init; seesupport/phase-k-tasks.md,support/phase-l-configuration.md,support/phase-m-cli.mdand thereceiptsblocks of the three gate files underbenchmarks/. The per-release-line two-hour soak stands from next.6 and next.7.
The latest is 0.2.0
The first release for public use. Install it, and read what changed on the way.
npm install --save-dev firenook@0.2.0