evaengine 1.0.13 → 2.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.
Files changed (199) hide show
  1. package/README.md +15 -1
  2. package/bin/engine +2 -31
  3. package/dist/bin.d.ts +1 -0
  4. package/dist/bin.js +40 -0
  5. package/dist/bin.js.map +1 -0
  6. package/{src/commands/index.js → dist/commands/index.d.ts} +1 -8
  7. package/dist/commands/index.js +6 -0
  8. package/dist/commands/index.js.map +1 -0
  9. package/dist/commands/interface.d.ts +18 -0
  10. package/dist/commands/interface.js +40 -0
  11. package/dist/commands/interface.js.map +1 -0
  12. package/dist/commands/make_entity.d.ts +47 -0
  13. package/dist/commands/make_entity.js +410 -0
  14. package/dist/commands/make_entity.js.map +1 -0
  15. package/dist/commands/tramp.d.ts +7 -0
  16. package/dist/commands/tramp.js +29 -0
  17. package/dist/commands/tramp.js.map +1 -0
  18. package/dist/config/index.d.ts +92 -0
  19. package/dist/config/index.js +96 -0
  20. package/dist/config/index.js.map +1 -0
  21. package/dist/di.d.ts +73 -0
  22. package/dist/di.js +76 -0
  23. package/dist/di.js.map +1 -0
  24. package/dist/engine.d.ts +85 -0
  25. package/dist/engine.js +404 -0
  26. package/dist/engine.js.map +1 -0
  27. package/dist/entities/index.d.ts +54 -0
  28. package/dist/entities/index.js +228 -0
  29. package/dist/entities/index.js.map +1 -0
  30. package/dist/exceptions/index.d.ts +153 -0
  31. package/dist/exceptions/index.js +439 -0
  32. package/dist/exceptions/index.js.map +1 -0
  33. package/dist/index.d.ts +45 -0
  34. package/dist/index.js +45 -0
  35. package/dist/index.js.map +1 -0
  36. package/dist/middlewares/auth.d.ts +5 -0
  37. package/dist/middlewares/auth.js +63 -0
  38. package/dist/middlewares/auth.js.map +1 -0
  39. package/dist/middlewares/auth_kong.d.ts +2 -0
  40. package/dist/middlewares/auth_kong.js +24 -0
  41. package/dist/middlewares/auth_kong.js.map +1 -0
  42. package/dist/middlewares/debug.d.ts +3 -0
  43. package/dist/middlewares/debug.js +50 -0
  44. package/dist/middlewares/debug.js.map +1 -0
  45. package/{src/middlewares/index.js → dist/middlewares/index.d.ts} +1 -11
  46. package/dist/middlewares/index.js +9 -0
  47. package/dist/middlewares/index.js.map +1 -0
  48. package/dist/middlewares/providers.d.ts +25 -0
  49. package/dist/middlewares/providers.js +63 -0
  50. package/dist/middlewares/providers.js.map +1 -0
  51. package/dist/middlewares/session.d.ts +6 -0
  52. package/dist/middlewares/session.js +51 -0
  53. package/dist/middlewares/session.js.map +1 -0
  54. package/dist/middlewares/trace.d.ts +52 -0
  55. package/dist/middlewares/trace.js +225 -0
  56. package/dist/middlewares/trace.js.map +1 -0
  57. package/dist/middlewares/validator.d.ts +10 -0
  58. package/dist/middlewares/validator.js +43 -0
  59. package/dist/middlewares/validator.js.map +1 -0
  60. package/dist/middlewares/view_cache.d.ts +14 -0
  61. package/dist/middlewares/view_cache.js +102 -0
  62. package/dist/middlewares/view_cache.js.map +1 -0
  63. package/dist/services/cache.d.ts +66 -0
  64. package/dist/services/cache.js +207 -0
  65. package/dist/services/cache.js.map +1 -0
  66. package/dist/services/config.d.ts +25 -0
  67. package/dist/services/config.js +88 -0
  68. package/dist/services/config.js.map +1 -0
  69. package/dist/services/env.d.ts +12 -0
  70. package/dist/services/env.js +24 -0
  71. package/dist/services/env.js.map +1 -0
  72. package/dist/services/event_manager.d.ts +29 -0
  73. package/dist/services/event_manager.js +75 -0
  74. package/dist/services/event_manager.js.map +1 -0
  75. package/dist/services/http_client.d.ts +66 -0
  76. package/dist/services/http_client.js +62 -0
  77. package/dist/services/http_client.js.map +1 -0
  78. package/{src/services/index.js → dist/services/index.d.ts} +1 -15
  79. package/dist/services/index.js +14 -0
  80. package/dist/services/index.js.map +1 -0
  81. package/{src/services/interface.js → dist/services/interface.d.ts} +1 -3
  82. package/dist/services/interface.js +6 -0
  83. package/dist/services/interface.js.map +1 -0
  84. package/{src/services/joi.js → dist/services/joi.d.ts} +2 -9
  85. package/dist/services/joi.js +11 -0
  86. package/dist/services/joi.js.map +1 -0
  87. package/dist/services/jwt_token.d.ts +24 -0
  88. package/dist/services/jwt_token.js +77 -0
  89. package/dist/services/jwt_token.js.map +1 -0
  90. package/dist/services/jwt_token_kong.d.ts +25 -0
  91. package/dist/services/jwt_token_kong.js +65 -0
  92. package/dist/services/jwt_token_kong.js.map +1 -0
  93. package/dist/services/logger.d.ts +30 -0
  94. package/dist/services/logger.js +126 -0
  95. package/dist/services/logger.js.map +1 -0
  96. package/dist/services/namespace.d.ts +55 -0
  97. package/dist/services/namespace.js +157 -0
  98. package/dist/services/namespace.js.map +1 -0
  99. package/dist/services/now.d.ts +14 -0
  100. package/dist/services/now.js +43 -0
  101. package/dist/services/now.js.map +1 -0
  102. package/dist/services/providers.d.ts +55 -0
  103. package/dist/services/providers.js +134 -0
  104. package/dist/services/providers.js.map +1 -0
  105. package/dist/services/redis.d.ts +18 -0
  106. package/dist/services/redis.js +53 -0
  107. package/dist/services/redis.js.map +1 -0
  108. package/dist/services/rest_client.d.ts +48 -0
  109. package/dist/services/rest_client.js +96 -0
  110. package/dist/services/rest_client.js.map +1 -0
  111. package/dist/swagger/index.d.ts +223 -0
  112. package/dist/swagger/index.js +564 -0
  113. package/dist/swagger/index.js.map +1 -0
  114. package/dist/types/express.d.ts +14 -0
  115. package/dist/types/vendor.d.ts +102 -0
  116. package/dist/utils/api_scaffold.d.ts +74 -0
  117. package/dist/utils/api_scaffold.js +220 -0
  118. package/dist/utils/api_scaffold.js.map +1 -0
  119. package/dist/utils/case_converter.d.ts +7 -0
  120. package/dist/utils/case_converter.js +29 -0
  121. package/dist/utils/case_converter.js.map +1 -0
  122. package/dist/utils/crc32.d.ts +2 -0
  123. package/dist/utils/crc32.js +43 -0
  124. package/dist/utils/crc32.js.map +1 -0
  125. package/dist/utils/cron.d.ts +27 -0
  126. package/dist/utils/cron.js +186 -0
  127. package/dist/utils/cron.js.map +1 -0
  128. package/dist/utils/datetime.d.ts +4 -0
  129. package/dist/utils/datetime.js +6 -0
  130. package/dist/utils/datetime.js.map +1 -0
  131. package/dist/utils/host.d.ts +18 -0
  132. package/dist/utils/host.js +33 -0
  133. package/dist/utils/host.js.map +1 -0
  134. package/{src/utils/index.js → dist/utils/index.d.ts} +2 -26
  135. package/dist/utils/index.js +12 -0
  136. package/dist/utils/index.js.map +1 -0
  137. package/dist/utils/pagination.d.ts +150 -0
  138. package/dist/utils/pagination.js +242 -0
  139. package/dist/utils/pagination.js.map +1 -0
  140. package/dist/utils/random.d.ts +3 -0
  141. package/dist/utils/random.js +18 -0
  142. package/dist/utils/random.js.map +1 -0
  143. package/dist/utils/request_client.d.ts +33 -0
  144. package/dist/utils/request_client.js +153 -0
  145. package/dist/utils/request_client.js.map +1 -0
  146. package/dist/utils/smart_query.d.ts +144 -0
  147. package/dist/utils/smart_query.js +310 -0
  148. package/dist/utils/smart_query.js.map +1 -0
  149. package/dist/utils/test.d.ts +14 -0
  150. package/dist/utils/test.js +37 -0
  151. package/dist/utils/test.js.map +1 -0
  152. package/dist/utils/wrapper.d.ts +3 -0
  153. package/dist/utils/wrapper.js +5 -0
  154. package/dist/utils/wrapper.js.map +1 -0
  155. package/package.json +27 -11
  156. package/index.js +0 -2
  157. package/src/commands/interface.js +0 -45
  158. package/src/commands/make_entity.js +0 -490
  159. package/src/commands/tramp.js +0 -34
  160. package/src/config/index.js +0 -95
  161. package/src/di.js +0 -96
  162. package/src/engine.js +0 -556
  163. package/src/entities/index.js +0 -272
  164. package/src/exceptions/index.js +0 -501
  165. package/src/index.js +0 -55
  166. package/src/middlewares/auth.js +0 -67
  167. package/src/middlewares/auth_kong.js +0 -28
  168. package/src/middlewares/debug.js +0 -88
  169. package/src/middlewares/providers.js +0 -73
  170. package/src/middlewares/session.js +0 -63
  171. package/src/middlewares/trace.js +0 -254
  172. package/src/middlewares/validator.js +0 -50
  173. package/src/middlewares/view_cache.js +0 -127
  174. package/src/services/cache.js +0 -223
  175. package/src/services/config.js +0 -115
  176. package/src/services/env.js +0 -28
  177. package/src/services/event_manager.js +0 -84
  178. package/src/services/http_client.js +0 -69
  179. package/src/services/jwt_token.js +0 -89
  180. package/src/services/jwt_token_kong.js +0 -75
  181. package/src/services/logger.js +0 -150
  182. package/src/services/namespace.js +0 -176
  183. package/src/services/now.js +0 -49
  184. package/src/services/providers.js +0 -158
  185. package/src/services/redis.js +0 -63
  186. package/src/services/rest_client.js +0 -112
  187. package/src/swagger/index.js +0 -665
  188. package/src/utils/api_scaffold.js +0 -240
  189. package/src/utils/case_converter.js +0 -33
  190. package/src/utils/crc32.js +0 -44
  191. package/src/utils/cron.js +0 -208
  192. package/src/utils/datetime.js +0 -13
  193. package/src/utils/host.js +0 -39
  194. package/src/utils/pagination.js +0 -260
  195. package/src/utils/random.js +0 -23
  196. package/src/utils/request_client.js +0 -179
  197. package/src/utils/smart_query.js +0 -352
  198. package/src/utils/test.js +0 -48
  199. package/src/utils/wrapper.js +0 -8
@@ -0,0 +1,228 @@
1
+ import fs from 'fs';
2
+ import path from 'path';
3
+ import assert from 'assert';
4
+ import cloneDeep from 'lodash/cloneDeep.js';
5
+ import { Sequelize, Op, QueryTypes } from 'sequelize';
6
+ import { createRequire } from 'module';
7
+ import DI from "../di.js";
8
+ import { getMicroTimestamp } from "../utils/index.js";
9
+ import { StandardException } from "../exceptions/index.js";
10
+ const require = createRequire(import.meta.url);
11
+ Sequelize.prototype.validateIsUnique = (col, msg) => {
12
+ const conditions = { where: {} };
13
+ const message = msg || `${col} must be unique`;
14
+ return function v(value, next) {
15
+ //原实现的 this 别名,闭包内沿用
16
+ // eslint-disable-next-line @typescript-eslint/no-this-alias
17
+ const self = this;
18
+ this.Model.describe().then((schema) => {
19
+ conditions.where[col] = value;
20
+ Object
21
+ .keys(schema)
22
+ .filter(field => schema[field].primaryKey)
23
+ .forEach((pk) => {
24
+ conditions.where[pk] = { [Op.ne]: self[pk] };
25
+ });
26
+ }).then(() => self.Model.count(conditions).then((found) => {
27
+ if (found !== 0) {
28
+ return next(message);
29
+ }
30
+ return next();
31
+ })).catch(next);
32
+ };
33
+ };
34
+ export default class Entities {
35
+ entitiesPath;
36
+ sequelize;
37
+ entities;
38
+ scanned;
39
+ constructor(entitiesPath, sequelizeInstance = null) {
40
+ this.entitiesPath = entitiesPath;
41
+ this.sequelize = sequelizeInstance;
42
+ this.entities = {};
43
+ this.scanned = false;
44
+ }
45
+ /**
46
+ * Add tracer info to end of SQL query logging
47
+ */
48
+ static addTracer(options = {}) {
49
+ return Object.assign(options, {
50
+ benchmark: true,
51
+ logging: (...args) => {
52
+ // namespace.get 返回 unknown,sequelize 回调里只使用 queries 数组
53
+ const tracer = DI.get('namespace').get('tracer');
54
+ const [query, cost] = args;
55
+ // sequelize 在 benchmark 模式下以 (sql, 耗时 ms) 调用 logging,cost 为 unknown 时与原实现同样按假值/NaN 处理
56
+ if (tracer && cost > 0) {
57
+ tracer.queries.push({
58
+ query,
59
+ cost: cost * 1000,
60
+ finishedAt: getMicroTimestamp()
61
+ });
62
+ }
63
+ }
64
+ });
65
+ }
66
+ /**
67
+ * Scan all entity schemas under a special path
68
+ */
69
+ scan(entitiesPath, withAssociate = true) {
70
+ assert(this.sequelize && this.sequelize instanceof Sequelize, 'Scan entities require a sequelize instance');
71
+ // assert 收窄后的引用提为局部变量,供下方闭包使用
72
+ const sequelize = this.sequelize;
73
+ fs
74
+ .readdirSync(entitiesPath)
75
+ .filter((file) => {
76
+ const fileArray = file.split('.');
77
+ // split('.') 至少产生一段,pop() 不会返回 undefined
78
+ return (file.indexOf('.') !== 0) &&
79
+ (['js', 'es6', 'cjs'].indexOf(fileArray.pop()) !== -1) && (fileArray[0] !== 'index');
80
+ })
81
+ .forEach((file) => {
82
+ const entityModule = require(path.join(entitiesPath, file));
83
+ const entityFactory = (entityModule.default || entityModule);
84
+ // 模型类同样满足 typeof 'function'(带构造签名),运行时保持原判定:仅工厂被调用
85
+ const entity = typeof entityFactory === 'function' ?
86
+ entityFactory(sequelize, Sequelize) : entityFactory;
87
+ this.entities[entity.name] = entity;
88
+ });
89
+ if (!withAssociate) {
90
+ return this;
91
+ }
92
+ Object.values(this.entities).forEach((entity) => {
93
+ if ('associate' in entity) {
94
+ entity.associate(this.entities);
95
+ }
96
+ });
97
+ return this;
98
+ }
99
+ /**
100
+ * Init sequelize instance from DI config
101
+ */
102
+ init(withAssociate = true) {
103
+ if (this.sequelize && this.scanned) {
104
+ return this.sequelize;
105
+ }
106
+ const logger = DI.get('logger').getInstance();
107
+ if (!this.sequelize) {
108
+ // Config.get 公共签名返回 unknown,这里只消费 db 与 sequelize 两个配置段
109
+ const config = DI.get('config').get();
110
+ const ns = DI.get('namespace');
111
+ if (ns.isEnabled()) {
112
+ //Inject sequelize inner namespace, refer: http://docs.sequelizejs.com/en/latest/docs/transactions/
113
+ const context = ns.use().getContext();
114
+ if (typeof Sequelize.useCLS === 'function') {
115
+ Sequelize.useCLS(context);
116
+ }
117
+ else {
118
+ // 老版本回退分支;sequelize 自带类型未声明 cls 静态属性
119
+ Sequelize.cls = context;
120
+ }
121
+ }
122
+ const dbConfig = cloneDeep(config.db);
123
+ if (process.env.SEQUELIZE_REPLICATION_CONFIG_KEY) {
124
+ dbConfig.replication = dbConfig[process.env.SEQUELIZE_REPLICATION_CONFIG_KEY];
125
+ }
126
+ const sequelizeOptions = Object.assign({}, config.sequelize, dbConfig);
127
+ if (sequelizeOptions.logging !== false) {
128
+ Object.assign(sequelizeOptions, Entities.addTracer());
129
+ }
130
+ // sequelize 类型声明 username/password 为必填 string;运行时保留原 null 实参
131
+ this.sequelize = new Sequelize(config.db.database, null, null, sequelizeOptions);
132
+ }
133
+ else {
134
+ this.sequelize = typeof this.sequelize === 'function' ? this.sequelize() : this.sequelize;
135
+ }
136
+ this.scan(this.entitiesPath, withAssociate);
137
+ this.scanned = true;
138
+ logger.debug('Entities init by scanned %s', this.entitiesPath);
139
+ return this;
140
+ }
141
+ /**
142
+ * Shortcut for Sequelize query
143
+ */
144
+ query(sql, bind = {}, options = {}) {
145
+ return this.getInstance().query(sql, Object.assign({
146
+ type: QueryTypes.SELECT
147
+ }, options, { bind }));
148
+ }
149
+ /**
150
+ * A shortcut to prevent repeat insert
151
+ */
152
+ uniqueInsert({ tableName, input, uniqueCondition, transaction }, options = {}) {
153
+ const inputObj = Object.assign({}, input);
154
+ const typeAllowed = ['number', 'string', 'boolean'];
155
+ Object.entries(inputObj).forEach((p) => {
156
+ const valType = typeof p[1];
157
+ //Allow null type here
158
+ if (typeAllowed.indexOf(valType) === -1 && p[1] !== null) {
159
+ throw new StandardException(`SQL inputObj ${p[0]}:${p[1]} with unsupported type ${valType}.`);
160
+ }
161
+ else if (valType === 'boolean') {
162
+ if (p[1] === true) {
163
+ inputObj[p[0]] = 1;
164
+ }
165
+ else {
166
+ inputObj[p[0]] = 0;
167
+ }
168
+ }
169
+ });
170
+ const columns = Object.keys(inputObj);
171
+ const columnString = ['`', columns.join('`, `'), '`'].join('');
172
+ const valueString = Object.entries(inputObj).map(([key]) => `$${key} \`${key}\``).join(' , ');
173
+ // sequelize 自带类型未声明实例的 dialect 属性
174
+ const uniqueString = typeof uniqueCondition === 'string' ? uniqueCondition :
175
+ [`SELECT * FROM ${tableName} WHERE `, this.getInstance().dialect.QueryGenerator.getWhereConditions(uniqueCondition)].join('');
176
+ /*
177
+ Original Example:
178
+ entities.getInstance().query(`INSERT INTO ${tableName}
179
+ (userId, status)
180
+ (
181
+ SELECT *
182
+ FROM (SELECT $userId userId, $status status) AS tmp
183
+ WHERE NOT EXISTS (
184
+ SELECT id FROM ${auditTable} WHERE userId = $userId AND status = 'pending'
185
+ ) LIMIT 1
186
+ )`, { bind, transaction, type: entities.getSequelize().QueryTypes.INSERT });
187
+ */
188
+ const sql = `INSERT INTO ${tableName}
189
+ (${columnString})
190
+ (
191
+ SELECT *
192
+ FROM (SELECT ${valueString}) AS tmp
193
+ WHERE NOT EXISTS (
194
+ ${uniqueString} FOR UPDATE
195
+ ) LIMIT 1
196
+ )`; //add FOR UPDATE to use eXclusive Lock
197
+ return this.getInstance().query(sql, Object.assign({
198
+ bind: inputObj,
199
+ transaction,
200
+ type: QueryTypes.INSERT
201
+ }, options));
202
+ }
203
+ /**
204
+ * A short cut to start a database transaction
205
+ */
206
+ getTransaction(options = {}) {
207
+ return this.getInstance().transaction(Object.assign({
208
+ autocommit: true
209
+ }, options));
210
+ }
211
+ getSequelize() {
212
+ return Sequelize;
213
+ }
214
+ getInstance() {
215
+ this.init();
216
+ // scan() 内的 instanceof 断言保证 init() 之后必为 Sequelize 实例
217
+ return this.sequelize;
218
+ }
219
+ get(name) {
220
+ this.init();
221
+ return this.entities[name];
222
+ }
223
+ getAll() {
224
+ this.init();
225
+ return this.entities;
226
+ }
227
+ }
228
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/entities/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,153 @@
1
+ /**
2
+ * Accepted constructor inputs for exceptions
3
+ */
4
+ export type ExceptionInput = StandardException | Error | string | null | undefined;
5
+ /**
6
+ * Exception interface
7
+ * Support usages:
8
+ * throw new Exception();
9
+ * throw new Exception('Something');
10
+ * throw new Exception(new Error());
11
+ * throw new Exception(new Exception());
12
+ * throw (new Exception()).i18n('some %d', 123)
13
+ */
14
+ export declare class StandardException extends Error {
15
+ /**
16
+ * Generate string hash by crc32
17
+ */
18
+ static hash(str: string, padstr?: string): string;
19
+ /**
20
+ * Hash an exception into an 18 bits code
21
+ */
22
+ static generateCode(className: string, fileName?: string): number;
23
+ /**
24
+ * Remove useless info from error stack
25
+ */
26
+ static stackBeautifier(stack: string): string[];
27
+ static setI18nHandler(handler: (...args: unknown[]) => string): void;
28
+ /**
29
+ * Deserialize an exception from a JSON object
30
+ */
31
+ static factory(json?: Record<string, unknown>): StandardException | Record<string, unknown> | undefined;
32
+ /**
33
+ * Http status code
34
+ */
35
+ get statusCode(): number;
36
+ humanMessage: string;
37
+ throwingError: boolean;
38
+ details: unknown;
39
+ prevError: unknown;
40
+ code: number | null;
41
+ filename: string;
42
+ translated: boolean;
43
+ importance: number;
44
+ /**
45
+ * If throw a StandardException, keep throw to above
46
+ * If throw a Error, set Error message to exception message, set Error to details
47
+ * If throw a String, set String to exception message
48
+ * If throw a null or undefined, set exception name as exception message
49
+ * Otherwise, throw a TypeError
50
+ */
51
+ constructor(exceptionOrMsg?: ExceptionInput);
52
+ i18n(...args: unknown[]): this;
53
+ getHumanMessage(): string;
54
+ setMessage(message: string): this;
55
+ setCode(code: number | string): this;
56
+ getCode(): number;
57
+ getStatusCode(): number;
58
+ setImportance(importance: number | string): this;
59
+ getImportance(): number;
60
+ setFileName(filename: string): this;
61
+ getFileName(): string;
62
+ setDetails(details: unknown): this;
63
+ getDetails(): unknown[];
64
+ setPrevError(prevError: unknown): this;
65
+ getPrevError(): unknown;
66
+ toJSON(): {
67
+ statusCode: number;
68
+ code: number;
69
+ name: string;
70
+ message: string;
71
+ humanMessage: string;
72
+ filename: string;
73
+ prevError: unknown;
74
+ errors: unknown[];
75
+ stack: string[];
76
+ fullStack: string[];
77
+ };
78
+ }
79
+ export declare class LogicException extends StandardException {
80
+ get statusCode(): number;
81
+ }
82
+ export declare class InvalidArgumentException extends LogicException {
83
+ }
84
+ export declare class FormInvalidateException extends InvalidArgumentException {
85
+ constructor(exceptionOrMsg?: ExceptionInput);
86
+ }
87
+ export declare class ModelInvalidateException extends InvalidArgumentException {
88
+ constructor(exceptionOrMsg?: ExceptionInput);
89
+ }
90
+ export declare class HttpRequestLogicException extends InvalidArgumentException {
91
+ response: unknown;
92
+ request: unknown;
93
+ requestParams: unknown;
94
+ responseParams: unknown;
95
+ businessCode: unknown;
96
+ /**
97
+ * Support request promise error
98
+ * https://github.com/request/promise-core/blob/master/lib/errors.js
99
+ */
100
+ constructor(exceptionOrMsg?: ExceptionInput);
101
+ setResponse(response: unknown): this;
102
+ getRequest(): {};
103
+ getResponse(): {};
104
+ setRequestParams(params: unknown): this;
105
+ getRequestParams(): unknown;
106
+ setResponseParams(params: unknown): this;
107
+ getResponseParams(): unknown;
108
+ setBusinessCode(code: unknown): this;
109
+ getBusinessCode(): unknown;
110
+ }
111
+ export declare class RestServiceLogicException extends HttpRequestLogicException {
112
+ constructor(exceptionOrMsg?: ExceptionInput);
113
+ }
114
+ export declare class UnauthorizedException extends LogicException {
115
+ get statusCode(): number;
116
+ }
117
+ export declare class OperationNotPermittedException extends LogicException {
118
+ get statusCode(): number;
119
+ }
120
+ export declare class ResourceNotFoundException extends LogicException {
121
+ get statusCode(): number;
122
+ }
123
+ export declare class OperationUnsupportedException extends LogicException {
124
+ get statusCode(): number;
125
+ }
126
+ export declare class ResourceConflictedException extends LogicException {
127
+ get statusCode(): number;
128
+ }
129
+ export declare class RuntimeException extends StandardException {
130
+ }
131
+ export declare class IOException extends RuntimeException {
132
+ }
133
+ export declare class HttpRequestIOException extends IOException {
134
+ response: unknown;
135
+ request: unknown;
136
+ requestParams: unknown;
137
+ responseParams: unknown;
138
+ businessCode: unknown;
139
+ constructor(exceptionOrMsg?: ExceptionInput);
140
+ getRequest(): unknown;
141
+ getResponse(): unknown;
142
+ setRequestParams(params: unknown): this;
143
+ getRequestParams(): unknown;
144
+ setResponseParams(params: unknown): this;
145
+ getResponseParams(): unknown;
146
+ setBusinessCode(code: unknown): this;
147
+ getBusinessCode(): unknown;
148
+ }
149
+ export declare class RestServiceIOException extends HttpRequestIOException {
150
+ constructor(exceptionOrMsg?: ExceptionInput);
151
+ }
152
+ export declare class DatabaseIOException extends IOException {
153
+ }