Skip to content
Open
Show file tree
Hide file tree
Changes from 11 commits
Commits
Show all changes
413 commits
Select commit Hold shift + click to select a range
e8865f2
Grant Create PR content write permissions. (#8848)
DellaBitta Mar 18, 2025
5887660
Merge main into release
google-oss-bot Mar 18, 2025
202c732
Version Packages (#8849) - v11.5.0
google-oss-bot Mar 20, 2025
faaeb48
Deprecate `GroundingAttribution` (#8832)
dlarocque Mar 20, 2025
14d9721
Stream full logs of test-all firestore job (#8851)
hsubox76 Mar 20, 2025
5718838
Set github actions to use commit hashes (#8852)
hsubox76 Mar 20, 2025
d18310a
Markduckworth/ppl mep (#8801)
MarkDuckworth Mar 21, 2025
edb4001
Implement Partial Errors for FDC (#8821)
maneesht Mar 21, 2025
648de84
Add `X-Firebase-AppId` header to VertexAI requests (#8809)
dlarocque Mar 25, 2025
ab8eb26
Update dependency webpack to v5.94.0 [SECURITY] (#8734)
renovate[bot] Mar 25, 2025
dcc62c0
Update dependency express to v4.20.0 [SECURITY] (#8759)
renovate[bot] Mar 25, 2025
b180898
Port improved whereConditionsFromCursor from Android
MarkDuckworth Mar 26, 2025
6cc2ee6
Port improved whereConditionsFromCursor from Android (#8867)
MarkDuckworth Mar 26, 2025
670eba6
karma.base.js: replace "BROWSER" with "BROWSERS" in log messages, to …
dconeybe Mar 27, 2025
fb5d422
Auth cookie persistence (#8839)
jamesdaniels Mar 27, 2025
dd19924
Merge main into release
google-oss-bot Mar 27, 2025
195d943
firestore: fix `undefined` document snapshot data after "clear site d…
dconeybe Mar 28, 2025
61f0102
Use base browsers variable in Firestore karma config (#8876)
dlarocque Mar 28, 2025
c8cbfff
[chore] Update some dependencies (#8868)
hsubox76 Mar 29, 2025
4b34983
Version Packages (#8878)
google-oss-bot Mar 31, 2025
933ba9d
Merge branch 'release'
hsubox76 Mar 31, 2025
88a8055
Fix 'window is not defined' error when calling clearIndexedDbPersistence
milaGGL Apr 1, 2025
8e9fdbe
Merge branch 'feat/pipelines' of github.com:firebase/firebase-js-sdk …
MarkDuckworth Apr 3, 2025
1df3d26
Fix Data Connect Types (#8898)
maneesht Apr 4, 2025
609d082
Pipeline and test cleanup
MarkDuckworth Apr 8, 2025
66a09f2
test(vertexai): update mock responses to v8 (#8904)
dlarocque Apr 8, 2025
3d6bbf3
Test fixes and re-enabling tests for features that were added on backend
MarkDuckworth Apr 8, 2025
32ee331
Additional test cleanup
MarkDuckworth Apr 8, 2025
7532899
Merge commit '88a8055808bdbd1c75011a94d11062460027d931' into feat/pip…
MarkDuckworth Apr 8, 2025
bb8fc27
fix tests and enable only pipeline tests
MarkDuckworth Apr 8, 2025
b332825
Fix: display WebChannel error message (#8907)
milaGGL Apr 9, 2025
4e0f630
test(vertexai): add `backendName` param to mock response getters (#8906)
dlarocque Apr 9, 2025
ed0803a
fix: remove `null` value inclusion from `!=` and `not-in` filter resu…
milaGGL Apr 11, 2025
03eb22e
Comment cleanup
MarkDuckworth Apr 11, 2025
e055e90
Add assertion IDs that will be included in production log statements …
MarkDuckworth Apr 14, 2025
8bb66c2
docs(vertexai): remove HTML `<code>` tags (#8900)
dlarocque Apr 15, 2025
0cbff6b
test(vertexai): update developerapi mock response dir to googleai (#8…
dlarocque Apr 15, 2025
1363ecc
Fix languageCode parameter in action_code_url (#8912)
pashanka Apr 16, 2025
a0bcc9a
Merge main into release
google-oss-bot Apr 22, 2025
20b45d3
test(vertexai): update mock responses to v10 (#8959)
dlarocque Apr 23, 2025
b204e71
Version Packages (#8956)
google-oss-bot Apr 24, 2025
9952dbc
Merge branch 'release'
dlarocque Apr 24, 2025
0e2558a
Improve the integration test coverage for online vs offline compariso…
ehsannas Apr 28, 2025
dd6a8f0
fix(vertexai): add missing quote to chat role error message (#8979)
dlarocque Apr 29, 2025
ea1f913
Auto Enable SSL for Firebase Studio (#8980)
maneesht Apr 29, 2025
1645cd6
Cleanup
MarkDuckworth Apr 29, 2025
0e12766
Add support for running the emulators in Cloud Workstation (#8968)
maneesht Apr 30, 2025
080a90d
Add Cookie Support For Firebase Studio (#8986)
maneesht May 1, 2025
136bb73
Merge main into release
google-oss-bot May 5, 2025
6a02778
Fix Auth Port for Firebase Studio (#8998)
maneesht May 5, 2025
3789b5a
Change automaticDataCollectionEnabled to default to true. (#8999)
hsubox76 May 7, 2025
f7ec278
Merge main into release
google-oss-bot May 7, 2025
d5428f3
Version Packages (#8997)
google-oss-bot May 7, 2025
51e7b48
Roll back #8999 (#9007)
hsubox76 May 7, 2025
9900a6a
Merge main into release
google-oss-bot May 7, 2025
f8334ea
Version Packages (#9008)
google-oss-bot May 7, 2025
050c1b6
fix(vertexai): pass `GenerativeModel`'s `BaseParams` to `ChatSession`…
dlarocque May 8, 2025
e99683b
feat(vertexai): Gemini multimodal output (#8922)
dlarocque May 8, 2025
88584fd
test: Clean up vscode launch file and add vertexai debug config (#9000)
dlarocque May 8, 2025
8a03143
Fix encoding of CSI keys in Safari (#8993)
MarkDuckworth May 9, 2025
6be75f7
Restore #8999 (#9010)
hsubox76 May 12, 2025
d5082f9
feat(ai): Migrate to `AI` and add GoogleAI support (#8931)
dlarocque May 12, 2025
72852e1
Add Emulator Overlay (#8977)
maneesht May 12, 2025
39505cc
Rename `@firebase/vertexai` package to `@firebase/ai` (#9011)
dlarocque May 12, 2025
8593fa0
Add Emulator Overlay (#8977) (#9031)
hsubox76 May 13, 2025
bf8c3d1
add temporary release branch (#9032)
hsubox76 May 13, 2025
f92069a
Allow custom branch for release (#9033)
hsubox76 May 13, 2025
3a203e6
Merge at-11-7-1 into release
google-oss-bot May 13, 2025
799de59
restore Vertex token for temp publish (#9036)
hsubox76 May 13, 2025
9338d9d
Version Packages (manual PR) (#9034)
hsubox76 May 14, 2025
9bcd1ea
Fixed scroll behavior (#9043)
maneesht May 14, 2025
1e91c24
Merge at-11-7-1 into release
google-oss-bot May 14, 2025
8601ecb
Version Packages (manual PR) (#9044)
hsubox76 May 14, 2025
a5bacaf
Merge branch 'release' into ch-release-merge
hsubox76 May 15, 2025
5b53905
Remove redundant changeset
hsubox76 May 15, 2025
3d9291f
Merge pull request #9049 from firebase/ch-release-merge
hsubox76 May 15, 2025
880110b
Update e2e tests to reflect AI package and new API (#9017)
hsubox76 May 15, 2025
e4297f7
Merge main into release
google-oss-bot May 15, 2025
2fe7547
Version Packages (#9016)
google-oss-bot May 20, 2025
35ad526
Revert "Fixed scroll behavior (#8977)" (#9053)
maneesht May 20, 2025
e96410a
Merge main into release
google-oss-bot May 20, 2025
b5df4ae
Updated to only show banner when calling connect*Emulator (#9055)
maneesht May 21, 2025
4ead831
Merge main into release
google-oss-bot May 21, 2025
770e455
Version Packages (#9054)
google-oss-bot May 22, 2025
9964849
Close webchannel instances on terminate (#9041)
MarkDuckworth May 22, 2025
d5e5795
Reorder reporters to prevent log message duplication in CI (#9040)
MarkDuckworth May 22, 2025
ec91a86
docs(ai): Fix 'occured' typo in error codes (#9021)
dlarocque May 27, 2025
8cb21ff
feat(ai): Add `HarmBlockThreshold.OFF` (#9050)
dlarocque May 27, 2025
40be2db
feat(ai): Schema `title`, `maximum`, `minimum`, and `propertyOrdering…
dlarocque May 27, 2025
1933324
feat(ai): Add support for `minItems` and `maxItems` to `Schema` (#9026)
dlarocque May 28, 2025
af9f8b5
Build out e2e subdirectories (#9065)
hsubox76 May 30, 2025
30de503
Added test project to fdc (#8924)
maneesht May 30, 2025
9be10d9
Merge main into release
google-oss-bot Jun 3, 2025
89051ca
Version Packages (#9073)
google-oss-bot Jun 5, 2025
d590889
test(ai): add integration tests (#8853)
dlarocque Jun 5, 2025
5871fd6
Update issue template to rename VertexAI > AI (#9074)
hsubox76 Jun 5, 2025
6cc9a07
ci: Fix Firefox error and streamline cross-browser tests (#9015)
hsubox76 Jun 5, 2025
c0617a3
Fixed issue where requestSts wasn't including the Studio cookie in it…
maneesht Jun 5, 2025
0f891d8
Fix issue where we ping an endpoint that hasn't been implemented (#9059)
maneesht Jun 6, 2025
2306920
Updated firebase auth changeset (#9088)
maneesht Jun 9, 2025
db2c5a5
Merge main into release
google-oss-bot Jun 10, 2025
a058309
build(all): Version Packages v11.9.1 (#9089)
google-oss-bot Jun 10, 2025
7fb64dd
test(ai): Upgrade mock responses to v14 (#9091)
dlarocque Jun 13, 2025
41bde42
Build and test fixes
MarkDuckworth Jun 16, 2025
13e6cce
Feat/google3 typings support (#9085)
eranc-google Jun 17, 2025
b97eab3
fix(ai): Add deprecation tag to `totalBillableCharacters` (#9090)
dlarocque Jun 18, 2025
41e3c4c
test(ai): Add `gemini-2.5-flash` to integration tests (#9110)
dlarocque Jun 20, 2025
f73e08b
firestore: minor refactor of listener registration of "versionchange"…
dconeybe Jun 20, 2025
42ac401
Fixed issue where storage wasn't passing cookies when using firebase …
maneesht Jun 23, 2025
bb57947
fix: Add "react-native" entry point to @firebase/app (#9112)
hsubox76 Jun 23, 2025
7ae5b12
Feat(Firestore) JSON serialization of types to improve SSR support. (…
DellaBitta Jun 23, 2025
86155b3
chore(Firestore) add changeset for PR #8926 (#9115)
DellaBitta Jun 23, 2025
bd06146
Merge main into release
google-oss-bot Jun 26, 2025
3d44792
Update Fireperf logging to use sendBeacon only if the payload is unde…
raymondlam Jun 26, 2025
33a4a2d
Merge branch 'main' of github.com:firebase/firebase-js-sdk into feat/…
MarkDuckworth Jun 27, 2025
3c759f0
Version Packages (#9126)
google-oss-bot Jun 30, 2025
5d13166
Increase unit test coverage for facebook.ts to 100% (#9129)
mansisampat Jul 2, 2025
247b92f
Increase unit test coverage for github.ts to 100% (#9130)
mansisampat Jul 2, 2025
8072572
test: Use inline source maps for webpack test output (#9109)
dlarocque Jul 2, 2025
ab5c2a0
Increase unit test coverage for saml.ts to 100% (#9131)
mansisampat Jul 3, 2025
a029ce3
firestore: misc.ts: further improved performance of UTF-8 string comp…
dconeybe Jul 7, 2025
ae976d0
fix(ai): typings for functionDeclaration.parameters. (#8948)
hsubox76 Jul 8, 2025
a4ccd25
feat(ai): add support for grounding with google search (#9068)
dlarocque Jul 9, 2025
91fa484
feat!(ai): Remove `vertexai` import alias (#9081)
dlarocque Jul 9, 2025
47b154c
docs(firestore): add an example to the detailed comment in compareUtf…
dconeybe Jul 9, 2025
6ab4e13
feat(ai): Add support for Thinking Budget (#9156)
dlarocque Jul 9, 2025
ec5f374
feat!(ai): remove `VertexAI` APIs (#9063)
dlarocque Jul 9, 2025
e59cd7d
fix!(ai): convert TS enums exports in Firebase AI into const variable…
hsubox76 Jul 10, 2025
2b57312
Merge branch 'release'
hsubox76 Jul 11, 2025
f11b552
fix(firestore): revert fix for `undefined` document snapshot data aft…
dconeybe Jul 11, 2025
2d72099
build!: update build targets to ES2020 (#9101)
hsubox76 Jul 12, 2025
d91169f
(feat) initializeServerApp support for App Hosting auto init (#9151)
DellaBitta Jul 12, 2025
cb19688
feat!(ai): Remove `GroundingAttribution` (#9079)
dlarocque Jul 14, 2025
5200f7b
feat!(ai): add support for `anyOf` schemas (#9042)
dlarocque Jul 14, 2025
25b60fd
chore!: update engines.node to minimum of 20 (#9128)
hsubox76 Jul 15, 2025
a9be675
fix(ci): Update e2e tests to import from ai instead of vertexai (#9164)
hsubox76 Jul 15, 2025
325d05e
Merge main into release
google-oss-bot Jul 15, 2025
f18b25f
chore: Add missing changeset for 9101 (#9167)
hsubox76 Jul 16, 2025
08f474c
Merge main into release
google-oss-bot Jul 16, 2025
9771bff
Revert "firestore: minor refactor of listener registration of "versio…
MarkDuckworth Jul 16, 2025
c1e928a
Merge main into release
google-oss-bot Jul 16, 2025
5748005
docs: fix doc typos found by g3 presubmit (#9166)
hsubox76 Jul 17, 2025
52c8579
Version Packages (#9165)
google-oss-bot Jul 17, 2025
56fbe52
Merge branch 'release'
hsubox76 Jul 17, 2025
a4897a6
Fixes a bug where the out-of-the-box core web vital metrics would thr…
raymondlam Jul 22, 2025
b9209dc
fix(app-check): Prevent redundant exchangeToken calls in debug mode (…
nicole0707 Jul 29, 2025
4923537
Update BrowsersList DB (#9188)
dlarocque Jul 31, 2025
e25317f
Firebase AI Hybrid Inference Implementation (#9029)
gsiddh Aug 6, 2025
b4d65ab
Merge main into release
google-oss-bot Aug 6, 2025
44d8d74
Version Packages (#9195)
google-oss-bot Aug 7, 2025
cc605e7
Backfill fixes for hybrid docs (#9197)
hsubox76 Aug 8, 2025
5501791
Fix Firebase Functions Emulator usage on Firebase Studio (#9204)
maneesht Aug 13, 2025
2058432
fix(firestore): fix empty message reject inside transaction body (#9177)
cherylEnkidu Aug 18, 2025
02280d7
Add limitedUseToken option to AI SDK (#9201)
hsubox76 Aug 20, 2025
9b63cd6
[Firebase AI] Add thought summary and signature support (#9192)
andrewheard Aug 20, 2025
84b8bed
fix(ai): Only include unexpected `prediction` element in error messag…
dlarocque Aug 21, 2025
c5f08a9
fix(ai): Add `'includeSafetyAttributes'` to Predict request payloads …
dlarocque Aug 21, 2025
cbef6c6
fix(ai): keep window-specific code out of Node bundle (#9225)
hsubox76 Aug 26, 2025
984086b
feat(ai): add support for the Live API (#9224)
dlarocque Aug 27, 2025
72b43d0
Merge main into release
google-oss-bot Aug 27, 2025
f2ecae7
Version Packages (#9230)
google-oss-bot Aug 28, 2025
095c098
remove accidental factory export (#9232)
hsubox76 Aug 28, 2025
3d07bad
Merge main into release
google-oss-bot Aug 28, 2025
4d834de
Version Packages (#9233)
google-oss-bot Aug 29, 2025
a4848b4
fix(ai): Fix test script broken by #9232 (#9235)
hsubox76 Sep 2, 2025
55f3f83
Update CHANGELOG.md (#9237)
daymxn Sep 4, 2025
06ab5c4
feat(ai): Add prefer_in_cloud option for inference mode (#9236)
hsubox76 Sep 9, 2025
120a308
Remote Config Realtime for Web (#9221)
tusharkhandelwal8 Sep 12, 2025
9b8ab02
feat(ai): Add code execution (#9249)
hsubox76 Sep 15, 2025
43276b0
chore(firestore): Update closure-net dependency to the latest release…
MarkDuckworth Sep 16, 2025
c123766
Change documentation tags for hybrid inference from EXPERIMENTAL to p…
hsubox76 Sep 17, 2025
37f9ef5
Merge main into release
google-oss-bot Sep 17, 2025
6ab71fa
docs: Fix docgen script to clean out package temp folders first (#9250)
hsubox76 Sep 18, 2025
8d3211b
Version Packages (#9258)
google-oss-bot Sep 18, 2025
cb3bdd8
Merge branch 'release'
hsubox76 Sep 18, 2025
1bcf83d
Expose setUserProperties from internal analytics instance (#9263)
hsubox76 Sep 24, 2025
0ffcb26
feat(ai): add support for URL context (#9254)
dlarocque Sep 25, 2025
7a7634f
docs(ai): tag code execution with "beta" tag (public preview) (#9274)
hsubox76 Sep 25, 2025
ea85128
fix(ai): Handle empty parts when streaming (#9262)
hsubox76 Sep 29, 2025
0bb2fe6
feat(ai): Add method to send function responses in a live session (#9…
dlarocque Sep 29, 2025
ccbf7ba
Update ai model name used for e2e tests (#9282)
hsubox76 Sep 29, 2025
2802f8a
Merge branch 'main' of github.com:firebase/firebase-js-sdk into feat/…
MarkDuckworth Sep 29, 2025
2596dd1
docs(ai): promote gemini developer api and imagen to GA (#9255)
dlarocque Oct 7, 2025
c1ffe3e
Merge main into release
google-oss-bot Oct 7, 2025
c407cb9
Implementing features from API audit and node backport (#9284)
MarkDuckworth Oct 8, 2025
b7e18d0
Version Packages (#9300) release v12.4.0
google-oss-bot Oct 9, 2025
beda76e
Fix pipelines CI (#9306)
MarkDuckworth Oct 9, 2025
3456581
fix typings:public script for firestore
MarkDuckworth Oct 10, 2025
d34d930
only run pipeline tests when pointing to the enterprise db
MarkDuckworth Oct 9, 2025
2615081
fix(auth): export MISSING_PASSWORD in AuthErrorCodes (#9297)
Navya-arugonda Oct 10, 2025
a11ea79
dist/firestore/src/global_index.d.ts now includes pipelines in namesp…
MarkDuckworth Oct 15, 2025
d175049
Update global.ts
MarkDuckworth Oct 15, 2025
5fb6ebe
Custom replacer plugin to remove declare module block from global.d.ts
MarkDuckworth Oct 15, 2025
c8263c4
feat(ai): make generateContent methods return inferenceSource (#9315)
hsubox76 Oct 16, 2025
d705208
Update CDN and g3 builds of Firestore to include Pipelines in the fir…
MarkDuckworth Oct 16, 2025
31535d9
Updated CDN bundles so that firebase-firestore.js is not modified, bu…
MarkDuckworth Oct 16, 2025
a78b761
Fix regression in _internalPipelineToExecutePipelineRequestProto
MarkDuckworth Oct 16, 2025
cdfc931
Fixing missing paths in package.json
MarkDuckworth Oct 17, 2025
54a17c6
Fix binary size script
MarkDuckworth Oct 17, 2025
81698f9
Add support for index.cdn.ts files in packages/firebase. Then added a…
MarkDuckworth Oct 17, 2025
adba599
send api key to DBE requests (#9331)
MarkDuckworth Oct 20, 2025
6251400
send api key to DBE requests (#9331)
MarkDuckworth Oct 20, 2025
44d9891
Fix logic for merging default onDeviceParams with user-provided onDev…
hsubox76 Oct 20, 2025
91c218d
feat(auth): export beta tagged symbols to public typings (#9313)
hsubox76 Oct 20, 2025
22e0a1a
feat(ai): Add `LiveSession` realtime APIs (#9291)
dlarocque Oct 20, 2025
637027a
Rename grpc_connection.node.test.ts, so the file is filtered from bro…
MarkDuckworth Oct 20, 2025
8209266
test(ai): Update mock responses to v15 (#9328)
dlarocque Oct 21, 2025
0ec6389
backport fixes in the console to feat/pipelines (#9340)
MarkDuckworth Oct 22, 2025
bc5a7c4
feat(ai): Add Live API transcriptions (#9330)
dlarocque Oct 28, 2025
07ca9c6
Throw on duplicate alias (#9343)
MarkDuckworth Oct 28, 2025
0b2845a
Pipeline fix tests and exports (#9342)
MarkDuckworth Oct 28, 2025
e397749
Merge main into release
google-oss-bot Oct 28, 2025
6e0e303
test(ai): Fix node tests (#9350)
hsubox76 Oct 28, 2025
319a396
Add support for sending the API key for web channel streams (#9354)
MarkDuckworth Oct 29, 2025
0aca735
Merge branch 'main' of github.com:firebase/firebase-js-sdk into feat/…
MarkDuckworth Oct 29, 2025
5623923
Merge branch 'feat/pipelines' into markduckworth/g3-import-firestore-…
MarkDuckworth Oct 29, 2025
3f8d12e
fixes
MarkDuckworth Oct 29, 2025
3dc7b96
add beta tags to pipelines api. Add missing tsdoc comments
MarkDuckworth Oct 29, 2025
d571641
Yarn format
MarkDuckworth Oct 29, 2025
1f44435
Version Packages (#9353)
google-oss-bot Oct 30, 2025
63167c6
Merge branch 'release'
dlarocque Oct 30, 2025
c47bd71
Fixed onComplete for FDC (#9349)
maneesht Oct 30, 2025
8512f64
add functions timestampTrunc, split, and type
MarkDuckworth Oct 31, 2025
29e1965
Add valueToTrim parameter to trim
MarkDuckworth Oct 31, 2025
f607f00
pass value to trim
MarkDuckworth Oct 31, 2025
d3eed35
Add Bytes to arg type for trim
MarkDuckworth Oct 31, 2025
5206828
clean up integration tests so they pass in classic and enterprise DBs
MarkDuckworth Nov 3, 2025
659ee21
Merge branch 'main' of github.com:firebase/firebase-js-sdk into feat/…
MarkDuckworth Nov 3, 2025
7fea6f4
Missing file
MarkDuckworth Nov 3, 2025
8561514
cleanup
MarkDuckworth Nov 3, 2025
f9c4cde
Fix api review files and missing export TimeGranularity
MarkDuckworth Nov 5, 2025
0800a8b
test(ai): do not run browser tests when debugging node tests (#9363)
dlarocque Nov 5, 2025
e4cdd2e
fixed private constructor on aggregatefunction
MarkDuckworth Nov 5, 2025
f4c72a7
Add _fieldsProto() method to snapshot and result classes for console …
MarkDuckworth Nov 10, 2025
20c7bdb
Merge branch 'feat/pipelines' into markduckworth/g3-import-firestore-…
MarkDuckworth Nov 10, 2025
6abe529
feat(rc): Web support for ABT & Rollouts (#9293)
athiramanu Nov 11, 2025
f06cbf9
feat(ai): server prompt templates (#9351)
dlarocque Nov 12, 2025
5c35f51
Revert "feat(rc): Web support for ABT & Rollouts (#9293)" (#9374)
hsubox76 Nov 12, 2025
ca4a66c
Merge main into release
google-oss-bot Nov 12, 2025
180b1ad
Fix functions deploy by upgrading to node 20 (#9377)
hsubox76 Nov 13, 2025
48c7dcd
Merge main into release
google-oss-bot Nov 13, 2025
b228a2a
test(ai): update vertex ai live model name (#9376)
dlarocque Nov 13, 2025
c77c9df
Version Packages (#9375)
google-oss-bot Nov 13, 2025
578686b
Merge branch 'release'
hsubox76 Nov 13, 2025
2a895ba
Refactoring rollup plugin to extract the contents of the database mod…
MarkDuckworth Nov 13, 2025
6d76280
Exporting proto types that are access directly by the console.
MarkDuckworth Nov 14, 2025
f817c54
Release 12.6.0 - Merge branch 'main' of github.com:firebase/firebase-…
MarkDuckworth Nov 14, 2025
299f614
Merge branch 'feat/pipelines' into markduckworth/g3-import-firestore-…
MarkDuckworth Nov 14, 2025
a4685f6
fixed regex in rollup plugin
MarkDuckworth Nov 14, 2025
5a760b4
add missing copyright header
MarkDuckworth Nov 14, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 21 additions & 0 deletions packages/firebase/firestore/pipelines/index.cdn.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
/**
* @license
* Copyright 2024 Google LLC
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

export * from '@firebase/firestore';

import * as pipelines from '@firebase/firestore/pipelines';
export { pipelines };
2 changes: 1 addition & 1 deletion packages/firebase/gulpfile.js
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ const replace = require('gulp-replace');

const pkgJson = require('./package.json');
const files = pkgJson.components.map(component => {
const componentName = component.replace('/', '-');
const componentName = component.replaceAll('/', '-');
return `firebase-${componentName}.js`;
});
const FIREBASE_APP_URL = `https://www.gstatic.com/firebasejs/${pkgJson.version}/firebase-app.js`;
Expand Down
2 changes: 1 addition & 1 deletion packages/firebase/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -476,8 +476,8 @@
"auth/web-extension",
"functions",
"firestore",
"firestore/pipelines",
"firestore/lite",
"firestore/pipelines",
"firestore/lite/pipelines",
"installations",
"storage",
Expand Down
7 changes: 5 additions & 2 deletions packages/firebase/rollup.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import commonjs from '@rollup/plugin-commonjs';
import json from '@rollup/plugin-json';
import pkg from './package.json';
import { resolve } from 'path';
import { existsSync } from 'fs';
import resolveModule from '@rollup/plugin-node-resolve';
import rollupTypescriptPlugin from 'rollup-plugin-typescript2';
import sourcemaps from 'rollup-plugin-sourcemaps';
Expand Down Expand Up @@ -149,10 +150,12 @@ const cdnBuilds = [
.map(component => {
// It is needed for handling sub modules, for example firestore/lite which should produce firebase-firestore-lite.js
// Otherwise, we will create a directory with '/' in the name.
const componentName = component.replace('/', '-');
const componentName = component.replaceAll('/', '-');

return {
input: `${component}/index.ts`,
input: existsSync(`${component}/index.cdn.ts`)
? `${component}/index.cdn.ts`
: `${component}/index.ts`,
output: {
file: `firebase-${componentName}.js`,
sourcemap: true,
Expand Down
35 changes: 33 additions & 2 deletions packages/firestore/rollup.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,35 @@ const browserPlugins = [
terser(util.manglePrivatePropertiesOptions)
];

// TODO - update the implementation to match all content in the declare module block.
function declareModuleReplacePlugin() {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

All our custom rollup plugins exist in scripts/build. Can you move this plugin to a new file in that directory?

// The regex we created earlier
const moduleToReplace =
/declare module '\.\/\S+' \{\s+interface Firestore \{\s+pipeline\(\): PipelineSource<Pipeline>;\s+}\s*}/gm;

// What to replace it with (an empty string to remove it)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

These comments seem out of date. Can you update them?

const replacement =
'interface Firestore {pipeline(): PipelineSource<Pipeline>;}';

return {
name: 'declare-module-replace',
generateBundle(options, bundle) {
const outputFileName = 'global_index.d.ts';
if (!bundle[outputFileName]) {
console.warn(
`[regexReplacePlugin] File not found in bundle: ${outputFileName}`
);
return;
}

const chunk = bundle[outputFileName];
if (chunk.type === 'chunk') {
chunk.code = chunk.code.replace(moduleToReplace, replacement);
}
}
};
}

const allBuilds = [
// Intermediate Node ESM build without build target reporting
// this is an intermediate build used to generate the actual esm and cjs builds
Expand Down Expand Up @@ -214,15 +243,17 @@ const allBuilds = [
}
},
{
input: 'dist/firestore/src/index.d.ts',
input: 'dist/firestore/src/global.d.ts',
output: {
file: 'dist/firestore/src/global_index.d.ts',
format: 'es'
},
plugins: [
dts({
respectExternal: true
})
}),

declareModuleReplacePlugin()
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's not obvious why this plugin is necessary. Can you add comments explaining the problem this solves?

]
}
];
Expand Down
1 change: 1 addition & 0 deletions packages/firestore/src/api/database.ts
Original file line number Diff line number Diff line change
Expand Up @@ -302,6 +302,7 @@ export function configureFirestore(firestore: Firestore): void {
firestore._databaseId,
firestore._app?.options.appId || '',
firestore._persistenceKey,
firestore._app?.options.apiKey,
settings
);
if (!firestore._componentsProvider) {
Expand Down
3 changes: 2 additions & 1 deletion packages/firestore/src/core/database_info.ts
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,8 @@ export class DatabaseInfo {
readonly autoDetectLongPolling: boolean,
readonly longPollingOptions: ExperimentalLongPollingOptions,
readonly useFetchStreams: boolean,
readonly isUsingEmulator: boolean
readonly isUsingEmulator: boolean,
readonly apiKey: string | undefined
) {}
}

Expand Down
8 changes: 6 additions & 2 deletions packages/firestore/src/core/firestore_client.ts
Original file line number Diff line number Diff line change
Expand Up @@ -146,7 +146,11 @@ export class FirestoreClient {
* an async I/O to complete).
*/
public asyncQueue: AsyncQueue,
private databaseInfo: DatabaseInfo,
/**
* @internal
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think @internal is necessary here, since FirestoreClient is not a public API.

* Exposed for testing
*/
public _databaseInfo: DatabaseInfo,
componentProvider?: {
_offline: OfflineComponentProvider;
_online: OnlineComponentProvider;
Expand All @@ -167,7 +171,7 @@ export class FirestoreClient {
get configuration(): ComponentConfiguration {
return {
asyncQueue: this.asyncQueue,
databaseInfo: this.databaseInfo,
databaseInfo: this._databaseInfo,
clientId: this.clientId,
authCredentials: this.authCredentials,
appCheckCredentials: this.appCheckCredentials,
Expand Down
23 changes: 23 additions & 0 deletions packages/firestore/src/global.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
/**
* @license
* Copyright 2025 Google LLC
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

// This file supports a special internal build that includes the entire
// Firestore classic and pipeline api surface in one bundle.

import * as pipelines from './api_pipelines';
export * from './api';
export { pipelines };
5 changes: 4 additions & 1 deletion packages/firestore/src/lite-api/components.ts
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,7 @@ export function getDatastore(firestore: FirestoreService): Datastore {
firestore._databaseId,
firestore.app.options.appId || '',
firestore._persistenceKey,
firestore.app.options.apiKey,
firestore._freezeSettings()
);
const connection = newConnection(databaseInfo);
Expand Down Expand Up @@ -108,6 +109,7 @@ export function makeDatabaseInfo(
databaseId: DatabaseId,
appId: string,
persistenceKey: string,
apiKey: string | undefined,
settings: FirestoreSettingsImpl
): DatabaseInfo {
return new DatabaseInfo(
Expand All @@ -120,6 +122,7 @@ export function makeDatabaseInfo(
settings.experimentalAutoDetectLongPolling,
cloneLongPollingOptions(settings.experimentalLongPollingOptions),
settings.useFetchStreams,
settings.isUsingEmulator
settings.isUsingEmulator,
apiKey
);
}
18 changes: 13 additions & 5 deletions packages/firestore/src/platform/node/grpc_connection.ts
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,8 @@ function createMetadata(
databasePath: string,
authToken: Token | null,
appCheckToken: Token | null,
appId: string
appId: string,
apiKey: string | undefined
): grpc.Metadata {
hardAssert(
authToken === null || authToken.type === 'OAuth',
Expand All @@ -69,6 +70,9 @@ function createMetadata(
// 11 from Google3.
metadata.set('Google-Cloud-Resource-Prefix', databasePath);
metadata.set('x-goog-request-params', databasePath);
if (apiKey) {
metadata.set('X-Goog-Api-Key', apiKey);
}
return metadata;
}

Expand Down Expand Up @@ -100,7 +104,8 @@ export class GrpcConnection implements Connection {
this.databasePath = `projects/${databaseInfo.databaseId.projectId}/databases/${databaseInfo.databaseId.database}`;
}

private ensureActiveStub(): GeneratedGrpcStub {
/** made protected for testing */
protected ensureActiveStub(): GeneratedGrpcStub {
if (!this.cachedStub) {
logDebug(LOG_TAG, 'Creating Firestore stub.');
const credentials = this.databaseInfo.ssl
Expand All @@ -127,7 +132,8 @@ export class GrpcConnection implements Connection {
this.databasePath,
authToken,
appCheckToken,
this.databaseInfo.appId
this.databaseInfo.appId,
this.databaseInfo.apiKey
);
const jsonRequest = { database: this.databasePath, ...request };

Expand Down Expand Up @@ -187,7 +193,8 @@ export class GrpcConnection implements Connection {
this.databasePath,
authToken,
appCheckToken,
this.databaseInfo.appId
this.databaseInfo.appId,
this.databaseInfo.apiKey
);
const jsonRequest = { ...request, database: this.databasePath };
const stream = stub[rpcName](jsonRequest, metadata);
Expand Down Expand Up @@ -239,7 +246,8 @@ export class GrpcConnection implements Connection {
this.databasePath,
authToken,
appCheckToken,
this.databaseInfo.appId
this.databaseInfo.appId,
this.databaseInfo.apiKey
);
const grpcStream = stub[rpcName](metadata);

Expand Down
23 changes: 21 additions & 2 deletions packages/firestore/src/remote/internal_serializer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,14 +18,23 @@
import { ensureFirestoreConfigured, Firestore } from '../api/database';
import { AggregateImpl } from '../core/aggregate';
import { queryToAggregateTarget, queryToTarget } from '../core/query';
import {
StructuredPipeline,
StructuredPipelineOptions
} from '../core/structured_pipeline';
import { AggregateSpec } from '../lite-api/aggregate_types';
import { getDatastore } from '../lite-api/components';
import { Pipeline } from '../lite-api/pipeline';
import { Query } from '../lite-api/reference';
import { ExecutePipelineRequest as ProtoExecutePipelineRequest } from '../protos/firestore_proto_api';
import { cast } from '../util/input_validation';
import { mapToArray } from '../util/obj';

import { toQueryTarget, toRunAggregationQueryRequest } from './serializer';
import {
getEncodedDatabaseId,
toQueryTarget,
toRunAggregationQueryRequest
} from './serializer';

/**
* @internal
Expand Down Expand Up @@ -112,5 +121,15 @@ export function _internalPipelineToExecutePipelineRequestProto(
if (serializer === undefined) {
return null;
}
return pipeline._toProto(serializer);

const structuredPipeline = new StructuredPipeline(
pipeline,
new StructuredPipelineOptions()
);
const executePipelineRequest: ProtoExecutePipelineRequest = {
database: getEncodedDatabaseId(serializer),
structuredPipeline: structuredPipeline._toProto(serializer)
};

return executePipelineRequest;
}
10 changes: 8 additions & 2 deletions packages/firestore/src/remote/rest_connection.ts
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@ export abstract class RestConnection implements Connection {
protected readonly baseUrl: string;
private readonly databasePath: string;
private readonly requestParams: string;
private readonly apiKey: string | undefined;

get shouldResourcePathBeIncludedInRequest(): boolean {
// Both `invokeRPC()` and `invokeStreamingRPC()` use their `path` arguments to determine
Expand All @@ -82,6 +83,7 @@ export abstract class RestConnection implements Connection {
this.databaseId.database === DEFAULT_DATABASE_NAME
? `project_id=${projectId}`
: `project_id=${projectId}&database_id=${databaseId}`;
this.apiKey = databaseInfo.apiKey;
}

invokeRPC<Req, Resp>(
Expand Down Expand Up @@ -194,13 +196,17 @@ export abstract class RestConnection implements Connection {
_forwardCredentials: boolean
): Promise<Resp>;

private makeUrl(rpcName: string, path: string): string {
protected makeUrl(rpcName: string, path: string): string {
const urlRpcName = RPC_NAME_URL_MAPPING[rpcName];
debugAssert(
urlRpcName !== undefined,
'Unknown REST mapping for: ' + rpcName
);
return `${this.baseUrl}/${RPC_URL_VERSION}/${path}:${urlRpcName}`;
let url = `${this.baseUrl}/${RPC_URL_VERSION}/${path}:${urlRpcName}`;
if (this.apiKey) {
url = `${url}?key=${encodeURIComponent(this.apiKey)}`;
}
return url;
}

/**
Expand Down
17 changes: 9 additions & 8 deletions packages/firestore/test/integration/api/pipeline.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -346,18 +346,19 @@ const timestampDeltaMS = 1000;

describe('console support', () => {
it('supports internal serialization to proto', async () => {
// Perform the same test as the console
const pipeline = firestore
.pipeline()
.collection('books')
.where(equal('awards.hugo', true))
.select(
'title',
field('nestedField.level.1'),
mapGet('nestedField', 'level.1').mapGet('level.2').as('nested')
);
.collection('customers')
.where(field('country').equal('United Kingdom'));

const proto = _internalPipelineToExecutePipelineRequestProto(pipeline);
expect(proto).not.to.be.null;

const expectedStructuredPipelineProto =
'{"pipeline":{"stages":[{"name":"collection","options":{},"args":[{"referenceValue":"/customers"}]},{"name":"where","options":{},"args":[{"functionValue":{"name":"equal","args":[{"fieldReferenceValue":"country"},{"stringValue":"United Kingdom"}]}}]}]}}';
expect(JSON.stringify(proto.structuredPipeline)).to.equal(
expectedStructuredPipelineProto
);
});
});

Expand Down
Loading
Loading