@dereekb/firebase-server 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +15 -0
- package/README.md +7 -0
- package/package.json +34 -0
- package/src/index.d.ts +2 -0
- package/src/index.js +6 -0
- package/src/index.js.map +1 -0
- package/src/lib/auth/auth.nest.d.ts +28 -0
- package/src/lib/auth/auth.nest.js +56 -0
- package/src/lib/auth/auth.nest.js.map +1 -0
- package/src/lib/auth/auth.service.d.ts +161 -0
- package/src/lib/auth/auth.service.js +125 -0
- package/src/lib/auth/auth.service.js.map +1 -0
- package/src/lib/auth/auth.user.d.ts +0 -0
- package/src/lib/auth/auth.user.js +2 -0
- package/src/lib/auth/auth.user.js.map +1 -0
- package/src/lib/auth/index.d.ts +2 -0
- package/src/lib/auth/index.js +7 -0
- package/src/lib/auth/index.js.map +1 -0
- package/src/lib/firebase/firebase.nest.d.ts +7 -0
- package/src/lib/firebase/firebase.nest.js +17 -0
- package/src/lib/firebase/firebase.nest.js.map +1 -0
- package/src/lib/firebase/index.d.ts +1 -0
- package/src/lib/firebase/index.js +5 -0
- package/src/lib/firebase/index.js.map +1 -0
- package/src/lib/firestore/driver.accessor.batch.d.ts +31 -0
- package/src/lib/firestore/driver.accessor.batch.js +65 -0
- package/src/lib/firestore/driver.accessor.batch.js.map +1 -0
- package/src/lib/firestore/driver.accessor.d.ts +11 -0
- package/src/lib/firestore/driver.accessor.default.d.ts +15 -0
- package/src/lib/firestore/driver.accessor.default.js +45 -0
- package/src/lib/firestore/driver.accessor.default.js.map +1 -0
- package/src/lib/firestore/driver.accessor.js +53 -0
- package/src/lib/firestore/driver.accessor.js.map +1 -0
- package/src/lib/firestore/driver.accessor.transaction.d.ts +31 -0
- package/src/lib/firestore/driver.accessor.transaction.js +64 -0
- package/src/lib/firestore/driver.accessor.transaction.js.map +1 -0
- package/src/lib/firestore/driver.d.ts +4 -0
- package/src/lib/firestore/driver.js +15 -0
- package/src/lib/firestore/driver.js.map +1 -0
- package/src/lib/firestore/driver.query.d.ts +6 -0
- package/src/lib/firestore/driver.query.js +40 -0
- package/src/lib/firestore/driver.query.js.map +1 -0
- package/src/lib/firestore/firestore.d.ts +5 -0
- package/src/lib/firestore/firestore.js +10 -0
- package/src/lib/firestore/firestore.js.map +1 -0
- package/src/lib/firestore/firestore.nest.d.ts +44 -0
- package/src/lib/firestore/firestore.nest.js +81 -0
- package/src/lib/firestore/firestore.nest.js.map +1 -0
- package/src/lib/firestore/index.d.ts +5 -0
- package/src/lib/firestore/index.js +9 -0
- package/src/lib/firestore/index.js.map +1 -0
- package/src/lib/function/assert.d.ts +2 -0
- package/src/lib/function/assert.js +12 -0
- package/src/lib/function/assert.js.map +1 -0
- package/src/lib/function/context.d.ts +4 -0
- package/src/lib/function/context.js +16 -0
- package/src/lib/function/context.js.map +1 -0
- package/src/lib/function/error.d.ts +4 -0
- package/src/lib/function/error.js +17 -0
- package/src/lib/function/error.js.map +1 -0
- package/src/lib/function/index.d.ts +4 -0
- package/src/lib/function/index.js +8 -0
- package/src/lib/function/index.js.map +1 -0
- package/src/lib/function/type.d.ts +5 -0
- package/src/lib/function/type.js +3 -0
- package/src/lib/function/type.js.map +1 -0
- package/src/lib/index.d.ts +5 -0
- package/src/lib/index.js +9 -0
- package/src/lib/index.js.map +1 -0
- package/src/lib/nest/app.d.ts +36 -0
- package/src/lib/nest/app.js +71 -0
- package/src/lib/nest/app.js.map +1 -0
- package/src/lib/nest/function/context.d.ts +12 -0
- package/src/lib/nest/function/context.js +12 -0
- package/src/lib/nest/function/context.js.map +1 -0
- package/src/lib/nest/function/index.d.ts +4 -0
- package/src/lib/nest/function/index.js +8 -0
- package/src/lib/nest/function/index.js.map +1 -0
- package/src/lib/nest/function/nest.d.ts +91 -0
- package/src/lib/nest/function/nest.js +74 -0
- package/src/lib/nest/function/nest.js.map +1 -0
- package/src/lib/nest/function/nest.utility.d.ts +10 -0
- package/src/lib/nest/function/nest.utility.js +23 -0
- package/src/lib/nest/function/nest.utility.js.map +1 -0
- package/src/lib/nest/function/transform.d.ts +10 -0
- package/src/lib/nest/function/transform.js +27 -0
- package/src/lib/nest/function/transform.js.map +1 -0
- package/src/lib/nest/index.d.ts +2 -0
- package/src/lib/nest/index.js +6 -0
- package/src/lib/nest/index.js.map +1 -0
- package/src/test/firebase/firebase.admin.auth.d.ts +132 -0
- package/src/test/firebase/firebase.admin.auth.js +168 -0
- package/src/test/firebase/firebase.admin.auth.js.map +1 -0
- package/src/test/firebase/firebase.admin.collection.d.ts +57 -0
- package/src/test/firebase/firebase.admin.collection.js +61 -0
- package/src/test/firebase/firebase.admin.collection.js.map +1 -0
- package/src/test/firebase/firebase.admin.d.ts +73 -0
- package/src/test/firebase/firebase.admin.function.d.ts +46 -0
- package/src/test/firebase/firebase.admin.function.js +116 -0
- package/src/test/firebase/firebase.admin.function.js.map +1 -0
- package/src/test/firebase/firebase.admin.js +142 -0
- package/src/test/firebase/firebase.admin.js.map +1 -0
- package/src/test/firebase/firebase.admin.nest.d.ts +62 -0
- package/src/test/firebase/firebase.admin.nest.function.context.d.ts +22 -0
- package/src/test/firebase/firebase.admin.nest.function.context.js +35 -0
- package/src/test/firebase/firebase.admin.nest.function.context.js.map +1 -0
- package/src/test/firebase/firebase.admin.nest.function.d.ts +25 -0
- package/src/test/firebase/firebase.admin.nest.function.js +50 -0
- package/src/test/firebase/firebase.admin.nest.function.js.map +1 -0
- package/src/test/firebase/firebase.admin.nest.js +86 -0
- package/src/test/firebase/firebase.admin.nest.js.map +1 -0
- package/src/test/firebase/firebase.admin.test.server.d.ts +3 -0
- package/src/test/firebase/firebase.admin.test.server.js +39 -0
- package/src/test/firebase/firebase.admin.test.server.js.map +1 -0
- package/src/test/firebase/firebase.d.ts +30 -0
- package/src/test/firebase/firebase.js +76 -0
- package/src/test/firebase/firebase.js.map +1 -0
- package/src/test/firebase/index.d.ts +8 -0
- package/src/test/firebase/index.js +12 -0
- package/src/test/firebase/index.js.map +1 -0
- package/src/test/firestore/firestore.admin.d.ts +9 -0
- package/src/test/firestore/firestore.admin.js +14 -0
- package/src/test/firestore/firestore.admin.js.map +1 -0
- package/src/test/firestore/firestore.d.ts +22 -0
- package/src/test/firestore/firestore.fixture.admin.d.ts +6 -0
- package/src/test/firestore/firestore.fixture.admin.js +12 -0
- package/src/test/firestore/firestore.fixture.admin.js.map +1 -0
- package/src/test/firestore/firestore.js +57 -0
- package/src/test/firestore/firestore.js.map +1 -0
- package/src/test/firestore/index.d.ts +2 -0
- package/src/test/firestore/index.js +7 -0
- package/src/test/firestore/index.js.map +1 -0
- package/src/test/index.d.ts +2 -0
- package/src/test/index.js +6 -0
- package/src/test/index.js.map +1 -0
- package/test-setup.d.ts +0 -0
- package/test-setup.js +6 -0
- package/test-setup.js.map +1 -0
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
This file was generated using [@jscutlery/semver](https://github.com/jscutlery/semver).
|
|
4
|
+
|
|
5
|
+
# [3.0.0](https://github.com/dereekb/dbx-components/compare/v2.1.0...v3.0.0) (2022-05-13)
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
### Features
|
|
9
|
+
|
|
10
|
+
* added firebase-server ([676cf9e](https://github.com/dereekb/dbx-components/commit/676cf9e6c44aab5ca993b5a1a9c347c021b41a4a))
|
|
11
|
+
* added jestFunctionFixture ([1ea2d7d](https://github.com/dereekb/dbx-components/commit/1ea2d7d4c852449f34279eeedfadd2d69c1e7f2b))
|
|
12
|
+
* added modelConversionOptions to modelMapFunction ([2de30e0](https://github.com/dereekb/dbx-components/commit/2de30e07527bbaf27c51a8472054a35e73d2ae2b))
|
|
13
|
+
* added modelTestContextFactory ([0a96442](https://github.com/dereekb/dbx-components/commit/0a9644252ffc670cb2e861a4c02ace6790eeae52))
|
|
14
|
+
* added onCallWithNestContext to firebase-server ([ad4fcf8](https://github.com/dereekb/dbx-components/commit/ad4fcf80e71e7b954197dd89924d31180c03c911))
|
|
15
|
+
* firebaseServerAuthModule ([db9a4d3](https://github.com/dereekb/dbx-components/commit/db9a4d3d47fd15317186c7a034c25083ae395251))
|
package/README.md
ADDED
package/package.json
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@dereekb/firebase-server",
|
|
3
|
+
"version": "3.0.0",
|
|
4
|
+
"main": "./src/index.js",
|
|
5
|
+
"typings": "./src/index.d.ts",
|
|
6
|
+
"dependencies": {},
|
|
7
|
+
"peerDependencies": {
|
|
8
|
+
"firebase-admin": "^10.2.0",
|
|
9
|
+
"@nestjs/common": "^8.4.0",
|
|
10
|
+
"@dereekb/util": "3.0.0",
|
|
11
|
+
"make-error": "^1.3.0",
|
|
12
|
+
"extra-set": "^2.2.11",
|
|
13
|
+
"change-case": "^4.1.2",
|
|
14
|
+
"firebase-functions": "^3.21.0",
|
|
15
|
+
"@dereekb/firebase": "3.0.0",
|
|
16
|
+
"rxjs": "^7.0.0",
|
|
17
|
+
"rxfire": "^6.0.3",
|
|
18
|
+
"firebase": "^9.8.0",
|
|
19
|
+
"@dereekb/rxjs": "3.0.0",
|
|
20
|
+
"ms": "^3.0.0-canary.1",
|
|
21
|
+
"@dereekb/date": "3.0.0",
|
|
22
|
+
"class-transformer": "^0.5.1",
|
|
23
|
+
"date-fns": "^2.28.0",
|
|
24
|
+
"class-validator": "^0.13.2",
|
|
25
|
+
"date-fns-tz": "^1.3.0",
|
|
26
|
+
"rrule": "git+https://git@github.com/dereekb/rrule.git#17adf5708d6567b4d01a3a8afd106261421ea492",
|
|
27
|
+
"@dereekb/model": "3.0.0",
|
|
28
|
+
"@google-cloud/firestore": "^5.0.2",
|
|
29
|
+
"@nestjs/core": "^8.4.0",
|
|
30
|
+
"@nestjs/platform-express": "^8.4.0",
|
|
31
|
+
"jsonwebtoken": "^8.0.0",
|
|
32
|
+
"tslib": "^2.0.0"
|
|
33
|
+
}
|
|
34
|
+
}
|
package/src/index.d.ts
ADDED
package/src/index.js
ADDED
package/src/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../packages/firebase-server/src/index.ts"],"names":[],"mappings":";;;AAAA,gDAAsB;AACtB,iDAAuB"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import * as admin from 'firebase-admin';
|
|
2
|
+
import { FactoryProvider, InjectionToken, ModuleMetadata, Provider } from "@nestjs/common";
|
|
3
|
+
import { FirebaseServerAuthService } from './auth.service';
|
|
4
|
+
/**
|
|
5
|
+
* Token to access the Auth for the app.
|
|
6
|
+
*/
|
|
7
|
+
export declare const FIREBASE_AUTH_TOKEN: InjectionToken;
|
|
8
|
+
/**
|
|
9
|
+
* Nest provider module for Firebase that provides a firestore, etc. from the firestore token.
|
|
10
|
+
*/
|
|
11
|
+
export declare class FirebaseServerAuthModule {
|
|
12
|
+
}
|
|
13
|
+
export declare type ProvideFirestoreServerAuthServiceSimple<T extends FirebaseServerAuthService> = Pick<FactoryProvider<T>, 'provide'> & {
|
|
14
|
+
useFactory: (auth: admin.auth.Auth) => T;
|
|
15
|
+
};
|
|
16
|
+
export declare type ProvideFirebaseServerAuthService<T extends FirebaseServerAuthService> = FactoryProvider<T> | ProvideFirestoreServerAuthServiceSimple<T>;
|
|
17
|
+
export declare function provideFirebaseServerAuthService<T extends FirebaseServerAuthService>(provider: ProvideFirebaseServerAuthService<T>): [ProvideFirebaseServerAuthService<T>, Provider<T>];
|
|
18
|
+
export interface FirebaseServerAuthModuleMetadataConfig<T extends FirebaseServerAuthService> extends Pick<ModuleMetadata, 'imports' | 'exports' | 'providers'> {
|
|
19
|
+
readonly serviceProvider: ProvideFirebaseServerAuthService<T>;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Convenience function used to generate ModuleMetadata for an app's Auth related modules and FirebaseServerAuthService provider.
|
|
23
|
+
*
|
|
24
|
+
* @param provide
|
|
25
|
+
* @param useFactory
|
|
26
|
+
* @returns
|
|
27
|
+
*/
|
|
28
|
+
export declare function firebaseServerAuthModuleMetadata<T extends FirebaseServerAuthService>(config: FirebaseServerAuthModuleMetadataConfig<T>): ModuleMetadata;
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.firebaseServerAuthModuleMetadata = exports.provideFirebaseServerAuthService = exports.FirebaseServerAuthModule = exports.FIREBASE_AUTH_TOKEN = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const common_1 = require("@nestjs/common");
|
|
6
|
+
const firebase_nest_1 = require("../firebase/firebase.nest");
|
|
7
|
+
const auth_service_1 = require("./auth.service");
|
|
8
|
+
// MARK: Tokens
|
|
9
|
+
/**
|
|
10
|
+
* Token to access the Auth for the app.
|
|
11
|
+
*/
|
|
12
|
+
exports.FIREBASE_AUTH_TOKEN = 'FIREBASE_AUTH_TOKEN';
|
|
13
|
+
/**
|
|
14
|
+
* Nest provider module for Firebase that provides a firestore, etc. from the firestore token.
|
|
15
|
+
*/
|
|
16
|
+
let FirebaseServerAuthModule = class FirebaseServerAuthModule {
|
|
17
|
+
};
|
|
18
|
+
FirebaseServerAuthModule = tslib_1.__decorate([
|
|
19
|
+
(0, common_1.Module)({
|
|
20
|
+
providers: [{
|
|
21
|
+
provide: exports.FIREBASE_AUTH_TOKEN,
|
|
22
|
+
useFactory: (app) => app.auth(),
|
|
23
|
+
inject: [firebase_nest_1.FIREBASE_APP_TOKEN]
|
|
24
|
+
}],
|
|
25
|
+
exports: [exports.FIREBASE_AUTH_TOKEN]
|
|
26
|
+
})
|
|
27
|
+
], FirebaseServerAuthModule);
|
|
28
|
+
exports.FirebaseServerAuthModule = FirebaseServerAuthModule;
|
|
29
|
+
function provideFirebaseServerAuthService(provider) {
|
|
30
|
+
var _a;
|
|
31
|
+
return [
|
|
32
|
+
Object.assign(Object.assign({}, provider), { inject: (_a = provider.inject) !== null && _a !== void 0 ? _a : [exports.FIREBASE_AUTH_TOKEN] }),
|
|
33
|
+
{
|
|
34
|
+
provide: auth_service_1.FirebaseServerAuthService,
|
|
35
|
+
useExisting: provider.provide
|
|
36
|
+
}
|
|
37
|
+
];
|
|
38
|
+
}
|
|
39
|
+
exports.provideFirebaseServerAuthService = provideFirebaseServerAuthService;
|
|
40
|
+
/**
|
|
41
|
+
* Convenience function used to generate ModuleMetadata for an app's Auth related modules and FirebaseServerAuthService provider.
|
|
42
|
+
*
|
|
43
|
+
* @param provide
|
|
44
|
+
* @param useFactory
|
|
45
|
+
* @returns
|
|
46
|
+
*/
|
|
47
|
+
function firebaseServerAuthModuleMetadata(config) {
|
|
48
|
+
var _a, _b, _c;
|
|
49
|
+
return {
|
|
50
|
+
imports: [FirebaseServerAuthModule, ...((_a = config.imports) !== null && _a !== void 0 ? _a : [])],
|
|
51
|
+
exports: [FirebaseServerAuthModule, config.serviceProvider.provide, ...((_b = config.exports) !== null && _b !== void 0 ? _b : [])],
|
|
52
|
+
providers: [...provideFirebaseServerAuthService(config.serviceProvider), ...((_c = config.providers) !== null && _c !== void 0 ? _c : [])]
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
exports.firebaseServerAuthModuleMetadata = firebaseServerAuthModuleMetadata;
|
|
56
|
+
//# sourceMappingURL=auth.nest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.nest.js","sourceRoot":"","sources":["../../../../../../packages/firebase-server/src/lib/auth/auth.nest.ts"],"names":[],"mappings":";;;;AACA,2CAAmG;AACnG,6DAA+D;AAC/D,iDAA2D;AAE3D,eAAe;AACf;;GAEG;AACU,QAAA,mBAAmB,GAAmB,qBAAqB,CAAC;AAEzE;;GAEG;AASH,IAAa,wBAAwB,GAArC,MAAa,wBAAwB;CAAI,CAAA;AAA5B,wBAAwB;IARpC,IAAA,eAAM,EAAC;QACN,SAAS,EAAE,CAAC;gBACV,OAAO,EAAE,2BAAmB;gBAC5B,UAAU,EAAE,CAAC,GAAkB,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE;gBAC9C,MAAM,EAAE,CAAC,kCAAkB,CAAC;aAC7B,CAAC;QACF,OAAO,EAAE,CAAC,2BAAmB,CAAC;KAC/B,CAAC;GACW,wBAAwB,CAAI;AAA5B,4DAAwB;AASrC,SAAgB,gCAAgC,CAAsC,QAA6C;;IACjI,OAAO;wCAEA,QAAQ,KACX,MAAM,EAAE,MAAC,QAAgB,CAAC,MAAM,mCAAI,CAAC,2BAAmB,CAAC;QAE3D;YACE,OAAO,EAAE,wCAAyB;YAClC,WAAW,EAAE,QAAQ,CAAC,OAAO;SAC9B;KACF,CAAC;AACJ,CAAC;AAXD,4EAWC;AAOD;;;;;;GAMG;AACH,SAAgB,gCAAgC,CAAsC,MAAiD;;IACrI,OAAO;QACL,OAAO,EAAE,CAAC,wBAAwB,EAAE,GAAG,CAAC,MAAA,MAAM,CAAC,OAAO,mCAAI,EAAE,CAAC,CAAC;QAC9D,OAAO,EAAE,CAAC,wBAAwB,EAAE,MAAM,CAAC,eAAe,CAAC,OAAO,EAAE,GAAG,CAAC,MAAA,MAAM,CAAC,OAAO,mCAAI,EAAE,CAAC,CAAC;QAC9F,SAAS,EAAE,CAAC,GAAG,gCAAgC,CAAC,MAAM,CAAC,eAAe,CAAC,EAAE,GAAG,CAAC,MAAA,MAAM,CAAC,SAAS,mCAAI,EAAE,CAAC,CAAC;KACtG,CAAC;AACJ,CAAC;AAND,4EAMC"}
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
import * as functions from 'firebase-functions';
|
|
2
|
+
import * as admin from 'firebase-admin';
|
|
3
|
+
import { FirebaseAuthUserId } from '@dereekb/firebase';
|
|
4
|
+
import { AuthClaims, AuthRoleSet, ArrayOrValue, AuthRole, AuthClaimsUpdate } from '@dereekb/util';
|
|
5
|
+
import { CallableContextWithAuthData } from '../function/context';
|
|
6
|
+
export interface FirebaseServerAuthUserIdentifierContext {
|
|
7
|
+
/**
|
|
8
|
+
* UID of the user for this context.
|
|
9
|
+
*/
|
|
10
|
+
readonly uid: FirebaseAuthUserId;
|
|
11
|
+
}
|
|
12
|
+
export interface FirebaseServerAuthUserContext extends FirebaseServerAuthUserIdentifierContext {
|
|
13
|
+
/**
|
|
14
|
+
* Loads the record of the user.
|
|
15
|
+
*/
|
|
16
|
+
loadRecord(): Promise<admin.auth.UserRecord>;
|
|
17
|
+
/**
|
|
18
|
+
* Loads the roles of the user.
|
|
19
|
+
*/
|
|
20
|
+
loadRoles(): Promise<AuthRoleSet>;
|
|
21
|
+
/**
|
|
22
|
+
* Adds the given roles to the user.
|
|
23
|
+
*
|
|
24
|
+
* @param roles
|
|
25
|
+
*/
|
|
26
|
+
addRoles(roles: ArrayOrValue<AuthRole>): Promise<void>;
|
|
27
|
+
/**
|
|
28
|
+
* Removes the given roles from the user.
|
|
29
|
+
*
|
|
30
|
+
* @param roles
|
|
31
|
+
*/
|
|
32
|
+
removeRoles(roles: ArrayOrValue<AuthRole>): Promise<void>;
|
|
33
|
+
/**
|
|
34
|
+
* Updates the claims for a user by merging existing claims in with the input.
|
|
35
|
+
*
|
|
36
|
+
* All null values are cleared from the existing claims. Undefined values are ignored.
|
|
37
|
+
*
|
|
38
|
+
* @param claims
|
|
39
|
+
*/
|
|
40
|
+
updateClaims(claims: AuthClaimsUpdate): Promise<void>;
|
|
41
|
+
/**
|
|
42
|
+
* Sets the claims for a user. All previous claims are cleared.
|
|
43
|
+
*
|
|
44
|
+
* @param claims
|
|
45
|
+
*/
|
|
46
|
+
setClaims(claims: AuthClaimsUpdate): Promise<void>;
|
|
47
|
+
/**
|
|
48
|
+
* Clears all claims for the user.
|
|
49
|
+
*
|
|
50
|
+
* @param claims
|
|
51
|
+
*/
|
|
52
|
+
clearClaims(): Promise<void>;
|
|
53
|
+
}
|
|
54
|
+
export declare abstract class AbstractFirebaseServerAuthUserContext<S extends FirebaseServerAuthService> implements FirebaseServerAuthUserContext {
|
|
55
|
+
readonly service: S;
|
|
56
|
+
readonly uid: FirebaseAuthUserId;
|
|
57
|
+
private readonly _loadRecord;
|
|
58
|
+
constructor(service: S, uid: FirebaseAuthUserId);
|
|
59
|
+
loadRecord(): Promise<admin.auth.UserRecord>;
|
|
60
|
+
loadRoles(): Promise<AuthRoleSet>;
|
|
61
|
+
addRoles(roles: ArrayOrValue<AuthRole>): Promise<void>;
|
|
62
|
+
removeRoles(roles: ArrayOrValue<AuthRole>): Promise<void>;
|
|
63
|
+
protected _claimsForRolesChange(roles: ArrayOrValue<AuthRole>): AuthClaims<any>;
|
|
64
|
+
loadClaims(): Promise<AuthClaims>;
|
|
65
|
+
updateClaims(claims: AuthClaimsUpdate): Promise<void>;
|
|
66
|
+
clearClaims(): Promise<void>;
|
|
67
|
+
setClaims(claims: AuthClaimsUpdate): Promise<void>;
|
|
68
|
+
}
|
|
69
|
+
export interface FirebaseServerAuthContext<U extends FirebaseServerAuthUserContext = FirebaseServerAuthUserContext> extends FirebaseServerAuthUserIdentifierContext {
|
|
70
|
+
/**
|
|
71
|
+
* The wrapped context.
|
|
72
|
+
*/
|
|
73
|
+
readonly context: CallableContextWithAuthData;
|
|
74
|
+
/**
|
|
75
|
+
* Returns the user context for this type.
|
|
76
|
+
*/
|
|
77
|
+
readonly userContext: U;
|
|
78
|
+
/**
|
|
79
|
+
* Whether or not the context sees the user as an admin of the system.
|
|
80
|
+
*/
|
|
81
|
+
readonly isAdmin: boolean;
|
|
82
|
+
/**
|
|
83
|
+
* The auth roles provided by the token in this context.
|
|
84
|
+
*/
|
|
85
|
+
readonly authRoles: AuthRoleSet;
|
|
86
|
+
/**
|
|
87
|
+
* The token in the context.
|
|
88
|
+
*/
|
|
89
|
+
readonly token: admin.auth.DecodedIdToken;
|
|
90
|
+
/**
|
|
91
|
+
* The claims in the context.
|
|
92
|
+
*/
|
|
93
|
+
readonly claims: AuthClaims;
|
|
94
|
+
}
|
|
95
|
+
export declare abstract class AbstractFirebaseServerAuthContext<C extends FirebaseServerAuthContext, U extends FirebaseServerAuthUserContext = FirebaseServerAuthUserContext, S extends FirebaseServerAuthService<U, C> = FirebaseServerAuthService<U, C>> implements FirebaseServerAuthContext {
|
|
96
|
+
readonly service: S;
|
|
97
|
+
readonly context: CallableContextWithAuthData;
|
|
98
|
+
private readonly _isAdmin;
|
|
99
|
+
private readonly _authRoles;
|
|
100
|
+
private readonly _userContext;
|
|
101
|
+
constructor(service: S, context: CallableContextWithAuthData);
|
|
102
|
+
get userContext(): U;
|
|
103
|
+
get isAdmin(): boolean;
|
|
104
|
+
get authRoles(): AuthRoleSet;
|
|
105
|
+
get token(): admin.auth.DecodedIdToken;
|
|
106
|
+
get claims(): AuthClaims;
|
|
107
|
+
get uid(): string;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* FirebaseServer auth service that provides accessors to auth-related components.
|
|
111
|
+
*/
|
|
112
|
+
export declare abstract class FirebaseServerAuthService<U extends FirebaseServerAuthUserContext = FirebaseServerAuthUserContext, C extends FirebaseServerAuthContext = FirebaseServerAuthContext> {
|
|
113
|
+
abstract readonly auth: admin.auth.Auth;
|
|
114
|
+
/**
|
|
115
|
+
* Creates a context with the input CallableContext. This creation also asserts that a uid is available to the request.
|
|
116
|
+
*
|
|
117
|
+
* If the input context is not a CallableContextWithAuthData, an exception is thrown.
|
|
118
|
+
*
|
|
119
|
+
* @param context
|
|
120
|
+
*/
|
|
121
|
+
abstract context(context: functions.https.CallableContext): C;
|
|
122
|
+
/**
|
|
123
|
+
* Creates a FirebaseServerAuthUserContext instance for the input uid.
|
|
124
|
+
*
|
|
125
|
+
* The user's existence is not checked.
|
|
126
|
+
*
|
|
127
|
+
* @param uid
|
|
128
|
+
*/
|
|
129
|
+
abstract userContext(uid: FirebaseAuthUserId): U;
|
|
130
|
+
/**
|
|
131
|
+
* Whether or not the input claims indicate admin priviledges.
|
|
132
|
+
*/
|
|
133
|
+
abstract isAdmin(claims: AuthClaims): boolean;
|
|
134
|
+
/**
|
|
135
|
+
* Reads the AuthRoleSet from the input claims.
|
|
136
|
+
*
|
|
137
|
+
* @param claims
|
|
138
|
+
*/
|
|
139
|
+
abstract readRoles(claims: AuthClaims): AuthRoleSet;
|
|
140
|
+
/**
|
|
141
|
+
* Creates the claims that reflect the input roles.
|
|
142
|
+
*
|
|
143
|
+
* The resultant claims value should include ALL claim values, with those that are unset to be null.
|
|
144
|
+
*
|
|
145
|
+
* @param roles
|
|
146
|
+
*/
|
|
147
|
+
abstract claimsForRoles(roles: AuthRoleSet): AuthClaims;
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Abstract FirebaseServerAuthService implementation.
|
|
151
|
+
*/
|
|
152
|
+
export declare abstract class AbstractFirebaseServerAuthService<U extends FirebaseServerAuthUserContext = FirebaseServerAuthUserContext, C extends FirebaseServerAuthContext<U> = FirebaseServerAuthContext<U>> implements FirebaseServerAuthService<U, C> {
|
|
153
|
+
readonly auth: admin.auth.Auth;
|
|
154
|
+
constructor(auth: admin.auth.Auth);
|
|
155
|
+
context(context: functions.https.CallableContext): C;
|
|
156
|
+
protected abstract _context(context: CallableContextWithAuthData): C;
|
|
157
|
+
abstract userContext(uid: FirebaseAuthUserId): U;
|
|
158
|
+
isAdmin(claims: AuthClaims): boolean;
|
|
159
|
+
abstract readRoles(claims: AuthClaims): AuthRoleSet;
|
|
160
|
+
abstract claimsForRoles(roles: AuthRoleSet): AuthClaims;
|
|
161
|
+
}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AbstractFirebaseServerAuthService = exports.FirebaseServerAuthService = exports.AbstractFirebaseServerAuthContext = exports.AbstractFirebaseServerAuthUserContext = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const util_1 = require("@dereekb/util");
|
|
6
|
+
const context_1 = require("../function/context");
|
|
7
|
+
class AbstractFirebaseServerAuthUserContext {
|
|
8
|
+
constructor(service, uid) {
|
|
9
|
+
this.service = service;
|
|
10
|
+
this.uid = uid;
|
|
11
|
+
this._loadRecord = (0, util_1.cachedGetter)(() => this.service.auth.getUser(this.uid));
|
|
12
|
+
}
|
|
13
|
+
loadRecord() {
|
|
14
|
+
return this._loadRecord();
|
|
15
|
+
}
|
|
16
|
+
loadRoles() {
|
|
17
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
18
|
+
const claims = yield this.loadClaims();
|
|
19
|
+
return this.service.readRoles(claims);
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
addRoles(roles) {
|
|
23
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
24
|
+
let claims = this._claimsForRolesChange(roles);
|
|
25
|
+
return this.updateClaims(claims);
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
removeRoles(roles) {
|
|
29
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
30
|
+
const baseClaims = this._claimsForRolesChange(roles);
|
|
31
|
+
let claims = {};
|
|
32
|
+
(0, util_1.forEachKeyValue)(baseClaims, {
|
|
33
|
+
forEach: ([key]) => {
|
|
34
|
+
claims[key] = null;
|
|
35
|
+
},
|
|
36
|
+
filter: util_1.KeyValueTypleValueFilter.NONE // hit all values
|
|
37
|
+
});
|
|
38
|
+
return this.updateClaims(claims);
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
_claimsForRolesChange(roles) {
|
|
42
|
+
// filter null/undefined since the claims will contain null values for claims that are not related.
|
|
43
|
+
return (0, util_1.filterNullAndUndefinedValues)(this.service.claimsForRoles((0, util_1.asSet)(roles)));
|
|
44
|
+
}
|
|
45
|
+
loadClaims() {
|
|
46
|
+
return this.loadRecord().then(x => { var _a; return (_a = x.customClaims) !== null && _a !== void 0 ? _a : {}; });
|
|
47
|
+
}
|
|
48
|
+
updateClaims(claims) {
|
|
49
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
50
|
+
const currentClaims = yield this.loadClaims();
|
|
51
|
+
let newClaims;
|
|
52
|
+
if (currentClaims) {
|
|
53
|
+
newClaims = Object.assign(Object.assign({}, currentClaims), (0, util_1.filterUndefinedValues)(claims, false));
|
|
54
|
+
newClaims = (0, util_1.filterNullAndUndefinedValues)(newClaims);
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
newClaims = claims;
|
|
58
|
+
}
|
|
59
|
+
return this.setClaims(newClaims);
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
clearClaims() {
|
|
63
|
+
return this.setClaims(null);
|
|
64
|
+
}
|
|
65
|
+
setClaims(claims) {
|
|
66
|
+
return this.service.auth.setCustomUserClaims(this.uid, claims).then(() => {
|
|
67
|
+
this._loadRecord.reset(); // reset the cache
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
exports.AbstractFirebaseServerAuthUserContext = AbstractFirebaseServerAuthUserContext;
|
|
72
|
+
class AbstractFirebaseServerAuthContext {
|
|
73
|
+
constructor(service, context) {
|
|
74
|
+
this.service = service;
|
|
75
|
+
this.context = context;
|
|
76
|
+
this._isAdmin = (0, util_1.cachedGetter)(() => this.service.isAdmin(this.context.auth.token));
|
|
77
|
+
this._authRoles = (0, util_1.cachedGetter)(() => this.service.readRoles(this.context.auth.token));
|
|
78
|
+
this._userContext = (0, util_1.cachedGetter)(() => this.service.userContext(this.context.auth.uid));
|
|
79
|
+
}
|
|
80
|
+
get userContext() {
|
|
81
|
+
return this._userContext();
|
|
82
|
+
}
|
|
83
|
+
get isAdmin() {
|
|
84
|
+
return this._isAdmin();
|
|
85
|
+
}
|
|
86
|
+
get authRoles() {
|
|
87
|
+
return this._authRoles();
|
|
88
|
+
}
|
|
89
|
+
get token() {
|
|
90
|
+
return this.context.auth.token;
|
|
91
|
+
}
|
|
92
|
+
get claims() {
|
|
93
|
+
return this.context.auth.token;
|
|
94
|
+
}
|
|
95
|
+
// MARK: FirebaseServerAuthUserContext
|
|
96
|
+
get uid() {
|
|
97
|
+
return this.userContext.uid;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
exports.AbstractFirebaseServerAuthContext = AbstractFirebaseServerAuthContext;
|
|
101
|
+
// MARK: Service
|
|
102
|
+
/**
|
|
103
|
+
* FirebaseServer auth service that provides accessors to auth-related components.
|
|
104
|
+
*/
|
|
105
|
+
class FirebaseServerAuthService {
|
|
106
|
+
}
|
|
107
|
+
exports.FirebaseServerAuthService = FirebaseServerAuthService;
|
|
108
|
+
/**
|
|
109
|
+
* Abstract FirebaseServerAuthService implementation.
|
|
110
|
+
*/
|
|
111
|
+
class AbstractFirebaseServerAuthService {
|
|
112
|
+
constructor(auth) {
|
|
113
|
+
this.auth = auth;
|
|
114
|
+
}
|
|
115
|
+
context(context) {
|
|
116
|
+
(0, context_1.assertIsContextWithAuthData)(context);
|
|
117
|
+
context.auth.token;
|
|
118
|
+
return this._context(context);
|
|
119
|
+
}
|
|
120
|
+
isAdmin(claims) {
|
|
121
|
+
return this.readRoles(claims).has(util_1.AUTH_ADMIN_ROLE);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
exports.AbstractFirebaseServerAuthService = AbstractFirebaseServerAuthService;
|
|
125
|
+
//# sourceMappingURL=auth.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.service.js","sourceRoot":"","sources":["../../../../../../packages/firebase-server/src/lib/auth/auth.service.ts"],"names":[],"mappings":"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"}
|
|
File without changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.user.js","sourceRoot":"","sources":["../../../../../../packages/firebase-server/src/lib/auth/auth.user.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
4
|
+
tslib_1.__exportStar(require("./auth.service"), exports);
|
|
5
|
+
tslib_1.__exportStar(require("./auth.nest"), exports);
|
|
6
|
+
// export * from './auth.user';
|
|
7
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../packages/firebase-server/src/lib/auth/index.ts"],"names":[],"mappings":";;;AAAA,yDAA+B;AAC/B,sDAA4B;AAC5B,+BAA+B"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import * as admin from 'firebase-admin';
|
|
2
|
+
import { FactoryProvider, InjectionToken } from "@nestjs/common";
|
|
3
|
+
/**
|
|
4
|
+
* Nest Injection Token to access the
|
|
5
|
+
*/
|
|
6
|
+
export declare const FIREBASE_APP_TOKEN: InjectionToken;
|
|
7
|
+
export declare function firebaseServerAppTokenProvider(useFactory: () => admin.app.App): FactoryProvider<any>;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.firebaseServerAppTokenProvider = exports.FIREBASE_APP_TOKEN = void 0;
|
|
4
|
+
// MARK: Tokens
|
|
5
|
+
/**
|
|
6
|
+
* Nest Injection Token to access the
|
|
7
|
+
*/
|
|
8
|
+
exports.FIREBASE_APP_TOKEN = 'FIREBASE_APP_TOKEN';
|
|
9
|
+
// MARK: Firebase Admin Provider
|
|
10
|
+
function firebaseServerAppTokenProvider(useFactory) {
|
|
11
|
+
return {
|
|
12
|
+
provide: exports.FIREBASE_APP_TOKEN,
|
|
13
|
+
useFactory
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
exports.firebaseServerAppTokenProvider = firebaseServerAppTokenProvider;
|
|
17
|
+
//# sourceMappingURL=firebase.nest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"firebase.nest.js","sourceRoot":"","sources":["../../../../../../packages/firebase-server/src/lib/firebase/firebase.nest.ts"],"names":[],"mappings":";;;AAGA,eAAe;AACf;;GAEG;AACU,QAAA,kBAAkB,GAAmB,oBAAoB,CAAC;AAEvE,gCAAgC;AAChC,SAAgB,8BAA8B,CAAC,UAA+B;IAC5E,OAAO;QACL,OAAO,EAAE,0BAAkB;QAC3B,UAAU;KACX,CAAC;AACJ,CAAC;AALD,wEAKC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './firebase.nest';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../packages/firebase-server/src/lib/firebase/index.ts"],"names":[],"mappings":";;;AAAA,0DAAgC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { DocumentReference, WriteBatch as GoogleCloudWriteBatch, DocumentSnapshot } from "@google-cloud/firestore";
|
|
2
|
+
import { Observable } from "rxjs";
|
|
3
|
+
import { WithFieldValue, FirestoreDocumentContext, FirestoreDocumentContextType, FirestoreDocumentDataAccessor, FirestoreDocumentDataAccessorFactory, FirestoreDocumentDeleteParams, FirestoreDocumentUpdateParams, UpdateData } from "@dereekb/firebase";
|
|
4
|
+
/**
|
|
5
|
+
* FirestoreDocumentDataAccessor implementation for a batch.
|
|
6
|
+
*/
|
|
7
|
+
export declare class WriteBatchFirestoreDocumentDataAccessor<T> implements FirestoreDocumentDataAccessor<T> {
|
|
8
|
+
readonly batch: GoogleCloudWriteBatch;
|
|
9
|
+
readonly documentRef: DocumentReference<T>;
|
|
10
|
+
constructor(batch: GoogleCloudWriteBatch, documentRef: DocumentReference<T>);
|
|
11
|
+
stream(): Observable<DocumentSnapshot<T>>;
|
|
12
|
+
exists(): Promise<boolean>;
|
|
13
|
+
get(): Promise<DocumentSnapshot<T>>;
|
|
14
|
+
delete(params?: FirestoreDocumentDeleteParams): Promise<void>;
|
|
15
|
+
set(data: WithFieldValue<T>): Promise<void>;
|
|
16
|
+
update(data: UpdateData<T>, params?: FirestoreDocumentUpdateParams): Promise<void>;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Creates a new FirestoreDocumentDataAccessorFactory for a Batch.
|
|
20
|
+
*
|
|
21
|
+
* @param batch
|
|
22
|
+
* @returns
|
|
23
|
+
*/
|
|
24
|
+
export declare function writeBatchAccessorFactory<T>(writeBatch: GoogleCloudWriteBatch): FirestoreDocumentDataAccessorFactory<T>;
|
|
25
|
+
export declare class WriteBatchFirestoreDocumentContext<T> implements FirestoreDocumentContext<T> {
|
|
26
|
+
readonly batch: GoogleCloudWriteBatch;
|
|
27
|
+
readonly contextType = FirestoreDocumentContextType.BATCH;
|
|
28
|
+
readonly accessorFactory: FirestoreDocumentDataAccessorFactory<T>;
|
|
29
|
+
constructor(batch: GoogleCloudWriteBatch);
|
|
30
|
+
}
|
|
31
|
+
export declare function writeBatchDocumentContext<T>(batch: GoogleCloudWriteBatch): WriteBatchFirestoreDocumentContext<T>;
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.writeBatchDocumentContext = exports.WriteBatchFirestoreDocumentContext = exports.writeBatchAccessorFactory = exports.WriteBatchFirestoreDocumentDataAccessor = void 0;
|
|
4
|
+
const rxjs_1 = require("rxjs");
|
|
5
|
+
const firebase_1 = require("@dereekb/firebase");
|
|
6
|
+
// MARK: Accessor
|
|
7
|
+
/**
|
|
8
|
+
* FirestoreDocumentDataAccessor implementation for a batch.
|
|
9
|
+
*/
|
|
10
|
+
class WriteBatchFirestoreDocumentDataAccessor {
|
|
11
|
+
constructor(batch, documentRef) {
|
|
12
|
+
this.batch = batch;
|
|
13
|
+
this.documentRef = documentRef;
|
|
14
|
+
}
|
|
15
|
+
stream() {
|
|
16
|
+
return (0, rxjs_1.from)(this.get()); // todo
|
|
17
|
+
}
|
|
18
|
+
exists() {
|
|
19
|
+
return this.get().then(x => x.exists);
|
|
20
|
+
}
|
|
21
|
+
get() {
|
|
22
|
+
return this.documentRef.get();
|
|
23
|
+
}
|
|
24
|
+
delete(params) {
|
|
25
|
+
this.batch.delete(this.documentRef, params === null || params === void 0 ? void 0 : params.precondition);
|
|
26
|
+
return Promise.resolve();
|
|
27
|
+
}
|
|
28
|
+
set(data) {
|
|
29
|
+
this.batch.set(this.documentRef, data);
|
|
30
|
+
return Promise.resolve();
|
|
31
|
+
}
|
|
32
|
+
update(data, params) {
|
|
33
|
+
// todo: look into data typing casting more for this and the other types. Currently fails the building the demo-api app. "data as GoogleCloudUpdateData<T>"
|
|
34
|
+
// problem is related to T here being too open, but also the demo-api project shouldn't care.
|
|
35
|
+
this.batch.update(this.documentRef, data, params === null || params === void 0 ? void 0 : params.precondition);
|
|
36
|
+
return Promise.resolve();
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
exports.WriteBatchFirestoreDocumentDataAccessor = WriteBatchFirestoreDocumentDataAccessor;
|
|
40
|
+
/**
|
|
41
|
+
* Creates a new FirestoreDocumentDataAccessorFactory for a Batch.
|
|
42
|
+
*
|
|
43
|
+
* @param batch
|
|
44
|
+
* @returns
|
|
45
|
+
*/
|
|
46
|
+
function writeBatchAccessorFactory(writeBatch) {
|
|
47
|
+
return {
|
|
48
|
+
accessorFor: (ref) => new WriteBatchFirestoreDocumentDataAccessor(writeBatch, ref)
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
exports.writeBatchAccessorFactory = writeBatchAccessorFactory;
|
|
52
|
+
// MARK: Context
|
|
53
|
+
class WriteBatchFirestoreDocumentContext {
|
|
54
|
+
constructor(batch) {
|
|
55
|
+
this.batch = batch;
|
|
56
|
+
this.contextType = firebase_1.FirestoreDocumentContextType.BATCH;
|
|
57
|
+
this.accessorFactory = writeBatchAccessorFactory(this.batch);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
exports.WriteBatchFirestoreDocumentContext = WriteBatchFirestoreDocumentContext;
|
|
61
|
+
function writeBatchDocumentContext(batch) {
|
|
62
|
+
return new WriteBatchFirestoreDocumentContext(batch);
|
|
63
|
+
}
|
|
64
|
+
exports.writeBatchDocumentContext = writeBatchDocumentContext;
|
|
65
|
+
//# sourceMappingURL=driver.accessor.batch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"driver.accessor.batch.js","sourceRoot":"","sources":["../../../../../../packages/firebase-server/src/lib/firestore/driver.accessor.batch.ts"],"names":[],"mappings":";;;AACA,+BAAwC;AACxC,gDAA0P;AAE1P,iBAAiB;AACjB;;GAEG;AACH,MAAa,uCAAuC;IAElD,YAAqB,KAA4B,EAAW,WAAiC;QAAxE,UAAK,GAAL,KAAK,CAAuB;QAAW,gBAAW,GAAX,WAAW,CAAsB;IAAI,CAAC;IAElG,MAAM;QACJ,OAAO,IAAA,WAAI,EAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAE,OAAO;IACnC,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IACxC,CAAC;IAED,GAAG;QACD,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC;IAChC,CAAC;IAED,MAAM,CAAC,MAAsC;QAC3C,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,YAAY,CAAC,CAAC;QAC1D,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;IAED,GAAG,CAAC,IAAuB;QACzB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;QACvC,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;IAED,MAAM,CAAC,IAAmB,EAAE,MAAsC;QAChE,2JAA2J;QAC3J,6FAA6F;QAC7F,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,IAAW,EAAE,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,YAAY,CAAC,CAAC;QACvE,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;CAEF;AAjCD,0FAiCC;AAED;;;;;GAKG;AACH,SAAgB,yBAAyB,CAAI,UAAiC;IAC5E,OAAO;QACL,WAAW,EAAE,CAAC,GAAyB,EAAE,EAAE,CAAC,IAAI,uCAAuC,CAAC,UAAU,EAAE,GAAG,CAAC;KACzG,CAAC;AACJ,CAAC;AAJD,8DAIC;AAED,gBAAgB;AAChB,MAAa,kCAAkC;IAK7C,YAAqB,KAA4B;QAA5B,UAAK,GAAL,KAAK,CAAuB;QAHxC,gBAAW,GAAG,uCAA4B,CAAC,KAAK,CAAC;QACjD,oBAAe,GAAG,yBAAyB,CAAI,IAAI,CAAC,KAAK,CAAC,CAAC;IAEf,CAAC;CAEvD;AAPD,gFAOC;AAED,SAAgB,yBAAyB,CAAI,KAA4B;IACvE,OAAO,IAAI,kCAAkC,CAAI,KAAK,CAAC,CAAC;AAC1D,CAAC;AAFD,8DAEC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { FirestoreAccessorDriver, CollectionReference, DocumentReference } from "@dereekb/firebase";
|
|
2
|
+
interface DocRefForPathInput {
|
|
3
|
+
doc: (path: string) => DocumentReference;
|
|
4
|
+
}
|
|
5
|
+
interface CollectionRefForPathInput {
|
|
6
|
+
collection: (path: string) => CollectionReference;
|
|
7
|
+
}
|
|
8
|
+
export declare function collectionRefForPath<T>(start: CollectionRefForPathInput, path: string, pathSegments?: string[]): CollectionReference<T>;
|
|
9
|
+
export declare function docRefForPath<T>(start: DocRefForPathInput, path?: string, pathSegments?: string[]): DocumentReference<T>;
|
|
10
|
+
export declare function firestoreClientAccessorDriver(): FirestoreAccessorDriver;
|
|
11
|
+
export {};
|