firebase-admin-edge 1.1.1 → 2.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 (437) hide show
  1. package/README.md +102 -261
  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 +43 -0
  11. package/dist/app-check/app-check.d.ts.map +1 -0
  12. package/dist/app-check/app-check.js +141 -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 +29 -4
  39. package/dist/auth/firebase-admin-auth.d.ts.map +1 -1
  40. package/dist/auth/firebase-admin-auth.js +192 -59
  41. package/dist/auth/firebase-admin-auth.js.map +1 -1
  42. package/dist/auth/firebase-auth-endpoints.d.ts +64 -5
  43. package/dist/auth/firebase-auth-endpoints.d.ts.map +1 -1
  44. package/dist/auth/firebase-auth-endpoints.js +258 -73
  45. package/dist/auth/firebase-auth-endpoints.js.map +1 -1
  46. package/dist/auth/firebase-auth.d.ts +78 -4
  47. package/dist/auth/firebase-auth.d.ts.map +1 -1
  48. package/dist/auth/firebase-auth.js +101 -8
  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/project-config-manager.d.ts +10 -0
  61. package/dist/auth/project-config-manager.d.ts.map +1 -0
  62. package/dist/auth/project-config-manager.js +22 -0
  63. package/dist/auth/project-config-manager.js.map +1 -0
  64. package/dist/auth/provider-credential.d.ts +43 -0
  65. package/dist/auth/provider-credential.d.ts.map +1 -0
  66. package/dist/auth/provider-credential.js +107 -0
  67. package/dist/auth/provider-credential.js.map +1 -0
  68. package/dist/auth/provider-session.d.ts +10 -0
  69. package/dist/auth/provider-session.d.ts.map +1 -0
  70. package/dist/auth/provider-session.js +28 -0
  71. package/dist/auth/provider-session.js.map +1 -0
  72. package/dist/auth/tenant-manager.d.ts +17 -0
  73. package/dist/auth/tenant-manager.d.ts.map +1 -0
  74. package/dist/auth/tenant-manager.js +59 -0
  75. package/dist/auth/tenant-manager.js.map +1 -0
  76. package/dist/db/aggregate.d.ts +49 -0
  77. package/dist/db/aggregate.d.ts.map +1 -0
  78. package/dist/db/aggregate.js +115 -0
  79. package/dist/db/aggregate.js.map +1 -0
  80. package/dist/db/bulk-writer.d.ts +55 -0
  81. package/dist/db/bulk-writer.d.ts.map +1 -0
  82. package/dist/db/bulk-writer.js +257 -0
  83. package/dist/db/bulk-writer.js.map +1 -0
  84. package/dist/db/bundle-builder.d.ts +17 -0
  85. package/dist/db/bundle-builder.d.ts.map +1 -0
  86. package/dist/db/bundle-builder.js +118 -0
  87. package/dist/db/bundle-builder.js.map +1 -0
  88. package/dist/db/bytes.d.ts +12 -0
  89. package/dist/db/bytes.d.ts.map +1 -0
  90. package/dist/db/bytes.js +49 -0
  91. package/dist/db/bytes.js.map +1 -0
  92. package/dist/db/collection-group.d.ts +14 -0
  93. package/dist/db/collection-group.d.ts.map +1 -0
  94. package/dist/db/collection-group.js +43 -0
  95. package/dist/db/collection-group.js.map +1 -0
  96. package/dist/db/collection-reference.d.ts +21 -0
  97. package/dist/db/collection-reference.d.ts.map +1 -0
  98. package/dist/db/collection-reference.js +46 -0
  99. package/dist/db/collection-reference.js.map +1 -0
  100. package/dist/db/document-reference.d.ts +41 -0
  101. package/dist/db/document-reference.d.ts.map +1 -0
  102. package/dist/db/document-reference.js +125 -0
  103. package/dist/db/document-reference.js.map +1 -0
  104. package/dist/db/document-snapshot.d.ts +31 -0
  105. package/dist/db/document-snapshot.d.ts.map +1 -0
  106. package/dist/db/document-snapshot.js +103 -0
  107. package/dist/db/document-snapshot.js.map +1 -0
  108. package/dist/db/explain.d.ts +28 -0
  109. package/dist/db/explain.d.ts.map +1 -0
  110. package/dist/db/explain.js +61 -0
  111. package/dist/db/explain.js.map +1 -0
  112. package/dist/db/field-path.d.ts +10 -0
  113. package/dist/db/field-path.d.ts.map +1 -0
  114. package/dist/db/field-path.js +65 -0
  115. package/dist/db/field-path.js.map +1 -0
  116. package/dist/db/field-value.d.ts +17 -0
  117. package/dist/db/field-value.d.ts.map +1 -0
  118. package/dist/db/field-value.js +57 -0
  119. package/dist/db/field-value.js.map +1 -0
  120. package/dist/db/filter.d.ts +20 -0
  121. package/dist/db/filter.d.ts.map +1 -0
  122. package/dist/db/filter.js +48 -0
  123. package/dist/db/filter.js.map +1 -0
  124. package/dist/db/firestore-converter.d.ts +11 -0
  125. package/dist/db/firestore-converter.d.ts.map +1 -0
  126. package/dist/db/firestore-converter.js +14 -0
  127. package/dist/db/firestore-converter.js.map +1 -0
  128. package/dist/db/firestore-document.d.ts +62 -0
  129. package/dist/db/firestore-document.d.ts.map +1 -0
  130. package/dist/db/firestore-document.js +238 -0
  131. package/dist/db/firestore-document.js.map +1 -0
  132. package/dist/db/firestore-endpoints.d.ts +41 -0
  133. package/dist/db/firestore-endpoints.d.ts.map +1 -0
  134. package/dist/db/firestore-endpoints.js +735 -0
  135. package/dist/db/firestore-endpoints.js.map +1 -0
  136. package/dist/db/firestore-error-codes.d.ts +24 -0
  137. package/dist/db/firestore-error-codes.d.ts.map +1 -0
  138. package/dist/db/firestore-error-codes.js +24 -0
  139. package/dist/db/firestore-error-codes.js.map +1 -0
  140. package/dist/db/firestore-logging.d.ts +23 -0
  141. package/dist/db/firestore-logging.d.ts.map +1 -0
  142. package/dist/db/firestore-logging.js +41 -0
  143. package/dist/db/firestore-logging.js.map +1 -0
  144. package/dist/db/firestore-path.d.ts +4 -0
  145. package/dist/db/firestore-path.d.ts.map +1 -0
  146. package/dist/db/firestore-path.js +37 -0
  147. package/dist/db/firestore-path.js.map +1 -0
  148. package/dist/db/firestore-results.d.ts +12 -0
  149. package/dist/db/firestore-results.d.ts.map +1 -0
  150. package/dist/db/firestore-results.js +19 -0
  151. package/dist/db/firestore-results.js.map +1 -0
  152. package/dist/db/firestore-settings.d.ts +22 -0
  153. package/dist/db/firestore-settings.d.ts.map +1 -0
  154. package/dist/db/firestore-settings.js +83 -0
  155. package/dist/db/firestore-settings.js.map +1 -0
  156. package/dist/db/firestore-telemetry.d.ts +21 -0
  157. package/dist/db/firestore-telemetry.d.ts.map +1 -0
  158. package/dist/db/firestore-telemetry.js +84 -0
  159. package/dist/db/firestore-telemetry.js.map +1 -0
  160. package/dist/db/firestore-types.d.ts +25 -0
  161. package/dist/db/firestore-types.d.ts.map +1 -0
  162. package/dist/db/firestore-types.js +2 -0
  163. package/dist/db/firestore-types.js.map +1 -0
  164. package/dist/db/firestore.d.ts +151 -0
  165. package/dist/db/firestore.d.ts.map +1 -0
  166. package/dist/db/firestore.js +505 -0
  167. package/dist/db/firestore.js.map +1 -0
  168. package/dist/db/geo-point.d.ts +11 -0
  169. package/dist/db/geo-point.d.ts.map +1 -0
  170. package/dist/db/geo-point.js +29 -0
  171. package/dist/db/geo-point.js.map +1 -0
  172. package/dist/db/json-stream.d.ts +3 -0
  173. package/dist/db/json-stream.d.ts.map +1 -0
  174. package/dist/db/json-stream.js +117 -0
  175. package/dist/db/json-stream.js.map +1 -0
  176. package/dist/db/pipeline-expression.d.ts +293 -0
  177. package/dist/db/pipeline-expression.d.ts.map +1 -0
  178. package/dist/db/pipeline-expression.js +1436 -0
  179. package/dist/db/pipeline-expression.js.map +1 -0
  180. package/dist/db/pipeline-query.d.ts +6 -0
  181. package/dist/db/pipeline-query.d.ts.map +1 -0
  182. package/dist/db/pipeline-query.js +91 -0
  183. package/dist/db/pipeline-query.js.map +1 -0
  184. package/dist/db/pipeline.d.ts +120 -0
  185. package/dist/db/pipeline.d.ts.map +1 -0
  186. package/dist/db/pipeline.js +396 -0
  187. package/dist/db/pipeline.js.map +1 -0
  188. package/dist/db/query-document-snapshot.d.ts +2 -0
  189. package/dist/db/query-document-snapshot.d.ts.map +1 -0
  190. package/dist/db/query-document-snapshot.js +2 -0
  191. package/dist/db/query-document-snapshot.js.map +1 -0
  192. package/dist/db/query-partition.d.ts +14 -0
  193. package/dist/db/query-partition.d.ts.map +1 -0
  194. package/dist/db/query-partition.js +32 -0
  195. package/dist/db/query-partition.js.map +1 -0
  196. package/dist/db/query-request.d.ts +96 -0
  197. package/dist/db/query-request.d.ts.map +1 -0
  198. package/dist/db/query-request.js +283 -0
  199. package/dist/db/query-request.js.map +1 -0
  200. package/dist/db/query.d.ts +129 -0
  201. package/dist/db/query.d.ts.map +1 -0
  202. package/dist/db/query.js +468 -0
  203. package/dist/db/query.js.map +1 -0
  204. package/dist/db/recursive-delete.d.ts +6 -0
  205. package/dist/db/recursive-delete.d.ts.map +1 -0
  206. package/dist/db/recursive-delete.js +38 -0
  207. package/dist/db/recursive-delete.js.map +1 -0
  208. package/dist/db/snapshot-listener.d.ts +10 -0
  209. package/dist/db/snapshot-listener.d.ts.map +1 -0
  210. package/dist/db/snapshot-listener.js +71 -0
  211. package/dist/db/snapshot-listener.js.map +1 -0
  212. package/dist/db/timestamp.d.ts +29 -0
  213. package/dist/db/timestamp.d.ts.map +1 -0
  214. package/dist/db/timestamp.js +98 -0
  215. package/dist/db/timestamp.js.map +1 -0
  216. package/dist/db/transaction.d.ts +44 -0
  217. package/dist/db/transaction.d.ts.map +1 -0
  218. package/dist/db/transaction.js +177 -0
  219. package/dist/db/transaction.js.map +1 -0
  220. package/dist/db/value-equality.d.ts +3 -0
  221. package/dist/db/value-equality.d.ts.map +1 -0
  222. package/dist/db/value-equality.js +29 -0
  223. package/dist/db/value-equality.js.map +1 -0
  224. package/dist/db/vector-query.d.ts +38 -0
  225. package/dist/db/vector-query.d.ts.map +1 -0
  226. package/dist/db/vector-query.js +110 -0
  227. package/dist/db/vector-query.js.map +1 -0
  228. package/dist/db/vector-value.d.ts +8 -0
  229. package/dist/db/vector-value.d.ts.map +1 -0
  230. package/dist/db/vector-value.js +25 -0
  231. package/dist/db/vector-value.js.map +1 -0
  232. package/dist/db/write-batch.d.ts +25 -0
  233. package/dist/db/write-batch.d.ts.map +1 -0
  234. package/dist/db/write-batch.js +72 -0
  235. package/dist/db/write-batch.js.map +1 -0
  236. package/dist/db/write-request.d.ts +36 -0
  237. package/dist/db/write-request.d.ts.map +1 -0
  238. package/dist/db/write-request.js +257 -0
  239. package/dist/db/write-request.js.map +1 -0
  240. package/dist/firebase-edge-server.d.ts +143 -36
  241. package/dist/firebase-edge-server.d.ts.map +1 -1
  242. package/dist/firebase-edge-server.js +463 -258
  243. package/dist/firebase-edge-server.js.map +1 -1
  244. package/dist/index.d.ts +6 -0
  245. package/dist/index.d.ts.map +1 -1
  246. package/dist/index.js +5 -0
  247. package/dist/index.js.map +1 -1
  248. package/dist/rest-fetch.d.ts +1 -1
  249. package/dist/rest-fetch.d.ts.map +1 -1
  250. package/dist/storage/storage-acl.d.ts +48 -0
  251. package/dist/storage/storage-acl.d.ts.map +1 -0
  252. package/dist/storage/storage-acl.js +101 -0
  253. package/dist/storage/storage-acl.js.map +1 -0
  254. package/dist/storage/storage-bucket-endpoints.d.ts +10 -0
  255. package/dist/storage/storage-bucket-endpoints.d.ts.map +1 -0
  256. package/dist/storage/storage-bucket-endpoints.js +514 -0
  257. package/dist/storage/storage-bucket-endpoints.js.map +1 -0
  258. package/dist/storage/storage-bucket-types.d.ts +183 -0
  259. package/dist/storage/storage-bucket-types.d.ts.map +1 -0
  260. package/dist/storage/storage-bucket-types.js +2 -0
  261. package/dist/storage/storage-bucket-types.js.map +1 -0
  262. package/dist/storage/storage-bucket.d.ts +122 -0
  263. package/dist/storage/storage-bucket.d.ts.map +1 -0
  264. package/dist/storage/storage-bucket.js +544 -0
  265. package/dist/storage/storage-bucket.js.map +1 -0
  266. package/dist/storage/storage-channel.d.ts +10 -0
  267. package/dist/storage/storage-channel.d.ts.map +1 -0
  268. package/dist/storage/storage-channel.js +15 -0
  269. package/dist/storage/storage-channel.js.map +1 -0
  270. package/dist/storage/storage-checksum.d.ts +35 -0
  271. package/dist/storage/storage-checksum.d.ts.map +1 -0
  272. package/dist/storage/storage-checksum.js +312 -0
  273. package/dist/storage/storage-checksum.js.map +1 -0
  274. package/dist/storage/storage-endpoints.d.ts +14 -0
  275. package/dist/storage/storage-endpoints.d.ts.map +1 -0
  276. package/dist/storage/storage-endpoints.js +721 -0
  277. package/dist/storage/storage-endpoints.js.map +1 -0
  278. package/dist/storage/storage-file.d.ts +126 -0
  279. package/dist/storage/storage-file.d.ts.map +1 -0
  280. package/dist/storage/storage-file.js +604 -0
  281. package/dist/storage/storage-file.js.map +1 -0
  282. package/dist/storage/storage-hmac-key.d.ts +26 -0
  283. package/dist/storage/storage-hmac-key.d.ts.map +1 -0
  284. package/dist/storage/storage-hmac-key.js +45 -0
  285. package/dist/storage/storage-hmac-key.js.map +1 -0
  286. package/dist/storage/storage-iam.d.ts +20 -0
  287. package/dist/storage/storage-iam.d.ts.map +1 -0
  288. package/dist/storage/storage-iam.js +43 -0
  289. package/dist/storage/storage-iam.js.map +1 -0
  290. package/dist/storage/storage-md5.d.ts +11 -0
  291. package/dist/storage/storage-md5.d.ts.map +1 -0
  292. package/dist/storage/storage-md5.js +96 -0
  293. package/dist/storage/storage-md5.js.map +1 -0
  294. package/dist/storage/storage-notification.d.ts +24 -0
  295. package/dist/storage/storage-notification.d.ts.map +1 -0
  296. package/dist/storage/storage-notification.js +40 -0
  297. package/dist/storage/storage-notification.js.map +1 -0
  298. package/dist/storage/storage-progress.d.ts +4 -0
  299. package/dist/storage/storage-progress.d.ts.map +1 -0
  300. package/dist/storage/storage-progress.js +17 -0
  301. package/dist/storage/storage-progress.js.map +1 -0
  302. package/dist/storage/storage-reference-endpoints.d.ts +63 -0
  303. package/dist/storage/storage-reference-endpoints.d.ts.map +1 -0
  304. package/dist/storage/storage-reference-endpoints.js +276 -0
  305. package/dist/storage/storage-reference-endpoints.js.map +1 -0
  306. package/dist/storage/storage-reference-helpers.d.ts +12 -0
  307. package/dist/storage/storage-reference-helpers.d.ts.map +1 -0
  308. package/dist/storage/storage-reference-helpers.js +72 -0
  309. package/dist/storage/storage-reference-helpers.js.map +1 -0
  310. package/dist/storage/storage-reference-signing.d.ts +40 -0
  311. package/dist/storage/storage-reference-signing.d.ts.map +1 -0
  312. package/dist/storage/storage-reference-signing.js +289 -0
  313. package/dist/storage/storage-reference-signing.js.map +1 -0
  314. package/dist/storage/storage-reference-types.d.ts +76 -0
  315. package/dist/storage/storage-reference-types.d.ts.map +1 -0
  316. package/dist/storage/storage-reference-types.js +2 -0
  317. package/dist/storage/storage-reference-types.js.map +1 -0
  318. package/dist/storage/storage-results.d.ts +8 -0
  319. package/dist/storage/storage-results.d.ts.map +1 -0
  320. package/dist/storage/storage-results.js +32 -0
  321. package/dist/storage/storage-results.js.map +1 -0
  322. package/dist/storage/storage-resumable.d.ts +18 -0
  323. package/dist/storage/storage-resumable.d.ts.map +1 -0
  324. package/dist/storage/storage-resumable.js +166 -0
  325. package/dist/storage/storage-resumable.js.map +1 -0
  326. package/dist/storage/storage-retry.d.ts +9 -0
  327. package/dist/storage/storage-retry.d.ts.map +1 -0
  328. package/dist/storage/storage-retry.js +104 -0
  329. package/dist/storage/storage-retry.js.map +1 -0
  330. package/dist/storage/storage-signed-url.d.ts +9 -0
  331. package/dist/storage/storage-signed-url.d.ts.map +1 -0
  332. package/dist/storage/storage-signed-url.js +96 -0
  333. package/dist/storage/storage-signed-url.js.map +1 -0
  334. package/dist/storage/storage-special-endpoints.d.ts +10 -0
  335. package/dist/storage/storage-special-endpoints.d.ts.map +1 -0
  336. package/dist/storage/storage-special-endpoints.js +394 -0
  337. package/dist/storage/storage-special-endpoints.js.map +1 -0
  338. package/dist/storage/storage-special-types.d.ts +154 -0
  339. package/dist/storage/storage-special-types.d.ts.map +1 -0
  340. package/dist/storage/storage-special-types.js +2 -0
  341. package/dist/storage/storage-special-types.js.map +1 -0
  342. package/dist/storage/storage-types.d.ts +251 -0
  343. package/dist/storage/storage-types.d.ts.map +1 -0
  344. package/dist/storage/storage-types.js +2 -0
  345. package/dist/storage/storage-types.js.map +1 -0
  346. package/dist/storage/storage-upload-stream.d.ts +41 -0
  347. package/dist/storage/storage-upload-stream.d.ts.map +1 -0
  348. package/dist/storage/storage-upload-stream.js +335 -0
  349. package/dist/storage/storage-upload-stream.js.map +1 -0
  350. package/dist/storage/storage-xml-signing.d.ts +17 -0
  351. package/dist/storage/storage-xml-signing.d.ts.map +1 -0
  352. package/dist/storage/storage-xml-signing.js +144 -0
  353. package/dist/storage/storage-xml-signing.js.map +1 -0
  354. package/dist/storage/storage.d.ts +152 -0
  355. package/dist/storage/storage.d.ts.map +1 -0
  356. package/dist/storage/storage.js +532 -0
  357. package/dist/storage/storage.js.map +1 -0
  358. package/dist/utils/token-cache.d.ts.map +1 -1
  359. package/dist/utils/token-cache.js +3 -2
  360. package/dist/utils/token-cache.js.map +1 -1
  361. package/package.json +22 -6
  362. package/dist/auth/auth-endpoint-errors.test.d.ts +0 -2
  363. package/dist/auth/auth-endpoint-errors.test.d.ts.map +0 -1
  364. package/dist/auth/auth-endpoint-errors.test.js +0 -411
  365. package/dist/auth/auth-endpoint-errors.test.js.map +0 -1
  366. package/dist/auth/email-action-request.test.d.ts +0 -2
  367. package/dist/auth/email-action-request.test.d.ts.map +0 -1
  368. package/dist/auth/email-action-request.test.js +0 -128
  369. package/dist/auth/email-action-request.test.js.map +0 -1
  370. package/dist/auth/errors.test.d.ts +0 -2
  371. package/dist/auth/errors.test.d.ts.map +0 -1
  372. package/dist/auth/errors.test.js +0 -123
  373. package/dist/auth/errors.test.js.map +0 -1
  374. package/dist/auth/firebase-admin-auth.test.d.ts +0 -2
  375. package/dist/auth/firebase-admin-auth.test.d.ts.map +0 -1
  376. package/dist/auth/firebase-admin-auth.test.js +0 -1542
  377. package/dist/auth/firebase-admin-auth.test.js.map +0 -1
  378. package/dist/auth/firebase-auth-endpoints.test.d.ts +0 -2
  379. package/dist/auth/firebase-auth-endpoints.test.d.ts.map +0 -1
  380. package/dist/auth/firebase-auth-endpoints.test.js +0 -1082
  381. package/dist/auth/firebase-auth-endpoints.test.js.map +0 -1
  382. package/dist/auth/firebase-auth.test.d.ts +0 -2
  383. package/dist/auth/firebase-auth.test.d.ts.map +0 -1
  384. package/dist/auth/firebase-auth.test.js +0 -167
  385. package/dist/auth/firebase-auth.test.js.map +0 -1
  386. package/dist/auth/firebase-jwt.test.d.ts +0 -2
  387. package/dist/auth/firebase-jwt.test.d.ts.map +0 -1
  388. package/dist/auth/firebase-jwt.test.js +0 -164
  389. package/dist/auth/firebase-jwt.test.js.map +0 -1
  390. package/dist/auth/github-oauth.d.ts +0 -19
  391. package/dist/auth/github-oauth.d.ts.map +0 -1
  392. package/dist/auth/github-oauth.js +0 -145
  393. package/dist/auth/github-oauth.js.map +0 -1
  394. package/dist/auth/github-oauth.test.d.ts +0 -2
  395. package/dist/auth/github-oauth.test.d.ts.map +0 -1
  396. package/dist/auth/github-oauth.test.js +0 -202
  397. package/dist/auth/github-oauth.test.js.map +0 -1
  398. package/dist/auth/google-oauth.test.d.ts +0 -2
  399. package/dist/auth/google-oauth.test.d.ts.map +0 -1
  400. package/dist/auth/google-oauth.test.js +0 -200
  401. package/dist/auth/google-oauth.test.js.map +0 -1
  402. package/dist/auth/oauth.d.ts +0 -3
  403. package/dist/auth/oauth.d.ts.map +0 -1
  404. package/dist/auth/oauth.js +0 -48
  405. package/dist/auth/oauth.js.map +0 -1
  406. package/dist/auth/oauth.test.d.ts +0 -2
  407. package/dist/auth/oauth.test.d.ts.map +0 -1
  408. package/dist/auth/oauth.test.js +0 -109
  409. package/dist/auth/oauth.test.js.map +0 -1
  410. package/dist/auth/user-batch.test.d.ts +0 -2
  411. package/dist/auth/user-batch.test.d.ts.map +0 -1
  412. package/dist/auth/user-batch.test.js +0 -73
  413. package/dist/auth/user-batch.test.js.map +0 -1
  414. package/dist/auth/user-import.test.d.ts +0 -2
  415. package/dist/auth/user-import.test.d.ts.map +0 -1
  416. package/dist/auth/user-import.test.js +0 -217
  417. package/dist/auth/user-import.test.js.map +0 -1
  418. package/dist/auth/user-record.test.d.ts +0 -2
  419. package/dist/auth/user-record.test.d.ts.map +0 -1
  420. package/dist/auth/user-record.test.js +0 -198
  421. package/dist/auth/user-record.test.js.map +0 -1
  422. package/dist/auth/user-request.test.d.ts +0 -2
  423. package/dist/auth/user-request.test.d.ts.map +0 -1
  424. package/dist/auth/user-request.test.js +0 -327
  425. package/dist/auth/user-request.test.js.map +0 -1
  426. package/dist/firebase-edge-errors.test.d.ts +0 -2
  427. package/dist/firebase-edge-errors.test.d.ts.map +0 -1
  428. package/dist/firebase-edge-errors.test.js +0 -72
  429. package/dist/firebase-edge-errors.test.js.map +0 -1
  430. package/dist/firebase-edge-server.test.d.ts +0 -2
  431. package/dist/firebase-edge-server.test.d.ts.map +0 -1
  432. package/dist/firebase-edge-server.test.js +0 -293
  433. package/dist/firebase-edge-server.test.js.map +0 -1
  434. package/dist/rest-fetch.test.d.ts +0 -2
  435. package/dist/rest-fetch.test.d.ts.map +0 -1
  436. package/dist/rest-fetch.test.js +0 -164
  437. package/dist/rest-fetch.test.js.map +0 -1
@@ -0,0 +1,103 @@
1
+ import { EncryptJWT, jwtDecrypt } from 'jose';
2
+ import { FirebaseEdgeError } from './errors.js';
3
+ import { isLocalRedirectPath } from './provider-session.js';
4
+ const PURPOSE = 'firebase-admin-edge:email-link';
5
+ /** Derive a purpose-specific encryption key from server-only key material. @internal */
6
+ async function emailLinkKey(secret) {
7
+ if (!secret)
8
+ throw new Error('Server key material is required for email links.');
9
+ const bytes = new TextEncoder().encode(`${PURPOSE}\n${secret}`);
10
+ const digest = await crypto.subtle.digest('SHA-256', bytes);
11
+ return new Uint8Array(digest);
12
+ }
13
+ /** Bind optional email and redirect state to this project and tenant for one hour. @internal */
14
+ export async function createEmailLinkState(state, secret, projectId, tenantId) {
15
+ if (!isLocalRedirectPath(state.next))
16
+ throw new Error('The next path must be a local absolute path.');
17
+ const key = await emailLinkKey(secret);
18
+ return new EncryptJWT({ ...state, tenantId: tenantId ?? null })
19
+ .setProtectedHeader({ alg: 'dir', enc: 'A256GCM' })
20
+ .setIssuer(projectId)
21
+ .setAudience(PURPOSE)
22
+ .setIssuedAt()
23
+ .setExpirationTime('1h')
24
+ .encrypt(key);
25
+ }
26
+ /** Authenticate and decrypt email-link state before consuming the Firebase code. @internal */
27
+ export async function readEmailLinkState(token, secret, projectId, tenantId) {
28
+ const key = await emailLinkKey(secret);
29
+ const { payload } = await jwtDecrypt(token, key, {
30
+ issuer: projectId,
31
+ audience: PURPOSE,
32
+ keyManagementAlgorithms: ['dir'],
33
+ contentEncryptionAlgorithms: ['A256GCM']
34
+ });
35
+ if (payload.tenantId !== (tenantId ?? null) ||
36
+ !isLocalRedirectPath(payload.next) ||
37
+ (payload.email !== undefined && typeof payload.email !== 'string'))
38
+ throw new Error('Invalid email-link state.');
39
+ return { email: payload.email, next: payload.next };
40
+ }
41
+ /** Inspect an email action without consuming its code. OAuth callbacks return null. @internal */
42
+ export function parseEmailActionLink(input, apiKey, tenantId) {
43
+ let url = input;
44
+ for (let depth = 0; depth < 3 && !url.searchParams.has('oobCode'); depth++) {
45
+ const inner = url.searchParams.get('link');
46
+ if (!inner)
47
+ break;
48
+ url = new URL(inner);
49
+ }
50
+ const mode = url.searchParams.get('mode');
51
+ const code = url.searchParams.get('oobCode');
52
+ if (!mode &&
53
+ !['oobCode', 'emailLinkState', 'link'].some((key) => url.searchParams.has(key)))
54
+ return null;
55
+ const actionMode = mode ?? 'signIn';
56
+ const key = url.searchParams.get('apiKey');
57
+ const tenant = url.searchParams.get('tenantId');
58
+ if (![
59
+ 'signIn',
60
+ 'resetPassword',
61
+ 'verifyAndChangeEmail',
62
+ 'verifyEmail',
63
+ 'recoverEmail'
64
+ ].includes(actionMode) ||
65
+ (key !== null && key !== apiKey) ||
66
+ (tenant !== null && tenant !== tenantId) ||
67
+ (url.searchParams.has('link') && !code))
68
+ throw new FirebaseEdgeError({
69
+ code: 'auth/invalid-action-code',
70
+ message: 'Invalid or unsupported email action link.'
71
+ });
72
+ return {
73
+ actionMode: actionMode,
74
+ hasLink: Boolean(code?.trim()),
75
+ code,
76
+ url
77
+ };
78
+ }
79
+ /** Parse sign-in state using the shared email-action parser. @internal */
80
+ export function parseEmailSignInLink(input, apiKey, tenantId) {
81
+ const action = parseEmailActionLink(input, apiKey, tenantId);
82
+ if (!action ||
83
+ action.actionMode !== 'signIn' ||
84
+ !action.hasLink ||
85
+ !action.code)
86
+ throw new FirebaseEdgeError({
87
+ code: 'auth/invalid-action-code',
88
+ message: 'Invalid email sign-in link.'
89
+ });
90
+ const { url, code } = action;
91
+ const continuation = url.searchParams.get('continueUrl');
92
+ const state = url.searchParams.get('emailLinkState') ??
93
+ (continuation
94
+ ? new URL(continuation).searchParams.get('emailLinkState')
95
+ : null);
96
+ if (!state)
97
+ throw new FirebaseEdgeError({
98
+ code: 'auth/invalid-action-code',
99
+ message: 'Email-link state is missing.'
100
+ });
101
+ return { code, state };
102
+ }
103
+ //# sourceMappingURL=email-link.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"email-link.js","sourceRoot":"","sources":["../../src/auth/email-link.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,13 @@
1
+ import { type AuthEmulatorOptions } from './auth-emulator.js';
2
+ export type { AuthEmulatorOptions } from './auth-emulator.js';
3
+ import { ProjectConfigManager } from './project-config-manager.js';
4
+ import { TenantManager } from './tenant-manager.js';
5
+ import type { AuthProviderConfig, UpdateAuthProviderRequest, AuthProviderConfigFilter, ListProviderConfigResults } from './auth-config-types.js';
6
+ export type * from './auth-config-types.js';
7
+ export { ProjectConfigManager } from './project-config-manager.js';
8
+ export { TenantManager } from './tenant-manager.js';
9
+ import type { DecodedAuthBlockingToken } from './auth-blocking-types.js';
10
+ export type { DecodedAuthBlockingToken, DecodedAuthBlockingUserRecord } from './auth-blocking-types.js';
1
11
  import type { ServiceAccount } from './firebase-types.js';
2
12
  import { FirebaseEdgeError } from './errors.js';
3
13
  import type { CacheConfig } from './cache-types.js';
@@ -29,11 +39,24 @@ export interface SessionCookieOptions {
29
39
  */
30
40
  export declare class FirebaseAdminAuth {
31
41
  private serviceAccountKey;
32
- private tenantId?;
42
+ readonly tenantId?: string | undefined;
33
43
  private fetch?;
34
44
  private cache?;
35
45
  private cacheName?;
46
+ /** Verify a blocking-event JWT. Audience matching follows the SDK's substring convention. */
47
+ _verifyAuthBlockingToken(token: string, audience?: string): Promise<AdminResult<DecodedAuthBlockingToken>>;
48
+ private readonly emulatorHost;
36
49
  private _cacheName;
50
+ private projectManager?;
51
+ private tenants?;
52
+ createProviderConfig(config: AuthProviderConfig): Promise<AdminResult<AuthProviderConfig>>;
53
+ getProviderConfig(providerId: string): Promise<AdminResult<AuthProviderConfig>>;
54
+ updateProviderConfig(providerId: string, config: UpdateAuthProviderRequest): Promise<AdminResult<AuthProviderConfig>>;
55
+ deleteProviderConfig(providerId: string): Promise<AdminResult<void>>;
56
+ listProviderConfigs(filter: AuthProviderConfigFilter): Promise<AdminResult<ListProviderConfigResults>>;
57
+ projectConfigManager(): ProjectConfigManager;
58
+ tenantManager(): TenantManager;
59
+ private executeConfig;
37
60
  /**
38
61
  * Creates a new Firebase Admin Auth instance.
39
62
  *
@@ -42,8 +65,9 @@ export declare class FirebaseAdminAuth {
42
65
  * @param fetch Optional custom fetch implementation
43
66
  * @param cache Optional cache implementation for token caching
44
67
  * @param cacheName Optional cache key name (defaults to '__cache')
68
+ * @param options Auth emulator configuration; defaults to FIREBASE_AUTH_EMULATOR_HOST when set.
45
69
  */
46
- constructor(serviceAccountKey: ServiceAccount, tenantId?: string | undefined, fetch?: typeof globalThis.fetch | undefined, cache?: CacheConfig | undefined, cacheName?: string | undefined);
70
+ constructor(serviceAccountKey: ServiceAccount, tenantId?: string | undefined, fetch?: typeof globalThis.fetch | undefined, cache?: CacheConfig | undefined, cacheName?: string | undefined, options?: AuthEmulatorOptions);
47
71
  /**
48
72
  * Retrieves a cached service account token or fetches a new one.
49
73
  * Tokens are cached for 1 hour.
@@ -77,9 +101,10 @@ export declare class FirebaseAdminAuth {
77
101
  data: null;
78
102
  error: FirebaseEdgeError;
79
103
  } | {
80
- data: import("./firebase-types.js").UserInfo | null | undefined;
104
+ data: import("./firebase-types.js").UserInfo;
81
105
  error: null;
82
106
  }>;
107
+ private lookupUser;
83
108
  /**
84
109
  * Lists one page of users, using Firebase Admin's page size and token contract.
85
110
  * @param maxResults Page size (1–1000), defaults to 1000.
@@ -103,7 +128,7 @@ export declare class FirebaseAdminAuth {
103
128
  data: null;
104
129
  error: FirebaseEdgeError;
105
130
  } | {
106
- data: import("./firebase-types.js").UserInfo | null | undefined;
131
+ data: import("./firebase-types.js").UserInfo;
107
132
  error: null;
108
133
  }>;
109
134
  /** Look up a linked provider UID, or a primary email/phone identifier. */
@@ -1 +1 @@
1
- {"version":3,"file":"firebase-admin-auth.d.ts","sourceRoot":"","sources":["../../src/auth/firebase-admin-auth.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"firebase-admin-auth.d.ts","sourceRoot":"","sources":["../../src/auth/firebase-admin-auth.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,11 @@
1
- import { generateEmailActionLink, deleteAccountsAdmin, importAccountsAdmin, createAccountAdmin, updateAccountAdmin, deleteAccountAdmin, createSessionCookie, downloadAccount, getAccountInfo, getAccountsInfo, revokeRefreshTokens } from './firebase-auth-endpoints.js';
2
- import { signJWTCustomToken, verifyJWT, verifySessionJWT } from './firebase-jwt.js';
1
+ import { createAuthEmulatorFetch, manageAuthConfig, generateEmailActionLink, deleteAccountsAdmin, importAccountsAdmin, createAccountAdmin, updateAccountAdmin, deleteAccountAdmin, createSessionCookie, downloadAccount, getAccountInfo, getAccountsInfo, revokeRefreshTokens } from './firebase-auth-endpoints.js';
2
+ import { resolveAuthEmulatorHost } from './auth-emulator.js';
3
+ import { buildAuthConfigRequest, validateTenantId } from './auth-config.js';
4
+ import { ProjectConfigManager } from './project-config-manager.js';
5
+ import { TenantManager } from './tenant-manager.js';
6
+ export { ProjectConfigManager } from './project-config-manager.js';
7
+ export { TenantManager } from './tenant-manager.js';
8
+ import { verifyAuthBlockingJWT, signJWTCustomToken, verifyJWT, verifySessionJWT } from './firebase-jwt.js';
3
9
  import { getToken } from './google-oauth.js';
4
10
  import { FirebaseEdgeError, FirebaseAdminAuthErrorInfo, ensureError } from './errors.js';
5
11
  import { validateDeleteUsers, createBatchUserResult } from './user-batch.js';
@@ -17,7 +23,98 @@ export class FirebaseAdminAuth {
17
23
  fetch;
18
24
  cache;
19
25
  cacheName;
26
+ /** Verify a blocking-event JWT. Audience matching follows the SDK's substring convention. */
27
+ async _verifyAuthBlockingToken(token, audience) {
28
+ const result = await verifyAuthBlockingJWT(token, this.serviceAccountKey.project_id, audience, this.fetch, !!this.emulatorHost);
29
+ if (result.error)
30
+ return result;
31
+ if (this.tenantId && result.data.tenant_id !== this.tenantId)
32
+ return {
33
+ data: null,
34
+ error: new FirebaseEdgeError(FirebaseAdminAuthErrorInfo.ADMIN_TENANT_ID_INVALID)
35
+ };
36
+ return result;
37
+ }
38
+ emulatorHost;
20
39
  _cacheName = '__cache';
40
+ projectManager;
41
+ tenants;
42
+ createProviderConfig(config) {
43
+ return this.executeConfig({
44
+ resource: 'provider',
45
+ action: 'create',
46
+ id: config?.providerId,
47
+ properties: config
48
+ });
49
+ }
50
+ getProviderConfig(providerId) {
51
+ return this.executeConfig({
52
+ resource: 'provider',
53
+ action: 'get',
54
+ id: providerId
55
+ });
56
+ }
57
+ updateProviderConfig(providerId, config) {
58
+ return this.executeConfig({
59
+ resource: 'provider',
60
+ action: 'update',
61
+ id: providerId,
62
+ properties: config
63
+ });
64
+ }
65
+ deleteProviderConfig(providerId) {
66
+ return this.executeConfig({
67
+ resource: 'provider',
68
+ action: 'delete',
69
+ id: providerId
70
+ });
71
+ }
72
+ listProviderConfigs(filter) {
73
+ return this.executeConfig({
74
+ resource: 'provider',
75
+ action: 'list',
76
+ type: filter?.type,
77
+ maxResults: filter?.maxResults,
78
+ pageToken: filter?.pageToken
79
+ });
80
+ }
81
+ projectConfigManager() {
82
+ if (this.projectManager)
83
+ return this.projectManager;
84
+ this.projectManager = new ProjectConfigManager(this.executeConfig.bind(this));
85
+ return this.projectManager;
86
+ }
87
+ tenantManager() {
88
+ if (this.tenants)
89
+ return this.tenants;
90
+ this.tenants = new TenantManager(this.executeConfig.bind(this), (tenantId) => new FirebaseAdminAuth(this.serviceAccountKey, tenantId, this.fetch, this.cache, this._cacheName, { emulatorHost: this.emulatorHost }));
91
+ return this.tenants;
92
+ }
93
+ async executeConfig(operation) {
94
+ try {
95
+ buildAuthConfigRequest(operation);
96
+ const { data: token, error } = await this.getCachedToken();
97
+ if (error)
98
+ return { data: null, error };
99
+ if (!token?.access_token)
100
+ return {
101
+ data: null,
102
+ error: new FirebaseEdgeError(FirebaseAdminAuthErrorInfo.ADMIN_NO_TOKEN_RETURNED)
103
+ };
104
+ return await manageAuthConfig(this.serviceAccountKey.project_id, operation, token.access_token, this.fetch, this.tenantId);
105
+ }
106
+ catch (cause) {
107
+ if (cause instanceof FirebaseEdgeError)
108
+ return { data: null, error: cause };
109
+ return {
110
+ data: null,
111
+ error: new FirebaseEdgeError({
112
+ code: 'auth/configuration-request-failed',
113
+ message: 'Authentication configuration request failed.'
114
+ }, { cause: ensureError(cause) })
115
+ };
116
+ }
117
+ }
21
118
  /**
22
119
  * Creates a new Firebase Admin Auth instance.
23
120
  *
@@ -26,13 +123,19 @@ export class FirebaseAdminAuth {
26
123
  * @param fetch Optional custom fetch implementation
27
124
  * @param cache Optional cache implementation for token caching
28
125
  * @param cacheName Optional cache key name (defaults to '__cache')
126
+ * @param options Auth emulator configuration; defaults to FIREBASE_AUTH_EMULATOR_HOST when set.
29
127
  */
30
- constructor(serviceAccountKey, tenantId, fetch, cache, cacheName) {
128
+ constructor(serviceAccountKey, tenantId, fetch, cache, cacheName, options = {}) {
31
129
  this.serviceAccountKey = serviceAccountKey;
32
130
  this.tenantId = tenantId;
33
131
  this.fetch = fetch;
34
132
  this.cache = cache;
35
133
  this.cacheName = cacheName;
134
+ if (tenantId !== undefined)
135
+ validateTenantId(tenantId);
136
+ this.emulatorHost = resolveAuthEmulatorHost(options.emulatorHost);
137
+ if (this.emulatorHost)
138
+ this.fetch = createAuthEmulatorFetch(this.emulatorHost, this.fetch);
36
139
  this._cacheName = this.cacheName || this._cacheName;
37
140
  }
38
141
  /**
@@ -42,7 +145,20 @@ export class FirebaseAdminAuth {
42
145
  * @returns Promise with token data and error
43
146
  */
44
147
  async getCachedToken() {
45
- const cachedToken = await this.cache?.getCache(this._cacheName);
148
+ if (this.emulatorHost) {
149
+ return {
150
+ data: {
151
+ access_token: 'owner',
152
+ expires_in: 3600,
153
+ token_type: 'Bearer',
154
+ scope: '',
155
+ id_token: ''
156
+ },
157
+ error: null
158
+ };
159
+ }
160
+ const cacheKey = `${this._cacheName}:auth:${this.serviceAccountKey.client_email}`;
161
+ const cachedToken = await this.cache?.getCache(cacheKey);
46
162
  if (cachedToken) {
47
163
  return {
48
164
  data: cachedToken,
@@ -51,8 +167,11 @@ export class FirebaseAdminAuth {
51
167
  }
52
168
  const { data: token, error: getTokenError } = await getToken(this.serviceAccountKey, this.fetch);
53
169
  if (token && this.cache) {
54
- // Google tokens are valid for 1 hour
55
- this.cache?.setCache('token', token, 3600);
170
+ // Cache adapters accept milliseconds. Expire before the OAuth token does.
171
+ const ttlMs = Math.max(0, (token.expires_in - 60) * 1000);
172
+ if (Number.isFinite(ttlMs) && ttlMs > 0) {
173
+ await this.cache.setCache(cacheKey, token, ttlMs);
174
+ }
56
175
  }
57
176
  if (getTokenError) {
58
177
  return {
@@ -342,24 +461,37 @@ export class FirebaseAdminAuth {
342
461
  * @returns Promise with object containing user data or null, and error if any
343
462
  */
344
463
  async getUser(uid) {
345
- const { data: token, error: tokenError } = await this.getCachedToken();
346
- if (tokenError) {
347
- return {
348
- data: null,
349
- error: tokenError
350
- };
464
+ return this.lookupUser({ uid });
465
+ }
466
+ async lookupUser(identifier) {
467
+ const validation = buildUsersLookupRequest([identifier]);
468
+ if (validation.error)
469
+ return { data: null, error: validation.error };
470
+ try {
471
+ const { data: token, error: tokenError } = await this.getCachedToken();
472
+ if (tokenError)
473
+ return { data: null, error: tokenError };
474
+ if (!token?.access_token)
475
+ return {
476
+ data: null,
477
+ error: new FirebaseEdgeError(FirebaseAdminAuthErrorInfo.ADMIN_NO_TOKEN_RETURNED)
478
+ };
479
+ const result = await getAccountInfo(identifier, token.access_token, this.serviceAccountKey.project_id, this.tenantId, this.fetch);
480
+ if (result.error)
481
+ return { data: null, error: result.error };
482
+ if (!result.data)
483
+ return {
484
+ data: null,
485
+ error: new FirebaseEdgeError(FirebaseAdminAuthErrorInfo.ADMIN_USER_NOT_FOUND)
486
+ };
487
+ return { data: result.data, error: null };
351
488
  }
352
- const { data, error } = await getAccountInfo({ uid }, token.access_token, this.serviceAccountKey.project_id, this.tenantId, this.fetch);
353
- if (error) {
489
+ catch (cause) {
354
490
  return {
355
491
  data: null,
356
- error
492
+ error: new FirebaseEdgeError(FirebaseAdminAuthErrorInfo.ADMIN_USER_LOOKUP_FAILED, { cause: ensureError(cause) })
357
493
  };
358
494
  }
359
- return {
360
- data,
361
- error: null
362
- };
363
495
  }
364
496
  /**
365
497
  * Lists one page of users, using Firebase Admin's page size and token contract.
@@ -435,24 +567,7 @@ export class FirebaseAdminAuth {
435
567
  * @returns Promise with object containing user data or null, and error if any
436
568
  */
437
569
  async getUserByEmail(email) {
438
- const { data: token, error: tokenError } = await this.getCachedToken();
439
- if (tokenError) {
440
- return {
441
- data: null,
442
- error: tokenError
443
- };
444
- }
445
- const { data, error } = await getAccountInfo({ email }, token.access_token, this.serviceAccountKey.project_id, this.tenantId, this.fetch);
446
- if (error) {
447
- return {
448
- data: null,
449
- error
450
- };
451
- }
452
- return {
453
- data,
454
- error: null
455
- };
570
+ return this.lookupUser({ email });
456
571
  }
457
572
  /** Look up a linked provider UID, or a primary email/phone identifier. */
458
573
  async getUserByProviderUid(providerId, uid) {
@@ -512,7 +627,7 @@ export class FirebaseAdminAuth {
512
627
  * @returns Promise with object containing decoded token payload or null, and error if any
513
628
  */
514
629
  async verifyIdToken(idToken, checkRevoked = false) {
515
- const { data: decodedIdToken, error: verifyError } = await verifyJWT(idToken, this.serviceAccountKey.project_id, this.fetch);
630
+ const { data: decodedIdToken, error: verifyError } = await verifyJWT(idToken, this.serviceAccountKey.project_id, this.fetch, !!this.emulatorHost);
516
631
  if (verifyError) {
517
632
  return {
518
633
  data: null,
@@ -540,7 +655,7 @@ export class FirebaseAdminAuth {
540
655
  };
541
656
  }
542
657
  }
543
- if (!checkRevoked) {
658
+ if (!checkRevoked && !this.emulatorHost) {
544
659
  return {
545
660
  data: decodedIdToken,
546
661
  error: null
@@ -550,7 +665,10 @@ export class FirebaseAdminAuth {
550
665
  if (userError) {
551
666
  return {
552
667
  data: null,
553
- error: new FirebaseEdgeError(FirebaseAdminAuthErrorInfo.ADMIN_USER_LOOKUP_FAILED, { cause: ensureError(userError) })
668
+ error: new FirebaseEdgeError(userError.code ===
669
+ FirebaseAdminAuthErrorInfo.ADMIN_USER_NOT_FOUND.code
670
+ ? FirebaseAdminAuthErrorInfo.ADMIN_USER_RECORD_NOT_FOUND
671
+ : FirebaseAdminAuthErrorInfo.ADMIN_USER_LOOKUP_FAILED, { cause: ensureError(userError) })
554
672
  };
555
673
  }
556
674
  if (!user) {
@@ -693,7 +811,7 @@ export class FirebaseAdminAuth {
693
811
  * @returns Promise with object containing decoded session payload or null, and error if any
694
812
  */
695
813
  async verifySessionCookie(sessionCookie, checkRevoked = false) {
696
- const { data, error } = await verifySessionJWT(sessionCookie, this.serviceAccountKey.project_id, this.fetch);
814
+ const { data, error } = await verifySessionJWT(sessionCookie, this.serviceAccountKey.project_id, this.fetch, !!this.emulatorHost);
697
815
  if (error) {
698
816
  return {
699
817
  data: null,
@@ -721,7 +839,7 @@ export class FirebaseAdminAuth {
721
839
  };
722
840
  }
723
841
  }
724
- if (!checkRevoked) {
842
+ if (!checkRevoked && !this.emulatorHost) {
725
843
  return {
726
844
  data,
727
845
  error: null
@@ -731,7 +849,10 @@ export class FirebaseAdminAuth {
731
849
  if (userError) {
732
850
  return {
733
851
  data: null,
734
- error: new FirebaseEdgeError(FirebaseAdminAuthErrorInfo.ADMIN_USER_LOOKUP_FAILED, { cause: ensureError(userError) })
852
+ error: new FirebaseEdgeError(userError.code ===
853
+ FirebaseAdminAuthErrorInfo.ADMIN_USER_NOT_FOUND.code
854
+ ? FirebaseAdminAuthErrorInfo.ADMIN_USER_RECORD_NOT_FOUND
855
+ : FirebaseAdminAuthErrorInfo.ADMIN_USER_LOOKUP_FAILED, { cause: ensureError(userError) })
735
856
  };
736
857
  }
737
858
  if (!user) {
@@ -762,25 +883,40 @@ export class FirebaseAdminAuth {
762
883
  * @returns Promise with object containing revoke response data or null, and error if any
763
884
  */
764
885
  async revokeRefreshTokens(uid) {
765
- const { data: token, error: getTokenError } = await this.getCachedToken();
766
- if (getTokenError) {
886
+ const uidError = validateUserUid(uid);
887
+ if (uidError)
888
+ return { data: null, error: uidError };
889
+ try {
890
+ const { data: token, error: getTokenError } = await this.getCachedToken();
891
+ if (getTokenError) {
892
+ return {
893
+ data: null,
894
+ error: new FirebaseEdgeError(FirebaseAdminAuthErrorInfo.ADMIN_SERVICE_ACCOUNT_TOKEN_FAILED, { cause: getTokenError })
895
+ };
896
+ }
897
+ if (!token?.access_token)
898
+ return {
899
+ data: null,
900
+ error: new FirebaseEdgeError(FirebaseAdminAuthErrorInfo.ADMIN_NO_TOKEN_RETURNED)
901
+ };
902
+ const { data: revokeData, error: revokeError } = await revokeRefreshTokens(this.serviceAccountKey.project_id, uid, token.access_token, this.fetch, this.tenantId);
903
+ if (revokeError || !revokeData) {
904
+ return {
905
+ data: null,
906
+ error: new FirebaseEdgeError(FirebaseAdminAuthErrorInfo.ADMIN_REVOKE_TOKENS_FAILED, { cause: ensureError(revokeError) })
907
+ };
908
+ }
767
909
  return {
768
- data: null,
769
- error: new FirebaseEdgeError(FirebaseAdminAuthErrorInfo.ADMIN_SERVICE_ACCOUNT_TOKEN_FAILED, { cause: getTokenError })
910
+ data: revokeData,
911
+ error: null
770
912
  };
771
913
  }
772
- const { data: revokeData, error: revokeError } = await revokeRefreshTokens(this.serviceAccountKey.project_id, uid, token.access_token, this.fetch, this.tenantId);
773
- if (revokeError) {
774
- console.error('Error revoking tokens:', revokeError);
914
+ catch (cause) {
775
915
  return {
776
916
  data: null,
777
- error: new FirebaseEdgeError(FirebaseAdminAuthErrorInfo.ADMIN_REVOKE_TOKENS_FAILED, { cause: ensureError(revokeError) })
917
+ error: new FirebaseEdgeError(FirebaseAdminAuthErrorInfo.ADMIN_REVOKE_TOKENS_FAILED, { cause: ensureError(cause) })
778
918
  };
779
919
  }
780
- return {
781
- data: revokeData,
782
- error: null
783
- };
784
920
  }
785
921
  /**
786
922
  * Creates a custom Firebase authentication token for a given user.
@@ -790,10 +926,7 @@ export class FirebaseAdminAuth {
790
926
  * @returns Promise with object containing custom token string or null, and error if any
791
927
  */
792
928
  async createCustomToken(uid, developerClaims = {}) {
793
- const claims = this.tenantId
794
- ? { ...developerClaims, tenant_id: this.tenantId }
795
- : developerClaims;
796
- const { data, error } = await signJWTCustomToken(uid, this.serviceAccountKey, claims);
929
+ const { data, error } = await signJWTCustomToken(uid, this.serviceAccountKey, developerClaims, this.tenantId, !!this.emulatorHost);
797
930
  if (error) {
798
931
  return {
799
932
  data: null,