@ruiapp/rapid-core 0.5.11 → 0.5.13
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 +7 -7
- package/dist/facilities/cache/CacheFacilityTypes.d.ts +4 -2
- package/dist/facilities/cache/MemoryCache.d.ts +3 -1
- package/dist/index.d.ts +4 -0
- package/dist/index.js +131 -72
- package/dist/utilities/entityUtility.d.ts +1 -0
- package/dist/utilities/passwordUtility.d.ts +14 -0
- package/package.json +2 -2
- package/rollup.config.js +16 -16
- package/src/bootstrapApplicationConfig.ts +638 -638
- package/src/core/actionHandler.ts +22 -22
- package/src/core/eventManager.ts +20 -20
- package/src/core/facility.ts +7 -7
- package/src/core/http/formDataParser.ts +89 -89
- package/src/core/http-types.ts +4 -4
- package/src/core/pluginManager.ts +175 -175
- package/src/core/providers/runtimeProvider.ts +5 -5
- package/src/core/request.ts +95 -95
- package/src/core/response.ts +79 -79
- package/src/core/routeContext.ts +100 -100
- package/src/core/routesBuilder.ts +88 -88
- package/src/core/server.ts +145 -145
- package/src/dataAccess/columnTypeMapper.ts +22 -22
- package/src/dataAccess/dataAccessTypes.ts +163 -163
- package/src/dataAccess/dataAccessor.ts +135 -135
- package/src/dataAccess/entityManager.ts +1910 -1910
- package/src/dataAccess/entityMapper.ts +100 -100
- package/src/dataAccess/propertyMapper.ts +28 -28
- package/src/deno-std/assert/assert.ts +9 -9
- package/src/deno-std/assert/assertion_error.ts +7 -7
- package/src/deno-std/datetime/to_imf.ts +32 -32
- package/src/deno-std/encoding/base64.ts +141 -141
- package/src/deno-std/http/cookie.ts +372 -372
- package/src/facilities/cache/CacheFacilityTypes.ts +29 -27
- package/src/facilities/cache/CacheFactory.ts +31 -31
- package/src/facilities/cache/MemoryCache.ts +58 -42
- package/src/facilities/cache/MemoryCacheProvider.ts +15 -15
- package/src/facilities/log/LogFacility.ts +35 -35
- package/src/helpers/entityHelpers.ts +76 -76
- package/src/helpers/filterHelper.ts +148 -148
- package/src/helpers/inputHelper.ts +11 -11
- package/src/helpers/metaHelper.ts +104 -104
- package/src/helpers/runCollectionEntityActionHandler.ts +57 -57
- package/src/index.ts +67 -63
- package/src/plugins/auth/AuthPlugin.ts +93 -93
- package/src/plugins/auth/actionHandlers/changePassword.ts +60 -61
- package/src/plugins/auth/actionHandlers/createSession.ts +68 -68
- package/src/plugins/auth/actionHandlers/deleteSession.ts +18 -18
- package/src/plugins/auth/actionHandlers/getMyProfile.ts +35 -35
- package/src/plugins/auth/actionHandlers/index.ts +8 -8
- package/src/plugins/auth/actionHandlers/resetPassword.ts +44 -45
- package/src/plugins/auth/models/AccessToken.ts +56 -56
- package/src/plugins/auth/models/index.ts +3 -3
- package/src/plugins/auth/routes/changePassword.ts +15 -15
- package/src/plugins/auth/routes/getMyProfile.ts +15 -15
- package/src/plugins/auth/routes/index.ts +7 -7
- package/src/plugins/auth/routes/resetPassword.ts +15 -15
- package/src/plugins/auth/routes/signin.ts +15 -15
- package/src/plugins/auth/routes/signout.ts +15 -15
- package/src/plugins/auth/services/AuthService.ts +39 -39
- package/src/plugins/cronJob/CronJobPlugin.ts +112 -112
- package/src/plugins/cronJob/CronJobPluginTypes.ts +49 -49
- package/src/plugins/cronJob/actionHandlers/index.ts +4 -4
- package/src/plugins/cronJob/actionHandlers/runCronJob.ts +29 -29
- package/src/plugins/cronJob/routes/index.ts +3 -3
- package/src/plugins/cronJob/routes/runCronJob.ts +15 -15
- package/src/plugins/dataManage/DataManagePlugin.ts +163 -163
- package/src/plugins/dataManage/actionHandlers/addEntityRelations.ts +15 -15
- package/src/plugins/dataManage/actionHandlers/countCollectionEntities.ts +17 -17
- package/src/plugins/dataManage/actionHandlers/createCollectionEntitiesBatch.ts +81 -81
- package/src/plugins/dataManage/actionHandlers/createCollectionEntity.ts +20 -20
- package/src/plugins/dataManage/actionHandlers/deleteCollectionEntities.ts +45 -45
- package/src/plugins/dataManage/actionHandlers/deleteCollectionEntityById.ts +20 -20
- package/src/plugins/dataManage/actionHandlers/findCollectionEntities.ts +27 -27
- package/src/plugins/dataManage/actionHandlers/findCollectionEntityById.ts +30 -30
- package/src/plugins/dataManage/actionHandlers/queryDatabase.ts +22 -22
- package/src/plugins/dataManage/actionHandlers/removeEntityRelations.ts +15 -15
- package/src/plugins/dataManage/actionHandlers/updateCollectionEntityById.ts +38 -38
- package/src/plugins/entityAccessControl/EntityAccessControlPlugin.ts +146 -146
- package/src/plugins/fileManage/FileManagePlugin.ts +52 -52
- package/src/plugins/fileManage/actionHandlers/downloadDocument.ts +65 -65
- package/src/plugins/fileManage/actionHandlers/downloadFile.ts +44 -44
- package/src/plugins/fileManage/actionHandlers/uploadFile.ts +33 -33
- package/src/plugins/fileManage/routes/downloadDocument.ts +15 -15
- package/src/plugins/fileManage/routes/downloadFile.ts +15 -15
- package/src/plugins/fileManage/routes/index.ts +5 -5
- package/src/plugins/fileManage/routes/uploadFile.ts +15 -15
- package/src/plugins/license/LicensePlugin.ts +79 -79
- package/src/plugins/license/LicensePluginTypes.ts +95 -95
- package/src/plugins/license/LicenseService.ts +118 -118
- package/src/plugins/license/actionHandlers/getLicense.ts +18 -18
- package/src/plugins/license/actionHandlers/index.ts +4 -4
- package/src/plugins/license/helpers/certHelper.ts +21 -21
- package/src/plugins/license/helpers/cryptoHelper.ts +47 -47
- package/src/plugins/license/models/index.ts +1 -1
- package/src/plugins/license/routes/getLicense.ts +15 -15
- package/src/plugins/license/routes/index.ts +3 -3
- package/src/plugins/mail/MailPlugin.ts +74 -74
- package/src/plugins/mail/MailPluginTypes.ts +27 -27
- package/src/plugins/mail/MailService.ts +38 -38
- package/src/plugins/mail/actionHandlers/index.ts +3 -3
- package/src/plugins/mail/models/index.ts +1 -1
- package/src/plugins/mail/routes/index.ts +1 -1
- package/src/plugins/metaManage/MetaManagePlugin.ts +530 -530
- package/src/plugins/metaManage/actionHandlers/getMetaModelDetail.ts +10 -10
- package/src/plugins/metaManage/actionHandlers/listMetaModels.ts +9 -9
- package/src/plugins/metaManage/actionHandlers/listMetaRoutes.ts +9 -9
- package/src/plugins/notification/NotificationPlugin.ts +68 -68
- package/src/plugins/notification/NotificationPluginTypes.ts +13 -13
- package/src/plugins/notification/NotificationService.ts +25 -25
- package/src/plugins/notification/actionHandlers/index.ts +3 -3
- package/src/plugins/notification/models/Notification.ts +60 -60
- package/src/plugins/notification/models/index.ts +3 -3
- package/src/plugins/notification/routes/index.ts +1 -1
- package/src/plugins/routeManage/RouteManagePlugin.ts +62 -62
- package/src/plugins/routeManage/actionHandlers/httpProxy.ts +13 -13
- package/src/plugins/sequence/SequencePlugin.ts +146 -146
- package/src/plugins/sequence/SequencePluginTypes.ts +69 -69
- package/src/plugins/sequence/SequenceService.ts +92 -92
- package/src/plugins/sequence/actionHandlers/generateSn.ts +32 -32
- package/src/plugins/sequence/actionHandlers/index.ts +4 -4
- package/src/plugins/sequence/models/SequenceAutoIncrementRecord.ts +49 -49
- package/src/plugins/sequence/models/SequenceRule.ts +42 -42
- package/src/plugins/sequence/models/index.ts +4 -4
- package/src/plugins/sequence/routes/generateSn.ts +15 -15
- package/src/plugins/sequence/routes/index.ts +3 -3
- package/src/plugins/sequence/segment-utility.ts +11 -11
- package/src/plugins/sequence/segments/autoIncrement.ts +90 -90
- package/src/plugins/sequence/segments/dayOfMonth.ts +19 -19
- package/src/plugins/sequence/segments/index.ts +9 -9
- package/src/plugins/sequence/segments/literal.ts +16 -16
- package/src/plugins/sequence/segments/month.ts +19 -19
- package/src/plugins/sequence/segments/parameter.ts +20 -20
- package/src/plugins/sequence/segments/year.ts +19 -19
- package/src/plugins/serverOperation/ServerOperationPlugin.ts +91 -91
- package/src/plugins/serverOperation/ServerOperationPluginTypes.ts +15 -15
- package/src/plugins/serverOperation/actionHandlers/index.ts +4 -4
- package/src/plugins/serverOperation/actionHandlers/runServerOperation.ts +15 -15
- package/src/plugins/setting/SettingPlugin.ts +68 -68
- package/src/plugins/setting/SettingPluginTypes.ts +37 -37
- package/src/plugins/setting/SettingService.ts +213 -213
- package/src/plugins/setting/actionHandlers/getSystemSettingValues.ts +30 -30
- package/src/plugins/setting/actionHandlers/getUserSettingValues.ts +38 -38
- package/src/plugins/setting/actionHandlers/index.ts +6 -6
- package/src/plugins/setting/actionHandlers/setSystemSettingValues.ts +30 -30
- package/src/plugins/setting/models/SystemSettingGroupSetting.ts +57 -57
- package/src/plugins/setting/models/SystemSettingItem.ts +48 -48
- package/src/plugins/setting/models/SystemSettingItemSetting.ts +73 -73
- package/src/plugins/setting/models/UserSettingGroupSetting.ts +57 -57
- package/src/plugins/setting/models/UserSettingItem.ts +55 -55
- package/src/plugins/setting/models/UserSettingItemSetting.ts +73 -73
- package/src/plugins/setting/models/index.ts +8 -8
- package/src/plugins/setting/routes/getSystemSettingValues.ts +15 -15
- package/src/plugins/setting/routes/getUserSettingValues.ts +15 -15
- package/src/plugins/setting/routes/index.ts +5 -5
- package/src/plugins/setting/routes/setSystemSettingValues.ts +15 -15
- package/src/plugins/stateMachine/StateMachinePlugin.ts +196 -196
- package/src/plugins/stateMachine/StateMachinePluginTypes.ts +48 -48
- package/src/plugins/stateMachine/actionHandlers/index.ts +4 -4
- package/src/plugins/stateMachine/actionHandlers/sendStateMachineEvent.ts +54 -54
- package/src/plugins/stateMachine/models/StateMachine.ts +42 -42
- package/src/plugins/stateMachine/models/index.ts +3 -3
- package/src/plugins/stateMachine/routes/index.ts +3 -3
- package/src/plugins/stateMachine/routes/sendStateMachineEvent.ts +15 -15
- package/src/plugins/stateMachine/stateMachineHelper.ts +36 -36
- package/src/plugins/webhooks/WebhooksPlugin.ts +148 -148
- package/src/plugins/webhooks/pluginConfig.ts +75 -75
- package/src/polyfill.ts +5 -5
- package/src/proxy/mod.ts +38 -38
- package/src/proxy/types.ts +21 -21
- package/src/queryBuilder/index.ts +1 -1
- package/src/queryBuilder/queryBuilder.ts +668 -668
- package/src/server.ts +480 -480
- package/src/types.ts +722 -722
- package/src/utilities/accessControlUtility.ts +33 -33
- package/src/utilities/entityUtility.ts +18 -0
- package/src/utilities/errorUtility.ts +15 -15
- package/src/utilities/fsUtility.ts +61 -61
- package/src/utilities/httpUtility.ts +19 -19
- package/src/utilities/jwtUtility.ts +26 -26
- package/src/utilities/passwordUtility.ts +26 -0
- package/src/utilities/pathUtility.ts +14 -14
- package/src/utilities/timeUtility.ts +9 -9
- package/src/utilities/typeUtility.ts +15 -15
- package/tsconfig.json +19 -19
|
@@ -1,33 +1,33 @@
|
|
|
1
|
-
import { find } from "lodash";
|
|
2
|
-
|
|
3
|
-
export type PermissionCheckPolicy = {
|
|
4
|
-
any?: string[];
|
|
5
|
-
all?: string[];
|
|
6
|
-
};
|
|
7
|
-
|
|
8
|
-
export function isAccessAllowed(policy: PermissionCheckPolicy, allowedActions: string[]): boolean {
|
|
9
|
-
let isAnyCheckPassed = true;
|
|
10
|
-
let isAllCheckPassed = true;
|
|
11
|
-
|
|
12
|
-
if (policy.any) {
|
|
13
|
-
isAnyCheckPassed = false;
|
|
14
|
-
for (const action of policy.any) {
|
|
15
|
-
if (find(allowedActions, (item) => item === action) != null) {
|
|
16
|
-
isAnyCheckPassed = true;
|
|
17
|
-
break;
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
if (policy.all) {
|
|
23
|
-
isAllCheckPassed = true;
|
|
24
|
-
for (const action of policy.all) {
|
|
25
|
-
if (find(allowedActions, (item) => item === action) == null) {
|
|
26
|
-
isAnyCheckPassed = false;
|
|
27
|
-
break;
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
return isAnyCheckPassed && isAllCheckPassed;
|
|
33
|
-
}
|
|
1
|
+
import { find } from "lodash";
|
|
2
|
+
|
|
3
|
+
export type PermissionCheckPolicy = {
|
|
4
|
+
any?: string[];
|
|
5
|
+
all?: string[];
|
|
6
|
+
};
|
|
7
|
+
|
|
8
|
+
export function isAccessAllowed(policy: PermissionCheckPolicy, allowedActions: string[]): boolean {
|
|
9
|
+
let isAnyCheckPassed = true;
|
|
10
|
+
let isAllCheckPassed = true;
|
|
11
|
+
|
|
12
|
+
if (policy.any) {
|
|
13
|
+
isAnyCheckPassed = false;
|
|
14
|
+
for (const action of policy.any) {
|
|
15
|
+
if (find(allowedActions, (item) => item === action) != null) {
|
|
16
|
+
isAnyCheckPassed = true;
|
|
17
|
+
break;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
if (policy.all) {
|
|
23
|
+
isAllCheckPassed = true;
|
|
24
|
+
for (const action of policy.all) {
|
|
25
|
+
if (find(allowedActions, (item) => item === action) == null) {
|
|
26
|
+
isAnyCheckPassed = false;
|
|
27
|
+
break;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
return isAnyCheckPassed && isAllCheckPassed;
|
|
33
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { isObject } from "lodash";
|
|
2
|
+
|
|
3
|
+
export function getEntityRelationTargetId(entity: Record<string, any>, propName: string, targetColumnName?: string) {
|
|
4
|
+
if (!entity) {
|
|
5
|
+
throw new Error(`"entity" parameter is required.`);
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
let targetId: number | { id?: number } = entity[propName];
|
|
9
|
+
if (!targetId && targetColumnName) {
|
|
10
|
+
targetId = entity[targetColumnName];
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
if (isObject(targetId)) {
|
|
14
|
+
return targetId.id;
|
|
15
|
+
} else {
|
|
16
|
+
return targetId;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
export function newError(type: string, message?: string, cause?: any) {
|
|
2
|
-
const error = new Error(message, {
|
|
3
|
-
cause,
|
|
4
|
-
});
|
|
5
|
-
error.name = type;
|
|
6
|
-
return error;
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
export function newDatabaseError(message?: string, cause?: any) {
|
|
10
|
-
return newError("DatabaseError", message, cause);
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
export function newEntityOperationError(message?: string, cause?: any) {
|
|
14
|
-
return newError("EntityOperationError", message, cause);
|
|
15
|
-
}
|
|
1
|
+
export function newError(type: string, message?: string, cause?: any) {
|
|
2
|
+
const error = new Error(message, {
|
|
3
|
+
cause,
|
|
4
|
+
});
|
|
5
|
+
error.name = type;
|
|
6
|
+
return error;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export function newDatabaseError(message?: string, cause?: any) {
|
|
10
|
+
return newError("DatabaseError", message, cause);
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export function newEntityOperationError(message?: string, cause?: any) {
|
|
14
|
+
return newError("EntityOperationError", message, cause);
|
|
15
|
+
}
|
|
@@ -1,61 +1,61 @@
|
|
|
1
|
-
import fs from "fs";
|
|
2
|
-
|
|
3
|
-
export async function readFile(path: string): Promise<Buffer> {
|
|
4
|
-
return new Promise((resolve, reject) => {
|
|
5
|
-
fs.readFile(path, null, (err, data) => {
|
|
6
|
-
if (err) {
|
|
7
|
-
reject(err);
|
|
8
|
-
} else {
|
|
9
|
-
resolve(data);
|
|
10
|
-
}
|
|
11
|
-
});
|
|
12
|
-
});
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
export async function copyFile(fromPath: string, toPath: string): Promise<void> {
|
|
16
|
-
return new Promise((resolve, reject) => {
|
|
17
|
-
fs.copyFile(fromPath, toPath, (err) => {
|
|
18
|
-
if (err) {
|
|
19
|
-
reject(err);
|
|
20
|
-
} else {
|
|
21
|
-
resolve();
|
|
22
|
-
}
|
|
23
|
-
});
|
|
24
|
-
});
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
export async function removeFile(path: string): Promise<void> {
|
|
28
|
-
return new Promise((resolve, reject) => {
|
|
29
|
-
fs.rm(path, (err) => {
|
|
30
|
-
if (err) {
|
|
31
|
-
reject(err);
|
|
32
|
-
} else {
|
|
33
|
-
resolve();
|
|
34
|
-
}
|
|
35
|
-
});
|
|
36
|
-
});
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
export async function moveFile(fromPath: string, toPath: string): Promise<void> {
|
|
40
|
-
return new Promise((resolve, reject) => {
|
|
41
|
-
fs.rename(fromPath, toPath, (err) => {
|
|
42
|
-
if (err) {
|
|
43
|
-
reject(err);
|
|
44
|
-
} else {
|
|
45
|
-
resolve();
|
|
46
|
-
}
|
|
47
|
-
});
|
|
48
|
-
});
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
export async function appendFile(path: string, data: ArrayBuffer): Promise<void> {
|
|
52
|
-
return new Promise((resolve, reject) => {
|
|
53
|
-
fs.appendFile(path, Buffer.from(data), (err) => {
|
|
54
|
-
if (err) {
|
|
55
|
-
reject(err);
|
|
56
|
-
} else {
|
|
57
|
-
resolve();
|
|
58
|
-
}
|
|
59
|
-
});
|
|
60
|
-
});
|
|
61
|
-
}
|
|
1
|
+
import fs from "fs";
|
|
2
|
+
|
|
3
|
+
export async function readFile(path: string): Promise<Buffer> {
|
|
4
|
+
return new Promise((resolve, reject) => {
|
|
5
|
+
fs.readFile(path, null, (err, data) => {
|
|
6
|
+
if (err) {
|
|
7
|
+
reject(err);
|
|
8
|
+
} else {
|
|
9
|
+
resolve(data);
|
|
10
|
+
}
|
|
11
|
+
});
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export async function copyFile(fromPath: string, toPath: string): Promise<void> {
|
|
16
|
+
return new Promise((resolve, reject) => {
|
|
17
|
+
fs.copyFile(fromPath, toPath, (err) => {
|
|
18
|
+
if (err) {
|
|
19
|
+
reject(err);
|
|
20
|
+
} else {
|
|
21
|
+
resolve();
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export async function removeFile(path: string): Promise<void> {
|
|
28
|
+
return new Promise((resolve, reject) => {
|
|
29
|
+
fs.rm(path, (err) => {
|
|
30
|
+
if (err) {
|
|
31
|
+
reject(err);
|
|
32
|
+
} else {
|
|
33
|
+
resolve();
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export async function moveFile(fromPath: string, toPath: string): Promise<void> {
|
|
40
|
+
return new Promise((resolve, reject) => {
|
|
41
|
+
fs.rename(fromPath, toPath, (err) => {
|
|
42
|
+
if (err) {
|
|
43
|
+
reject(err);
|
|
44
|
+
} else {
|
|
45
|
+
resolve();
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
export async function appendFile(path: string, data: ArrayBuffer): Promise<void> {
|
|
52
|
+
return new Promise((resolve, reject) => {
|
|
53
|
+
fs.appendFile(path, Buffer.from(data), (err) => {
|
|
54
|
+
if (err) {
|
|
55
|
+
reject(err);
|
|
56
|
+
} else {
|
|
57
|
+
resolve();
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
});
|
|
61
|
+
}
|
|
@@ -1,19 +1,19 @@
|
|
|
1
|
-
export async function fetchWithTimeout(url: string, reqInit: RequestInit, timeout?: number): Promise<Response> {
|
|
2
|
-
if (!timeout) {
|
|
3
|
-
return await fetch(url, reqInit);
|
|
4
|
-
}
|
|
5
|
-
|
|
6
|
-
let timer: any;
|
|
7
|
-
const [res] = await Promise.all([
|
|
8
|
-
fetch(url, reqInit).then((res) => {
|
|
9
|
-
clearTimeout(timer);
|
|
10
|
-
return res;
|
|
11
|
-
}),
|
|
12
|
-
new Promise((_, reject) => {
|
|
13
|
-
timer = setTimeout(() => {
|
|
14
|
-
reject(new Error(`Request to "${url}" was timeout.`));
|
|
15
|
-
}, timeout);
|
|
16
|
-
}),
|
|
17
|
-
]);
|
|
18
|
-
return res;
|
|
19
|
-
}
|
|
1
|
+
export async function fetchWithTimeout(url: string, reqInit: RequestInit, timeout?: number): Promise<Response> {
|
|
2
|
+
if (!timeout) {
|
|
3
|
+
return await fetch(url, reqInit);
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
let timer: any;
|
|
7
|
+
const [res] = await Promise.all([
|
|
8
|
+
fetch(url, reqInit).then((res) => {
|
|
9
|
+
clearTimeout(timer);
|
|
10
|
+
return res;
|
|
11
|
+
}),
|
|
12
|
+
new Promise((_, reject) => {
|
|
13
|
+
timer = setTimeout(() => {
|
|
14
|
+
reject(new Error(`Request to "${url}" was timeout.`));
|
|
15
|
+
}, timeout);
|
|
16
|
+
}),
|
|
17
|
+
]);
|
|
18
|
+
return res;
|
|
19
|
+
}
|
|
@@ -1,26 +1,26 @@
|
|
|
1
|
-
import { sign, verify, decode, Secret, JwtPayload } from "jsonwebtoken";
|
|
2
|
-
import { encode as base64Encode } from "~/deno-std/encoding/base64";
|
|
3
|
-
import crypto from "crypto";
|
|
4
|
-
|
|
5
|
-
export function createJwt(payload: Record<string, any>, secret: Secret) {
|
|
6
|
-
return sign(payload, secret, {
|
|
7
|
-
algorithm: "HS512",
|
|
8
|
-
});
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
export function verifyJwt(token: string, secret: Secret): JwtPayload {
|
|
12
|
-
return verify(token, secret, {
|
|
13
|
-
algorithms: ["HS512"],
|
|
14
|
-
}) as JwtPayload;
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
export function decodeJwt(token: string) {
|
|
18
|
-
return decode(token, { complete: true });
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
export async function generateJwtSecretKey() {
|
|
22
|
-
const key = await crypto.subtle.generateKey({ name: "HMAC", hash: "SHA-512" }, true, ["sign", "verify"]);
|
|
23
|
-
|
|
24
|
-
const exportedKey = await crypto.subtle.exportKey("raw", key);
|
|
25
|
-
return base64Encode(exportedKey);
|
|
26
|
-
}
|
|
1
|
+
import { sign, verify, decode, Secret, JwtPayload } from "jsonwebtoken";
|
|
2
|
+
import { encode as base64Encode } from "~/deno-std/encoding/base64";
|
|
3
|
+
import crypto from "crypto";
|
|
4
|
+
|
|
5
|
+
export function createJwt(payload: Record<string, any>, secret: Secret) {
|
|
6
|
+
return sign(payload, secret, {
|
|
7
|
+
algorithm: "HS512",
|
|
8
|
+
});
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export function verifyJwt(token: string, secret: Secret): JwtPayload {
|
|
12
|
+
return verify(token, secret, {
|
|
13
|
+
algorithms: ["HS512"],
|
|
14
|
+
}) as JwtPayload;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export function decodeJwt(token: string) {
|
|
18
|
+
return decode(token, { complete: true });
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export async function generateJwtSecretKey() {
|
|
22
|
+
const key = await crypto.subtle.generateKey({ name: "HMAC", hash: "SHA-512" }, true, ["sign", "verify"]);
|
|
23
|
+
|
|
24
|
+
const exportedKey = await crypto.subtle.exportKey("raw", key);
|
|
25
|
+
return base64Encode(exportedKey);
|
|
26
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import bcrypt from "bcryptjs";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Generates password hash.
|
|
5
|
+
* @param password
|
|
6
|
+
* @param salt
|
|
7
|
+
* @returns
|
|
8
|
+
*/
|
|
9
|
+
export async function generatePasswordHash(password: string, salt?: number | string): Promise<string> {
|
|
10
|
+
if (!salt) {
|
|
11
|
+
salt = 10;
|
|
12
|
+
}
|
|
13
|
+
const passwordHash = await bcrypt.hash(password, salt);
|
|
14
|
+
return passwordHash;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Validates the password against the hash.
|
|
19
|
+
* @param password
|
|
20
|
+
* @param passwordHash
|
|
21
|
+
* @returns
|
|
22
|
+
*/
|
|
23
|
+
export async function validatePassword(password: string, passwordHash: string): Promise<boolean> {
|
|
24
|
+
const isMatch = await bcrypt.compare(password, passwordHash);
|
|
25
|
+
return isMatch;
|
|
26
|
+
}
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import path from "path";
|
|
2
|
-
|
|
3
|
-
export function getFileExtensionName(pathname: string) {
|
|
4
|
-
return path.extname(pathname);
|
|
5
|
-
}
|
|
6
|
-
|
|
7
|
-
export function getFileName(pathname: string) {
|
|
8
|
-
return path.basename(pathname);
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
export function getFileBaseName(pathname: string) {
|
|
12
|
-
const extName = path.extname(pathname);
|
|
13
|
-
return path.basename(pathname, extName);
|
|
14
|
-
}
|
|
1
|
+
import path from "path";
|
|
2
|
+
|
|
3
|
+
export function getFileExtensionName(pathname: string) {
|
|
4
|
+
return path.extname(pathname);
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
export function getFileName(pathname: string) {
|
|
8
|
+
return path.basename(pathname);
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export function getFileBaseName(pathname: string) {
|
|
12
|
+
const extName = path.extname(pathname);
|
|
13
|
+
return path.basename(pathname, extName);
|
|
14
|
+
}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import dayjs from "dayjs";
|
|
2
|
-
|
|
3
|
-
export function getNowString() {
|
|
4
|
-
return dayjs().format("YYYY-MM-DD HH:mm:ss.SSS");
|
|
5
|
-
}
|
|
6
|
-
|
|
7
|
-
export function getNowStringWithTimezone() {
|
|
8
|
-
return dayjs().format("YYYY-MM-DD HH:mm:ss.SSSZ");
|
|
9
|
-
}
|
|
1
|
+
import dayjs from "dayjs";
|
|
2
|
+
|
|
3
|
+
export function getNowString() {
|
|
4
|
+
return dayjs().format("YYYY-MM-DD HH:mm:ss.SSS");
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
export function getNowStringWithTimezone() {
|
|
8
|
+
return dayjs().format("YYYY-MM-DD HH:mm:ss.SSSZ");
|
|
9
|
+
}
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
export function isUndefined(val: any) {
|
|
2
|
-
return typeof val === "undefined";
|
|
3
|
-
}
|
|
4
|
-
|
|
5
|
-
export function isNull(val: any) {
|
|
6
|
-
return val === null;
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
export function isNullOrUndefined(val: any) {
|
|
10
|
-
return isNull(val) || isUndefined(val);
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
export function isNullOrUndefinedOrEmpty(val: any) {
|
|
14
|
-
return isNull(val) || isUndefined(val) || val === "";
|
|
15
|
-
}
|
|
1
|
+
export function isUndefined(val: any) {
|
|
2
|
+
return typeof val === "undefined";
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
export function isNull(val: any) {
|
|
6
|
+
return val === null;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export function isNullOrUndefined(val: any) {
|
|
10
|
+
return isNull(val) || isUndefined(val);
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export function isNullOrUndefinedOrEmpty(val: any) {
|
|
14
|
+
return isNull(val) || isUndefined(val) || val === "";
|
|
15
|
+
}
|
package/tsconfig.json
CHANGED
|
@@ -1,19 +1,19 @@
|
|
|
1
|
-
{
|
|
2
|
-
"compilerOptions": {
|
|
3
|
-
"target": "ESNext",
|
|
4
|
-
"lib": ["DOM", "DOM.Iterable", "ESNext"],
|
|
5
|
-
"esModuleInterop": true,
|
|
6
|
-
"jsx": "react-jsx",
|
|
7
|
-
"module": "ESNext",
|
|
8
|
-
"moduleResolution": "Node",
|
|
9
|
-
"allowJs": true,
|
|
10
|
-
"sourceMap": true,
|
|
11
|
-
"declaration": true,
|
|
12
|
-
"outDir": "./dist",
|
|
13
|
-
"paths": {
|
|
14
|
-
"~/*": ["./src/*"]
|
|
15
|
-
}
|
|
16
|
-
},
|
|
17
|
-
"exclude": ["src/**/*.spec.ts", "src/**/*.spec.tsx", "node_modules"],
|
|
18
|
-
"include": ["src/**/*.js", "src/**/*.jsx", "src/**/*.ts", "src/**/*.tsx"]
|
|
19
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"target": "ESNext",
|
|
4
|
+
"lib": ["DOM", "DOM.Iterable", "ESNext"],
|
|
5
|
+
"esModuleInterop": true,
|
|
6
|
+
"jsx": "react-jsx",
|
|
7
|
+
"module": "ESNext",
|
|
8
|
+
"moduleResolution": "Node",
|
|
9
|
+
"allowJs": true,
|
|
10
|
+
"sourceMap": true,
|
|
11
|
+
"declaration": true,
|
|
12
|
+
"outDir": "./dist",
|
|
13
|
+
"paths": {
|
|
14
|
+
"~/*": ["./src/*"]
|
|
15
|
+
}
|
|
16
|
+
},
|
|
17
|
+
"exclude": ["src/**/*.spec.ts", "src/**/*.spec.tsx", "node_modules"],
|
|
18
|
+
"include": ["src/**/*.js", "src/**/*.jsx", "src/**/*.ts", "src/**/*.tsx"]
|
|
19
|
+
}
|