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