@goatlab/node-backend 0.0.16 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +54 -38
- package/dist/container/Container.d.ts +441 -0
- package/dist/container/Container.js +895 -0
- package/dist/container/Container.js.map +1 -0
- package/dist/container/DistributedCacheInvalidator.d.ts +84 -0
- package/dist/container/DistributedCacheInvalidator.js +213 -0
- package/dist/container/DistributedCacheInvalidator.js.map +1 -0
- package/dist/container/LruCache.d.ts +14 -0
- package/dist/container/LruCache.js +23 -0
- package/dist/container/LruCache.js.map +1 -0
- package/dist/container/types.d.ts +128 -0
- package/dist/container/types.js +6 -0
- package/dist/container/types.js.map +1 -0
- package/dist/index.d.ts +31 -0
- package/dist/index.js +53 -1
- package/dist/index.js.map +1 -1
- package/dist/server/bootstraps/getExpressTrpcApp.d.ts +17 -0
- package/dist/server/bootstraps/getExpressTrpcApp.js +98 -0
- package/dist/server/bootstraps/getExpressTrpcApp.js.map +1 -0
- package/dist/server/consts.d.ts +35 -0
- package/dist/server/consts.js +33 -0
- package/dist/server/consts.js.map +1 -0
- package/dist/server/context/context.model.d.ts +13 -0
- package/dist/server/context/context.model.js +3 -0
- package/dist/server/context/context.model.js.map +1 -0
- package/dist/server/context/request.context.d.ts +40 -0
- package/dist/server/context/request.context.js +65 -0
- package/dist/server/context/request.context.js.map +1 -0
- package/dist/server/context/trpc.context.d.ts +11 -0
- package/dist/server/context/trpc.context.js +67 -0
- package/dist/server/context/trpc.context.js.map +1 -0
- package/dist/server/initOpenApiDocs.d.ts +9 -0
- package/dist/server/initOpenApiDocs.js +18 -0
- package/dist/server/initOpenApiDocs.js.map +1 -0
- package/dist/server/middleware/cloudTaskDecrypt.middleware.d.ts +6 -0
- package/dist/server/middleware/cloudTaskDecrypt.middleware.js +44 -0
- package/dist/server/middleware/cloudTaskDecrypt.middleware.js.map +1 -0
- package/dist/server/middleware/error.middleware.d.ts +17 -0
- package/dist/server/middleware/error.middleware.js +66 -0
- package/dist/server/middleware/error.middleware.js.map +1 -0
- package/dist/server/middleware/handleRequest.middleware.d.ts +7 -0
- package/dist/server/middleware/handleRequest.middleware.js +40 -0
- package/dist/server/middleware/handleRequest.middleware.js.map +1 -0
- package/dist/server/middleware/logger/cloudRun.logger.d.ts +27 -0
- package/dist/server/middleware/logger/cloudRun.logger.js +87 -0
- package/dist/server/middleware/logger/cloudRun.logger.js.map +1 -0
- package/dist/server/middleware/logger/logger.service.d.ts +6 -0
- package/dist/server/middleware/logger/logger.service.js +17 -0
- package/dist/server/middleware/logger/logger.service.js.map +1 -0
- package/dist/server/middleware/logs.middleware.d.ts +7 -0
- package/dist/server/middleware/logs.middleware.js +130 -0
- package/dist/server/middleware/logs.middleware.js.map +1 -0
- package/dist/server/middleware/requireAuthenticated.d.ts +2 -0
- package/dist/server/middleware/requireAuthenticated.js +13 -0
- package/dist/server/middleware/requireAuthenticated.js.map +1 -0
- package/dist/server/middleware/trpcError.middleware.d.ts +4 -0
- package/dist/server/middleware/trpcError.middleware.js +38 -0
- package/dist/server/middleware/trpcError.middleware.js.map +1 -0
- package/dist/server/schemas/user.schema.d.ts +109 -0
- package/dist/server/schemas/user.schema.js +28 -0
- package/dist/server/schemas/user.schema.js.map +1 -0
- package/dist/server/sentry/getSentry.d.ts +6 -0
- package/dist/server/sentry/getSentry.js +45 -0
- package/dist/server/sentry/getSentry.js.map +1 -0
- package/dist/server/sentry/sentry.service.d.ts +34 -0
- package/dist/server/sentry/sentry.service.js +110 -0
- package/dist/server/sentry/sentry.service.js.map +1 -0
- package/dist/server/services/email/email.model.d.ts +84 -0
- package/dist/server/services/email/email.model.js +62 -0
- package/dist/server/services/email/email.model.js.map +1 -0
- package/dist/server/services/email/email.service.d.ts +23 -0
- package/dist/server/services/email/email.service.js +139 -0
- package/dist/server/services/email/email.service.js.map +1 -0
- package/dist/server/services/gcp/getGcpServiceAccountFromBase64.d.ts +15 -0
- package/dist/server/services/gcp/getGcpServiceAccountFromBase64.js +9 -0
- package/dist/server/services/gcp/getGcpServiceAccountFromBase64.js.map +1 -0
- package/dist/server/services/secrets/secret.service.d.ts +31 -0
- package/dist/server/services/secrets/secret.service.js +172 -0
- package/dist/server/services/secrets/secret.service.js.map +1 -0
- package/dist/server/services/sendgrid/sendgrid.model.d.ts +118 -0
- package/dist/server/services/sendgrid/sendgrid.model.js +3 -0
- package/dist/server/services/sendgrid/sendgrid.model.js.map +1 -0
- package/dist/server/services/sendgrid/sendgridApi.service.d.ts +13 -0
- package/dist/server/services/sendgrid/sendgridApi.service.js +79 -0
- package/dist/server/services/sendgrid/sendgridApi.service.js.map +1 -0
- package/dist/server/services/sendgrid/sendgridHooks.model.d.ts +27 -0
- package/dist/server/services/sendgrid/sendgridHooks.model.js +19 -0
- package/dist/server/services/sendgrid/sendgridHooks.model.js.map +1 -0
- package/dist/server/services/translations/template.util.d.ts +7 -0
- package/dist/server/services/translations/template.util.js +11 -0
- package/dist/server/services/translations/template.util.js.map +1 -0
- package/dist/server/services/translations/translation.model.d.ts +4 -0
- package/dist/server/services/translations/translation.model.js +6 -0
- package/dist/server/services/translations/translation.model.js.map +1 -0
- package/dist/server/services/translations/translation.service.d.ts +25 -0
- package/dist/server/services/translations/translation.service.js +97 -0
- package/dist/server/services/translations/translation.service.js.map +1 -0
- package/dist/server/services/util/benchmarker.d.ts +13 -0
- package/dist/server/services/util/benchmarker.js +34 -0
- package/dist/server/services/util/benchmarker.js.map +1 -0
- package/dist/server/services/util/pagination.d.ts +50 -0
- package/dist/server/services/util/pagination.js +57 -0
- package/dist/server/services/util/pagination.js.map +1 -0
- package/dist/server/services/util/url.service.d.ts +75 -0
- package/dist/server/services/util/url.service.js +139 -0
- package/dist/server/services/util/url.service.js.map +1 -0
- package/dist/server/test/express.mock.d.ts +6 -0
- package/dist/server/test/express.mock.js +49 -0
- package/dist/server/test/express.mock.js.map +1 -0
- package/dist/server/test/firebase.mock.d.ts +4 -0
- package/dist/server/test/firebase.mock.js +30 -0
- package/dist/server/test/firebase.mock.js.map +1 -0
- package/dist/server/test/mock.model.d.ts +5 -0
- package/dist/server/test/mock.model.js +3 -0
- package/dist/server/test/mock.model.js.map +1 -0
- package/dist/server/test/trpc.mock.d.ts +6 -0
- package/dist/server/test/trpc.mock.js +14 -0
- package/dist/server/test/trpc.mock.js.map +1 -0
- package/dist/server/trpc.d.ts +364 -0
- package/dist/server/trpc.js +87 -0
- package/dist/server/trpc.js.map +1 -0
- package/dist/server/types/Envinronment.d.ts +1 -0
- package/dist/server/types/Envinronment.js +3 -0
- package/dist/server/types/Envinronment.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +33 -3
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import type { Environment } from '../../types/Envinronment';
|
|
2
|
+
interface UrlServiceProps {
|
|
3
|
+
isMobile?: boolean;
|
|
4
|
+
useIP?: boolean;
|
|
5
|
+
preferPublicIp?: boolean;
|
|
6
|
+
}
|
|
7
|
+
export type PaymentSuccessRedirectURL = `${string}/payment/processed?orderId=${string}`;
|
|
8
|
+
export type PaymentFailedRedirectURL = `${string}/payment/cancelled?paymentFailed=true&orderId=${string}`;
|
|
9
|
+
export type PaymentCancelledRedirectURL = `${string}/payment/cancelled?orderId=${string}`;
|
|
10
|
+
export declare class UrlService {
|
|
11
|
+
publicBucketName: string;
|
|
12
|
+
privateBucketName: string;
|
|
13
|
+
baseDomain: string;
|
|
14
|
+
backendApiBaseUrl: string;
|
|
15
|
+
environment: Environment;
|
|
16
|
+
constructor({ publicBucketName, privateBucketName, baseDomain, backendApiBaseUrl, environment, }: {
|
|
17
|
+
publicBucketName: string;
|
|
18
|
+
privateBucketName: string;
|
|
19
|
+
baseDomain: string;
|
|
20
|
+
backendApiBaseUrl: string;
|
|
21
|
+
environment: Environment;
|
|
22
|
+
});
|
|
23
|
+
getBackendUrl: ({ isMobile, useIP }?: UrlServiceProps) => string;
|
|
24
|
+
/**
|
|
25
|
+
* When running locally, the storage can be accessed
|
|
26
|
+
* either using localhost, the localIp of the host or Nginx URL
|
|
27
|
+
*
|
|
28
|
+
* We mainly use this for local testing as Chrome forces us to have
|
|
29
|
+
* an HTTPS endpoint to upload assets to the Firebase Emulator
|
|
30
|
+
* @returns
|
|
31
|
+
*/
|
|
32
|
+
getLocalStorageHostUrl: ({ isMobile, useIP, }: UrlServiceProps) => Promise<string>;
|
|
33
|
+
getPublicStorageUrl: ({ isMobile, useIP }: UrlServiceProps) => Promise<string>;
|
|
34
|
+
getPrivateStorageUrl: ({ isMobile, useIP, }: UrlServiceProps) => Promise<string>;
|
|
35
|
+
getFrontendUrl: () => string;
|
|
36
|
+
/**
|
|
37
|
+
* Decides where to send the user back after the payment has been completed
|
|
38
|
+
* if we already decided on an origin, it will use that origin
|
|
39
|
+
*
|
|
40
|
+
* @param origin
|
|
41
|
+
* @returns
|
|
42
|
+
*/
|
|
43
|
+
getFrontendRedirectURL(origin?: string): string;
|
|
44
|
+
/**
|
|
45
|
+
* Decides which backend the payment provider should reply to
|
|
46
|
+
* It can be either dev, prod or local. Transbank queries the backend from
|
|
47
|
+
* the frontend, so you will still be able to use local urls
|
|
48
|
+
* @param origin
|
|
49
|
+
* @returns
|
|
50
|
+
*/
|
|
51
|
+
getBackendRedirectURLForTransBankPayments({ origin, orderId, storeId, }: {
|
|
52
|
+
origin?: string;
|
|
53
|
+
orderId?: string;
|
|
54
|
+
storeId?: string;
|
|
55
|
+
}): string;
|
|
56
|
+
/**
|
|
57
|
+
* Redirección de pago exitoso
|
|
58
|
+
* @param origin
|
|
59
|
+
* @param orderId
|
|
60
|
+
*/
|
|
61
|
+
getPaymentSuccessRedirectURL(origin: string | undefined, orderId: string): PaymentSuccessRedirectURL;
|
|
62
|
+
/**
|
|
63
|
+
* Redirección de pago con error (fallo en commit, etc)
|
|
64
|
+
* @param origin
|
|
65
|
+
* @param orderId
|
|
66
|
+
*/
|
|
67
|
+
getPaymentFailedRedirectURL(origin: string | undefined, orderId: string): PaymentFailedRedirectURL;
|
|
68
|
+
/**
|
|
69
|
+
* Redirección de pago cancelado por el usuario
|
|
70
|
+
* @param origin
|
|
71
|
+
* @param orderId
|
|
72
|
+
*/
|
|
73
|
+
getPaymentCancelledRedirectURL(origin: string | undefined, orderId: string): PaymentCancelledRedirectURL;
|
|
74
|
+
}
|
|
75
|
+
export {};
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.UrlService = void 0;
|
|
4
|
+
const node_utils_1 = require("@goatlab/node-utils");
|
|
5
|
+
const localIpAddress = node_utils_1.Ips.getLocalIpAddress();
|
|
6
|
+
class UrlService {
|
|
7
|
+
publicBucketName;
|
|
8
|
+
privateBucketName;
|
|
9
|
+
baseDomain;
|
|
10
|
+
backendApiBaseUrl;
|
|
11
|
+
environment;
|
|
12
|
+
constructor({ publicBucketName, privateBucketName, baseDomain, backendApiBaseUrl, environment, }) {
|
|
13
|
+
this.publicBucketName = publicBucketName;
|
|
14
|
+
this.privateBucketName = privateBucketName;
|
|
15
|
+
this.baseDomain = baseDomain;
|
|
16
|
+
this.backendApiBaseUrl = backendApiBaseUrl;
|
|
17
|
+
this.environment = environment;
|
|
18
|
+
}
|
|
19
|
+
getBackendUrl = ({ isMobile, useIP } = { isMobile: false, useIP: false }) => {
|
|
20
|
+
if (this.environment === 'local') {
|
|
21
|
+
return this.backendApiBaseUrl;
|
|
22
|
+
}
|
|
23
|
+
if (isMobile || useIP) {
|
|
24
|
+
return `http://${localIpAddress}:8086`;
|
|
25
|
+
}
|
|
26
|
+
return `https://api.a.getsodium.com`;
|
|
27
|
+
};
|
|
28
|
+
/**
|
|
29
|
+
* When running locally, the storage can be accessed
|
|
30
|
+
* either using localhost, the localIp of the host or Nginx URL
|
|
31
|
+
*
|
|
32
|
+
* We mainly use this for local testing as Chrome forces us to have
|
|
33
|
+
* an HTTPS endpoint to upload assets to the Firebase Emulator
|
|
34
|
+
* @returns
|
|
35
|
+
*/
|
|
36
|
+
getLocalStorageHostUrl = async ({ isMobile, useIP, }) => {
|
|
37
|
+
if (isMobile || useIP) {
|
|
38
|
+
return `http://${localIpAddress}:9199`;
|
|
39
|
+
}
|
|
40
|
+
return `https://assets.a.getsodium.com`;
|
|
41
|
+
};
|
|
42
|
+
getPublicStorageUrl = async ({ isMobile, useIP }) => {
|
|
43
|
+
if (this.environment === 'local') {
|
|
44
|
+
const storageServiceUrl = await this.getLocalStorageHostUrl({
|
|
45
|
+
isMobile,
|
|
46
|
+
useIP,
|
|
47
|
+
});
|
|
48
|
+
return `${storageServiceUrl}/${this.publicBucketName}`;
|
|
49
|
+
}
|
|
50
|
+
if (this.environment === 'prod') {
|
|
51
|
+
return `https://assets.${this.baseDomain}`;
|
|
52
|
+
}
|
|
53
|
+
return `https://assets-dev.${this.baseDomain}`;
|
|
54
|
+
};
|
|
55
|
+
getPrivateStorageUrl = async ({ isMobile, useIP, }) => {
|
|
56
|
+
if (this.environment === 'local') {
|
|
57
|
+
const storageServiceUrl = await this.getLocalStorageHostUrl({
|
|
58
|
+
isMobile,
|
|
59
|
+
useIP,
|
|
60
|
+
});
|
|
61
|
+
return `${storageServiceUrl}/${this.privateBucketName}`;
|
|
62
|
+
}
|
|
63
|
+
if (this.environment === 'prod') {
|
|
64
|
+
return `https://private-assets.${this.baseDomain}`;
|
|
65
|
+
}
|
|
66
|
+
return `https://private-assets-dev.${this.baseDomain}`;
|
|
67
|
+
};
|
|
68
|
+
getFrontendUrl = () => {
|
|
69
|
+
if (this.environment === 'local') {
|
|
70
|
+
return 'https://frontend.a.getsodium.com';
|
|
71
|
+
}
|
|
72
|
+
if (this.environment === 'prod') {
|
|
73
|
+
return `https://dev.${this.baseDomain}`;
|
|
74
|
+
}
|
|
75
|
+
return `https://${this.baseDomain}`;
|
|
76
|
+
};
|
|
77
|
+
/**
|
|
78
|
+
* Decides where to send the user back after the payment has been completed
|
|
79
|
+
* if we already decided on an origin, it will use that origin
|
|
80
|
+
*
|
|
81
|
+
* @param origin
|
|
82
|
+
* @returns
|
|
83
|
+
*/
|
|
84
|
+
getFrontendRedirectURL(origin) {
|
|
85
|
+
// This is the frontend url
|
|
86
|
+
const baseRedirect = origin ||
|
|
87
|
+
// Just in case origin is not provided (should not happen)
|
|
88
|
+
(this.environment === 'prod'
|
|
89
|
+
? `https://${this.baseDomain}`
|
|
90
|
+
: // DEV running in cloud run
|
|
91
|
+
this.environment === 'dev' && process.env.K_SERVICE
|
|
92
|
+
? `https://dev.${this.baseDomain}`
|
|
93
|
+
: 'https://localhost:4430');
|
|
94
|
+
return baseRedirect;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Decides which backend the payment provider should reply to
|
|
98
|
+
* It can be either dev, prod or local. Transbank queries the backend from
|
|
99
|
+
* the frontend, so you will still be able to use local urls
|
|
100
|
+
* @param origin
|
|
101
|
+
* @returns
|
|
102
|
+
*/
|
|
103
|
+
getBackendRedirectURLForTransBankPayments({ origin, orderId, storeId, }) {
|
|
104
|
+
const redirectUrl = this.getBackendUrl({
|
|
105
|
+
useIP: true,
|
|
106
|
+
preferPublicIp: true,
|
|
107
|
+
});
|
|
108
|
+
return `${redirectUrl}/payments/process?origin=${origin}&storeId=${storeId}&orderId=${orderId}`;
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Redirección de pago exitoso
|
|
112
|
+
* @param origin
|
|
113
|
+
* @param orderId
|
|
114
|
+
*/
|
|
115
|
+
getPaymentSuccessRedirectURL(origin, orderId) {
|
|
116
|
+
const base = this.getFrontendRedirectURL(origin);
|
|
117
|
+
return `${base}/payment/processed?orderId=${encodeURIComponent(orderId)}`;
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Redirección de pago con error (fallo en commit, etc)
|
|
121
|
+
* @param origin
|
|
122
|
+
* @param orderId
|
|
123
|
+
*/
|
|
124
|
+
getPaymentFailedRedirectURL(origin, orderId) {
|
|
125
|
+
const base = this.getFrontendRedirectURL(origin);
|
|
126
|
+
return `${base}/payment/cancelled?paymentFailed=true&orderId=${encodeURIComponent(orderId)}`;
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Redirección de pago cancelado por el usuario
|
|
130
|
+
* @param origin
|
|
131
|
+
* @param orderId
|
|
132
|
+
*/
|
|
133
|
+
getPaymentCancelledRedirectURL(origin, orderId) {
|
|
134
|
+
const base = this.getFrontendRedirectURL(origin);
|
|
135
|
+
return `${base}/payment/cancelled?orderId=${encodeURIComponent(orderId)}`;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
exports.UrlService = UrlService;
|
|
139
|
+
//# sourceMappingURL=url.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"url.service.js","sourceRoot":"","sources":["../../../../src/server/services/util/url.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { MockRequest as ExpressMockRequest, RequestOptions } from 'node-mocks-http';
|
|
2
|
+
import { BasicAccount } from './mock.model';
|
|
3
|
+
type MockRequest = Record<string, unknown> & ExpressMockRequest<any>;
|
|
4
|
+
export declare function mockRequest(options?: RequestOptions): MockRequest;
|
|
5
|
+
export declare const mockedRegisteredAccountRequest: (account?: Partial<BasicAccount>, patch?: RequestOptions) => MockRequest;
|
|
6
|
+
export {};
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.mockedRegisteredAccountRequest = void 0;
|
|
4
|
+
exports.mockRequest = mockRequest;
|
|
5
|
+
const node_mocks_http_1 = require("node-mocks-http");
|
|
6
|
+
const firebase_mock_1 = require("./firebase.mock");
|
|
7
|
+
function mockRequest(options = {}) {
|
|
8
|
+
const request = (0, node_mocks_http_1.createRequest)(options);
|
|
9
|
+
if (options.ip) {
|
|
10
|
+
Object.assign(request, {
|
|
11
|
+
ip: options.ip,
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
Object.assign(request, {
|
|
15
|
+
acceptsLanguages: () => options.acceptsLanguages || [],
|
|
16
|
+
});
|
|
17
|
+
request.log = console.log;
|
|
18
|
+
request.warn = console.log;
|
|
19
|
+
request.error = console.log;
|
|
20
|
+
return request;
|
|
21
|
+
}
|
|
22
|
+
function defaultRequestOptions() {
|
|
23
|
+
return {
|
|
24
|
+
method: 'GET',
|
|
25
|
+
url: '/',
|
|
26
|
+
headers: {
|
|
27
|
+
Accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
|
|
28
|
+
'Accept-Encoding': 'gzip, deflate, br',
|
|
29
|
+
// Request from Iphone
|
|
30
|
+
'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 8_0 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) CriOS/39.0.2171.50 Mobile/12A365 Safari/600.1.4 (000206)',
|
|
31
|
+
},
|
|
32
|
+
acceptsLanguages: ['en', 'es'],
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
const mockedRegisteredAccountRequest = (account, patch = {}) => {
|
|
36
|
+
const defOptions = defaultRequestOptions();
|
|
37
|
+
const mockedToken = (0, firebase_mock_1.mockFirebaseToken)(account);
|
|
38
|
+
return mockRequest({
|
|
39
|
+
...defOptions,
|
|
40
|
+
headers: {
|
|
41
|
+
authorization: `Bearer ${mockedToken}`,
|
|
42
|
+
...defOptions.headers,
|
|
43
|
+
// We can extend the headers
|
|
44
|
+
},
|
|
45
|
+
...patch,
|
|
46
|
+
});
|
|
47
|
+
};
|
|
48
|
+
exports.mockedRegisteredAccountRequest = mockedRegisteredAccountRequest;
|
|
49
|
+
//# sourceMappingURL=express.mock.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"express.mock.js","sourceRoot":"","sources":["../../../src/server/test/express.mock.ts"],"names":[],"mappings":";;;AAUA,kCAiBC;AAvBD,qDAA+C;AAC/C,mDAAmD;AAKnD,SAAgB,WAAW,CAAC,UAA0B,EAAE;IACtD,MAAM,OAAO,GAAG,IAAA,+BAAa,EAAC,OAAO,CAAC,CAAA;IACtC,IAAI,OAAO,CAAC,EAAE,EAAE,CAAC;QACf,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE;YACrB,EAAE,EAAE,OAAO,CAAC,EAAE;SACf,CAAC,CAAA;IACJ,CAAC;IAED,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE;QACrB,gBAAgB,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,gBAAgB,IAAI,EAAE;KACvD,CAAC,CAAA;IAEF,OAAO,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAA;IACzB,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,GAAG,CAAA;IAC1B,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,GAAG,CAAA;IAE3B,OAAO,OAAO,CAAA;AAChB,CAAC;AAED,SAAS,qBAAqB;IAC5B,OAAO;QACL,MAAM,EAAE,KAAK;QACb,GAAG,EAAE,GAAG;QACR,OAAO,EAAE;YACP,MAAM,EACJ,uFAAuF;YACzF,iBAAiB,EAAE,mBAAmB;YACtC,sBAAsB;YACtB,YAAY,EACV,wJAAwJ;SAC3J;QACD,gBAAgB,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;KAC/B,CAAA;AACH,CAAC;AAEM,MAAM,8BAA8B,GAAG,CAC5C,OAA+B,EAC/B,QAAwB,EAAE,EACb,EAAE;IACf,MAAM,UAAU,GAAG,qBAAqB,EAAE,CAAA;IAC1C,MAAM,WAAW,GAAG,IAAA,iCAAiB,EAAC,OAAO,CAAC,CAAA;IAE9C,OAAO,WAAW,CAAC;QACjB,GAAG,UAAU;QACb,OAAO,EAAE;YACP,aAAa,EAAE,UAAU,WAAW,EAAE;YACtC,GAAG,UAAU,CAAC,OAAO;YACrB,4BAA4B;SAC7B;QACD,GAAG,KAAK;KACT,CAAC,CAAA;AACJ,CAAC,CAAA;AAhBY,QAAA,8BAA8B,kCAgB1C"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { FirebaseDecodedToken } from '../schemas/user.schema';
|
|
2
|
+
import { BasicAccount } from './mock.model';
|
|
3
|
+
export declare const mockedFirebaseDecodedToken: (mockedAccount?: Partial<BasicAccount>) => FirebaseDecodedToken;
|
|
4
|
+
export declare const mockFirebaseToken: (account?: Partial<BasicAccount>) => string;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.mockFirebaseToken = exports.mockedFirebaseDecodedToken = void 0;
|
|
4
|
+
const mockedFirebaseDecodedToken = (mockedAccount) => {
|
|
5
|
+
const account = mockedAccount || {
|
|
6
|
+
email: 'testemail@test.com',
|
|
7
|
+
firebaseId: 'testfirebaseId',
|
|
8
|
+
};
|
|
9
|
+
const payload = {
|
|
10
|
+
aud: 'someFakeAudience',
|
|
11
|
+
auth_time: 1664050702,
|
|
12
|
+
email: account.email || '',
|
|
13
|
+
email_verified: true,
|
|
14
|
+
exp: 1695579492,
|
|
15
|
+
iat: 1664050702,
|
|
16
|
+
iss: 'someFakeProject',
|
|
17
|
+
sub: '12312312312',
|
|
18
|
+
uid: account.firebaseId ?? 'someFakeFirebaseId',
|
|
19
|
+
firebase: true,
|
|
20
|
+
};
|
|
21
|
+
return payload;
|
|
22
|
+
};
|
|
23
|
+
exports.mockedFirebaseDecodedToken = mockedFirebaseDecodedToken;
|
|
24
|
+
const mockFirebaseToken = (account) => {
|
|
25
|
+
const payload = (0, exports.mockedFirebaseDecodedToken)(account);
|
|
26
|
+
// This should be a JWT, but it is just a mock
|
|
27
|
+
return JSON.stringify(payload);
|
|
28
|
+
};
|
|
29
|
+
exports.mockFirebaseToken = mockFirebaseToken;
|
|
30
|
+
//# sourceMappingURL=firebase.mock.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"firebase.mock.js","sourceRoot":"","sources":["../../../src/server/test/firebase.mock.ts"],"names":[],"mappings":";;;AAGO,MAAM,0BAA0B,GAAG,CACxC,aAAqC,EACf,EAAE;IACxB,MAAM,OAAO,GAAG,aAAa,IAAI;QAC/B,KAAK,EAAE,oBAAoB;QAC3B,UAAU,EAAE,gBAAgB;KAC7B,CAAA;IAED,MAAM,OAAO,GAAyB;QACpC,GAAG,EAAE,kBAAkB;QACvB,SAAS,EAAE,UAAU;QACrB,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,EAAE;QAC1B,cAAc,EAAE,IAAI;QACpB,GAAG,EAAE,UAAU;QACf,GAAG,EAAE,UAAU;QACf,GAAG,EAAE,iBAAiB;QACtB,GAAG,EAAE,aAAa;QAClB,GAAG,EAAE,OAAO,CAAC,UAAU,IAAI,oBAAoB;QAC/C,QAAQ,EAAE,IAAI;KACf,CAAA;IACD,OAAO,OAAO,CAAA;AAChB,CAAC,CAAA;AArBY,QAAA,0BAA0B,8BAqBtC;AAEM,MAAM,iBAAiB,GAAG,CAAC,OAA+B,EAAU,EAAE;IAC3E,MAAM,OAAO,GAAG,IAAA,kCAA0B,EAAC,OAAO,CAAC,CAAA;IACnD,8CAA8C;IAC9C,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA;AAChC,CAAC,CAAA;AAJY,QAAA,iBAAiB,qBAI7B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mock.model.js","sourceRoot":"","sources":["../../../src/server/test/mock.model.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { AnyRootTypes, RouterCaller, RouterRecord } from '@trpc/server/unstable-core-do-not-import';
|
|
2
|
+
import { BasicAccount } from './mock.model';
|
|
3
|
+
export declare const mockedAuthenticatedTrpcRouter: <TRoot extends AnyRootTypes, TRecord extends RouterRecord>({ mockedAccount, createCaller, }: {
|
|
4
|
+
mockedAccount?: Partial<BasicAccount>;
|
|
5
|
+
createCaller: RouterCaller<TRoot, TRecord>;
|
|
6
|
+
}) => Promise<import("@trpc/server/unstable-core-do-not-import").DecorateRouterRecord<TRecord>>;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.mockedAuthenticatedTrpcRouter = void 0;
|
|
4
|
+
const request_context_1 = require("../context/request.context");
|
|
5
|
+
const express_mock_1 = require("./express.mock");
|
|
6
|
+
const firebase_mock_1 = require("./firebase.mock");
|
|
7
|
+
const mockedAuthenticatedTrpcRouter = async ({ mockedAccount, createCaller, }) => {
|
|
8
|
+
const mockedRequest = (0, express_mock_1.mockedRegisteredAccountRequest)(mockedAccount);
|
|
9
|
+
const user = (0, firebase_mock_1.mockedFirebaseDecodedToken)(mockedAccount);
|
|
10
|
+
const ctx = (0, request_context_1.requestContext)(mockedRequest, user);
|
|
11
|
+
return createCaller(ctx);
|
|
12
|
+
};
|
|
13
|
+
exports.mockedAuthenticatedTrpcRouter = mockedAuthenticatedTrpcRouter;
|
|
14
|
+
//# sourceMappingURL=trpc.mock.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trpc.mock.js","sourceRoot":"","sources":["../../../src/server/test/trpc.mock.ts"],"names":[],"mappings":";;;AAKA,gEAA2D;AAC3D,iDAA+D;AAC/D,mDAA4D;AAGrD,MAAM,6BAA6B,GAAG,KAAK,EAGhD,EACA,aAAa,EACb,YAAY,GAIb,EAAE,EAAE;IACH,MAAM,aAAa,GAAG,IAAA,6CAA8B,EAAC,aAAa,CAAC,CAAA;IACnE,MAAM,IAAI,GAAG,IAAA,0CAA0B,EAAC,aAAa,CAAC,CAAA;IACtD,MAAM,GAAG,GAAG,IAAA,gCAAc,EAAC,aAAa,EAAE,IAAI,CAAC,CAAA;IAE/C,OAAO,YAAY,CAAC,GAAG,CAAC,CAAA;AAC1B,CAAC,CAAA;AAfY,QAAA,6BAA6B,iCAezC"}
|