@dereekb/firebase-server 5.2.1 → 7.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 +41 -0
- package/package.json +13 -13
- package/src/lib/auth/auth.context.d.ts +7 -0
- package/src/lib/auth/auth.context.js +12 -0
- package/src/lib/auth/auth.context.js.map +1 -0
- package/src/lib/auth/auth.service.d.ts +19 -2
- package/src/lib/auth/auth.service.js +20 -2
- package/src/lib/auth/auth.service.js.map +1 -1
- package/src/lib/auth/index.d.ts +1 -0
- package/src/lib/auth/index.js +1 -1
- package/src/lib/auth/index.js.map +1 -1
- package/src/lib/firestore/driver.accessor.js +1 -0
- package/src/lib/firestore/driver.accessor.js.map +1 -1
- package/src/lib/firestore/driver.query.js +6 -1
- package/src/lib/firestore/driver.query.js.map +1 -1
- package/src/lib/function/context.d.ts +3 -3
- package/src/lib/function/context.js.map +1 -1
- package/src/lib/function/error.d.ts +3 -0
- package/src/lib/function/error.js +10 -1
- package/src/lib/function/error.js.map +1 -1
- package/src/lib/nest/function/call.d.ts +23 -0
- package/src/lib/nest/function/call.js +28 -0
- package/src/lib/nest/function/call.js.map +1 -0
- package/src/lib/nest/function/context.d.ts +9 -1
- package/src/lib/nest/function/context.js +25 -3
- package/src/lib/nest/function/context.js.map +1 -1
- package/src/lib/nest/function/index.d.ts +2 -1
- package/src/lib/nest/function/index.js +2 -1
- package/src/lib/nest/function/index.js.map +1 -1
- package/src/lib/nest/function/nest.d.ts +19 -0
- package/src/lib/nest/function/nest.js +12 -0
- package/src/lib/nest/function/nest.js.map +1 -0
- package/src/lib/nest/function/v1/call.d.ts +5 -11
- package/src/lib/nest/function/v1/call.js +9 -3
- package/src/lib/nest/function/v1/call.js.map +1 -1
- package/src/lib/nest/function/v1/event.d.ts +14 -9
- package/src/lib/nest/function/v1/event.js +3 -2
- package/src/lib/nest/function/v1/event.js.map +1 -1
- package/src/lib/nest/function/v1/index.d.ts +0 -1
- package/src/lib/nest/function/v1/index.js +0 -1
- package/src/lib/nest/function/v1/index.js.map +1 -1
- package/src/lib/nest/function/v2/blocking.d.ts +8 -6
- package/src/lib/nest/function/v2/blocking.js +1 -1
- package/src/lib/nest/function/v2/blocking.js.map +1 -1
- package/src/lib/nest/function/v2/call.d.ts +3 -12
- package/src/lib/nest/function/v2/call.js +3 -2
- package/src/lib/nest/function/v2/call.js.map +1 -1
- package/src/lib/nest/function/v2/event.d.ts +8 -6
- package/src/lib/nest/function/v2/event.js +1 -1
- package/src/lib/nest/function/v2/event.js.map +1 -1
- package/src/lib/nest/function/v2/taskqueue.d.ts +9 -7
- package/src/lib/nest/function/v2/taskqueue.js +1 -1
- package/src/lib/nest/function/v2/taskqueue.js.map +1 -1
- package/src/lib/nest/index.d.ts +1 -0
- package/src/lib/nest/index.js +1 -0
- package/src/lib/nest/index.js.map +1 -1
- package/src/lib/nest/middleware/webhook.js.map +1 -1
- package/src/lib/nest/model/create.model.function.d.ts +16 -0
- package/src/lib/nest/model/create.model.function.js +37 -0
- package/src/lib/nest/model/create.model.function.js.map +1 -0
- package/src/lib/nest/model/delete.model.function.d.ts +16 -0
- package/src/lib/nest/model/delete.model.function.js +37 -0
- package/src/lib/nest/model/delete.model.function.js.map +1 -0
- package/src/lib/nest/model/index.d.ts +4 -0
- package/src/lib/nest/model/index.js +8 -0
- package/src/lib/nest/model/index.js.map +1 -0
- package/src/lib/nest/model/permission.error.d.ts +2 -0
- package/src/lib/nest/model/permission.error.js +20 -0
- package/src/lib/nest/model/permission.error.js.map +1 -0
- package/src/lib/nest/model/update.model.function.d.ts +16 -0
- package/src/lib/nest/model/update.model.function.js +37 -0
- package/src/lib/nest/model/update.model.function.js.map +1 -0
- package/src/lib/nest/nest.provider.d.ts +36 -1
- package/src/lib/nest/nest.provider.js +53 -1
- package/src/lib/nest/nest.provider.js.map +1 -1
- package/test/CHANGELOG.md +32 -0
- package/test/package.json +10 -10
- package/test/src/lib/firebase/firebase.admin.auth.d.ts +7 -6
- package/test/src/lib/firebase/firebase.admin.auth.js.map +1 -1
- package/test/src/lib/firebase/firebase.admin.collection.d.ts +5 -5
- package/test/src/lib/firebase/firebase.admin.function.d.ts +1 -2
- package/test/src/lib/firebase/firebase.admin.nest.function.d.ts +1 -2
- package/test/src/lib/firebase/firebase.admin.nest.function.js.map +1 -1
- package/test/src/lib/firebase/firebase.function.d.ts +5 -2
- package/test/src/lib/firebase/firebase.function.js +4 -0
- package/test/src/lib/firebase/firebase.function.js.map +1 -1
- package/test/src/lib/firebase/firebase.js +1 -1
- package/test/src/lib/firebase/firebase.js.map +1 -1
- package/test/src/lib/firestore/firestore.d.ts +1 -2
- package/src/lib/auth/auth.user.d.ts +0 -0
- package/src/lib/auth/auth.user.js +0 -2
- package/src/lib/auth/auth.user.js.map +0 -1
- package/src/lib/nest/function/transform.d.ts +0 -10
- package/src/lib/nest/function/transform.js +0 -27
- package/src/lib/nest/function/transform.js.map +0 -1
- package/src/lib/nest/function/v1/call.utility.d.ts +0 -10
- package/src/lib/nest/function/v1/call.utility.js +0 -23
- package/src/lib/nest/function/v1/call.utility.js.map +0 -1
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.updateModelUnknownModelTypeError = exports.onCallUpdateModel = void 0;
|
|
4
|
+
const util_1 = require("@dereekb/util");
|
|
5
|
+
const function_1 = require("../../function");
|
|
6
|
+
/**
|
|
7
|
+
* Creates a OnCallWithAuthorizedNestContext function for updating model params.
|
|
8
|
+
*
|
|
9
|
+
* @param map
|
|
10
|
+
* @returns
|
|
11
|
+
*/
|
|
12
|
+
function onCallUpdateModel(map) {
|
|
13
|
+
return (request) => {
|
|
14
|
+
var _a;
|
|
15
|
+
const modelType = (_a = request.data) === null || _a === void 0 ? void 0 : _a.modelType;
|
|
16
|
+
const updateFn = map[modelType];
|
|
17
|
+
if (updateFn) {
|
|
18
|
+
return updateFn(Object.assign(Object.assign({}, request), { data: request.data.data }));
|
|
19
|
+
}
|
|
20
|
+
else {
|
|
21
|
+
throw updateModelUnknownModelTypeError(modelType);
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
exports.onCallUpdateModel = onCallUpdateModel;
|
|
26
|
+
function updateModelUnknownModelTypeError(modelType) {
|
|
27
|
+
return (0, function_1.badRequestError)((0, util_1.serverError)({
|
|
28
|
+
status: 400,
|
|
29
|
+
code: 'UNKNOWN_TYPE_ERROR',
|
|
30
|
+
message: 'Invalid type to update.',
|
|
31
|
+
data: {
|
|
32
|
+
modelType
|
|
33
|
+
}
|
|
34
|
+
}));
|
|
35
|
+
}
|
|
36
|
+
exports.updateModelUnknownModelTypeError = updateModelUnknownModelTypeError;
|
|
37
|
+
//# sourceMappingURL=update.model.function.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update.model.function.js","sourceRoot":"","sources":["../../../../../../../packages/firebase-server/src/lib/nest/model/update.model.function.ts"],"names":[],"mappings":";;;AAAA,wCAA4D;AAE5D,6CAAiD;AAWjD;;;;;GAKG;AACH,SAAgB,iBAAiB,CAAI,GAA4B;IAC/D,OAAO,CAAC,OAAO,EAAE,EAAE;;QACjB,MAAM,SAAS,GAAG,MAAA,OAAO,CAAC,IAAI,0CAAE,SAAS,CAAC;QAC1C,MAAM,QAAQ,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC;QAEhC,IAAI,QAAQ,EAAE;YACZ,OAAO,QAAQ,iCACV,OAAO,KACV,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI,IACvB,CAAC;SACJ;aAAM;YACL,MAAM,gCAAgC,CAAC,SAAS,CAAC,CAAC;SACnD;IACH,CAAC,CAAC;AACJ,CAAC;AAdD,8CAcC;AAED,SAAgB,gCAAgC,CAAC,SAA6B;IAC5E,OAAO,IAAA,0BAAe,EACpB,IAAA,kBAAW,EAAC;QACV,MAAM,EAAE,GAAG;QACX,IAAI,EAAE,oBAAoB;QAC1B,OAAO,EAAE,yBAAyB;QAClC,IAAI,EAAE;YACJ,SAAS;SACV;KACF,CAAC,CACH,CAAC;AACJ,CAAC;AAXD,4EAWC"}
|
|
@@ -1,5 +1,9 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { FirebaseAppModelContext, FirebaseModelServiceContext, FirebaseModelsService, FirebaseModelsServiceSelectionResultRolesReader, FirebaseModelsServiceTypes, InContextFirebaseModelsService, UseFirebaseModelsServiceSelection, UseFirebaseModelsServiceSelectionUseFunction } from '@dereekb/firebase';
|
|
2
|
+
import { BuildFunction, Getter } from '@dereekb/util';
|
|
2
3
|
import { INestApplicationContext } from '@nestjs/common';
|
|
4
|
+
import { AuthDataRef } from '../auth';
|
|
5
|
+
import { FirebaseServerAuthService } from '../auth/auth.service';
|
|
6
|
+
import { FirebaseServerActionsContext } from './function/context';
|
|
3
7
|
/**
|
|
4
8
|
* Getter for an INestApplicationContext promise. Nest should be initialized when the promise resolves.
|
|
5
9
|
*/
|
|
@@ -21,3 +25,34 @@ export declare abstract class AbstractNestContext {
|
|
|
21
25
|
readonly nest: INestApplicationContext;
|
|
22
26
|
constructor(nest: INestApplicationContext);
|
|
23
27
|
}
|
|
28
|
+
export declare abstract class AbstractFirebaseNestContext<A, Y extends FirebaseModelsService<any, FirebaseAppModelContext<A>>> extends AbstractNestContext {
|
|
29
|
+
abstract get actionContext(): FirebaseServerActionsContext;
|
|
30
|
+
abstract get authService(): FirebaseServerAuthService;
|
|
31
|
+
abstract get firebaseModelsService(): Y;
|
|
32
|
+
abstract get app(): A;
|
|
33
|
+
/**
|
|
34
|
+
* Creates a FirebaseAppModelContext instance.
|
|
35
|
+
*
|
|
36
|
+
* @param auth
|
|
37
|
+
* @param buildFn
|
|
38
|
+
* @returns
|
|
39
|
+
*/
|
|
40
|
+
makeModelContext(auth: AuthDataRef, buildFn?: BuildFunction<FirebaseAppModelContext<A>>): FirebaseAppModelContext<A>;
|
|
41
|
+
/**
|
|
42
|
+
* Creates a InContextFirebaseModelsService given the input context and parameters.
|
|
43
|
+
*
|
|
44
|
+
* @param context
|
|
45
|
+
* @param buildFn
|
|
46
|
+
* @returns
|
|
47
|
+
*/
|
|
48
|
+
model(context: AuthDataRef, buildFn?: BuildFunction<FirebaseAppModelContext<A>>): InContextFirebaseModelsService<Y>;
|
|
49
|
+
useModel<T extends FirebaseModelsServiceTypes<Y>, O>(type: T, select: UseModelInput<FirebaseAppModelContext<A>, Y, T, O>): Promise<O>;
|
|
50
|
+
useModel<T extends FirebaseModelsServiceTypes<Y>>(type: T, select: UseModelInputForRolesReader<FirebaseAppModelContext<A>, Y, T>): Promise<FirebaseModelsServiceSelectionResultRolesReader<Y, T>>;
|
|
51
|
+
}
|
|
52
|
+
export declare type UseModelInputForRolesReader<C extends FirebaseModelServiceContext, Y extends FirebaseModelsService<any, C>, T extends FirebaseModelsServiceTypes<Y>> = Omit<UseFirebaseModelsServiceSelection<Y, T>, 'type' | 'context'> & {
|
|
53
|
+
request: AuthDataRef;
|
|
54
|
+
buildFn?: BuildFunction<C>;
|
|
55
|
+
};
|
|
56
|
+
export declare type UseModelInput<C extends FirebaseModelServiceContext, Y extends FirebaseModelsService<any, C>, T extends FirebaseModelsServiceTypes<Y>, O> = UseModelInputForRolesReader<C, Y, T> & {
|
|
57
|
+
use: UseFirebaseModelsServiceSelectionUseFunction<Y, T, O>;
|
|
58
|
+
};
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.AbstractNestContext = void 0;
|
|
3
|
+
exports.AbstractFirebaseNestContext = exports.AbstractNestContext = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const firebase_1 = require("@dereekb/firebase");
|
|
6
|
+
const util_1 = require("@dereekb/util");
|
|
7
|
+
const permission_error_1 = require("./model/permission.error");
|
|
4
8
|
/**
|
|
5
9
|
* Abstract class that wraps an INestApplicationContext value.
|
|
6
10
|
*/
|
|
@@ -10,4 +14,52 @@ class AbstractNestContext {
|
|
|
10
14
|
}
|
|
11
15
|
}
|
|
12
16
|
exports.AbstractNestContext = AbstractNestContext;
|
|
17
|
+
class AbstractFirebaseNestContext extends AbstractNestContext {
|
|
18
|
+
/**
|
|
19
|
+
* Creates a FirebaseAppModelContext instance.
|
|
20
|
+
*
|
|
21
|
+
* @param auth
|
|
22
|
+
* @param buildFn
|
|
23
|
+
* @returns
|
|
24
|
+
*/
|
|
25
|
+
makeModelContext(auth, buildFn) {
|
|
26
|
+
const base = {
|
|
27
|
+
auth: this.authService.authContextInfo(auth),
|
|
28
|
+
app: this.app,
|
|
29
|
+
makePermissionError: permission_error_1.nestFirebaseForbiddenPermissionError
|
|
30
|
+
};
|
|
31
|
+
return buildFn
|
|
32
|
+
? (0, util_1.build)({
|
|
33
|
+
base,
|
|
34
|
+
build: buildFn
|
|
35
|
+
})
|
|
36
|
+
: base;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Creates a InContextFirebaseModelsService given the input context and parameters.
|
|
40
|
+
*
|
|
41
|
+
* @param context
|
|
42
|
+
* @param buildFn
|
|
43
|
+
* @returns
|
|
44
|
+
*/
|
|
45
|
+
model(context, buildFn) {
|
|
46
|
+
const firebaseModelContext = this.makeModelContext(context, buildFn);
|
|
47
|
+
return (0, firebase_1.inContextFirebaseModelsServiceFactory)(this.firebaseModelsService)(firebaseModelContext);
|
|
48
|
+
}
|
|
49
|
+
useModel(type, select) {
|
|
50
|
+
var _a;
|
|
51
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
52
|
+
const context = this.makeModelContext(select.request, select.buildFn);
|
|
53
|
+
const usePromise = (0, firebase_1.useFirebaseModelsService)(this.firebaseModelsService, type, {
|
|
54
|
+
context,
|
|
55
|
+
key: select.key,
|
|
56
|
+
roles: select.roles,
|
|
57
|
+
rolesSetIncludes: select.rolesSetIncludes
|
|
58
|
+
});
|
|
59
|
+
const use = (_a = select.use) !== null && _a !== void 0 ? _a : ((x) => x);
|
|
60
|
+
return usePromise(use);
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
exports.AbstractFirebaseNestContext = AbstractFirebaseNestContext;
|
|
13
65
|
//# sourceMappingURL=nest.provider.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nest.provider.js","sourceRoot":"","sources":["../../../../../../packages/firebase-server/src/lib/nest/nest.provider.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"nest.provider.js","sourceRoot":"","sources":["../../../../../../packages/firebase-server/src/lib/nest/nest.provider.ts"],"names":[],"mappings":";;;;AAAA,gDAA+W;AAC/W,wCAA6D;AAK7D,+DAAgF;AAmBhF;;GAEG;AACH,MAAsB,mBAAmB;IACvC,YAAqB,IAA6B;QAA7B,SAAI,GAAJ,IAAI,CAAyB;IAAG,CAAC;CACvD;AAFD,kDAEC;AAED,MAAsB,2BAAiG,SAAQ,mBAAmB;IAMhJ;;;;;;OAMG;IACH,gBAAgB,CAAC,IAAiB,EAAE,OAAmD;QACrF,MAAM,IAAI,GAA+B;YACvC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,IAAI,CAAC;YAC5C,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,mBAAmB,EAAE,uDAAoC;SAC1D,CAAC;QAEF,OAAO,OAAO;YACZ,CAAC,CAAC,IAAA,YAAK,EAAC;gBACJ,IAAI;gBACJ,KAAK,EAAE,OAAO;aACf,CAAC;YACJ,CAAC,CAAC,IAAI,CAAC;IACX,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,OAAoB,EAAE,OAAmD;QAC7E,MAAM,oBAAoB,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACrE,OAAO,IAAA,gDAAqC,EAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,oBAAoB,CAAsC,CAAC;IACtI,CAAC;IAIK,QAAQ,CAA6C,IAAO,EAAE,MAA0H;;;YAC5L,MAAM,OAAO,GAA+B,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;YAClG,MAAM,UAAU,GAAG,IAAA,mCAAwB,EAAC,IAAI,CAAC,qBAAqB,EAAE,IAAI,EAAE;gBAC5E,OAAO;gBACP,GAAG,EAAE,MAAM,CAAC,GAAG;gBACf,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;aACC,CAAC,CAAC;YAE9C,MAAM,GAAG,GAA0D,MAAC,MAA6D,CAAC,GAAG,mCAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAiB,CAAC,CAAC;YACpK,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC;;KACxB;CACF;AAtDD,kEAsDC"}
|
package/test/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,38 @@
|
|
|
2
2
|
|
|
3
3
|
This file was generated using [@jscutlery/semver](https://github.com/jscutlery/semver).
|
|
4
4
|
|
|
5
|
+
# [7.0.0](https://github.com/dereekb/dbx-components/compare/v6.0.0-dev...v7.0.0) (2022-06-05)
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
### Code Refactoring
|
|
9
|
+
|
|
10
|
+
* updated OnCallWithNestContextRequest to use single object ([2ef4002](https://github.com/dereekb/dbx-components/commit/2ef4002153d3e4b7efb012e31b2739378ac49789))
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
### Features
|
|
14
|
+
|
|
15
|
+
* added FirestoreDocumentStore crud functions ([7786a40](https://github.com/dereekb/dbx-components/commit/7786a40f6033c2a1d5161805cde283dca7323db5))
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
### BREAKING CHANGES
|
|
19
|
+
|
|
20
|
+
* updated all onCall and functions to now use a single request object instead of multiple parameters
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
# [6.0.0](https://github.com/dereekb/dbx-components/compare/v5.3.0-dev...v6.0.0) (2022-06-03)
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
### Features
|
|
28
|
+
|
|
29
|
+
* added OnCallUpdateModel ([3b60a06](https://github.com/dereekb/dbx-components/commit/3b60a06d48ec6a96940f44939e24e5c1f4879aa9))
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
# [5.3.0](https://github.com/dereekb/dbx-components/compare/v5.2.1-dev...v5.3.0) (2022-05-30)
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
|
|
5
37
|
## [5.2.1](https://github.com/dereekb/dbx-components/compare/v5.2.0-dev...v5.2.1) (2022-05-29)
|
|
6
38
|
|
|
7
39
|
|
package/test/package.json
CHANGED
|
@@ -1,35 +1,35 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dereekb/firebase-server/test",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "7.0.0",
|
|
4
4
|
"main": "./src/index.js",
|
|
5
5
|
"typings": "./src/index.d.ts",
|
|
6
6
|
"dependencies": {},
|
|
7
7
|
"peerDependencies": {
|
|
8
|
-
"@dereekb/firebase": "
|
|
8
|
+
"@dereekb/firebase": "7.0.0",
|
|
9
9
|
"rxjs": "^7.0.0",
|
|
10
10
|
"rxfire": "^6.0.3",
|
|
11
11
|
"firebase": "^9.8.0",
|
|
12
|
-
"@dereekb/util": "
|
|
12
|
+
"@dereekb/util": "7.0.0",
|
|
13
13
|
"make-error": "^1.3.0",
|
|
14
14
|
"extra-set": "^2.2.11",
|
|
15
|
-
"@dereekb/rxjs": "
|
|
15
|
+
"@dereekb/rxjs": "7.0.0",
|
|
16
16
|
"ms": "^3.0.0-canary.1",
|
|
17
|
-
"@dereekb/date": "
|
|
17
|
+
"@dereekb/date": "7.0.0",
|
|
18
18
|
"class-transformer": "^0.5.1",
|
|
19
19
|
"date-fns": "^2.28.0",
|
|
20
20
|
"class-validator": "^0.13.2",
|
|
21
21
|
"date-fns-tz": "^1.3.0",
|
|
22
22
|
"rrule": "git+https://git@github.com/dereekb/rrule.git#17adf5708d6567b4d01a3a8afd106261421ea492",
|
|
23
|
-
"@dereekb/model": "
|
|
24
|
-
"@dereekb/util/test": "
|
|
23
|
+
"@dereekb/model": "7.0.0",
|
|
24
|
+
"@dereekb/util/test": "7.0.0",
|
|
25
25
|
"firebase-admin": "^10.2.0",
|
|
26
26
|
"jsonwebtoken": "^8.0.0",
|
|
27
27
|
"firebase-functions": "^3.21.2",
|
|
28
28
|
"@nestjs/common": "^8.4.0",
|
|
29
29
|
"@google-cloud/firestore": "^5.0.2",
|
|
30
|
-
"@dereekb/firebase/test": "
|
|
31
|
-
"@dereekb/firebase-server": "
|
|
32
|
-
"@dereekb/nestjs": "
|
|
30
|
+
"@dereekb/firebase/test": "7.0.0",
|
|
31
|
+
"@dereekb/firebase-server": "7.0.0",
|
|
32
|
+
"@dereekb/nestjs": "7.0.0",
|
|
33
33
|
"@nestjs/config": "^2.0.1",
|
|
34
34
|
"@nestjs/core": "^8.4.0",
|
|
35
35
|
"@nestjs/platform-express": "^8.4.0",
|
|
@@ -8,6 +8,8 @@ import { DecodedIdToken } from 'firebase-admin/lib/auth/token-verifier';
|
|
|
8
8
|
import { Auth } from 'firebase-admin/lib/auth/auth';
|
|
9
9
|
import { CallableContextOptions, ContextOptions, WrappedFunction, WrappedScheduledFunction } from 'firebase-functions-test/lib/main';
|
|
10
10
|
import { EventContext } from 'firebase-functions/lib/cloud-functions';
|
|
11
|
+
export declare type CallCloudFunction<I = any> = WrappedScheduledFunction | WrappedFunction<I>;
|
|
12
|
+
export declare type CallCloudFunctionParams<F> = F extends WrappedFunction<infer I> ? I : unknown;
|
|
11
13
|
/**
|
|
12
14
|
* Testing context for a single user.
|
|
13
15
|
*/
|
|
@@ -17,7 +19,7 @@ export interface AuthorizedUserTestContext {
|
|
|
17
19
|
loadIdToken(): Promise<string>;
|
|
18
20
|
loadDecodedIdToken(): Promise<DecodedIdToken>;
|
|
19
21
|
makeContextOptions(): Promise<ContextOptions>;
|
|
20
|
-
callCloudFunction<
|
|
22
|
+
callCloudFunction<F extends CallCloudFunction, O = unknown>(fn: F, params: CallCloudFunctionParams<F>): Promise<O>;
|
|
21
23
|
}
|
|
22
24
|
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 {
|
|
23
25
|
get uid(): FirebaseAuthUserId;
|
|
@@ -25,10 +27,9 @@ export declare class AuthorizedUserTestContextFixture<PI extends FirebaseAdminTe
|
|
|
25
27
|
loadIdToken(): Promise<string>;
|
|
26
28
|
loadDecodedIdToken(): Promise<DecodedIdToken>;
|
|
27
29
|
makeContextOptions(): Promise<ContextOptions>;
|
|
28
|
-
callCloudFunction<
|
|
29
|
-
}
|
|
30
|
-
export interface CallEventFunctionEventContext extends Partial<Omit<EventContext, 'auth'>> {
|
|
30
|
+
callCloudFunction<F extends CallCloudFunction, O = unknown>(fn: F, params: CallCloudFunctionParams<F>): Promise<O>;
|
|
31
31
|
}
|
|
32
|
+
export declare type CallEventFunctionEventContext = Partial<Omit<EventContext, 'auth'>>;
|
|
32
33
|
export declare class AuthorizedUserTestContextInstance<PI extends FirebaseAdminTestContext = FirebaseAdminTestContext> implements AuthorizedUserTestContext {
|
|
33
34
|
readonly uid: FirebaseAuthUserId;
|
|
34
35
|
readonly testContext: PI;
|
|
@@ -37,8 +38,8 @@ export declare class AuthorizedUserTestContextInstance<PI extends FirebaseAdminT
|
|
|
37
38
|
loadIdToken(): Promise<string>;
|
|
38
39
|
loadDecodedIdToken(): Promise<DecodedIdToken>;
|
|
39
40
|
makeContextOptions(): Promise<ContextOptions>;
|
|
40
|
-
callCloudFunction<
|
|
41
|
-
callEventCloudFunction<
|
|
41
|
+
callCloudFunction<F extends CallCloudFunction, O = unknown>(fn: F, params: CallCloudFunctionParams<F>): Promise<O>;
|
|
42
|
+
callEventCloudFunction<F extends WrappedFunction<any>, O = unknown>(fn: F, params: CallCloudFunctionParams<F>, contextOptions?: CallEventFunctionEventContext): Promise<O>;
|
|
42
43
|
}
|
|
43
44
|
/**
|
|
44
45
|
* Generated user details. Used by AuthorizedUserTestContextParams.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"firebase.admin.auth.js","sourceRoot":"","sources":["../../../../../../../packages/firebase-server/test/src/lib/firebase/firebase.admin.auth.ts"],"names":[],"mappings":";;;;AACA,wCAAoI;AACpI,6CAAwH;AAMxH,+CAAmD;
|
|
1
|
+
{"version":3,"file":"firebase.admin.auth.js","sourceRoot":"","sources":["../../../../../../../packages/firebase-server/test/src/lib/firebase/firebase.admin.auth.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
import { FirestoreCollection, FirestoreDocument, DocumentReference } from '@dereekb/firebase';
|
|
2
|
-
import {
|
|
1
|
+
import { FirestoreCollection, FirestoreDocument, DocumentReference, FirestoreModelId } from '@dereekb/firebase';
|
|
2
|
+
import { PromiseOrValue } from '@dereekb/util';
|
|
3
3
|
import { JestTestContextFixture, AbstractChildJestTestContextFixture } from '@dereekb/util/test';
|
|
4
4
|
import { FirebaseAdminTestContext } from './firebase.admin';
|
|
5
5
|
/**
|
|
6
6
|
* Testing context for a single model.
|
|
7
7
|
*/
|
|
8
8
|
export interface ModelTestContext<T, D extends FirestoreDocument<T> = FirestoreDocument<T>> {
|
|
9
|
-
get documentId():
|
|
9
|
+
get documentId(): FirestoreModelId;
|
|
10
10
|
get documentRef(): DocumentReference<T>;
|
|
11
11
|
get document(): D;
|
|
12
12
|
}
|
|
13
13
|
export declare class ModelTestContextFixture<T, D extends FirestoreDocument<T> = FirestoreDocument<T>, PI extends FirebaseAdminTestContext = FirebaseAdminTestContext, PF extends JestTestContextFixture<PI> = JestTestContextFixture<PI>, I extends ModelTestContextInstance<T, D, PI> = ModelTestContextInstance<T, D, PI>> extends AbstractChildJestTestContextFixture<I, PF> implements ModelTestContext<T, D> {
|
|
14
|
-
get documentId():
|
|
14
|
+
get documentId(): FirestoreModelId;
|
|
15
15
|
get documentRef(): DocumentReference<T>;
|
|
16
16
|
get document(): D;
|
|
17
17
|
}
|
|
@@ -20,7 +20,7 @@ export declare class ModelTestContextInstance<T, D extends FirestoreDocument<T>
|
|
|
20
20
|
readonly ref: DocumentReference<T>;
|
|
21
21
|
readonly testContext: PI;
|
|
22
22
|
constructor(collection: FirestoreCollection<T, D>, ref: DocumentReference<T>, testContext: PI);
|
|
23
|
-
get documentId():
|
|
23
|
+
get documentId(): FirestoreModelId;
|
|
24
24
|
get documentRef(): DocumentReference<T>;
|
|
25
25
|
get document(): D;
|
|
26
26
|
}
|
|
@@ -17,8 +17,7 @@ export interface FirebaseAdminFunctionTestConfig {
|
|
|
17
17
|
*/
|
|
18
18
|
useFunctionSingletonContext: boolean;
|
|
19
19
|
}
|
|
20
|
-
export
|
|
21
|
-
}
|
|
20
|
+
export declare type FirebaseAdminFunctionTestContext = FirebaseAdminTestContext;
|
|
22
21
|
export interface FullFirebaseAdminFunctionTestContext extends FirebaseAdminFunctionTestContext, JestTestContextFixture<FirebaseAdminFunctionTestContextInstance> {
|
|
23
22
|
}
|
|
24
23
|
export declare class FirebaseAdminFunctionTestContextFixture extends AbstractJestTestContextFixture<FirebaseAdminFunctionTestContextInstance> implements FirebaseAdminFunctionTestContext {
|
|
@@ -15,8 +15,7 @@ export declare class FirebaseAdminFunctionNestTestContextFixture<PI extends Fire
|
|
|
15
15
|
export declare class FirebaseAdminFunctionNestTestContextInstance<PI extends FirebaseAdminFunctionTestContextInstance = FirebaseAdminFunctionTestContextInstance> extends FirebaseAdminNestTestContextInstance<PI> implements FirebaseAdminFunctionNestTestContext {
|
|
16
16
|
get fnWrapper(): FirebaseAdminCloudFunctionWrapper;
|
|
17
17
|
}
|
|
18
|
-
export
|
|
19
|
-
}
|
|
18
|
+
export declare type FirebaseAdminFunctionNestTestConfig<PI extends FirebaseAdminFunctionTestContextInstance = FirebaseAdminFunctionTestContextInstance, PF extends JestTestContextFixture<PI> = JestTestContextFixture<PI>, I extends FirebaseAdminFunctionNestTestContextInstance<PI> = FirebaseAdminFunctionNestTestContextInstance<PI>, C extends FirebaseAdminFunctionNestTestContextFixture<PI, PF, I> = FirebaseAdminFunctionNestTestContextFixture<PI, PF, I>> = FirebaseAdminNestTestConfig<PI, PF, I, C>;
|
|
20
19
|
export declare type FirebaseAdminFunctionNestTestContextFactory<PI extends FirebaseAdminFunctionTestContextInstance = FirebaseAdminFunctionTestContextInstance, PF extends JestTestContextFixture<PI> = JestTestContextFixture<PI>, I extends FirebaseAdminFunctionNestTestContextInstance<PI> = FirebaseAdminFunctionNestTestContextInstance<PI>, C extends FirebaseAdminFunctionNestTestContextFixture<PI, PF, I> = FirebaseAdminFunctionNestTestContextFixture<PI, PF, I>> = JestTestContextFactory<C>;
|
|
21
20
|
export declare function firebaseAdminFunctionNestContextFixture<PI extends FirebaseAdminFunctionTestContextInstance = FirebaseAdminFunctionTestContextInstance, PF extends JestTestContextFixture<PI> = JestTestContextFixture<PI>, I extends FirebaseAdminFunctionNestTestContextInstance<PI> = FirebaseAdminFunctionNestTestContextInstance<PI>, C extends FirebaseAdminFunctionNestTestContextFixture<PI, PF, I> = FirebaseAdminFunctionNestTestContextFixture<PI, PF, I>>(config: FirebaseAdminFunctionNestTestConfig<PI, PF, I, C>, factory: JestTestContextFactory<PF>): FirebaseAdminFunctionNestTestContextFactory<PI, PF, I, C>;
|
|
22
21
|
export declare class FirebaseAdminFunctionNestRootModule {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"firebase.admin.nest.function.js","sourceRoot":"","sources":["../../../../../../../packages/firebase-server/test/src/lib/firebase/firebase.admin.nest.function.ts"],"names":[],"mappings":";;;AAEA,+DAAkN;AAClN,uEAA8H;AAE9H,2DAAsK;AAEtK,gBAAgB;AAChB,SAAgB,mCAAmC,CAAI,OAA6C,EAAE,EAAiD;IACrJ,OAAO,IAAA,+CAA2B,EAAI,OAAO,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC,CAAC;AACnG,CAAC;AAFD,kFAEC;AAKD,MAAa,2CAA+T,SAAQ,yDAA8C;IAChY,6CAA6C;IAC7C,6BAA6B,CAAI,EAAiD;QAChF,OAAO,IAAI,CAAC,mCAAmC,CAAC,EAAE,CAAC,EAAE,CAAC;IACxD,CAAC;IAED,mCAAmC,CAAI,EAAiD;QACtF,OAAO,mCAAmC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACvD,CAAC;IAED,gDAAgD;IAChD,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC;IACxC,CAAC;CACF;AAdD,kGAcC;AAED,MAAa,4CAA6I,SAAQ,0DAAwC;IACxM,6CAA6C;IAC7C,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;IAC/B,CAAC;CACF;AALD,oGAKC;
|
|
1
|
+
{"version":3,"file":"firebase.admin.nest.function.js","sourceRoot":"","sources":["../../../../../../../packages/firebase-server/test/src/lib/firebase/firebase.admin.nest.function.ts"],"names":[],"mappings":";;;AAEA,+DAAkN;AAClN,uEAA8H;AAE9H,2DAAsK;AAEtK,gBAAgB;AAChB,SAAgB,mCAAmC,CAAI,OAA6C,EAAE,EAAiD;IACrJ,OAAO,IAAA,+CAA2B,EAAI,OAAO,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC,CAAC;AACnG,CAAC;AAFD,kFAEC;AAKD,MAAa,2CAA+T,SAAQ,yDAA8C;IAChY,6CAA6C;IAC7C,6BAA6B,CAAI,EAAiD;QAChF,OAAO,IAAI,CAAC,mCAAmC,CAAC,EAAE,CAAC,EAAE,CAAC;IACxD,CAAC;IAED,mCAAmC,CAAI,EAAiD;QACtF,OAAO,mCAAmC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACvD,CAAC;IAED,gDAAgD;IAChD,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC;IACxC,CAAC;CACF;AAdD,kGAcC;AAED,MAAa,4CAA6I,SAAQ,0DAAwC;IACxM,6CAA6C;IAC7C,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;IAC/B,CAAC;CACF;AALD,oGAKC;AAMD,SAAgB,uCAAuC,CACrD,MAAyD,EACzD,OAAmC;IAEnC,OAAO,CAAC,UAAgD,EAAE,EAAE;QAC1D,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,2CAA2C,CAAe,MAAM,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC;IACnG,CAAC,CAAC;AACJ,CAAC;AAPD,0FAOC;AAED,MAAa,mCAAmC;CAAG;AAAnD,kFAAmD;AAEnD,SAAgB,2CAA2C,CACzD,MAAyD,EACzD,CAAK,EACL,UAAgD;IAEhD,MAAM,YAAY,mBAChB,WAAW,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,2CAA2C,CAAC,MAAM,CAAM,EACrF,YAAY,EAAE,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,4CAA4C,CAAK,QAAQ,EAAE,IAAI,CAAM,IACxG,MAAM,CACV,CAAC;IAEF,OAAO,IAAA,yDAAmC,EAAe,YAAY,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC;AACxF,CAAC;AAZD,kGAYC;AAED,SAAgB,uCAAuC,CACrD,MAA0J;IAE1J,OAAO,uCAAuC,CAAgH,MAAM,EAAE,iEAAuC,CAAC,CAAC;AACjN,CAAC;AAJD,0FAIC"}
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import { CloudFunction as CloudFunctionV1 } from 'firebase-functions';
|
|
2
2
|
import { CloudFunction as CloudFunctionV2, CloudEvent } from 'firebase-functions/v2';
|
|
3
|
-
import { wrap, WrappedFunction, WrappedScheduledFunction, WrappedV2Function } from 'firebase-functions-test/lib/main';
|
|
4
|
-
import { Getter } from '@dereekb/util';
|
|
3
|
+
import { CallableContextOptions, wrap, WrappedFunction, WrappedScheduledFunction, WrappedV2Function } from 'firebase-functions-test/lib/main';
|
|
4
|
+
import { Getter, PromiseOrValue } from '@dereekb/util';
|
|
5
5
|
import { FeaturesList } from 'firebase-functions-test/lib/features';
|
|
6
6
|
export declare type WrapCloudFunctionV1 = <T>(cloudFunction: CloudFunctionV1<T>) => WrappedScheduledFunction | WrappedFunction<T>;
|
|
7
|
+
export declare type WrappedV2CallableRequestDataOnly<T> = (data: T, options: CallableContextOptions) => PromiseOrValue<any>;
|
|
8
|
+
export declare type WrapCallableRequestV2 = <T>(cloudFunction: CloudFunctionV1<T>) => WrappedV2CallableRequestDataOnly<T>;
|
|
7
9
|
export declare type WrapCloudFunctionV2 = <T extends CloudEvent<unknown>>(cloudFunction: CloudFunctionV2<T>) => WrappedV2Function<T>;
|
|
8
10
|
export declare type WrapCloudFunctionV1Input<T> = CloudFunctionV1<T>;
|
|
9
11
|
export declare type WrappedCloudFunctionV1<T> = WrappedScheduledFunction | WrappedFunction<T>;
|
|
@@ -15,6 +17,7 @@ export interface FirebaseAdminCloudFunctionWrapperSource {
|
|
|
15
17
|
}
|
|
16
18
|
export interface FirebaseAdminCloudFunctionWrapper {
|
|
17
19
|
readonly wrapV1CloudFunction: WrapCloudFunctionV1;
|
|
20
|
+
readonly wrapV2CallableRequest: WrapCallableRequestV2;
|
|
18
21
|
readonly wrapV2CloudFunction: WrapCloudFunctionV2;
|
|
19
22
|
readonly wrapBlockingFunction: WrapBlockingFunction;
|
|
20
23
|
}
|
|
@@ -9,6 +9,10 @@ function firebaseAdminCloudFunctionWrapper(instance) {
|
|
|
9
9
|
wrapV2CloudFunction(x) {
|
|
10
10
|
return instance.wrap(x);
|
|
11
11
|
},
|
|
12
|
+
wrapV2CallableRequest(x) {
|
|
13
|
+
const wrappedCloudFunction = this.wrapV1CloudFunction(x);
|
|
14
|
+
return (data, context) => wrappedCloudFunction(Object.assign(Object.assign({}, context), { data }));
|
|
15
|
+
},
|
|
12
16
|
wrapBlockingFunction() {
|
|
13
17
|
throw new Error('Not supported yet.');
|
|
14
18
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"firebase.function.js","sourceRoot":"","sources":["../../../../../../../packages/firebase-server/test/src/lib/firebase/firebase.function.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"firebase.function.js","sourceRoot":"","sources":["../../../../../../../packages/firebase-server/test/src/lib/firebase/firebase.function.ts"],"names":[],"mappings":";;;AA8BA,SAAgB,iCAAiC,CAAC,QAAsB;IACtE,MAAM,OAAO,GAAsC;QACjD,mBAAmB,CAAC,CAAC;YACnB,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC1B,CAAC;QACD,mBAAmB,CAAC,CAAC;YACnB,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC1B,CAAC;QACD,qBAAqB,CAAC,CAAC;YACrB,MAAM,oBAAoB,GAAG,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;YAEzD,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,CACvB,oBAAoB,CAAC,gCAChB,OAAO,KACV,IAAI,GACE,CAAC,CAAC;QACd,CAAC;QACD,oBAAoB;YAClB,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;QACxC,CAAC;KACF,CAAC;IAEF,OAAO,OAAO,CAAC;AACjB,CAAC;AAvBD,8EAuBC;AAED,SAAgB,2BAA2B,CAAyE,OAA0C,EAAE,MAAiB;IAC/K,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC,mBAAmB,CAAC,MAAM,EAAE,CAAC,CAAC;AACrD,CAAC;AAFD,kEAEC;AAED,SAAgB,2BAA2B,CAAqG,OAA0C,EAAE,MAAiB;IAC3M,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC,mBAAmB,CAAC,MAAM,EAAE,CAAC,CAAC;AACrD,CAAC;AAFD,kEAEC"}
|
|
@@ -42,7 +42,7 @@ function applyFirebaseGCloudTestProjectIdToFirebaseConfigEnv() {
|
|
|
42
42
|
if (!testProjectId) {
|
|
43
43
|
throw new Error('No test project id was available in the environment. Did you call initFirebaseAdminTestEnvironment() first?');
|
|
44
44
|
}
|
|
45
|
-
|
|
45
|
+
const config = JSON.parse((_a = process.env.FIREBASE_CONFIG) !== null && _a !== void 0 ? _a : '{}');
|
|
46
46
|
config.projectId = testProjectId;
|
|
47
47
|
process.env.FIREBASE_CONFIG = JSON.stringify(config);
|
|
48
48
|
process.env.GCLOUD_PROJECT = testProjectId; // re-apply to GCLOUD_PROJECT too
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"firebase.js","sourceRoot":"","sources":["../../../../../../../packages/firebase-server/test/src/lib/firebase/firebase.ts"],"names":[],"mappings":";;;AAAA,IAAI,2BAA2B,GAAG,KAAK,CAAC;AAmBxC,SAAgB,6BAA6B;IAC3C,OAAO,2BAA2B,CAAC;AACrC,CAAC;AAFD,sEAEC;AAED,SAAgB,oBAAoB;IAClC,MAAM,SAAS,GAAG,gBAAgB,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;IAC1D,OAAO,SAAS,CAAC;AACnB,CAAC;AAHD,oDAGC;AAED,SAAgB,uCAAuC;IACrD,MAAM,SAAS,GAAG,oBAAoB,EAAE,CAAC;IACzC,OAAO,CAAC,GAAG,CAAC,mBAAmB,GAAG,SAAS,CAAC;IAC5C,OAAO,CAAC,GAAG,CAAC,cAAc,GAAG,SAAS,CAAC;IACvC,mDAAmD,EAAE,CAAC;IACtD,OAAO,SAAS,CAAC;AACnB,CAAC;AAND,0FAMC;AAED,SAAgB,kBAAkB;IAChC,OAAO,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;AACpC,CAAC;AAFD,gDAEC;AAED,SAAgB,sBAAsB;IACpC,OAAO,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;AACzC,CAAC;AAFD,wDAEC;AAED;;;;;GAKG;AACH,SAAgB,mDAAmD;;IACjE,qDAAqD;IACrD,yHAAyH;IACzH,MAAM,aAAa,GAAG,sBAAsB,EAAE,CAAC;IAE/C,gDAAgD;IAEhD,IAAI,CAAC,aAAa,EAAE;QAClB,MAAM,IAAI,KAAK,CAAC,6GAA6G,CAAC,CAAC;KAChI;IAED,
|
|
1
|
+
{"version":3,"file":"firebase.js","sourceRoot":"","sources":["../../../../../../../packages/firebase-server/test/src/lib/firebase/firebase.ts"],"names":[],"mappings":";;;AAAA,IAAI,2BAA2B,GAAG,KAAK,CAAC;AAmBxC,SAAgB,6BAA6B;IAC3C,OAAO,2BAA2B,CAAC;AACrC,CAAC;AAFD,sEAEC;AAED,SAAgB,oBAAoB;IAClC,MAAM,SAAS,GAAG,gBAAgB,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;IAC1D,OAAO,SAAS,CAAC;AACnB,CAAC;AAHD,oDAGC;AAED,SAAgB,uCAAuC;IACrD,MAAM,SAAS,GAAG,oBAAoB,EAAE,CAAC;IACzC,OAAO,CAAC,GAAG,CAAC,mBAAmB,GAAG,SAAS,CAAC;IAC5C,OAAO,CAAC,GAAG,CAAC,cAAc,GAAG,SAAS,CAAC;IACvC,mDAAmD,EAAE,CAAC;IACtD,OAAO,SAAS,CAAC;AACnB,CAAC;AAND,0FAMC;AAED,SAAgB,kBAAkB;IAChC,OAAO,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;AACpC,CAAC;AAFD,gDAEC;AAED,SAAgB,sBAAsB;IACpC,OAAO,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;AACzC,CAAC;AAFD,wDAEC;AAED;;;;;GAKG;AACH,SAAgB,mDAAmD;;IACjE,qDAAqD;IACrD,yHAAyH;IACzH,MAAM,aAAa,GAAG,sBAAsB,EAAE,CAAC;IAE/C,gDAAgD;IAEhD,IAAI,CAAC,aAAa,EAAE;QAClB,MAAM,IAAI,KAAK,CAAC,6GAA6G,CAAC,CAAC;KAChI;IAED,MAAM,MAAM,GAAQ,IAAI,CAAC,KAAK,CAAC,MAAA,OAAO,CAAC,GAAG,CAAC,eAAe,mCAAI,IAAI,CAAC,CAAC;IACpE,MAAM,CAAC,SAAS,GAAG,aAAa,CAAC;IAEjC,OAAO,CAAC,GAAG,CAAC,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IACrD,OAAO,CAAC,GAAG,CAAC,cAAc,GAAG,aAAa,CAAC,CAAC,iCAAiC;IAE7E,OAAO,aAAa,CAAC;AACvB,CAAC;AAlBD,kHAkBC;AAED;;GAEG;AACH,SAAgB,gCAAgC,CAAC,MAA0C;IACzF,SAAS,gBAAgB,CAAC,QAAgB;QACxC,MAAM,IAAI,KAAK,CAAC,gBAAgB,QAAQ,oEAAoE,CAAC,CAAC;IAChH,CAAC;IAED,SAAS,iBAAiB,CAAC,QAA2D,EAAE,MAAc;QACpG,MAAM,cAAc,GAAG,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAElD,IAAI,cAAc,EAAE;YAClB,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,cAAc,CAAC;SACtC;aAAM,IAAI,MAAM,CAAC,SAAS,CAAC,SAAS,KAAK,IAAI,EAAE;YAC9C,gBAAgB,CAAC,QAAQ,CAAC,CAAC;SAC5B;IACH,CAAC;IAED,uCAAuC,EAAE,CAAC;IAC1C,iBAAiB,CAAC,MAAM,EAAE,6BAA6B,CAAC,CAAC;IACzD,iBAAiB,CAAC,WAAW,EAAE,yBAAyB,CAAC,CAAC;IAC1D,iBAAiB,CAAC,SAAS,EAAE,gCAAgC,CAAC,CAAC;IAE/D,mDAAmD,EAAE,CAAC;IAEtD,2BAA2B,GAAG,IAAI,CAAC;AACrC,CAAC;AAvBD,4EAuBC"}
|
|
@@ -4,8 +4,7 @@ export interface GoogleCloudTestFirestoreConfig {
|
|
|
4
4
|
host: string;
|
|
5
5
|
port: number;
|
|
6
6
|
}
|
|
7
|
-
export
|
|
8
|
-
}
|
|
7
|
+
export declare type GoogleCloudTestFirestoreContext = TestFirestoreContext;
|
|
9
8
|
export declare function makeGoogleFirestoreContext(drivers: TestingFirestoreDrivers, firestore: Firestore): TestFirestoreContext;
|
|
10
9
|
export declare class GoogleCloudTestFirestoreInstance extends TestFirestoreInstance {
|
|
11
10
|
constructor(drivers: TestingFirestoreDrivers, firestore: Firestore);
|
|
File without changes
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"auth.user.js","sourceRoot":"","sources":["../../../../../../packages/firebase-server/src/lib/auth/auth.user.ts"],"names":[],"mappings":""}
|
|
@@ -1,10 +0,0 @@
|
|
|
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;
|
|
@@ -1,27 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import { CallableContextWithAuthData } from '../../../function/context';
|
|
2
|
-
import { OnCallWithNestContext } from './call';
|
|
3
|
-
export declare type OnCallWithAuthorizedNestContext<C, I = unknown, O = unknown> = (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>;
|
|
@@ -1,23 +0,0 @@
|
|
|
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=call.utility.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"call.utility.js","sourceRoot":"","sources":["../../../../../../../../packages/firebase-server/src/lib/nest/function/v1/call.utility.ts"],"names":[],"mappings":";;;AACA,uDAA+F;AAC/F,mDAA8E;AAK9E;;;;;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,CAAC;AACJ,CAAC;AARD,sCAQC"}
|