firebase-admin-edge 1.1.1 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (481) hide show
  1. package/README.md +103 -260
  2. package/dist/app-check/app-check-endpoints.d.ts +31 -0
  3. package/dist/app-check/app-check-endpoints.d.ts.map +1 -0
  4. package/dist/app-check/app-check-endpoints.js +75 -0
  5. package/dist/app-check/app-check-endpoints.js.map +1 -0
  6. package/dist/app-check/app-check-jwt.d.ts +16 -0
  7. package/dist/app-check/app-check-jwt.d.ts.map +1 -0
  8. package/dist/app-check/app-check-jwt.js +59 -0
  9. package/dist/app-check/app-check-jwt.js.map +1 -0
  10. package/dist/app-check/app-check.d.ts +48 -0
  11. package/dist/app-check/app-check.d.ts.map +1 -0
  12. package/dist/app-check/app-check.js +142 -0
  13. package/dist/app-check/app-check.js.map +1 -0
  14. package/dist/auth/auth-blocking-types.d.ts +44 -0
  15. package/dist/auth/auth-blocking-types.d.ts.map +1 -0
  16. package/dist/auth/auth-blocking-types.js +2 -0
  17. package/dist/auth/auth-blocking-types.js.map +1 -0
  18. package/dist/auth/auth-config-types.d.ts +146 -0
  19. package/dist/auth/auth-config-types.d.ts.map +1 -0
  20. package/dist/auth/auth-config-types.js +2 -0
  21. package/dist/auth/auth-config-types.js.map +1 -0
  22. package/dist/auth/auth-config.d.ts +15 -0
  23. package/dist/auth/auth-config.d.ts.map +1 -0
  24. package/dist/auth/auth-config.js +413 -0
  25. package/dist/auth/auth-config.js.map +1 -0
  26. package/dist/auth/auth-emulator.d.ts +7 -0
  27. package/dist/auth/auth-emulator.d.ts.map +1 -0
  28. package/dist/auth/auth-emulator.js +24 -0
  29. package/dist/auth/auth-emulator.js.map +1 -0
  30. package/dist/auth/auth-endpoint-errors.d.ts +2 -0
  31. package/dist/auth/auth-endpoint-errors.d.ts.map +1 -1
  32. package/dist/auth/auth-endpoint-errors.js +20 -1
  33. package/dist/auth/auth-endpoint-errors.js.map +1 -1
  34. package/dist/auth/email-link.d.ts +24 -0
  35. package/dist/auth/email-link.d.ts.map +1 -0
  36. package/dist/auth/email-link.js +103 -0
  37. package/dist/auth/email-link.js.map +1 -0
  38. package/dist/auth/firebase-admin-auth.d.ts +56 -8
  39. package/dist/auth/firebase-admin-auth.d.ts.map +1 -1
  40. package/dist/auth/firebase-admin-auth.js +323 -63
  41. package/dist/auth/firebase-admin-auth.js.map +1 -1
  42. package/dist/auth/firebase-auth-endpoints.d.ts +93 -5
  43. package/dist/auth/firebase-auth-endpoints.d.ts.map +1 -1
  44. package/dist/auth/firebase-auth-endpoints.js +342 -73
  45. package/dist/auth/firebase-auth-endpoints.js.map +1 -1
  46. package/dist/auth/firebase-auth.d.ts +82 -6
  47. package/dist/auth/firebase-auth.d.ts.map +1 -1
  48. package/dist/auth/firebase-auth.js +103 -10
  49. package/dist/auth/firebase-auth.js.map +1 -1
  50. package/dist/auth/firebase-jwt.d.ts +19 -10
  51. package/dist/auth/firebase-jwt.d.ts.map +1 -1
  52. package/dist/auth/firebase-jwt.js +176 -39
  53. package/dist/auth/firebase-jwt.js.map +1 -1
  54. package/dist/auth/firebase-types.d.ts +3 -0
  55. package/dist/auth/firebase-types.d.ts.map +1 -1
  56. package/dist/auth/google-oauth.d.ts +0 -1
  57. package/dist/auth/google-oauth.d.ts.map +1 -1
  58. package/dist/auth/google-oauth.js +16 -86
  59. package/dist/auth/google-oauth.js.map +1 -1
  60. package/dist/auth/identity-builder-types.d.ts +36 -0
  61. package/dist/auth/identity-builder-types.d.ts.map +1 -0
  62. package/dist/auth/identity-builder-types.js +2 -0
  63. package/dist/auth/identity-builder-types.js.map +1 -0
  64. package/dist/auth/identity-count-query.d.ts +17 -0
  65. package/dist/auth/identity-count-query.d.ts.map +1 -0
  66. package/dist/auth/identity-count-query.js +51 -0
  67. package/dist/auth/identity-count-query.js.map +1 -0
  68. package/dist/auth/identity-filter.d.ts +9 -0
  69. package/dist/auth/identity-filter.d.ts.map +1 -0
  70. package/dist/auth/identity-filter.js +129 -0
  71. package/dist/auth/identity-filter.js.map +1 -0
  72. package/dist/auth/identity-query.d.ts +11 -0
  73. package/dist/auth/identity-query.d.ts.map +1 -0
  74. package/dist/auth/identity-query.js +122 -0
  75. package/dist/auth/identity-query.js.map +1 -0
  76. package/dist/auth/identity-reference.d.ts +131 -0
  77. package/dist/auth/identity-reference.d.ts.map +1 -0
  78. package/dist/auth/identity-reference.js +293 -0
  79. package/dist/auth/identity-reference.js.map +1 -0
  80. package/dist/auth/identity-types.d.ts +44 -0
  81. package/dist/auth/identity-types.d.ts.map +1 -0
  82. package/dist/auth/identity-types.js +2 -0
  83. package/dist/auth/identity-types.js.map +1 -0
  84. package/dist/auth/identity-write.d.ts +41 -0
  85. package/dist/auth/identity-write.d.ts.map +1 -0
  86. package/dist/auth/identity-write.js +146 -0
  87. package/dist/auth/identity-write.js.map +1 -0
  88. package/dist/auth/identity.d.ts +84 -0
  89. package/dist/auth/identity.d.ts.map +1 -0
  90. package/dist/auth/identity.js +319 -0
  91. package/dist/auth/identity.js.map +1 -0
  92. package/dist/auth/project-config-manager.d.ts +10 -0
  93. package/dist/auth/project-config-manager.d.ts.map +1 -0
  94. package/dist/auth/project-config-manager.js +22 -0
  95. package/dist/auth/project-config-manager.js.map +1 -0
  96. package/dist/auth/provider-credential.d.ts +43 -0
  97. package/dist/auth/provider-credential.d.ts.map +1 -0
  98. package/dist/auth/provider-credential.js +107 -0
  99. package/dist/auth/provider-credential.js.map +1 -0
  100. package/dist/auth/provider-session.d.ts +10 -0
  101. package/dist/auth/provider-session.d.ts.map +1 -0
  102. package/dist/auth/provider-session.js +28 -0
  103. package/dist/auth/provider-session.js.map +1 -0
  104. package/dist/auth/tenant-manager.d.ts +17 -0
  105. package/dist/auth/tenant-manager.d.ts.map +1 -0
  106. package/dist/auth/tenant-manager.js +59 -0
  107. package/dist/auth/tenant-manager.js.map +1 -0
  108. package/dist/auth/user-import.d.ts +7 -1
  109. package/dist/auth/user-import.d.ts.map +1 -1
  110. package/dist/auth/user-import.js +53 -15
  111. package/dist/auth/user-import.js.map +1 -1
  112. package/dist/auth/user-record.d.ts +1 -0
  113. package/dist/auth/user-record.d.ts.map +1 -1
  114. package/dist/auth/user-record.js +5 -0
  115. package/dist/auth/user-record.js.map +1 -1
  116. package/dist/auth/user-request.d.ts +4 -1
  117. package/dist/auth/user-request.d.ts.map +1 -1
  118. package/dist/auth/user-request.js +7 -4
  119. package/dist/auth/user-request.js.map +1 -1
  120. package/dist/db/aggregate.d.ts +49 -0
  121. package/dist/db/aggregate.d.ts.map +1 -0
  122. package/dist/db/aggregate.js +115 -0
  123. package/dist/db/aggregate.js.map +1 -0
  124. package/dist/db/bulk-writer.d.ts +55 -0
  125. package/dist/db/bulk-writer.d.ts.map +1 -0
  126. package/dist/db/bulk-writer.js +257 -0
  127. package/dist/db/bulk-writer.js.map +1 -0
  128. package/dist/db/bundle-builder.d.ts +17 -0
  129. package/dist/db/bundle-builder.d.ts.map +1 -0
  130. package/dist/db/bundle-builder.js +118 -0
  131. package/dist/db/bundle-builder.js.map +1 -0
  132. package/dist/db/bytes.d.ts +12 -0
  133. package/dist/db/bytes.d.ts.map +1 -0
  134. package/dist/db/bytes.js +49 -0
  135. package/dist/db/bytes.js.map +1 -0
  136. package/dist/db/collection-group.d.ts +14 -0
  137. package/dist/db/collection-group.d.ts.map +1 -0
  138. package/dist/db/collection-group.js +43 -0
  139. package/dist/db/collection-group.js.map +1 -0
  140. package/dist/db/collection-reference.d.ts +21 -0
  141. package/dist/db/collection-reference.d.ts.map +1 -0
  142. package/dist/db/collection-reference.js +46 -0
  143. package/dist/db/collection-reference.js.map +1 -0
  144. package/dist/db/document-reference.d.ts +41 -0
  145. package/dist/db/document-reference.d.ts.map +1 -0
  146. package/dist/db/document-reference.js +125 -0
  147. package/dist/db/document-reference.js.map +1 -0
  148. package/dist/db/document-snapshot.d.ts +31 -0
  149. package/dist/db/document-snapshot.d.ts.map +1 -0
  150. package/dist/db/document-snapshot.js +103 -0
  151. package/dist/db/document-snapshot.js.map +1 -0
  152. package/dist/db/explain.d.ts +28 -0
  153. package/dist/db/explain.d.ts.map +1 -0
  154. package/dist/db/explain.js +61 -0
  155. package/dist/db/explain.js.map +1 -0
  156. package/dist/db/field-path.d.ts +10 -0
  157. package/dist/db/field-path.d.ts.map +1 -0
  158. package/dist/db/field-path.js +65 -0
  159. package/dist/db/field-path.js.map +1 -0
  160. package/dist/db/field-value.d.ts +17 -0
  161. package/dist/db/field-value.d.ts.map +1 -0
  162. package/dist/db/field-value.js +57 -0
  163. package/dist/db/field-value.js.map +1 -0
  164. package/dist/db/filter.d.ts +20 -0
  165. package/dist/db/filter.d.ts.map +1 -0
  166. package/dist/db/filter.js +48 -0
  167. package/dist/db/filter.js.map +1 -0
  168. package/dist/db/firestore-converter.d.ts +11 -0
  169. package/dist/db/firestore-converter.d.ts.map +1 -0
  170. package/dist/db/firestore-converter.js +14 -0
  171. package/dist/db/firestore-converter.js.map +1 -0
  172. package/dist/db/firestore-document.d.ts +62 -0
  173. package/dist/db/firestore-document.d.ts.map +1 -0
  174. package/dist/db/firestore-document.js +238 -0
  175. package/dist/db/firestore-document.js.map +1 -0
  176. package/dist/db/firestore-endpoints.d.ts +41 -0
  177. package/dist/db/firestore-endpoints.d.ts.map +1 -0
  178. package/dist/db/firestore-endpoints.js +735 -0
  179. package/dist/db/firestore-endpoints.js.map +1 -0
  180. package/dist/db/firestore-error-codes.d.ts +24 -0
  181. package/dist/db/firestore-error-codes.d.ts.map +1 -0
  182. package/dist/db/firestore-error-codes.js +24 -0
  183. package/dist/db/firestore-error-codes.js.map +1 -0
  184. package/dist/db/firestore-logging.d.ts +23 -0
  185. package/dist/db/firestore-logging.d.ts.map +1 -0
  186. package/dist/db/firestore-logging.js +41 -0
  187. package/dist/db/firestore-logging.js.map +1 -0
  188. package/dist/db/firestore-path.d.ts +4 -0
  189. package/dist/db/firestore-path.d.ts.map +1 -0
  190. package/dist/db/firestore-path.js +37 -0
  191. package/dist/db/firestore-path.js.map +1 -0
  192. package/dist/db/firestore-results.d.ts +12 -0
  193. package/dist/db/firestore-results.d.ts.map +1 -0
  194. package/dist/db/firestore-results.js +19 -0
  195. package/dist/db/firestore-results.js.map +1 -0
  196. package/dist/db/firestore-settings.d.ts +22 -0
  197. package/dist/db/firestore-settings.d.ts.map +1 -0
  198. package/dist/db/firestore-settings.js +83 -0
  199. package/dist/db/firestore-settings.js.map +1 -0
  200. package/dist/db/firestore-telemetry.d.ts +21 -0
  201. package/dist/db/firestore-telemetry.d.ts.map +1 -0
  202. package/dist/db/firestore-telemetry.js +84 -0
  203. package/dist/db/firestore-telemetry.js.map +1 -0
  204. package/dist/db/firestore-types.d.ts +25 -0
  205. package/dist/db/firestore-types.d.ts.map +1 -0
  206. package/dist/db/firestore-types.js +2 -0
  207. package/dist/db/firestore-types.js.map +1 -0
  208. package/dist/db/firestore.d.ts +157 -0
  209. package/dist/db/firestore.d.ts.map +1 -0
  210. package/dist/db/firestore.js +513 -0
  211. package/dist/db/firestore.js.map +1 -0
  212. package/dist/db/geo-point.d.ts +11 -0
  213. package/dist/db/geo-point.d.ts.map +1 -0
  214. package/dist/db/geo-point.js +29 -0
  215. package/dist/db/geo-point.js.map +1 -0
  216. package/dist/db/json-stream.d.ts +3 -0
  217. package/dist/db/json-stream.d.ts.map +1 -0
  218. package/dist/db/json-stream.js +117 -0
  219. package/dist/db/json-stream.js.map +1 -0
  220. package/dist/db/pipeline-expression.d.ts +293 -0
  221. package/dist/db/pipeline-expression.d.ts.map +1 -0
  222. package/dist/db/pipeline-expression.js +1436 -0
  223. package/dist/db/pipeline-expression.js.map +1 -0
  224. package/dist/db/pipeline-query.d.ts +6 -0
  225. package/dist/db/pipeline-query.d.ts.map +1 -0
  226. package/dist/db/pipeline-query.js +91 -0
  227. package/dist/db/pipeline-query.js.map +1 -0
  228. package/dist/db/pipeline.d.ts +120 -0
  229. package/dist/db/pipeline.d.ts.map +1 -0
  230. package/dist/db/pipeline.js +396 -0
  231. package/dist/db/pipeline.js.map +1 -0
  232. package/dist/db/query-document-snapshot.d.ts +2 -0
  233. package/dist/db/query-document-snapshot.d.ts.map +1 -0
  234. package/dist/db/query-document-snapshot.js +2 -0
  235. package/dist/db/query-document-snapshot.js.map +1 -0
  236. package/dist/db/query-partition.d.ts +14 -0
  237. package/dist/db/query-partition.d.ts.map +1 -0
  238. package/dist/db/query-partition.js +32 -0
  239. package/dist/db/query-partition.js.map +1 -0
  240. package/dist/db/query-request.d.ts +96 -0
  241. package/dist/db/query-request.d.ts.map +1 -0
  242. package/dist/db/query-request.js +283 -0
  243. package/dist/db/query-request.js.map +1 -0
  244. package/dist/db/query.d.ts +129 -0
  245. package/dist/db/query.d.ts.map +1 -0
  246. package/dist/db/query.js +468 -0
  247. package/dist/db/query.js.map +1 -0
  248. package/dist/db/recursive-delete.d.ts +6 -0
  249. package/dist/db/recursive-delete.d.ts.map +1 -0
  250. package/dist/db/recursive-delete.js +38 -0
  251. package/dist/db/recursive-delete.js.map +1 -0
  252. package/dist/db/snapshot-listener.d.ts +10 -0
  253. package/dist/db/snapshot-listener.d.ts.map +1 -0
  254. package/dist/db/snapshot-listener.js +71 -0
  255. package/dist/db/snapshot-listener.js.map +1 -0
  256. package/dist/db/timestamp.d.ts +29 -0
  257. package/dist/db/timestamp.d.ts.map +1 -0
  258. package/dist/db/timestamp.js +98 -0
  259. package/dist/db/timestamp.js.map +1 -0
  260. package/dist/db/transaction.d.ts +44 -0
  261. package/dist/db/transaction.d.ts.map +1 -0
  262. package/dist/db/transaction.js +177 -0
  263. package/dist/db/transaction.js.map +1 -0
  264. package/dist/db/value-equality.d.ts +3 -0
  265. package/dist/db/value-equality.d.ts.map +1 -0
  266. package/dist/db/value-equality.js +29 -0
  267. package/dist/db/value-equality.js.map +1 -0
  268. package/dist/db/vector-query.d.ts +38 -0
  269. package/dist/db/vector-query.d.ts.map +1 -0
  270. package/dist/db/vector-query.js +110 -0
  271. package/dist/db/vector-query.js.map +1 -0
  272. package/dist/db/vector-value.d.ts +8 -0
  273. package/dist/db/vector-value.d.ts.map +1 -0
  274. package/dist/db/vector-value.js +25 -0
  275. package/dist/db/vector-value.js.map +1 -0
  276. package/dist/db/write-batch.d.ts +25 -0
  277. package/dist/db/write-batch.d.ts.map +1 -0
  278. package/dist/db/write-batch.js +72 -0
  279. package/dist/db/write-batch.js.map +1 -0
  280. package/dist/db/write-request.d.ts +36 -0
  281. package/dist/db/write-request.d.ts.map +1 -0
  282. package/dist/db/write-request.js +257 -0
  283. package/dist/db/write-request.js.map +1 -0
  284. package/dist/firebase-edge-server.d.ts +145 -36
  285. package/dist/firebase-edge-server.d.ts.map +1 -1
  286. package/dist/firebase-edge-server.js +495 -258
  287. package/dist/firebase-edge-server.js.map +1 -1
  288. package/dist/index.d.ts +7 -0
  289. package/dist/index.d.ts.map +1 -1
  290. package/dist/index.js +6 -0
  291. package/dist/index.js.map +1 -1
  292. package/dist/rest-fetch.d.ts +1 -1
  293. package/dist/rest-fetch.d.ts.map +1 -1
  294. package/dist/storage/storage-acl.d.ts +48 -0
  295. package/dist/storage/storage-acl.d.ts.map +1 -0
  296. package/dist/storage/storage-acl.js +101 -0
  297. package/dist/storage/storage-acl.js.map +1 -0
  298. package/dist/storage/storage-bucket-endpoints.d.ts +10 -0
  299. package/dist/storage/storage-bucket-endpoints.d.ts.map +1 -0
  300. package/dist/storage/storage-bucket-endpoints.js +514 -0
  301. package/dist/storage/storage-bucket-endpoints.js.map +1 -0
  302. package/dist/storage/storage-bucket-types.d.ts +183 -0
  303. package/dist/storage/storage-bucket-types.d.ts.map +1 -0
  304. package/dist/storage/storage-bucket-types.js +2 -0
  305. package/dist/storage/storage-bucket-types.js.map +1 -0
  306. package/dist/storage/storage-bucket.d.ts +122 -0
  307. package/dist/storage/storage-bucket.d.ts.map +1 -0
  308. package/dist/storage/storage-bucket.js +544 -0
  309. package/dist/storage/storage-bucket.js.map +1 -0
  310. package/dist/storage/storage-channel.d.ts +10 -0
  311. package/dist/storage/storage-channel.d.ts.map +1 -0
  312. package/dist/storage/storage-channel.js +15 -0
  313. package/dist/storage/storage-channel.js.map +1 -0
  314. package/dist/storage/storage-checksum.d.ts +35 -0
  315. package/dist/storage/storage-checksum.d.ts.map +1 -0
  316. package/dist/storage/storage-checksum.js +312 -0
  317. package/dist/storage/storage-checksum.js.map +1 -0
  318. package/dist/storage/storage-endpoints.d.ts +14 -0
  319. package/dist/storage/storage-endpoints.d.ts.map +1 -0
  320. package/dist/storage/storage-endpoints.js +721 -0
  321. package/dist/storage/storage-endpoints.js.map +1 -0
  322. package/dist/storage/storage-file.d.ts +126 -0
  323. package/dist/storage/storage-file.d.ts.map +1 -0
  324. package/dist/storage/storage-file.js +604 -0
  325. package/dist/storage/storage-file.js.map +1 -0
  326. package/dist/storage/storage-hmac-key.d.ts +26 -0
  327. package/dist/storage/storage-hmac-key.d.ts.map +1 -0
  328. package/dist/storage/storage-hmac-key.js +45 -0
  329. package/dist/storage/storage-hmac-key.js.map +1 -0
  330. package/dist/storage/storage-iam.d.ts +20 -0
  331. package/dist/storage/storage-iam.d.ts.map +1 -0
  332. package/dist/storage/storage-iam.js +43 -0
  333. package/dist/storage/storage-iam.js.map +1 -0
  334. package/dist/storage/storage-md5.d.ts +11 -0
  335. package/dist/storage/storage-md5.d.ts.map +1 -0
  336. package/dist/storage/storage-md5.js +96 -0
  337. package/dist/storage/storage-md5.js.map +1 -0
  338. package/dist/storage/storage-notification.d.ts +24 -0
  339. package/dist/storage/storage-notification.d.ts.map +1 -0
  340. package/dist/storage/storage-notification.js +40 -0
  341. package/dist/storage/storage-notification.js.map +1 -0
  342. package/dist/storage/storage-progress.d.ts +4 -0
  343. package/dist/storage/storage-progress.d.ts.map +1 -0
  344. package/dist/storage/storage-progress.js +17 -0
  345. package/dist/storage/storage-progress.js.map +1 -0
  346. package/dist/storage/storage-reference-endpoints.d.ts +63 -0
  347. package/dist/storage/storage-reference-endpoints.d.ts.map +1 -0
  348. package/dist/storage/storage-reference-endpoints.js +276 -0
  349. package/dist/storage/storage-reference-endpoints.js.map +1 -0
  350. package/dist/storage/storage-reference-helpers.d.ts +12 -0
  351. package/dist/storage/storage-reference-helpers.d.ts.map +1 -0
  352. package/dist/storage/storage-reference-helpers.js +72 -0
  353. package/dist/storage/storage-reference-helpers.js.map +1 -0
  354. package/dist/storage/storage-reference-signing.d.ts +40 -0
  355. package/dist/storage/storage-reference-signing.d.ts.map +1 -0
  356. package/dist/storage/storage-reference-signing.js +289 -0
  357. package/dist/storage/storage-reference-signing.js.map +1 -0
  358. package/dist/storage/storage-reference-types.d.ts +76 -0
  359. package/dist/storage/storage-reference-types.d.ts.map +1 -0
  360. package/dist/storage/storage-reference-types.js +2 -0
  361. package/dist/storage/storage-reference-types.js.map +1 -0
  362. package/dist/storage/storage-results.d.ts +8 -0
  363. package/dist/storage/storage-results.d.ts.map +1 -0
  364. package/dist/storage/storage-results.js +32 -0
  365. package/dist/storage/storage-results.js.map +1 -0
  366. package/dist/storage/storage-resumable.d.ts +18 -0
  367. package/dist/storage/storage-resumable.d.ts.map +1 -0
  368. package/dist/storage/storage-resumable.js +166 -0
  369. package/dist/storage/storage-resumable.js.map +1 -0
  370. package/dist/storage/storage-retry.d.ts +9 -0
  371. package/dist/storage/storage-retry.d.ts.map +1 -0
  372. package/dist/storage/storage-retry.js +104 -0
  373. package/dist/storage/storage-retry.js.map +1 -0
  374. package/dist/storage/storage-signed-url.d.ts +9 -0
  375. package/dist/storage/storage-signed-url.d.ts.map +1 -0
  376. package/dist/storage/storage-signed-url.js +96 -0
  377. package/dist/storage/storage-signed-url.js.map +1 -0
  378. package/dist/storage/storage-special-endpoints.d.ts +10 -0
  379. package/dist/storage/storage-special-endpoints.d.ts.map +1 -0
  380. package/dist/storage/storage-special-endpoints.js +394 -0
  381. package/dist/storage/storage-special-endpoints.js.map +1 -0
  382. package/dist/storage/storage-special-types.d.ts +154 -0
  383. package/dist/storage/storage-special-types.d.ts.map +1 -0
  384. package/dist/storage/storage-special-types.js +2 -0
  385. package/dist/storage/storage-special-types.js.map +1 -0
  386. package/dist/storage/storage-types.d.ts +251 -0
  387. package/dist/storage/storage-types.d.ts.map +1 -0
  388. package/dist/storage/storage-types.js +2 -0
  389. package/dist/storage/storage-types.js.map +1 -0
  390. package/dist/storage/storage-upload-stream.d.ts +41 -0
  391. package/dist/storage/storage-upload-stream.d.ts.map +1 -0
  392. package/dist/storage/storage-upload-stream.js +335 -0
  393. package/dist/storage/storage-upload-stream.js.map +1 -0
  394. package/dist/storage/storage-xml-signing.d.ts +17 -0
  395. package/dist/storage/storage-xml-signing.d.ts.map +1 -0
  396. package/dist/storage/storage-xml-signing.js +144 -0
  397. package/dist/storage/storage-xml-signing.js.map +1 -0
  398. package/dist/storage/storage.d.ts +159 -0
  399. package/dist/storage/storage.d.ts.map +1 -0
  400. package/dist/storage/storage.js +545 -0
  401. package/dist/storage/storage.js.map +1 -0
  402. package/dist/utils/token-cache.d.ts.map +1 -1
  403. package/dist/utils/token-cache.js +3 -2
  404. package/dist/utils/token-cache.js.map +1 -1
  405. package/package.json +24 -8
  406. package/dist/auth/auth-endpoint-errors.test.d.ts +0 -2
  407. package/dist/auth/auth-endpoint-errors.test.d.ts.map +0 -1
  408. package/dist/auth/auth-endpoint-errors.test.js +0 -411
  409. package/dist/auth/auth-endpoint-errors.test.js.map +0 -1
  410. package/dist/auth/email-action-request.test.d.ts +0 -2
  411. package/dist/auth/email-action-request.test.d.ts.map +0 -1
  412. package/dist/auth/email-action-request.test.js +0 -128
  413. package/dist/auth/email-action-request.test.js.map +0 -1
  414. package/dist/auth/errors.test.d.ts +0 -2
  415. package/dist/auth/errors.test.d.ts.map +0 -1
  416. package/dist/auth/errors.test.js +0 -123
  417. package/dist/auth/errors.test.js.map +0 -1
  418. package/dist/auth/firebase-admin-auth.test.d.ts +0 -2
  419. package/dist/auth/firebase-admin-auth.test.d.ts.map +0 -1
  420. package/dist/auth/firebase-admin-auth.test.js +0 -1542
  421. package/dist/auth/firebase-admin-auth.test.js.map +0 -1
  422. package/dist/auth/firebase-auth-endpoints.test.d.ts +0 -2
  423. package/dist/auth/firebase-auth-endpoints.test.d.ts.map +0 -1
  424. package/dist/auth/firebase-auth-endpoints.test.js +0 -1082
  425. package/dist/auth/firebase-auth-endpoints.test.js.map +0 -1
  426. package/dist/auth/firebase-auth.test.d.ts +0 -2
  427. package/dist/auth/firebase-auth.test.d.ts.map +0 -1
  428. package/dist/auth/firebase-auth.test.js +0 -167
  429. package/dist/auth/firebase-auth.test.js.map +0 -1
  430. package/dist/auth/firebase-jwt.test.d.ts +0 -2
  431. package/dist/auth/firebase-jwt.test.d.ts.map +0 -1
  432. package/dist/auth/firebase-jwt.test.js +0 -164
  433. package/dist/auth/firebase-jwt.test.js.map +0 -1
  434. package/dist/auth/github-oauth.d.ts +0 -19
  435. package/dist/auth/github-oauth.d.ts.map +0 -1
  436. package/dist/auth/github-oauth.js +0 -145
  437. package/dist/auth/github-oauth.js.map +0 -1
  438. package/dist/auth/github-oauth.test.d.ts +0 -2
  439. package/dist/auth/github-oauth.test.d.ts.map +0 -1
  440. package/dist/auth/github-oauth.test.js +0 -202
  441. package/dist/auth/github-oauth.test.js.map +0 -1
  442. package/dist/auth/google-oauth.test.d.ts +0 -2
  443. package/dist/auth/google-oauth.test.d.ts.map +0 -1
  444. package/dist/auth/google-oauth.test.js +0 -200
  445. package/dist/auth/google-oauth.test.js.map +0 -1
  446. package/dist/auth/oauth.d.ts +0 -3
  447. package/dist/auth/oauth.d.ts.map +0 -1
  448. package/dist/auth/oauth.js +0 -48
  449. package/dist/auth/oauth.js.map +0 -1
  450. package/dist/auth/oauth.test.d.ts +0 -2
  451. package/dist/auth/oauth.test.d.ts.map +0 -1
  452. package/dist/auth/oauth.test.js +0 -109
  453. package/dist/auth/oauth.test.js.map +0 -1
  454. package/dist/auth/user-batch.test.d.ts +0 -2
  455. package/dist/auth/user-batch.test.d.ts.map +0 -1
  456. package/dist/auth/user-batch.test.js +0 -73
  457. package/dist/auth/user-batch.test.js.map +0 -1
  458. package/dist/auth/user-import.test.d.ts +0 -2
  459. package/dist/auth/user-import.test.d.ts.map +0 -1
  460. package/dist/auth/user-import.test.js +0 -217
  461. package/dist/auth/user-import.test.js.map +0 -1
  462. package/dist/auth/user-record.test.d.ts +0 -2
  463. package/dist/auth/user-record.test.d.ts.map +0 -1
  464. package/dist/auth/user-record.test.js +0 -198
  465. package/dist/auth/user-record.test.js.map +0 -1
  466. package/dist/auth/user-request.test.d.ts +0 -2
  467. package/dist/auth/user-request.test.d.ts.map +0 -1
  468. package/dist/auth/user-request.test.js +0 -327
  469. package/dist/auth/user-request.test.js.map +0 -1
  470. package/dist/firebase-edge-errors.test.d.ts +0 -2
  471. package/dist/firebase-edge-errors.test.d.ts.map +0 -1
  472. package/dist/firebase-edge-errors.test.js +0 -72
  473. package/dist/firebase-edge-errors.test.js.map +0 -1
  474. package/dist/firebase-edge-server.test.d.ts +0 -2
  475. package/dist/firebase-edge-server.test.d.ts.map +0 -1
  476. package/dist/firebase-edge-server.test.js +0 -293
  477. package/dist/firebase-edge-server.test.js.map +0 -1
  478. package/dist/rest-fetch.test.d.ts +0 -2
  479. package/dist/rest-fetch.test.d.ts.map +0 -1
  480. package/dist/rest-fetch.test.js +0 -164
  481. package/dist/rest-fetch.test.js.map +0 -1
@@ -1,5 +1,11 @@
1
+ import { type ProviderCredential, type ProviderAuthorizationOptions, type ProviderCallback } from './provider-credential.js';
2
+ import { type AuthEmulatorOptions } from './auth-emulator.js';
1
3
  import type { FirebaseConfig } from './firebase-types.js';
2
4
  import { FirebaseEdgeError } from './errors.js';
5
+ export interface FirebaseAuthOptions extends AuthEmulatorOptions {
6
+ tenantId?: string;
7
+ fetch?: typeof globalThis.fetch;
8
+ }
3
9
  /**
4
10
  * Firebase Client Authentication handler for edge environments.
5
11
  * Provides client-side authentication operations using Firebase API.
@@ -9,15 +15,85 @@ export declare class FirebaseAuth {
9
15
  private requestUri;
10
16
  private tenantId?;
11
17
  private fetch?;
18
+ sendPasswordResetEmail(email: string, continueUrl?: string, locale?: string): Promise<{
19
+ data: {
20
+ email: string;
21
+ } | null;
22
+ error: FirebaseEdgeError | null;
23
+ } | {
24
+ data: null;
25
+ error: Error;
26
+ }>;
27
+ verifyBeforeUpdateEmail(idToken: string, newEmail: string, continueUrl?: string, locale?: string): Promise<{
28
+ data: {
29
+ email: string;
30
+ } | null;
31
+ error: FirebaseEdgeError | null;
32
+ } | {
33
+ data: null;
34
+ error: Error;
35
+ }>;
36
+ confirmPasswordReset(oobCode: string, newPassword: string): Promise<{
37
+ data: {
38
+ email: string;
39
+ } | null;
40
+ error: FirebaseEdgeError | null;
41
+ } | {
42
+ data: null;
43
+ error: Error;
44
+ }>;
45
+ applyActionCode(oobCode: string): Promise<{
46
+ data: {
47
+ email?: string;
48
+ localId?: string;
49
+ } | null;
50
+ error: FirebaseEdgeError | null;
51
+ } | {
52
+ data: null;
53
+ error: Error;
54
+ }>;
55
+ /** Ask Firebase to deliver a sign-in email. */
56
+ sendSignInLinkToEmail(email: string, continueUrl: string, locale?: string): Promise<{
57
+ data: {
58
+ email: string;
59
+ } | null;
60
+ error: FirebaseEdgeError | null;
61
+ } | {
62
+ data: null;
63
+ error: Error;
64
+ }>;
65
+ /** Exchange the email and one-time action code for Firebase tokens. */
66
+ signInWithEmailLink(email: string, oobCode: string): Promise<{
67
+ data: import("./firebase-types.js").FirebaseIdpSignInResponse | null;
68
+ error: FirebaseEdgeError | null;
69
+ } | {
70
+ data: null;
71
+ error: Error;
72
+ }>;
73
+ /** Begin a Firebase-managed provider flow. Persist sessionId securely for the callback. */
74
+ createProviderAuthorization(providerId: string, options?: ProviderAuthorizationOptions): Promise<{
75
+ data: import("./firebase-types.js").FirebaseCreateAuthUriResponse | null;
76
+ error: FirebaseEdgeError | null;
77
+ } | {
78
+ data: null;
79
+ error: Error;
80
+ }>;
81
+ /** Complete a provider callback; idToken links to an existing Firebase account. */
82
+ signInWithProviderCallback(callback: ProviderCallback, idToken?: string): Promise<{
83
+ data: import("./firebase-types.js").FirebaseIdpSignInResponse | null;
84
+ error: FirebaseEdgeError | null;
85
+ } | {
86
+ data: null;
87
+ error: Error;
88
+ }>;
12
89
  /**
13
90
  * Creates a new Firebase Auth instance.
14
91
  *
15
92
  * @param firebase_config Firebase client configuration
16
93
  * @param requestUri OAuth callback URI
17
- * @param tenantId Optional tenant ID for multi-tenancy
18
- * @param fetch Optional custom fetch implementation
94
+ * @param options Optional constructor settings, including Auth emulator configuration.
19
95
  */
20
- constructor(firebase_config: FirebaseConfig, requestUri: string, tenantId?: string | undefined, fetch?: typeof globalThis.fetch | undefined);
96
+ constructor(firebase_config: FirebaseConfig, requestUri: string, options?: FirebaseAuthOptions);
21
97
  /**
22
98
  * Signs in a user with an OAuth provider token.
23
99
  *
@@ -25,7 +101,7 @@ export declare class FirebaseAuth {
25
101
  * @param providerId OAuth provider ID (defaults to 'google.com')
26
102
  * @returns Promise with object containing sign-in data or null, and error if any
27
103
  */
28
- signInWithProvider(oauthToken: string, providerId?: string): Promise<{
104
+ signInWithProvider(oauthToken: string | ProviderCredential, providerId?: string): Promise<{
29
105
  data: null;
30
106
  error: FirebaseEdgeError;
31
107
  } | {
@@ -39,8 +115,8 @@ export declare class FirebaseAuth {
39
115
  * @returns Promise with object containing sign-in data (idToken, refreshToken, expiresIn) or null, and error if any
40
116
  */
41
117
  signInWithCustomToken(customToken: string): Promise<{
42
- data: null;
43
118
  error: FirebaseEdgeError;
119
+ data: null;
44
120
  } | {
45
121
  data: import("./firebase-types.js").FirebaseIdpSignInResponse;
46
122
  error: null;
@@ -53,7 +129,7 @@ export declare class FirebaseAuth {
53
129
  * @param providerId OAuth provider ID (defaults to 'google.com')
54
130
  * @returns Promise with object containing linked account data or null, and error if any
55
131
  */
56
- linkWithCredential(idToken: string, providerToken: string, providerId?: string): Promise<{
132
+ linkWithCredential(idToken: string, providerToken: string | ProviderCredential, providerId?: string): Promise<{
57
133
  data: null;
58
134
  error: FirebaseEdgeError;
59
135
  } | {
@@ -1 +1 @@
1
- {"version":3,"file":"firebase-auth.d.ts","sourceRoot":"","sources":["../../src/auth/firebase-auth.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAe,MAAM,aAAa,CAAC;AAG7D;;;GAGG;AACH,qBAAa,YAAY;IAUjB,OAAO,CAAC,eAAe;IACvB,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,QAAQ,CAAC;IACjB,OAAO,CAAC,KAAK,CAAC;IAZlB;;;;;;;OAOG;gBAES,eAAe,EAAE,cAAc,EAC/B,UAAU,EAAE,MAAM,EAClB,QAAQ,CAAC,EAAE,MAAM,YAAA,EACjB,KAAK,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,YAAA;IAG3C;;;;;;OAMG;IACG,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,SAAe;;;;;;;IAuDtE;;;;;OAKG;IACG,qBAAqB,CAAC,WAAW,EAAE,MAAM;;;;;;;IA0D/C;;;;;;;OAOG;IACG,kBAAkB,CACpB,OAAO,EAAE,MAAM,EACf,aAAa,EAAE,MAAM,EACrB,UAAU,SAAe;;;;;;;IAiEvB,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM;;;;;;;CA4DnD"}
1
+ {"version":3,"file":"firebase-auth.d.ts","sourceRoot":"","sources":["../../src/auth/firebase-auth.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,KAAK,kBAAkB,EACvB,KAAK,4BAA4B,EACjC,KAAK,gBAAgB,EACxB,MAAM,0BAA0B,CAAC;AAclC,OAAO,EAEH,KAAK,mBAAmB,EAC3B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAe,MAAM,aAAa,CAAC;AAI7D,MAAM,WAAW,mBAAoB,SAAQ,mBAAmB;IAC5D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;CACnC;AAED;;;GAGG;AACH,qBAAa,YAAY;IAsKjB,OAAO,CAAC,eAAe;IACvB,OAAO,CAAC,UAAU;IAtKtB,OAAO,CAAC,QAAQ,CAAC,CAAS;IAC1B,OAAO,CAAC,KAAK,CAAC,CAA0B;IAElC,sBAAsB,CACxB,KAAK,EAAE,MAAM,EACb,WAAW,SAAkB,EAC7B,MAAM,CAAC,EAAE,MAAM;;;;;;;;;IAeb,uBAAuB,CACzB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,WAAW,SAAkB,EAC7B,MAAM,CAAC,EAAE,MAAM;;;;;;;;;IAeb,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM;;;;;;;;;IAczD,eAAe,CAAC,OAAO,EAAE,MAAM;;;;;;;;;;IAarC,+CAA+C;IACzC,qBAAqB,CACvB,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,EACnB,MAAM,CAAC,EAAE,MAAM;;;;;;;;;IAenB,uEAAuE;IACjE,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;;;;;;;IAkCxD,2FAA2F;IACrF,2BAA2B,CAC7B,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE,4BAA4B;;;;;;;IAgB1C,mFAAmF;IAC7E,0BAA0B,CAC5B,QAAQ,EAAE,gBAAgB,EAC1B,OAAO,CAAC,EAAE,MAAM;;;;;;;IAcpB;;;;;;OAMG;gBAES,eAAe,EAAE,cAAc,EAC/B,UAAU,EAAE,MAAM,EAC1B,OAAO,GAAE,mBAAwB;IAYrC;;;;;;OAMG;IACG,kBAAkB,CACpB,UAAU,EAAE,MAAM,GAAG,kBAAkB,EACvC,UAAU,SAAe;;;;;;;IAwD7B;;;;;OAKG;IACG,qBAAqB,CAAC,WAAW,EAAE,MAAM;;;;;;;IA6D/C;;;;;;;OAOG;IACG,kBAAkB,CACpB,OAAO,EAAE,MAAM,EACf,aAAa,EAAE,MAAM,GAAG,kBAAkB,EAC1C,UAAU,SAAe;;;;;;;IAiEvB,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM;;;;;;;CA4DnD"}
@@ -1,6 +1,9 @@
1
- import { signInWithCustomToken, signInWithIdp, linkWithOAuthCredential, unlinkProvider } from './firebase-auth-endpoints.js';
1
+ import {} from './provider-credential.js';
2
+ import { createAuthEmulatorFetch, createAuthUri, signInWithCustomToken, signInWithIdp, executeProviderSignIn, linkWithOAuthCredential, unlinkProvider, sendOobCode, confirmPasswordReset as resetPassword, applyActionCode as applyEmailCode, signInWithEmailLink as completeEmailLink } from './firebase-auth-endpoints.js';
3
+ import { resolveAuthEmulatorHost } from './auth-emulator.js';
2
4
  import { FirebaseEdgeError, ensureError } from './errors.js';
3
5
  import { FirebaseAuthErrorInfo } from './auth-error-codes.js';
6
+ import { buildEmailActionRequest } from './email-action-request.js';
4
7
  /**
5
8
  * Firebase Client Authentication handler for edge environments.
6
9
  * Provides client-side authentication operations using Firebase API.
@@ -10,19 +13,107 @@ export class FirebaseAuth {
10
13
  requestUri;
11
14
  tenantId;
12
15
  fetch;
16
+ async sendPasswordResetEmail(email, continueUrl = this.requestUri, locale) {
17
+ try {
18
+ return await sendOobCode('PASSWORD_RESET', this.firebase_config.apiKey, { email, continueUrl, locale }, this.tenantId, this.fetch);
19
+ }
20
+ catch (cause) {
21
+ return { data: null, error: ensureError(cause) };
22
+ }
23
+ }
24
+ async verifyBeforeUpdateEmail(idToken, newEmail, continueUrl = this.requestUri, locale) {
25
+ try {
26
+ return await sendOobCode('VERIFY_AND_CHANGE_EMAIL', this.firebase_config.apiKey, { idToken, newEmail, continueUrl, locale }, this.tenantId, this.fetch);
27
+ }
28
+ catch (cause) {
29
+ return { data: null, error: ensureError(cause) };
30
+ }
31
+ }
32
+ async confirmPasswordReset(oobCode, newPassword) {
33
+ try {
34
+ return await resetPassword(oobCode, newPassword, this.firebase_config.apiKey, this.tenantId, this.fetch);
35
+ }
36
+ catch (cause) {
37
+ return { data: null, error: ensureError(cause) };
38
+ }
39
+ }
40
+ async applyActionCode(oobCode) {
41
+ try {
42
+ return await applyEmailCode(oobCode, this.firebase_config.apiKey, this.tenantId, this.fetch);
43
+ }
44
+ catch (cause) {
45
+ return { data: null, error: ensureError(cause) };
46
+ }
47
+ }
48
+ /** Ask Firebase to deliver a sign-in email. */
49
+ async sendSignInLinkToEmail(email, continueUrl, locale) {
50
+ try {
51
+ return await sendOobCode('EMAIL_SIGNIN', this.firebase_config.apiKey, { email, continueUrl, locale }, this.tenantId, this.fetch);
52
+ }
53
+ catch (cause) {
54
+ return { data: null, error: ensureError(cause) };
55
+ }
56
+ }
57
+ /** Exchange the email and one-time action code for Firebase tokens. */
58
+ async signInWithEmailLink(email, oobCode) {
59
+ const { error: validationError } = buildEmailActionRequest('EMAIL_SIGNIN', email, {
60
+ url: this.requestUri,
61
+ handleCodeInApp: true
62
+ });
63
+ if (validationError) {
64
+ return { data: null, error: validationError };
65
+ }
66
+ if (typeof oobCode !== 'string' || !oobCode.trim()) {
67
+ return {
68
+ data: null,
69
+ error: new FirebaseEdgeError({
70
+ code: 'auth/invalid-action-code',
71
+ message: 'An email sign-in code is required.'
72
+ })
73
+ };
74
+ }
75
+ try {
76
+ return await completeEmailLink(oobCode, email, this.firebase_config.apiKey, undefined, this.tenantId, this.fetch);
77
+ }
78
+ catch (cause) {
79
+ return { data: null, error: ensureError(cause) };
80
+ }
81
+ }
82
+ /** Begin a Firebase-managed provider flow. Persist sessionId securely for the callback. */
83
+ async createProviderAuthorization(providerId, options) {
84
+ try {
85
+ return await createAuthUri(this.requestUri, this.firebase_config.apiKey, this.tenantId, this.fetch, providerId, options);
86
+ }
87
+ catch (cause) {
88
+ return { data: null, error: ensureError(cause) };
89
+ }
90
+ }
91
+ /** Complete a provider callback; idToken links to an existing Firebase account. */
92
+ async signInWithProviderCallback(callback, idToken) {
93
+ try {
94
+ return await executeProviderSignIn({ callback, idToken }, this.firebase_config.apiKey, this.tenantId, this.fetch);
95
+ }
96
+ catch (cause) {
97
+ return { data: null, error: ensureError(cause) };
98
+ }
99
+ }
13
100
  /**
14
101
  * Creates a new Firebase Auth instance.
15
102
  *
16
103
  * @param firebase_config Firebase client configuration
17
104
  * @param requestUri OAuth callback URI
18
- * @param tenantId Optional tenant ID for multi-tenancy
19
- * @param fetch Optional custom fetch implementation
105
+ * @param options Optional constructor settings, including Auth emulator configuration.
20
106
  */
21
- constructor(firebase_config, requestUri, tenantId, fetch) {
107
+ constructor(firebase_config, requestUri, options = {}) {
22
108
  this.firebase_config = firebase_config;
23
109
  this.requestUri = requestUri;
110
+ const { tenantId, fetch } = options;
24
111
  this.tenantId = tenantId;
25
112
  this.fetch = fetch;
113
+ const emulatorHost = resolveAuthEmulatorHost(options.emulatorHost);
114
+ if (emulatorHost) {
115
+ this.fetch = createAuthEmulatorFetch(emulatorHost, this.fetch);
116
+ }
26
117
  }
27
118
  /**
28
119
  * Signs in a user with an OAuth provider token.
@@ -73,6 +164,12 @@ export class FirebaseAuth {
73
164
  * @returns Promise with object containing sign-in data (idToken, refreshToken, expiresIn) or null, and error if any
74
165
  */
75
166
  async signInWithCustomToken(customToken) {
167
+ if (typeof customToken !== 'string' || !customToken.trim()) {
168
+ return {
169
+ error: new FirebaseEdgeError(FirebaseAuthErrorInfo.AUTH_INVALID_CUSTOM_TOKEN),
170
+ data: null
171
+ };
172
+ }
76
173
  try {
77
174
  const { data: signInData, error: signInError } = await signInWithCustomToken(customToken, this.firebase_config.apiKey, this.tenantId, this.fetch);
78
175
  if (signInError) {
@@ -80,9 +177,7 @@ export class FirebaseAuth {
80
177
  data: null,
81
178
  error: new FirebaseEdgeError(FirebaseAuthErrorInfo.AUTH_INVALID_CUSTOM_TOKEN, {
82
179
  cause: ensureError(signInError),
83
- context: {
84
- customToken: customToken.substring(0, 20) + '...'
85
- }
180
+ context: { operation: 'signInWithCustomToken' }
86
181
  })
87
182
  };
88
183
  }
@@ -104,9 +199,7 @@ export class FirebaseAuth {
104
199
  data: null,
105
200
  error: new FirebaseEdgeError(FirebaseAuthErrorInfo.AUTH_CUSTOM_TOKEN_SIGN_FAILED, {
106
201
  cause: ensureError(err),
107
- context: {
108
- customToken: customToken.substring(0, 20) + '...'
109
- }
202
+ context: { operation: 'signInWithCustomToken' }
110
203
  })
111
204
  };
112
205
  }
@@ -1 +1 @@
1
- {"version":3,"file":"firebase-auth.js","sourceRoot":"","sources":["../../src/auth/firebase-auth.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"firebase-auth.js","sourceRoot":"","sources":["../../src/auth/firebase-auth.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,14 @@
1
1
  import type { FirebaseIdTokenPayload, ServiceAccount } from './firebase-types.js';
2
2
  import { FirebaseEdgeError } from './errors.js';
3
+ import type { DecodedAuthBlockingToken } from './auth-blocking-types.js';
4
+ /** @internal Verify the JWT supplied in a blocking function request's data.jwt field. */
5
+ export declare function verifyAuthBlockingJWT(token: string, projectId: string, audience?: string, fetchFn?: typeof globalThis.fetch, emulator?: boolean): Promise<{
6
+ data: DecodedAuthBlockingToken;
7
+ error: null;
8
+ } | {
9
+ data: null;
10
+ error: FirebaseEdgeError;
11
+ }>;
3
12
  type SignJwtResult = {
4
13
  data: string;
5
14
  error: null;
@@ -7,22 +16,22 @@ type SignJwtResult = {
7
16
  data: null;
8
17
  error: FirebaseEdgeError;
9
18
  };
10
- export declare function verifySessionJWT(sessionCookie: string, projectId: string, fetchFn?: typeof globalThis.fetch): Promise<{
19
+ export declare function verifySessionJWT(sessionCookie: string, projectId: string, fetchFn?: typeof globalThis.fetch, emulator?: boolean): Promise<{
20
+ data: FirebaseIdTokenPayload;
21
+ error: null;
22
+ } | {
11
23
  data: null;
12
24
  error: FirebaseEdgeError;
13
- } | {
14
- error: null;
15
- data: FirebaseIdTokenPayload;
16
25
  }>;
17
- export declare function verifyJWT(idToken: string, projectId: string, fetchFn?: typeof globalThis.fetch): Promise<{
18
- error: FirebaseEdgeError;
19
- data: null;
20
- } | {
21
- error: null;
26
+ export declare function verifyJWT(idToken: string, projectId: string, fetchFn?: typeof globalThis.fetch, emulator?: boolean): Promise<{
22
27
  data: FirebaseIdTokenPayload;
28
+ error: null;
29
+ } | {
30
+ data: null;
31
+ error: FirebaseEdgeError;
23
32
  }>;
24
33
  export declare function signJWT(serviceAccount: ServiceAccount): Promise<SignJwtResult>;
25
- export declare function signJWTCustomToken(uid: string, serviceAccount: ServiceAccount, additionalClaims?: object): Promise<{
34
+ export declare function signJWTCustomToken(uid: string, serviceAccount: ServiceAccount, additionalClaims?: object, tenantId?: string, emulator?: boolean): Promise<{
26
35
  data: null;
27
36
  error: FirebaseEdgeError;
28
37
  } | {
@@ -1 +1 @@
1
- {"version":3,"file":"firebase-jwt.d.ts","sourceRoot":"","sources":["../../src/auth/firebase-jwt.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EACR,sBAAsB,EACtB,cAAc,EACjB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,iBAAiB,EAAe,MAAM,aAAa,CAAC;AAoC7D,KAAK,aAAa,GACZ;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,IAAI,CAAA;CAAE,GAC7B;IACI,IAAI,EAAE,IAAI,CAAC;IACX,KAAK,EAAE,iBAAiB,CAAC;CAC5B,CAAC;AAER,wBAAsB,gBAAgB,CAClC,aAAa,EAAE,MAAM,EACrB,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,OAAO,UAAU,CAAC,KAAwB;;;;;UAwD1B,sBAAsB;GAsDlD;AAED,wBAAsB,SAAS,CAC3B,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK;;;;;UAiDR,sBAAsB;GAsDlD;AAED,wBAAsB,OAAO,CACzB,cAAc,EAAE,cAAc,GAC/B,OAAO,CAAC,aAAa,CAAC,CAqExB;AAsBD,wBAAsB,kBAAkB,CACpC,GAAG,EAAE,MAAM,EACX,cAAc,EAAE,cAAc,EAC9B,gBAAgB,GAAE,MAAW;;;;;;GAqEhC"}
1
+ {"version":3,"file":"firebase-jwt.d.ts","sourceRoot":"","sources":["../../src/auth/firebase-jwt.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EACR,sBAAsB,EACtB,cAAc,EACjB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,iBAAiB,EAAe,MAAM,aAAa,CAAC;AAG7D,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AA6BzE,yFAAyF;AACzF,wBAAsB,qBAAqB,CACvC,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,QAAQ,CAAC,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,EACjC,QAAQ,UAAQ,GACjB,OAAO,CACJ;IAAE,IAAI,EAAE,wBAAwB,CAAC;IAAC,KAAK,EAAE,IAAI,CAAA;CAAE,GAC/C;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,iBAAiB,CAAA;CAAE,CAC7C,CAkFA;AAmCD,KAAK,aAAa,GACZ;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,IAAI,CAAA;CAAE,GAC7B;IACI,IAAI,EAAE,IAAI,CAAC;IACX,KAAK,EAAE,iBAAiB,CAAC;CAC5B,CAAC;AAkFR,wBAAsB,gBAAgB,CAClC,aAAa,EAAE,MAAM,EACrB,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,OAAO,UAAU,CAAC,KAAwB,EACnD,QAAQ,UAAQ;;;;;;GAoHnB;AAED,wBAAsB,SAAS,CAC3B,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,EACjC,QAAQ,UAAQ;;;;;;GA2EnB;AAED,wBAAsB,OAAO,CACzB,cAAc,EAAE,cAAc,GAC/B,OAAO,CAAC,aAAa,CAAC,CAqExB;AAsBD,wBAAsB,kBAAkB,CACpC,GAAG,EAAE,MAAM,EACX,cAAc,EAAE,cAAc,EAC9B,gBAAgB,GAAE,MAAW,EAC7B,QAAQ,CAAC,EAAE,MAAM,EACjB,QAAQ,UAAQ;;;;;;GAmGnB"}
@@ -1,14 +1,103 @@
1
- import { decodeProtectedHeader, errors, jwtVerify, importPKCS8, SignJWT, importX509, importSPKI } from 'jose';
1
+ import { decodeProtectedHeader, errors, jwtVerify, importPKCS8, SignJWT, UnsecuredJWT, importX509, importSPKI } from 'jose';
2
2
  import { JOSEError, JWSInvalid, JWSSignatureVerificationFailed, JWTClaimValidationFailed, JWTExpired, JWTInvalid } from 'jose/errors';
3
3
  import { getJWKs, getPublicKeys } from './firebase-auth-endpoints.js';
4
4
  import { FirebaseEdgeError, ensureError } from './errors.js';
5
5
  import { JWTErrorInfo } from './auth-error-codes.js';
6
+ import { validateUserUid } from './user-request.js';
7
+ /** Shared Secure Token signature verification for ID and blocking-event JWTs. */
8
+ async function verifySecureTokenJWT(token, options, fetchFn) {
9
+ const { kid, alg } = decodeProtectedHeader(token);
10
+ if (typeof kid !== 'string' || !kid)
11
+ throw new FirebaseEdgeError(JWTErrorInfo.JWT_NO_KID_FOUND);
12
+ if (alg !== 'RS256')
13
+ throw new FirebaseEdgeError(JWTErrorInfo.JWT_INVALID_ALGORITHM);
14
+ const { data, error } = await getJWKs(fetchFn);
15
+ if (error)
16
+ throw error;
17
+ if (!data?.length)
18
+ throw new FirebaseEdgeError(JWTErrorInfo.JWT_NO_JWKS_RETRIEVED);
19
+ const jwk = data.find((key) => key.kid === kid);
20
+ if (!jwk)
21
+ throw new FirebaseEdgeError(JWTErrorInfo.JWT_NO_MATCHING_KEY, {
22
+ context: { kid }
23
+ });
24
+ const { payload } = await jwtVerify(token, jwk, {
25
+ ...options,
26
+ algorithms: ['RS256']
27
+ });
28
+ return payload;
29
+ }
30
+ /** @internal Verify the JWT supplied in a blocking function request's data.jwt field. */
31
+ export async function verifyAuthBlockingJWT(token, projectId, audience, fetchFn, emulator = false) {
32
+ try {
33
+ if (typeof token !== 'string' ||
34
+ !token.length ||
35
+ typeof projectId !== 'string' ||
36
+ !projectId.length ||
37
+ (audience !== undefined &&
38
+ (typeof audience !== 'string' || !audience.trim().length)))
39
+ throw new FirebaseEdgeError({
40
+ code: 'auth/invalid-argument',
41
+ message: 'A token, project ID, and non-empty audience (when supplied) are required.'
42
+ });
43
+ const options = {
44
+ issuer: `https://securetoken.google.com/${projectId}`,
45
+ requiredClaims: ['iat', 'exp']
46
+ };
47
+ const payload = emulator
48
+ ? UnsecuredJWT.decode(token, options).payload
49
+ : await verifySecureTokenJWT(token, options, fetchFn);
50
+ const expectedAudience = audience ?? `${projectId}.cloudfunctions.net/`;
51
+ if (typeof payload.aud !== 'string' ||
52
+ !payload.aud.includes(expectedAudience))
53
+ throw new JWTClaimValidationFailed('Invalid blocking token audience.', payload);
54
+ if (typeof payload.iat !== 'number' ||
55
+ !Number.isFinite(payload.iat) ||
56
+ payload.iat > Math.floor(Date.now() / 1000) ||
57
+ typeof payload.event_type !== 'string' ||
58
+ !payload.event_type.length ||
59
+ typeof payload.event_id !== 'string' ||
60
+ !payload.event_id.length)
61
+ throw new JWTClaimValidationFailed('Invalid blocking event claims.', payload);
62
+ const noUserEvent = payload.event_type === 'beforeSendEmail' ||
63
+ payload.event_type === 'beforeSendSms';
64
+ if (!noUserEvent &&
65
+ (typeof payload.sub !== 'string' ||
66
+ !payload.sub.length ||
67
+ payload.sub.length > 128))
68
+ throw new JWTClaimValidationFailed('Invalid blocking token subject.', payload);
69
+ return {
70
+ data: { ...payload, uid: payload.sub },
71
+ error: null
72
+ };
73
+ }
74
+ catch (cause) {
75
+ if (cause instanceof FirebaseEdgeError)
76
+ return { data: null, error: cause };
77
+ const info = cause instanceof JWTExpired
78
+ ? {
79
+ code: 'auth/auth-blocking-token-expired',
80
+ message: 'The Auth blocking token has expired.'
81
+ }
82
+ : cause instanceof JWTClaimValidationFailed
83
+ ? JWTErrorInfo.JWT_CLAIM_VALIDATION_FAILED
84
+ : cause instanceof JWTInvalid ||
85
+ cause instanceof JWSInvalid ||
86
+ cause instanceof JWSSignatureVerificationFailed
87
+ ? JWTErrorInfo.JWT_INVALID_TOKEN
88
+ : JWTErrorInfo.JWT_UNKNOWN_VERIFICATION_ERROR;
89
+ return {
90
+ data: null,
91
+ error: new FirebaseEdgeError(info, { cause: ensureError(cause) })
92
+ };
93
+ }
94
+ }
6
95
  const ALGORITHM_RS256 = 'RS256';
7
96
  const OAUTH_TOKEN_URL = 'https://oauth2.googleapis.com/token';
8
97
  const SCOPES = [
98
+ 'https://www.googleapis.com/auth/cloud-platform',
9
99
  'https://www.googleapis.com/auth/datastore',
10
100
  'https://www.googleapis.com/auth/identitytoolkit',
11
- 'https://www.googleapis.com/auth/devstorage.read_write',
12
101
  'https://www.googleapis.com/auth/devstorage.read_write'
13
102
  ];
14
103
  const keyMap = new Map();
@@ -27,8 +116,51 @@ async function getPublicCryptoKey(publicKey) {
27
116
  keyMap.set(publicKey, key);
28
117
  return key;
29
118
  }
30
- export async function verifySessionJWT(sessionCookie, projectId, fetchFn = globalThis.fetch) {
119
+ /** Decode only emulator-format JWTs, retaining claim checks while skipping signature verification. */
120
+ function verifyEmulatorJWT(token, projectId, kind) {
121
+ const issuer = kind === 'id'
122
+ ? `https://securetoken.google.com/${projectId}`
123
+ : `https://session.firebase.google.com/${projectId}`;
124
+ const { payload } = UnsecuredJWT.decode(token, {
125
+ issuer,
126
+ audience: projectId,
127
+ requiredClaims: ['sub', 'iat', 'exp', 'auth_time']
128
+ });
129
+ return validateFirebaseTokenPayload(payload, projectId);
130
+ }
131
+ // Allow a small difference between Firebase's clock and the verifying server.
132
+ const FUTURE_CLAIM_TOLERANCE_SECONDS = 5;
133
+ /** Validate user-token claims in both production and emulator modes. */
134
+ function validateFirebaseTokenPayload(payload, projectId) {
135
+ const now = Math.floor(Date.now() / 1000);
136
+ if (typeof payload.exp !== 'number' ||
137
+ !Number.isFinite(payload.exp) ||
138
+ payload.exp <= now)
139
+ throw new JWTClaimValidationFailed('Firebase token expiration must be in the future.', payload, 'exp', 'check_failed');
140
+ if (payload.aud !== projectId)
141
+ throw new JWTClaimValidationFailed('Firebase token audience must match the project ID.', payload, 'aud', 'check_failed');
142
+ if (typeof payload.sub !== 'string' ||
143
+ !payload.sub.length ||
144
+ payload.sub.length > 128)
145
+ throw new JWTClaimValidationFailed('Firebase token subject must contain between 1 and 128 characters.', payload, 'sub', 'check_failed');
146
+ for (const claim of ['iat', 'auth_time']) {
147
+ const value = payload[claim];
148
+ if (typeof value !== 'number' ||
149
+ !Number.isFinite(value) ||
150
+ (claim === 'auth_time' && value < 0))
151
+ throw new JWTClaimValidationFailed(`Invalid Firebase token ${claim} timestamp.`, payload, claim, 'check_failed');
152
+ if (value > now + FUTURE_CLAIM_TOLERANCE_SECONDS)
153
+ throw new JWTClaimValidationFailed(`Firebase token ${claim} is ${value - now} seconds ahead of the server clock (maximum ${FUTURE_CLAIM_TOLERANCE_SECONDS}). Check the server clock synchronization.`, payload, claim, 'check_failed');
154
+ }
155
+ return { ...payload, uid: payload.sub };
156
+ }
157
+ export async function verifySessionJWT(sessionCookie, projectId, fetchFn = globalThis.fetch, emulator = false) {
31
158
  try {
159
+ if (emulator)
160
+ return {
161
+ data: verifyEmulatorJWT(sessionCookie, projectId, 'session'),
162
+ error: null
163
+ };
32
164
  const { data: keyData, error } = await getPublicKeys(fetchFn);
33
165
  if (error) {
34
166
  return {
@@ -66,11 +198,12 @@ export async function verifySessionJWT(sessionCookie, projectId, fetchFn = globa
66
198
  const { payload } = await jwtVerify(sessionCookie, publicKey, {
67
199
  issuer: expectedIssuer,
68
200
  audience: expectedAudience,
69
- algorithms: [ALGORITHM_RS256]
201
+ algorithms: [ALGORITHM_RS256],
202
+ requiredClaims: ['sub', 'iat', 'exp', 'auth_time']
70
203
  });
71
204
  return {
72
205
  error: null,
73
- data: payload
206
+ data: validateFirebaseTokenPayload(payload, projectId)
74
207
  };
75
208
  }
76
209
  catch (err) {
@@ -111,48 +244,26 @@ export async function verifySessionJWT(sessionCookie, projectId, fetchFn = globa
111
244
  };
112
245
  }
113
246
  }
114
- export async function verifyJWT(idToken, projectId, fetchFn) {
247
+ export async function verifyJWT(idToken, projectId, fetchFn, emulator = false) {
115
248
  try {
116
- const { kid } = decodeProtectedHeader(idToken);
117
- if (!kid) {
118
- return {
119
- error: new FirebaseEdgeError(JWTErrorInfo.JWT_NO_KID_FOUND),
120
- data: null
121
- };
122
- }
123
- const { data, error } = await getJWKs(fetchFn);
124
- if (error) {
249
+ if (emulator)
125
250
  return {
126
- error,
127
- data: null
251
+ data: verifyEmulatorJWT(idToken, projectId, 'id'),
252
+ error: null
128
253
  };
129
- }
130
- if (!data || !data.length) {
131
- return {
132
- error: new FirebaseEdgeError(JWTErrorInfo.JWT_NO_JWKS_RETRIEVED),
133
- data: null
134
- };
135
- }
136
- const jwk = data.find((key) => key.kid === kid);
137
- if (!jwk) {
138
- return {
139
- error: new FirebaseEdgeError(JWTErrorInfo.JWT_NO_MATCHING_KEY, {
140
- context: { kid }
141
- }),
142
- data: null
143
- };
144
- }
145
- const { payload } = await jwtVerify(idToken, jwk, {
254
+ const payload = await verifySecureTokenJWT(idToken, {
146
255
  issuer: `https://securetoken.google.com/${projectId}`,
147
256
  audience: projectId,
148
- algorithms: ['RS256']
149
- });
257
+ requiredClaims: ['sub', 'iat', 'exp', 'auth_time']
258
+ }, fetchFn);
150
259
  return {
151
260
  error: null,
152
- data: payload
261
+ data: validateFirebaseTokenPayload(payload, projectId)
153
262
  };
154
263
  }
155
264
  catch (err) {
265
+ if (err instanceof FirebaseEdgeError)
266
+ return { data: null, error: err };
156
267
  if (err instanceof JWTExpired) {
157
268
  return {
158
269
  error: new FirebaseEdgeError(JWTErrorInfo.JWT_EXPIRED, {
@@ -266,7 +377,20 @@ const RESERVED_CLAIMS = [
266
377
  'firebase',
267
378
  'user_id'
268
379
  ];
269
- export async function signJWTCustomToken(uid, serviceAccount, additionalClaims = {}) {
380
+ export async function signJWTCustomToken(uid, serviceAccount, additionalClaims = {}, tenantId, emulator = false) {
381
+ const uidError = validateUserUid(uid);
382
+ if (uidError)
383
+ return { data: null, error: uidError };
384
+ if (!additionalClaims ||
385
+ typeof additionalClaims !== 'object' ||
386
+ Array.isArray(additionalClaims))
387
+ return {
388
+ data: null,
389
+ error: new FirebaseEdgeError({
390
+ code: 'auth/invalid-argument',
391
+ message: 'Developer claims must be a non-null object.'
392
+ })
393
+ };
270
394
  const { private_key, client_email } = serviceAccount;
271
395
  if (Object.keys(additionalClaims).some((k) => RESERVED_CLAIMS.includes(k) || k.startsWith('firebase'))) {
272
396
  return {
@@ -280,12 +404,25 @@ export async function signJWTCustomToken(uid, serviceAccount, additionalClaims =
280
404
  };
281
405
  }
282
406
  const payload = { uid };
407
+ if (tenantId)
408
+ payload.tenant_id = tenantId;
283
409
  if (Object.keys(additionalClaims).length) {
284
410
  payload.claims = additionalClaims;
285
411
  }
286
412
  const url = 'https://identitytoolkit.googleapis.com/google.identity.identitytoolkit.v1.IdentityToolkit';
287
413
  try {
288
- const key = await importPKCS8(private_key, 'RS256');
414
+ if (emulator) {
415
+ const issuer = client_email || 'firebase-auth-emulator@example.com';
416
+ const token = new UnsecuredJWT(payload)
417
+ .setIssuer(issuer)
418
+ .setSubject(issuer)
419
+ .setAudience(url)
420
+ .setIssuedAt()
421
+ .setExpirationTime('1h')
422
+ .encode();
423
+ return { data: token, error: null };
424
+ }
425
+ const key = await importPKCS8(private_key.replace(/\\n/g, '\n'), 'RS256');
289
426
  const token = await new SignJWT(payload)
290
427
  .setProtectedHeader({ alg: 'RS256', typ: 'JWT' })
291
428
  .setIssuer(client_email)