@appweaver/core 1.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/LICENSE +1 -0
- package/README.md +7 -0
- package/app/application.d.ts +43 -0
- package/app/application.js +112 -0
- package/app/create-app.d.ts +32 -0
- package/app/create-app.js +38 -0
- package/app/index.d.ts +2 -0
- package/app/index.js +18 -0
- package/app/lifecycle-manager.d.ts +20 -0
- package/app/lifecycle-manager.js +42 -0
- package/app/load-modules.d.ts +10 -0
- package/app/load-modules.js +50 -0
- package/app/load-providers.d.ts +8 -0
- package/app/load-providers.js +33 -0
- package/cache/cache-service.d.ts +72 -0
- package/cache/cache-service.js +202 -0
- package/cache/cache.d.ts +12 -0
- package/cache/cache.js +184 -0
- package/cache/caching.d.ts +8 -0
- package/cache/caching.js +72 -0
- package/cache/eviction/eviction-index.d.ts +35 -0
- package/cache/eviction/eviction-index.js +2 -0
- package/cache/eviction/fifo-eviction-index.d.ts +7 -0
- package/cache/eviction/fifo-eviction-index.js +28 -0
- package/cache/eviction/index.d.ts +4 -0
- package/cache/eviction/index.js +20 -0
- package/cache/eviction/lfu-eviction-index.d.ts +8 -0
- package/cache/eviction/lfu-eviction-index.js +82 -0
- package/cache/eviction/lru-eviction-index.d.ts +8 -0
- package/cache/eviction/lru-eviction-index.js +81 -0
- package/cache/index.d.ts +2 -0
- package/cache/index.js +18 -0
- package/cache/memory-cache.d.ts +4 -0
- package/cache/memory-cache.js +12 -0
- package/cache/redis-cache.d.ts +4 -0
- package/cache/redis-cache.js +12 -0
- package/context/context.d.ts +2 -0
- package/context/context.js +13 -0
- package/context/dependency-injection.d.ts +98 -0
- package/context/dependency-injection.js +276 -0
- package/context/index.d.ts +2 -0
- package/context/index.js +18 -0
- package/database/create-client.d.ts +11 -0
- package/database/create-client.js +142 -0
- package/database/index.d.ts +1 -0
- package/database/index.js +17 -0
- package/database/prisma-database.d.ts +15 -0
- package/database/prisma-database.js +53 -0
- package/errors/error-handler.d.ts +3 -0
- package/errors/error-handler.js +24 -0
- package/errors/error-schema.d.ts +32 -0
- package/errors/error-schema.js +31 -0
- package/errors/http-error.d.ts +21 -0
- package/errors/http-error.js +33 -0
- package/errors/index.d.ts +3 -0
- package/errors/index.js +19 -0
- package/events/node-events.d.ts +7 -0
- package/events/node-events.js +39 -0
- package/export/export-service.d.ts +19 -0
- package/export/export-service.js +154 -0
- package/export/index.d.ts +1 -0
- package/export/index.js +17 -0
- package/factory/create-model.d.ts +2 -0
- package/factory/create-model.js +366 -0
- package/factory/create-policy.d.ts +2 -0
- package/factory/create-policy.js +16 -0
- package/factory/create-routes.d.ts +2 -0
- package/factory/create-routes.js +21 -0
- package/factory/create-service.d.ts +3 -0
- package/factory/create-service.js +97 -0
- package/factory/index.d.ts +4 -0
- package/factory/index.js +20 -0
- package/health/health-routes.d.ts +2 -0
- package/health/health-routes.js +36 -0
- package/health/health-schema.d.ts +45 -0
- package/health/health-schema.js +52 -0
- package/health/health-service.d.ts +38 -0
- package/health/health-service.js +82 -0
- package/health/index.d.ts +2 -0
- package/health/index.js +18 -0
- package/index.d.ts +15 -0
- package/index.js +31 -0
- package/mailer/email-service.d.ts +36 -0
- package/mailer/email-service.js +89 -0
- package/mailer/index.d.ts +1 -0
- package/mailer/index.js +17 -0
- package/mailer/json-mailer.d.ts +7 -0
- package/mailer/json-mailer.js +32 -0
- package/mailer/smtp-mailer.d.ts +7 -0
- package/mailer/smtp-mailer.js +43 -0
- package/memory/in-memory.d.ts +24 -0
- package/memory/in-memory.js +164 -0
- package/memory/redis.d.ts +26 -0
- package/memory/redis.js +158 -0
- package/package.json +68 -0
- package/prisma/client/browser.d.ts +34 -0
- package/prisma/client/browser.js +56 -0
- package/prisma/client/client.d.ts +53 -0
- package/prisma/client/client.js +70 -0
- package/prisma/client/commonInputTypes.d.ts +395 -0
- package/prisma/client/commonInputTypes.js +11 -0
- package/prisma/client/enums.d.ts +1 -0
- package/prisma/client/enums.js +11 -0
- package/prisma/client/internal/class.d.ts +187 -0
- package/prisma/client/internal/class.js +85 -0
- package/prisma/client/internal/prismaNamespace.d.ts +987 -0
- package/prisma/client/internal/prismaNamespace.js +193 -0
- package/prisma/client/internal/prismaNamespaceBrowser.d.ts +125 -0
- package/prisma/client/internal/prismaNamespaceBrowser.js +164 -0
- package/prisma/client/models/ApiKey.d.ts +1167 -0
- package/prisma/client/models/ApiKey.js +2 -0
- package/prisma/client/models/File.d.ts +1248 -0
- package/prisma/client/models/File.js +2 -0
- package/prisma/client/models/OneTimeToken.d.ts +1083 -0
- package/prisma/client/models/OneTimeToken.js +2 -0
- package/prisma/client/models/Permission.d.ts +1209 -0
- package/prisma/client/models/Permission.js +2 -0
- package/prisma/client/models/Role.d.ts +1209 -0
- package/prisma/client/models/Role.js +2 -0
- package/prisma/client/models/Seeder.d.ts +1023 -0
- package/prisma/client/models/Seeder.js +2 -0
- package/prisma/client/models.d.ts +7 -0
- package/prisma/client/models.js +2 -0
- package/queue/bull-queue.d.ts +37 -0
- package/queue/bull-queue.js +207 -0
- package/queue/memory-queue.d.ts +54 -0
- package/queue/memory-queue.js +283 -0
- package/resource/index.d.ts +4 -0
- package/resource/index.js +20 -0
- package/resource/resource-loader.d.ts +26 -0
- package/resource/resource-loader.js +161 -0
- package/resource/resource-routes.d.ts +3 -0
- package/resource/resource-routes.js +174 -0
- package/resource/resource-schema.d.ts +33 -0
- package/resource/resource-schema.js +186 -0
- package/resource/resource-service.d.ts +89 -0
- package/resource/resource-service.js +772 -0
- package/resources.d.ts +9 -0
- package/resources.js +24 -0
- package/scheduler/cron-scheduler.d.ts +12 -0
- package/scheduler/cron-scheduler.js +73 -0
- package/security/account/account-routes.d.ts +2 -0
- package/security/account/account-routes.js +104 -0
- package/security/account/account-schema.d.ts +290 -0
- package/security/account/account-schema.js +166 -0
- package/security/account/account-service.d.ts +88 -0
- package/security/account/account-service.js +218 -0
- package/security/account/index.d.ts +3 -0
- package/security/account/index.js +19 -0
- package/security/api-key/api-key-auth.d.ts +4 -0
- package/security/api-key/api-key-auth.js +66 -0
- package/security/api-key/index.d.ts +1 -0
- package/security/api-key/index.js +17 -0
- package/security/auth-routes.d.ts +2 -0
- package/security/auth-routes.js +80 -0
- package/security/auth-schema.d.ts +215 -0
- package/security/auth-schema.js +129 -0
- package/security/auth-service.d.ts +117 -0
- package/security/auth-service.js +272 -0
- package/security/auth.d.ts +3 -0
- package/security/auth.js +127 -0
- package/security/basic/basic-auth.d.ts +4 -0
- package/security/basic/basic-auth.js +32 -0
- package/security/basic/index.d.ts +1 -0
- package/security/basic/index.js +17 -0
- package/security/create-auth-resources.d.ts +6 -0
- package/security/create-auth-resources.js +129 -0
- package/security/helper.d.ts +127 -0
- package/security/helper.js +329 -0
- package/security/index.d.ts +4 -0
- package/security/index.js +20 -0
- package/security/jwt/index.d.ts +2 -0
- package/security/jwt/index.js +18 -0
- package/security/jwt/jwt-auth.d.ts +4 -0
- package/security/jwt/jwt-auth.js +57 -0
- package/security/jwt/jwt-keys.d.ts +7 -0
- package/security/jwt/jwt-keys.js +43 -0
- package/security/oauth2/create-oauth2-plugin.d.ts +17 -0
- package/security/oauth2/create-oauth2-plugin.js +85 -0
- package/security/oauth2/index.d.ts +3 -0
- package/security/oauth2/index.js +19 -0
- package/security/oauth2/oauth2-custom.d.ts +7 -0
- package/security/oauth2/oauth2-custom.js +40 -0
- package/security/oauth2/oauth2-facebook.d.ts +1 -0
- package/security/oauth2/oauth2-facebook.js +30 -0
- package/security/oauth2/oauth2-google.d.ts +1 -0
- package/security/oauth2/oauth2-google.js +28 -0
- package/security/oauth2/oauth2-schema.d.ts +10 -0
- package/security/oauth2/oauth2-schema.js +53 -0
- package/security/recaptcha/index.d.ts +2 -0
- package/security/recaptcha/index.js +18 -0
- package/security/recaptcha/recaptcha-verify.d.ts +1 -0
- package/security/recaptcha/recaptcha-verify.js +33 -0
- package/security/recaptcha/recaptcha.d.ts +2 -0
- package/security/recaptcha/recaptcha.js +22 -0
- package/security/resources/api-key/model.d.ts +2 -0
- package/security/resources/api-key/model.js +63 -0
- package/security/resources/api-key/policy.d.ts +2 -0
- package/security/resources/api-key/policy.js +26 -0
- package/security/resources/api-key/routes.d.ts +2 -0
- package/security/resources/api-key/routes.js +15 -0
- package/security/resources/api-key/service.d.ts +3 -0
- package/security/resources/api-key/service.js +33 -0
- package/security/resources/one-time-token/model.d.ts +2 -0
- package/security/resources/one-time-token/model.js +32 -0
- package/security/resources/permission/model.d.ts +2 -0
- package/security/resources/permission/model.js +16 -0
- package/security/resources/role/model.d.ts +2 -0
- package/security/resources/role/model.js +22 -0
- package/security/store/database-security-store.d.ts +5 -0
- package/security/store/database-security-store.js +51 -0
- package/security/store/redis-security-store.d.ts +5 -0
- package/security/store/redis-security-store.js +32 -0
- package/seeder/create-seeder.d.ts +21 -0
- package/seeder/create-seeder.js +17 -0
- package/seeder/index.d.ts +2 -0
- package/seeder/index.js +18 -0
- package/seeder/resources/seeder/model.d.ts +2 -0
- package/seeder/resources/seeder/model.js +38 -0
- package/seeder/seeder.d.ts +20 -0
- package/seeder/seeder.js +175 -0
- package/server/create-server.d.ts +20 -0
- package/server/create-server.js +160 -0
- package/server/index.d.ts +4 -0
- package/server/index.js +20 -0
- package/server/info-route.d.ts +2 -0
- package/server/info-route.js +18 -0
- package/server/info-schema.d.ts +37 -0
- package/server/info-schema.js +19 -0
- package/server/register-model.d.ts +2 -0
- package/server/register-model.js +12 -0
- package/server/register-plugin.d.ts +2 -0
- package/server/register-plugin.js +13 -0
- package/server/register-route.d.ts +3 -0
- package/server/register-route.js +74 -0
- package/server/schemas.d.ts +3 -0
- package/server/schemas.js +30 -0
- package/server/swagger.d.ts +3 -0
- package/server/swagger.js +122 -0
- package/storage/file-route.d.ts +2 -0
- package/storage/file-route.js +39 -0
- package/storage/file-schema.d.ts +9 -0
- package/storage/file-schema.js +42 -0
- package/storage/file-service.d.ts +81 -0
- package/storage/file-service.js +384 -0
- package/storage/filesystem-storage.d.ts +10 -0
- package/storage/filesystem-storage.js +128 -0
- package/storage/index.d.ts +2 -0
- package/storage/index.js +18 -0
- package/storage/resources/file/model.d.ts +2 -0
- package/storage/resources/file/model.js +75 -0
- package/types/application-context.d.ts +20 -0
- package/types/application-context.js +2 -0
- package/types/auth.d.ts +31 -0
- package/types/auth.js +2 -0
- package/types/fastify-extensions.d.ts +24 -0
- package/types/fastify-extensions.js +4 -0
- package/types/generated.d.ts +193 -0
- package/types/generated.js +3 -0
- package/types/index.d.ts +4 -0
- package/types/index.js +20 -0
- package/types/server.d.ts +4 -0
- package/types/server.js +2 -0
- package/utils/export-util.d.ts +8 -0
- package/utils/export-util.js +25 -0
- package/utils/file-util.d.ts +64 -0
- package/utils/file-util.js +141 -0
- package/utils/index.d.ts +3 -0
- package/utils/index.js +19 -0
- package/utils/schema-util.d.ts +20 -0
- package/utils/schema-util.js +37 -0
package/resources.d.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export { default as apiKey } from './security/resources/api-key/model';
|
|
2
|
+
export { default as oneTimeToken } from './security/resources/one-time-token/model';
|
|
3
|
+
export { default as role } from './security/resources/role/model';
|
|
4
|
+
export { default as permission } from './security/resources/permission/model';
|
|
5
|
+
export { default as seeder } from './seeder/resources/seeder/model';
|
|
6
|
+
export { default as file } from './storage/resources/file/model';
|
|
7
|
+
export { default as apiKeyService } from './security/resources/api-key/service';
|
|
8
|
+
export { default as apiKeyRoutes } from './security/resources/api-key/routes';
|
|
9
|
+
export { default as apiKeyPolicy } from './security/resources/api-key/policy';
|
package/resources.js
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.apiKeyPolicy = exports.apiKeyRoutes = exports.apiKeyService = exports.file = exports.seeder = exports.permission = exports.role = exports.oneTimeToken = exports.apiKey = void 0;
|
|
7
|
+
var model_1 = require("./security/resources/api-key/model");
|
|
8
|
+
Object.defineProperty(exports, "apiKey", { enumerable: true, get: function () { return __importDefault(model_1).default; } });
|
|
9
|
+
var model_2 = require("./security/resources/one-time-token/model");
|
|
10
|
+
Object.defineProperty(exports, "oneTimeToken", { enumerable: true, get: function () { return __importDefault(model_2).default; } });
|
|
11
|
+
var model_3 = require("./security/resources/role/model");
|
|
12
|
+
Object.defineProperty(exports, "role", { enumerable: true, get: function () { return __importDefault(model_3).default; } });
|
|
13
|
+
var model_4 = require("./security/resources/permission/model");
|
|
14
|
+
Object.defineProperty(exports, "permission", { enumerable: true, get: function () { return __importDefault(model_4).default; } });
|
|
15
|
+
var model_5 = require("./seeder/resources/seeder/model");
|
|
16
|
+
Object.defineProperty(exports, "seeder", { enumerable: true, get: function () { return __importDefault(model_5).default; } });
|
|
17
|
+
var model_6 = require("./storage/resources/file/model");
|
|
18
|
+
Object.defineProperty(exports, "file", { enumerable: true, get: function () { return __importDefault(model_6).default; } });
|
|
19
|
+
var service_1 = require("./security/resources/api-key/service");
|
|
20
|
+
Object.defineProperty(exports, "apiKeyService", { enumerable: true, get: function () { return __importDefault(service_1).default; } });
|
|
21
|
+
var routes_1 = require("./security/resources/api-key/routes");
|
|
22
|
+
Object.defineProperty(exports, "apiKeyRoutes", { enumerable: true, get: function () { return __importDefault(routes_1).default; } });
|
|
23
|
+
var policy_1 = require("./security/resources/api-key/policy");
|
|
24
|
+
Object.defineProperty(exports, "apiKeyPolicy", { enumerable: true, get: function () { return __importDefault(policy_1).default; } });
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { CronJob, CronJobParams } from 'cron';
|
|
2
|
+
import { Scheduler } from '@appweaver/common';
|
|
3
|
+
export declare class CronScheduler extends Scheduler<CronJob, CronJobParams> {
|
|
4
|
+
onDestroy(): Promise<void>;
|
|
5
|
+
startAll(): void;
|
|
6
|
+
stopAll(): Promise<void>;
|
|
7
|
+
addJob(jobParams: CronJobParams): string;
|
|
8
|
+
getJob(jobId: string): CronJob | undefined;
|
|
9
|
+
startJob(jobId: string): boolean;
|
|
10
|
+
stopJob(jobId: string): Promise<boolean>;
|
|
11
|
+
removeJob(jobId: string): Promise<boolean>;
|
|
12
|
+
}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CronScheduler = void 0;
|
|
4
|
+
const cron_1 = require("cron");
|
|
5
|
+
const common_1 = require("@appweaver/common");
|
|
6
|
+
class CronScheduler extends common_1.Scheduler {
|
|
7
|
+
/** @internal */
|
|
8
|
+
_jobs = {};
|
|
9
|
+
async onDestroy() {
|
|
10
|
+
await this.stopAll();
|
|
11
|
+
}
|
|
12
|
+
startAll() {
|
|
13
|
+
for (const job of Object.values(this._jobs)) {
|
|
14
|
+
if (!job.isActive) {
|
|
15
|
+
job.start();
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
async stopAll() {
|
|
20
|
+
const stopActions = [];
|
|
21
|
+
for (const job of Object.values(this._jobs)) {
|
|
22
|
+
if (!job.isActive) {
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
const stopAction = job.stop();
|
|
26
|
+
if (stopAction) {
|
|
27
|
+
stopActions.push(stopAction);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
await Promise.allSettled(stopActions);
|
|
31
|
+
}
|
|
32
|
+
addJob(jobParams) {
|
|
33
|
+
const jobId = (0, common_1.uuid)();
|
|
34
|
+
this._jobs[jobId] = cron_1.CronJob.from({
|
|
35
|
+
start: common_1.config.SCHEDULER_AUTO_START_JOB,
|
|
36
|
+
waitForCompletion: true,
|
|
37
|
+
errorHandler: (e) => {
|
|
38
|
+
common_1.logger.error(e, `Job handler error`);
|
|
39
|
+
},
|
|
40
|
+
...jobParams
|
|
41
|
+
});
|
|
42
|
+
return jobId;
|
|
43
|
+
}
|
|
44
|
+
getJob(jobId) {
|
|
45
|
+
return this._jobs[jobId];
|
|
46
|
+
}
|
|
47
|
+
startJob(jobId) {
|
|
48
|
+
const job = this._jobs[jobId];
|
|
49
|
+
if (!job) {
|
|
50
|
+
return false;
|
|
51
|
+
}
|
|
52
|
+
job.start();
|
|
53
|
+
return true;
|
|
54
|
+
}
|
|
55
|
+
async stopJob(jobId) {
|
|
56
|
+
const job = this._jobs[jobId];
|
|
57
|
+
if (!job) {
|
|
58
|
+
return false;
|
|
59
|
+
}
|
|
60
|
+
await job.stop();
|
|
61
|
+
return true;
|
|
62
|
+
}
|
|
63
|
+
async removeJob(jobId) {
|
|
64
|
+
const job = this._jobs[jobId];
|
|
65
|
+
if (!job) {
|
|
66
|
+
return false;
|
|
67
|
+
}
|
|
68
|
+
await job.stop();
|
|
69
|
+
delete this._jobs[jobId];
|
|
70
|
+
return true;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
exports.CronScheduler = CronScheduler;
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.accountRoutes = accountRoutes;
|
|
4
|
+
const common_1 = require("@appweaver/common");
|
|
5
|
+
const account_schema_1 = require("./account-schema");
|
|
6
|
+
const account_service_1 = require("./account-service");
|
|
7
|
+
const context_1 = require("../../context");
|
|
8
|
+
function accountRoutes(server) {
|
|
9
|
+
const { authenticate, currentUser, recaptcha } = server;
|
|
10
|
+
const accountService = (0, context_1.inject)(account_service_1.AccountService);
|
|
11
|
+
if (common_1.config.SECURITY_ACCOUNT_VERIFY_EMAIL_ENABLED) {
|
|
12
|
+
server.post('/send-verify-email', {
|
|
13
|
+
schema: account_schema_1.sendEmailVerificationSchema,
|
|
14
|
+
onRequest: authenticate(),
|
|
15
|
+
config: {
|
|
16
|
+
rateLimit: {
|
|
17
|
+
max: 10,
|
|
18
|
+
timeWindow: 900000 // 15 minutes
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
}, async (request, reply) => {
|
|
22
|
+
const authUser = currentUser();
|
|
23
|
+
const message = await accountService.sendEmailVerification(authUser, request.body.redirectToUrl, request.body.verificationType);
|
|
24
|
+
return reply.send({ message });
|
|
25
|
+
});
|
|
26
|
+
server.post('/verify-email', {
|
|
27
|
+
schema: account_schema_1.verifyEmailSchema,
|
|
28
|
+
config: {
|
|
29
|
+
rateLimit: {
|
|
30
|
+
max: 12
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}, async (request, reply) => {
|
|
34
|
+
const message = await accountService.verifyEmailAddress(request.body.token);
|
|
35
|
+
return reply.send({ message });
|
|
36
|
+
});
|
|
37
|
+
server.get('/verify-email-redirect', {
|
|
38
|
+
schema: account_schema_1.verifyEmailRedirectSchema,
|
|
39
|
+
config: {
|
|
40
|
+
rateLimit: {
|
|
41
|
+
max: 12
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}, async (request, reply) => {
|
|
45
|
+
const { redirectUrl, status, message } = await accountService.verifyEmailAddressRedirect(request.query.token);
|
|
46
|
+
return reply.redirect(`${redirectUrl}status=${status}&message=${message}`);
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
if (common_1.config.SECURITY_ACCOUNT_RESET_PASSWORD_ENABLED) {
|
|
50
|
+
server.post('/send-reset-password', {
|
|
51
|
+
schema: account_schema_1.sendResetPasswordSchema,
|
|
52
|
+
onRequest: recaptcha,
|
|
53
|
+
config: {
|
|
54
|
+
rateLimit: {
|
|
55
|
+
max: 10,
|
|
56
|
+
timeWindow: 900000 // 15 minutes
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}, async (request, reply) => {
|
|
60
|
+
const message = await accountService.sendResetPassword(request.body.email, request.body.redirectToUrl);
|
|
61
|
+
return reply.send({ message });
|
|
62
|
+
});
|
|
63
|
+
server.post('/reset-password', {
|
|
64
|
+
schema: account_schema_1.resetPasswordSchema,
|
|
65
|
+
onRequest: recaptcha,
|
|
66
|
+
config: {
|
|
67
|
+
rateLimit: {
|
|
68
|
+
max: 12
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}, async (request, reply) => {
|
|
72
|
+
const message = await accountService.resetPassword(request.body.token, request.body.newPassword);
|
|
73
|
+
return reply.send({ message });
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
if (common_1.config.SECURITY_ACCOUNT_2FA_ENABLED) {
|
|
77
|
+
server.post('/send-2fa-code', {
|
|
78
|
+
schema: account_schema_1.send2FACodeSchema,
|
|
79
|
+
onRequest: authenticate([common_1.AuthType.Jwt]),
|
|
80
|
+
config: {
|
|
81
|
+
rateLimit: {
|
|
82
|
+
max: 10,
|
|
83
|
+
timeWindow: 900000 // 15 minutes
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}, async (request, reply) => {
|
|
87
|
+
const authUser = currentUser();
|
|
88
|
+
const response = await accountService.send2FACode(authUser, request.body.purpose);
|
|
89
|
+
return reply.send(response);
|
|
90
|
+
});
|
|
91
|
+
server.post('/verify-2fa-code', {
|
|
92
|
+
schema: account_schema_1.verify2FACodeSchema,
|
|
93
|
+
onRequest: authenticate([common_1.AuthType.Jwt]),
|
|
94
|
+
config: {
|
|
95
|
+
rateLimit: {
|
|
96
|
+
max: 12
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}, async (request, reply) => {
|
|
100
|
+
const response = await accountService.verify2FACode(request.body.challengeId, request.body.code);
|
|
101
|
+
return reply.send(response);
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
}
|
|
@@ -0,0 +1,290 @@
|
|
|
1
|
+
import { VerificationType } from './account-service';
|
|
2
|
+
export declare const AccountSendEmailVerificationRequest: import("@sinclair/typebox").TObject<{
|
|
3
|
+
redirectToUrl: import("@sinclair/typebox").TString;
|
|
4
|
+
verificationType: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnsafe<VerificationType>>;
|
|
5
|
+
}>;
|
|
6
|
+
export declare const AccountEmailVerificationRequest: import("@sinclair/typebox").TObject<{
|
|
7
|
+
token: import("@sinclair/typebox").TString;
|
|
8
|
+
}>;
|
|
9
|
+
export declare const AccountSendResetPasswordRequest: import("@sinclair/typebox").TObject<{
|
|
10
|
+
redirectToUrl: import("@sinclair/typebox").TString;
|
|
11
|
+
email: import("@sinclair/typebox").TString;
|
|
12
|
+
}>;
|
|
13
|
+
export declare const AccountResetPasswordRequest: import("@sinclair/typebox").TObject<{
|
|
14
|
+
token: import("@sinclair/typebox").TString;
|
|
15
|
+
newPassword: import("@sinclair/typebox").TString;
|
|
16
|
+
}>;
|
|
17
|
+
export declare const AccountSend2FACodeRequest: import("@sinclair/typebox").TObject<{
|
|
18
|
+
purpose: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
19
|
+
}>;
|
|
20
|
+
export declare const AccountSend2FAResponse: import("@sinclair/typebox").TObject<{
|
|
21
|
+
challengeId: import("@sinclair/typebox").TString;
|
|
22
|
+
expiresIn: import("@sinclair/typebox").TInteger;
|
|
23
|
+
}>;
|
|
24
|
+
export declare const AccountVerify2FARequest: import("@sinclair/typebox").TObject<{
|
|
25
|
+
challengeId: import("@sinclair/typebox").TString;
|
|
26
|
+
code: import("@sinclair/typebox").TString;
|
|
27
|
+
}>;
|
|
28
|
+
export declare const AccountVerify2FAResponse: import("@sinclair/typebox").TObject<{
|
|
29
|
+
token: import("@sinclair/typebox").TString;
|
|
30
|
+
expiresIn: import("@sinclair/typebox").TInteger;
|
|
31
|
+
}>;
|
|
32
|
+
export declare const AccountStatusResponse: import("@sinclair/typebox").TObject<{
|
|
33
|
+
message: import("@sinclair/typebox").TString;
|
|
34
|
+
}>;
|
|
35
|
+
export declare const sendEmailVerificationSchema: {
|
|
36
|
+
tags: string[];
|
|
37
|
+
security: any[];
|
|
38
|
+
summary: string;
|
|
39
|
+
description: string;
|
|
40
|
+
response: {
|
|
41
|
+
'4xx': {
|
|
42
|
+
description: string;
|
|
43
|
+
content: {
|
|
44
|
+
'application/json': {
|
|
45
|
+
schema: import("@sinclair/typebox").TObject<{
|
|
46
|
+
errorCode: import("@sinclair/typebox").TInteger;
|
|
47
|
+
message: import("@sinclair/typebox").TString;
|
|
48
|
+
}>;
|
|
49
|
+
};
|
|
50
|
+
};
|
|
51
|
+
};
|
|
52
|
+
'5xx': {
|
|
53
|
+
description: string;
|
|
54
|
+
content: {
|
|
55
|
+
'application/json': {
|
|
56
|
+
schema: import("@sinclair/typebox").TObject<{
|
|
57
|
+
errorCode: import("@sinclair/typebox").TInteger;
|
|
58
|
+
message: import("@sinclair/typebox").TString;
|
|
59
|
+
}>;
|
|
60
|
+
};
|
|
61
|
+
};
|
|
62
|
+
};
|
|
63
|
+
200: import("@sinclair/typebox").TObject<{
|
|
64
|
+
message: import("@sinclair/typebox").TString;
|
|
65
|
+
}>;
|
|
66
|
+
};
|
|
67
|
+
body: import("@sinclair/typebox").TObject<{
|
|
68
|
+
redirectToUrl: import("@sinclair/typebox").TString;
|
|
69
|
+
verificationType: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnsafe<VerificationType>>;
|
|
70
|
+
}>;
|
|
71
|
+
};
|
|
72
|
+
export declare const verifyEmailSchema: {
|
|
73
|
+
tags: string[];
|
|
74
|
+
summary: string;
|
|
75
|
+
description: string;
|
|
76
|
+
response: {
|
|
77
|
+
'4xx': {
|
|
78
|
+
description: string;
|
|
79
|
+
content: {
|
|
80
|
+
'application/json': {
|
|
81
|
+
schema: import("@sinclair/typebox").TObject<{
|
|
82
|
+
errorCode: import("@sinclair/typebox").TInteger;
|
|
83
|
+
message: import("@sinclair/typebox").TString;
|
|
84
|
+
}>;
|
|
85
|
+
};
|
|
86
|
+
};
|
|
87
|
+
};
|
|
88
|
+
'5xx': {
|
|
89
|
+
description: string;
|
|
90
|
+
content: {
|
|
91
|
+
'application/json': {
|
|
92
|
+
schema: import("@sinclair/typebox").TObject<{
|
|
93
|
+
errorCode: import("@sinclair/typebox").TInteger;
|
|
94
|
+
message: import("@sinclair/typebox").TString;
|
|
95
|
+
}>;
|
|
96
|
+
};
|
|
97
|
+
};
|
|
98
|
+
};
|
|
99
|
+
200: import("@sinclair/typebox").TObject<{
|
|
100
|
+
message: import("@sinclair/typebox").TString;
|
|
101
|
+
}>;
|
|
102
|
+
};
|
|
103
|
+
body: import("@sinclair/typebox").TObject<{
|
|
104
|
+
token: import("@sinclair/typebox").TString;
|
|
105
|
+
}>;
|
|
106
|
+
};
|
|
107
|
+
export declare const verifyEmailRedirectSchema: {
|
|
108
|
+
tags: string[];
|
|
109
|
+
summary: string;
|
|
110
|
+
description: string;
|
|
111
|
+
querystring: import("@sinclair/typebox").TObject<{
|
|
112
|
+
token: import("@sinclair/typebox").TString;
|
|
113
|
+
}>;
|
|
114
|
+
response: {
|
|
115
|
+
'4xx': {
|
|
116
|
+
description: string;
|
|
117
|
+
content: {
|
|
118
|
+
'application/json': {
|
|
119
|
+
schema: import("@sinclair/typebox").TObject<{
|
|
120
|
+
errorCode: import("@sinclair/typebox").TInteger;
|
|
121
|
+
message: import("@sinclair/typebox").TString;
|
|
122
|
+
}>;
|
|
123
|
+
};
|
|
124
|
+
};
|
|
125
|
+
};
|
|
126
|
+
'5xx': {
|
|
127
|
+
description: string;
|
|
128
|
+
content: {
|
|
129
|
+
'application/json': {
|
|
130
|
+
schema: import("@sinclair/typebox").TObject<{
|
|
131
|
+
errorCode: import("@sinclair/typebox").TInteger;
|
|
132
|
+
message: import("@sinclair/typebox").TString;
|
|
133
|
+
}>;
|
|
134
|
+
};
|
|
135
|
+
};
|
|
136
|
+
};
|
|
137
|
+
302: {
|
|
138
|
+
description: string;
|
|
139
|
+
};
|
|
140
|
+
};
|
|
141
|
+
};
|
|
142
|
+
export declare const sendResetPasswordSchema: {
|
|
143
|
+
tags: string[];
|
|
144
|
+
header: import("@sinclair/typebox").TObject<import("@sinclair/typebox").TProperties>;
|
|
145
|
+
summary: string;
|
|
146
|
+
description: string;
|
|
147
|
+
response: {
|
|
148
|
+
'4xx': {
|
|
149
|
+
description: string;
|
|
150
|
+
content: {
|
|
151
|
+
'application/json': {
|
|
152
|
+
schema: import("@sinclair/typebox").TObject<{
|
|
153
|
+
errorCode: import("@sinclair/typebox").TInteger;
|
|
154
|
+
message: import("@sinclair/typebox").TString;
|
|
155
|
+
}>;
|
|
156
|
+
};
|
|
157
|
+
};
|
|
158
|
+
};
|
|
159
|
+
'5xx': {
|
|
160
|
+
description: string;
|
|
161
|
+
content: {
|
|
162
|
+
'application/json': {
|
|
163
|
+
schema: import("@sinclair/typebox").TObject<{
|
|
164
|
+
errorCode: import("@sinclair/typebox").TInteger;
|
|
165
|
+
message: import("@sinclair/typebox").TString;
|
|
166
|
+
}>;
|
|
167
|
+
};
|
|
168
|
+
};
|
|
169
|
+
};
|
|
170
|
+
200: import("@sinclair/typebox").TObject<{
|
|
171
|
+
message: import("@sinclair/typebox").TString;
|
|
172
|
+
}>;
|
|
173
|
+
};
|
|
174
|
+
body: import("@sinclair/typebox").TObject<{
|
|
175
|
+
redirectToUrl: import("@sinclair/typebox").TString;
|
|
176
|
+
email: import("@sinclair/typebox").TString;
|
|
177
|
+
}>;
|
|
178
|
+
};
|
|
179
|
+
export declare const resetPasswordSchema: {
|
|
180
|
+
tags: string[];
|
|
181
|
+
header: import("@sinclair/typebox").TObject<import("@sinclair/typebox").TProperties>;
|
|
182
|
+
summary: string;
|
|
183
|
+
description: string;
|
|
184
|
+
response: {
|
|
185
|
+
'4xx': {
|
|
186
|
+
description: string;
|
|
187
|
+
content: {
|
|
188
|
+
'application/json': {
|
|
189
|
+
schema: import("@sinclair/typebox").TObject<{
|
|
190
|
+
errorCode: import("@sinclair/typebox").TInteger;
|
|
191
|
+
message: import("@sinclair/typebox").TString;
|
|
192
|
+
}>;
|
|
193
|
+
};
|
|
194
|
+
};
|
|
195
|
+
};
|
|
196
|
+
'5xx': {
|
|
197
|
+
description: string;
|
|
198
|
+
content: {
|
|
199
|
+
'application/json': {
|
|
200
|
+
schema: import("@sinclair/typebox").TObject<{
|
|
201
|
+
errorCode: import("@sinclair/typebox").TInteger;
|
|
202
|
+
message: import("@sinclair/typebox").TString;
|
|
203
|
+
}>;
|
|
204
|
+
};
|
|
205
|
+
};
|
|
206
|
+
};
|
|
207
|
+
200: import("@sinclair/typebox").TObject<{
|
|
208
|
+
message: import("@sinclair/typebox").TString;
|
|
209
|
+
}>;
|
|
210
|
+
};
|
|
211
|
+
body: import("@sinclair/typebox").TObject<{
|
|
212
|
+
token: import("@sinclair/typebox").TString;
|
|
213
|
+
newPassword: import("@sinclair/typebox").TString;
|
|
214
|
+
}>;
|
|
215
|
+
};
|
|
216
|
+
export declare const send2FACodeSchema: {
|
|
217
|
+
tags: string[];
|
|
218
|
+
security: any[];
|
|
219
|
+
summary: string;
|
|
220
|
+
description: string;
|
|
221
|
+
response: {
|
|
222
|
+
'4xx': {
|
|
223
|
+
description: string;
|
|
224
|
+
content: {
|
|
225
|
+
'application/json': {
|
|
226
|
+
schema: import("@sinclair/typebox").TObject<{
|
|
227
|
+
errorCode: import("@sinclair/typebox").TInteger;
|
|
228
|
+
message: import("@sinclair/typebox").TString;
|
|
229
|
+
}>;
|
|
230
|
+
};
|
|
231
|
+
};
|
|
232
|
+
};
|
|
233
|
+
'5xx': {
|
|
234
|
+
description: string;
|
|
235
|
+
content: {
|
|
236
|
+
'application/json': {
|
|
237
|
+
schema: import("@sinclair/typebox").TObject<{
|
|
238
|
+
errorCode: import("@sinclair/typebox").TInteger;
|
|
239
|
+
message: import("@sinclair/typebox").TString;
|
|
240
|
+
}>;
|
|
241
|
+
};
|
|
242
|
+
};
|
|
243
|
+
};
|
|
244
|
+
200: import("@sinclair/typebox").TObject<{
|
|
245
|
+
challengeId: import("@sinclair/typebox").TString;
|
|
246
|
+
expiresIn: import("@sinclair/typebox").TInteger;
|
|
247
|
+
}>;
|
|
248
|
+
};
|
|
249
|
+
body: import("@sinclair/typebox").TObject<{
|
|
250
|
+
purpose: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
251
|
+
}>;
|
|
252
|
+
};
|
|
253
|
+
export declare const verify2FACodeSchema: {
|
|
254
|
+
tags: string[];
|
|
255
|
+
security: any[];
|
|
256
|
+
summary: string;
|
|
257
|
+
description: string;
|
|
258
|
+
response: {
|
|
259
|
+
'4xx': {
|
|
260
|
+
description: string;
|
|
261
|
+
content: {
|
|
262
|
+
'application/json': {
|
|
263
|
+
schema: import("@sinclair/typebox").TObject<{
|
|
264
|
+
errorCode: import("@sinclair/typebox").TInteger;
|
|
265
|
+
message: import("@sinclair/typebox").TString;
|
|
266
|
+
}>;
|
|
267
|
+
};
|
|
268
|
+
};
|
|
269
|
+
};
|
|
270
|
+
'5xx': {
|
|
271
|
+
description: string;
|
|
272
|
+
content: {
|
|
273
|
+
'application/json': {
|
|
274
|
+
schema: import("@sinclair/typebox").TObject<{
|
|
275
|
+
errorCode: import("@sinclair/typebox").TInteger;
|
|
276
|
+
message: import("@sinclair/typebox").TString;
|
|
277
|
+
}>;
|
|
278
|
+
};
|
|
279
|
+
};
|
|
280
|
+
};
|
|
281
|
+
200: import("@sinclair/typebox").TObject<{
|
|
282
|
+
token: import("@sinclair/typebox").TString;
|
|
283
|
+
expiresIn: import("@sinclair/typebox").TInteger;
|
|
284
|
+
}>;
|
|
285
|
+
};
|
|
286
|
+
body: import("@sinclair/typebox").TObject<{
|
|
287
|
+
challengeId: import("@sinclair/typebox").TString;
|
|
288
|
+
code: import("@sinclair/typebox").TString;
|
|
289
|
+
}>;
|
|
290
|
+
};
|