apeframework 0.0.0-dev.1
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 +21 -0
- package/README.md +55 -0
- package/api/api.d.ts +7 -0
- package/api/api.js +2 -0
- package/api/api.ts +8 -0
- package/api/auth.d.ts +9 -0
- package/api/auth.js +11 -0
- package/api/auth.ts +9 -0
- package/api/config.d.ts +13 -0
- package/api/config.js +59 -0
- package/api/config.ts +69 -0
- package/api/endpoint.d.ts +20 -0
- package/api/endpoint.js +5 -0
- package/api/endpoint.ts +23 -0
- package/api/handler.d.ts +8 -0
- package/api/handler.js +13 -0
- package/api/handler.ts +23 -0
- package/api/index.d.ts +7 -0
- package/api/index.js +187 -0
- package/api/index.ts +97 -0
- package/api/route.d.ts +6 -0
- package/api/route.js +2 -0
- package/api/route.ts +4 -0
- package/api/router.d.ts +4 -0
- package/api/router.js +111 -0
- package/api/router.ts +36 -0
- package/api/schema.d.ts +29 -0
- package/api/schema.js +69 -0
- package/api/schema.ts +98 -0
- package/app/app.d.ts +6 -0
- package/app/app.js +2 -0
- package/app/app.ts +7 -0
- package/app/boot.d.ts +4 -0
- package/app/boot.js +2 -0
- package/app/boot.ts +5 -0
- package/app/bundle.d.ts +14 -0
- package/app/bundle.js +2 -0
- package/app/bundle.ts +15 -0
- package/app/config.d.ts +4 -0
- package/app/config.js +9 -0
- package/app/config.ts +9 -0
- package/app/index.d.ts +9 -0
- package/app/index.js +103 -0
- package/app/index.ts +32 -0
- package/bin/ape-cli-ts.js +4 -0
- package/bin/ape-cli.js +2 -0
- package/cli/command.d.ts +4 -0
- package/cli/command.js +2 -0
- package/cli/command.ts +7 -0
- package/cli/index.d.ts +2 -0
- package/cli/index.js +103 -0
- package/cli/index.ts +41 -0
- package/cli/internal/api.d.ts +3 -0
- package/cli/internal/api.js +110 -0
- package/cli/internal/api.ts +38 -0
- package/cli/internal/index.d.ts +2 -0
- package/cli/internal/index.js +13 -0
- package/cli/internal/index.ts +9 -0
- package/cli/internal/migration.d.ts +3 -0
- package/cli/internal/migration.js +214 -0
- package/cli/internal/migration.ts +110 -0
- package/cli/internal/queue.d.ts +3 -0
- package/cli/internal/queue.js +147 -0
- package/cli/internal/queue.ts +60 -0
- package/cli/utils.d.ts +18 -0
- package/cli/utils.js +52 -0
- package/cli/utils.ts +48 -0
- package/config/config.d.ts +5 -0
- package/config/config.js +2 -0
- package/config/config.ts +6 -0
- package/config/configuration.d.ts +63 -0
- package/config/configuration.js +2 -0
- package/config/configuration.ts +72 -0
- package/config/default.d.ts +33 -0
- package/config/default.js +34 -0
- package/config/default.ts +40 -0
- package/config/env.d.ts +66 -0
- package/config/env.js +72 -0
- package/config/env.ts +79 -0
- package/config/index.d.ts +8 -0
- package/config/index.js +91 -0
- package/config/index.ts +101 -0
- package/config/loadFile.d.ts +2 -0
- package/config/loadFile.js +13 -0
- package/config/loadFile.ts +9 -0
- package/config/node.d.ts +5 -0
- package/config/node.js +11 -0
- package/config/node.ts +7 -0
- package/config/store.d.ts +6 -0
- package/config/store.js +20 -0
- package/config/store.ts +15 -0
- package/db/config/index.d.ts +10 -0
- package/db/config/index.js +43 -0
- package/db/config/index.ts +35 -0
- package/db/config/memory.d.ts +3 -0
- package/db/config/memory.js +15 -0
- package/db/config/memory.ts +13 -0
- package/db/config/mysql.d.ts +3 -0
- package/db/config/mysql.js +56 -0
- package/db/config/mysql.ts +58 -0
- package/db/config/postgres.d.ts +3 -0
- package/db/config/postgres.js +59 -0
- package/db/config/postgres.ts +61 -0
- package/db/config/sqlite.d.ts +3 -0
- package/db/config/sqlite.js +21 -0
- package/db/config/sqlite.ts +20 -0
- package/db/database.d.ts +3 -0
- package/db/database.js +3 -0
- package/db/database.ts +5 -0
- package/db/index.d.ts +10 -0
- package/db/index.js +32 -0
- package/db/index.ts +26 -0
- package/db/postProcess.d.ts +3 -0
- package/db/postProcess.js +25 -0
- package/db/postProcess.ts +27 -0
- package/db/schema/builder/_.d.ts +30 -0
- package/db/schema/builder/_.js +87 -0
- package/db/schema/builder/_.ts +101 -0
- package/db/schema/builder/columnBuilder.d.ts +7 -0
- package/db/schema/builder/columnBuilder.js +14 -0
- package/db/schema/builder/columnBuilder.ts +15 -0
- package/db/schema/builder/dataType.d.ts +28 -0
- package/db/schema/builder/dataType.js +170 -0
- package/db/schema/builder/dataType.ts +184 -0
- package/db/schema/builder/index.d.ts +15 -0
- package/db/schema/builder/index.js +42 -0
- package/db/schema/builder/index.ts +50 -0
- package/db/schema/builder/tableBuilder.d.ts +45 -0
- package/db/schema/builder/tableBuilder.js +307 -0
- package/db/schema/builder/tableBuilder.ts +409 -0
- package/db/schema/config.d.ts +4 -0
- package/db/schema/config.js +5 -0
- package/db/schema/config.ts +3 -0
- package/db/schema/index.d.ts +7 -0
- package/db/schema/index.js +252 -0
- package/db/schema/index.ts +88 -0
- package/db/schema/migration.d.ts +6 -0
- package/db/schema/migration.js +2 -0
- package/db/schema/migration.ts +7 -0
- package/db/schema/migrationList.d.ts +5 -0
- package/db/schema/migrationList.js +2 -0
- package/db/schema/migrationList.ts +5 -0
- package/db/schema/migrationSource.d.ts +10 -0
- package/db/schema/migrationSource.js +60 -0
- package/db/schema/migrationSource.ts +24 -0
- package/db/schema/schema.d.ts +6 -0
- package/db/schema/schema.js +2 -0
- package/db/schema/schema.ts +7 -0
- package/db/utils/index.d.ts +7 -0
- package/db/utils/index.js +10 -0
- package/db/utils/index.ts +8 -0
- package/db/utils/insertGetKey.d.ts +8 -0
- package/db/utils/insertGetKey.js +109 -0
- package/db/utils/insertGetKey.ts +80 -0
- package/i18n/config.d.ts +4 -0
- package/i18n/config.js +9 -0
- package/i18n/config.ts +9 -0
- package/i18n/i18n.d.ts +5 -0
- package/i18n/i18n.js +2 -0
- package/i18n/i18n.ts +6 -0
- package/i18n/index.d.ts +8 -0
- package/i18n/index.js +155 -0
- package/i18n/index.ts +42 -0
- package/i18n/internationalization.d.ts +3 -0
- package/i18n/internationalization.js +2 -0
- package/i18n/internationalization.ts +5 -0
- package/i18n/translation.d.ts +4 -0
- package/i18n/translation.js +2 -0
- package/i18n/translation.ts +4 -0
- package/jwt/config.d.ts +5 -0
- package/jwt/config.js +12 -0
- package/jwt/config.ts +11 -0
- package/jwt/index.d.ts +8 -0
- package/jwt/index.js +90 -0
- package/jwt/index.ts +60 -0
- package/jwt/jwt.d.ts +6 -0
- package/jwt/jwt.js +2 -0
- package/jwt/jwt.ts +19 -0
- package/jwt/user.d.ts +4 -0
- package/jwt/user.js +2 -0
- package/jwt/user.ts +4 -0
- package/log/config.d.ts +23 -0
- package/log/config.js +47 -0
- package/log/config.ts +43 -0
- package/log/index.d.ts +4 -0
- package/log/index.js +9 -0
- package/log/index.ts +9 -0
- package/log/logger.d.ts +3 -0
- package/log/logger.js +2 -0
- package/log/logger.ts +5 -0
- package/mail/config.d.ts +4 -0
- package/mail/config.js +5 -0
- package/mail/config.ts +3 -0
- package/mail/email.d.ts +20 -0
- package/mail/email.js +2 -0
- package/mail/email.ts +21 -0
- package/mail/index.d.ts +2 -0
- package/mail/index.js +4 -0
- package/mail/index.ts +3 -0
- package/mail/mail.d.ts +12 -0
- package/mail/mail.js +2 -0
- package/mail/mail.ts +13 -0
- package/mail/module/bypass/index.d.ts +6 -0
- package/mail/module/bypass/index.js +74 -0
- package/mail/module/bypass/index.ts +9 -0
- package/mail/module/config.d.ts +11 -0
- package/mail/module/config.js +24 -0
- package/mail/module/config.ts +25 -0
- package/mail/module/index.d.ts +8 -0
- package/mail/module/index.js +107 -0
- package/mail/module/index.ts +61 -0
- package/mail/module/smtp/config.d.ts +6 -0
- package/mail/module/smtp/config.js +25 -0
- package/mail/module/smtp/config.ts +25 -0
- package/mail/module/smtp/index.d.ts +9 -0
- package/mail/module/smtp/index.js +104 -0
- package/mail/module/smtp/index.ts +36 -0
- package/mq/index.d.ts +3 -0
- package/mq/index.js +27 -0
- package/mq/index.ts +4 -0
- package/mq/module/bypass/index.d.ts +13 -0
- package/mq/module/bypass/index.js +86 -0
- package/mq/module/bypass/index.ts +20 -0
- package/mq/module/config.d.ts +6 -0
- package/mq/module/config.js +15 -0
- package/mq/module/config.ts +14 -0
- package/mq/module/index.d.ts +9 -0
- package/mq/module/index.js +93 -0
- package/mq/module/index.ts +24 -0
- package/mq/module/redis/config.d.ts +27 -0
- package/mq/module/redis/config.js +37 -0
- package/mq/module/redis/config.ts +34 -0
- package/mq/module/redis/index.d.ts +15 -0
- package/mq/module/redis/index.js +132 -0
- package/mq/module/redis/index.ts +60 -0
- package/mq/mq.d.ts +15 -0
- package/mq/mq.js +2 -0
- package/mq/mq.ts +18 -0
- package/mq/queue.d.ts +9 -0
- package/mq/queue.js +2 -0
- package/mq/queue.ts +11 -0
- package/package.json +53 -0
- package/pwd/config.d.ts +4 -0
- package/pwd/config.js +9 -0
- package/pwd/config.ts +9 -0
- package/pwd/index.d.ts +6 -0
- package/pwd/index.js +21 -0
- package/pwd/index.ts +20 -0
- package/pwd/pwd.d.ts +4 -0
- package/pwd/pwd.js +2 -0
- package/pwd/pwd.ts +4 -0
- package/utils/index.d.ts +25 -0
- package/utils/index.js +72 -0
- package/utils/index.ts +56 -0
package/i18n/index.js
ADDED
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
26
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
27
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
28
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
29
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
30
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
31
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
32
|
+
});
|
|
33
|
+
};
|
|
34
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
35
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
36
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
37
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
38
|
+
function step(op) {
|
|
39
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
40
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
41
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
42
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
43
|
+
switch (op[0]) {
|
|
44
|
+
case 0: case 1: t = op; break;
|
|
45
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
46
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
47
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
48
|
+
default:
|
|
49
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
50
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
51
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
52
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
53
|
+
if (t[2]) _.ops.pop();
|
|
54
|
+
_.trys.pop(); continue;
|
|
55
|
+
}
|
|
56
|
+
op = body.call(thisArg, _);
|
|
57
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
58
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
62
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
63
|
+
};
|
|
64
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
65
|
+
exports.getI18n = exports.initI18n = void 0;
|
|
66
|
+
var i18next_1 = __importStar(require("i18next"));
|
|
67
|
+
var app_1 = require("../app");
|
|
68
|
+
var config_1 = __importDefault(require("./config"));
|
|
69
|
+
var getNamespaces = function () { return __awaiter(void 0, void 0, void 0, function () { return __generator(this, function (_a) {
|
|
70
|
+
switch (_a.label) {
|
|
71
|
+
case 0: return [4 /*yield*/, (0, app_1.getBundles)()];
|
|
72
|
+
case 1: return [2 /*return*/, (_a.sent()).map(function (bundle) { return bundle.bundleId; })];
|
|
73
|
+
}
|
|
74
|
+
}); }); };
|
|
75
|
+
var getResources = function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
76
|
+
var resources, _loop_1, _i, _a, bundle;
|
|
77
|
+
return __generator(this, function (_b) {
|
|
78
|
+
switch (_b.label) {
|
|
79
|
+
case 0:
|
|
80
|
+
resources = {};
|
|
81
|
+
_loop_1 = function (bundle) {
|
|
82
|
+
var _c;
|
|
83
|
+
return __generator(this, function (_d) {
|
|
84
|
+
switch (_d.label) {
|
|
85
|
+
case 0:
|
|
86
|
+
if (!bundle.translations) return [3 /*break*/, 2];
|
|
87
|
+
return [4 /*yield*/, bundle.translations()];
|
|
88
|
+
case 1:
|
|
89
|
+
_c = _d.sent();
|
|
90
|
+
return [3 /*break*/, 3];
|
|
91
|
+
case 2:
|
|
92
|
+
_c = [];
|
|
93
|
+
_d.label = 3;
|
|
94
|
+
case 3:
|
|
95
|
+
(_c).forEach(function (translation) {
|
|
96
|
+
if (!(translation.languageId in resources))
|
|
97
|
+
resources[translation.languageId] = {};
|
|
98
|
+
resources[translation.languageId][bundle.bundleId] = translation.dictionary;
|
|
99
|
+
});
|
|
100
|
+
return [2 /*return*/];
|
|
101
|
+
}
|
|
102
|
+
});
|
|
103
|
+
};
|
|
104
|
+
_i = 0;
|
|
105
|
+
return [4 /*yield*/, (0, app_1.getBundles)()];
|
|
106
|
+
case 1:
|
|
107
|
+
_a = _b.sent();
|
|
108
|
+
_b.label = 2;
|
|
109
|
+
case 2:
|
|
110
|
+
if (!(_i < _a.length)) return [3 /*break*/, 5];
|
|
111
|
+
bundle = _a[_i];
|
|
112
|
+
return [5 /*yield**/, _loop_1(bundle)];
|
|
113
|
+
case 3:
|
|
114
|
+
_b.sent();
|
|
115
|
+
_b.label = 4;
|
|
116
|
+
case 4:
|
|
117
|
+
_i++;
|
|
118
|
+
return [3 /*break*/, 2];
|
|
119
|
+
case 5: return [2 /*return*/, resources];
|
|
120
|
+
}
|
|
121
|
+
});
|
|
122
|
+
}); };
|
|
123
|
+
var internalization;
|
|
124
|
+
var initI18n = function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
125
|
+
var _a;
|
|
126
|
+
var _b;
|
|
127
|
+
return __generator(this, function (_c) {
|
|
128
|
+
switch (_c.label) {
|
|
129
|
+
case 0:
|
|
130
|
+
_a = i18next_1.init;
|
|
131
|
+
_b = {};
|
|
132
|
+
return [4 /*yield*/, getNamespaces()];
|
|
133
|
+
case 1:
|
|
134
|
+
_b.ns = _c.sent();
|
|
135
|
+
return [4 /*yield*/, getResources()];
|
|
136
|
+
case 2: return [4 /*yield*/, _a.apply(void 0, [(_b.resources = _c.sent(),
|
|
137
|
+
_b.fallbackLng = config_1.default.fallbackLanguage,
|
|
138
|
+
_b)])];
|
|
139
|
+
case 3:
|
|
140
|
+
_c.sent();
|
|
141
|
+
internalization = i18next_1.default;
|
|
142
|
+
return [2 /*return*/, internalization];
|
|
143
|
+
}
|
|
144
|
+
});
|
|
145
|
+
}); };
|
|
146
|
+
exports.initI18n = initI18n;
|
|
147
|
+
var getI18n = function () { return __awaiter(void 0, void 0, void 0, function () { return __generator(this, function (_a) {
|
|
148
|
+
return [2 /*return*/, internalization !== null && internalization !== void 0 ? internalization : (0, exports.initI18n)()];
|
|
149
|
+
}); }); };
|
|
150
|
+
exports.getI18n = getI18n;
|
|
151
|
+
var i18n = {
|
|
152
|
+
getI18n: exports.getI18n,
|
|
153
|
+
initI18n: exports.initI18n,
|
|
154
|
+
};
|
|
155
|
+
exports.default = i18n;
|
package/i18n/index.ts
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import i18next, { init, Resource as Resources } from 'i18next'
|
|
2
|
+
import { getBundles } from '../app'
|
|
3
|
+
import config from './config'
|
|
4
|
+
import type { I18n } from './i18n'
|
|
5
|
+
import type { Internationalization } from './internationalization'
|
|
6
|
+
import type { Translation } from './translation'
|
|
7
|
+
|
|
8
|
+
export { I18n, Internationalization, Translation }
|
|
9
|
+
|
|
10
|
+
const getNamespaces = async () => (await getBundles()).map((bundle) => bundle.bundleId)
|
|
11
|
+
|
|
12
|
+
const getResources = async () => {
|
|
13
|
+
const resources: Resources = {}
|
|
14
|
+
for (const bundle of await getBundles()) {
|
|
15
|
+
(bundle.translations ? await bundle.translations() : []).forEach((translation) => {
|
|
16
|
+
if (!(translation.languageId in resources)) resources[translation.languageId] = {}
|
|
17
|
+
resources[translation.languageId][bundle.bundleId] = translation.dictionary
|
|
18
|
+
})
|
|
19
|
+
}
|
|
20
|
+
return resources
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
let internalization: Internationalization | undefined
|
|
24
|
+
|
|
25
|
+
export const initI18n = async () => {
|
|
26
|
+
await init({
|
|
27
|
+
ns: await getNamespaces(),
|
|
28
|
+
resources: await getResources(),
|
|
29
|
+
fallbackLng: config.fallbackLanguage,
|
|
30
|
+
})
|
|
31
|
+
internalization = i18next
|
|
32
|
+
return internalization
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export const getI18n = async () => internalization ?? initI18n()
|
|
36
|
+
|
|
37
|
+
const i18n: I18n = {
|
|
38
|
+
getI18n,
|
|
39
|
+
initI18n,
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export default i18n
|
package/jwt/config.d.ts
ADDED
package/jwt/config.js
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
var config_1 = require("../config");
|
|
4
|
+
var config = (0, config_1.getConfig)();
|
|
5
|
+
if (!config.jwtIssuer)
|
|
6
|
+
throw new Error('jwt: issuer not provided');
|
|
7
|
+
if (!config.jwtSecret)
|
|
8
|
+
throw new Error('jwt: secret not provided');
|
|
9
|
+
exports.default = {
|
|
10
|
+
issuer: config.jwtIssuer,
|
|
11
|
+
secret: config.jwtSecret,
|
|
12
|
+
};
|
package/jwt/config.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { getConfig } from '../config'
|
|
2
|
+
|
|
3
|
+
const config = getConfig()
|
|
4
|
+
|
|
5
|
+
if (!config.jwtIssuer) throw new Error('jwt: issuer not provided')
|
|
6
|
+
if (!config.jwtSecret) throw new Error('jwt: secret not provided')
|
|
7
|
+
|
|
8
|
+
export default {
|
|
9
|
+
issuer: config.jwtIssuer,
|
|
10
|
+
secret: config.jwtSecret,
|
|
11
|
+
}
|
package/jwt/index.d.ts
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { Jwt } from './jwt';
|
|
2
|
+
import type { User } from './user';
|
|
3
|
+
export { Jwt, User };
|
|
4
|
+
export declare const createToken: (user: User, type: string, timestamp: number, expiration: number) => Promise<string>;
|
|
5
|
+
export declare const verifyToken: (token: string, type: string, timestamp: number) => Promise<User | undefined>;
|
|
6
|
+
export declare const hasRoles: (user: User, roles: string[]) => boolean;
|
|
7
|
+
declare const jwt: Jwt;
|
|
8
|
+
export default jwt;
|
package/jwt/index.js
ADDED
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
12
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
13
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
14
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
15
|
+
function step(op) {
|
|
16
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
17
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
18
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
19
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
20
|
+
switch (op[0]) {
|
|
21
|
+
case 0: case 1: t = op; break;
|
|
22
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
23
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
24
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
25
|
+
default:
|
|
26
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
27
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
28
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
29
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
30
|
+
if (t[2]) _.ops.pop();
|
|
31
|
+
_.trys.pop(); continue;
|
|
32
|
+
}
|
|
33
|
+
op = body.call(thisArg, _);
|
|
34
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
35
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
39
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
40
|
+
};
|
|
41
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
42
|
+
exports.hasRoles = exports.verifyToken = exports.createToken = void 0;
|
|
43
|
+
var jose_1 = require("jose");
|
|
44
|
+
var config_1 = __importDefault(require("./config"));
|
|
45
|
+
var log_1 = __importDefault(require("../log"));
|
|
46
|
+
var secret = new TextEncoder().encode(config_1.default.secret);
|
|
47
|
+
var createToken = function (user, type, timestamp, expiration) { return __awaiter(void 0, void 0, void 0, function () {
|
|
48
|
+
var payload;
|
|
49
|
+
return __generator(this, function (_a) {
|
|
50
|
+
payload = { type: type, user: user };
|
|
51
|
+
return [2 /*return*/, new jose_1.SignJWT(payload)
|
|
52
|
+
.setProtectedHeader({ typ: 'JWT', alg: 'HS256' })
|
|
53
|
+
.setIssuer(config_1.default.issuer)
|
|
54
|
+
.setIssuedAt(timestamp)
|
|
55
|
+
.setExpirationTime(timestamp + expiration)
|
|
56
|
+
.sign(secret)];
|
|
57
|
+
});
|
|
58
|
+
}); };
|
|
59
|
+
exports.createToken = createToken;
|
|
60
|
+
var verifyToken = function (token, type, timestamp) { return __awaiter(void 0, void 0, void 0, function () {
|
|
61
|
+
var payload, error_1;
|
|
62
|
+
return __generator(this, function (_a) {
|
|
63
|
+
switch (_a.label) {
|
|
64
|
+
case 0:
|
|
65
|
+
_a.trys.push([0, 2, , 3]);
|
|
66
|
+
return [4 /*yield*/, (0, jose_1.jwtVerify)(token, secret, {
|
|
67
|
+
algorithms: ['HS256'],
|
|
68
|
+
issuer: config_1.default.issuer,
|
|
69
|
+
currentDate: new Date(timestamp * 1000),
|
|
70
|
+
})];
|
|
71
|
+
case 1:
|
|
72
|
+
payload = (_a.sent()).payload;
|
|
73
|
+
return [2 /*return*/, payload.type === type ? payload.user : undefined];
|
|
74
|
+
case 2:
|
|
75
|
+
error_1 = _a.sent();
|
|
76
|
+
log_1.default.debug(error_1);
|
|
77
|
+
return [2 /*return*/, undefined];
|
|
78
|
+
case 3: return [2 /*return*/];
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
}); };
|
|
82
|
+
exports.verifyToken = verifyToken;
|
|
83
|
+
var hasRoles = function (user, roles) { return roles.every(function (role) { return user.roles.includes(role); }); };
|
|
84
|
+
exports.hasRoles = hasRoles;
|
|
85
|
+
var jwt = {
|
|
86
|
+
createToken: exports.createToken,
|
|
87
|
+
hasRoles: exports.hasRoles,
|
|
88
|
+
verifyToken: exports.verifyToken,
|
|
89
|
+
};
|
|
90
|
+
exports.default = jwt;
|
package/jwt/index.ts
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { jwtVerify, JWTPayload, ProtectedHeaderParameters as Header, SignJWT } from 'jose'
|
|
2
|
+
import config from './config'
|
|
3
|
+
import log from '../log'
|
|
4
|
+
import type { Jwt } from './jwt'
|
|
5
|
+
import type { User } from './user'
|
|
6
|
+
|
|
7
|
+
export { Jwt, User }
|
|
8
|
+
|
|
9
|
+
interface Payload extends JWTPayload {
|
|
10
|
+
type: string,
|
|
11
|
+
user: User,
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
const secret = new TextEncoder().encode(config.secret)
|
|
15
|
+
|
|
16
|
+
export const createToken = async (
|
|
17
|
+
user: User,
|
|
18
|
+
type: string,
|
|
19
|
+
timestamp: number,
|
|
20
|
+
expiration: number,
|
|
21
|
+
) => {
|
|
22
|
+
const payload: Payload = { type, user }
|
|
23
|
+
return new SignJWT(payload)
|
|
24
|
+
.setProtectedHeader({ typ: 'JWT', alg: 'HS256' })
|
|
25
|
+
.setIssuer(config.issuer)
|
|
26
|
+
.setIssuedAt(timestamp)
|
|
27
|
+
.setExpirationTime(timestamp + expiration)
|
|
28
|
+
.sign(secret)
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export const verifyToken = async (
|
|
32
|
+
token: string,
|
|
33
|
+
type: string,
|
|
34
|
+
timestamp: number,
|
|
35
|
+
) => {
|
|
36
|
+
try {
|
|
37
|
+
const { payload } = (await jwtVerify(token, secret, {
|
|
38
|
+
algorithms: ['HS256'],
|
|
39
|
+
issuer: config.issuer,
|
|
40
|
+
currentDate: new Date(timestamp * 1000),
|
|
41
|
+
})) as { payload: Payload, protectedHeader: Header }
|
|
42
|
+
return payload.type === type ? payload.user : undefined
|
|
43
|
+
} catch (error) {
|
|
44
|
+
log.debug(error)
|
|
45
|
+
return undefined
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export const hasRoles = (
|
|
50
|
+
user: User,
|
|
51
|
+
roles: string[],
|
|
52
|
+
) => roles.every((role) => user.roles.includes(role))
|
|
53
|
+
|
|
54
|
+
const jwt: Jwt = {
|
|
55
|
+
createToken,
|
|
56
|
+
hasRoles,
|
|
57
|
+
verifyToken,
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
export default jwt
|
package/jwt/jwt.d.ts
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { User } from './user';
|
|
2
|
+
export interface Jwt {
|
|
3
|
+
createToken: (user: User, type: string, timestamp: number, expiration: number) => Promise<string>;
|
|
4
|
+
hasRoles: (user: User, roles: string[]) => boolean;
|
|
5
|
+
verifyToken: (token: string, type: string, timestamp: number) => Promise<User | undefined>;
|
|
6
|
+
}
|
package/jwt/jwt.js
ADDED
package/jwt/jwt.ts
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { User } from './user'
|
|
2
|
+
|
|
3
|
+
export interface Jwt {
|
|
4
|
+
createToken: (
|
|
5
|
+
user: User,
|
|
6
|
+
type: string,
|
|
7
|
+
timestamp: number,
|
|
8
|
+
expiration: number
|
|
9
|
+
) => Promise<string>,
|
|
10
|
+
hasRoles: (
|
|
11
|
+
user: User,
|
|
12
|
+
roles: string[]
|
|
13
|
+
) => boolean,
|
|
14
|
+
verifyToken: (
|
|
15
|
+
token: string,
|
|
16
|
+
type: string,
|
|
17
|
+
timestamp: number
|
|
18
|
+
) => Promise<User | undefined>,
|
|
19
|
+
}
|
package/jwt/user.d.ts
ADDED
package/jwt/user.js
ADDED
package/jwt/user.ts
ADDED
package/log/config.d.ts
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import { LoggerOptions as Options } from 'pino';
|
|
3
|
+
import pretty from 'pino-pretty';
|
|
4
|
+
export declare enum Level {
|
|
5
|
+
debug = "debug",
|
|
6
|
+
error = "error",
|
|
7
|
+
fatal = "fatal",
|
|
8
|
+
info = "info",
|
|
9
|
+
silent = "silent",
|
|
10
|
+
trace = "trace",
|
|
11
|
+
warn = "warn"
|
|
12
|
+
}
|
|
13
|
+
export declare enum Destination {
|
|
14
|
+
file = "file",
|
|
15
|
+
stdout = "stdout"
|
|
16
|
+
}
|
|
17
|
+
declare const _default: {
|
|
18
|
+
options: Options<never>;
|
|
19
|
+
stream: (NodeJS.WriteStream & {
|
|
20
|
+
fd: 1;
|
|
21
|
+
}) | import("sonic-boom").default | pretty.PrettyStream;
|
|
22
|
+
};
|
|
23
|
+
export default _default;
|
package/log/config.js
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
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.Destination = exports.Level = void 0;
|
|
7
|
+
var pino_1 = __importDefault(require("pino"));
|
|
8
|
+
var pino_pretty_1 = __importDefault(require("pino-pretty"));
|
|
9
|
+
var config_1 = require("../config");
|
|
10
|
+
var Level;
|
|
11
|
+
(function (Level) {
|
|
12
|
+
Level["debug"] = "debug";
|
|
13
|
+
Level["error"] = "error";
|
|
14
|
+
Level["fatal"] = "fatal";
|
|
15
|
+
Level["info"] = "info";
|
|
16
|
+
Level["silent"] = "silent";
|
|
17
|
+
Level["trace"] = "trace";
|
|
18
|
+
Level["warn"] = "warn";
|
|
19
|
+
})(Level || (exports.Level = Level = {}));
|
|
20
|
+
var Destination;
|
|
21
|
+
(function (Destination) {
|
|
22
|
+
Destination["file"] = "file";
|
|
23
|
+
Destination["stdout"] = "stdout";
|
|
24
|
+
})(Destination || (exports.Destination = Destination = {}));
|
|
25
|
+
var config = (0, config_1.getConfig)();
|
|
26
|
+
var level = Object.values(Level)
|
|
27
|
+
.find(function (level) { return level === config.logLevel; });
|
|
28
|
+
if (!level)
|
|
29
|
+
throw new Error("log: invalid level \"".concat(config.logLevel, "\""));
|
|
30
|
+
var destination = Object.values(Destination)
|
|
31
|
+
.find(function (destination) { return destination === config.logDestination; });
|
|
32
|
+
if (!destination)
|
|
33
|
+
throw new Error("log: invalid destination \"".concat(config.logDestination, "\""));
|
|
34
|
+
var options = { level: level };
|
|
35
|
+
var stream;
|
|
36
|
+
if (destination === Destination.file) {
|
|
37
|
+
if (!config.logFile)
|
|
38
|
+
throw new Error('log: file not provided');
|
|
39
|
+
stream = pino_1.default.destination(config.logFile);
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
stream = config.logPretty ? (0, pino_pretty_1.default)() : process.stdout;
|
|
43
|
+
}
|
|
44
|
+
exports.default = {
|
|
45
|
+
options: options,
|
|
46
|
+
stream: stream,
|
|
47
|
+
};
|
package/log/config.ts
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import pino, { LoggerOptions as Options } from 'pino'
|
|
2
|
+
import pretty from 'pino-pretty'
|
|
3
|
+
import { getConfig } from '../config'
|
|
4
|
+
|
|
5
|
+
export enum Level {
|
|
6
|
+
debug = 'debug',
|
|
7
|
+
error = 'error',
|
|
8
|
+
fatal = 'fatal',
|
|
9
|
+
info = 'info',
|
|
10
|
+
silent = 'silent',
|
|
11
|
+
trace = 'trace',
|
|
12
|
+
warn = 'warn',
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export enum Destination {
|
|
16
|
+
file = 'file',
|
|
17
|
+
stdout = 'stdout',
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
const config = getConfig()
|
|
21
|
+
|
|
22
|
+
const level = Object.values(Level)
|
|
23
|
+
.find((level: string) => level === config.logLevel)
|
|
24
|
+
if (!level) throw new Error(`log: invalid level "${config.logLevel}"`)
|
|
25
|
+
|
|
26
|
+
const destination = Object.values(Destination)
|
|
27
|
+
.find((destination: string) => destination === config.logDestination)
|
|
28
|
+
if (!destination) throw new Error(`log: invalid destination "${config.logDestination}"`)
|
|
29
|
+
|
|
30
|
+
const options: Options = { level }
|
|
31
|
+
|
|
32
|
+
let stream
|
|
33
|
+
if (destination === Destination.file) {
|
|
34
|
+
if (!config.logFile) throw new Error('log: file not provided')
|
|
35
|
+
stream = pino.destination(config.logFile)
|
|
36
|
+
} else {
|
|
37
|
+
stream = config.logPretty ? pretty() : process.stdout
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export default {
|
|
41
|
+
options,
|
|
42
|
+
stream,
|
|
43
|
+
}
|
package/log/index.d.ts
ADDED
package/log/index.js
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
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
|
+
var pino_1 = __importDefault(require("pino"));
|
|
7
|
+
var config_1 = __importDefault(require("./config"));
|
|
8
|
+
var logger = (0, pino_1.default)(config_1.default.options, config_1.default.stream);
|
|
9
|
+
exports.default = logger;
|
package/log/index.ts
ADDED
package/log/logger.d.ts
ADDED
package/log/logger.js
ADDED
package/log/logger.ts
ADDED
package/mail/config.d.ts
ADDED
package/mail/config.js
ADDED
package/mail/config.ts
ADDED