@innet/server 2.0.0-alpha.3 → 2.0.0-alpha.31

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 (310) hide show
  1. package/README.md +1380 -523
  2. package/handler/handler.d.ts +19 -13
  3. package/handler/handler.es6.js +17 -11
  4. package/handler/handler.js +17 -11
  5. package/hooks/index.d.ts +7 -0
  6. package/hooks/index.es6.js +7 -0
  7. package/hooks/index.js +7 -0
  8. package/hooks/useAction/useAction.es6.js +1 -1
  9. package/hooks/useAction/useAction.js +1 -1
  10. package/hooks/useApi/useApi.d.ts +1 -3
  11. package/hooks/useClientIp/index.d.ts +1 -0
  12. package/hooks/useClientIp/index.es6.js +1 -0
  13. package/hooks/useClientIp/index.js +9 -0
  14. package/hooks/useClientIp/useClientIp.d.ts +1 -0
  15. package/hooks/useClientIp/useClientIp.es6.js +9 -0
  16. package/hooks/useClientIp/useClientIp.js +13 -0
  17. package/hooks/useComponentName/useComponentName.d.ts +1 -1
  18. package/hooks/useEndpoint/useEndpoint.d.ts +1 -1
  19. package/hooks/useEndpoint/useEndpoint.es6.js +3 -1
  20. package/hooks/useEndpoint/useEndpoint.js +3 -1
  21. package/hooks/useIsServerHttps/index.d.ts +1 -0
  22. package/hooks/useIsServerHttps/index.es6.js +1 -0
  23. package/hooks/useIsServerHttps/index.js +10 -0
  24. package/hooks/useIsServerHttps/useIsServerHttps.d.ts +3 -0
  25. package/hooks/useIsServerHttps/useIsServerHttps.es6.js +14 -0
  26. package/hooks/useIsServerHttps/useIsServerHttps.js +19 -0
  27. package/hooks/useObjectSchemaContext/index.d.ts +1 -0
  28. package/hooks/useObjectSchemaContext/index.es6.js +1 -0
  29. package/hooks/useObjectSchemaContext/index.js +10 -0
  30. package/hooks/useObjectSchemaContext/useObjectSchemaContext.d.ts +3 -0
  31. package/hooks/useObjectSchemaContext/useObjectSchemaContext.es6.js +14 -0
  32. package/hooks/useObjectSchemaContext/useObjectSchemaContext.js +19 -0
  33. package/hooks/useRequest/index.es6.js +1 -1
  34. package/hooks/useRequest/index.js +0 -1
  35. package/hooks/useRequest/useRequest.d.ts +1 -4
  36. package/hooks/useRequest/useRequest.es6.js +4 -4
  37. package/hooks/useRequest/useRequest.js +3 -4
  38. package/hooks/useRequestHandler/index.d.ts +1 -0
  39. package/hooks/useRequestHandler/index.es6.js +1 -0
  40. package/hooks/useRequestHandler/index.js +10 -0
  41. package/hooks/useRequestHandler/useRequestHandler.d.ts +4 -0
  42. package/hooks/useRequestHandler/useRequestHandler.es6.js +14 -0
  43. package/hooks/useRequestHandler/useRequestHandler.js +19 -0
  44. package/hooks/useResponse/index.es6.js +1 -1
  45. package/hooks/useResponse/index.js +0 -1
  46. package/hooks/useResponse/useResponse.d.ts +1 -4
  47. package/hooks/useResponse/useResponse.es6.js +4 -4
  48. package/hooks/useResponse/useResponse.js +3 -4
  49. package/hooks/useSchemaType/useSchemaType.d.ts +3 -2
  50. package/hooks/useSchemaType/useSchemaType.es6.js +5 -6
  51. package/hooks/useSchemaType/useSchemaType.js +5 -6
  52. package/hooks/useServer/useServer.d.ts +2 -1
  53. package/hooks/useServer/useServer.es6.js +3 -1
  54. package/hooks/useServer/useServer.js +3 -1
  55. package/hooks/useServerPlugin/index.d.ts +1 -0
  56. package/hooks/useServerPlugin/index.es6.js +1 -0
  57. package/hooks/useServerPlugin/index.js +9 -0
  58. package/hooks/useServerPlugin/useServerPlugin.d.ts +2 -0
  59. package/hooks/useServerPlugin/useServerPlugin.es6.js +13 -0
  60. package/hooks/useServerPlugin/useServerPlugin.js +17 -0
  61. package/hooks/useServerPlugins/index.d.ts +1 -0
  62. package/hooks/useServerPlugins/index.es6.js +1 -0
  63. package/hooks/useServerPlugins/index.js +10 -0
  64. package/hooks/useServerPlugins/useServerPlugins.d.ts +4 -0
  65. package/hooks/useServerPlugins/useServerPlugins.es6.js +14 -0
  66. package/hooks/useServerPlugins/useServerPlugins.js +19 -0
  67. package/hooks/useServerPort/index.d.ts +1 -0
  68. package/hooks/useServerPort/index.es6.js +1 -0
  69. package/hooks/useServerPort/index.js +10 -0
  70. package/hooks/useServerPort/useServerPort.d.ts +3 -0
  71. package/hooks/useServerPort/useServerPort.es6.js +14 -0
  72. package/hooks/useServerPort/useServerPort.js +19 -0
  73. package/index.es6.js +18 -8
  74. package/index.js +37 -12
  75. package/package.json +2 -2
  76. package/plugins/main/api/api.d.ts +10 -8
  77. package/plugins/main/api/api.es6.js +53 -55
  78. package/plugins/main/api/api.js +53 -55
  79. package/plugins/main/contact/contact.d.ts +2 -2
  80. package/plugins/main/endpoint/endpoint.d.ts +15 -15
  81. package/plugins/main/endpoint/endpoint.es6.js +7 -4
  82. package/plugins/main/endpoint/endpoint.js +7 -4
  83. package/plugins/main/host/host.d.ts +5 -5
  84. package/plugins/main/index.d.ts +2 -2
  85. package/plugins/main/index.es6.js +2 -2
  86. package/plugins/main/index.js +2 -2
  87. package/plugins/main/license/license.d.ts +5 -5
  88. package/plugins/main/param/param.d.ts +11 -11
  89. package/plugins/main/param/param.es6.js +3 -3
  90. package/plugins/main/param/param.js +3 -3
  91. package/plugins/main/preset/index.d.ts +1 -0
  92. package/plugins/main/preset/index.es6.js +1 -0
  93. package/plugins/{utils/prod → main/preset}/index.js +2 -2
  94. package/plugins/main/preset/preset.d.ts +3 -0
  95. package/plugins/main/preset/preset.es6.js +13 -0
  96. package/plugins/{utils/dev/dev.js → main/preset/preset.js} +9 -6
  97. package/plugins/main/response/index.es6.js +1 -1
  98. package/plugins/main/response/index.js +1 -0
  99. package/plugins/main/response/response.d.ts +6 -2
  100. package/plugins/main/response/response.es6.js +21 -11
  101. package/plugins/main/response/response.js +21 -10
  102. package/plugins/main/return/index.d.ts +1 -0
  103. package/plugins/main/return/index.es6.js +1 -0
  104. package/plugins/main/return/index.js +9 -0
  105. package/plugins/main/return/return.d.ts +4 -0
  106. package/plugins/main/return/return.es6.js +10 -0
  107. package/plugins/main/return/return.js +14 -0
  108. package/plugins/main/server/server.d.ts +5 -5
  109. package/plugins/main/server/server.es6.js +38 -10
  110. package/plugins/main/server/server.js +38 -10
  111. package/plugins/main/tag/tag.d.ts +2 -2
  112. package/plugins/main/tag/tag.es6.js +5 -2
  113. package/plugins/main/tag/tag.js +5 -2
  114. package/plugins/main/variable/variable.d.ts +5 -5
  115. package/plugins/main/variable/variable.es6.js +3 -1
  116. package/plugins/main/variable/variable.js +3 -1
  117. package/plugins/request/cms/cms.es6.js +2 -2
  118. package/plugins/request/cms/cms.js +2 -2
  119. package/plugins/request/cookie/cookie.es6.js +3 -19
  120. package/plugins/request/cookie/cookie.js +3 -23
  121. package/plugins/request/error/error.d.ts +40 -40
  122. package/plugins/request/error/error.es6.js +45 -42
  123. package/plugins/request/error/error.js +45 -42
  124. package/plugins/request/file/file.es6.js +2 -3
  125. package/plugins/request/file/file.js +2 -3
  126. package/plugins/request/header/header.es6.js +1 -1
  127. package/plugins/request/header/header.js +1 -1
  128. package/plugins/request/proxy/proxy.d.ts +4 -1
  129. package/plugins/request/proxy/proxy.es6.js +5 -2
  130. package/plugins/request/proxy/proxy.js +5 -2
  131. package/plugins/request/redirect/redirect.d.ts +8 -7
  132. package/plugins/request/redirect/redirect.es6.js +7 -7
  133. package/plugins/request/redirect/redirect.js +7 -7
  134. package/plugins/request/success/success.d.ts +7 -6
  135. package/plugins/request/success/success.es6.js +21 -10
  136. package/plugins/request/success/success.js +21 -10
  137. package/plugins/schema/any/any.d.ts +5 -0
  138. package/plugins/schema/any/any.es6.js +27 -0
  139. package/plugins/schema/any/any.js +31 -0
  140. package/plugins/schema/binary/binary.d.ts +3 -3
  141. package/plugins/schema/boolean/boolean.es6.js +2 -4
  142. package/plugins/schema/boolean/boolean.js +1 -3
  143. package/plugins/schema/date/date.d.ts +1 -1
  144. package/plugins/schema/date/date.es6.js +3 -3
  145. package/plugins/schema/date/date.js +3 -3
  146. package/plugins/schema/field/field.d.ts +1 -0
  147. package/plugins/schema/field/field.es6.js +7 -6
  148. package/plugins/schema/field/field.js +6 -5
  149. package/plugins/schema/index.d.ts +1 -0
  150. package/plugins/schema/index.es6.js +1 -0
  151. package/plugins/schema/index.js +1 -0
  152. package/plugins/schema/integer/integer.d.ts +3 -3
  153. package/plugins/schema/integer/integer.es6.js +1 -1
  154. package/plugins/schema/integer/integer.js +1 -1
  155. package/plugins/schema/number/number.d.ts +2 -2
  156. package/plugins/schema/number/number.es6.js +1 -1
  157. package/plugins/schema/number/number.js +1 -1
  158. package/plugins/schema/object/object.es6.js +17 -4
  159. package/plugins/schema/object/object.js +17 -4
  160. package/plugins/schema/string/string.d.ts +2 -2
  161. package/plugins/schema/string/string.es6.js +44 -30
  162. package/plugins/schema/string/string.js +44 -30
  163. package/plugins/utils/blacklist/blacklist.d.ts +4 -0
  164. package/plugins/utils/blacklist/blacklist.es6.js +18 -0
  165. package/plugins/utils/blacklist/blacklist.js +22 -0
  166. package/plugins/utils/blacklist/index.d.ts +1 -0
  167. package/plugins/utils/blacklist/index.es6.js +1 -0
  168. package/plugins/utils/blacklist/index.js +9 -0
  169. package/plugins/utils/dts/dts.d.ts +3 -3
  170. package/plugins/utils/dts/dts.es6.js +6 -25
  171. package/plugins/utils/dts/dts.js +5 -29
  172. package/plugins/utils/env/env.d.ts +6 -0
  173. package/plugins/utils/env/env.es6.js +11 -0
  174. package/plugins/utils/{prod/prod.js → env/env.js} +4 -3
  175. package/plugins/utils/env/index.d.ts +1 -0
  176. package/plugins/utils/env/index.es6.js +1 -0
  177. package/plugins/utils/{dev → env}/index.js +2 -2
  178. package/plugins/utils/index.d.ts +4 -2
  179. package/plugins/utils/index.es6.js +4 -2
  180. package/plugins/utils/index.js +4 -2
  181. package/plugins/utils/protection/index.d.ts +1 -0
  182. package/plugins/utils/protection/index.es6.js +1 -0
  183. package/plugins/utils/protection/index.js +9 -0
  184. package/plugins/utils/protection/protection.d.ts +8 -0
  185. package/plugins/utils/protection/protection.es6.js +36 -0
  186. package/plugins/utils/protection/protection.js +40 -0
  187. package/plugins/utils/swagger/swagger.es6.js +10 -12
  188. package/plugins/utils/swagger/swagger.js +10 -12
  189. package/plugins/utils/whitelist/index.d.ts +1 -0
  190. package/plugins/utils/whitelist/index.es6.js +1 -0
  191. package/plugins/utils/whitelist/index.js +9 -0
  192. package/plugins/utils/whitelist/whitelist.d.ts +4 -0
  193. package/plugins/utils/whitelist/whitelist.es6.js +20 -0
  194. package/plugins/utils/whitelist/whitelist.js +24 -0
  195. package/types.d.ts +15 -23
  196. package/utils/FileData/Bin.d.ts +13 -13
  197. package/utils/FileData/Bin.es6.js +2 -2
  198. package/utils/FileData/Bin.js +2 -2
  199. package/utils/action/Action.d.ts +17 -14
  200. package/utils/action/Action.es6.js +102 -78
  201. package/utils/action/Action.js +102 -78
  202. package/utils/dateFormat/dateFormat.d.ts +1 -1
  203. package/utils/dateFormat/dateFormat.es6.js +1 -1
  204. package/utils/dateFormat/dateFormat.js +1 -1
  205. package/utils/generateTypes/generateTypes.d.ts +3 -0
  206. package/utils/generateTypes/generateTypes.es6.js +162 -0
  207. package/utils/generateTypes/generateTypes.js +167 -0
  208. package/utils/generateTypes/index.d.ts +1 -0
  209. package/utils/generateTypes/index.es6.js +1 -0
  210. package/utils/generateTypes/index.js +10 -0
  211. package/utils/getEndpoint/getEndpoint.es6.js +2 -2
  212. package/utils/getEndpoint/getEndpoint.js +2 -2
  213. package/utils/getOrAdd/getOrAdd.d.ts +1 -1
  214. package/utils/httpOnStart/httpOnStart.d.ts +1 -1
  215. package/utils/httpOnStart/httpOnStart.es6.js +1 -1
  216. package/utils/httpOnStart/httpOnStart.js +1 -1
  217. package/utils/index.d.ts +1 -0
  218. package/utils/index.es6.js +1 -0
  219. package/utils/index.js +1 -0
  220. package/utils/rules/binaryAccept/binaryAccept.es6.js +2 -2
  221. package/utils/rules/binaryAccept/binaryAccept.js +2 -2
  222. package/utils/rules/dateTo/dateTo.d.ts +1 -1
  223. package/utils/rules/helpers.d.ts +1 -1
  224. package/utils/rules/index.d.ts +0 -1
  225. package/utils/rules/index.es6.js +0 -1
  226. package/utils/rules/index.js +0 -1
  227. package/utils/rules/int/int.es6.js +2 -2
  228. package/utils/rules/int/int.js +2 -2
  229. package/utils/rules/max/max.d.ts +1 -1
  230. package/utils/rules/max/max.es6.js +3 -3
  231. package/utils/rules/max/max.js +3 -3
  232. package/utils/rules/maxBin/maxBin.es6.js +2 -2
  233. package/utils/rules/maxBin/maxBin.js +2 -2
  234. package/utils/rules/maxDate/maxDate.es6.js +1 -1
  235. package/utils/rules/maxDate/maxDate.js +1 -1
  236. package/utils/rules/maxLength/maxLength.es6.js +2 -2
  237. package/utils/rules/maxLength/maxLength.js +2 -2
  238. package/utils/rules/min/min.d.ts +1 -1
  239. package/utils/rules/min/min.es6.js +3 -3
  240. package/utils/rules/min/min.js +3 -3
  241. package/utils/rules/minBin/minBin.es6.js +2 -2
  242. package/utils/rules/minBin/minBin.js +2 -2
  243. package/utils/rules/minDate/minDate.es6.js +1 -1
  244. package/utils/rules/minDate/minDate.js +1 -1
  245. package/utils/rules/minLength/minLength.es6.js +2 -2
  246. package/utils/rules/minLength/minLength.js +2 -2
  247. package/utils/rules/objectOf/objectOf.d.ts +1 -1
  248. package/utils/rules/objectOf/objectOf.es6.js +15 -2
  249. package/utils/rules/objectOf/objectOf.js +15 -2
  250. package/utils/rules/pattern/pattern.d.ts +1 -1
  251. package/utils/rules/pattern/pattern.es6.js +2 -1
  252. package/utils/rules/pattern/pattern.js +2 -1
  253. package/example/app/App/App.d.ts +0 -1
  254. package/example/app/App/index.d.ts +0 -1
  255. package/example/index.d.ts +0 -1
  256. package/example/requests/index.d.ts +0 -1
  257. package/example/requests/partners/EditPartner/EditPartner.d.ts +0 -1
  258. package/example/requests/partners/EditPartner/index.d.ts +0 -1
  259. package/example/requests/partners/GetPartner/GetPartner.d.ts +0 -1
  260. package/example/requests/partners/GetPartner/index.d.ts +0 -1
  261. package/example/requests/partners/GetPartners/GetPartners.d.ts +0 -1
  262. package/example/requests/partners/GetPartners/index.d.ts +0 -1
  263. package/example/requests/partners/index.d.ts +0 -3
  264. package/example/schemas/address/AddressSchema/AddressSchema.d.ts +0 -1
  265. package/example/schemas/address/AddressSchema/index.d.ts +0 -1
  266. package/example/schemas/address/index.d.ts +0 -1
  267. package/example/schemas/app/ListSchema/ListSchema.d.ts +0 -1
  268. package/example/schemas/app/ListSchema/index.d.ts +0 -1
  269. package/example/schemas/app/index.d.ts +0 -1
  270. package/example/schemas/index.d.ts +0 -4
  271. package/example/schemas/location/LocationSchema/LocationSchema.d.ts +0 -1
  272. package/example/schemas/location/LocationSchema/index.d.ts +0 -1
  273. package/example/schemas/location/index.d.ts +0 -1
  274. package/example/schemas/partner/EditPartnerSchema/EditPartnerSchema.d.ts +0 -1
  275. package/example/schemas/partner/EditPartnerSchema/index.d.ts +0 -1
  276. package/example/schemas/partner/PartnerSchema/PartnerSchema.d.ts +0 -1
  277. package/example/schemas/partner/PartnerSchema/index.d.ts +0 -1
  278. package/example/schemas/partner/index.d.ts +0 -2
  279. package/example/tags/Partner/Partner.d.ts +0 -1
  280. package/example/tags/Partner/index.d.ts +0 -1
  281. package/example/tags/index.d.ts +0 -1
  282. package/openApi.test.d.ts +0 -1
  283. package/plugins/main/fallback/fallback.d.ts +0 -4
  284. package/plugins/main/fallback/fallback.es6.js +0 -19
  285. package/plugins/main/fallback/fallback.js +0 -23
  286. package/plugins/main/fallback/index.d.ts +0 -1
  287. package/plugins/main/fallback/index.es6.js +0 -1
  288. package/plugins/main/fallback/index.js +0 -9
  289. package/plugins/main/request/index.d.ts +0 -1
  290. package/plugins/main/request/index.es6.js +0 -1
  291. package/plugins/main/request/index.js +0 -9
  292. package/plugins/main/request/request.d.ts +0 -4
  293. package/plugins/main/request/request.es6.js +0 -21
  294. package/plugins/main/request/request.js +0 -25
  295. package/plugins/utils/dev/dev.d.ts +0 -4
  296. package/plugins/utils/dev/dev.es6.js +0 -10
  297. package/plugins/utils/dev/index.d.ts +0 -1
  298. package/plugins/utils/dev/index.es6.js +0 -1
  299. package/plugins/utils/prod/index.d.ts +0 -1
  300. package/plugins/utils/prod/index.es6.js +0 -1
  301. package/plugins/utils/prod/prod.d.ts +0 -4
  302. package/plugins/utils/prod/prod.es6.js +0 -10
  303. package/utils/decorators/once/once.test.d.ts +0 -1
  304. package/utils/parseSearch/parseSearch.test.d.ts +0 -1
  305. package/utils/rules/any/any.d.ts +0 -1
  306. package/utils/rules/any/any.es6.js +0 -5
  307. package/utils/rules/any/any.js +0 -9
  308. /package/{utils/rules → plugins/schema}/any/index.d.ts +0 -0
  309. /package/{utils/rules → plugins/schema}/any/index.es6.js +0 -0
  310. /package/{utils/rules → plugins/schema}/any/index.js +0 -0
@@ -0,0 +1,4 @@
1
+ export interface WhitelistProps {
2
+ ip?: string | string[];
3
+ }
4
+ export declare function whitelist(): void;
@@ -0,0 +1,20 @@
1
+ import { useProps, useChildren } from '@innet/jsx';
2
+ import '../../../hooks/index.es6.js';
3
+ import { useServerPlugin } from '../../../hooks/useServerPlugin/useServerPlugin.es6.js';
4
+ import { useAction } from '../../../hooks/useAction/useAction.es6.js';
5
+
6
+ function whitelist() {
7
+ const { ip = process.env.INNET_WHITELIST_IP, } = useProps() || {};
8
+ const children = useChildren();
9
+ const ips = typeof ip === 'string' ? ip.split(',') : ip;
10
+ if (!ips)
11
+ return;
12
+ useServerPlugin(() => {
13
+ const action = useAction();
14
+ if (!action.clientIp || !ips.includes(action.clientIp)) {
15
+ return children;
16
+ }
17
+ });
18
+ }
19
+
20
+ export { whitelist };
@@ -0,0 +1,24 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var jsx = require('@innet/jsx');
6
+ require('../../../hooks/index.js');
7
+ var useServerPlugin = require('../../../hooks/useServerPlugin/useServerPlugin.js');
8
+ var useAction = require('../../../hooks/useAction/useAction.js');
9
+
10
+ function whitelist() {
11
+ const { ip = process.env.INNET_WHITELIST_IP, } = jsx.useProps() || {};
12
+ const children = jsx.useChildren();
13
+ const ips = typeof ip === 'string' ? ip.split(',') : ip;
14
+ if (!ips)
15
+ return;
16
+ useServerPlugin.useServerPlugin(() => {
17
+ const action = useAction.useAction();
18
+ if (!action.clientIp || !ips.includes(action.clientIp)) {
19
+ return children;
20
+ }
21
+ });
22
+ }
23
+
24
+ exports.whitelist = whitelist;
package/types.d.ts CHANGED
@@ -1,8 +1,6 @@
1
- /// <reference types="node" />
2
- import type { IncomingMessage, ServerResponse } from 'http';
3
- import type { Handler } from 'innet';
4
1
  import type { OpenAPIV3_1 as API } from 'openapi-types';
5
2
  import type { ApiErrorValue } from './constants';
3
+ import { type ServerPlugin } from './hooks';
6
4
  import { type Rule, type RulesErrors } from './utils/rules';
7
5
  export type TagObject = API.TagObject;
8
6
  export type Document = API.Document;
@@ -17,60 +15,54 @@ export type ReferenceObject = API.ReferenceObject;
17
15
  export type ParameterObject = API.ParameterObject;
18
16
  export type RequestBodyObject = API.RequestBodyObject;
19
17
  export type ObjectType = ArraySchemaObjectType | NonArraySchemaObjectType;
20
- export type RefSchemaObject = SchemaObject | ReferenceObject;
18
+ export type RefSchemaObject = ReferenceObject | SchemaObject;
21
19
  export interface IValidationErrorData extends Record<string, any> {
22
20
  error: RulesErrors;
23
21
  }
24
22
  export type ValidationErrorData = IValidationErrorData | undefined;
25
23
  export interface EndpointRules {
26
- path?: Rule;
27
- search?: Rule;
24
+ body?: Rule;
28
25
  cookie?: Rule;
29
26
  header?: Rule;
30
- body?: Rule;
27
+ path?: Rule;
31
28
  response?: Rule;
29
+ search?: Rule;
32
30
  }
33
31
  export interface EndpointRulesMaps {
34
- path?: Record<string, Rule>;
35
- search?: Record<string, Rule>;
36
32
  cookie?: Record<string, Rule>;
37
33
  header?: Record<string, Rule>;
34
+ path?: Record<string, Rule>;
35
+ search?: Record<string, Rule>;
38
36
  }
39
37
  export interface Endpoint<I = unknown, O = unknown, E extends ApiErrorValue = ApiErrorValue, P extends InValidationErrorParam = InValidationErrorParam, D extends ValidationErrorData = ValidationErrorData> {
38
+ dynamic?: Endpoint<I, O, E, P, D>[];
40
39
  key: string;
41
- content?: any;
40
+ plugins: Set<ServerPlugin>;
42
41
  rules?: EndpointRules;
43
42
  rulesMaps?: EndpointRulesMaps;
44
- handler?: Handler;
45
43
  static?: Record<string, Endpoint<I, O, E, P, D>>;
46
- dynamic?: Endpoint<I, O, E, P, D>[];
47
44
  }
48
45
  export type IntegerFormats = 'int32' | 'int64';
49
- export type EndpointsMethods = 'get' | 'post' | 'put' | 'patch' | 'delete' | 'options' | 'head' | 'trace';
50
- export type InParam = 'query' | 'header' | 'path' | 'cookie';
51
- export type InValidationErrorParam = InParam | 'body';
52
- export type BodyType = 'application/x-www-form-urlencoded' | 'application/json' | 'multipart/form-data';
46
+ export type EndpointsMethods = 'delete' | 'get' | 'head' | 'options' | 'patch' | 'post' | 'put' | 'trace';
47
+ export type InParam = 'cookie' | 'header' | 'path' | 'query';
48
+ export type InValidationErrorParam = 'body' | InParam;
49
+ export type BodyType = 'application/json' | 'application/x-www-form-urlencoded' | 'multipart/form-data';
53
50
  export type Endpoints<I = unknown, O = unknown, E extends ApiErrorValue = ApiErrorValue, P extends InValidationErrorParam = InValidationErrorParam, D extends ValidationErrorData = ValidationErrorData> = Partial<Record<EndpointsMethods, Endpoint<I, O, E, P, D>>>;
54
51
  export interface SSL {
55
52
  cert: string;
56
53
  key: string;
57
54
  }
58
55
  export interface ServerStartParams {
59
- port: number;
60
56
  https: boolean;
57
+ port: number;
61
58
  }
62
59
  export interface BaseSchemaProps<T> {
63
60
  default?: T;
61
+ description?: string;
64
62
  example?: T;
65
63
  examples?: T[];
66
- description?: string;
67
64
  ref?: string;
68
65
  }
69
66
  export interface ValuesSchemaProps<T> extends BaseSchemaProps<T> {
70
67
  values?: T[];
71
68
  }
72
- export interface Fallback {
73
- children: any;
74
- handler: Handler;
75
- }
76
- export type RequestPlugin = (req: IncomingMessage, res: ServerResponse) => boolean | undefined;
@@ -1,4 +1,5 @@
1
1
  export interface BinOptions {
2
+ disposition: string;
2
3
  /**
3
4
  * A field name of FormData request
4
5
  */
@@ -11,37 +12,36 @@ export interface BinOptions {
11
12
  * Full path to the file on server, you MUST use it only on server side for the safe
12
13
  */
13
14
  path: string;
14
- /**
15
- * MIME-type of the file
16
- */
17
- type: string;
18
- disposition: string;
19
15
  /**
20
16
  * The file size
21
17
  */
22
18
  size: number;
23
- }
24
- export declare class Bin implements BinOptions {
25
19
  /**
26
- * A file name, without extension
20
+ * MIME-type of the file
27
21
  */
28
- filename: string;
22
+ type: string;
23
+ }
24
+ export declare class Bin implements BinOptions {
25
+ disposition: string;
29
26
  /**
30
27
  * The extension of the origin file from originalFilename
31
28
  */
32
29
  extension?: string;
33
- type: string;
34
- disposition: string;
35
30
  fieldName: string;
31
+ /**
32
+ * A file name, without extension
33
+ */
34
+ filename: string;
36
35
  originalFilename: string;
37
36
  path: string;
38
37
  size: number;
38
+ type: string;
39
39
  constructor(options: BinOptions);
40
40
  toJSON(): {
41
41
  $: string;
42
- originalFilename: string;
43
- type: string;
44
42
  disposition: string;
43
+ originalFilename: string;
45
44
  size: number;
45
+ type: string;
46
46
  };
47
47
  }
@@ -8,10 +8,10 @@ class Bin {
8
8
  toJSON() {
9
9
  return {
10
10
  $: 'binary',
11
- originalFilename: this.originalFilename,
12
- type: this.type,
13
11
  disposition: this.disposition,
12
+ originalFilename: this.originalFilename,
14
13
  size: this.size,
14
+ type: this.type,
15
15
  };
16
16
  }
17
17
  }
@@ -12,10 +12,10 @@ class Bin {
12
12
  toJSON() {
13
13
  return {
14
14
  $: 'binary',
15
- originalFilename: this.originalFilename,
16
- type: this.type,
17
15
  disposition: this.disposition,
16
+ originalFilename: this.originalFilename,
18
17
  size: this.size,
18
+ type: this.type,
19
19
  };
20
20
  }
21
21
  }
@@ -1,6 +1,6 @@
1
1
  /// <reference types="node" />
2
- import type http from 'http';
3
- import { type IncomingHttpHeaders } from 'http';
2
+ import { type CookieSerializeOptions } from 'cookie';
3
+ import { type IncomingHttpHeaders, type IncomingMessage, type ServerResponse } from 'http';
4
4
  import { type ParsedQs } from 'qs';
5
5
  import { type BodyType } from '../../types';
6
6
  export declare const URL_PARSER: RegExp;
@@ -10,20 +10,23 @@ export interface ParsedUrl {
10
10
  }
11
11
  export declare class Action {
12
12
  #private;
13
- private readonly req;
14
- constructor(req: http.IncomingMessage);
13
+ readonly req: IncomingMessage;
14
+ readonly res: ServerResponse;
15
+ body?: object;
16
+ constructor(req: IncomingMessage, res: ServerResponse);
17
+ parseBody(): Promise<void>;
18
+ setCookie(name: string, value?: string, options?: CookieSerializeOptions): void;
19
+ get bodyType(): BodyType | undefined;
20
+ get clientIp(): string | null;
21
+ get cookies(): Record<string, string>;
22
+ set cookies(value: Record<string, string>);
23
+ get headers(): IncomingHttpHeaders;
24
+ set headers(value: IncomingHttpHeaders);
25
+ get originCookies(): Record<string, string>;
26
+ get originHeaders(): IncomingHttpHeaders;
27
+ get originSearch(): ParsedQs;
15
28
  get parsedUrl(): ParsedUrl;
16
29
  get path(): string;
17
- get originSearch(): ParsedQs;
18
30
  get search(): ParsedQs;
19
31
  set search(value: ParsedQs);
20
- get originHeaders(): IncomingHttpHeaders;
21
- get headers(): IncomingHttpHeaders;
22
- set headers(value: IncomingHttpHeaders);
23
- get originCookies(): Record<string, string>;
24
- get cookies(): Record<string, string>;
25
- set cookies(value: Record<string, string>);
26
- get bodyType(): BodyType | undefined;
27
- body?: object;
28
- parseBody(): Promise<void>;
29
32
  }
@@ -1,59 +1,85 @@
1
- import { __runInitializers, __classPrivateFieldGet, __classPrivateFieldSet, __awaiter, __esDecorate } from 'tslib';
2
- import cookie from 'cookie';
1
+ import { __runInitializers, __awaiter, __classPrivateFieldGet, __classPrivateFieldSet, __esDecorate } from 'tslib';
2
+ import cookieLib from 'cookie';
3
+ import { getClientIp } from 'request-ip';
3
4
  import '../decorators/index.es6.js';
4
5
  import '../parseBody/index.es6.js';
5
6
  import '../parseFormBody/index.es6.js';
6
7
  import '../parseSearch/index.es6.js';
7
8
  import { allBodyTypes } from '../../constants.es6.js';
8
- import { parseSearch } from '../parseSearch/parseSearch.es6.js';
9
9
  import { parseFormBody } from '../parseFormBody/parseFormBody.es6.js';
10
+ import { parseSearch } from '../parseSearch/parseSearch.es6.js';
10
11
  import { parseBody } from '../parseBody/parseBody.es6.js';
11
12
  import { once } from '../decorators/once/once.es6.js';
12
13
 
13
14
  const URL_PARSER = /^(?<path>[^?]+)(\?(?<search>.*))?/;
14
15
  let Action = (() => {
15
- var _a, _Action_search, _Action_headers, _Action_cookie;
16
+ var _a, _Action_cookie, _Action_headers, _Action_search;
16
17
  let _instanceExtraInitializers = [];
17
- let _get_parsedUrl_decorators;
18
- let _get_originSearch_decorators;
19
- let _get_originCookies_decorators;
20
- let _get_bodyType_decorators;
21
18
  let _parseBody_decorators;
19
+ let _get_bodyType_decorators;
20
+ let _get_clientIp_decorators;
21
+ let _get_originCookies_decorators;
22
+ let _get_originSearch_decorators;
23
+ let _get_parsedUrl_decorators;
22
24
  return _a = class Action {
23
- constructor(req) {
25
+ constructor(req, res) {
24
26
  this.req = (__runInitializers(this, _instanceExtraInitializers), req);
25
- _Action_search.set(this, void 0);
26
- _Action_headers.set(this, {});
27
+ this.res = res;
27
28
  _Action_cookie.set(this, {});
29
+ _Action_headers.set(this, {});
30
+ _Action_search.set(this, void 0);
28
31
  }
29
- get parsedUrl() {
30
- var _a;
31
- const match = (_a = this.req.url) === null || _a === void 0 ? void 0 : _a.match(URL_PARSER);
32
- if (!match)
33
- throw Error('cannot parse url');
34
- const result = match.groups;
35
- result.path = result.path
36
- .replaceAll(/\/\.\.\//g, '/')
37
- .replaceAll(/\/+/g, '/');
38
- return result;
32
+ parseBody() {
33
+ return __awaiter(this, void 0, void 0, function* () {
34
+ if (!this.bodyType) {
35
+ return;
36
+ }
37
+ if (this.bodyType === 'multipart/form-data') {
38
+ this.body = yield parseFormBody(this.req);
39
+ }
40
+ if (this.bodyType === 'application/x-www-form-urlencoded') {
41
+ this.body = parseSearch(yield parseBody(this.req));
42
+ }
43
+ if (this.bodyType === 'application/json') {
44
+ this.body = JSON.parse(yield parseBody(this.req));
45
+ }
46
+ });
39
47
  }
40
- get path() {
41
- return this.parsedUrl.path;
48
+ setCookie(name, value, options) {
49
+ let cookies = this.res.getHeader('Set-Cookie');
50
+ if (typeof cookies === 'string') {
51
+ cookies = [cookies];
52
+ }
53
+ const normValue = typeof value === 'string' ? cookieLib.serialize(name, value, options) : `${name}=; max-age=0`;
54
+ if (cookies) {
55
+ cookies.push(normValue);
56
+ }
57
+ else {
58
+ cookies = normValue;
59
+ }
60
+ this.res.setHeader('Set-Cookie', cookies);
42
61
  }
43
- get originSearch() {
44
- return parseSearch(this.parsedUrl.search);
62
+ get bodyType() {
63
+ const headerType = this.req.headers['content-type'];
64
+ if (!headerType)
65
+ return;
66
+ for (const bodyType of allBodyTypes) {
67
+ if (headerType.startsWith(bodyType)) {
68
+ return bodyType;
69
+ }
70
+ }
45
71
  }
46
- get search() {
47
- if (__classPrivateFieldGet(this, _Action_search, "f"))
48
- return __classPrivateFieldGet(this, _Action_search, "f");
49
- __classPrivateFieldSet(this, _Action_search, this.originSearch, "f");
50
- return __classPrivateFieldGet(this, _Action_search, "f");
72
+ get clientIp() {
73
+ return getClientIp(this.req);
51
74
  }
52
- set search(value) {
53
- __classPrivateFieldSet(this, _Action_search, value, "f");
75
+ get cookies() {
76
+ if (__classPrivateFieldGet(this, _Action_cookie, "f"))
77
+ return __classPrivateFieldGet(this, _Action_cookie, "f");
78
+ __classPrivateFieldSet(this, _Action_cookie, this.originCookies, "f");
79
+ return __classPrivateFieldGet(this, _Action_cookie, "f");
54
80
  }
55
- get originHeaders() {
56
- return this.req.headers;
81
+ set cookies(value) {
82
+ __classPrivateFieldSet(this, _Action_cookie, value, "f");
57
83
  }
58
84
  get headers() {
59
85
  if (__classPrivateFieldGet(this, _Action_headers, "f"))
@@ -65,59 +91,57 @@ let Action = (() => {
65
91
  __classPrivateFieldSet(this, _Action_headers, value, "f");
66
92
  }
67
93
  get originCookies() {
68
- var _a;
69
- return cookie.parse((_a = this.req.headers.cookie) !== null && _a !== void 0 ? _a : '');
94
+ var _b;
95
+ return cookieLib.parse((_b = this.req.headers.cookie) !== null && _b !== void 0 ? _b : '');
70
96
  }
71
- get cookies() {
72
- if (__classPrivateFieldGet(this, _Action_cookie, "f"))
73
- return __classPrivateFieldGet(this, _Action_cookie, "f");
74
- __classPrivateFieldSet(this, _Action_cookie, this.originCookies, "f");
75
- return __classPrivateFieldGet(this, _Action_cookie, "f");
97
+ get originHeaders() {
98
+ return this.req.headers;
76
99
  }
77
- set cookies(value) {
78
- __classPrivateFieldSet(this, _Action_cookie, value, "f");
100
+ get originSearch() {
101
+ return parseSearch(this.parsedUrl.search);
79
102
  }
80
- get bodyType() {
81
- const headerType = this.req.headers['content-type'];
82
- if (!headerType)
83
- return;
84
- for (const bodyType of allBodyTypes) {
85
- if (headerType.startsWith(bodyType)) {
86
- return bodyType;
87
- }
88
- }
103
+ get parsedUrl() {
104
+ var _b;
105
+ const match = (_b = this.req.url) === null || _b === void 0 ? void 0 : _b.match(URL_PARSER);
106
+ if (!match)
107
+ throw Error('cannot parse url');
108
+ const result = match.groups;
109
+ result.path = result.path
110
+ .replaceAll(/\/\.\.\//g, '/')
111
+ .replaceAll(/\/+/g, '/');
112
+ return result;
89
113
  }
90
- parseBody() {
91
- return __awaiter(this, void 0, void 0, function* () {
92
- if (!this.bodyType) {
93
- return;
94
- }
95
- if (this.bodyType === 'multipart/form-data') {
96
- this.body = yield parseFormBody(this.req);
97
- }
98
- if (this.bodyType === 'application/x-www-form-urlencoded') {
99
- this.body = parseSearch(yield parseBody(this.req));
100
- }
101
- if (this.bodyType === 'application/json') {
102
- this.body = JSON.parse(yield parseBody(this.req));
103
- }
104
- });
114
+ get path() {
115
+ return this.parsedUrl.path;
116
+ }
117
+ get search() {
118
+ if (__classPrivateFieldGet(this, _Action_search, "f"))
119
+ return __classPrivateFieldGet(this, _Action_search, "f");
120
+ __classPrivateFieldSet(this, _Action_search, this.originSearch, "f");
121
+ return __classPrivateFieldGet(this, _Action_search, "f");
122
+ }
123
+ set search(value) {
124
+ __classPrivateFieldSet(this, _Action_search, value, "f");
105
125
  }
106
126
  },
107
- _Action_search = new WeakMap(),
108
- _Action_headers = new WeakMap(),
109
127
  _Action_cookie = new WeakMap(),
128
+ _Action_headers = new WeakMap(),
129
+ _Action_search = new WeakMap(),
110
130
  (() => {
111
- _get_parsedUrl_decorators = [once];
112
- _get_originSearch_decorators = [once];
113
- _get_originCookies_decorators = [once];
114
- _get_bodyType_decorators = [once];
131
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(null) : void 0;
115
132
  _parseBody_decorators = [once];
116
- __esDecorate(_a, null, _get_parsedUrl_decorators, { kind: "getter", name: "parsedUrl", static: false, private: false, access: { has: obj => "parsedUrl" in obj, get: obj => obj.parsedUrl } }, null, _instanceExtraInitializers);
117
- __esDecorate(_a, null, _get_originSearch_decorators, { kind: "getter", name: "originSearch", static: false, private: false, access: { has: obj => "originSearch" in obj, get: obj => obj.originSearch } }, null, _instanceExtraInitializers);
118
- __esDecorate(_a, null, _get_originCookies_decorators, { kind: "getter", name: "originCookies", static: false, private: false, access: { has: obj => "originCookies" in obj, get: obj => obj.originCookies } }, null, _instanceExtraInitializers);
119
- __esDecorate(_a, null, _get_bodyType_decorators, { kind: "getter", name: "bodyType", static: false, private: false, access: { has: obj => "bodyType" in obj, get: obj => obj.bodyType } }, null, _instanceExtraInitializers);
120
- __esDecorate(_a, null, _parseBody_decorators, { kind: "method", name: "parseBody", static: false, private: false, access: { has: obj => "parseBody" in obj, get: obj => obj.parseBody } }, null, _instanceExtraInitializers);
133
+ _get_bodyType_decorators = [once];
134
+ _get_clientIp_decorators = [once];
135
+ _get_originCookies_decorators = [once];
136
+ _get_originSearch_decorators = [once];
137
+ _get_parsedUrl_decorators = [once];
138
+ __esDecorate(_a, null, _parseBody_decorators, { kind: "method", name: "parseBody", static: false, private: false, access: { has: obj => "parseBody" in obj, get: obj => obj.parseBody }, metadata: _metadata }, null, _instanceExtraInitializers);
139
+ __esDecorate(_a, null, _get_bodyType_decorators, { kind: "getter", name: "bodyType", static: false, private: false, access: { has: obj => "bodyType" in obj, get: obj => obj.bodyType }, metadata: _metadata }, null, _instanceExtraInitializers);
140
+ __esDecorate(_a, null, _get_clientIp_decorators, { kind: "getter", name: "clientIp", static: false, private: false, access: { has: obj => "clientIp" in obj, get: obj => obj.clientIp }, metadata: _metadata }, null, _instanceExtraInitializers);
141
+ __esDecorate(_a, null, _get_originCookies_decorators, { kind: "getter", name: "originCookies", static: false, private: false, access: { has: obj => "originCookies" in obj, get: obj => obj.originCookies }, metadata: _metadata }, null, _instanceExtraInitializers);
142
+ __esDecorate(_a, null, _get_originSearch_decorators, { kind: "getter", name: "originSearch", static: false, private: false, access: { has: obj => "originSearch" in obj, get: obj => obj.originSearch }, metadata: _metadata }, null, _instanceExtraInitializers);
143
+ __esDecorate(_a, null, _get_parsedUrl_decorators, { kind: "getter", name: "parsedUrl", static: false, private: false, access: { has: obj => "parsedUrl" in obj, get: obj => obj.parsedUrl }, metadata: _metadata }, null, _instanceExtraInitializers);
144
+ if (_metadata) Object.defineProperty(_a, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
121
145
  })(),
122
146
  _a;
123
147
  })();