@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
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { ClassType, Getter } from '@dereekb/util';
|
|
2
|
+
import { INestApplicationContext, Provider } from '@nestjs/common';
|
|
3
|
+
import * as express from 'express';
|
|
4
|
+
import * as admin from 'firebase-admin';
|
|
5
|
+
export interface NestServer {
|
|
6
|
+
server: express.Express;
|
|
7
|
+
nest: NestAppPromiseGetter;
|
|
8
|
+
}
|
|
9
|
+
export declare type NestAppPromiseGetter = Getter<Promise<INestApplicationContext>>;
|
|
10
|
+
export interface NestServerInstance<T> {
|
|
11
|
+
/**
|
|
12
|
+
* Initializes and returns the Nest Server.
|
|
13
|
+
*
|
|
14
|
+
* If already initialized the server will not be initialized again.
|
|
15
|
+
*/
|
|
16
|
+
initNestServer(firebaseApp: admin.app.App): NestServer;
|
|
17
|
+
/**
|
|
18
|
+
* Terminates the nest server for the input app.
|
|
19
|
+
*
|
|
20
|
+
* @param firebaseApp
|
|
21
|
+
*/
|
|
22
|
+
removeNestServer(firebaseApp: admin.app.App): Promise<boolean>;
|
|
23
|
+
}
|
|
24
|
+
export declare class FirebaseNestServerRootModule {
|
|
25
|
+
}
|
|
26
|
+
export interface NestServerInstanceConfig<T> {
|
|
27
|
+
/**
|
|
28
|
+
* Module to instantiate.
|
|
29
|
+
*/
|
|
30
|
+
readonly moduleClass: ClassType<T>;
|
|
31
|
+
/**
|
|
32
|
+
* Additional providers to provide globally.
|
|
33
|
+
*/
|
|
34
|
+
providers?: Provider<any>[];
|
|
35
|
+
}
|
|
36
|
+
export declare function nestServerInstance<T>(config: NestServerInstanceConfig<T>): NestServerInstance<T>;
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.nestServerInstance = exports.FirebaseNestServerRootModule = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const util_1 = require("@dereekb/util");
|
|
6
|
+
const core_1 = require("@nestjs/core");
|
|
7
|
+
const platform_express_1 = require("@nestjs/platform-express");
|
|
8
|
+
const express = require("express");
|
|
9
|
+
const firebase_nest_1 = require("../firebase/firebase.nest");
|
|
10
|
+
class FirebaseNestServerRootModule {
|
|
11
|
+
}
|
|
12
|
+
exports.FirebaseNestServerRootModule = FirebaseNestServerRootModule;
|
|
13
|
+
function nestServerInstance(config) {
|
|
14
|
+
const { moduleClass, providers: additionalProviders } = config;
|
|
15
|
+
const serversCache = new Map();
|
|
16
|
+
const initNestServer = (firebaseApp) => {
|
|
17
|
+
const appName = firebaseApp.name;
|
|
18
|
+
let nestServer = serversCache.get(appName);
|
|
19
|
+
if (!nestServer) {
|
|
20
|
+
const server = express();
|
|
21
|
+
const createNestServer = (expressInstance) => tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
22
|
+
const providers = [(0, firebase_nest_1.firebaseServerAppTokenProvider)((0, util_1.asGetter)(firebaseApp))];
|
|
23
|
+
if (additionalProviders) {
|
|
24
|
+
(0, util_1.mergeArrayOrValueIntoArray)(providers, additionalProviders);
|
|
25
|
+
}
|
|
26
|
+
const providersModule = {
|
|
27
|
+
module: FirebaseNestServerRootModule,
|
|
28
|
+
imports: [moduleClass],
|
|
29
|
+
providers,
|
|
30
|
+
exports: providers,
|
|
31
|
+
global: true
|
|
32
|
+
};
|
|
33
|
+
const nestApp = yield core_1.NestFactory.create(providersModule, new platform_express_1.ExpressAdapter(expressInstance));
|
|
34
|
+
return nestApp.init();
|
|
35
|
+
});
|
|
36
|
+
const nest = createNestServer(server)
|
|
37
|
+
.then(v => {
|
|
38
|
+
console.log('Nest Ready');
|
|
39
|
+
return v;
|
|
40
|
+
})
|
|
41
|
+
.catch(err => {
|
|
42
|
+
console.error('Nest broken', err);
|
|
43
|
+
throw err;
|
|
44
|
+
});
|
|
45
|
+
nestServer = { server, nest: (0, util_1.makeGetter)(nest) };
|
|
46
|
+
serversCache.set(appName, nestServer);
|
|
47
|
+
}
|
|
48
|
+
return nestServer;
|
|
49
|
+
};
|
|
50
|
+
const removeNestServer = (firebaseApp) => tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
51
|
+
const appName = firebaseApp.name;
|
|
52
|
+
let nestServer = serversCache.get(appName);
|
|
53
|
+
let removed;
|
|
54
|
+
if (nestServer) {
|
|
55
|
+
removed = nestServer.nest().then(x => {
|
|
56
|
+
serversCache.delete(appName);
|
|
57
|
+
return x.close().then(x => true);
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
removed = Promise.resolve(false);
|
|
62
|
+
}
|
|
63
|
+
return removed;
|
|
64
|
+
});
|
|
65
|
+
return {
|
|
66
|
+
initNestServer,
|
|
67
|
+
removeNestServer
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
exports.nestServerInstance = nestServerInstance;
|
|
71
|
+
//# sourceMappingURL=app.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app.js","sourceRoot":"","sources":["../../../../../../packages/firebase-server/src/lib/nest/app.ts"],"names":[],"mappings":";;;;AAAA,wCAAoG;AAEpG,uCAA2C;AAC3C,+DAA0D;AAC1D,mCAAmC;AACnC,6DAA2E;AA2B3E,MAAa,4BAA4B;CAAI;AAA7C,oEAA6C;AAa7C,SAAgB,kBAAkB,CAAI,MAAmC;IACvE,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,mBAAmB,EAAE,GAAG,MAAM,CAAC;IAC/D,MAAM,YAAY,GAAG,IAAI,GAAG,EAAsB,CAAC;IAEnD,MAAM,cAAc,GAAG,CAAC,WAA0B,EAAc,EAAE;QAChE,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC;QACjC,IAAI,UAAU,GAAG,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAE3C,IAAI,CAAC,UAAU,EAAE;YACf,MAAM,MAAM,GAAG,OAAO,EAAE,CAAC;YACzB,MAAM,gBAAgB,GAAG,CAAO,eAAgC,EAAE,EAAE;gBAClE,MAAM,SAAS,GAAG,CAAC,IAAA,8CAA8B,EAAC,IAAA,eAAQ,EAAC,WAAW,CAAC,CAAC,CAAC,CAAC;gBAE1E,IAAI,mBAAmB,EAAE;oBACvB,IAAA,iCAA0B,EAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC;iBAC5D;gBAED,MAAM,eAAe,GAAkB;oBACrC,MAAM,EAAE,4BAA4B;oBACpC,OAAO,EAAE,CAAC,WAAW,CAAC;oBACtB,SAAS;oBACT,OAAO,EAAE,SAAS;oBAClB,MAAM,EAAE,IAAI;iBACb,CAAC;gBAEF,MAAM,OAAO,GAAG,MAAM,kBAAW,CAAC,MAAM,CACtC,eAAe,EACf,IAAI,iCAAc,CAAC,eAAe,CAAC,CACpC,CAAC;gBAEF,OAAO,OAAO,CAAC,IAAI,EAAE,CAAC;YACxB,CAAC,CAAA,CAAC;YAEF,MAAM,IAAI,GAA8B,gBAAgB,CAAC,MAAM,CAAC;iBAC7D,IAAI,CAAC,CAAC,CAAC,EAAE;gBACR,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;gBAC1B,OAAO,CAAC,CAAC;YACX,CAAC,CAAC;iBACD,KAAK,CAAC,GAAG,CAAC,EAAE;gBACX,OAAO,CAAC,KAAK,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC;gBAClC,MAAM,GAAG,CAAC;YACZ,CAAC,CAA8B,CAAC;YAElC,UAAU,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,IAAA,iBAAU,EAAC,IAAI,CAAC,EAAE,CAAC;YAChD,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;SACvC;QAED,OAAO,UAAU,CAAC;IACpB,CAAC,CAAC;IAEF,MAAM,gBAAgB,GAAG,CAAO,WAA0B,EAAoB,EAAE;QAC9E,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC;QACjC,IAAI,UAAU,GAAG,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC3C,IAAI,OAAyB,CAAC;QAE9B,IAAI,UAAU,EAAE;YACd,OAAO,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;gBACnC,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;gBAC7B,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;YACnC,CAAC,CAAC,CAAC;SACJ;aAAM;YACL,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;SAClC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC,CAAA,CAAC;IAEF,OAAO;QACL,cAAc;QACd,gBAAgB;KACjB,CAAC;AACJ,CAAC;AAvED,gDAuEC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { TransformAndValidateFunctionResultFactory, TransformAndValidateObjectFactory } from "@dereekb/model";
|
|
2
|
+
import { FirebaseServerActionsTransformContext } from "./transform";
|
|
3
|
+
/**
|
|
4
|
+
* Context used for building FirebaseServerActions. It contains references to reusable factories.
|
|
5
|
+
*/
|
|
6
|
+
export interface FirebaseServerActionsContext extends FirebaseServerActionsTransformContext {
|
|
7
|
+
}
|
|
8
|
+
export declare abstract class AbstractFirebaseServerActionsContext implements FirebaseServerActionsContext {
|
|
9
|
+
abstract readonly firebaseServerActionTransformFactory: TransformAndValidateObjectFactory;
|
|
10
|
+
abstract readonly firebaseServerActionTransformFunctionFactory: TransformAndValidateFunctionResultFactory<any>;
|
|
11
|
+
}
|
|
12
|
+
export declare function firebaseServerActionsContext(): FirebaseServerActionsContext;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.firebaseServerActionsContext = exports.AbstractFirebaseServerActionsContext = void 0;
|
|
4
|
+
const transform_1 = require("./transform");
|
|
5
|
+
class AbstractFirebaseServerActionsContext {
|
|
6
|
+
}
|
|
7
|
+
exports.AbstractFirebaseServerActionsContext = AbstractFirebaseServerActionsContext;
|
|
8
|
+
function firebaseServerActionsContext() {
|
|
9
|
+
return Object.assign({}, (0, transform_1.firebaseServerActionsTransformContext)());
|
|
10
|
+
}
|
|
11
|
+
exports.firebaseServerActionsContext = firebaseServerActionsContext;
|
|
12
|
+
//# sourceMappingURL=context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../../../../../../packages/firebase-server/src/lib/nest/function/context.ts"],"names":[],"mappings":";;;AACA,2CAA2G;AAO3G,MAAsB,oCAAoC;CAGzD;AAHD,oFAGC;AAED,SAAgB,4BAA4B;IAC1C,yBACK,IAAA,iDAAqC,GAAE,EAC1C;AACJ,CAAC;AAJD,oEAIC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
4
|
+
tslib_1.__exportStar(require("./context"), exports);
|
|
5
|
+
tslib_1.__exportStar(require("./nest"), exports);
|
|
6
|
+
tslib_1.__exportStar(require("./nest.utility"), exports);
|
|
7
|
+
tslib_1.__exportStar(require("./transform"), exports);
|
|
8
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../packages/firebase-server/src/lib/nest/function/index.ts"],"names":[],"mappings":";;;AAAA,oDAA0B;AAC1B,iDAAuB;AACvB,yDAA+B;AAC/B,sDAA4B"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { PromiseOrValue, Getter } from '@dereekb/util';
|
|
2
|
+
import { INestApplicationContext } from '@nestjs/common';
|
|
3
|
+
import * as functions from 'firebase-functions';
|
|
4
|
+
import { EventContext } from 'firebase-functions';
|
|
5
|
+
import { RunnableHttpFunction } from '../../function/type';
|
|
6
|
+
/**
|
|
7
|
+
* Getter for an INestApplicationContext promise. Nest should be initialized when the promise resolves.
|
|
8
|
+
*/
|
|
9
|
+
export declare type NestApplicationPromiseGetter = Getter<Promise<INestApplicationContext>>;
|
|
10
|
+
/**
|
|
11
|
+
* Generates a function from the passed NestApplicationPromiseGetter/context.
|
|
12
|
+
*
|
|
13
|
+
* This pattern is available to allow generating similar content for differenting contexts, such as production and testing.
|
|
14
|
+
*/
|
|
15
|
+
export declare type NestApplicationFunctionFactory<F> = (nestAppPromiseGetter: NestApplicationPromiseGetter) => F;
|
|
16
|
+
export declare type NestApplicationRunnableHttpFunctionFactory<I> = NestApplicationFunctionFactory<RunnableHttpFunction<I>>;
|
|
17
|
+
/**
|
|
18
|
+
* Runnable function that is passed an INestApplicationContext in addition to the usual data/context provided by firebase.
|
|
19
|
+
*/
|
|
20
|
+
export declare type OnCallWithNestApplication<I = any, O = any> = (nest: INestApplicationContext, data: I, context: functions.https.CallableContext) => O;
|
|
21
|
+
/**
|
|
22
|
+
* Factory function for generating a NestApplicationFunctionFactory for a HttpsFunctions/Runnable firebase function.
|
|
23
|
+
*/
|
|
24
|
+
export declare type OnCallWithNestApplicationFactory = <I, O>(fn: OnCallWithNestApplication<I, O>) => NestApplicationRunnableHttpFunctionFactory<I>;
|
|
25
|
+
/**
|
|
26
|
+
* Creates a factory for generating OnCallWithNestApplication functions.
|
|
27
|
+
*
|
|
28
|
+
* @param nestAppPromiseGetter
|
|
29
|
+
* @returns
|
|
30
|
+
*/
|
|
31
|
+
export declare function onCallWithNestApplicationFactory(): OnCallWithNestApplicationFactory;
|
|
32
|
+
/**
|
|
33
|
+
* Runnable function that is passed an arbitrary nest context object in addition to the usual data/context provided by firebase.
|
|
34
|
+
*/
|
|
35
|
+
export declare type OnCallWithNestContext<C, I = any, O = any> = (nestContext: C, data: I, context: functions.https.CallableContext) => O;
|
|
36
|
+
/**
|
|
37
|
+
* Factory function for generating HttpsFunctions/Runnable firebase function that returns the value from the input OnCallWithNestContext function.
|
|
38
|
+
*/
|
|
39
|
+
export declare type OnCallWithNestContextFactory<C> = <I, O>(fn: OnCallWithNestContext<C, I, O>) => NestApplicationRunnableHttpFunctionFactory<I>;
|
|
40
|
+
/**
|
|
41
|
+
* Getter for an INestApplicationContext promise. Nest should be initialized when the promise resolves.
|
|
42
|
+
*/
|
|
43
|
+
export declare type MakeNestContext<C> = (nest: INestApplicationContext) => C;
|
|
44
|
+
/**
|
|
45
|
+
* Creates a factory for generating OnCallWithNestContext functions with a nest context object that is generated by the input function.
|
|
46
|
+
*
|
|
47
|
+
* @param appFactory
|
|
48
|
+
* @param makeNestContext
|
|
49
|
+
* @returns
|
|
50
|
+
*/
|
|
51
|
+
export declare function onCallWithNestContextFactory<C>(appFactory: OnCallWithNestApplicationFactory, makeNestContext: MakeNestContext<C>): OnCallWithNestContextFactory<C>;
|
|
52
|
+
/**
|
|
53
|
+
* Abstract class that wraps an INestApplicationContext value.
|
|
54
|
+
*/
|
|
55
|
+
export declare abstract class AbstractNestContext {
|
|
56
|
+
readonly nest: INestApplicationContext;
|
|
57
|
+
constructor(nest: INestApplicationContext);
|
|
58
|
+
}
|
|
59
|
+
export declare type FirestoreEventHandler<I = any, O = any> = (data: I, context: EventContext) => PromiseOrValue<O>;
|
|
60
|
+
export declare type NestApplicationEventHandler<I = any, O = any> = (nest: INestApplicationContext, data: I, context: EventContext) => PromiseOrValue<O>;
|
|
61
|
+
export declare type NestApplicationEventHandlerBuilder<I = any, O = any> = (handler: NestApplicationEventHandler<I, O>) => FirestoreEventHandler<I, O>;
|
|
62
|
+
export declare type OnEventWithNestApplicationBuilder<I = any, O = any> = (nest: NestApplicationEventHandlerBuilder<I, O>) => functions.CloudFunction<O>;
|
|
63
|
+
/**
|
|
64
|
+
* Factory function for generating a CloudFunctionHandler via a NestApplicationCloudFunctionHandler.
|
|
65
|
+
*/
|
|
66
|
+
export declare type OnEventWithNestApplicationFactory = <I, O>(fn: OnEventWithNestApplicationBuilder<I, O>) => NestApplicationFunctionFactory<functions.CloudFunction<O>>;
|
|
67
|
+
/**
|
|
68
|
+
* Creates a factory for generating OnEventWithNestApplicationBuilder values.
|
|
69
|
+
*
|
|
70
|
+
* @param nestAppPromiseGetter
|
|
71
|
+
* @returns
|
|
72
|
+
*/
|
|
73
|
+
export declare function onEventWithNestApplicationFactory(): OnEventWithNestApplicationFactory;
|
|
74
|
+
export declare type NestContextEventHandler<C, I = any, O = any> = (nest: C, data: I, context: EventContext) => Promise<O>;
|
|
75
|
+
export declare type NestContextEventHandlerBuilder<C, I = any, O = any> = (handler: NestContextEventHandler<C, I, O>) => FirestoreEventHandler<I, O>;
|
|
76
|
+
/**
|
|
77
|
+
* Runnable function that is passed an arbitrary nest context object in addition to the usual data/context provided by firebase.
|
|
78
|
+
*/
|
|
79
|
+
export declare type OnEventWithNestContextBuilder<C, I = any, O = any> = (nest: NestContextEventHandlerBuilder<C, I, O>) => functions.CloudFunction<O>;
|
|
80
|
+
/**
|
|
81
|
+
* Factory function for generating a firebase CloudFunction for a specific event.
|
|
82
|
+
*/
|
|
83
|
+
export declare type OnEventWithNestContextFactory<C> = <I, O = any>(fn: OnEventWithNestContextBuilder<C, I, O>) => NestApplicationFunctionFactory<functions.CloudFunction<O>>;
|
|
84
|
+
/**
|
|
85
|
+
* Creates a factory for generating OnCallWithNestContext functions with a nest context object that is generated by the input function.
|
|
86
|
+
*
|
|
87
|
+
* @param appFactory
|
|
88
|
+
* @param makeNestContext
|
|
89
|
+
* @returns
|
|
90
|
+
*/
|
|
91
|
+
export declare function onEventWithNestContextFactory<C>(makeNestContext: MakeNestContext<C>): OnEventWithNestContextFactory<C>;
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.onEventWithNestContextFactory = exports.onEventWithNestApplicationFactory = exports.AbstractNestContext = exports.onCallWithNestContextFactory = exports.onCallWithNestApplicationFactory = void 0;
|
|
4
|
+
const functions = require("firebase-functions");
|
|
5
|
+
/**
|
|
6
|
+
* Creates a factory for generating OnCallWithNestApplication functions.
|
|
7
|
+
*
|
|
8
|
+
* @param nestAppPromiseGetter
|
|
9
|
+
* @returns
|
|
10
|
+
*/
|
|
11
|
+
function onCallWithNestApplicationFactory() {
|
|
12
|
+
return (fn) => {
|
|
13
|
+
return (nestAppPromiseGetter) => functions.https.onCall((data, context) => nestAppPromiseGetter().then(x => fn(x, data, context)));
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
exports.onCallWithNestApplicationFactory = onCallWithNestApplicationFactory;
|
|
17
|
+
/**
|
|
18
|
+
* Creates a factory for generating OnCallWithNestContext functions with a nest context object that is generated by the input function.
|
|
19
|
+
*
|
|
20
|
+
* @param appFactory
|
|
21
|
+
* @param makeNestContext
|
|
22
|
+
* @returns
|
|
23
|
+
*/
|
|
24
|
+
function onCallWithNestContextFactory(appFactory, makeNestContext) {
|
|
25
|
+
return (fn) => appFactory((nest, data, context) => fn(makeNestContext(nest), data, context));
|
|
26
|
+
}
|
|
27
|
+
exports.onCallWithNestContextFactory = onCallWithNestContextFactory;
|
|
28
|
+
/**
|
|
29
|
+
* Abstract class that wraps an INestApplicationContext value.
|
|
30
|
+
*/
|
|
31
|
+
class AbstractNestContext {
|
|
32
|
+
constructor(nest) {
|
|
33
|
+
this.nest = nest;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
exports.AbstractNestContext = AbstractNestContext;
|
|
37
|
+
/**
|
|
38
|
+
* Creates a factory for generating OnEventWithNestApplicationBuilder values.
|
|
39
|
+
*
|
|
40
|
+
* @param nestAppPromiseGetter
|
|
41
|
+
* @returns
|
|
42
|
+
*/
|
|
43
|
+
function onEventWithNestApplicationFactory() {
|
|
44
|
+
return (fn) => {
|
|
45
|
+
return (nestAppPromiseGetter) => {
|
|
46
|
+
const handlerBuilder = (handler) => {
|
|
47
|
+
const fnHandler = (data, context) => nestAppPromiseGetter().then(nest => handler(nest, data, context));
|
|
48
|
+
return fnHandler;
|
|
49
|
+
};
|
|
50
|
+
return fn(handlerBuilder);
|
|
51
|
+
};
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
exports.onEventWithNestApplicationFactory = onEventWithNestApplicationFactory;
|
|
55
|
+
/**
|
|
56
|
+
* Creates a factory for generating OnCallWithNestContext functions with a nest context object that is generated by the input function.
|
|
57
|
+
*
|
|
58
|
+
* @param appFactory
|
|
59
|
+
* @param makeNestContext
|
|
60
|
+
* @returns
|
|
61
|
+
*/
|
|
62
|
+
function onEventWithNestContextFactory(makeNestContext) {
|
|
63
|
+
return (fn) => {
|
|
64
|
+
return (nestAppPromiseGetter) => {
|
|
65
|
+
const handlerBuilder = (handler) => {
|
|
66
|
+
const fnHandler = (data, context) => nestAppPromiseGetter().then(nest => handler(makeNestContext(nest), data, context));
|
|
67
|
+
return fnHandler;
|
|
68
|
+
};
|
|
69
|
+
return fn(handlerBuilder);
|
|
70
|
+
};
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
exports.onEventWithNestContextFactory = onEventWithNestContextFactory;
|
|
74
|
+
//# sourceMappingURL=nest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nest.js","sourceRoot":"","sources":["../../../../../../../packages/firebase-server/src/lib/nest/function/nest.ts"],"names":[],"mappings":";;;AAEA,gDAAgD;AA6BhD;;;;;GAKG;AACH,SAAgB,gCAAgC;IAC9C,OAAO,CAAO,EAAmC,EAAE,EAAE;QACnD,OAAO,CAAC,oBAAkD,EAAE,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAO,EAAE,OAAwC,EAAE,EAAE,CAAC,oBAAoB,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IACvM,CAAC,CAAC;AACJ,CAAC;AAJD,4EAIC;AAiBD;;;;;;GAMG;AACH,SAAgB,4BAA4B,CAAI,UAA4C,EAAE,eAAmC;IAC/H,OAAO,CAAO,EAAkC,EAAE,EAAE,CAAC,UAAU,CAAO,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;AAC3I,CAAC;AAFD,oEAEC;AAED;;GAEG;AACH,MAAsB,mBAAmB;IACvC,YAAqB,IAA6B;QAA7B,SAAI,GAAJ,IAAI,CAAyB;IAAI,CAAC;CACxD;AAFD,kDAEC;AAcD;;;;;GAKG;AACH,SAAgB,iCAAiC;IAC/C,OAAO,CAAO,EAA2C,EAAE,EAAE;QAC3D,OAAO,CAAC,oBAAkD,EAAE,EAAE;YAC5D,MAAM,cAAc,GAA6C,CAAC,OAAO,EAAE,EAAE;gBAC3E,MAAM,SAAS,GAAgC,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC,oBAAoB,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;gBACpI,OAAO,SAAS,CAAC;YACnB,CAAC,CAAC;YAEF,OAAO,EAAE,CAAC,cAAc,CAAC,CAAC;QAC5B,CAAC,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC;AAXD,8EAWC;AAeD;;;;;;GAMG;AACH,SAAgB,6BAA6B,CAAI,eAAmC;IAClF,OAAO,CAAa,EAA0C,EAAE,EAAE;QAChE,OAAO,CAAC,oBAAkD,EAAE,EAAE;YAC5D,MAAM,cAAc,GAA4C,CAAC,OAAO,EAAE,EAAE;gBAC1E,MAAM,SAAS,GAAgC,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC,oBAAoB,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;gBACrJ,OAAO,SAAS,CAAC;YACnB,CAAC,CAAC;YAEF,OAAO,EAAE,CAAC,cAAc,CAAC,CAAC;QAC5B,CAAC,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC;AAXD,sEAWC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { CallableContextWithAuthData } from "../../function/context";
|
|
2
|
+
import { OnCallWithNestContext } from "./nest";
|
|
3
|
+
export declare type OnCallWithAuthorizedNestContext<C, I = any, O = any> = (nestContext: C, data: I, context: CallableContextWithAuthData) => O;
|
|
4
|
+
/**
|
|
5
|
+
* Creates an OnCallWithNestContext wrapper that validates the input CallableContext to assert the context has auth data before entering the function.
|
|
6
|
+
*
|
|
7
|
+
* @param fn
|
|
8
|
+
* @returns
|
|
9
|
+
*/
|
|
10
|
+
export declare function inAuthContext<C, I, O>(fn: OnCallWithAuthorizedNestContext<C, I, O>): OnCallWithNestContext<C, I, O>;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.inAuthContext = void 0;
|
|
4
|
+
const context_1 = require("../../function/context");
|
|
5
|
+
const error_1 = require("../../function/error");
|
|
6
|
+
/**
|
|
7
|
+
* Creates an OnCallWithNestContext wrapper that validates the input CallableContext to assert the context has auth data before entering the function.
|
|
8
|
+
*
|
|
9
|
+
* @param fn
|
|
10
|
+
* @returns
|
|
11
|
+
*/
|
|
12
|
+
function inAuthContext(fn) {
|
|
13
|
+
return (nestContext, data, context) => {
|
|
14
|
+
if ((0, context_1.isContextWithAuthData)(context)) {
|
|
15
|
+
return fn(nestContext, data, context);
|
|
16
|
+
}
|
|
17
|
+
else {
|
|
18
|
+
throw (0, error_1.unauthenticatedContextHasNoUidError)();
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
exports.inAuthContext = inAuthContext;
|
|
23
|
+
//# sourceMappingURL=nest.utility.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nest.utility.js","sourceRoot":"","sources":["../../../../../../../packages/firebase-server/src/lib/nest/function/nest.utility.ts"],"names":[],"mappings":";;;AACA,oDAA4F;AAC5F,gDAA2E;AAK3E;;;;;GAKG;AACH,SAAgB,aAAa,CAAU,EAA4C;IACjF,OAAO,CAAC,WAAc,EAAE,IAAO,EAAE,OAAwC,EAAE,EAAE;QAC3E,IAAI,IAAA,+BAAqB,EAAC,OAAO,CAAC,EAAE;YAClC,OAAO,EAAE,CAAC,WAAW,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;SACvC;aAAM;YACL,MAAM,IAAA,2CAAmC,GAAE,CAAC;SAC7C;IACH,CAAC,CAAA;AACH,CAAC;AARD,sCAQC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { TransformAndValidateFunctionResultFactory, TransformAndValidateObjectFactory } from "@dereekb/model";
|
|
2
|
+
/**
|
|
3
|
+
* Context used for transforming content.
|
|
4
|
+
*/
|
|
5
|
+
export interface FirebaseServerActionsTransformContext {
|
|
6
|
+
readonly firebaseServerActionTransformFactory: TransformAndValidateObjectFactory;
|
|
7
|
+
readonly firebaseServerActionTransformFunctionFactory: TransformAndValidateFunctionResultFactory;
|
|
8
|
+
}
|
|
9
|
+
export declare function firebaseServerActionsTransformContext(): FirebaseServerActionsTransformContext;
|
|
10
|
+
export declare function firebaseServerActionsTransformFactory(): TransformAndValidateObjectFactory;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.firebaseServerActionsTransformFactory = exports.firebaseServerActionsTransformContext = void 0;
|
|
4
|
+
const model_1 = require("@dereekb/model");
|
|
5
|
+
const common_1 = require("@nestjs/common");
|
|
6
|
+
const firebase_functions_1 = require("firebase-functions");
|
|
7
|
+
function firebaseServerActionsTransformContext() {
|
|
8
|
+
const firebaseServerActionTransformFactory = firebaseServerActionsTransformFactory();
|
|
9
|
+
const firebaseServerActionTransformFunctionFactory = (0, model_1.toTransformAndValidateFunctionResultFactory)(firebaseServerActionTransformFactory);
|
|
10
|
+
return {
|
|
11
|
+
firebaseServerActionTransformFactory,
|
|
12
|
+
firebaseServerActionTransformFunctionFactory
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
exports.firebaseServerActionsTransformContext = firebaseServerActionsTransformContext;
|
|
16
|
+
function firebaseServerActionsTransformFactory() {
|
|
17
|
+
const nestValidationExceptionFactory = new common_1.ValidationPipe().createExceptionFactory();
|
|
18
|
+
return (0, model_1.transformAndValidateObjectFactory)({
|
|
19
|
+
handleValidationError: (validationError) => {
|
|
20
|
+
const nestError = nestValidationExceptionFactory(validationError);
|
|
21
|
+
const details = nestError.getResponse();
|
|
22
|
+
throw new firebase_functions_1.https.HttpsError('invalid-argument', 'Parameters validation check failed.', details);
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
exports.firebaseServerActionsTransformFactory = firebaseServerActionsTransformFactory;
|
|
27
|
+
//# sourceMappingURL=transform.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transform.js","sourceRoot":"","sources":["../../../../../../../packages/firebase-server/src/lib/nest/function/transform.ts"],"names":[],"mappings":";;;AACA,0CAA8L;AAC9L,2CAA+D;AAC/D,2DAA2C;AAU3C,SAAgB,qCAAqC;IACnD,MAAM,oCAAoC,GAAG,qCAAqC,EAAE,CAAC;IACrF,MAAM,4CAA4C,GAAG,IAAA,mDAA2C,EAAC,oCAAoC,CAAC,CAAC;IAEvI,OAAO;QACL,oCAAoC;QACpC,4CAA4C;KAC7C,CAAC;AACJ,CAAC;AARD,sFAQC;AAED,SAAgB,qCAAqC;IACnD,MAAM,8BAA8B,GAAG,IAAI,uBAAc,EAAE,CAAC,sBAAsB,EAAE,CAAC;IAErF,OAAO,IAAA,yCAAiC,EAAC;QACvC,qBAAqB,EAAE,CAAC,eAAkC,EAAE,EAAE;YAC5D,MAAM,SAAS,GAAG,8BAA8B,CAAC,eAAe,CAAC,CAAC;YAClE,MAAM,OAAO,GAAI,SAA2B,CAAC,WAAW,EAAE,CAAC;YAC3D,MAAM,IAAI,0BAAK,CAAC,UAAU,CAAC,kBAAkB,EAAE,qCAAqC,EAAE,OAAO,CAAC,CAAC;QACjG,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AAVD,sFAUC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../packages/firebase-server/src/lib/nest/index.ts"],"names":[],"mappings":";;;AAAA,qDAA2B;AAC3B,gDAAsB"}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import { FirebaseAuthUserId } from '@dereekb/firebase';
|
|
2
|
+
import { AbstractChildJestTestContextFixture, Factory, JestTestContextFixture, GetterOrValue, PromiseOrValue } from "@dereekb/util";
|
|
3
|
+
import { FirebaseAdminTestContext } from "./firebase.admin";
|
|
4
|
+
import { CreateRequest } from 'firebase-admin/lib/auth/auth-config';
|
|
5
|
+
import { UserRecord } from 'firebase-admin/lib/auth/user-record';
|
|
6
|
+
import { DecodedIdToken } from 'firebase-admin/lib/auth/token-verifier';
|
|
7
|
+
import { Auth } from 'firebase-admin/lib/auth/auth';
|
|
8
|
+
import { CallableContextOptions, ContextOptions, WrappedFunction, WrappedScheduledFunction } from 'firebase-functions-test/lib/main';
|
|
9
|
+
import { EventContext } from 'firebase-functions/lib/cloud-functions';
|
|
10
|
+
/**
|
|
11
|
+
* Testing context for a single user.
|
|
12
|
+
*/
|
|
13
|
+
export interface AuthorizedUserTestContext {
|
|
14
|
+
readonly uid: FirebaseAuthUserId;
|
|
15
|
+
loadUserRecord(): Promise<UserRecord>;
|
|
16
|
+
loadIdToken(): Promise<string>;
|
|
17
|
+
loadDecodedIdToken(): Promise<DecodedIdToken>;
|
|
18
|
+
makeContextOptions(): Promise<ContextOptions>;
|
|
19
|
+
callCloudFunction<O = any, I = any>(fn: WrappedScheduledFunction | WrappedFunction<I>, params: any): Promise<O>;
|
|
20
|
+
}
|
|
21
|
+
export declare class AuthorizedUserTestContextFixture<PI extends FirebaseAdminTestContext = FirebaseAdminTestContext, PF extends JestTestContextFixture<PI> = JestTestContextFixture<PI>, I extends AuthorizedUserTestContextInstance<PI> = AuthorizedUserTestContextInstance<PI>> extends AbstractChildJestTestContextFixture<I, PF> implements AuthorizedUserTestContext {
|
|
22
|
+
get uid(): FirebaseAuthUserId;
|
|
23
|
+
loadUserRecord(): Promise<UserRecord>;
|
|
24
|
+
loadIdToken(): Promise<string>;
|
|
25
|
+
loadDecodedIdToken(): Promise<DecodedIdToken>;
|
|
26
|
+
makeContextOptions(): Promise<ContextOptions>;
|
|
27
|
+
callCloudFunction<O = any, I = any>(fn: WrappedScheduledFunction | WrappedFunction<I>, params: any): Promise<O>;
|
|
28
|
+
}
|
|
29
|
+
export interface CallEventFunctionEventContext extends Partial<Omit<EventContext, 'auth'>> {
|
|
30
|
+
}
|
|
31
|
+
export declare class AuthorizedUserTestContextInstance<PI extends FirebaseAdminTestContext = FirebaseAdminTestContext> implements AuthorizedUserTestContext {
|
|
32
|
+
readonly uid: FirebaseAuthUserId;
|
|
33
|
+
readonly testContext: PI;
|
|
34
|
+
constructor(uid: FirebaseAuthUserId, testContext: PI);
|
|
35
|
+
loadUserRecord(): Promise<UserRecord>;
|
|
36
|
+
loadIdToken(): Promise<string>;
|
|
37
|
+
loadDecodedIdToken(): Promise<DecodedIdToken>;
|
|
38
|
+
makeContextOptions(): Promise<ContextOptions>;
|
|
39
|
+
callCloudFunction<O = any, I = any>(fn: WrappedScheduledFunction | WrappedFunction<I>, params: any): Promise<O>;
|
|
40
|
+
callEventCloudFunction<O = any, I = any>(fn: WrappedScheduledFunction | WrappedFunction<I>, params: any, contextOptions?: CallEventFunctionEventContext): Promise<O>;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Generated user details. Used by AuthorizedUserTestContextParams.
|
|
44
|
+
*/
|
|
45
|
+
export interface AuthorizedUserTestContextDetailsTemplate {
|
|
46
|
+
/**
|
|
47
|
+
* Additional user details to add onto the user.
|
|
48
|
+
*/
|
|
49
|
+
details?: Partial<Omit<CreateRequest, 'uid'>>;
|
|
50
|
+
/**
|
|
51
|
+
* Custom claims object to add to a user's tokens.
|
|
52
|
+
*/
|
|
53
|
+
claims?: object;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* authorizedUserContext/authorizedUserContextFactory parameters.
|
|
57
|
+
*/
|
|
58
|
+
export interface AuthorizedUserTestContextParams<PI extends FirebaseAdminTestContext = FirebaseAdminTestContext, PF extends JestTestContextFixture<PI> = JestTestContextFixture<PI>, I extends AuthorizedUserTestContextInstance<PI> = AuthorizedUserTestContextInstance<PI>, F extends AuthorizedUserTestContextFixture<PI, PF, I> = AuthorizedUserTestContextFixture<PI, PF, I>, C extends AuthorizedUserTestContextFactoryParams<PI, PF> = AuthorizedUserTestContextFactoryParams<PI, PF>> {
|
|
59
|
+
f: PF;
|
|
60
|
+
/**
|
|
61
|
+
* uid value/getter to use. If not provided, a random one will be generated.
|
|
62
|
+
*/
|
|
63
|
+
uid?: GetterOrValue<FirebaseAuthUserId>;
|
|
64
|
+
/**
|
|
65
|
+
* Additional user details to attach to the create request.
|
|
66
|
+
*/
|
|
67
|
+
makeUserDetails?: (uid: FirebaseAuthUserId, params: C) => AuthorizedUserTestContextDetailsTemplate;
|
|
68
|
+
/**
|
|
69
|
+
* Creates the custom fixture. If not defined, a AuthorizedUserTestContextFixture is created.
|
|
70
|
+
*/
|
|
71
|
+
makeFixture?: (parent: PF) => F;
|
|
72
|
+
/**
|
|
73
|
+
* Custom make instance function. If not defined, a AuthorizedUserTestContextInstance will be generated.
|
|
74
|
+
*/
|
|
75
|
+
makeInstance?: (uid: FirebaseAuthUserId, testInstance: PI, params: C, userRecord: UserRecord) => PromiseOrValue<I>;
|
|
76
|
+
/**
|
|
77
|
+
* Optional function to initialize the user for this instance.
|
|
78
|
+
*/
|
|
79
|
+
initUser?: (instance: I, params: C) => Promise<void>;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Convenience function for using authorizedUserContextFactory directly and passing buildTests.
|
|
83
|
+
*/
|
|
84
|
+
export declare function authorizedUserContext<PI extends FirebaseAdminTestContext = FirebaseAdminTestContext, PF extends JestTestContextFixture<PI> = JestTestContextFixture<PI>, I extends AuthorizedUserTestContextInstance<PI> = AuthorizedUserTestContextInstance<PI>, F extends AuthorizedUserTestContextFixture<PI, PF, I> = AuthorizedUserTestContextFixture<PI, PF, I>>(config: AuthorizedUserTestContextParams<PI, PF, I, F>, buildTests: (u: F) => void): void;
|
|
85
|
+
export declare type AuthorizedUserTestContextFactoryConfig<PI extends FirebaseAdminTestContext = FirebaseAdminTestContext, PF extends JestTestContextFixture<PI> = JestTestContextFixture<PI>, I extends AuthorizedUserTestContextInstance<PI> = AuthorizedUserTestContextInstance<PI>, F extends AuthorizedUserTestContextFixture<PI, PF, I> = AuthorizedUserTestContextFixture<PI, PF, I>> = Omit<AuthorizedUserTestContextParams<PI, PF, I, F>, 'f'>;
|
|
86
|
+
export interface AuthorizedUserTestContextFactoryParams<PI extends FirebaseAdminTestContext = FirebaseAdminTestContext, PF extends JestTestContextFixture<PI> = JestTestContextFixture<PI>> {
|
|
87
|
+
f: PF;
|
|
88
|
+
user?: CreateRequest;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Creates a new Jest Context that has a random user for authorization for use in firebase server tests.
|
|
92
|
+
*/
|
|
93
|
+
export declare function authorizedUserContextFactory<PI extends FirebaseAdminTestContext = FirebaseAdminTestContext, PF extends JestTestContextFixture<PI> = JestTestContextFixture<PI>, I extends AuthorizedUserTestContextInstance<PI> = AuthorizedUserTestContextInstance<PI>, F extends AuthorizedUserTestContextFixture<PI, PF, I> = AuthorizedUserTestContextFixture<PI, PF, I>, C extends AuthorizedUserTestContextFactoryParams<PI, PF> = AuthorizedUserTestContextFactoryParams<PI, PF>>(config: AuthorizedUserTestContextFactoryConfig<PI, PF, I, F>): (params: C, buildTests: (u: F) => void) => void;
|
|
94
|
+
/**
|
|
95
|
+
* Incrementing number factory for generating test UID values.
|
|
96
|
+
*
|
|
97
|
+
* Has the format 'test-uid-<number>'
|
|
98
|
+
*/
|
|
99
|
+
export declare const testUidFactory: Factory<FirebaseAuthUserId>;
|
|
100
|
+
export declare type TestEncodedFirestoreToken = string;
|
|
101
|
+
/**
|
|
102
|
+
* Structure of the token created by Auth.createCustomToken().
|
|
103
|
+
*/
|
|
104
|
+
export declare type DecodedFirestoreCreateCustomTokenResult = {
|
|
105
|
+
claims?: any;
|
|
106
|
+
} & Pick<DecodedIdToken, 'uid' | 'sub' | 'iss' | 'exp' | 'iat' | 'aud'>;
|
|
107
|
+
/**
|
|
108
|
+
* Creates a CallableContextOptions with auth attached corresponding to the input UserRecord.
|
|
109
|
+
*
|
|
110
|
+
* @param auth
|
|
111
|
+
* @param userRecord
|
|
112
|
+
* @returns
|
|
113
|
+
*/
|
|
114
|
+
export declare function createTestFunctionContextOptions(auth: Auth, userRecord: UserRecord): Promise<CallableContextOptions>;
|
|
115
|
+
/**
|
|
116
|
+
* Creates and decodes a firestore token used for testing.
|
|
117
|
+
*
|
|
118
|
+
* @param auth
|
|
119
|
+
* @param userRecord
|
|
120
|
+
* @returns
|
|
121
|
+
*/
|
|
122
|
+
export declare function createTestFirestoreTokenForUserRecord(auth: Auth, userRecord: UserRecord): Promise<DecodedIdToken>;
|
|
123
|
+
/**
|
|
124
|
+
* Creates an encoded firestore token used for testing.
|
|
125
|
+
*
|
|
126
|
+
* @param auth
|
|
127
|
+
* @param userRecord
|
|
128
|
+
* @returns
|
|
129
|
+
*/
|
|
130
|
+
export declare function createEncodedTestFirestoreTokenForUserRecord(auth: Auth, userRecord: UserRecord): Promise<TestEncodedFirestoreToken>;
|
|
131
|
+
export declare function decodeEncodedCreateCustomTokenResult(token: TestEncodedFirestoreToken): DecodedIdToken;
|
|
132
|
+
export declare function testFirestoreClaimsFromUserRecord(userRecord: UserRecord): object;
|