@wooksjs/http-proxy 0.4.26 → 0.4.28

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,13 +51,10 @@ 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
  }
@@ -81,11 +78,7 @@ const reqHeadersToBlock = [
81
78
  'upgrade-insecure-requests',
82
79
  'cookie',
83
80
  ];
84
- const resHeadersToBlock = [
85
- 'transfer-encoding',
86
- 'content-encoding',
87
- 'set-cookie',
88
- ];
81
+ const resHeadersToBlock = ['transfer-encoding', 'content-encoding', 'set-cookie'];
89
82
  function useProxy() {
90
83
  const status = eventHttp.useStatus();
91
84
  const { setHeader, headers: getSetHeaders } = eventHttp.useSetHeaders();
@@ -99,26 +92,24 @@ function useProxy() {
99
92
  const url = new URL(path, targetUrl.origin).toString() + targetUrl.search;
100
93
  const modifiedHeaders = { ...req.headers, host: targetUrl.hostname };
101
94
  const headers = opts?.reqHeaders
102
- ? applyProxyControls(new HeadersIterable(modifiedHeaders), opts?.reqHeaders, reqHeadersToBlock)
95
+ ? applyProxyControls(new HeadersIterable(modifiedHeaders), opts.reqHeaders, reqHeadersToBlock)
103
96
  : {};
104
97
  const cookies = opts?.reqCookies && req.headers.cookie
105
- ? applyProxyControls(new CookiesIterable(req.headers.cookie), opts?.reqCookies)
98
+ ? applyProxyControls(new CookiesIterable(req.headers.cookie), opts.reqCookies)
106
99
  : null;
107
100
  if (cookies) {
108
101
  headers.cookie = Object.entries(cookies)
109
- .map((v) => v.join('='))
102
+ .map(v => v.join('='))
110
103
  .join('; ');
111
104
  }
112
105
  const method = opts?.method || req.method;
113
106
  if (opts?.debug) {
114
107
  logger.info(`${''}${req.method} ${req.url}${''} → ${''}${method} ${url}${''}`);
115
- logger.info('' + 'headers:', JSON.stringify(headers, null, ' '), '');
108
+ logger.info(`${''}headers:`, JSON.stringify(headers, null, ' '), '');
116
109
  }
117
110
  const resp = await nodeFetchNative.fetch(url, {
118
111
  method,
119
- body: ['GET', 'HEAD'].includes(method)
120
- ? undefined
121
- : req,
112
+ body: ['GET', 'HEAD'].includes(method) ? undefined : req,
122
113
  headers: headers,
123
114
  });
124
115
  status.value = resp.status;
@@ -127,10 +118,10 @@ function useProxy() {
127
118
  logger.info(`${''}response headers:${''}`);
128
119
  }
129
120
  const resHeaders = opts?.resHeaders
130
- ? applyProxyControls(resp.headers.entries(), opts?.resHeaders, resHeadersToBlock)
121
+ ? applyProxyControls(resp.headers.entries(), opts.resHeaders, resHeadersToBlock)
131
122
  : null;
132
123
  const resCookies = opts?.resCookies
133
- ? applyProxyControls(new CookiesIterable(resp.headers.get('set-cookie') || ''), opts?.resCookies)
124
+ ? applyProxyControls(new CookiesIterable(resp.headers.get('set-cookie') || ''), opts.resCookies)
134
125
  : null;
135
126
  if (resHeaders) {
136
127
  for (const [name, value] of Object.entries(resHeaders)) {
@@ -143,8 +134,7 @@ function useProxy() {
143
134
  }
144
135
  }
145
136
  if (resCookies) {
146
- setHeadersObject['set-cookie'] = (setHeadersObject['set-cookie'] ||
147
- []);
137
+ setHeadersObject['set-cookie'] = (setHeadersObject['set-cookie'] || []);
148
138
  for (const [name, value] of Object.entries(resCookies)) {
149
139
  if (name) {
150
140
  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,13 +49,10 @@ 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
  }
@@ -79,11 +76,7 @@ const reqHeadersToBlock = [
79
76
  'upgrade-insecure-requests',
80
77
  'cookie',
81
78
  ];
82
- const resHeadersToBlock = [
83
- 'transfer-encoding',
84
- 'content-encoding',
85
- 'set-cookie',
86
- ];
79
+ const resHeadersToBlock = ['transfer-encoding', 'content-encoding', 'set-cookie'];
87
80
  function useProxy() {
88
81
  const status = useStatus();
89
82
  const { setHeader, headers: getSetHeaders } = useSetHeaders();
@@ -97,26 +90,24 @@ function useProxy() {
97
90
  const url = new URL(path, targetUrl.origin).toString() + targetUrl.search;
98
91
  const modifiedHeaders = { ...req.headers, host: targetUrl.hostname };
99
92
  const headers = opts?.reqHeaders
100
- ? applyProxyControls(new HeadersIterable(modifiedHeaders), opts?.reqHeaders, reqHeadersToBlock)
93
+ ? applyProxyControls(new HeadersIterable(modifiedHeaders), opts.reqHeaders, reqHeadersToBlock)
101
94
  : {};
102
95
  const cookies = opts?.reqCookies && req.headers.cookie
103
- ? applyProxyControls(new CookiesIterable(req.headers.cookie), opts?.reqCookies)
96
+ ? applyProxyControls(new CookiesIterable(req.headers.cookie), opts.reqCookies)
104
97
  : null;
105
98
  if (cookies) {
106
99
  headers.cookie = Object.entries(cookies)
107
- .map((v) => v.join('='))
100
+ .map(v => v.join('='))
108
101
  .join('; ');
109
102
  }
110
103
  const method = opts?.method || req.method;
111
104
  if (opts?.debug) {
112
105
  logger.info(`${''}${req.method} ${req.url}${''} → ${''}${method} ${url}${''}`);
113
- logger.info('' + 'headers:', JSON.stringify(headers, null, ' '), '');
106
+ logger.info(`${''}headers:`, JSON.stringify(headers, null, ' '), '');
114
107
  }
115
108
  const resp = await fetch(url, {
116
109
  method,
117
- body: ['GET', 'HEAD'].includes(method)
118
- ? undefined
119
- : req,
110
+ body: ['GET', 'HEAD'].includes(method) ? undefined : req,
120
111
  headers: headers,
121
112
  });
122
113
  status.value = resp.status;
@@ -125,10 +116,10 @@ function useProxy() {
125
116
  logger.info(`${''}response headers:${''}`);
126
117
  }
127
118
  const resHeaders = opts?.resHeaders
128
- ? applyProxyControls(resp.headers.entries(), opts?.resHeaders, resHeadersToBlock)
119
+ ? applyProxyControls(resp.headers.entries(), opts.resHeaders, resHeadersToBlock)
129
120
  : null;
130
121
  const resCookies = opts?.resCookies
131
- ? applyProxyControls(new CookiesIterable(resp.headers.get('set-cookie') || ''), opts?.resCookies)
122
+ ? applyProxyControls(new CookiesIterable(resp.headers.get('set-cookie') || ''), opts.resCookies)
132
123
  : null;
133
124
  if (resHeaders) {
134
125
  for (const [name, value] of Object.entries(resHeaders)) {
@@ -141,8 +132,7 @@ function useProxy() {
141
132
  }
142
133
  }
143
134
  if (resCookies) {
144
- setHeadersObject['set-cookie'] = (setHeadersObject['set-cookie'] ||
145
- []);
135
+ setHeadersObject['set-cookie'] = (setHeadersObject['set-cookie'] || []);
146
136
  for (const [name, value] of Object.entries(resCookies)) {
147
137
  if (name) {
148
138
  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.26",
3
+ "version": "0.4.28",
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.26",
43
- "@wooksjs/event-core": "0.4.26"
42
+ "@wooksjs/event-http": "0.4.28",
43
+ "@wooksjs/event-core": "0.4.28"
44
44
  },
45
45
  "dependencies": {
46
46
  "node-fetch-native": "^1.0.1"