@reclaimprotocol/attestor-core 4.0.0 → 4.0.2

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 (73) hide show
  1. package/lib/avs/tests/test.operator.js +4 -4
  2. package/lib/client/create-claim.js +28 -14
  3. package/lib/client/tunnels/make-rpc-tcp-tunnel.js +3 -3
  4. package/lib/client/tunnels/make-rpc-tls-tunnel.js +3 -3
  5. package/lib/client/utils/client-socket.d.ts +2 -2
  6. package/lib/client/utils/client-socket.js +14 -8
  7. package/lib/client/utils/message-handler.js +5 -4
  8. package/lib/config/index.d.ts +6 -2
  9. package/lib/config/index.js +6 -4
  10. package/lib/index.d.ts +1 -0
  11. package/lib/index.js +2 -1
  12. package/lib/mechain/abis/governanceABI.d.ts +50 -0
  13. package/lib/mechain/abis/governanceABI.js +462 -0
  14. package/lib/mechain/abis/taskABI.d.ts +157 -0
  15. package/lib/mechain/abis/taskABI.js +513 -0
  16. package/lib/mechain/client/create-claim-on-mechain.d.ts +10 -0
  17. package/lib/mechain/client/create-claim-on-mechain.js +32 -0
  18. package/lib/mechain/client/index.d.ts +1 -0
  19. package/lib/mechain/client/index.js +18 -0
  20. package/lib/mechain/constants/index.d.ts +3 -0
  21. package/lib/mechain/constants/index.js +7 -0
  22. package/lib/mechain/index.d.ts +2 -0
  23. package/lib/mechain/index.js +19 -0
  24. package/lib/mechain/types/index.d.ts +23 -0
  25. package/lib/mechain/types/index.js +3 -0
  26. package/lib/proto/api.d.ts +16 -0
  27. package/lib/proto/api.js +194 -2
  28. package/lib/providers/http/index.js +45 -12
  29. package/lib/scripts/check-avs-registration.js +2 -2
  30. package/lib/scripts/generate-provider-types.js +2 -2
  31. package/lib/scripts/generate-toprf-keys.js +2 -2
  32. package/lib/scripts/register-avs-operator.js +2 -2
  33. package/lib/scripts/start-server.js +10 -3
  34. package/lib/scripts/update-avs-metadata.js +2 -2
  35. package/lib/scripts/verify-root-ca.js +2 -2
  36. package/lib/scripts/whitelist-operator.js +2 -2
  37. package/lib/server/handlers/claimTunnel.js +2 -2
  38. package/lib/server/handlers/createTaskOnMechain.d.ts +2 -0
  39. package/lib/server/handlers/createTaskOnMechain.js +52 -0
  40. package/lib/server/handlers/createTunnel.js +3 -3
  41. package/lib/server/handlers/index.js +3 -1
  42. package/lib/server/socket.js +11 -12
  43. package/lib/server/tunnels/make-tcp-tunnel.js +15 -8
  44. package/lib/server/utils/apm.js +8 -4
  45. package/lib/server/utils/assert-valid-claim-request.d.ts +2 -2
  46. package/lib/server/utils/assert-valid-claim-request.js +14 -11
  47. package/lib/tests/test.claim-creation.js +2 -2
  48. package/lib/tests/test.http-provider-utils.js +383 -230
  49. package/lib/tests/test.http-provider.js +30 -2
  50. package/lib/tests/test.rpc-tunnel.js +10 -6
  51. package/lib/tests/test.zk.d.ts +1 -1
  52. package/lib/tests/test.zk.js +127 -9
  53. package/lib/types/client.d.ts +2 -2
  54. package/lib/types/providers.d.ts +18 -3
  55. package/lib/types/providers.gen.d.ts +2 -3
  56. package/lib/types/providers.gen.js +2 -2
  57. package/lib/types/tunnel.d.ts +2 -2
  58. package/lib/types/zk.d.ts +0 -1
  59. package/lib/utils/http-parser.d.ts +4 -0
  60. package/lib/utils/http-parser.js +6 -3
  61. package/lib/utils/socket-base.js +2 -1
  62. package/lib/utils/zk.d.ts +1 -1
  63. package/lib/utils/zk.js +94 -55
  64. package/lib/window-rpc/setup-window-rpc.js +32 -1
  65. package/lib/window-rpc/types.d.ts +14 -1
  66. package/lib/window-rpc/utils.js +2 -2
  67. package/package.json +4 -3
  68. package/lib/providers/httpb64/index.d.ts +0 -3
  69. package/lib/providers/httpb64/index.js +0 -209
  70. package/lib/providers/httpb64/utils.d.ts +0 -77
  71. package/lib/providers/httpb64/utils.js +0 -358
  72. package/lib/server/utils/verify-server-certificates.d.ts +0 -7
  73. package/lib/server/utils/verify-server-certificates.js +0 -101
@@ -5,6 +5,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const tls_1 = require("@reclaimprotocol/tls");
7
7
  const assert_1 = __importDefault(require("assert"));
8
+ const config_1 = require("../config");
8
9
  const providers_1 = require("../providers");
9
10
  const http_1 = __importDefault(require("../providers/http"));
10
11
  const utils_1 = require("../providers/http/utils");
@@ -12,9 +13,27 @@ const test_http_parser_1 = require("../tests/test.http-parser");
12
13
  const utils_2 = require("../utils");
13
14
  const v8_1 = require("v8");
14
15
  jest.setTimeout(60000);
16
+ const ctx = config_1.PROVIDER_CTX;
15
17
  describe('HTTP Provider Utils tests', () => {
16
18
  const { hostPort, geoLocation, getResponseRedactions, createRequest, assertValidProviderReceipt } = providers_1.providers['http'];
17
- const transcript = JSON.parse('[{"message":"KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKio=","sender":"server"},{"message":"KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg==","sender":"server"},{"message":"KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq","sender":"server"},{"message":"KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg==","sender":"server"},{"message":"KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKio=","sender":"server"},{"message":"KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKio=","sender":"server"},{"message":"R0VUIC8gSFRUUC8xLjENCkhvc3Q6IHhhcmdzLm9yZw0KQ29udGVudC1MZW5ndGg6IDQNCkNvbm5lY3Rpb246IGNsb3NlDQpBY2NlcHQtRW5jb2Rpbmc6IGlkZW50aXR5DQp1c2VyLWFnZW50OiBNb3ppbGxhLzUuMA0K","sender":"client"},{"message":"KioqKio=","sender":"client"},{"message":"KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg==","sender":"client"},{"message":"KioqKio=","sender":"client"},{"message":"DQoNCnQ=","sender":"client"},{"message":"KioqKio=","sender":"client"},{"message":"Kg==","sender":"client"},{"message":"KioqKio=","sender":"client"},{"message":"c3Q=","sender":"client"},{"message":"SFRUUC8xLjEgMjAwIE9LKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg==","sender":"server"},{"message":"KioqKioqKioqKioqKioqKioqKioqKioqKioqKjx0aXRsZT5BaWtlbiAmYW1wOyBEcmlzY29sbCAmYW1wOyBXZWJiPC90aXRsZT4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqT25lIG9mIHRoZSBmZXcgZXhjZXB0aW9ucyBpcyBhIHNlcmllcyBvZiBkb2N1bWVudHMgdGhhdCBJJ3ZlIHdyaXR0ZW4KICAgIGJyZWFraW5nIGRvd24gY3J5cHRvZ3JhcGhpYyBhbmQgbmV0d29yayBwcm90b2NvbHMgYnl0ZS1ieS1ieXRlLiBJJ20KICAgIGFsd2F5cyBoZWFyaW5nIGZyb20gdGVhY2hlcnMsIHN0dWRlbnRzLCBhbmQgZmVsbG93IHNvZnR3YXJlIGRldmVsb3BlcnMKICAgIHdobyB1c2UgdGhlc2UgdG8gbGVhcm4sIHRvIGZpeCwgYW5kIHRvIHVuZGVyc3RhbmQuIEknbSB2ZXJ5IHByb3VkIG9mIHRoYXQuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq","sender":"server"},{"message":"Kio=","sender":"server"}]')
19
+ const transcript = JSON.parse('[' +
20
+ '{"message":"KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKio=","sender":"server"},' +
21
+ '{"message":"KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg==","sender":"server"},' +
22
+ '{"message":"KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq","sender":"server"},' +
23
+ '{"message":"KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg==","sender":"server"},' +
24
+ '{"message":"KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKio=","sender":"server"},' +
25
+ '{"message":"KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKio=","sender":"server"},' +
26
+ '{"message":"R0VUIC8gSFRUUC8xLjENCkhvc3Q6IHhhcmdzLm9yZw0KQ29udGVudC1MZW5ndGg6IDQNCkNvbm5lY3Rpb246IGNsb3NlDQpBY2NlcHQtRW5jb2Rpbmc6IGlkZW50aXR5DQp1c2VyLWFnZW50OiBNb3ppbGxhLzUuMA0K","sender":"client"},' +
27
+ '{"message":"KioqKio=","sender":"client"},' +
28
+ '{"message":"KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg==","sender":"client"},' +
29
+ '{"message":"KioqKio=","sender":"client"},' +
30
+ '{"message":"DQoNCnQ=","sender":"client"},' +
31
+ '{"message":"KioqKio=","sender":"client"},' +
32
+ '{"message":"Kg==","sender":"client"},' +
33
+ '{"message":"KioqKio=","sender":"client"},' +
34
+ '{"message":"c3Q=","sender":"client"},' +
35
+ '{"message":"SFRUUC8xLjEgMjAwIE9LKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KDQo=","sender":"server"},' +
36
+ '{"message":"KioqKioqKioqKioqKioqKioqKioqKioqKioqKjx0aXRsZT5BaWtlbiAmYW1wOyBEcmlzY29sbCAmYW1wOyBXZWJiPC90aXRsZT4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqT25lIG9mIHRoZSBmZXcgZXhjZXB0aW9ucyBpcyBhIHNlcmllcyBvZiBkb2N1bWVudHMgdGhhdCBJJ3ZlIHdyaXR0ZW4KICAgIGJyZWFraW5nIGRvd24gY3J5cHRvZ3JhcGhpYyBhbmQgbmV0d29yayBwcm90b2NvbHMgYnl0ZS1ieS1ieXRlLiBJJ20KICAgIGFsd2F5cyBoZWFyaW5nIGZyb20gdGVhY2hlcnMsIHN0dWRlbnRzLCBhbmQgZmVsbG93IHNvZnR3YXJlIGRldmVsb3BlcnMKICAgIHdobyB1c2UgdGhlc2UgdG8gbGVhcm4sIHRvIGZpeCwgYW5kIHRvIHVuZGVyc3RhbmQuIEknbSB2ZXJ5IHByb3VkIG9mIHRoYXQuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq","sender":"server"},{"message":"Kio=","sender":"server"}]')
18
37
  .map((x) => ({
19
38
  ...x,
20
39
  message: Buffer.from(x.message, 'base64'),
@@ -107,19 +126,28 @@ describe('HTTP Provider Utils tests', () => {
107
126
  const provider = http_1.default;
108
127
  const simpleChunk = Buffer.from('HTTP/1.1 200 OK\r\nContent-Type: text/plain\r\nTransfer-Encoding: chunked\r\nConnection: close\r\n\r\n9\r\nchunk 1, \r\n7\r\nchunk 2\r\n0\r\n');
109
128
  if (provider.getResponseRedactions) {
110
- const redactions = provider.getResponseRedactions(simpleChunk, {
111
- method: 'GET',
112
- url: 'https://test.com',
113
- 'responseMatches': [],
114
- 'responseRedactions': [
115
- {
116
- 'regex': 'chunk 1, chunk 2'
117
- }
118
- ],
119
- }, utils_2.logger);
129
+ const redactions = provider.getResponseRedactions({
130
+ response: simpleChunk,
131
+ params: {
132
+ method: 'GET',
133
+ url: 'https://test.com',
134
+ 'responseMatches': [],
135
+ 'responseRedactions': [
136
+ {
137
+ 'regex': 'chunk 1, chunk 2'
138
+ }
139
+ ],
140
+ },
141
+ logger: utils_2.logger,
142
+ ctx
143
+ });
120
144
  expect(redactions).toEqual([
121
145
  {
122
146
  'fromIndex': 15,
147
+ 'toIndex': 88,
148
+ },
149
+ {
150
+ 'fromIndex': 92,
123
151
  'toIndex': 95
124
152
  },
125
153
  {
@@ -137,28 +165,37 @@ describe('HTTP Provider Utils tests', () => {
137
165
  str += simpleChunk.subarray(start, red.fromIndex);
138
166
  start = red.toIndex;
139
167
  }
140
- expect(str).toEqual('HTTP/1.1 200 OKchunk 1, chunk 2');
168
+ expect(str).toEqual('HTTP/1.1 200 OK\r\n\r\nchunk 1, chunk 2');
141
169
  }
142
170
  });
143
171
  it('should perform complex redactions', () => {
144
172
  const provider = http_1.default;
145
173
  const response = Buffer.from('HTTP/1.1 200 OK\r\nContent-Type: text/plain\r\ncontent-length: 222\r\nConnection: close\r\n\r\n<body> <div id="c1">{"ages":[{"age":"26"},{"age":"27"},{"age":"28"}]}</div> <div id="c2">{"ages":[{"age":"27"},{"age":"28"},{"age":"29"}]}</div> <div id="c3">{"ages":[{"age":"29"},{"age":"30"},{"age":"31"}]}</div></body>\r\n');
146
174
  if (provider.getResponseRedactions) {
147
- const redactions = provider.getResponseRedactions(response, {
148
- method: 'GET',
149
- url: 'https://test.com',
150
- 'responseMatches': [],
151
- 'responseRedactions': [
152
- {
153
- 'xPath': '//body/div',
154
- 'jsonPath': '$.ages[*].age',
155
- 'regex': '(2|3)\\d'
156
- }
157
- ],
158
- }, utils_2.logger);
175
+ const redactions = provider.getResponseRedactions({
176
+ response,
177
+ params: {
178
+ method: 'GET',
179
+ url: 'https://test.com',
180
+ 'responseMatches': [],
181
+ 'responseRedactions': [
182
+ {
183
+ 'xPath': '//body/div',
184
+ 'jsonPath': '$.ages[*].age',
185
+ 'regex': '(2|3)\\d'
186
+ }
187
+ ],
188
+ },
189
+ logger: utils_2.logger,
190
+ ctx,
191
+ });
159
192
  expect(redactions).toEqual([
160
193
  {
161
194
  'fromIndex': 15,
195
+ 'toIndex': 81,
196
+ },
197
+ {
198
+ 'fromIndex': 85,
162
199
  'toIndex': 122
163
200
  },
164
201
  {
@@ -204,27 +241,36 @@ describe('HTTP Provider Utils tests', () => {
204
241
  str += response.subarray(start, red.fromIndex);
205
242
  start = red.toIndex;
206
243
  }
207
- expect(str).toEqual('HTTP/1.1 200 OK262728272829293031');
244
+ expect(str).toEqual('HTTP/1.1 200 OK\r\n\r\n262728272829293031');
208
245
  }
209
246
  });
210
247
  it('should perform complex redactions 2', () => {
211
248
  const provider = http_1.default;
212
249
  const response = Buffer.from('HTTP/1.1 200 OK\r\nContent-Type: text/plain\r\ncontent-length: 51\r\nConnection: close\r\n\r\n{"ages":[{"age":"26"},{"age":"27"},{"age":"28"}]}\r\n');
213
250
  if (provider.getResponseRedactions) {
214
- const redactions = provider.getResponseRedactions(response, {
215
- method: 'GET',
216
- url: 'https://test.com',
217
- 'responseMatches': [],
218
- 'responseRedactions': [
219
- {
220
- 'jsonPath': '$.ages[*].age',
221
- 'regex': '(2|3)\\d'
222
- }
223
- ],
224
- }, utils_2.logger);
251
+ const redactions = provider.getResponseRedactions({
252
+ response,
253
+ params: {
254
+ method: 'GET',
255
+ url: 'https://test.com',
256
+ 'responseMatches': [],
257
+ 'responseRedactions': [
258
+ {
259
+ 'jsonPath': '$.ages[*].age',
260
+ 'regex': '(2|3)\\d'
261
+ }
262
+ ],
263
+ },
264
+ logger: utils_2.logger,
265
+ ctx,
266
+ });
225
267
  expect(redactions).toEqual([
226
268
  {
227
269
  'fromIndex': 15,
270
+ 'toIndex': 80,
271
+ },
272
+ {
273
+ 'fromIndex': 84,
228
274
  'toIndex': 101
229
275
  },
230
276
  {
@@ -246,27 +292,36 @@ describe('HTTP Provider Utils tests', () => {
246
292
  str += response.subarray(start, red.fromIndex);
247
293
  start = red.toIndex;
248
294
  }
249
- expect(str).toEqual('HTTP/1.1 200 OK262728');
295
+ expect(str).toEqual('HTTP/1.1 200 OK\r\n\r\n262728');
250
296
  }
251
297
  });
252
298
  it('should perform complex redactions 3', () => {
253
299
  const provider = http_1.default;
254
300
  const response = Buffer.from('HTTP/1.1 200 OK\r\nContent-Type: text/plain\r\ncontent-length: 222\r\nConnection: close\r\n\r\n<body> <div id="c1">{"ages":[{"age":"26"},{"age":"27"},{"age":"28"}]}</div> <div id="c2">{"ages":[{"age":"27"},{"age":"28"},{"age":"29"}]}</div> <div id="c3">{"ages":[{"age":"29"},{"age":"30"},{"age":"31"}]}</div></body>\r\n');
255
301
  if (provider.getResponseRedactions) {
256
- const redactions = provider.getResponseRedactions(response, {
257
- method: 'GET',
258
- url: 'https://test.com',
259
- 'responseMatches': [],
260
- 'responseRedactions': [
261
- {
262
- 'xPath': '//body/div',
263
- 'regex': '"age":"\\d{2}"'
264
- }
265
- ],
266
- }, utils_2.logger);
302
+ const redactions = provider.getResponseRedactions({
303
+ response,
304
+ params: {
305
+ method: 'GET',
306
+ url: 'https://test.com',
307
+ 'responseMatches': [],
308
+ 'responseRedactions': [
309
+ {
310
+ 'xPath': '//body/div',
311
+ 'regex': '"age":"\\d{2}"'
312
+ }
313
+ ],
314
+ },
315
+ logger: utils_2.logger,
316
+ ctx,
317
+ });
267
318
  expect(redactions).toEqual([
268
319
  {
269
320
  'fromIndex': 15,
321
+ 'toIndex': 81,
322
+ },
323
+ {
324
+ 'fromIndex': 85,
270
325
  'toIndex': 115
271
326
  },
272
327
  {
@@ -288,30 +343,35 @@ describe('HTTP Provider Utils tests', () => {
288
343
  str += response.subarray(start, red.fromIndex);
289
344
  start = red.toIndex;
290
345
  }
291
- expect(str).toEqual('HTTP/1.1 200 OK"age":"26""age":"27""age":"29"');
346
+ expect(str).toEqual('HTTP/1.1 200 OK\r\n\r\n"age":"26""age":"27""age":"29"');
292
347
  }
293
348
  });
294
349
  it('should get redactions from chunked response', () => {
295
350
  const provider = http_1.default;
296
351
  if (provider.getResponseRedactions) {
297
- const redactions = provider.getResponseRedactions(chunkedResp, {
298
- method: 'GET',
299
- url: 'https://bookface.ycombinator.com/home',
300
- 'responseMatches': [],
301
- 'responseRedactions': [
302
- {
303
- 'xPath': "//script[@id='js-react-on-rails-context']",
304
- 'jsonPath': '$.currentUser',
305
- },
306
- {
307
- 'xPath': "//script[@data-component-name='BookfaceCsrApp']",
308
- 'jsonPath': '$.hasBookface',
309
- },
310
- {
311
- 'regex': 'code_version:\\s"[0-9a-f]{40}\\sruby'
312
- }
313
- ],
314
- }, utils_2.logger);
352
+ const redactions = provider.getResponseRedactions({
353
+ response: chunkedResp,
354
+ params: {
355
+ method: 'GET',
356
+ url: 'https://bookface.ycombinator.com/home',
357
+ 'responseMatches': [],
358
+ 'responseRedactions': [
359
+ {
360
+ 'xPath': "//script[@id='js-react-on-rails-context']",
361
+ 'jsonPath': '$.currentUser',
362
+ },
363
+ {
364
+ 'xPath': "//script[@data-component-name='BookfaceCsrApp']",
365
+ 'jsonPath': '$.hasBookface',
366
+ },
367
+ {
368
+ 'regex': 'code_version:\\s"[0-9a-f]{40}\\sruby'
369
+ }
370
+ ],
371
+ },
372
+ logger: utils_2.logger,
373
+ ctx,
374
+ });
315
375
  expect(redactions).toEqual([
316
376
  {
317
377
  'fromIndex': 15,
@@ -319,6 +379,10 @@ describe('HTTP Provider Utils tests', () => {
319
379
  },
320
380
  {
321
381
  'fromIndex': 52,
382
+ 'toIndex': 4290,
383
+ },
384
+ {
385
+ 'fromIndex': 4294,
322
386
  'toIndex': 4760
323
387
  },
324
388
  {
@@ -471,12 +535,17 @@ Content-Type: text/html; charset=utf-8\r
471
535
  \r
472
536
  `;
473
537
  const redactions = (getResponseRedactions) ?
474
- getResponseRedactions((0, tls_1.strToUint8Array)(res), {
475
- url: 'abc',
476
- responseMatches: [],
477
- responseRedactions: [],
478
- method: 'GET'
479
- }, utils_2.logger)
538
+ getResponseRedactions({
539
+ response: (0, tls_1.strToUint8Array)(res),
540
+ params: {
541
+ url: 'abc',
542
+ responseMatches: [],
543
+ responseRedactions: [],
544
+ method: 'GET'
545
+ },
546
+ logger: utils_2.logger,
547
+ ctx
548
+ })
480
549
  : undefined;
481
550
  expect(redactions).toHaveLength(0);
482
551
  });
@@ -489,14 +558,19 @@ Content-Type: text/html; charset=utf-8\r
489
558
  `;
490
559
  expect(() => {
491
560
  if (getResponseRedactions) {
492
- getResponseRedactions((0, tls_1.strToUint8Array)(res), {
493
- url: 'abc',
494
- responseMatches: [],
495
- responseRedactions: [{
496
- regex: 'abc'
497
- }],
498
- method: 'GET'
499
- }, utils_2.logger);
561
+ getResponseRedactions({
562
+ response: (0, tls_1.strToUint8Array)(res),
563
+ params: {
564
+ url: 'abc',
565
+ responseMatches: [],
566
+ responseRedactions: [{
567
+ regex: 'abc'
568
+ }],
569
+ method: 'GET'
570
+ },
571
+ logger: utils_2.logger,
572
+ ctx,
573
+ });
500
574
  }
501
575
  }).toThrow('Failed to find response body');
502
576
  });
@@ -509,14 +583,19 @@ Content-Type: text/html; charset=utf-8\r
509
583
  1`;
510
584
  expect(() => {
511
585
  if (getResponseRedactions) {
512
- getResponseRedactions((0, tls_1.strToUint8Array)(res), {
513
- url: 'abc',
514
- responseMatches: [],
515
- responseRedactions: [{
516
- xPath: 'abc'
517
- }],
518
- method: 'GET'
519
- }, utils_2.logger);
586
+ getResponseRedactions({
587
+ response: (0, tls_1.strToUint8Array)(res),
588
+ params: {
589
+ url: 'abc',
590
+ responseMatches: [],
591
+ responseRedactions: [{
592
+ xPath: 'abc'
593
+ }],
594
+ method: 'GET'
595
+ },
596
+ logger: utils_2.logger,
597
+ ctx
598
+ });
520
599
  }
521
600
  }).toThrow('Failed to find XPath: \"abc\"');
522
601
  });
@@ -529,14 +608,19 @@ Content-Type: text/html; charset=utf-8\r
529
608
  1`;
530
609
  expect(() => {
531
610
  if (getResponseRedactions) {
532
- getResponseRedactions((0, tls_1.strToUint8Array)(res), {
533
- url: 'abc',
534
- responseMatches: [],
535
- responseRedactions: [{
536
- jsonPath: 'abc'
537
- }],
538
- method: 'GET'
539
- }, utils_2.logger);
611
+ getResponseRedactions({
612
+ response: (0, tls_1.strToUint8Array)(res),
613
+ params: {
614
+ url: 'abc',
615
+ responseMatches: [],
616
+ responseRedactions: [{
617
+ jsonPath: 'abc'
618
+ }],
619
+ method: 'GET'
620
+ },
621
+ logger: utils_2.logger,
622
+ ctx,
623
+ });
540
624
  }
541
625
  }).toThrow('jsonPath not found');
542
626
  });
@@ -549,89 +633,124 @@ Content-Type: text/html; charset=utf-8\r
549
633
  1`;
550
634
  expect(() => {
551
635
  if (getResponseRedactions) {
552
- getResponseRedactions((0, tls_1.strToUint8Array)(res), {
553
- url: 'abc',
554
- responseMatches: [],
555
- responseRedactions: [{
556
- regex: 'abc'
557
- }],
558
- method: 'GET'
559
- }, utils_2.logger);
636
+ getResponseRedactions({
637
+ response: (0, tls_1.strToUint8Array)(res),
638
+ params: {
639
+ url: 'abc',
640
+ responseMatches: [],
641
+ responseRedactions: [{
642
+ regex: 'abc'
643
+ }],
644
+ method: 'GET'
645
+ },
646
+ logger: utils_2.logger,
647
+ ctx,
648
+ });
560
649
  }
561
- }).toThrow('regexp abc does not match found element \'1\'');
650
+ }).toThrow('regexp abc does not match found element \'MQ==\'');
562
651
  });
563
- it('should throw on bad method', () => {
564
- expect(() => {
565
- assertValidProviderReceipt(transcript, {
566
- url: 'abc',
567
- responseMatches: [],
568
- responseRedactions: [],
569
- method: 'POST'
570
- }, utils_2.logger);
571
- }).toThrow('Invalid method: get');
652
+ it('should throw on bad method', async () => {
653
+ await expect(async () => {
654
+ await assertValidProviderReceipt({
655
+ receipt: transcript,
656
+ params: {
657
+ url: 'abc',
658
+ responseMatches: [],
659
+ responseRedactions: [],
660
+ method: 'POST'
661
+ },
662
+ logger: utils_2.logger,
663
+ ctx
664
+ });
665
+ }).rejects.toThrow('Invalid method: get');
572
666
  });
573
- it('should throw on bad protocol', () => {
574
- expect(() => {
575
- assertValidProviderReceipt(transcript, {
576
- url: 'http://xargs.com',
577
- responseMatches: [],
578
- responseRedactions: [],
579
- method: 'GET'
580
- }, utils_2.logger);
581
- }).toThrow('Expected protocol: https, found: http:');
667
+ it('should throw on bad protocol', async () => {
668
+ await expect(async () => {
669
+ await assertValidProviderReceipt({
670
+ receipt: transcript,
671
+ params: {
672
+ url: 'http://xargs.com',
673
+ responseMatches: [],
674
+ responseRedactions: [],
675
+ method: 'GET'
676
+ },
677
+ logger: utils_2.logger,
678
+ ctx,
679
+ });
680
+ }).rejects.toThrow('Expected protocol: https, found: http:');
582
681
  });
583
- it('should throw on duplicate groups', () => {
584
- expect(() => {
585
- assertValidProviderReceipt(transcript, {
586
- url: 'https://xargs.{{abc}}',
587
- responseMatches: [{
588
- type: 'regex',
589
- value: '(?<abc>.)'
590
- }],
591
- responseRedactions: [],
592
- method: 'GET',
593
- paramValues: {
594
- 'abc': 'org'
595
- }
596
- }, utils_2.logger);
597
- }).toThrow('Duplicate parameter abc');
682
+ it('should throw on duplicate groups', async () => {
683
+ await expect(async () => {
684
+ await assertValidProviderReceipt({
685
+ receipt: transcript,
686
+ params: {
687
+ url: 'https://xargs.{{abc}}',
688
+ responseMatches: [{
689
+ type: 'regex',
690
+ value: '(?<abc>.)'
691
+ }],
692
+ responseRedactions: [],
693
+ method: 'GET',
694
+ paramValues: {
695
+ 'abc': 'org'
696
+ }
697
+ },
698
+ logger: utils_2.logger,
699
+ ctx
700
+ });
701
+ }).rejects.toThrow('Duplicate parameter abc');
598
702
  });
599
- it('should throw on bad path', () => {
600
- expect(() => {
601
- assertValidProviderReceipt(transcript, {
602
- url: 'https://xargs.com/abc',
603
- responseMatches: [],
604
- responseRedactions: [],
605
- method: 'GET'
606
- }, utils_2.logger);
607
- }).toThrow('Expected path: /abc, found: /');
703
+ it('should throw on bad path', async () => {
704
+ await expect(async () => {
705
+ await assertValidProviderReceipt({
706
+ receipt: transcript,
707
+ params: {
708
+ url: 'https://xargs.com/abc',
709
+ responseMatches: [],
710
+ responseRedactions: [],
711
+ method: 'GET'
712
+ },
713
+ logger: utils_2.logger,
714
+ ctx
715
+ });
716
+ }).rejects.toThrow('Expected path: /abc, found: /');
608
717
  });
609
- it('should throw on bad host', () => {
610
- expect(() => {
611
- assertValidProviderReceipt(transcript, {
612
- url: 'https://abc.com/',
613
- responseMatches: [],
614
- responseRedactions: [],
615
- method: 'GET'
616
- }, utils_2.logger);
617
- }).toThrow('Expected host: abc.com, found: xargs.org');
718
+ it('should throw on bad host', async () => {
719
+ await expect(async () => {
720
+ await assertValidProviderReceipt({
721
+ receipt: transcript,
722
+ params: {
723
+ url: 'https://abc.com/',
724
+ responseMatches: [],
725
+ responseRedactions: [],
726
+ method: 'GET'
727
+ },
728
+ logger: utils_2.logger,
729
+ ctx,
730
+ });
731
+ }).rejects.toThrow('Expected host: abc.com, found: xargs.org');
618
732
  });
619
- it('should throw on bad OK string', () => {
733
+ it('should throw on bad OK string', async () => {
620
734
  const temp = cloneObject(transcript);
621
735
  // changes the status ("OK") text to something else
622
736
  // it'll be in the first server response packet
623
737
  const firstServerMsg = temp.find((x, index) => x.sender === 'server' && index !== 0);
624
738
  firstServerMsg.message[0] = 32;
625
- expect(() => {
626
- assertValidProviderReceipt(temp, {
627
- url: 'https://xargs.org/',
628
- responseMatches: [],
629
- responseRedactions: [],
630
- method: 'GET'
631
- }, utils_2.logger);
632
- }).toThrow('Response did not start with \"HTTP/1.1 200\"');
739
+ await expect(async () => {
740
+ await assertValidProviderReceipt({
741
+ receipt: temp,
742
+ params: {
743
+ url: 'https://xargs.org/',
744
+ responseMatches: [],
745
+ responseRedactions: [],
746
+ method: 'GET'
747
+ },
748
+ logger: utils_2.logger,
749
+ ctx,
750
+ });
751
+ }).rejects.toThrow('Response did not start with \"HTTP/1.1 2XX\"');
633
752
  });
634
- it('should throw on bad close header', () => {
753
+ it('should throw on bad close header', async () => {
635
754
  const temp = cloneObject(transcript);
636
755
  const clientMsgWithClose = temp.find((x) => {
637
756
  if (x.sender !== 'client') {
@@ -641,51 +760,71 @@ Content-Type: text/html; charset=utf-8\r
641
760
  .includes('Connection: close');
642
761
  });
643
762
  clientMsgWithClose.message[68] = 102;
644
- expect(() => {
645
- assertValidProviderReceipt(temp, {
646
- url: 'https://xargs.org/',
647
- responseMatches: [],
648
- responseRedactions: [],
649
- method: 'GET'
650
- }, utils_2.logger);
651
- }).toThrow('Connection header must be \"close\"');
763
+ await expect(async () => {
764
+ await assertValidProviderReceipt({
765
+ receipt: temp,
766
+ params: {
767
+ url: 'https://xargs.org/',
768
+ responseMatches: [],
769
+ responseRedactions: [],
770
+ method: 'GET'
771
+ },
772
+ logger: utils_2.logger,
773
+ ctx
774
+ });
775
+ }).rejects.toThrow('Connection header must be \"close\"');
652
776
  });
653
- it('should throw on bad body', () => {
654
- expect(() => {
655
- assertValidProviderReceipt(transcript, {
656
- url: 'https://xargs.org/',
657
- responseMatches: [],
658
- responseRedactions: [],
659
- method: 'GET',
660
- body: 'abc'
661
- }, utils_2.logger);
662
- }).toThrow('request body mismatch');
777
+ it('should throw on bad body', async () => {
778
+ await expect(async () => {
779
+ await assertValidProviderReceipt({
780
+ receipt: transcript,
781
+ params: {
782
+ url: 'https://xargs.org/',
783
+ responseMatches: [],
784
+ responseRedactions: [],
785
+ method: 'GET',
786
+ body: 'abc'
787
+ },
788
+ logger: utils_2.logger,
789
+ ctx
790
+ });
791
+ }).rejects.toThrow('request body mismatch');
663
792
  });
664
- it('should throw on bad regex match', () => {
665
- expect(() => {
666
- assertValidProviderReceipt(transcript, {
667
- url: 'https://xargs.org/',
668
- responseMatches: [{
669
- type: 'regex',
670
- value: 'abc'
671
- }],
672
- responseRedactions: [],
673
- method: 'GET',
674
- }, utils_2.logger);
675
- }).toThrow('Invalid receipt. Regex \"abc\" didn\'t match');
793
+ it('should throw on bad regex match', async () => {
794
+ await expect(async () => {
795
+ await assertValidProviderReceipt({
796
+ receipt: transcript,
797
+ params: {
798
+ url: 'https://xargs.org/',
799
+ responseMatches: [{
800
+ type: 'regex',
801
+ value: 'abc'
802
+ }],
803
+ responseRedactions: [],
804
+ method: 'GET',
805
+ },
806
+ logger: utils_2.logger,
807
+ ctx
808
+ });
809
+ }).rejects.toThrow('Invalid receipt. Regex \"abc\" didn\'t match');
676
810
  });
677
- it('should throw on bad contains match', () => {
678
- expect(() => {
679
- assertValidProviderReceipt(transcript, {
680
- url: 'https://xargs.org/',
681
- responseMatches: [{
682
- type: 'contains',
683
- value: 'abc'
684
- }],
685
- responseRedactions: [],
686
- method: 'GET',
687
- }, utils_2.logger);
688
- }).toThrow('Invalid receipt. Response does not contain \"abc\"');
811
+ it('should throw on bad contains match', async () => {
812
+ await expect(async () => {
813
+ await assertValidProviderReceipt({
814
+ receipt: transcript,
815
+ params: {
816
+ url: 'https://xargs.org/',
817
+ responseMatches: [{
818
+ type: 'contains',
819
+ value: 'abc'
820
+ }],
821
+ responseRedactions: [],
822
+ method: 'GET',
823
+ },
824
+ logger: utils_2.logger,
825
+ ctx,
826
+ });
827
+ }).rejects.toThrow('Invalid receipt. Response does not contain \"abc\"');
689
828
  });
690
829
  it('should get geo', () => {
691
830
  const geo = (0, utils_2.getProviderValue)({
@@ -731,8 +870,8 @@ Content-Type: text/html; charset=utf-8\r
731
870
  })
732
871
  .toThrow('url is incorrect');
733
872
  });
734
- it('should throw on bad match type', () => {
735
- expect(() => {
873
+ it('should throw on bad match type', async () => {
874
+ await expect(async () => {
736
875
  const params = {
737
876
  url: 'https://xargs.org/',
738
877
  responseMatches: [{
@@ -742,22 +881,32 @@ Content-Type: text/html; charset=utf-8\r
742
881
  responseRedactions: [],
743
882
  method: 'GET',
744
883
  };
745
- // @ts-ignore
746
- assertValidProviderReceipt(transcript, params, utils_2.logger);
747
- }).toThrow('Invalid response match type abc');
884
+ await assertValidProviderReceipt({
885
+ receipt: transcript,
886
+ // @ts-ignore
887
+ params,
888
+ logger: utils_2.logger,
889
+ ctx,
890
+ });
891
+ }).rejects.toThrow('Invalid response match type abc');
748
892
  });
749
- it('should throw on no non present params', () => {
750
- expect(() => {
751
- assertValidProviderReceipt(transcript, {
752
- url: 'https://xargs.{{org}}/',
753
- responseMatches: [{
754
- type: 'contains',
755
- value: 'abc'
756
- }],
757
- responseRedactions: [],
758
- method: 'GET',
759
- }, utils_2.logger);
760
- }).toThrow('Expected host: xargs.{{org}}, found: xargs.org');
893
+ it('should throw on no non present params', async () => {
894
+ await expect(async () => {
895
+ await assertValidProviderReceipt({
896
+ receipt: transcript,
897
+ params: {
898
+ url: 'https://xargs.{{org}}/',
899
+ responseMatches: [{
900
+ type: 'contains',
901
+ value: 'abc'
902
+ }],
903
+ responseRedactions: [],
904
+ method: 'GET',
905
+ },
906
+ logger: utils_2.logger,
907
+ ctx
908
+ });
909
+ }).rejects.toThrow('Expected host: xargs.{{org}}, found: xargs.org');
761
910
  });
762
911
  it('should throw on non present secret params', () => {
763
912
  expect(() => {
@@ -925,8 +1074,10 @@ Content-Type: text/html; charset=utf-8\r
925
1074
  }
926
1075
  ],
927
1076
  };
928
- const arr = (0, tls_1.strToUint8Array)(test_http_parser_1.RES_CHUNKED_PARTIAL_BODY);
929
- expect(() => getResponseRedactions(arr, params, utils_2.logger)).toThrow(/cannot be performed/);
1077
+ const response = (0, tls_1.strToUint8Array)(test_http_parser_1.RES_CHUNKED_PARTIAL_BODY);
1078
+ expect(() => getResponseRedactions({
1079
+ response, params, logger: utils_2.logger, ctx
1080
+ })).toThrow(/cannot be performed/);
930
1081
  });
931
1082
  });
932
1083
  it('should replace secret params in URL correctly', () => {
@@ -972,7 +1123,9 @@ Content-Type: text/html; charset=utf-8\r
972
1123
  });
973
1124
  async function getRedactedStr(plaintext, params) {
974
1125
  const hash = new Uint8Array(32);
975
- const trans = await (0, utils_2.getBlocksToReveal)([{ plaintext }], body => getResponseRedactions(body, params, utils_2.logger), async (txt) => ({
1126
+ const trans = await (0, utils_2.getBlocksToReveal)([{ plaintext }], response => getResponseRedactions({
1127
+ response, params, logger: utils_2.logger, ctx
1128
+ }), async (txt) => ({
976
1129
  nullifier: hash,
977
1130
  dataLocation: { fromIndex: 0, length: txt.length },
978
1131
  responses: [],
@@ -2260,4 +2413,4 @@ b24xJywgZmFsc2UpOwpnYSgnc2V0JywgJ2RpbWVuc2lvbjInLCAndzIwMjEnKTsKZ2EoJ3NldCcs
2260
2413
  ICdkaW1lbnNpb24zJywgdHJ1ZSk7CmdhKCdzZXQnLCAnZGltZW5zaW9uNCcsIHRydWUpOwpnYSgn
2261
2414
  c2VuZCcsICdwYWdldmlldycpOwoKPC9zY3JpcHQ+CjwhLS0gRW5kIEdvb2dsZSBBbmFseXRpY3Mg
2262
2415
  LS0+CjwvYm9keT48L2h0bWw+DQowDQoNCg==`, 'base64');
2263
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5odHRwLXByb3ZpZGVyLXV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Rlc3RzL3Rlc3QuaHR0cC1wcm92aWRlci11dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDhDQUFzRDtBQUN0RCxvREFBMkI7QUFDM0IsNkNBQXlDO0FBQ3pDLDhEQUE2QztBQUM3QyxvREFLaUM7QUFDakMsaUVBQXFFO0FBRXJFLHFDQUEwSTtBQUMxSSwyQkFBMkM7QUFFM0MsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFNLENBQUMsQ0FBQTtBQUV2QixRQUFRLENBQUMsMkJBQTJCLEVBQUUsR0FBRyxFQUFFO0lBRTFDLE1BQU0sRUFDTCxRQUFRLEVBQ1IsV0FBVyxFQUNYLHFCQUFxQixFQUNyQixhQUFhLEVBQ2IsMEJBQTBCLEVBQzFCLEdBQUcscUJBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUVyQixNQUFNLFVBQVUsR0FBMkIsSUFBSSxDQUFDLEtBQUssQ0FBQyx5c1VBQXlzVSxDQUFDO1NBQzl2VSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDWixHQUFHLENBQUM7UUFDSixPQUFPLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQztLQUN6QyxDQUFDLENBQUMsQ0FBQTtJQUVKLEVBQUUsQ0FBQyxnQ0FBZ0MsRUFBRSxHQUFHLEVBQUU7UUFDekMsTUFBTSxJQUFJLEdBQUcsSUFBQSwwQkFBa0IsRUFBQyxJQUFJLEVBQUUseUNBQXlDLEVBQUUsSUFBSSxDQUFDLENBQUE7UUFDdEYsTUFBTSxHQUFHLEdBQUcsSUFBQSw2QkFBcUIsRUFBQyxJQUFJLEVBQUUsZUFBZSxDQUFDLENBQUE7UUFDeEQsTUFBTSxFQUFFLEdBQUcsb0JBQW9CLENBQUE7UUFDL0IsTUFBTSxNQUFNLEdBQUcsSUFBSSxNQUFNLENBQUMsRUFBRSxFQUFFLEtBQUss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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7cUNBb21DSyxFQUFFLFFBQVEsQ0FBQyxDQUFBIn0=
2416
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5odHRwLXByb3ZpZGVyLXV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Rlc3RzL3Rlc3QuaHR0cC1wcm92aWRlci11dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDhDQUFzRDtBQUN0RCxvREFBMkI7QUFDM0IsdUNBQXlDO0FBQ3pDLDZDQUF5QztBQUN6Qyw4REFBNkM7QUFDN0Msb0RBS2lDO0FBQ2pDLGlFQUFxRTtBQUVyRSxxQ0FBMEk7QUFDMUksMkJBQTJDO0FBRTNDLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBTSxDQUFDLENBQUE7QUFFdkIsTUFBTSxHQUFHLEdBQUcscUJBQVksQ0FBQTtBQUV4QixRQUFRLENBQUMsMkJBQTJCLEVBQUUsR0FBRyxFQUFFO0lBRTFDLE1BQU0sRUFDTCxRQUFRLEVBQ1IsV0FBVyxFQUNYLHFCQUFxQixFQUNyQixhQUFhLEVBQ2IsMEJBQTBCLEVBQzFCLEdBQUcscUJBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUVyQixNQUFNLFVBQVUsR0FBMkIsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHO1FBQ3hELDJGQUEyRjtRQUMzRix1N0hBQXU3SDtRQUN2N0gsbVlBQW1ZO1FBQ25ZLDJHQUEyRztRQUMzRywyWkFBMlo7UUFDM1osMlpBQTJaO1FBQzNaLHVNQUF1TTtRQUN2TSwyQ0FBMkM7UUFDM0MsMkZBQTJGO1FBQzNGLDJDQUEyQztRQUMzQywyQ0FBMkM7UUFDM0MsMkNBQTJDO1FBQzNDLHVDQUF1QztRQUN2QywyQ0FBMkM7UUFDM0MsdUNBQXVDO1FBQ3ZDLHViQUF1YjtRQUN2YixvM0hBQW8zSCxDQUFDO1NBQ3AzSCxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDWixHQUFHLENBQUM7UUFDSixPQUFPLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQztLQUN6QyxDQUFDLENB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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7cUNBb21DSyxFQUFFLFFBQVEsQ0FBQyxDQUFBIn0=