@innet/server 2.0.0-alpha.13 → 2.0.0-alpha.15

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 (82) hide show
  1. package/README.md +356 -363
  2. package/handler/handler.d.ts +1 -3
  3. package/handler/handler.es6.js +0 -2
  4. package/handler/handler.js +0 -2
  5. package/hooks/index.d.ts +2 -1
  6. package/hooks/index.es6.js +2 -1
  7. package/hooks/index.js +2 -1
  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/useEndpoint/useEndpoint.es6.js +3 -1
  12. package/hooks/useEndpoint/useEndpoint.js +3 -1
  13. package/hooks/useServer/useServer.d.ts +1 -0
  14. package/hooks/useServerPlugin/index.d.ts +1 -0
  15. package/hooks/useServerPlugin/index.es6.js +1 -0
  16. package/hooks/useServerPlugin/index.js +9 -0
  17. package/hooks/useServerPlugin/useServerPlugin.d.ts +2 -0
  18. package/hooks/useServerPlugin/useServerPlugin.es6.js +13 -0
  19. package/hooks/useServerPlugin/useServerPlugin.js +17 -0
  20. package/hooks/useServerPlugins/index.d.ts +1 -0
  21. package/hooks/useServerPlugins/index.es6.js +1 -0
  22. package/hooks/useServerPlugins/index.js +10 -0
  23. package/hooks/useServerPlugins/useServerPlugins.d.ts +4 -0
  24. package/hooks/useServerPlugins/useServerPlugins.es6.js +14 -0
  25. package/hooks/useServerPlugins/useServerPlugins.js +19 -0
  26. package/index.es6.js +3 -3
  27. package/index.js +5 -5
  28. package/package.json +1 -1
  29. package/plugins/main/api/api.es6.js +34 -48
  30. package/plugins/main/api/api.js +33 -47
  31. package/plugins/main/endpoint/endpoint.es6.js +4 -1
  32. package/plugins/main/endpoint/endpoint.js +4 -1
  33. package/plugins/main/index.d.ts +0 -1
  34. package/plugins/main/index.es6.js +0 -1
  35. package/plugins/main/index.js +0 -1
  36. package/plugins/main/preset/index.es6.js +1 -1
  37. package/plugins/main/preset/index.js +0 -1
  38. package/plugins/main/preset/preset.d.ts +0 -4
  39. package/plugins/main/preset/preset.es6.js +6 -19
  40. package/plugins/main/preset/preset.js +4 -18
  41. package/plugins/main/request/request.es6.js +2 -13
  42. package/plugins/main/request/request.js +2 -13
  43. package/plugins/main/response/response.d.ts +1 -0
  44. package/plugins/main/response/response.es6.js +7 -7
  45. package/plugins/main/response/response.js +7 -7
  46. package/plugins/main/server/server.d.ts +3 -3
  47. package/plugins/main/server/server.es6.js +28 -6
  48. package/plugins/main/server/server.js +28 -6
  49. package/plugins/request/proxy/proxy.d.ts +3 -0
  50. package/plugins/request/proxy/proxy.es6.js +4 -1
  51. package/plugins/request/proxy/proxy.js +4 -1
  52. package/plugins/request/success/success.d.ts +1 -1
  53. package/plugins/request/success/success.es6.js +4 -4
  54. package/plugins/request/success/success.js +4 -4
  55. package/plugins/utils/blacklist/blacklist.es6.js +4 -3
  56. package/plugins/utils/blacklist/blacklist.js +4 -3
  57. package/plugins/utils/protection/protection.es6.js +4 -2
  58. package/plugins/utils/protection/protection.js +4 -2
  59. package/plugins/utils/swagger/swagger.es6.js +5 -3
  60. package/plugins/utils/swagger/swagger.js +5 -3
  61. package/plugins/utils/whitelist/whitelist.es6.js +4 -2
  62. package/plugins/utils/whitelist/whitelist.js +4 -2
  63. package/types.d.ts +2 -9
  64. package/utils/action/Action.es6.js +12 -10
  65. package/utils/action/Action.js +12 -10
  66. package/utils/generateTypes/generateTypes.d.ts +1 -1
  67. package/utils/generateTypes/generateTypes.es6.js +27 -13
  68. package/utils/generateTypes/generateTypes.js +27 -13
  69. package/utils/getEndpoint/getEndpoint.es6.js +2 -2
  70. package/utils/getEndpoint/getEndpoint.js +2 -2
  71. package/hooks/useRequestPlugin/index.d.ts +0 -1
  72. package/hooks/useRequestPlugin/index.es6.js +0 -1
  73. package/hooks/useRequestPlugin/index.js +0 -9
  74. package/hooks/useRequestPlugin/useRequestPlugin.d.ts +0 -2
  75. package/hooks/useRequestPlugin/useRequestPlugin.es6.js +0 -13
  76. package/hooks/useRequestPlugin/useRequestPlugin.js +0 -17
  77. package/plugins/main/fallback/fallback.d.ts +0 -4
  78. package/plugins/main/fallback/fallback.es6.js +0 -19
  79. package/plugins/main/fallback/fallback.js +0 -23
  80. package/plugins/main/fallback/index.d.ts +0 -1
  81. package/plugins/main/fallback/index.es6.js +0 -1
  82. package/plugins/main/fallback/index.js +0 -9
package/README.md CHANGED
@@ -46,7 +46,7 @@ Customize
46
46
 
47
47
  [← back](#index)
48
48
 
49
- The simplest way to start working with `@innet/server`, it is `innetjs` usage.
49
+ The simplest way to start working with `@innet/server`, it is [innetjs](https://www.npmjs.com/package/innetjs) usage.
50
50
 
51
51
  ```shell
52
52
  npx innetjs init my-app -t api
@@ -77,6 +77,28 @@ innet(app, server)
77
77
 
78
78
  Here is a **Hello World** example:
79
79
 
80
+ *src/app.tsx*
81
+ ```typescript jsx
82
+ export default (
83
+ <server>
84
+ <request>
85
+ <success>
86
+ Hello World!
87
+ </success>
88
+ </request>
89
+ </server>
90
+ )
91
+ ```
92
+
93
+ *Use `npm start` to run this server.*
94
+
95
+ Open http://localhost:80
96
+ You will see the `Hello Word!` string.
97
+
98
+ ---
99
+
100
+ Here is the simplest [api](#api) example:
101
+
80
102
  *src/app.tsx*
81
103
  ```typescript jsx
82
104
  export default (
@@ -108,6 +130,7 @@ You will see a base Open API JSON structure.
108
130
 
109
131
  [\<server>](#server)
110
132
  [\<api>](#api)
133
+ [\<request>](#request)
111
134
  [\<preset>](#preset)
112
135
 
113
136
  ---
@@ -207,6 +230,19 @@ export default (
207
230
  )
208
231
  ```
209
232
 
233
+ #### onClose
234
+
235
+ Use `onClose` to handle server close action.
236
+
237
+ *src/app.tsx*
238
+ ```typescript jsx
239
+ export default (
240
+ <server
241
+ onClose={() => console.log('Close')}
242
+ />
243
+ )
244
+ ```
245
+
210
246
  ### \<api>
211
247
 
212
248
  [← back](#main)
@@ -319,7 +355,7 @@ A regular expression scopes the API.
319
355
  export default (
320
356
  <server>
321
357
  <api
322
- include={/$\/(api|openapi)/}
358
+ include={/^\/(api|openapi)/}
323
359
  />
324
360
  </server>
325
361
  )
@@ -335,11 +371,98 @@ export default (
335
371
  <server>
336
372
  <api prefix='/api' />
337
373
  <api prefix='/openapi' />
338
- <api exclude={/$\/(api|openapi)/} />
374
+ <api exclude={/^\/(api|openapi)/} />
339
375
  </server>
340
376
  )
341
377
  ```
342
378
 
379
+ ### \<request>
380
+
381
+ [← back](#main)
382
+
383
+ This element MUST be placed in [\<server>](#server) element.
384
+ It defines run-time call handler for parent element.
385
+
386
+ *src/app.tsx*
387
+ ```typescript jsx
388
+ export default (
389
+ <server>
390
+ <request>
391
+ <error status={404} />
392
+ </request>
393
+ </server>
394
+ )
395
+ ```
396
+ *Any request returns 404*
397
+
398
+ Place [\<request>](#request) in [\<api>](#api) to handle any unknown request in the [\<api>](#api).
399
+
400
+ *src/app.tsx*
401
+ ```typescript jsx
402
+ export default (
403
+ <server>
404
+ <api>
405
+ <request>
406
+ <error status={404} />
407
+ </request>
408
+ </api>
409
+ </server>
410
+ )
411
+ ```
412
+
413
+ Place [\<request>](#request) in [\<endpoint>](#endpoint) to handle the [\<endpoint>](#endpoint) request.
414
+
415
+ *src/app.tsx*
416
+ ```typescript jsx
417
+ export default (
418
+ <server>
419
+ <api>
420
+ <endpoint method='get' path='/my-endpoint'>
421
+ <request>
422
+ <success>
423
+ My Endpoint
424
+ </success>
425
+ </request>
426
+ </endpoint>
427
+ </api>
428
+ <request>
429
+ <success>
430
+ Any other request
431
+ </success>
432
+ </request>
433
+ </server>
434
+ )
435
+ ```
436
+
437
+ You can place a component inside [\<request>](#request).
438
+ The component will run when the request will be triggered.
439
+
440
+ *src/app.tsx*
441
+ ```typescript jsx
442
+ import { GetPartners } from './GetPartners'
443
+
444
+ export default (
445
+ <server>
446
+ <api>
447
+ <endpoint method='get' path='/partners'>
448
+ <request>
449
+ <GetPartners />
450
+ </request>
451
+ </endpoint>
452
+ </api>
453
+ </server>
454
+ )
455
+ ```
456
+
457
+ *src/GetPartners.tsx*
458
+ ```typescript jsx
459
+ export const GetPartners = () => (
460
+ <success>
461
+ {{partners: []}}
462
+ </success>
463
+ )
464
+ ```
465
+
343
466
  ### \<preset>
344
467
 
345
468
  [← back](#main)
@@ -1472,6 +1595,26 @@ return (
1472
1595
  )
1473
1596
  ```
1474
1597
 
1598
+ #### type
1599
+ A media type of the `<response>`.
1600
+
1601
+ By default, `type` equals `'application/json'`.
1602
+
1603
+ *src/app.tsx*
1604
+ ```typescript jsx
1605
+ return (
1606
+ <server>
1607
+ <api>
1608
+ <endpoint method='get' path='/hello'>
1609
+ <response type='text/html'>
1610
+ Hello World!
1611
+ </response>
1612
+ </endpoint>
1613
+ </api>
1614
+ </server>
1615
+ )
1616
+ ```
1617
+
1475
1618
  ## Primitive Data
1476
1619
 
1477
1620
  [← back](#index)
@@ -2894,12 +3037,7 @@ Next elements relate to run-time action.
2894
3037
  This action calls on user request.
2895
3038
 
2896
3039
  [← back](#index)
2897
-
2898
- Parent
2899
- [\<fallback>](#fallback)
2900
- [\<request>](#request)
2901
-
2902
- Children
3040
+
2903
3041
  [\<success>](#success)
2904
3042
  [\<error>](#error)
2905
3043
  [\<proxy>](#proxy)
@@ -2911,94 +3049,6 @@ Children
2911
3049
 
2912
3050
  ---
2913
3051
 
2914
- ### \<fallback>
2915
-
2916
- [← back](#run-time)
2917
-
2918
- By default, `<api>` server returns 404 with empty body.
2919
- [\<fallback>](#fallback) element defines default server response.
2920
- This element MUST be placed in `<api>`.
2921
- You MUST use one [\<fallback>](#fallback) per `<api>`.
2922
- Can contain elements available inside [\<request>](#request).
2923
-
2924
- *src/app.tsx*
2925
- ```typescript jsx
2926
- export default (
2927
- <server>
2928
- <api>
2929
- <fallback>
2930
- <error
2931
- code='unknownEndpoint'
2932
- />
2933
- </fallback>
2934
- </api>
2935
- </server>
2936
- )
2937
- ```
2938
-
2939
- If you open the application on any URL except for `/`, you can see the next response.
2940
-
2941
- ```json
2942
- {
2943
- "error": "unknownEndpoint"
2944
- }
2945
- ```
2946
-
2947
- The next elements are placed in [\<request>](#request) or [\<fallback>](#fallback)
2948
-
2949
- ### \<request>
2950
-
2951
- [← back](#run-time)
2952
-
2953
- This element MUST be placed in `<endpoint>` element.
2954
- It defines run-time call handler for the endpoint.
2955
-
2956
- *src/app.tsx*
2957
- ```typescript jsx
2958
- export default (
2959
- <server>
2960
- <api>
2961
- <endpoint method='get' path='/partners'>
2962
- <request>
2963
- <success>
2964
- {{partners: []}}
2965
- </success>
2966
- </request>
2967
- </endpoint>
2968
- </api>
2969
- </server>
2970
- )
2971
- ```
2972
-
2973
- You can place a component inside it.
2974
- The component will run when the endpoint will be triggered.
2975
-
2976
- *src/app.tsx*
2977
- ```typescript jsx
2978
- import { GetPartners } from './GetPartners'
2979
-
2980
- export default (
2981
- <server>
2982
- <api>
2983
- <endpoint method='get' path='/partners'>
2984
- <request>
2985
- <GetPartners />
2986
- </request>
2987
- </endpoint>
2988
- </api>
2989
- </server>
2990
- )
2991
- ```
2992
-
2993
- *src/GetPartners.tsx*
2994
- ```typescript jsx
2995
- export const GetPartners = () => (
2996
- <success>
2997
- {{partners: []}}
2998
- </success>
2999
- )
3000
- ```
3001
-
3002
3052
  ### \<success>
3003
3053
 
3004
3054
  [← back](#run-time)
@@ -3009,11 +3059,9 @@ This is a base element to return a success data.
3009
3059
  ```typescript jsx
3010
3060
  export default (
3011
3061
  <server>
3012
- <api>
3013
- <fallback>
3014
- <success />
3015
- </fallback>
3016
- </api>
3062
+ <response>
3063
+ <success />
3064
+ </response>
3017
3065
  </server>
3018
3066
  )
3019
3067
  ```
@@ -3028,13 +3076,11 @@ const data = {...}
3028
3076
 
3029
3077
  export default (
3030
3078
  <server>
3031
- <api>
3032
- <fallback>
3033
- <success>
3034
- {data}
3035
- </success>
3036
- </fallback>
3037
- </api>
3079
+ <response>
3080
+ <success>
3081
+ {data}
3082
+ </success>
3083
+ </response>
3038
3084
  </server>
3039
3085
  )
3040
3086
  ```
@@ -3051,13 +3097,11 @@ const data = {...}
3051
3097
 
3052
3098
  export default (
3053
3099
  <server>
3054
- <api>
3055
- <fallback>
3056
- <success status='created'>
3057
- {data}
3058
- </success>
3059
- </fallback>
3060
- </api>
3100
+ <response>
3101
+ <success status='created'>
3102
+ {data}
3103
+ </success>
3104
+ </response>
3061
3105
  </server>
3062
3106
  )
3063
3107
  ```
@@ -3072,13 +3116,11 @@ const data = {...}
3072
3116
 
3073
3117
  export default (
3074
3118
  <server>
3075
- <api>
3076
- <fallback>
3077
- <success status={201}>
3078
- {data}
3079
- </success>
3080
- </fallback>
3081
- </api>
3119
+ <response>
3120
+ <success status={201}>
3121
+ {data}
3122
+ </success>
3123
+ </response>
3082
3124
  </server>
3083
3125
  )
3084
3126
  ```
@@ -3092,13 +3134,11 @@ By default, it checks children element to define the prop.
3092
3134
  ```typescript jsx
3093
3135
  export default (
3094
3136
  <server>
3095
- <api>
3096
- <fallback>
3097
- <success contentType='text/html'>
3098
- Hello World!
3099
- </success>
3100
- </fallback>
3101
- </api>
3137
+ <response>
3138
+ <success contentType='text/html'>
3139
+ Hello World!
3140
+ </success>
3141
+ </response>
3102
3142
  </server>
3103
3143
  )
3104
3144
  ```
@@ -3108,17 +3148,15 @@ export default (
3108
3148
  [← back](#run-time)
3109
3149
 
3110
3150
  Returns an error.
3111
- This element MUST be placed in [\<request>](#request) or [\<fallback>](#fallback).
3151
+ This element MUST be placed in [\<request>](#request) or [\<response>](#response).
3112
3152
 
3113
3153
  *src/app.tsx*
3114
3154
  ```typescript jsx
3115
3155
  export default (
3116
3156
  <server>
3117
- <api>
3118
- <fallback>
3119
- <error />
3120
- </fallback>
3121
- </api>
3157
+ <response>
3158
+ <error />
3159
+ </response>
3122
3160
  </server>
3123
3161
  )
3124
3162
  ```
@@ -3131,13 +3169,11 @@ const data = {...}
3131
3169
 
3132
3170
  export default (
3133
3171
  <server>
3134
- <api>
3135
- <fallback>
3136
- <error>
3137
- {data}
3138
- </error>
3139
- </fallback>
3140
- </api>
3172
+ <response>
3173
+ <error>
3174
+ {data}
3175
+ </error>
3176
+ </response>
3141
3177
  </server>
3142
3178
  )
3143
3179
  ```
@@ -3153,13 +3189,11 @@ const data = {
3153
3189
 
3154
3190
  export default (
3155
3191
  <server>
3156
- <api>
3157
- <fallback>
3158
- <error status='notFound'>
3159
- {data}
3160
- </error>
3161
- </fallback>
3162
- </api>
3192
+ <response>
3193
+ <error status='notFound'>
3194
+ {data}
3195
+ </error>
3196
+ </response>
3163
3197
  </server>
3164
3198
  )
3165
3199
  ```
@@ -3174,13 +3208,11 @@ const data = {
3174
3208
 
3175
3209
  export default (
3176
3210
  <server>
3177
- <api>
3178
- <fallback>
3179
- <error status={404}>
3180
- {data}
3181
- </error>
3182
- </fallback>
3183
- </api>
3211
+ <response>
3212
+ <error status={404}>
3213
+ {data}
3214
+ </error>
3215
+ </response>
3184
3216
  </server>
3185
3217
  )
3186
3218
  ```
@@ -3208,15 +3240,13 @@ const data = {
3208
3240
 
3209
3241
  export default (
3210
3242
  <server>
3211
- <api>
3212
- <fallback>
3213
- <error
3214
- code='noUser'
3215
- status='notFound'>
3216
- {data}
3217
- </error>
3218
- </fallback>
3219
- </api>
3243
+ <response>
3244
+ <error
3245
+ code='noUser'
3246
+ status='notFound'>
3247
+ {data}
3248
+ </error>
3249
+ </response>
3220
3250
  </server>
3221
3251
  )
3222
3252
  ```
@@ -3244,7 +3274,7 @@ There are some default errors:
3244
3274
 
3245
3275
  [← back](#run-time)
3246
3276
 
3247
- MUST be placed in [\<request>](#request) or [\<fallback>](#fallback).
3277
+ MUST be placed in [\<request>](#request) or [\<response>](#response).
3248
3278
 
3249
3279
  You can easy proxy endpoints to another server/service.
3250
3280
 
@@ -3260,10 +3290,10 @@ export default (
3260
3290
  <proxy to='https://...' />
3261
3291
  </request>
3262
3292
  </endpoint>
3263
- <fallback>
3264
- <proxy to='https://...' />
3265
- </fallback>
3266
3293
  </api>
3294
+ <response>
3295
+ <proxy to='https://...' />
3296
+ </response>
3267
3297
  </server>
3268
3298
  )
3269
3299
  ```
@@ -3272,7 +3302,7 @@ export default (
3272
3302
 
3273
3303
  [← back](#run-time)
3274
3304
 
3275
- MUST be placed in [\<request>](#request) or [\<fallback>](#fallback).
3305
+ MUST be placed in [\<request>](#request) or [\<response>](#response).
3276
3306
 
3277
3307
  You can redirect users to another resource. It adds `Cache-Control` header by default.
3278
3308
 
@@ -3288,10 +3318,10 @@ export default (
3288
3318
  <redirect to='https://...' />
3289
3319
  </request>
3290
3320
  </endpoint>
3291
- <fallback>
3292
- <redirect to='https://...' />
3293
- </fallback>
3294
3321
  </api>
3322
+ <response>
3323
+ <redirect to='https://...' />
3324
+ </response>
3295
3325
  </server>
3296
3326
  )
3297
3327
  ```
@@ -3316,13 +3346,13 @@ export default (
3316
3346
  />
3317
3347
  </request>
3318
3348
  </endpoint>
3319
- <fallback>
3320
- <redirect
3321
- status={303}
3322
- to='https://...'
3323
- />
3324
- </fallback>
3325
3349
  </api>
3350
+ <response>
3351
+ <redirect
3352
+ status={303}
3353
+ to='https://...'
3354
+ />
3355
+ </response>
3326
3356
  </server>
3327
3357
  )
3328
3358
  ```
@@ -3331,7 +3361,7 @@ export default (
3331
3361
 
3332
3362
  [← back](#run-time)
3333
3363
 
3334
- MUST be placed in [\<request>](#request) or [\<fallback>](#fallback).
3364
+ MUST be placed in [\<request>](#request) or [\<response>](#response).
3335
3365
 
3336
3366
  `<cms>` helps to return files from a folder by path. It checks files run-time on the server.
3337
3367
 
@@ -3339,11 +3369,9 @@ MUST be placed in [\<request>](#request) or [\<fallback>](#fallback).
3339
3369
  ```typescript jsx
3340
3370
  export default (
3341
3371
  <server>
3342
- <api>
3343
- <fallback>
3344
- <cms />
3345
- </fallback>
3346
- </api>
3372
+ <response>
3373
+ <cms />
3374
+ </response>
3347
3375
  </server>
3348
3376
  )
3349
3377
  ```
@@ -3360,11 +3388,9 @@ You can change root folder by `dir` property.
3360
3388
  ```typescript jsx
3361
3389
  export default (
3362
3390
  <server>
3363
- <api>
3364
- <fallback>
3365
- <cms dir='src' />
3366
- </fallback>
3367
- </api>
3391
+ <response>
3392
+ <cms dir='src' />
3393
+ </response>
3368
3394
  </server>
3369
3395
  )
3370
3396
  ```
@@ -3381,9 +3407,9 @@ you get the index file in `src` folder.
3381
3407
  export default (
3382
3408
  <server>
3383
3409
  <api prefix='/src'>
3384
- <fallback>
3410
+ <response>
3385
3411
  <cms />
3386
- </fallback>
3412
+ </response>
3387
3413
  </api>
3388
3414
  </server>
3389
3415
  )
@@ -3399,9 +3425,9 @@ You can reduce the path for matching by prefix property of `<cms>`.
3399
3425
  export default (
3400
3426
  <server>
3401
3427
  <api prefix='/api'>
3402
- <fallback>
3428
+ <response>
3403
3429
  <cms prefix='/api' />
3404
- </fallback>
3430
+ </response>
3405
3431
  </api>
3406
3432
  </server>
3407
3433
  )
@@ -3417,13 +3443,11 @@ You can handle if a file was not found by children elements of `<cms>`.
3417
3443
  ```typescript jsx
3418
3444
  export default (
3419
3445
  <server>
3420
- <api prefix='/src'>
3421
- <fallback>
3422
- <cms>
3423
- <error status={404} />
3424
- </cms>
3425
- </fallback>
3426
- </api>
3446
+ <response>
3447
+ <cms>
3448
+ <error status={404} />
3449
+ </cms>
3450
+ </response>
3427
3451
  </server>
3428
3452
  )
3429
3453
  ```
@@ -3432,7 +3456,7 @@ export default (
3432
3456
 
3433
3457
  [← back](#run-time)
3434
3458
 
3435
- It returns a file. MUST be placed in [\<request>](#request) or [\<fallback>](#fallback).
3459
+ It returns a file. MUST be placed in [\<request>](#request) or [\<response>](#response).
3436
3460
 
3437
3461
  It adds `Content-Length` and `Content-Type` automatically.
3438
3462
 
@@ -3442,13 +3466,9 @@ It has a REQUIRED property of `path`.
3442
3466
  ```typescript jsx
3443
3467
  export default (
3444
3468
  <server>
3445
- <api>
3446
- <fallback>
3447
- <file
3448
- path='package.json'
3449
- />
3450
- </fallback>
3451
- </api>
3469
+ <response>
3470
+ <file path='package.json' />
3471
+ </response>
3452
3472
  </server>
3453
3473
  )
3454
3474
  ```
@@ -3463,20 +3483,18 @@ You can handle if a file was not found by children elements of `<file>`.
3463
3483
  ```typescript jsx
3464
3484
  export default (
3465
3485
  <server>
3466
- <api prefix='/src'>
3467
- <fallback>
3468
- <file path='file_is_not_exist.txt'>
3469
- <error status={404} />
3470
- </file>
3471
- </fallback>
3472
- </api>
3486
+ <response>
3487
+ <file path='file_is_not_exist.txt'>
3488
+ <error status={404} />
3489
+ </file>
3490
+ </response>
3473
3491
  </server>
3474
3492
  )
3475
3493
  ```
3476
3494
 
3477
3495
  ### \<header>
3478
3496
 
3479
- MUST be placed in [\<request>](#request) or [\<fallback>](#fallback).
3497
+ MUST be placed in [\<request>](#request) or [\<response>](#response).
3480
3498
 
3481
3499
  [← back](#run-time)
3482
3500
 
@@ -3486,22 +3504,20 @@ You can add an HTTP header into response by `<header>` element.
3486
3504
  ```typescript jsx
3487
3505
  export default (
3488
3506
  <server>
3489
- <api prefix='/src'>
3490
- <fallback>
3491
- <header
3492
- key='Cache-Control'
3493
- value='no-cache, no-store, must-revalidate'
3494
- />
3495
- <success />
3496
- </fallback>
3497
- </api>
3507
+ <response>
3508
+ <header
3509
+ key='Cache-Control'
3510
+ value='no-cache, no-store, must-revalidate'
3511
+ />
3512
+ <success />
3513
+ </response>
3498
3514
  </server>
3499
3515
  )
3500
3516
  ```
3501
3517
 
3502
3518
  ### \<cookie>
3503
3519
 
3504
- MUST be placed in [\<request>](#request) or [\<fallback>](#fallback).
3520
+ MUST be placed in [\<request>](#request) or [\<response>](#response).
3505
3521
 
3506
3522
  [← back](#run-time)
3507
3523
 
@@ -3511,18 +3527,16 @@ You can add/remove a cookie into response by `<cookie>` element.
3511
3527
  ```typescript jsx
3512
3528
  export default (
3513
3529
  <server>
3514
- <api prefix='/src'>
3515
- <fallback>
3516
- <cookie
3517
- key='token'
3518
- value='...'
3519
- />
3520
- <cookie
3521
- key='removedCookie'
3522
- />
3523
- <success />
3524
- </fallback>
3525
- </api>
3530
+ <response>
3531
+ <cookie
3532
+ key='token'
3533
+ value='...'
3534
+ />
3535
+ <cookie
3536
+ key='removedCookie'
3537
+ />
3538
+ <success />
3539
+ </response>
3526
3540
  </server>
3527
3541
  )
3528
3542
  ```
@@ -3536,16 +3550,14 @@ By default, no domain is set, and most clients will consider the cookie to apply
3536
3550
  ```typescript jsx
3537
3551
  export default (
3538
3552
  <server>
3539
- <api prefix='/src'>
3540
- <fallback>
3541
- <cookie
3542
- domain='.example.com'
3543
- key='token'
3544
- value='...'
3545
- />
3546
- <success />
3547
- </fallback>
3548
- </api>
3553
+ <response>
3554
+ <cookie
3555
+ domain='.example.com'
3556
+ key='token'
3557
+ value='...'
3558
+ />
3559
+ <success />
3560
+ </response>
3549
3561
  </server>
3550
3562
  )
3551
3563
  ```
@@ -3564,16 +3576,14 @@ Note the [cookie storage model specification](https://datatracker.ietf.org/doc/h
3564
3576
  ```typescript jsx
3565
3577
  export default (
3566
3578
  <server>
3567
- <api prefix='/src'>
3568
- <fallback>
3569
- <cookie
3570
- expires={new Date('2050-01-01')}
3571
- key='token'
3572
- value='...'
3573
- />
3574
- <success />
3575
- </fallback>
3576
- </api>
3579
+ <response>
3580
+ <cookie
3581
+ expires={new Date('2050-01-01')}
3582
+ key='token'
3583
+ value='...'
3584
+ />
3585
+ <success />
3586
+ </response>
3577
3587
  </server>
3578
3588
  )
3579
3589
  ```
@@ -3587,16 +3597,14 @@ Note be careful when setting this to true, as compliant clients will not allow c
3587
3597
  ```typescript jsx
3588
3598
  export default (
3589
3599
  <server>
3590
- <api prefix='/src'>
3591
- <fallback>
3592
- <cookie
3593
- httpOnly
3594
- key='token'
3595
- value='...'
3596
- />
3597
- <success />
3598
- </fallback>
3599
- </api>
3600
+ <response>
3601
+ <cookie
3602
+ httpOnly
3603
+ key='token'
3604
+ value='...'
3605
+ />
3606
+ <success />
3607
+ </response>
3600
3608
  </server>
3601
3609
  )
3602
3610
  ```
@@ -3610,17 +3618,15 @@ Note the [cookie storage model specification](https://datatracker.ietf.org/doc/h
3610
3618
  ```typescript jsx
3611
3619
  export default (
3612
3620
  <server>
3613
- <api prefix='/src'>
3614
- <fallback>
3615
- <cookie
3616
- httpOnly
3617
- maxAge={9999}
3618
- key='token'
3619
- value='...'
3620
- />
3621
- <success />
3622
- </fallback>
3623
- </api>
3621
+ <response>
3622
+ <cookie
3623
+ httpOnly
3624
+ maxAge={9999}
3625
+ key='token'
3626
+ value='...'
3627
+ />
3628
+ <success />
3629
+ </response>
3624
3630
  </server>
3625
3631
  )
3626
3632
  ```
@@ -3634,18 +3640,16 @@ By default, the path is considered the “default path”.
3634
3640
  ```typescript jsx
3635
3641
  export default (
3636
3642
  <server>
3637
- <api prefix='/src'>
3638
- <fallback>
3639
- <cookie
3640
- httpOnly
3641
- maxAge={9999}
3642
- path='/src'
3643
- key='token'
3644
- value='...'
3645
- />
3646
- <success />
3647
- </fallback>
3648
- </api>
3643
+ <response>
3644
+ <cookie
3645
+ httpOnly
3646
+ maxAge={9999}
3647
+ path='/src'
3648
+ key='token'
3649
+ value='...'
3650
+ />
3651
+ <success />
3652
+ </response>
3649
3653
  </server>
3650
3654
  )
3651
3655
  ```
@@ -3664,18 +3668,16 @@ note This is an attribute that has not yet been fully standardized, and may chan
3664
3668
  ```typescript jsx
3665
3669
  export default (
3666
3670
  <server>
3667
- <api prefix='/src'>
3668
- <fallback>
3669
- <cookie
3670
- httpOnly
3671
- priority='high'
3672
- path='/src'
3673
- key='token'
3674
- value='...'
3675
- />
3676
- <success />
3677
- </fallback>
3678
- </api>
3671
+ <response>
3672
+ <cookie
3673
+ httpOnly
3674
+ priority='high'
3675
+ path='/src'
3676
+ key='token'
3677
+ value='...'
3678
+ />
3679
+ <success />
3680
+ </response>
3679
3681
  </server>
3680
3682
  )
3681
3683
  ```
@@ -3697,19 +3699,17 @@ This also means many clients may ignore this attribute until they understand it.
3697
3699
  ```typescript jsx
3698
3700
  export default (
3699
3701
  <server>
3700
- <api prefix='/src'>
3701
- <fallback>
3702
- <cookie
3703
- httpOnly
3704
- sameSite
3705
- priority='high'
3706
- path='/src'
3707
- key='token'
3708
- value='...'
3709
- />
3710
- <success />
3711
- </fallback>
3712
- </api>
3702
+ <response>
3703
+ <cookie
3704
+ httpOnly
3705
+ sameSite
3706
+ priority='high'
3707
+ path='/src'
3708
+ key='token'
3709
+ value='...'
3710
+ />
3711
+ <success />
3712
+ </response>
3713
3713
  </server>
3714
3714
  )
3715
3715
  ```
@@ -3726,17 +3726,15 @@ Note be careful when setting this to true, as compliant clients will not send th
3726
3726
  ```typescript jsx
3727
3727
  export default (
3728
3728
  <server>
3729
- <api prefix='/src'>
3730
- <fallback>
3731
- <cookie
3732
- httpOnly
3733
- secure
3734
- key='token'
3735
- value='...'
3736
- />
3737
- <success />
3738
- </fallback>
3739
- </api>
3729
+ <response>
3730
+ <cookie
3731
+ httpOnly
3732
+ secure
3733
+ key='token'
3734
+ value='...'
3735
+ />
3736
+ <success />
3737
+ </response>
3740
3738
  </server>
3741
3739
  )
3742
3740
  ```
@@ -3769,14 +3767,12 @@ import { SetToken } from './SetToken'
3769
3767
 
3770
3768
  export default (
3771
3769
  <server>
3772
- <api prefix='/src'>
3773
- <fallback>
3774
- <SetToken
3775
- value='...'
3776
- />
3777
- <success />
3778
- </fallback>
3779
- </api>
3770
+ <response>
3771
+ <SetToken
3772
+ value='...'
3773
+ />
3774
+ <success />
3775
+ </response>
3780
3776
  </server>
3781
3777
  )
3782
3778
  ```
@@ -3801,7 +3797,7 @@ Real-time
3801
3797
  [useClientIp](#useclientip)
3802
3798
 
3803
3799
  Server start
3804
- [useRequestPlugin](#userequestplugin)
3800
+ [useServerPlugin](#useserverplugin)
3805
3801
 
3806
3802
  Both
3807
3803
  [useServer](#useserver)
@@ -3813,7 +3809,7 @@ Both
3813
3809
 
3814
3810
  [← back](#hooks)
3815
3811
 
3816
- This hook MUST be used in a component placed in [\<request>](#request) or [\<fallback>](#fallback).
3812
+ This hook MUST be used in a component placed in [\<request>](#request) or [\<response>](#response).
3817
3813
  This hook returns current request instance.
3818
3814
 
3819
3815
  *src/Component.tsx*
@@ -3834,7 +3830,7 @@ export function Component () {
3834
3830
 
3835
3831
  [← back](#hooks)
3836
3832
 
3837
- This hook MUST be used in a component placed in [\<request>](#request) or [\<fallback>](#fallback).
3833
+ This hook MUST be used in a component placed in [\<request>](#request) or [\<response>](#response).
3838
3834
  This hook returns current response instance.
3839
3835
 
3840
3836
  *src/Component.tsx*
@@ -3855,7 +3851,7 @@ export function Component () {
3855
3851
 
3856
3852
  [← back](#hooks)
3857
3853
 
3858
- This hook MUST be used in a component placed in [\<request>](#request) or [\<fallback>](#fallback).
3854
+ This hook MUST be used in a component placed in [\<request>](#request) or [\<response>](#response).
3859
3855
  This hook returns current request headers object.
3860
3856
 
3861
3857
  *src/Component.tsx*
@@ -3874,7 +3870,7 @@ export function Component () {
3874
3870
 
3875
3871
  [← back](#hooks)
3876
3872
 
3877
- This hook MUST be used in a component placed in [\<request>](#request) or [\<fallback>](#fallback).
3873
+ This hook MUST be used in a component placed in [\<request>](#request) or [\<response>](#response).
3878
3874
  This hook returns current request cookies object.
3879
3875
 
3880
3876
  *src/Component.tsx*
@@ -3893,7 +3889,7 @@ export function Component () {
3893
3889
 
3894
3890
  [← back](#hooks)
3895
3891
 
3896
- This hook MUST be used in a component placed in [\<request>](#request) or [\<fallback>](#fallback).
3892
+ This hook MUST be used in a component placed in [\<request>](#request) or [\<response>](#response).
3897
3893
  This hook returns current request URL path as a `string`.
3898
3894
 
3899
3895
  *src/Component.tsx*
@@ -3912,7 +3908,7 @@ export function Component () {
3912
3908
 
3913
3909
  [← back](#hooks)
3914
3910
 
3915
- This hook MUST be used in a component placed in [\<request>](#request) or [\<fallback>](#fallback).
3911
+ This hook MUST be used in a component placed in [\<request>](#request) or [\<response>](#response).
3916
3912
  This hook returns an object of URL params you set by [\<param>](#param).
3917
3913
 
3918
3914
  *src/Component.tsx*
@@ -3930,7 +3926,7 @@ export function Component () {
3930
3926
 
3931
3927
  [← back](#hooks)
3932
3928
 
3933
- This hook MUST be used in a component placed in [\<request>](#request) or [\<fallback>](#fallback).
3929
+ This hook MUST be used in a component placed in [\<request>](#request) or [\<response>](#response).
3934
3930
  This hook returns an object of URL query params.
3935
3931
 
3936
3932
  *src/Component.tsx*
@@ -3948,7 +3944,7 @@ export function Component () {
3948
3944
 
3949
3945
  [← back](#hooks)
3950
3946
 
3951
- This hook MUST be used in a component placed in [\<request>](#request) or [\<fallback>](#fallback).
3947
+ This hook MUST be used in a component placed in [\<request>](#request) or [\<response>](#response).
3952
3948
  This hook returns current request body.
3953
3949
 
3954
3950
  *src/Component.tsx*
@@ -3967,7 +3963,7 @@ export function Component () {
3967
3963
  [← back](#hooks)
3968
3964
 
3969
3965
  This hook returns request user IP.
3970
- This hook MUST be used in a component placed in [\<request>](#request) or [\<fallback>](#fallback).
3966
+ This hook MUST be used in a component placed in [\<request>](#request) or [\<response>](#response).
3971
3967
 
3972
3968
  *src/Component.tsx*
3973
3969
  ```typescript jsx
@@ -3980,7 +3976,7 @@ export function Component () {
3980
3976
  }
3981
3977
  ```
3982
3978
 
3983
- ### useRequestPlugin
3979
+ ### useServerPlugin
3984
3980
 
3985
3981
  [← back](#hooks)
3986
3982
 
@@ -3988,25 +3984,24 @@ This hook adds a request plugin function.
3988
3984
  The function runs before check endpoints.
3989
3985
  If the function returns `true` the request handling stops, and you get full control over the request.
3990
3986
 
3991
- This hook MUST be used in a component placed in [\<api>](#api).
3987
+ This hook MUST be used in a component placed in [\<server>](#server).
3992
3988
 
3993
3989
  *src/SecretEndpoint.tsx*
3994
3990
  ```typescript jsx
3995
- import { useRequestPlugin } from '@innet/sever'
3991
+ import { useRequestPlugin, useAction } from '@innet/sever'
3996
3992
 
3997
3993
  export function SecretEndpoint () {
3998
- useRequestPlugin((req, res) => {
3999
- if (req.url.startsWith('/secret-endpoint')) {
4000
- res.statusCode = 200
4001
- res.write('A secret message')
4002
- res.end()
4003
- return true
3994
+ useServerPlugin(() => {
3995
+ const action = useAction()
3996
+
3997
+ if (action.path.startsWith('/secret-endpoint')) {
3998
+ return <success>A secret message</success>
4004
3999
  }
4005
4000
  })
4006
4001
  }
4007
4002
  ```
4008
4003
 
4009
- Then use the plugin in [\<api>](#api).
4004
+ Then use the plugin in [\<server>](#server) or [\<api>](#api).
4010
4005
 
4011
4006
  *src/app.tsx*
4012
4007
  ```typescript jsx
@@ -4014,12 +4009,10 @@ import { SecretEndpoint } from './SecretEndpoint'
4014
4009
 
4015
4010
  export default (
4016
4011
  <server>
4017
- <api>
4018
- <fallback>
4019
- <error />
4020
- </fallback>
4021
- <SecretEndpoint />
4022
- </api>
4012
+ <SecretEndpoint />
4013
+ <response>
4014
+ <error />
4015
+ </response>
4023
4016
  </server>
4024
4017
  )
4025
4018
  ```