@wooksjs/http-proxy 0.4.24 → 0.4.27

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -22,8 +22,8 @@ Wooks Proxy is composable proxy for [@wooksjs/event-http](https://github.com/woo
22
22
  ```ts
23
23
  import { useProxy } from '@wooksjs/http-proxy'
24
24
  app.get('/to-proxy', () => {
25
- const proxy = useProxy()
26
- return proxy('https://target-website.com/target-path?query=123')
25
+ const proxy = useProxy()
26
+ return proxy('https://target-website.com/target-path?query=123')
27
27
  })
28
28
  ```
29
29
 
@@ -32,11 +32,11 @@ app.get('/to-proxy', () => {
32
32
  ```ts
33
33
  import { useProxy } from '@wooksjs/http-proxy'
34
34
  app.get('/to-proxy', () => {
35
- const proxy = useProxy()
36
- return proxy('https://target-website.com/target-path?query=123', {
37
- reqHeaders: { block: ['referer'] }, // block referer header
38
- reqCookies: { block: '*' }, // block all req cookies
39
- })
35
+ const proxy = useProxy()
36
+ return proxy('https://target-website.com/target-path?query=123', {
37
+ reqHeaders: { block: ['referer'] }, // block referer header
38
+ reqCookies: { block: '*' }, // block all req cookies
39
+ })
40
40
  })
41
41
  ```
42
42
 
@@ -47,10 +47,10 @@ It's easy as `proxy` returns fetch response
47
47
  ```ts
48
48
  import { useProxy } from '@wooksjs/http-proxy'
49
49
  app.get('/to-proxy', async () => {
50
- const proxy = useProxy()
51
- const response = proxy('https://mayapi.com/json-api')
52
- const data = { ...(await response.json()), newField: 'new value' }
53
- return data
50
+ const proxy = useProxy()
51
+ const response = proxy('https://mayapi.com/json-api')
52
+ const data = { ...(await response.json()), newField: 'new value' }
53
+ return data
54
54
  })
55
55
  ```
56
56
 
@@ -61,38 +61,38 @@ import { useProxy } from '@wooksjs/http-proxy'
61
61
  import { useRequest } from '@wooksjs/composables'
62
62
  //...
63
63
  app.get('*', async () => {
64
- const proxy = useProxy()
65
- const { url } = useRequest()
66
- const fetchResponse = await proxy('https://www.google.com' + url, {
67
- // optional method, be default is set with
68
- // the original request method
69
- method: 'GET',
70
-
71
- // the next four options help to filter out
72
- // request/response headers/cookies
73
- // each of the option accepts an object with:
74
- // - allow: '*' | (string | RegExp)[] - a list to allow (default '*')
75
- // - block: '*' | (string | RegExp)[] - a list to block
76
- // - overwrite: Record<string| string> | ((data: object) -> object) - object or fn to overwrite data
77
- reqHeaders: { block: ['referer'] },
78
- reqCookies: { allow: ['cookie-to-pass-upstream'] },
79
- resHeaders: { overwrite: { 'x-proxied-by': 'wooks-proxy' } },
80
- resCookies: { allow: ['cookie-to-pass-downstream'] },
81
-
82
- // debug: true - will print proxy paths and headers/cookies
83
- debug: true,
84
- })
85
- return fetchResponse // fetch response is supported, the body will be downstreamed
86
-
87
- // > you can also return fully buffered body as Uint8Array
88
- // return new Uint8Array(await fetchResponse.arrayBuffer())
89
-
90
- // > or as string
91
- // return fetchResponse.text()
92
-
93
- // > or change response before return
94
- // const data = await fetchResponse.text() + '<new data>'
95
- // return data
64
+ const proxy = useProxy()
65
+ const { url } = useRequest()
66
+ const fetchResponse = await proxy('https://www.google.com' + url, {
67
+ // optional method, be default is set with
68
+ // the original request method
69
+ method: 'GET',
70
+
71
+ // the next four options help to filter out
72
+ // request/response headers/cookies
73
+ // each of the option accepts an object with:
74
+ // - allow: '*' | (string | RegExp)[] - a list to allow (default '*')
75
+ // - block: '*' | (string | RegExp)[] - a list to block
76
+ // - overwrite: Record<string| string> | ((data: object) -> object) - object or fn to overwrite data
77
+ reqHeaders: { block: ['referer'] },
78
+ reqCookies: { allow: ['cookie-to-pass-upstream'] },
79
+ resHeaders: { overwrite: { 'x-proxied-by': 'wooks-proxy' } },
80
+ resCookies: { allow: ['cookie-to-pass-downstream'] },
81
+
82
+ // debug: true - will print proxy paths and headers/cookies
83
+ debug: true,
84
+ })
85
+ return fetchResponse // fetch response is supported, the body will be downstreamed
86
+
87
+ // > you can also return fully buffered body as Uint8Array
88
+ // return new Uint8Array(await fetchResponse.arrayBuffer())
89
+
90
+ // > or as string
91
+ // return fetchResponse.text()
92
+
93
+ // > or change response before return
94
+ // const data = await fetchResponse.text() + '<new data>'
95
+ // return data
96
96
  })
97
97
  //...
98
98
  ```
package/dist/index.cjs CHANGED
@@ -1,8 +1,8 @@
1
1
  'use strict';
2
2
 
3
- var nodeFetchNative = require('node-fetch-native');
4
- var eventHttp = require('@wooksjs/event-http');
5
3
  var eventCore = require('@wooksjs/event-core');
4
+ var eventHttp = require('@wooksjs/event-http');
5
+ var nodeFetchNative = require('node-fetch-native');
6
6
 
7
7
  class IterableRecords {
8
8
  constructor() {
@@ -51,25 +51,17 @@ function applyProxyControls(records, controls, additionalBlockers) {
51
51
  const add = block !== '*' &&
52
52
  (!additionalBlockers || !additionalBlockers.includes(name)) &&
53
53
  (defaultedAllow === '*' ||
54
- defaultedAllow.find((item) => (typeof item === 'string' &&
55
- name.toLowerCase() === item.toLowerCase()) ||
54
+ defaultedAllow.find(item => (typeof item === 'string' && name.toLowerCase() === item.toLowerCase()) ||
56
55
  (item instanceof RegExp && item.test(name)))) &&
57
- (!block ||
58
- !block.find((item) => (typeof item === 'string' &&
59
- name.toLowerCase() === item.toLowerCase()) ||
60
- (item instanceof RegExp && item.test(name))));
56
+ !block?.find(item => (typeof item === 'string' && name.toLowerCase() === item.toLowerCase()) ||
57
+ (item instanceof RegExp && item.test(name)));
61
58
  if (add) {
62
59
  result[name] = value;
63
60
  }
64
61
  }
65
62
  }
66
63
  if (overwrite) {
67
- if (typeof overwrite === 'function') {
68
- result = overwrite(result);
69
- }
70
- else {
71
- result = { ...result, ...overwrite };
72
- }
64
+ result = typeof overwrite === 'function' ? overwrite(result) : { ...result, ...overwrite };
73
65
  }
74
66
  return result;
75
67
  }
@@ -81,11 +73,7 @@ const reqHeadersToBlock = [
81
73
  'upgrade-insecure-requests',
82
74
  'cookie',
83
75
  ];
84
- const resHeadersToBlock = [
85
- 'transfer-encoding',
86
- 'content-encoding',
87
- 'set-cookie',
88
- ];
76
+ const resHeadersToBlock = ['transfer-encoding', 'content-encoding', 'set-cookie'];
89
77
  function useProxy() {
90
78
  const status = eventHttp.useStatus();
91
79
  const { setHeader, headers: getSetHeaders } = eventHttp.useSetHeaders();
@@ -99,26 +87,24 @@ function useProxy() {
99
87
  const url = new URL(path, targetUrl.origin).toString() + targetUrl.search;
100
88
  const modifiedHeaders = { ...req.headers, host: targetUrl.hostname };
101
89
  const headers = opts?.reqHeaders
102
- ? applyProxyControls(new HeadersIterable(modifiedHeaders), opts?.reqHeaders, reqHeadersToBlock)
90
+ ? applyProxyControls(new HeadersIterable(modifiedHeaders), opts.reqHeaders, reqHeadersToBlock)
103
91
  : {};
104
92
  const cookies = opts?.reqCookies && req.headers.cookie
105
- ? applyProxyControls(new CookiesIterable(req.headers.cookie), opts?.reqCookies)
93
+ ? applyProxyControls(new CookiesIterable(req.headers.cookie), opts.reqCookies)
106
94
  : null;
107
95
  if (cookies) {
108
96
  headers.cookie = Object.entries(cookies)
109
- .map((v) => v.join('='))
97
+ .map(v => v.join('='))
110
98
  .join('; ');
111
99
  }
112
100
  const method = opts?.method || req.method;
113
101
  if (opts?.debug) {
114
102
  logger.info(`${''}${req.method} ${req.url}${''} → ${''}${method} ${url}${''}`);
115
- logger.info('' + 'headers:', JSON.stringify(headers, null, ' '), '');
103
+ logger.info(`${''}headers:`, JSON.stringify(headers, null, ' '), '');
116
104
  }
117
105
  const resp = await nodeFetchNative.fetch(url, {
118
106
  method,
119
- body: ['GET', 'HEAD'].includes(method)
120
- ? undefined
121
- : req,
107
+ body: ['GET', 'HEAD'].includes(method) ? undefined : req,
122
108
  headers: headers,
123
109
  });
124
110
  status.value = resp.status;
@@ -127,10 +113,10 @@ function useProxy() {
127
113
  logger.info(`${''}response headers:${''}`);
128
114
  }
129
115
  const resHeaders = opts?.resHeaders
130
- ? applyProxyControls(resp.headers.entries(), opts?.resHeaders, resHeadersToBlock)
116
+ ? applyProxyControls(resp.headers.entries(), opts.resHeaders, resHeadersToBlock)
131
117
  : null;
132
118
  const resCookies = opts?.resCookies
133
- ? applyProxyControls(new CookiesIterable(resp.headers.get('set-cookie') || ''), opts?.resCookies)
119
+ ? applyProxyControls(new CookiesIterable(resp.headers.get('set-cookie') || ''), opts.resCookies)
134
120
  : null;
135
121
  if (resHeaders) {
136
122
  for (const [name, value] of Object.entries(resHeaders)) {
@@ -143,8 +129,7 @@ function useProxy() {
143
129
  }
144
130
  }
145
131
  if (resCookies) {
146
- setHeadersObject['set-cookie'] = (setHeadersObject['set-cookie'] ||
147
- []);
132
+ setHeadersObject['set-cookie'] = (setHeadersObject['set-cookie'] || []);
148
133
  for (const [name, value] of Object.entries(resCookies)) {
149
134
  if (name) {
150
135
  setHeadersObject['set-cookie'].push(`${name}=${value}`);
package/dist/index.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  interface TWooksProxyControls {
2
2
  overwrite?: Record<string, string> | ((data: Record<string, string>) => Record<string, string>);
3
- allow?: (string | RegExp)[] | '*';
4
- block?: (string | RegExp)[] | '*';
3
+ allow?: Array<string | RegExp> | '*';
4
+ block?: Array<string | RegExp> | '*';
5
5
  }
6
6
  interface TWooksProxyOptions {
7
7
  method?: string;
package/dist/index.mjs CHANGED
@@ -1,6 +1,6 @@
1
- import { fetch } from 'node-fetch-native';
2
- import { useStatus, useSetHeaders, useHttpContext } from '@wooksjs/event-http';
3
1
  import { useEventLogger } from '@wooksjs/event-core';
2
+ import { useStatus, useSetHeaders, useHttpContext } from '@wooksjs/event-http';
3
+ import { fetch } from 'node-fetch-native';
4
4
 
5
5
  class IterableRecords {
6
6
  constructor() {
@@ -49,25 +49,17 @@ function applyProxyControls(records, controls, additionalBlockers) {
49
49
  const add = block !== '*' &&
50
50
  (!additionalBlockers || !additionalBlockers.includes(name)) &&
51
51
  (defaultedAllow === '*' ||
52
- defaultedAllow.find((item) => (typeof item === 'string' &&
53
- name.toLowerCase() === item.toLowerCase()) ||
52
+ defaultedAllow.find(item => (typeof item === 'string' && name.toLowerCase() === item.toLowerCase()) ||
54
53
  (item instanceof RegExp && item.test(name)))) &&
55
- (!block ||
56
- !block.find((item) => (typeof item === 'string' &&
57
- name.toLowerCase() === item.toLowerCase()) ||
58
- (item instanceof RegExp && item.test(name))));
54
+ !block?.find(item => (typeof item === 'string' && name.toLowerCase() === item.toLowerCase()) ||
55
+ (item instanceof RegExp && item.test(name)));
59
56
  if (add) {
60
57
  result[name] = value;
61
58
  }
62
59
  }
63
60
  }
64
61
  if (overwrite) {
65
- if (typeof overwrite === 'function') {
66
- result = overwrite(result);
67
- }
68
- else {
69
- result = { ...result, ...overwrite };
70
- }
62
+ result = typeof overwrite === 'function' ? overwrite(result) : { ...result, ...overwrite };
71
63
  }
72
64
  return result;
73
65
  }
@@ -79,11 +71,7 @@ const reqHeadersToBlock = [
79
71
  'upgrade-insecure-requests',
80
72
  'cookie',
81
73
  ];
82
- const resHeadersToBlock = [
83
- 'transfer-encoding',
84
- 'content-encoding',
85
- 'set-cookie',
86
- ];
74
+ const resHeadersToBlock = ['transfer-encoding', 'content-encoding', 'set-cookie'];
87
75
  function useProxy() {
88
76
  const status = useStatus();
89
77
  const { setHeader, headers: getSetHeaders } = useSetHeaders();
@@ -97,26 +85,24 @@ function useProxy() {
97
85
  const url = new URL(path, targetUrl.origin).toString() + targetUrl.search;
98
86
  const modifiedHeaders = { ...req.headers, host: targetUrl.hostname };
99
87
  const headers = opts?.reqHeaders
100
- ? applyProxyControls(new HeadersIterable(modifiedHeaders), opts?.reqHeaders, reqHeadersToBlock)
88
+ ? applyProxyControls(new HeadersIterable(modifiedHeaders), opts.reqHeaders, reqHeadersToBlock)
101
89
  : {};
102
90
  const cookies = opts?.reqCookies && req.headers.cookie
103
- ? applyProxyControls(new CookiesIterable(req.headers.cookie), opts?.reqCookies)
91
+ ? applyProxyControls(new CookiesIterable(req.headers.cookie), opts.reqCookies)
104
92
  : null;
105
93
  if (cookies) {
106
94
  headers.cookie = Object.entries(cookies)
107
- .map((v) => v.join('='))
95
+ .map(v => v.join('='))
108
96
  .join('; ');
109
97
  }
110
98
  const method = opts?.method || req.method;
111
99
  if (opts?.debug) {
112
100
  logger.info(`${''}${req.method} ${req.url}${''} → ${''}${method} ${url}${''}`);
113
- logger.info('' + 'headers:', JSON.stringify(headers, null, ' '), '');
101
+ logger.info(`${''}headers:`, JSON.stringify(headers, null, ' '), '');
114
102
  }
115
103
  const resp = await fetch(url, {
116
104
  method,
117
- body: ['GET', 'HEAD'].includes(method)
118
- ? undefined
119
- : req,
105
+ body: ['GET', 'HEAD'].includes(method) ? undefined : req,
120
106
  headers: headers,
121
107
  });
122
108
  status.value = resp.status;
@@ -125,10 +111,10 @@ function useProxy() {
125
111
  logger.info(`${''}response headers:${''}`);
126
112
  }
127
113
  const resHeaders = opts?.resHeaders
128
- ? applyProxyControls(resp.headers.entries(), opts?.resHeaders, resHeadersToBlock)
114
+ ? applyProxyControls(resp.headers.entries(), opts.resHeaders, resHeadersToBlock)
129
115
  : null;
130
116
  const resCookies = opts?.resCookies
131
- ? applyProxyControls(new CookiesIterable(resp.headers.get('set-cookie') || ''), opts?.resCookies)
117
+ ? applyProxyControls(new CookiesIterable(resp.headers.get('set-cookie') || ''), opts.resCookies)
132
118
  : null;
133
119
  if (resHeaders) {
134
120
  for (const [name, value] of Object.entries(resHeaders)) {
@@ -141,8 +127,7 @@ function useProxy() {
141
127
  }
142
128
  }
143
129
  if (resCookies) {
144
- setHeadersObject['set-cookie'] = (setHeadersObject['set-cookie'] ||
145
- []);
130
+ setHeadersObject['set-cookie'] = (setHeadersObject['set-cookie'] || []);
146
131
  for (const [name, value] of Object.entries(resCookies)) {
147
132
  if (name) {
148
133
  setHeadersObject['set-cookie'].push(`${name}=${value}`);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wooksjs/http-proxy",
3
- "version": "0.4.24",
3
+ "version": "0.4.27",
4
4
  "description": "Proxy Wooks composable",
5
5
  "main": "dist/index.cjs",
6
6
  "module": "dist/index.mjs",
@@ -39,8 +39,8 @@
39
39
  "url": "https://github.com/wooksjs/wooksjs/issues"
40
40
  },
41
41
  "peerDependencies": {
42
- "@wooksjs/event-http": "0.4.24",
43
- "@wooksjs/event-core": "0.4.24"
42
+ "@wooksjs/event-http": "0.4.27",
43
+ "@wooksjs/event-core": "0.4.27"
44
44
  },
45
45
  "dependencies": {
46
46
  "node-fetch-native": "^1.0.1"