@reclaimprotocol/attestor-core 3.0.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 (204) hide show
  1. package/README.md +39 -0
  2. package/lib/avs/abis/avsDirectoryABI.d.ts +60 -0
  3. package/lib/avs/abis/avsDirectoryABI.js +344 -0
  4. package/lib/avs/abis/delegationABI.d.ts +126 -0
  5. package/lib/avs/abis/delegationABI.js +5 -0
  6. package/lib/avs/abis/registryABI.d.ts +136 -0
  7. package/lib/avs/abis/registryABI.js +729 -0
  8. package/lib/avs/client/create-claim-on-avs.d.ts +10 -0
  9. package/lib/avs/client/create-claim-on-avs.js +147 -0
  10. package/lib/avs/config.d.ts +7 -0
  11. package/lib/avs/config.js +24 -0
  12. package/lib/avs/contracts/ReclaimServiceManager.d.ts +697 -0
  13. package/lib/avs/contracts/ReclaimServiceManager.js +3 -0
  14. package/lib/avs/contracts/common.d.ts +21 -0
  15. package/lib/avs/contracts/common.js +3 -0
  16. package/lib/avs/contracts/factories/ReclaimServiceManager__factory.d.ts +888 -0
  17. package/lib/avs/contracts/factories/ReclaimServiceManager__factory.js +1174 -0
  18. package/lib/avs/contracts/factories/index.d.ts +1 -0
  19. package/lib/avs/contracts/factories/index.js +9 -0
  20. package/lib/avs/contracts/index.d.ts +3 -0
  21. package/lib/avs/contracts/index.js +30 -0
  22. package/lib/avs/tests/test.operator.d.ts +11 -0
  23. package/lib/avs/tests/test.operator.js +313 -0
  24. package/lib/avs/tests/utils.d.ts +2 -0
  25. package/lib/avs/tests/utils.js +50 -0
  26. package/lib/avs/types/index.d.ts +55 -0
  27. package/lib/avs/types/index.js +3 -0
  28. package/lib/avs/utils/contracts.d.ts +21 -0
  29. package/lib/avs/utils/contracts.js +38 -0
  30. package/lib/avs/utils/register.d.ts +27 -0
  31. package/lib/avs/utils/register.js +76 -0
  32. package/lib/avs/utils/tasks.d.ts +22 -0
  33. package/lib/avs/utils/tasks.js +45 -0
  34. package/lib/client/create-claim.d.ts +5 -0
  35. package/lib/client/create-claim.js +357 -0
  36. package/lib/client/index.d.ts +3 -0
  37. package/lib/client/index.js +20 -0
  38. package/lib/client/tunnels/make-rpc-tcp-tunnel.d.ts +16 -0
  39. package/lib/client/tunnels/make-rpc-tcp-tunnel.js +60 -0
  40. package/lib/client/tunnels/make-rpc-tls-tunnel.d.ts +25 -0
  41. package/lib/client/tunnels/make-rpc-tls-tunnel.js +135 -0
  42. package/lib/client/utils/attestor-pool.d.ts +6 -0
  43. package/lib/client/utils/attestor-pool.js +28 -0
  44. package/lib/client/utils/client-socket.d.ts +9 -0
  45. package/lib/client/utils/client-socket.js +77 -0
  46. package/lib/client/utils/message-handler.d.ts +4 -0
  47. package/lib/client/utils/message-handler.js +93 -0
  48. package/lib/config/index.d.ts +23 -0
  49. package/lib/config/index.js +35 -0
  50. package/lib/index.d.ts +9 -0
  51. package/lib/index.js +39 -0
  52. package/lib/proto/api.d.ts +414 -0
  53. package/lib/proto/api.js +2756 -0
  54. package/lib/providers/http/index.d.ts +3 -0
  55. package/lib/providers/http/index.js +472 -0
  56. package/lib/providers/http/utils.d.ts +44 -0
  57. package/lib/providers/http/utils.js +302 -0
  58. package/lib/providers/index.d.ts +4 -0
  59. package/lib/providers/index.js +11 -0
  60. package/lib/scripts/check-avs-registration.d.ts +1 -0
  61. package/lib/scripts/check-avs-registration.js +28 -0
  62. package/lib/scripts/generate-provider-types.d.ts +5 -0
  63. package/lib/scripts/generate-provider-types.js +82 -0
  64. package/lib/scripts/generate-receipt.d.ts +9 -0
  65. package/lib/scripts/generate-receipt.js +93 -0
  66. package/lib/scripts/register-avs-operator.d.ts +1 -0
  67. package/lib/scripts/register-avs-operator.js +6 -0
  68. package/lib/scripts/start-server.d.ts +1 -0
  69. package/lib/scripts/start-server.js +6 -0
  70. package/lib/scripts/verify-root-ca.d.ts +1 -0
  71. package/lib/scripts/verify-root-ca.js +51 -0
  72. package/lib/server/create-server.d.ts +7 -0
  73. package/lib/server/create-server.js +85 -0
  74. package/lib/server/handlers/claimTunnel.d.ts +2 -0
  75. package/lib/server/handlers/claimTunnel.js +55 -0
  76. package/lib/server/handlers/completeClaimOnChain.d.ts +2 -0
  77. package/lib/server/handlers/completeClaimOnChain.js +28 -0
  78. package/lib/server/handlers/createClaimOnChain.d.ts +2 -0
  79. package/lib/server/handlers/createClaimOnChain.js +31 -0
  80. package/lib/server/handlers/createTunnel.d.ts +2 -0
  81. package/lib/server/handlers/createTunnel.js +65 -0
  82. package/lib/server/handlers/disconnectTunnel.d.ts +2 -0
  83. package/lib/server/handlers/disconnectTunnel.js +10 -0
  84. package/lib/server/handlers/index.d.ts +4 -0
  85. package/lib/server/handlers/index.js +18 -0
  86. package/lib/server/handlers/init.d.ts +2 -0
  87. package/lib/server/handlers/init.js +21 -0
  88. package/lib/server/index.d.ts +4 -0
  89. package/lib/server/index.js +21 -0
  90. package/lib/server/socket.d.ts +11 -0
  91. package/lib/server/socket.js +95 -0
  92. package/lib/server/tunnels/make-tcp-tunnel.d.ts +20 -0
  93. package/lib/server/tunnels/make-tcp-tunnel.js +182 -0
  94. package/lib/server/utils/apm.d.ts +11 -0
  95. package/lib/server/utils/apm.js +39 -0
  96. package/lib/server/utils/assert-valid-claim-request.d.ts +29 -0
  97. package/lib/server/utils/assert-valid-claim-request.js +189 -0
  98. package/lib/server/utils/config-env.d.ts +1 -0
  99. package/lib/server/utils/config-env.js +7 -0
  100. package/lib/server/utils/generics.d.ts +22 -0
  101. package/lib/server/utils/generics.js +59 -0
  102. package/lib/server/utils/iso.d.ts +1 -0
  103. package/lib/server/utils/iso.js +260 -0
  104. package/lib/server/utils/keep-alive.d.ts +7 -0
  105. package/lib/server/utils/keep-alive.js +42 -0
  106. package/lib/server/utils/process-handshake.d.ts +13 -0
  107. package/lib/server/utils/process-handshake.js +179 -0
  108. package/lib/server/utils/verify-server-certificates.d.ts +7 -0
  109. package/lib/server/utils/verify-server-certificates.js +102 -0
  110. package/lib/tests/describe-with-server.d.ts +21 -0
  111. package/lib/tests/describe-with-server.js +67 -0
  112. package/lib/tests/mock-provider-server.d.ts +13 -0
  113. package/lib/tests/mock-provider-server.js +65 -0
  114. package/lib/tests/mocks.d.ts +4 -0
  115. package/lib/tests/mocks.js +23 -0
  116. package/lib/tests/test.claim-creation.d.ts +1 -0
  117. package/lib/tests/test.claim-creation.js +187 -0
  118. package/lib/tests/test.http-parser.d.ts +1 -0
  119. package/lib/tests/test.http-parser.js +118 -0
  120. package/lib/tests/test.http-provider-utils.d.ts +1 -0
  121. package/lib/tests/test.http-provider-utils.js +1932 -0
  122. package/lib/tests/test.http-provider.d.ts +1 -0
  123. package/lib/tests/test.http-provider.js +43 -0
  124. package/lib/tests/test.rpc-communication.d.ts +1 -0
  125. package/lib/tests/test.rpc-communication.js +64 -0
  126. package/lib/tests/test.rpc-tunnel.d.ts +1 -0
  127. package/lib/tests/test.rpc-tunnel.js +168 -0
  128. package/lib/tests/test.signatures.d.ts +1 -0
  129. package/lib/tests/test.signatures.js +24 -0
  130. package/lib/tests/test.tcp-tunnel.d.ts +1 -0
  131. package/lib/tests/test.tcp-tunnel.js +64 -0
  132. package/lib/tests/test.zk.d.ts +1 -0
  133. package/lib/tests/test.zk.js +169 -0
  134. package/lib/tests/utils.d.ts +12 -0
  135. package/lib/tests/utils.js +49 -0
  136. package/lib/types/claims.d.ts +64 -0
  137. package/lib/types/claims.js +3 -0
  138. package/lib/types/client.d.ts +136 -0
  139. package/lib/types/client.js +3 -0
  140. package/lib/types/general.d.ts +39 -0
  141. package/lib/types/general.js +3 -0
  142. package/lib/types/handlers.d.ts +10 -0
  143. package/lib/types/handlers.js +3 -0
  144. package/lib/types/index.d.ts +9 -0
  145. package/lib/types/index.js +26 -0
  146. package/lib/types/providers.d.ts +135 -0
  147. package/lib/types/providers.gen.d.ts +414 -0
  148. package/lib/types/providers.gen.js +14 -0
  149. package/lib/types/providers.js +3 -0
  150. package/lib/types/rpc.d.ts +35 -0
  151. package/lib/types/rpc.js +3 -0
  152. package/lib/types/signatures.d.ts +28 -0
  153. package/lib/types/signatures.js +3 -0
  154. package/lib/types/tunnel.d.ts +18 -0
  155. package/lib/types/tunnel.js +3 -0
  156. package/lib/types/zk.d.ts +16 -0
  157. package/lib/types/zk.js +3 -0
  158. package/lib/utils/benchmark.d.ts +1 -0
  159. package/lib/utils/benchmark.js +70 -0
  160. package/lib/utils/claims.d.ts +33 -0
  161. package/lib/utils/claims.js +112 -0
  162. package/lib/utils/env.d.ts +3 -0
  163. package/lib/utils/env.js +20 -0
  164. package/lib/utils/error.d.ts +27 -0
  165. package/lib/utils/error.js +43 -0
  166. package/lib/utils/generics.d.ts +112 -0
  167. package/lib/utils/generics.js +348 -0
  168. package/lib/utils/http-parser.d.ts +55 -0
  169. package/lib/utils/http-parser.js +249 -0
  170. package/lib/utils/index.d.ts +10 -0
  171. package/lib/utils/index.js +27 -0
  172. package/lib/utils/logger.d.ts +13 -0
  173. package/lib/utils/logger.js +100 -0
  174. package/lib/utils/prepare-packets.d.ts +16 -0
  175. package/lib/utils/prepare-packets.js +61 -0
  176. package/lib/utils/redactions.d.ts +41 -0
  177. package/lib/utils/redactions.js +111 -0
  178. package/lib/utils/retries.d.ts +12 -0
  179. package/lib/utils/retries.js +28 -0
  180. package/lib/utils/signatures/eth.d.ts +2 -0
  181. package/lib/utils/signatures/eth.js +33 -0
  182. package/lib/utils/signatures/index.d.ts +5 -0
  183. package/lib/utils/signatures/index.js +11 -0
  184. package/lib/utils/socket-base.d.ts +21 -0
  185. package/lib/utils/socket-base.js +89 -0
  186. package/lib/utils/tls.d.ts +2 -0
  187. package/lib/utils/tls.js +32 -0
  188. package/lib/utils/validation.d.ts +2 -0
  189. package/lib/utils/validation.js +46 -0
  190. package/lib/utils/ws.d.ts +12 -0
  191. package/lib/utils/ws.js +21 -0
  192. package/lib/utils/zk.d.ts +50 -0
  193. package/lib/utils/zk.js +282 -0
  194. package/lib/window-rpc/index.d.ts +3 -0
  195. package/lib/window-rpc/index.js +20 -0
  196. package/lib/window-rpc/setup-window-rpc.d.ts +5 -0
  197. package/lib/window-rpc/setup-window-rpc.js +239 -0
  198. package/lib/window-rpc/types.d.ts +184 -0
  199. package/lib/window-rpc/types.js +3 -0
  200. package/lib/window-rpc/utils.d.ts +13 -0
  201. package/lib/window-rpc/utils.js +76 -0
  202. package/lib/window-rpc/window-rpc-zk.d.ts +11 -0
  203. package/lib/window-rpc/window-rpc-zk.js +72 -0
  204. package/package.json +117 -0
@@ -0,0 +1,3 @@
1
+ import { Provider } from 'src/types';
2
+ declare const HTTP_PROVIDER: Provider<'http'>;
3
+ export default HTTP_PROVIDER;
@@ -0,0 +1,472 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tls_1 = require("@reclaimprotocol/tls");
4
+ const utils_1 = require("ethers/lib/utils");
5
+ const config_1 = require("src/config");
6
+ const utils_2 = require("src/providers/http/utils");
7
+ const utils_3 = require("src/utils");
8
+ const OK_HTTP_HEADER = 'HTTP/1.1 200';
9
+ const dateHeaderRegex = '[dD]ate: ((?:Mon|Tue|Wed|Thu|Fri|Sat|Sun), (?:[0-3][0-9]) (?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) (?:[0-9]{4}) (?:[01][0-9]|2[0-3])(?::[0-5][0-9]){2} GMT)';
10
+ const dateDiff = 1000 * 60 * 10; // allow 10 min difference
11
+ const HTTP_PROVIDER = {
12
+ hostPort: getHostPort,
13
+ writeRedactionMode(params) {
14
+ return ('writeRedactionMode' in params)
15
+ ? params.writeRedactionMode
16
+ : undefined;
17
+ },
18
+ geoLocation(params) {
19
+ return ('geoLocation' in params)
20
+ ? getGeoLocation(params)
21
+ : undefined;
22
+ },
23
+ additionalClientOptions(params) {
24
+ let defaultOptions = {
25
+ applicationLayerProtocols: ['http/1.1']
26
+ };
27
+ if ('additionalClientOptions' in params) {
28
+ defaultOptions = {
29
+ ...defaultOptions,
30
+ ...params.additionalClientOptions
31
+ };
32
+ }
33
+ return defaultOptions;
34
+ },
35
+ createRequest(secretParams, params) {
36
+ var _a;
37
+ if (!secretParams.cookieStr &&
38
+ !secretParams.authorisationHeader &&
39
+ !secretParams.headers) {
40
+ throw new Error('auth parameters are not set');
41
+ }
42
+ const pubHeaders = params.headers || {};
43
+ const secHeaders = { ...secretParams.headers };
44
+ if (secretParams.cookieStr) {
45
+ secHeaders['Cookie'] = secretParams.cookieStr;
46
+ }
47
+ if (secretParams.authorisationHeader) {
48
+ secHeaders['Authorization'] = secretParams.authorisationHeader;
49
+ }
50
+ const hasUserAgent = Object.keys(pubHeaders)
51
+ .some(k => k.toLowerCase() === 'user-agent') ||
52
+ Object.keys(secHeaders)
53
+ .some(k => k.toLowerCase() === 'user-agent');
54
+ if (!hasUserAgent) {
55
+ //only set user-agent if not set by provider
56
+ pubHeaders['User-Agent'] = config_1.RECLAIM_USER_AGENT;
57
+ }
58
+ const newParams = substituteParamValues(params, secretParams);
59
+ params = newParams.newParams;
60
+ const url = new URL(params.url);
61
+ const { pathname } = url;
62
+ const searchParams = params.url.includes('?') ? params.url.split('?')[1] : '';
63
+ utils_3.logger.info({ url: params.url, path: pathname, query: searchParams.toString() });
64
+ const body = params.body instanceof Uint8Array
65
+ ? params.body
66
+ : (0, tls_1.strToUint8Array)(params.body || '');
67
+ const contentLength = body.length;
68
+ const reqLine = `${params.method} ${pathname}${(searchParams === null || searchParams === void 0 ? void 0 : searchParams.length) ? '?' + searchParams : ''} HTTP/1.1`;
69
+ const secHeadersList = (0, utils_2.buildHeaders)(secHeaders);
70
+ utils_3.logger.info({ requestLine: reqLine });
71
+ const httpReqHeaderStr = [
72
+ reqLine,
73
+ `Host: ${getHostHeaderString(url)}`,
74
+ `Content-Length: ${contentLength}`,
75
+ 'Connection: close',
76
+ //no compression
77
+ 'Accept-Encoding: identity',
78
+ ...(0, utils_2.buildHeaders)(pubHeaders),
79
+ ...secHeadersList,
80
+ '\r\n',
81
+ ].join('\r\n');
82
+ const headerStr = (0, tls_1.strToUint8Array)(httpReqHeaderStr);
83
+ const data = (0, tls_1.concatenateUint8Arrays)([headerStr, body]);
84
+ // hide all secret headers
85
+ const secHeadersStr = secHeadersList.join('\r\n');
86
+ const tokenStartIndex = (0, utils_3.findIndexInUint8Array)(data, (0, tls_1.strToUint8Array)(secHeadersStr));
87
+ const redactions = [
88
+ {
89
+ fromIndex: tokenStartIndex,
90
+ toIndex: tokenStartIndex + secHeadersStr.length,
91
+ }
92
+ ];
93
+ if (((_a = newParams.hiddenBodyParts) === null || _a === void 0 ? void 0 : _a.length) > 0) {
94
+ for (const hiddenBodyPart of newParams.hiddenBodyParts) {
95
+ if (hiddenBodyPart.length) {
96
+ redactions.push({
97
+ fromIndex: headerStr.length + hiddenBodyPart.index,
98
+ toIndex: headerStr.length + hiddenBodyPart.index + hiddenBodyPart.length,
99
+ });
100
+ }
101
+ }
102
+ }
103
+ return {
104
+ data,
105
+ redactions: redactions,
106
+ };
107
+ },
108
+ getResponseRedactions(response, rawParams) {
109
+ var _a, _b;
110
+ const res = (0, utils_2.parseHttpResponse)(response);
111
+ if (!((_a = rawParams.responseRedactions) === null || _a === void 0 ? void 0 : _a.length)) {
112
+ return [];
113
+ }
114
+ const newParams = substituteParamValues(rawParams, undefined, true);
115
+ const params = newParams.newParams;
116
+ const headerEndIndex = res.statusLineEndIndex;
117
+ const bodyStartIdx = (_b = res.bodyStartIndex) !== null && _b !== void 0 ? _b : 0;
118
+ if (bodyStartIdx < 4) {
119
+ utils_3.logger.error({ response: (0, utils_3.uint8ArrayToBinaryStr)(response) });
120
+ throw new Error('Failed to find response body');
121
+ }
122
+ const reveals = [{ fromIndex: 0, toIndex: headerEndIndex }];
123
+ //reveal date header
124
+ if (res.headerIndices['date']) {
125
+ reveals.push(res.headerIndices['date']);
126
+ }
127
+ const body = (0, utils_3.uint8ArrayToBinaryStr)(res.body);
128
+ const redactions = [];
129
+ for (const rs of params.responseRedactions || []) {
130
+ let element = body;
131
+ let elementIdx = 0;
132
+ let elementLength = -1;
133
+ if (rs.xPath) {
134
+ const { start, end } = (0, utils_2.extractHTMLElementIndex)(body, rs.xPath, !!rs.jsonPath);
135
+ element = body.slice(start, end);
136
+ elementIdx = start;
137
+ elementLength = end - start;
138
+ }
139
+ if (rs.jsonPath) {
140
+ const { start, end } = (0, utils_2.extractJSONValueIndex)(element, rs.jsonPath);
141
+ element = body.slice(elementIdx + start, elementIdx + end);
142
+ elementIdx += start;
143
+ elementLength = end - start;
144
+ }
145
+ if (rs.regex) {
146
+ const regexp = (0, utils_2.makeRegex)(rs.regex);
147
+ const elem = element || body;
148
+ const match = regexp.exec(elem);
149
+ if (!(match === null || match === void 0 ? void 0 : match[0])) {
150
+ utils_3.logger.error({ response: (0, utils_3.uint8ArrayToBinaryStr)(res.body) });
151
+ throw new Error(`regexp ${rs.regex} does not match found element '${elem}'`);
152
+ }
153
+ elementIdx += match.index;
154
+ elementLength = regexp.lastIndex - match.index;
155
+ element = match[0];
156
+ }
157
+ if (elementIdx >= 0 && elementLength > 0) {
158
+ const from = (0, utils_2.convertResponsePosToAbsolutePos)(elementIdx, bodyStartIdx, res.chunks);
159
+ const to = (0, utils_2.convertResponsePosToAbsolutePos)(elementIdx + elementLength, bodyStartIdx, res.chunks);
160
+ reveals.push({ fromIndex: from, toIndex: to });
161
+ redactions.push(...(0, utils_2.getRedactionsForChunkHeaders)(from, to, res.chunks));
162
+ }
163
+ }
164
+ reveals.sort((a, b) => {
165
+ return a.toIndex - b.toIndex;
166
+ });
167
+ if (reveals.length > 1) {
168
+ let currentIndex = 0;
169
+ for (const r of reveals) {
170
+ if (currentIndex < r.fromIndex) {
171
+ redactions.push({ fromIndex: currentIndex, toIndex: r.fromIndex });
172
+ }
173
+ currentIndex = r.toIndex;
174
+ }
175
+ redactions.push({ fromIndex: currentIndex, toIndex: response.length });
176
+ }
177
+ redactions.sort((a, b) => {
178
+ return a.toIndex - b.toIndex;
179
+ });
180
+ return redactions;
181
+ },
182
+ assertValidProviderReceipt(receipt, paramsAny) {
183
+ logTranscript();
184
+ let extractedParams = {};
185
+ const secretParams = ('secretParams' in paramsAny) ? paramsAny.secretParams : undefined;
186
+ const newParams = substituteParamValues(paramsAny, secretParams, false);
187
+ const params = newParams.newParams;
188
+ extractedParams = { ...extractedParams, ...newParams.extractedValues };
189
+ const req = (0, utils_3.getHttpRequestDataFromTranscript)(receipt);
190
+ if (req.method !== params.method.toLowerCase()) {
191
+ throw new Error(`Invalid method: ${req.method}`);
192
+ }
193
+ const url = new URL(params.url);
194
+ const { protocol, pathname } = url;
195
+ if (protocol !== 'https:') {
196
+ utils_3.logger.error('params URL: %s', params.url);
197
+ throw new Error(`Expected protocol: https, found: ${protocol}`);
198
+ }
199
+ const searchParams = params.url.includes('?') ? params.url.split('?')[1] : '';
200
+ const expectedPath = pathname + ((searchParams === null || searchParams === void 0 ? void 0 : searchParams.length) ? '?' + searchParams : '');
201
+ if (req.url !== expectedPath) {
202
+ utils_3.logger.error('params URL: %s', params.url);
203
+ throw new Error(`Expected path: ${expectedPath}, found: ${req.url}`);
204
+ }
205
+ const expectedHostStr = getHostHeaderString(url);
206
+ if (req.headers.host !== expectedHostStr) {
207
+ throw new Error(`Expected host: ${expectedHostStr}, found: ${req.headers.host}`);
208
+ }
209
+ const connectionHeader = req.headers['connection'];
210
+ if (connectionHeader !== 'close') {
211
+ throw new Error(`Connection header must be "close", got "${connectionHeader}"`);
212
+ }
213
+ const serverBlocks = receipt
214
+ .filter(s => s.sender === 'server')
215
+ .map((r) => r.message)
216
+ .filter(b => !b.every(b => b === utils_3.REDACTION_CHAR_CODE)); // filter out fully redacted blocks
217
+ const response = concatArrays(...serverBlocks);
218
+ let res;
219
+ let bodyStart = OK_HTTP_HEADER.length;
220
+ if (secretParams) { //means we're on client doing preliminary checks
221
+ const parsedResp = (0, utils_2.parseHttpResponse)(response); // to deal with chunked responses
222
+ if (parsedResp.statusCode !== 200) {
223
+ throw new Error(`Provider returned error ${parsedResp.statusCode} ${parsedResp.statusMessage}"`);
224
+ }
225
+ res = (0, utils_3.uint8ArrayToStr)(parsedResp.body);
226
+ }
227
+ else {
228
+ res = (0, utils_3.uint8ArrayToStr)(response);
229
+ if (!res.startsWith(OK_HTTP_HEADER)) {
230
+ const statusRegex = (0, utils_2.makeRegex)('^HTTP\\/1.1 (\\d{3})');
231
+ const matchRes = statusRegex.exec(res);
232
+ if (matchRes && matchRes.length > 1) {
233
+ throw new Error(`Provider returned error ${matchRes[1]}"`);
234
+ }
235
+ let lineEnd = res.indexOf('*');
236
+ if (lineEnd === -1) {
237
+ lineEnd = res.indexOf('\n');
238
+ }
239
+ if (lineEnd === -1) {
240
+ lineEnd = OK_HTTP_HEADER.length;
241
+ }
242
+ throw new Error(`Response did not start with "${OK_HTTP_HEADER}" got "${res.slice(0, lineEnd)}"`);
243
+ }
244
+ }
245
+ //validate server Date header if present
246
+ const dateHeader = (0, utils_2.makeRegex)(dateHeaderRegex).exec(res);
247
+ if ((dateHeader === null || dateHeader === void 0 ? void 0 : dateHeader.length) > 1) {
248
+ const serverDate = Date.parse(dateHeader[1]);
249
+ if ((Date.now() - serverDate) > dateDiff) {
250
+ utils_3.logger.info({ dateHeader: dateHeader[0], current: Date.now() }, 'date header is off');
251
+ throw new Error(`Server date is off by "${(Date.now() - serverDate) / 1000} s"`);
252
+ }
253
+ bodyStart = dateHeader.index + dateHeader[0].length;
254
+ }
255
+ const paramBody = params.body instanceof Uint8Array
256
+ ? params.body
257
+ : (0, tls_1.strToUint8Array)(params.body || '');
258
+ if (paramBody.length > 0 && !(0, utils_2.matchRedactedStrings)(paramBody, req.body)) {
259
+ throw new Error('request body mismatch');
260
+ }
261
+ //remove asterisks to account for chunks in the middle of revealed strings
262
+ if (!secretParams) {
263
+ res = res.slice(bodyStart).replace(/(\*){3,}/g, '');
264
+ }
265
+ for (const { type, value, invert } of params.responseMatches || []) {
266
+ const inv = Boolean(invert); // explicitly cast to boolean
267
+ switch (type) {
268
+ case 'regex':
269
+ const regexRes = (0, utils_2.makeRegex)(value).exec(res);
270
+ const match = regexRes !== null;
271
+ if (match === inv) { // if both true or both false then fail
272
+ throw new Error('Invalid receipt.'
273
+ + ` Regex "${value}" ${invert ? 'matched' : "didn't match"}`);
274
+ }
275
+ if (!match) {
276
+ continue;
277
+ }
278
+ const groups = regexRes === null || regexRes === void 0 ? void 0 : regexRes.groups;
279
+ for (const paramName in groups || []) {
280
+ if (paramName in extractedParams) {
281
+ throw new Error(`Duplicate parameter ${paramName}`);
282
+ }
283
+ extractedParams[paramName] = groups[paramName];
284
+ }
285
+ break;
286
+ case 'contains':
287
+ const includes = res.includes(value);
288
+ if (includes === inv) {
289
+ throw new Error(`Invalid receipt. Response ${invert ? 'contains' : 'does not contain'} "${value}"`);
290
+ }
291
+ break;
292
+ default:
293
+ throw new Error(`Invalid response match type ${type}`);
294
+ }
295
+ }
296
+ function concatArrays(...bufs) {
297
+ const totalSize = bufs.reduce((acc, e) => acc + e.length, 0);
298
+ const merged = new Uint8Array(totalSize);
299
+ let lenDone = 0;
300
+ for (const array of bufs) {
301
+ merged.set(array, lenDone);
302
+ lenDone += array.length;
303
+ }
304
+ return merged;
305
+ }
306
+ return { extractedParameters: extractedParams };
307
+ function logTranscript() {
308
+ const clientMsgs = receipt.filter(s => s.sender === 'client').map(m => m.message);
309
+ const serverMsgs = receipt.filter(s => s.sender === 'server').map(m => m.message);
310
+ const clientTranscript = utils_1.base64.encode((0, tls_1.concatenateUint8Arrays)(clientMsgs));
311
+ const serverTranscript = utils_1.base64.encode((0, tls_1.concatenateUint8Arrays)(serverMsgs));
312
+ utils_3.logger.debug({ request: clientTranscript, response: serverTranscript, params: paramsAny });
313
+ }
314
+ },
315
+ };
316
+ function getHostPort(params) {
317
+ const { host } = new URL(getURL(params));
318
+ if (!host) {
319
+ throw new Error('url is incorrect');
320
+ }
321
+ return host;
322
+ }
323
+ /**
324
+ * Obtain the host header string from the URL.
325
+ * https://stackoverflow.com/a/3364396
326
+ */
327
+ function getHostHeaderString(url) {
328
+ const host = url.hostname;
329
+ const port = url.port;
330
+ return port && +port !== config_1.DEFAULT_HTTPS_PORT
331
+ ? `${host}:${port}`
332
+ : host;
333
+ }
334
+ const paramsRegex = /\{\{([^{}]+)}}/sgi;
335
+ function substituteParamValues(currentParams, secretParams, ignoreMissingBodyParams) {
336
+ const params = JSON.parse(JSON.stringify(currentParams));
337
+ let extractedValues = {};
338
+ const urlParams = extractAndReplaceTemplateValues(params.url);
339
+ if (urlParams) {
340
+ params.url = urlParams.newParam;
341
+ extractedValues = { ...urlParams.extractedValues };
342
+ }
343
+ let bodyParams;
344
+ let hiddenBodyParts = [];
345
+ if (params.body) {
346
+ const strBody = typeof params.body === 'string' ? params.body : (0, utils_3.uint8ArrayToStr)(params.body);
347
+ bodyParams = extractAndReplaceTemplateValues(strBody, ignoreMissingBodyParams);
348
+ if (bodyParams) {
349
+ params.body = bodyParams.newParam;
350
+ extractedValues = { ...extractedValues, ...bodyParams.extractedValues };
351
+ hiddenBodyParts = bodyParams.hiddenParts;
352
+ }
353
+ }
354
+ const geoParams = extractAndReplaceTemplateValues(params.geoLocation);
355
+ if (geoParams) {
356
+ params.geoLocation = geoParams.newParam;
357
+ extractedValues = { ...extractedValues, ...geoParams.extractedValues };
358
+ }
359
+ if (params.responseRedactions) {
360
+ for (const r of params.responseRedactions) {
361
+ if (r.regex) {
362
+ const regexParams = extractAndReplaceTemplateValues(r.regex);
363
+ r.regex = regexParams === null || regexParams === void 0 ? void 0 : regexParams.newParam;
364
+ }
365
+ if (r.xPath) {
366
+ const xpathParams = extractAndReplaceTemplateValues(r.xPath);
367
+ r.xPath = xpathParams === null || xpathParams === void 0 ? void 0 : xpathParams.newParam;
368
+ }
369
+ if (r.jsonPath) {
370
+ const jsonPathParams = extractAndReplaceTemplateValues(r.jsonPath);
371
+ r.jsonPath = jsonPathParams === null || jsonPathParams === void 0 ? void 0 : jsonPathParams.newParam;
372
+ }
373
+ }
374
+ }
375
+ if (params.responseMatches) {
376
+ for (const r of params.responseMatches) {
377
+ if (r.value !== '') {
378
+ const matchParam = extractAndReplaceTemplateValues(r.value);
379
+ r.value = matchParam === null || matchParam === void 0 ? void 0 : matchParam.newParam;
380
+ extractedValues = { ...extractedValues, ...matchParam === null || matchParam === void 0 ? void 0 : matchParam.extractedValues };
381
+ }
382
+ }
383
+ }
384
+ return {
385
+ newParams: params,
386
+ extractedValues: extractedValues,
387
+ hiddenBodyParts: hiddenBodyParts
388
+ };
389
+ function extractAndReplaceTemplateValues(param, ignoreMissingParams) {
390
+ if (!param) {
391
+ return null;
392
+ }
393
+ //const paramNames: Set<string> = new Set()
394
+ const extractedValues = {};
395
+ const hiddenParts = [];
396
+ let totalOffset = 0;
397
+ param = param.replace(paramsRegex, (match, pn, offset) => {
398
+ if (params.paramValues && pn in params.paramValues) {
399
+ extractedValues[pn] = params.paramValues[pn];
400
+ totalOffset += params.paramValues[pn].length - match.length;
401
+ return params.paramValues[pn];
402
+ }
403
+ else if (secretParams) {
404
+ if ((secretParams === null || secretParams === void 0 ? void 0 : secretParams.paramValues) && pn in (secretParams === null || secretParams === void 0 ? void 0 : secretParams.paramValues)) {
405
+ hiddenParts.push({
406
+ index: offset + totalOffset,
407
+ length: secretParams.paramValues[pn].length,
408
+ });
409
+ totalOffset += secretParams.paramValues[pn].length - match.length;
410
+ return secretParams.paramValues[pn];
411
+ }
412
+ else {
413
+ throw new Error(`parameter's "${pn}" value not found in paramValues and secret parameter's paramValues`);
414
+ }
415
+ }
416
+ else {
417
+ if (!(!!ignoreMissingParams)) {
418
+ throw new Error(`parameter's "${pn}" value not found in paramValues`);
419
+ }
420
+ else {
421
+ return match;
422
+ }
423
+ }
424
+ });
425
+ return {
426
+ newParam: param,
427
+ extractedValues: extractedValues,
428
+ hiddenParts: hiddenParts
429
+ };
430
+ }
431
+ }
432
+ function getGeoLocation(v2Params) {
433
+ if (v2Params === null || v2Params === void 0 ? void 0 : v2Params.geoLocation) {
434
+ const paramNames = new Set();
435
+ let geo = v2Params.geoLocation;
436
+ //extract param names
437
+ let match = null;
438
+ while (match = paramsRegex.exec(geo)) {
439
+ paramNames.add(match[1]);
440
+ }
441
+ for (const pn of paramNames) {
442
+ if (v2Params.paramValues && pn in v2Params.paramValues) {
443
+ geo = geo === null || geo === void 0 ? void 0 : geo.replaceAll(`{{${pn}}}`, v2Params.paramValues[pn].toString());
444
+ }
445
+ else {
446
+ throw new Error(`parameter "${pn}" value not found in templateParams`);
447
+ }
448
+ }
449
+ return geo;
450
+ }
451
+ return undefined;
452
+ }
453
+ function getURL(v2Params) {
454
+ let hostPort = v2Params === null || v2Params === void 0 ? void 0 : v2Params.url;
455
+ const paramNames = new Set();
456
+ //extract param names
457
+ let match = null;
458
+ while (match = paramsRegex.exec(hostPort)) {
459
+ paramNames.add(match[1]);
460
+ }
461
+ for (const pn of paramNames) {
462
+ if (v2Params.paramValues && pn in v2Params.paramValues) {
463
+ hostPort = hostPort === null || hostPort === void 0 ? void 0 : hostPort.replaceAll(`{{${pn}}}`, v2Params.paramValues[pn].toString());
464
+ }
465
+ else {
466
+ throw new Error(`parameter "${pn}" value not found in templateParams`);
467
+ }
468
+ }
469
+ return hostPort;
470
+ }
471
+ exports.default = HTTP_PROVIDER;
472
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcHJvdmlkZXJzL2h0dHAvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSw4Q0FBb0c7QUFDcEcsNENBQXlDO0FBQ3pDLHVDQUFtRTtBQUNuRSxvREFRaUM7QUFFakMscUNBTWtCO0FBRWxCLE1BQU0sY0FBYyxHQUFHLGNBQWMsQ0FBQTtBQUNyQyxNQUFNLGVBQWUsR0FBRyx3S0FBd0ssQ0FBQTtBQUNoTSxNQUFNLFFBQVEsR0FBRyxJQUFJLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQSxDQUFDLDBCQUEwQjtBQUcxRCxNQUFNLGFBQWEsR0FBcUI7SUFDdkMsUUFBUSxFQUFFLFdBQVc7SUFDckIsa0JBQWtCLENBQUMsTUFBTTtRQUN4QixPQUFPLENBQUMsb0JBQW9CLElBQUksTUFBTSxDQUFDO1lBQ3RDLENBQUMsQ0FBQyxNQUFNLENBQUMsa0JBQWtCO1lBQzNCLENBQUMsQ0FBQyxTQUFTLENBQUE7SUFDYixDQUFDO0lBQ0QsV0FBVyxDQUFDLE1BQU07UUFDakIsT0FBTyxDQUFDLGFBQWEsSUFBSSxNQUFNLENBQUM7WUFDL0IsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUM7WUFDeEIsQ0FBQyxDQUFDLFNBQVMsQ0FBQTtJQUNiLENBQUM7SUFDRCx1QkFBdUIsQ0FBQyxNQUFNO1FBQzdCLElBQUksY0FBYyxHQUF5QjtZQUMxQyx5QkFBeUIsRUFBRyxDQUFDLFVBQVUsQ0FBQztTQUN4QyxDQUFBO1FBQ0QsSUFBRyx5QkFBeUIsSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUN4QyxjQUFjLEdBQUc7Z0JBQ2hCLEdBQUcsY0FBYztnQkFDakIsR0FBRyxNQUFNLENBQUMsdUJBQXVCO2FBQ2pDLENBQUE7UUFDRixDQUFDO1FBRUQsT0FBTyxjQUFjLENBQUE7SUFDdEIsQ0FBQztJQUNELGFBQWEsQ0FBQyxZQUFZLEVBQUUsTUFBTTs7UUFDakMsSUFDQyxDQUFD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
@@ -0,0 +1,44 @@
1
+ import { ArraySlice, CompleteTLSPacket, ProviderParams, Transcript } from 'src/types';
2
+ import { HttpRequest, HttpResponse } from 'src/utils';
3
+ export type JSONIndex = {
4
+ start: number;
5
+ end: number;
6
+ };
7
+ type HTTPProviderParams = ProviderParams<'http'>;
8
+ export declare function extractHTMLElement(html: string, xpathExpression: string, contentsOnly: boolean): string;
9
+ export declare function extractHTMLElementIndex(html: string, xpathExpression: string, contentsOnly: boolean): {
10
+ start: number;
11
+ end: number;
12
+ };
13
+ export declare function extractJSONValueIndex(json: string, jsonPath: string): {
14
+ start: number;
15
+ end: number;
16
+ };
17
+ export declare function buildHeaders(input: HTTPProviderParams['headers']): string[];
18
+ /**
19
+ * Converts position in HTTP response body to an absolute position in TLS transcript considering chunked encoding
20
+ * @param pos
21
+ * @param bodyStartIdx
22
+ * @param chunks
23
+ */
24
+ export declare function convertResponsePosToAbsolutePos(pos: number, bodyStartIdx: number, chunks?: ArraySlice[]): number;
25
+ /**
26
+ * Returns parts of response which contain chunk headers and must be redacted out
27
+ * of revealed response part
28
+ * @param from
29
+ * @param to
30
+ * @param chunks
31
+ */
32
+ export declare function getRedactionsForChunkHeaders(from: any, to: number, chunks?: ArraySlice[]): ArraySlice[];
33
+ export declare function parseHttpResponse(buff: Uint8Array): HttpResponse;
34
+ export declare function makeRegex(str: string): any;
35
+ /**
36
+ * Try to match strings that contain templates like {{param}}
37
+ * against redacted string that has *** instead of that param
38
+ */
39
+ export declare function matchRedactedStrings(templateString: Uint8Array, redactedString?: Uint8Array): boolean;
40
+ export declare function generateRequstAndResponseFromTranscript(transcript: Transcript<CompleteTLSPacket>, tlsVersion: string): {
41
+ req: HttpRequest;
42
+ res: HttpResponse;
43
+ };
44
+ export {};