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.
- package/README.md +102 -261
- package/dist/app-check/app-check-endpoints.d.ts +31 -0
- package/dist/app-check/app-check-endpoints.d.ts.map +1 -0
- package/dist/app-check/app-check-endpoints.js +75 -0
- package/dist/app-check/app-check-endpoints.js.map +1 -0
- package/dist/app-check/app-check-jwt.d.ts +16 -0
- package/dist/app-check/app-check-jwt.d.ts.map +1 -0
- package/dist/app-check/app-check-jwt.js +59 -0
- package/dist/app-check/app-check-jwt.js.map +1 -0
- package/dist/app-check/app-check.d.ts +43 -0
- package/dist/app-check/app-check.d.ts.map +1 -0
- package/dist/app-check/app-check.js +141 -0
- package/dist/app-check/app-check.js.map +1 -0
- package/dist/auth/auth-blocking-types.d.ts +44 -0
- package/dist/auth/auth-blocking-types.d.ts.map +1 -0
- package/dist/auth/auth-blocking-types.js +2 -0
- package/dist/auth/auth-blocking-types.js.map +1 -0
- package/dist/auth/auth-config-types.d.ts +146 -0
- package/dist/auth/auth-config-types.d.ts.map +1 -0
- package/dist/auth/auth-config-types.js +2 -0
- package/dist/auth/auth-config-types.js.map +1 -0
- package/dist/auth/auth-config.d.ts +15 -0
- package/dist/auth/auth-config.d.ts.map +1 -0
- package/dist/auth/auth-config.js +413 -0
- package/dist/auth/auth-config.js.map +1 -0
- package/dist/auth/auth-emulator.d.ts +7 -0
- package/dist/auth/auth-emulator.d.ts.map +1 -0
- package/dist/auth/auth-emulator.js +24 -0
- package/dist/auth/auth-emulator.js.map +1 -0
- package/dist/auth/auth-endpoint-errors.d.ts +2 -0
- package/dist/auth/auth-endpoint-errors.d.ts.map +1 -1
- package/dist/auth/auth-endpoint-errors.js +20 -1
- package/dist/auth/auth-endpoint-errors.js.map +1 -1
- package/dist/auth/email-link.d.ts +24 -0
- package/dist/auth/email-link.d.ts.map +1 -0
- package/dist/auth/email-link.js +103 -0
- package/dist/auth/email-link.js.map +1 -0
- package/dist/auth/firebase-admin-auth.d.ts +29 -4
- package/dist/auth/firebase-admin-auth.d.ts.map +1 -1
- package/dist/auth/firebase-admin-auth.js +192 -59
- package/dist/auth/firebase-admin-auth.js.map +1 -1
- package/dist/auth/firebase-auth-endpoints.d.ts +64 -5
- package/dist/auth/firebase-auth-endpoints.d.ts.map +1 -1
- package/dist/auth/firebase-auth-endpoints.js +258 -73
- package/dist/auth/firebase-auth-endpoints.js.map +1 -1
- package/dist/auth/firebase-auth.d.ts +78 -4
- package/dist/auth/firebase-auth.d.ts.map +1 -1
- package/dist/auth/firebase-auth.js +101 -8
- package/dist/auth/firebase-auth.js.map +1 -1
- package/dist/auth/firebase-jwt.d.ts +19 -10
- package/dist/auth/firebase-jwt.d.ts.map +1 -1
- package/dist/auth/firebase-jwt.js +176 -39
- package/dist/auth/firebase-jwt.js.map +1 -1
- package/dist/auth/firebase-types.d.ts +3 -0
- package/dist/auth/firebase-types.d.ts.map +1 -1
- package/dist/auth/google-oauth.d.ts +0 -1
- package/dist/auth/google-oauth.d.ts.map +1 -1
- package/dist/auth/google-oauth.js +16 -86
- package/dist/auth/google-oauth.js.map +1 -1
- package/dist/auth/project-config-manager.d.ts +10 -0
- package/dist/auth/project-config-manager.d.ts.map +1 -0
- package/dist/auth/project-config-manager.js +22 -0
- package/dist/auth/project-config-manager.js.map +1 -0
- package/dist/auth/provider-credential.d.ts +43 -0
- package/dist/auth/provider-credential.d.ts.map +1 -0
- package/dist/auth/provider-credential.js +107 -0
- package/dist/auth/provider-credential.js.map +1 -0
- package/dist/auth/provider-session.d.ts +10 -0
- package/dist/auth/provider-session.d.ts.map +1 -0
- package/dist/auth/provider-session.js +28 -0
- package/dist/auth/provider-session.js.map +1 -0
- package/dist/auth/tenant-manager.d.ts +17 -0
- package/dist/auth/tenant-manager.d.ts.map +1 -0
- package/dist/auth/tenant-manager.js +59 -0
- package/dist/auth/tenant-manager.js.map +1 -0
- package/dist/db/aggregate.d.ts +49 -0
- package/dist/db/aggregate.d.ts.map +1 -0
- package/dist/db/aggregate.js +115 -0
- package/dist/db/aggregate.js.map +1 -0
- package/dist/db/bulk-writer.d.ts +55 -0
- package/dist/db/bulk-writer.d.ts.map +1 -0
- package/dist/db/bulk-writer.js +257 -0
- package/dist/db/bulk-writer.js.map +1 -0
- package/dist/db/bundle-builder.d.ts +17 -0
- package/dist/db/bundle-builder.d.ts.map +1 -0
- package/dist/db/bundle-builder.js +118 -0
- package/dist/db/bundle-builder.js.map +1 -0
- package/dist/db/bytes.d.ts +12 -0
- package/dist/db/bytes.d.ts.map +1 -0
- package/dist/db/bytes.js +49 -0
- package/dist/db/bytes.js.map +1 -0
- package/dist/db/collection-group.d.ts +14 -0
- package/dist/db/collection-group.d.ts.map +1 -0
- package/dist/db/collection-group.js +43 -0
- package/dist/db/collection-group.js.map +1 -0
- package/dist/db/collection-reference.d.ts +21 -0
- package/dist/db/collection-reference.d.ts.map +1 -0
- package/dist/db/collection-reference.js +46 -0
- package/dist/db/collection-reference.js.map +1 -0
- package/dist/db/document-reference.d.ts +41 -0
- package/dist/db/document-reference.d.ts.map +1 -0
- package/dist/db/document-reference.js +125 -0
- package/dist/db/document-reference.js.map +1 -0
- package/dist/db/document-snapshot.d.ts +31 -0
- package/dist/db/document-snapshot.d.ts.map +1 -0
- package/dist/db/document-snapshot.js +103 -0
- package/dist/db/document-snapshot.js.map +1 -0
- package/dist/db/explain.d.ts +28 -0
- package/dist/db/explain.d.ts.map +1 -0
- package/dist/db/explain.js +61 -0
- package/dist/db/explain.js.map +1 -0
- package/dist/db/field-path.d.ts +10 -0
- package/dist/db/field-path.d.ts.map +1 -0
- package/dist/db/field-path.js +65 -0
- package/dist/db/field-path.js.map +1 -0
- package/dist/db/field-value.d.ts +17 -0
- package/dist/db/field-value.d.ts.map +1 -0
- package/dist/db/field-value.js +57 -0
- package/dist/db/field-value.js.map +1 -0
- package/dist/db/filter.d.ts +20 -0
- package/dist/db/filter.d.ts.map +1 -0
- package/dist/db/filter.js +48 -0
- package/dist/db/filter.js.map +1 -0
- package/dist/db/firestore-converter.d.ts +11 -0
- package/dist/db/firestore-converter.d.ts.map +1 -0
- package/dist/db/firestore-converter.js +14 -0
- package/dist/db/firestore-converter.js.map +1 -0
- package/dist/db/firestore-document.d.ts +62 -0
- package/dist/db/firestore-document.d.ts.map +1 -0
- package/dist/db/firestore-document.js +238 -0
- package/dist/db/firestore-document.js.map +1 -0
- package/dist/db/firestore-endpoints.d.ts +41 -0
- package/dist/db/firestore-endpoints.d.ts.map +1 -0
- package/dist/db/firestore-endpoints.js +735 -0
- package/dist/db/firestore-endpoints.js.map +1 -0
- package/dist/db/firestore-error-codes.d.ts +24 -0
- package/dist/db/firestore-error-codes.d.ts.map +1 -0
- package/dist/db/firestore-error-codes.js +24 -0
- package/dist/db/firestore-error-codes.js.map +1 -0
- package/dist/db/firestore-logging.d.ts +23 -0
- package/dist/db/firestore-logging.d.ts.map +1 -0
- package/dist/db/firestore-logging.js +41 -0
- package/dist/db/firestore-logging.js.map +1 -0
- package/dist/db/firestore-path.d.ts +4 -0
- package/dist/db/firestore-path.d.ts.map +1 -0
- package/dist/db/firestore-path.js +37 -0
- package/dist/db/firestore-path.js.map +1 -0
- package/dist/db/firestore-results.d.ts +12 -0
- package/dist/db/firestore-results.d.ts.map +1 -0
- package/dist/db/firestore-results.js +19 -0
- package/dist/db/firestore-results.js.map +1 -0
- package/dist/db/firestore-settings.d.ts +22 -0
- package/dist/db/firestore-settings.d.ts.map +1 -0
- package/dist/db/firestore-settings.js +83 -0
- package/dist/db/firestore-settings.js.map +1 -0
- package/dist/db/firestore-telemetry.d.ts +21 -0
- package/dist/db/firestore-telemetry.d.ts.map +1 -0
- package/dist/db/firestore-telemetry.js +84 -0
- package/dist/db/firestore-telemetry.js.map +1 -0
- package/dist/db/firestore-types.d.ts +25 -0
- package/dist/db/firestore-types.d.ts.map +1 -0
- package/dist/db/firestore-types.js +2 -0
- package/dist/db/firestore-types.js.map +1 -0
- package/dist/db/firestore.d.ts +151 -0
- package/dist/db/firestore.d.ts.map +1 -0
- package/dist/db/firestore.js +505 -0
- package/dist/db/firestore.js.map +1 -0
- package/dist/db/geo-point.d.ts +11 -0
- package/dist/db/geo-point.d.ts.map +1 -0
- package/dist/db/geo-point.js +29 -0
- package/dist/db/geo-point.js.map +1 -0
- package/dist/db/json-stream.d.ts +3 -0
- package/dist/db/json-stream.d.ts.map +1 -0
- package/dist/db/json-stream.js +117 -0
- package/dist/db/json-stream.js.map +1 -0
- package/dist/db/pipeline-expression.d.ts +293 -0
- package/dist/db/pipeline-expression.d.ts.map +1 -0
- package/dist/db/pipeline-expression.js +1436 -0
- package/dist/db/pipeline-expression.js.map +1 -0
- package/dist/db/pipeline-query.d.ts +6 -0
- package/dist/db/pipeline-query.d.ts.map +1 -0
- package/dist/db/pipeline-query.js +91 -0
- package/dist/db/pipeline-query.js.map +1 -0
- package/dist/db/pipeline.d.ts +120 -0
- package/dist/db/pipeline.d.ts.map +1 -0
- package/dist/db/pipeline.js +396 -0
- package/dist/db/pipeline.js.map +1 -0
- package/dist/db/query-document-snapshot.d.ts +2 -0
- package/dist/db/query-document-snapshot.d.ts.map +1 -0
- package/dist/db/query-document-snapshot.js +2 -0
- package/dist/db/query-document-snapshot.js.map +1 -0
- package/dist/db/query-partition.d.ts +14 -0
- package/dist/db/query-partition.d.ts.map +1 -0
- package/dist/db/query-partition.js +32 -0
- package/dist/db/query-partition.js.map +1 -0
- package/dist/db/query-request.d.ts +96 -0
- package/dist/db/query-request.d.ts.map +1 -0
- package/dist/db/query-request.js +283 -0
- package/dist/db/query-request.js.map +1 -0
- package/dist/db/query.d.ts +129 -0
- package/dist/db/query.d.ts.map +1 -0
- package/dist/db/query.js +468 -0
- package/dist/db/query.js.map +1 -0
- package/dist/db/recursive-delete.d.ts +6 -0
- package/dist/db/recursive-delete.d.ts.map +1 -0
- package/dist/db/recursive-delete.js +38 -0
- package/dist/db/recursive-delete.js.map +1 -0
- package/dist/db/snapshot-listener.d.ts +10 -0
- package/dist/db/snapshot-listener.d.ts.map +1 -0
- package/dist/db/snapshot-listener.js +71 -0
- package/dist/db/snapshot-listener.js.map +1 -0
- package/dist/db/timestamp.d.ts +29 -0
- package/dist/db/timestamp.d.ts.map +1 -0
- package/dist/db/timestamp.js +98 -0
- package/dist/db/timestamp.js.map +1 -0
- package/dist/db/transaction.d.ts +44 -0
- package/dist/db/transaction.d.ts.map +1 -0
- package/dist/db/transaction.js +177 -0
- package/dist/db/transaction.js.map +1 -0
- package/dist/db/value-equality.d.ts +3 -0
- package/dist/db/value-equality.d.ts.map +1 -0
- package/dist/db/value-equality.js +29 -0
- package/dist/db/value-equality.js.map +1 -0
- package/dist/db/vector-query.d.ts +38 -0
- package/dist/db/vector-query.d.ts.map +1 -0
- package/dist/db/vector-query.js +110 -0
- package/dist/db/vector-query.js.map +1 -0
- package/dist/db/vector-value.d.ts +8 -0
- package/dist/db/vector-value.d.ts.map +1 -0
- package/dist/db/vector-value.js +25 -0
- package/dist/db/vector-value.js.map +1 -0
- package/dist/db/write-batch.d.ts +25 -0
- package/dist/db/write-batch.d.ts.map +1 -0
- package/dist/db/write-batch.js +72 -0
- package/dist/db/write-batch.js.map +1 -0
- package/dist/db/write-request.d.ts +36 -0
- package/dist/db/write-request.d.ts.map +1 -0
- package/dist/db/write-request.js +257 -0
- package/dist/db/write-request.js.map +1 -0
- package/dist/firebase-edge-server.d.ts +143 -36
- package/dist/firebase-edge-server.d.ts.map +1 -1
- package/dist/firebase-edge-server.js +463 -258
- package/dist/firebase-edge-server.js.map +1 -1
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -1
- package/dist/rest-fetch.d.ts +1 -1
- package/dist/rest-fetch.d.ts.map +1 -1
- package/dist/storage/storage-acl.d.ts +48 -0
- package/dist/storage/storage-acl.d.ts.map +1 -0
- package/dist/storage/storage-acl.js +101 -0
- package/dist/storage/storage-acl.js.map +1 -0
- package/dist/storage/storage-bucket-endpoints.d.ts +10 -0
- package/dist/storage/storage-bucket-endpoints.d.ts.map +1 -0
- package/dist/storage/storage-bucket-endpoints.js +514 -0
- package/dist/storage/storage-bucket-endpoints.js.map +1 -0
- package/dist/storage/storage-bucket-types.d.ts +183 -0
- package/dist/storage/storage-bucket-types.d.ts.map +1 -0
- package/dist/storage/storage-bucket-types.js +2 -0
- package/dist/storage/storage-bucket-types.js.map +1 -0
- package/dist/storage/storage-bucket.d.ts +122 -0
- package/dist/storage/storage-bucket.d.ts.map +1 -0
- package/dist/storage/storage-bucket.js +544 -0
- package/dist/storage/storage-bucket.js.map +1 -0
- package/dist/storage/storage-channel.d.ts +10 -0
- package/dist/storage/storage-channel.d.ts.map +1 -0
- package/dist/storage/storage-channel.js +15 -0
- package/dist/storage/storage-channel.js.map +1 -0
- package/dist/storage/storage-checksum.d.ts +35 -0
- package/dist/storage/storage-checksum.d.ts.map +1 -0
- package/dist/storage/storage-checksum.js +312 -0
- package/dist/storage/storage-checksum.js.map +1 -0
- package/dist/storage/storage-endpoints.d.ts +14 -0
- package/dist/storage/storage-endpoints.d.ts.map +1 -0
- package/dist/storage/storage-endpoints.js +721 -0
- package/dist/storage/storage-endpoints.js.map +1 -0
- package/dist/storage/storage-file.d.ts +126 -0
- package/dist/storage/storage-file.d.ts.map +1 -0
- package/dist/storage/storage-file.js +604 -0
- package/dist/storage/storage-file.js.map +1 -0
- package/dist/storage/storage-hmac-key.d.ts +26 -0
- package/dist/storage/storage-hmac-key.d.ts.map +1 -0
- package/dist/storage/storage-hmac-key.js +45 -0
- package/dist/storage/storage-hmac-key.js.map +1 -0
- package/dist/storage/storage-iam.d.ts +20 -0
- package/dist/storage/storage-iam.d.ts.map +1 -0
- package/dist/storage/storage-iam.js +43 -0
- package/dist/storage/storage-iam.js.map +1 -0
- package/dist/storage/storage-md5.d.ts +11 -0
- package/dist/storage/storage-md5.d.ts.map +1 -0
- package/dist/storage/storage-md5.js +96 -0
- package/dist/storage/storage-md5.js.map +1 -0
- package/dist/storage/storage-notification.d.ts +24 -0
- package/dist/storage/storage-notification.d.ts.map +1 -0
- package/dist/storage/storage-notification.js +40 -0
- package/dist/storage/storage-notification.js.map +1 -0
- package/dist/storage/storage-progress.d.ts +4 -0
- package/dist/storage/storage-progress.d.ts.map +1 -0
- package/dist/storage/storage-progress.js +17 -0
- package/dist/storage/storage-progress.js.map +1 -0
- package/dist/storage/storage-reference-endpoints.d.ts +63 -0
- package/dist/storage/storage-reference-endpoints.d.ts.map +1 -0
- package/dist/storage/storage-reference-endpoints.js +276 -0
- package/dist/storage/storage-reference-endpoints.js.map +1 -0
- package/dist/storage/storage-reference-helpers.d.ts +12 -0
- package/dist/storage/storage-reference-helpers.d.ts.map +1 -0
- package/dist/storage/storage-reference-helpers.js +72 -0
- package/dist/storage/storage-reference-helpers.js.map +1 -0
- package/dist/storage/storage-reference-signing.d.ts +40 -0
- package/dist/storage/storage-reference-signing.d.ts.map +1 -0
- package/dist/storage/storage-reference-signing.js +289 -0
- package/dist/storage/storage-reference-signing.js.map +1 -0
- package/dist/storage/storage-reference-types.d.ts +76 -0
- package/dist/storage/storage-reference-types.d.ts.map +1 -0
- package/dist/storage/storage-reference-types.js +2 -0
- package/dist/storage/storage-reference-types.js.map +1 -0
- package/dist/storage/storage-results.d.ts +8 -0
- package/dist/storage/storage-results.d.ts.map +1 -0
- package/dist/storage/storage-results.js +32 -0
- package/dist/storage/storage-results.js.map +1 -0
- package/dist/storage/storage-resumable.d.ts +18 -0
- package/dist/storage/storage-resumable.d.ts.map +1 -0
- package/dist/storage/storage-resumable.js +166 -0
- package/dist/storage/storage-resumable.js.map +1 -0
- package/dist/storage/storage-retry.d.ts +9 -0
- package/dist/storage/storage-retry.d.ts.map +1 -0
- package/dist/storage/storage-retry.js +104 -0
- package/dist/storage/storage-retry.js.map +1 -0
- package/dist/storage/storage-signed-url.d.ts +9 -0
- package/dist/storage/storage-signed-url.d.ts.map +1 -0
- package/dist/storage/storage-signed-url.js +96 -0
- package/dist/storage/storage-signed-url.js.map +1 -0
- package/dist/storage/storage-special-endpoints.d.ts +10 -0
- package/dist/storage/storage-special-endpoints.d.ts.map +1 -0
- package/dist/storage/storage-special-endpoints.js +394 -0
- package/dist/storage/storage-special-endpoints.js.map +1 -0
- package/dist/storage/storage-special-types.d.ts +154 -0
- package/dist/storage/storage-special-types.d.ts.map +1 -0
- package/dist/storage/storage-special-types.js +2 -0
- package/dist/storage/storage-special-types.js.map +1 -0
- package/dist/storage/storage-types.d.ts +251 -0
- package/dist/storage/storage-types.d.ts.map +1 -0
- package/dist/storage/storage-types.js +2 -0
- package/dist/storage/storage-types.js.map +1 -0
- package/dist/storage/storage-upload-stream.d.ts +41 -0
- package/dist/storage/storage-upload-stream.d.ts.map +1 -0
- package/dist/storage/storage-upload-stream.js +335 -0
- package/dist/storage/storage-upload-stream.js.map +1 -0
- package/dist/storage/storage-xml-signing.d.ts +17 -0
- package/dist/storage/storage-xml-signing.d.ts.map +1 -0
- package/dist/storage/storage-xml-signing.js +144 -0
- package/dist/storage/storage-xml-signing.js.map +1 -0
- package/dist/storage/storage.d.ts +152 -0
- package/dist/storage/storage.d.ts.map +1 -0
- package/dist/storage/storage.js +532 -0
- package/dist/storage/storage.js.map +1 -0
- package/dist/utils/token-cache.d.ts.map +1 -1
- package/dist/utils/token-cache.js +3 -2
- package/dist/utils/token-cache.js.map +1 -1
- package/package.json +22 -6
- package/dist/auth/auth-endpoint-errors.test.d.ts +0 -2
- package/dist/auth/auth-endpoint-errors.test.d.ts.map +0 -1
- package/dist/auth/auth-endpoint-errors.test.js +0 -411
- package/dist/auth/auth-endpoint-errors.test.js.map +0 -1
- package/dist/auth/email-action-request.test.d.ts +0 -2
- package/dist/auth/email-action-request.test.d.ts.map +0 -1
- package/dist/auth/email-action-request.test.js +0 -128
- package/dist/auth/email-action-request.test.js.map +0 -1
- package/dist/auth/errors.test.d.ts +0 -2
- package/dist/auth/errors.test.d.ts.map +0 -1
- package/dist/auth/errors.test.js +0 -123
- package/dist/auth/errors.test.js.map +0 -1
- package/dist/auth/firebase-admin-auth.test.d.ts +0 -2
- package/dist/auth/firebase-admin-auth.test.d.ts.map +0 -1
- package/dist/auth/firebase-admin-auth.test.js +0 -1542
- package/dist/auth/firebase-admin-auth.test.js.map +0 -1
- package/dist/auth/firebase-auth-endpoints.test.d.ts +0 -2
- package/dist/auth/firebase-auth-endpoints.test.d.ts.map +0 -1
- package/dist/auth/firebase-auth-endpoints.test.js +0 -1082
- package/dist/auth/firebase-auth-endpoints.test.js.map +0 -1
- package/dist/auth/firebase-auth.test.d.ts +0 -2
- package/dist/auth/firebase-auth.test.d.ts.map +0 -1
- package/dist/auth/firebase-auth.test.js +0 -167
- package/dist/auth/firebase-auth.test.js.map +0 -1
- package/dist/auth/firebase-jwt.test.d.ts +0 -2
- package/dist/auth/firebase-jwt.test.d.ts.map +0 -1
- package/dist/auth/firebase-jwt.test.js +0 -164
- package/dist/auth/firebase-jwt.test.js.map +0 -1
- package/dist/auth/github-oauth.d.ts +0 -19
- package/dist/auth/github-oauth.d.ts.map +0 -1
- package/dist/auth/github-oauth.js +0 -145
- package/dist/auth/github-oauth.js.map +0 -1
- package/dist/auth/github-oauth.test.d.ts +0 -2
- package/dist/auth/github-oauth.test.d.ts.map +0 -1
- package/dist/auth/github-oauth.test.js +0 -202
- package/dist/auth/github-oauth.test.js.map +0 -1
- package/dist/auth/google-oauth.test.d.ts +0 -2
- package/dist/auth/google-oauth.test.d.ts.map +0 -1
- package/dist/auth/google-oauth.test.js +0 -200
- package/dist/auth/google-oauth.test.js.map +0 -1
- package/dist/auth/oauth.d.ts +0 -3
- package/dist/auth/oauth.d.ts.map +0 -1
- package/dist/auth/oauth.js +0 -48
- package/dist/auth/oauth.js.map +0 -1
- package/dist/auth/oauth.test.d.ts +0 -2
- package/dist/auth/oauth.test.d.ts.map +0 -1
- package/dist/auth/oauth.test.js +0 -109
- package/dist/auth/oauth.test.js.map +0 -1
- package/dist/auth/user-batch.test.d.ts +0 -2
- package/dist/auth/user-batch.test.d.ts.map +0 -1
- package/dist/auth/user-batch.test.js +0 -73
- package/dist/auth/user-batch.test.js.map +0 -1
- package/dist/auth/user-import.test.d.ts +0 -2
- package/dist/auth/user-import.test.d.ts.map +0 -1
- package/dist/auth/user-import.test.js +0 -217
- package/dist/auth/user-import.test.js.map +0 -1
- package/dist/auth/user-record.test.d.ts +0 -2
- package/dist/auth/user-record.test.d.ts.map +0 -1
- package/dist/auth/user-record.test.js +0 -198
- package/dist/auth/user-record.test.js.map +0 -1
- package/dist/auth/user-request.test.d.ts +0 -2
- package/dist/auth/user-request.test.d.ts.map +0 -1
- package/dist/auth/user-request.test.js +0 -327
- package/dist/auth/user-request.test.js.map +0 -1
- package/dist/firebase-edge-errors.test.d.ts +0 -2
- package/dist/firebase-edge-errors.test.d.ts.map +0 -1
- package/dist/firebase-edge-errors.test.js +0 -72
- package/dist/firebase-edge-errors.test.js.map +0 -1
- package/dist/firebase-edge-server.test.d.ts +0 -2
- package/dist/firebase-edge-server.test.d.ts.map +0 -1
- package/dist/firebase-edge-server.test.js +0 -293
- package/dist/firebase-edge-server.test.js.map +0 -1
- package/dist/rest-fetch.test.d.ts +0 -2
- package/dist/rest-fetch.test.d.ts.map +0 -1
- package/dist/rest-fetch.test.js +0 -164
- 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
|
-
|
|
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
|
|
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
|
|
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":"
|
|
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 {
|
|
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
|
-
|
|
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
|
-
//
|
|
55
|
-
|
|
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
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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(
|
|
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(
|
|
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
|
|
766
|
-
if (
|
|
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:
|
|
769
|
-
error:
|
|
910
|
+
data: revokeData,
|
|
911
|
+
error: null
|
|
770
912
|
};
|
|
771
913
|
}
|
|
772
|
-
|
|
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(
|
|
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
|
|
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,
|