@reclaimprotocol/attestor-core 3.1.1 → 4.0.0

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 (88) hide show
  1. package/lib/avs/contracts/index.js +18 -8
  2. package/lib/avs/utils/tasks.d.ts +1 -1
  3. package/lib/client/create-claim.d.ts +2 -2
  4. package/lib/client/create-claim.js +89 -33
  5. package/lib/client/utils/client-socket.d.ts +3 -1
  6. package/lib/client/utils/client-socket.js +25 -8
  7. package/lib/config/index.d.ts +4 -0
  8. package/lib/config/index.js +8 -3
  9. package/lib/index.js +18 -8
  10. package/lib/proto/api.d.ts +80 -2
  11. package/lib/proto/api.js +853 -101
  12. package/lib/providers/http/index.js +180 -109
  13. package/lib/providers/http/utils.d.ts +3 -6
  14. package/lib/providers/http/utils.js +13 -11
  15. package/lib/providers/index.js +1 -3
  16. package/lib/scripts/generate-receipt.js +6 -3
  17. package/lib/scripts/generate-toprf-keys.d.ts +1 -0
  18. package/lib/scripts/generate-toprf-keys.js +23 -0
  19. package/lib/server/create-server.js +14 -7
  20. package/lib/server/handlers/claimTunnel.js +33 -10
  21. package/lib/server/handlers/createTunnel.js +44 -8
  22. package/lib/server/handlers/disconnectTunnel.js +2 -2
  23. package/lib/server/handlers/index.js +4 -2
  24. package/lib/server/handlers/init.js +17 -2
  25. package/lib/server/handlers/toprf.d.ts +2 -0
  26. package/lib/server/handlers/toprf.js +21 -0
  27. package/lib/server/socket.d.ts +5 -3
  28. package/lib/server/socket.js +25 -5
  29. package/lib/server/tunnels/make-tcp-tunnel.js +10 -24
  30. package/lib/server/utils/apm.js +1 -1
  31. package/lib/server/utils/assert-valid-claim-request.d.ts +2 -2
  32. package/lib/server/utils/assert-valid-claim-request.js +17 -9
  33. package/lib/server/utils/dns.d.ts +1 -0
  34. package/lib/server/utils/dns.js +22 -0
  35. package/lib/server/utils/generics.d.ts +1 -1
  36. package/lib/tests/describe-with-server.d.ts +0 -2
  37. package/lib/tests/describe-with-server.js +1 -4
  38. package/lib/tests/mock-provider-server.d.ts +1 -1
  39. package/lib/tests/test.auth.d.ts +1 -0
  40. package/lib/tests/test.auth.js +75 -0
  41. package/lib/tests/test.bgp-listener.d.ts +1 -0
  42. package/lib/tests/test.bgp-listener.js +169 -0
  43. package/lib/tests/test.claim-creation.js +100 -7
  44. package/lib/tests/test.http-parser.d.ts +1 -1
  45. package/lib/tests/test.http-parser.js +7 -5
  46. package/lib/tests/test.http-provider-utils.js +155 -30
  47. package/lib/tests/test.http-provider.js +50 -7
  48. package/lib/tests/test.zk.js +54 -4
  49. package/lib/tests/utils.d.ts +6 -0
  50. package/lib/tests/utils.js +16 -1
  51. package/lib/types/bgp.d.ts +11 -0
  52. package/lib/types/bgp.js +3 -0
  53. package/lib/types/claims.d.ts +14 -5
  54. package/lib/types/client.d.ts +30 -3
  55. package/lib/types/general.d.ts +12 -0
  56. package/lib/types/handlers.d.ts +4 -4
  57. package/lib/types/index.d.ts +1 -0
  58. package/lib/types/index.js +2 -1
  59. package/lib/types/providers.d.ts +9 -9
  60. package/lib/types/providers.gen.d.ts +12 -152
  61. package/lib/types/providers.gen.js +2 -6
  62. package/lib/types/zk.d.ts +11 -2
  63. package/lib/utils/auth.d.ts +7 -0
  64. package/lib/utils/auth.js +64 -0
  65. package/lib/utils/b64-json.d.ts +2 -0
  66. package/lib/utils/b64-json.js +23 -0
  67. package/lib/utils/bgp-listener.d.ts +7 -0
  68. package/lib/utils/bgp-listener.js +126 -0
  69. package/lib/utils/claims.js +3 -3
  70. package/lib/utils/generics.d.ts +5 -5
  71. package/lib/utils/generics.js +3 -3
  72. package/lib/utils/index.d.ts +2 -0
  73. package/lib/utils/index.js +3 -1
  74. package/lib/utils/redactions.d.ts +19 -6
  75. package/lib/utils/redactions.js +41 -4
  76. package/lib/utils/socket-base.d.ts +3 -2
  77. package/lib/utils/socket-base.js +7 -2
  78. package/lib/utils/ws.d.ts +5 -5
  79. package/lib/utils/ws.js +27 -10
  80. package/lib/utils/zk.d.ts +12 -7
  81. package/lib/utils/zk.js +197 -42
  82. package/lib/window-rpc/setup-window-rpc.js +29 -8
  83. package/lib/window-rpc/types.d.ts +16 -21
  84. package/lib/window-rpc/utils.d.ts +2 -1
  85. package/lib/window-rpc/utils.js +27 -1
  86. package/lib/window-rpc/window-rpc-zk.d.ts +8 -3
  87. package/lib/window-rpc/window-rpc-zk.js +58 -45
  88. package/package.json +24 -22
@@ -15,16 +15,26 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
15
15
  }) : function(o, v) {
16
16
  o["default"] = v;
17
17
  });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
25
35
  Object.defineProperty(exports, "__esModule", { value: true });
26
36
  exports.ReclaimServiceManager__factory = exports.factories = void 0;
27
37
  exports.factories = __importStar(require("./factories"));
28
38
  var ReclaimServiceManager__factory_1 = require("./factories/ReclaimServiceManager__factory");
29
39
  Object.defineProperty(exports, "ReclaimServiceManager__factory", { enumerable: true, get: function () { return ReclaimServiceManager__factory_1.ReclaimServiceManager__factory; } });
30
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXZzL2NvbnRyYWN0cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUlBLHlEQUF5QztBQUN6Qyw2RkFBNEY7QUFBbkYsZ0pBQUEsOEJBQThCLE9BQUEifQ==
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXZzL2NvbnRyYWN0cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFJQSx5REFBeUM7QUFDekMsNkZBQTRGO0FBQW5GLGdKQUFBLDhCQUE4QixPQUFBIn0=
@@ -18,5 +18,5 @@ export declare function createNewClaimRequestOnChain({ request, payer, chainId,
18
18
  task: NewTaskCreatedEventObject;
19
19
  tx: ethers.ContractReceipt;
20
20
  }>;
21
- export declare function signClaimRequest(request: IReclaimServiceManager.ClaimRequestStruct, owner: Wallet, chainId?: string): Promise<Uint8Array>;
21
+ export declare function signClaimRequest(request: IReclaimServiceManager.ClaimRequestStruct, owner: Wallet, chainId?: string): Promise<Uint8Array<ArrayBufferLike>>;
22
22
  export {};
@@ -1,5 +1,5 @@
1
- import { CreateClaimOnAttestorOpts, ProviderName } from '../types';
1
+ import type { CreateClaimOnAttestorOpts, ProviderName } from '../types';
2
2
  /**
3
3
  * Create a claim on the attestor
4
4
  */
5
- export declare function createClaimOnAttestor<N extends ProviderName>({ logger: _logger, ...opts }: CreateClaimOnAttestorOpts<N>): Promise<import("../proto/api").ClaimTunnelResponse>;
5
+ export declare function createClaimOnAttestor<N extends ProviderName>({ logger: _logger, maxRetries, ...opts }: CreateClaimOnAttestorOpts<N>): Promise<import("../proto/api").ClaimTunnelResponse>;
@@ -14,7 +14,7 @@ const tls_2 = require("../utils/tls");
14
14
  /**
15
15
  * Create a claim on the attestor
16
16
  */
17
- function createClaimOnAttestor({ logger: _logger, ...opts }) {
17
+ function createClaimOnAttestor({ logger: _logger, maxRetries = 3, ...opts }) {
18
18
  const logger = _logger
19
19
  // if the client has already been initialised
20
20
  // and no logger is provided, use the client's logger
@@ -25,7 +25,7 @@ function createClaimOnAttestor({ logger: _logger, ...opts }) {
25
25
  logger: attempt
26
26
  ? logger.child({ attempt })
27
27
  : logger
28
- })), { logger, shouldRetry });
28
+ })), { maxRetries, logger, shouldRetry });
29
29
  }
30
30
  function shouldRetry(err) {
31
31
  if (err instanceof TypeError) {
@@ -33,17 +33,19 @@ function shouldRetry(err) {
33
33
  }
34
34
  return err instanceof utils_1.AttestorError
35
35
  && err.code !== 'ERROR_INVALID_CLAIM'
36
- && err.code !== 'ERROR_BAD_REQUEST';
36
+ && err.code !== 'ERROR_BAD_REQUEST'
37
+ && err.code !== 'ERROR_AUTHENTICATION_FAILED';
37
38
  }
38
- async function _createClaimOnAttestor({ name, params, secretParams, context, onStep, ownerPrivateKey, client: clientInit, logger = utils_1.logger, timestampS, updateProviderParams, ...zkOpts }) {
39
+ async function _createClaimOnAttestor({ name, params, secretParams, context, onStep, ownerPrivateKey, client: clientInit, logger = utils_1.logger, timestampS, updateProviderParams, updateParametersFromOprfData = true, ...zkOpts }) {
39
40
  const provider = providers_1.providers[name];
40
- const hostPort = (0, utils_1.getProviderValue)(params, provider.hostPort);
41
+ const hostPort = (0, utils_1.getProviderValue)(params, provider.hostPort, secretParams);
41
42
  const geoLocation = (0, utils_1.getProviderValue)(params, provider.geoLocation);
42
43
  const providerTlsOpts = (0, utils_1.getProviderValue)(params, provider.additionalClientOptions);
43
44
  const tlsOpts = {
44
45
  ...(0, tls_2.getDefaultTlsOptions)(),
45
46
  ...providerTlsOpts,
46
47
  };
48
+ const { zkEngine = 'snarkjs' } = zkOpts;
47
49
  let redactionMode = (0, utils_1.getProviderValue)(params, provider.writeRedactionMode);
48
50
  const [host, port] = hostPort.split(':');
49
51
  const resParser = (0, utils_1.makeHttpResponseParser)();
@@ -58,9 +60,14 @@ async function _createClaimOnAttestor({ name, params, secretParams, context, onS
58
60
  geoLocation,
59
61
  id: (0, utils_1.generateTunnelId)()
60
62
  };
63
+ const authRequest = 'authRequest' in clientInit
64
+ ? (typeof clientInit.authRequest === 'function'
65
+ ? await clientInit.authRequest()
66
+ : clientInit.authRequest)
67
+ : undefined;
61
68
  const tunnel = await (0, make_rpc_tls_tunnel_1.makeRpcTlsTunnel)({
62
69
  tlsOpts,
63
- connect: (initMessages) => {
70
+ connect: (connectMsgs) => {
64
71
  let created = false;
65
72
  if ('metadata' in clientInit) {
66
73
  client = clientInit;
@@ -68,13 +75,17 @@ async function _createClaimOnAttestor({ name, params, secretParams, context, onS
68
75
  else {
69
76
  client = (0, attestor_pool_1.getAttestorClientFromPool)(clientInit.url, () => {
70
77
  created = true;
71
- return { initMessages, logger };
78
+ return {
79
+ authRequest: authRequest,
80
+ initMessages: connectMsgs,
81
+ logger
82
+ };
72
83
  });
73
84
  }
74
85
  if (!created) {
75
86
  client
76
87
  .waitForInit()
77
- .then(() => client.sendMessage(...initMessages))
88
+ .then(() => client.sendMessage(...connectMsgs))
78
89
  .catch(err => {
79
90
  logger.error({ err }, 'error in sending init msgs');
80
91
  });
@@ -112,7 +123,7 @@ async function _createClaimOnAttestor({ name, params, secretParams, context, onS
112
123
  }
113
124
  const { redactions, data: requestStr } = provider.createRequest(
114
125
  // @ts-ignore
115
- secretParams, params);
126
+ secretParams, params, logger);
116
127
  const requestData = typeof requestStr === 'string'
117
128
  ? (0, tls_1.strToUint8Array)(requestStr)
118
129
  : requestStr;
@@ -150,14 +161,15 @@ async function _createClaimOnAttestor({ name, params, secretParams, context, onS
150
161
  const signatureAlg = signatures_1.SIGNATURES[client.metadata.signatureType];
151
162
  let serverIV;
152
163
  let clientIV;
153
- const serverBlock = getLastBlock('server');
164
+ const [serverBlock] = getLastBlocks('server', 1);
154
165
  if (serverBlock && serverBlock.message.type === 'ciphertext') {
155
166
  serverIV = serverBlock.message.fixedIv;
156
167
  }
157
- const clientBlock = getLastBlock('client');
168
+ const [clientBlock] = getLastBlocks('client', 1);
158
169
  if (clientBlock && clientBlock.message.type === 'ciphertext') {
159
170
  clientIV = clientBlock.message.fixedIv;
160
171
  }
172
+ const transcript = await generateTranscript();
161
173
  // now that we have the full transcript, we need
162
174
  // to generate the ZK proofs & send them to the attestor
163
175
  // to verify & sign our claim
@@ -170,8 +182,10 @@ async function _createClaimOnAttestor({ name, params, secretParams, context, onS
170
182
  timestampS: timestampS !== null && timestampS !== void 0 ? timestampS : (0, utils_1.unixTimestampSeconds)(),
171
183
  owner: getAddress(),
172
184
  },
173
- transcript: await generateTranscript(),
174
- zkEngine: zkOpts.zkEngine === 'gnark' ? api_1.ZKProofEngine.ZK_ENGINE_GNARK : api_1.ZKProofEngine.ZK_ENGINE_SNARKJS,
185
+ transcript: transcript,
186
+ zkEngine: zkEngine === 'gnark'
187
+ ? api_1.ZKProofEngine.ZK_ENGINE_GNARK
188
+ : api_1.ZKProofEngine.ZK_ENGINE_SNARKJS,
175
189
  fixedServerIV: serverIV,
176
190
  fixedClientIV: clientIV,
177
191
  });
@@ -206,11 +220,13 @@ async function _createClaimOnAttestor({ name, params, secretParams, context, onS
206
220
  }
207
221
  }
208
222
  async function writeRedactedZk() {
223
+ let blocksWritten = tunnel.transcript.length;
209
224
  await tunnel.tls.write(requestData);
210
- setRevealOfLastSentBlock({
225
+ blocksWritten = tunnel.transcript.length - blocksWritten;
226
+ setRevealOfLastSentBlocks({
211
227
  type: 'zk',
212
228
  redactedPlaintext: (0, utils_1.redactSlices)(requestData, redactions)
213
- });
229
+ }, blocksWritten);
214
230
  }
215
231
  /**
216
232
  * Write data to the tunnel, with the option to mark the packet
@@ -223,32 +239,41 @@ async function _createClaimOnAttestor({ name, params, secretParams, context, onS
223
239
  if (reveal !== lastMsgRevealed) {
224
240
  await tunnel.tls.updateTrafficKeys();
225
241
  }
242
+ let blocksWritten = tunnel.transcript.length;
226
243
  await tunnel.write(data);
244
+ blocksWritten = tunnel.transcript.length - blocksWritten;
227
245
  // now we mark the packet to be revealed to the attestor
228
- setRevealOfLastSentBlock(reveal ? { type: 'complete' } : undefined);
246
+ setRevealOfLastSentBlocks(reveal ? { type: 'complete' } : undefined, blocksWritten);
229
247
  lastMsgRevealed = reveal;
230
248
  }
231
- function setRevealOfLastSentBlock(reveal) {
232
- const lastBlock = getLastBlock('client');
233
- if (!lastBlock) {
249
+ function setRevealOfLastSentBlocks(reveal, nBlocks = 1) {
250
+ const lastBlocks = getLastBlocks('client', nBlocks);
251
+ if (!lastBlocks.length) {
234
252
  return;
235
253
  }
236
- setRevealOfMessage(lastBlock.message, reveal);
254
+ for (const block of lastBlocks) {
255
+ setRevealOfMessage(block.message, reveal);
256
+ }
237
257
  }
238
- function getLastBlock(sender) {
258
+ function getLastBlocks(sender, nBlocks) {
239
259
  // set the correct index for the server blocks
260
+ const lastBlocks = [];
240
261
  for (let i = tunnel.transcript.length - 1; i >= 0; i--) {
241
262
  const block = tunnel.transcript[i];
242
263
  if (block.sender === sender) {
243
- return block;
264
+ lastBlocks.push(block);
265
+ if (lastBlocks.length === nBlocks) {
266
+ break;
267
+ }
244
268
  }
245
269
  }
270
+ return lastBlocks;
246
271
  }
247
272
  /**
248
273
  * Generate transcript with reveal data for the attestor to verify
249
274
  */
250
275
  async function generateTranscript() {
251
- addServerSideReveals();
276
+ await addServerSideReveals();
252
277
  const startMs = Date.now();
253
278
  const revealedMessages = await (0, utils_1.preparePacketsForReveal)(tunnel.transcript, revealMap, {
254
279
  logger,
@@ -273,7 +298,7 @@ async function _createClaimOnAttestor({ name, params, secretParams, context, onS
273
298
  * the provider's redaction function if available.
274
299
  * Otherwise, opts to reveal all server side blocks.
275
300
  */
276
- function addServerSideReveals() {
301
+ async function addServerSideReveals() {
277
302
  const allPackets = tunnel.transcript;
278
303
  let serverPacketsToReveal = 'all';
279
304
  const packets = [];
@@ -298,9 +323,10 @@ async function _createClaimOnAttestor({ name, params, secretParams, context, onS
298
323
  }
299
324
  }
300
325
  if (provider.getResponseRedactions) {
301
- serverPacketsToReveal = (0, utils_1.getBlocksToReveal)(serverBlocks, total => provider.getResponseRedactions(total, params));
326
+ serverPacketsToReveal = await (0, utils_1.getBlocksToReveal)(serverBlocks, total => provider.getResponseRedactions(total, params, logger), performOprf);
302
327
  }
303
- const revealedPackets = packets.filter(p => p.sender === 'client');
328
+ const revealedPackets = packets
329
+ .filter(p => p.sender === 'client');
304
330
  if (serverPacketsToReveal === 'all') {
305
331
  // reveal all server side blocks
306
332
  for (const { message, sender } of allPackets) {
@@ -311,18 +337,28 @@ async function _createClaimOnAttestor({ name, params, secretParams, context, onS
311
337
  revealedPackets.push(...packets.filter(p => p.sender === 'server'));
312
338
  }
313
339
  else {
314
- for (const { block, redactedPlaintext } of serverPacketsToReveal) {
340
+ for (const { block, redactedPlaintext, toprfs } of serverPacketsToReveal) {
315
341
  setRevealOfMessage(block.message, {
316
342
  type: 'zk',
317
- redactedPlaintext
343
+ redactedPlaintext,
344
+ toprfs
318
345
  });
319
346
  revealedPackets.push({ sender: 'server', message: redactedPlaintext });
347
+ if (updateParametersFromOprfData && toprfs) {
348
+ let strParams = (0, utils_1.canonicalStringify)(params);
349
+ for (const toprf of toprfs) {
350
+ strParams = strParams.replaceAll((0, utils_1.uint8ArrayToStr)(toprf.plaintext), (0, utils_1.binaryHashToStr)(toprf.nullifier, toprf.dataLocation.length));
351
+ }
352
+ params = JSON.parse(strParams);
353
+ }
320
354
  }
321
355
  }
322
- provider.assertValidProviderReceipt(revealedPackets, {
356
+ await provider.assertValidProviderReceipt(revealedPackets, {
323
357
  ...params,
324
- secretParams: secretParams //provide secret params for proper request body validation
325
- });
358
+ // provide secret params for proper
359
+ // request body validation
360
+ secretParams,
361
+ }, logger);
326
362
  // reveal all handshake blocks
327
363
  // so the attestor can verify there was no
328
364
  // hanky-panky
@@ -338,6 +374,26 @@ async function _createClaimOnAttestor({ name, params, secretParams, context, onS
338
374
  setRevealOfMessage(p.message, { type: 'complete' });
339
375
  }
340
376
  }
377
+ async function performOprf(plaintext) {
378
+ var _a;
379
+ logger.info({ length: plaintext.length }, 'generating OPRF...');
380
+ const oprfOperator = ((_a = zkOpts.oprfOperators) === null || _a === void 0 ? void 0 : _a['chacha20'])
381
+ || (0, utils_1.makeDefaultOPRFOperator)('chacha20', zkEngine, logger);
382
+ const reqData = await oprfOperator.generateOPRFRequestData(plaintext, config_1.TOPRF_DOMAIN_SEPARATOR, logger);
383
+ const res = await client.rpc('toprf', {
384
+ maskedData: reqData.maskedData,
385
+ engine: (0, utils_1.getEngineProto)(zkEngine)
386
+ });
387
+ const nullifier = await oprfOperator.finaliseOPRF(client.initResponse.toprfPublicKey, reqData, [res]);
388
+ const data = {
389
+ nullifier,
390
+ responses: [res],
391
+ mask: reqData.mask,
392
+ dataLocation: undefined,
393
+ plaintext
394
+ };
395
+ return data;
396
+ }
341
397
  function setRevealOfMessage(message, reveal) {
342
398
  if (reveal) {
343
399
  revealMap.set(message, reveal);
@@ -346,9 +402,9 @@ async function _createClaimOnAttestor({ name, params, secretParams, context, onS
346
402
  revealMap.delete(message);
347
403
  }
348
404
  function getAddress() {
349
- const { getAddress, getPublicKey, } = signatureAlg;
405
+ const { getAddress, getPublicKey } = signatureAlg;
350
406
  const pubKey = getPublicKey(ownerPrivateKey);
351
407
  return getAddress(pubKey);
352
408
  }
353
409
  }
354
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLWNsYWltLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NsaWVudC9jcmVhdGUtY2xhaW0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFnQ0Esc0RBbUJDO0FBbkRELDhDQUF3RTtBQUN4RSxnRkFBeUU7QUFDekUsa0VBQTBFO0FBQzFFLHVDQUErQztBQUMvQyx1Q0FBaUU7QUFDakUsNkNBQXlDO0FBRXpDLHFDQVlrQjtBQUNsQiwrQ0FBc0Q7QUFDdEQscURBQWlEO0FBQ2pELHVDQUFvRDtBQU9wRDs7R0FFRztBQUNILFNBQWdCLHFCQUFxQixDQUNwQyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxJQUFJLEVBQWdDO0lBRTFELE1BQU0sTUFBTSxHQUFHLE9BQU87UUFDckIsNkNBQTZDO1FBQzdDLHFEQUFxRDtRQUNyRCx5Q0FBeUM7V0FDdEMsQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLGNBQU0sQ0FBQyxDQUFBO0lBQzNELE9BQU8sSUFBQSw0QkFBa0IsRUFDeEIsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUNWLHNCQUFzQixDQUFJO1FBQ3pCLEdBQUcsSUFBSTtRQUNQLE1BQU0sRUFBRSxPQUFPO1lBQ2QsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQztZQUMzQixDQUFDLENBQUMsTUFBTTtLQUNULENBQUMsQ0FDRixFQUNELEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxDQUN2QixDQUFBO0FBQ0YsQ0FBQztBQUVELFNBQVMsV0FBVyxDQUFDLEdBQVU7SUFDOUIsSUFBRyxHQUFHLFlBQVksU0FBUyxFQUFFLENBQUM7UUFDN0IsT0FBTyxLQUFLLENBQUE7SUFDYixDQUFDO0lBRUQsT0FBTyxHQUFHLFlBQVkscUJBQWE7V0FDL0IsR0FBRyxDQUFDLElBQUks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
410
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLWNsYWltLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NsaWVudC9jcmVhdGUtY2xhaW0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUE0Q0Esc0RBcUJDO0FBakVELDhDQUF3RTtBQUN4RSxnRkFBeUU7QUFDekUsa0VBQTBFO0FBQzFFLHVDQUF1RTtBQUN2RSx1Q0FBaUU7QUFDakUsNkNBQXlDO0FBU3pDLHFDQWlCa0I7QUFDbEIsK0NBQXNEO0FBQ3RELHFEQUFpRDtBQUNqRCx1Q0FBb0Q7QUFPcEQ7O0dBRUc7QUFDSCxTQUFnQixxQkFBcUIsQ0FDcEMsRUFDQyxNQUFNLEVBQUUsT0FBTyxFQUFFLFVBQVUsR0FBRyxDQUFDLEVBQUUsR0FBRyxJQUFJLEVBQ1Y7SUFFL0IsTUFBTSxNQUFNLEdBQUcsT0FBTztRQUNyQiw2Q0FBNkM7UUFDN0MscURBQXFEO1FBQ3JELHlDQUF5QztXQUN0QyxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsY0FBTSxDQUFDLENBQUE7SUFDM0QsT0FBTyxJQUFBLDRCQUFrQixFQUN4QixPQUFPLENBQUMsRUFBRSxDQUFDLENBQ1Ysc0JBQXNCLENBQUk7UUFDekIsR0FBRyxJQUFJO1FBQ1AsTUFBTSxFQUFFLE9BQU87WUFDZCxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDO1lBQzNCLENBQUMsQ0FBQyxNQUFNO0tBQ1QsQ0FBQyxDQUNGLEVBQ0QsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxDQUNuQyxDQUFBO0FBQ0YsQ0FBQztBQUVELFNBQVMsV0FBVyxDQUFDLEdBQVU7SUFDOUIsSUFBRyxHQUFHLFlBQVksU0FBUyxFQUFFLENBQUM7UUFDN0IsT0FBTyxLQUFLLENBQUE7SUFDYixDQUFDO0lBRUQsT0FBTyxHQUFHLFlB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
@@ -1,8 +1,10 @@
1
+ import { InitResponse } from '../../proto/api';
1
2
  import { IAttestorClient, IAttestorClientCreateOpts, RPCRequestData, RPCResponseData, RPCType } from '../../types';
2
3
  import { AttestorSocket } from '../../utils/socket-base';
3
4
  export declare class AttestorClient extends AttestorSocket implements IAttestorClient {
4
5
  private waitForInitPromise;
5
- constructor({ url, initMessages, signatureType, logger, Websocket }: IAttestorClientCreateOpts);
6
+ initResponse?: InitResponse;
7
+ constructor({ url, initMessages, signatureType, logger, authRequest, makeWebSocket }: IAttestorClientCreateOpts);
6
8
  rpc<T extends RPCType>(type: T, request: Partial<RPCRequestData<T>>): Promise<Exclude<import("../../proto/api").RPCMessage[`${T}Response`], undefined>>;
7
9
  waitForResponse<T extends RPCType>(id: number): Promise<RPCResponseData<T>>;
8
10
  waitForInit: () => Promise<void>;
@@ -8,14 +8,18 @@ const utils_2 = require("../../utils");
8
8
  const socket_base_1 = require("../../utils/socket-base");
9
9
  const ws_1 = require("../../utils/ws");
10
10
  class AttestorClient extends socket_base_1.AttestorSocket {
11
- constructor({ url, initMessages = [], signatureType = config_1.DEFAULT_METADATA.signatureType, logger = utils_2.logger, Websocket = ws_1.Websocket }) {
12
- const initRequest = { ...config_1.DEFAULT_METADATA, signatureType };
11
+ constructor({ url, initMessages = [], signatureType = config_1.DEFAULT_METADATA.signatureType, logger = utils_2.logger, authRequest, makeWebSocket = ws_1.makeWebSocket }) {
12
+ const initRequest = {
13
+ ...config_1.DEFAULT_METADATA,
14
+ signatureType,
15
+ auth: authRequest
16
+ };
13
17
  const msg = (0, utils_2.packRpcMessages)({ initRequest }, ...initMessages);
14
18
  const initRequestBytes = api_1.RPCMessages.encode(msg).finish();
15
19
  const initRequestB64 = utils_1.base64.encode(initRequestBytes);
16
20
  url = new URL(url.toString());
17
21
  url.searchParams.set('messages', initRequestB64);
18
- super(new Websocket(url), initRequest, logger);
22
+ super(makeWebSocket(url), initRequest, logger);
19
23
  this.waitForInit = () => {
20
24
  if (this.isClosed) {
21
25
  throw new utils_2.AttestorError('ERROR_NETWORK_ERROR', 'Client connection already closed');
@@ -25,16 +29,29 @@ class AttestorClient extends socket_base_1.AttestorSocket {
25
29
  const initReqId = msg.messages[0].id;
26
30
  this.waitForInitPromise = this
27
31
  .waitForResponse(initReqId)
28
- .then(() => {
32
+ .then(res => {
29
33
  logger.info('client initialised');
30
34
  this.isInitialised = true;
35
+ this.initResponse = res;
31
36
  });
37
+ // swallow the error if anything bad happens, and we've no
38
+ // catch block to handle it
39
+ this.waitForInitPromise
40
+ .catch(() => { });
32
41
  this.addEventListener('connection-terminated', ev => (logger.info({ err: ev.data }, 'connection terminated')));
33
42
  }
34
43
  async rpc(type, request) {
35
- const { messages: [{ id }] } = await this.sendMessage({ [(0, utils_2.getRpcRequestType)(type)]: request });
36
- const rslt = await this.waitForResponse(id);
37
- return rslt;
44
+ this.logger.debug({ type }, 'sending rpc request');
45
+ const now = Date.now();
46
+ try {
47
+ const { messages: [{ id }] } = await this.sendMessage({ [(0, utils_2.getRpcRequestType)(type)]: request });
48
+ const rslt = await this.waitForResponse(id);
49
+ return rslt;
50
+ }
51
+ finally {
52
+ const timeTakenMs = Date.now() - now;
53
+ this.logger.debug({ type, timeTakenMs }, 'received rpc response');
54
+ }
38
55
  }
39
56
  waitForResponse(id) {
40
57
  if (this.isClosed) {
@@ -74,4 +91,4 @@ class AttestorClient extends socket_base_1.AttestorSocket {
74
91
  }
75
92
  }
76
93
  exports.AttestorClient = AttestorClient;
77
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LXNvY2tldC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jbGllbnQvdXRpbHMvY2xpZW50LXNvY2tldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw0Q0FBeUM7QUFDekMsdUNBQTZDO0FBQzdDLHVDQUEyQztBQUUzQyxxQ0FBK0Y7QUFDL0YsdURBQXNEO0FBQ3RELHFDQUE0RDtBQUU1RCxNQUFhLGNBQWUsU0FBUSw0QkFBYztJQUlqRCxZQUFZLEVBQ1gsR0FBRyxFQUNILFlBQVksR0FBRyxFQUFFLEVBQ2pCLGFBQWEsR0FBRyx5QkFBZ0IsQ0FBQyxhQUFhLEVBQzlDLE1BQU0sR0FBRyxjQUFNLEVBQ2YsU0FBUyxHQUFHLGNBQWdCLEVBQ0Q7UUFDM0IsTUFBTSxXQUFXLEdBQUcsRUFBRSxHQUFHLHlCQUFnQixFQUFFLGFBQWEsRUFBRSxDQUFBO1FBQzFELE1BQU0sR0FBRyxHQUFHLElBQUEsdUJBQWUsRUFBQyxFQUFFLFdBQVcsRUFBRSxFQUFFLEdBQUcsWUFBWSxDQUFDLENBQUE7UUFDN0QsTUFBTSxnQkFBZ0IsR0FBRyxpQkFBVyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQTtRQUN6RCxNQUFNLGNBQWMsR0FBRyxjQUFNLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUE7UUFFdEQsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFBO1FBQzdCLEdBQUcsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxjQUFjLENBQUMsQ0FBQTtRQUVoRCxLQUFLLENBQ0osSUFBSSxTQUFTLENBQUMsR0FBRyxDQUFjLEVBQy9CLFdBQVcsRUFDWCxNQUFNLENBQ04sQ0FBQTtRQStFRixnQkFBVyxHQUFHLEdBQUcsRUFBRTtZQUNsQixJQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDbEIsTUFBTSxJ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
94
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LXNvY2tldC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jbGllbnQvdXRpbHMvY2xpZW50LXNvY2tldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw0Q0FBeUM7QUFDekMsdUNBQTZDO0FBQzdDLHVDQUF5RDtBQUV6RCxxQ0FBK0Y7QUFDL0YsdURBQXNEO0FBQ3RELHFDQUFvRTtBQUVwRSxNQUFhLGNBQWUsU0FBUSw0QkFBYztJQU1qRCxZQUFZLEVBQ1gsR0FBRyxFQUNILFlBQVksR0FBRyxFQUFFLEVBQ2pCLGFBQWEsR0FBRyx5QkFBZ0IsQ0FBQyxhQUFhLEVBQzlDLE1BQU0sR0FBRyxjQUFNLEVBQ2YsV0FBVyxFQUNYLGFBQWEsR0FBRyxrQkFBb0IsRUFDVDtRQUMzQixNQUFNLFdBQVcsR0FBRztZQUNuQixHQUFHLHlCQUFnQjtZQUNuQixhQUFhO1lBQ2IsSUFBSSxFQUFFLFdBQVc7U0FDakIsQ0FBQTtRQUNELE1BQU0sR0FBRyxHQUFHLElBQUEsdUJBQWUsRUFBQyxFQUFFLFdBQVcsRUFBRSxFQUFFLEdBQUcsWUFBWSxDQUFDLENBQUE7UUFDN0QsTUFBTSxnQkFBZ0IsR0FBRyxpQkFBVyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQTtRQUN6RCxNQUFNLGNBQWMsR0FBRyxjQUFNLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUE7UUFFdEQsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFBO1FBQzdCLEdBQUcsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxjQUFjLENBQUMsQ0FBQTtRQUVoRCxLQUFLLENBQ0osYUFBYSxDQUFDLEdBQUcsQ0FBYyxFQUMvQixXQUFXLEVBQ1gsTUFBTSxDQUNOLENBQUE7UUE0RkYsZ0JBQVcsR0FBRyxHQUFHLEVBQUU7WUFDbEIsSUFBRyxJQUFJLENBQUMs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
@@ -18,3 +18,7 @@ export declare const PING_INTERVAL_MS = 10000;
18
18
  * @default 30s
19
19
  */
20
20
  export declare const MAX_NO_DATA_INTERVAL_MS = 30000;
21
+ export declare const MAX_PAYLOAD_SIZE: number;
22
+ export declare const DEFAULT_AUTH_EXPIRY_S: number;
23
+ export declare const TOPRF_DOMAIN_SEPARATOR = "reclaim-toprf";
24
+ export declare const BGP_WS_URL = "wss://ris-live.ripe.net/v1/ws/?client=reclaim-hijack-detector";
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.MAX_NO_DATA_INTERVAL_MS = exports.PING_INTERVAL_MS = exports.DEFAULT_METADATA = exports.MAX_CLAIM_TIMESTAMP_DIFF_S = exports.DNS_SERVERS = exports.CONNECTION_TIMEOUT_MS = exports.API_SERVER_PORT = exports.DEFAULT_REMOTE_FILE_FETCH_BASE_URL = exports.BROWSER_RPC_PATHNAME = exports.WS_PATHNAME = exports.DEFAULT_HTTPS_PORT = exports.RECLAIM_USER_AGENT = exports.DEFAULT_ZK_CONCURRENCY = exports.MAX_ZK_CHUNKS = void 0;
3
+ exports.BGP_WS_URL = exports.TOPRF_DOMAIN_SEPARATOR = exports.DEFAULT_AUTH_EXPIRY_S = exports.MAX_PAYLOAD_SIZE = exports.MAX_NO_DATA_INTERVAL_MS = exports.PING_INTERVAL_MS = exports.DEFAULT_METADATA = exports.MAX_CLAIM_TIMESTAMP_DIFF_S = exports.DNS_SERVERS = exports.CONNECTION_TIMEOUT_MS = exports.API_SERVER_PORT = exports.DEFAULT_REMOTE_FILE_FETCH_BASE_URL = exports.BROWSER_RPC_PATHNAME = exports.WS_PATHNAME = exports.DEFAULT_HTTPS_PORT = exports.RECLAIM_USER_AGENT = exports.DEFAULT_ZK_CONCURRENCY = exports.MAX_ZK_CHUNKS = void 0;
4
4
  const api_1 = require("../proto/api");
5
5
  exports.MAX_ZK_CHUNKS = 200;
6
6
  exports.DEFAULT_ZK_CONCURRENCY = 10;
@@ -20,7 +20,8 @@ exports.DNS_SERVERS = [
20
20
  exports.MAX_CLAIM_TIMESTAMP_DIFF_S = 10 * 60;
21
21
  exports.DEFAULT_METADATA = {
22
22
  signatureType: api_1.ServiceSignatureType.SERVICE_SIGNATURE_TYPE_ETH,
23
- clientVersion: api_1.AttestorVersion.ATTESTOR_VERSION_2_0_0
23
+ clientVersion: api_1.AttestorVersion.ATTESTOR_VERSION_2_0_0,
24
+ auth: undefined
24
25
  };
25
26
  exports.PING_INTERVAL_MS = 10000;
26
27
  /**
@@ -29,4 +30,8 @@ exports.PING_INTERVAL_MS = 10000;
29
30
  * @default 30s
30
31
  */
31
32
  exports.MAX_NO_DATA_INTERVAL_MS = 30000;
32
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29uZmlnL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHVDQUFrRjtBQUVyRSxRQUFBLGFBQWEsR0FBRyxHQUFHLENBQUE7QUFFbkIsUUFBQSxzQkFBc0IsR0FBRyxFQUFFLENBQUE7QUFFM0IsUUFBQSxrQkFBa0IsR0FBRyxlQUFlLENBQUE7QUFFcEMsUUFBQSxrQkFBa0IsR0FBRyxHQUFHLENBQUE7QUFFeEIsUUFBQSxXQUFXLEdBQUcsS0FBSyxDQUFBO0FBRW5CLFFBQUEsb0JBQW9CLEdBQUcsY0FBYyxDQUFBO0FBRXJDLFFBQUEsa0NBQWtDLEdBQUcsR0FBRyw0QkFBb0IsWUFBWSxDQUFBO0FBRXhFLFFBQUEsZUFBZSxHQUFHLElBQUksQ0FBQTtBQUVuQyxNQUFNO0FBQ08sUUFBQSxxQkFBcUIsR0FBRyxLQUFNLENBQUE7QUFFOUIsUUFBQSxXQUFXLEdBQUc7SUFDMUIsU0FBUztJQUNULFNBQVM7Q0FDVCxDQUFBO0FBRUQsTUFBTTtBQUNPLFFBQUEsMEJBQTBCLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQTtBQUVwQyxRQUFBLGdCQUFnQixHQUFnQjtJQUM1QyxhQUFhLEVBQUUsMEJBQW9CLENBQUMsMEJBQTBCO0lBQzlELGFBQWEsRUFBRSxxQkFBZSxDQUFDLHNCQUFzQjtDQUNyRCxDQUFBO0FBRVksUUFBQSxnQkFBZ0IsR0FBRyxLQUFNLENBQUE7QUFDdEM7Ozs7R0FJRztBQUNVLFFBQUEsdUJBQXVCLEdBQUcsS0FBTSxDQUFBIn0=
33
+ exports.MAX_PAYLOAD_SIZE = 512 * 1024 * 1024; // 512MB
34
+ exports.DEFAULT_AUTH_EXPIRY_S = 15 * 60; // 15m
35
+ exports.TOPRF_DOMAIN_SEPARATOR = 'reclaim-toprf';
36
+ exports.BGP_WS_URL = 'wss://ris-live.ripe.net/v1/ws/?client=reclaim-hijack-detector';
37
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29uZmlnL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHVDQUFrRjtBQUVyRSxRQUFBLGFBQWEsR0FBRyxHQUFHLENBQUE7QUFFbkIsUUFBQSxzQkFBc0IsR0FBRyxFQUFFLENBQUE7QUFFM0IsUUFBQSxrQkFBa0IsR0FBRyxlQUFlLENBQUE7QUFFcEMsUUFBQSxrQkFBa0IsR0FBRyxHQUFHLENBQUE7QUFFeEIsUUFBQSxXQUFXLEdBQUcsS0FBSyxDQUFBO0FBRW5CLFFBQUEsb0JBQW9CLEdBQUcsY0FBYyxDQUFBO0FBRXJDLFFBQUEsa0NBQWtDLEdBQUcsR0FBRyw0QkFBb0IsWUFBWSxDQUFBO0FBRXhFLFFBQUEsZUFBZSxHQUFHLElBQUksQ0FBQTtBQUVuQyxNQUFNO0FBQ08sUUFBQSxxQkFBcUIsR0FBRyxLQUFNLENBQUE7QUFFOUIsUUFBQSxXQUFXLEdBQUc7SUFDMUIsU0FBUztJQUNULFNBQVM7Q0FDVCxDQUFBO0FBRUQsTUFBTTtBQUNPLFFBQUEsMEJBQTBCLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQTtBQUVwQyxRQUFBLGdCQUFnQixHQUFnQjtJQUM1QyxhQUFhLEVBQUUsMEJBQW9CLENBQUMsMEJBQTBCO0lBQzlELGFBQWEsRUFBRSxxQkFBZSxDQUFDLHNCQUFzQjtJQUNyRCxJQUFJLEVBQUUsU0FBUztDQUNmLENBQUE7QUFFWSxRQUFBLGdCQUFnQixHQUFHLEtBQU0sQ0FBQTtBQUN0Qzs7OztHQUlHO0FBQ1UsUUFBQSx1QkFBdUIsR0FBRyxLQUFNLENBQUE7QUFFaEMsUUFBQSxnQkFBZ0IsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQSxDQUFDLFFBQVE7QUFFN0MsUUFBQSxxQkFBcUIsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFBLENBQUMsTUFBTTtBQUV0QyxRQUFBLHNCQUFzQixHQUFHLGVBQWUsQ0FBQTtBQUV4QyxRQUFBLFVBQVUsR0FBRywrREFBK0QsQ0FBQSJ9
package/lib/index.js CHANGED
@@ -15,13 +15,23 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
15
15
  }) : function(o, v) {
16
16
  o["default"] = v;
17
17
  });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
25
35
  var __exportStar = (this && this.__exportStar) || function(m, exports) {
26
36
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
27
37
  };
@@ -36,4 +46,4 @@ __exportStar(require("./providers"), exports);
36
46
  exports.proto = __importStar(require("./proto/api"));
37
47
  __exportStar(require("./client"), exports);
38
48
  __exportStar(require("./window-rpc"), exports);
39
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSw0REFBMkM7QUFDM0MsK0RBQTRDO0FBQzVDLDJDQUF3QjtBQUN4QiwwQ0FBdUI7QUFDdkIsMENBQXVCO0FBQ3ZCLDhDQUEyQjtBQUMzQixxREFBb0M7QUFDcEMsMkNBQXdCO0FBQ3hCLCtDQUE0QiJ9
49
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsNERBQTJDO0FBQzNDLCtEQUE0QztBQUM1QywyQ0FBd0I7QUFDeEIsMENBQXVCO0FBQ3ZCLDBDQUF1QjtBQUN2Qiw4Q0FBMkI7QUFDM0IscURBQW9DO0FBQ3BDLDJDQUF3QjtBQUN4QiwrQ0FBNEIifQ==