@reclaimprotocol/attestor-core 5.0.1-beta.28 → 5.0.1-beta.29
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/external-rpc/index.js +10400 -3
- package/lib/external-rpc/index.js.map +7 -0
- package/lib/index.js +8331 -11
- package/lib/index.js.map +7 -0
- package/package.json +2 -2
- package/lib/avs/abis/avsDirectoryABI.js +0 -340
- package/lib/avs/abis/delegationABI.js +0 -1
- package/lib/avs/abis/registryABI.js +0 -725
- package/lib/avs/client/create-claim-on-avs.js +0 -140
- package/lib/avs/config.js +0 -20
- package/lib/avs/contracts/ReclaimServiceManager.js +0 -1
- package/lib/avs/contracts/common.js +0 -1
- package/lib/avs/contracts/factories/ReclaimServiceManager__factory.js +0 -1166
- package/lib/avs/contracts/factories/index.js +0 -4
- package/lib/avs/contracts/index.js +0 -2
- package/lib/avs/types/index.js +0 -1
- package/lib/avs/utils/contracts.js +0 -33
- package/lib/avs/utils/register.js +0 -79
- package/lib/avs/utils/tasks.js +0 -41
- package/lib/client/create-claim.js +0 -432
- package/lib/client/index.js +0 -3
- package/lib/client/tunnels/make-rpc-tcp-tunnel.js +0 -51
- package/lib/client/tunnels/make-rpc-tls-tunnel.js +0 -131
- package/lib/client/utils/attestor-pool.js +0 -25
- package/lib/client/utils/client-socket.js +0 -97
- package/lib/client/utils/message-handler.js +0 -87
- package/lib/config/index.js +0 -44
- package/lib/external-rpc/benchmark.js +0 -69
- package/lib/external-rpc/event-bus.js +0 -14
- package/lib/external-rpc/handle-incoming-msg.js +0 -232
- package/lib/external-rpc/jsc-polyfills/1.js +0 -82
- package/lib/external-rpc/jsc-polyfills/2.js +0 -20
- package/lib/external-rpc/jsc-polyfills/event.js +0 -14
- package/lib/external-rpc/jsc-polyfills/index.js +0 -2
- package/lib/external-rpc/jsc-polyfills/ws.js +0 -81
- package/lib/external-rpc/setup-browser.js +0 -33
- package/lib/external-rpc/setup-jsc.js +0 -22
- package/lib/external-rpc/types.js +0 -1
- package/lib/external-rpc/utils.js +0 -100
- package/lib/external-rpc/zk.js +0 -63
- package/lib/mechain/abis/governanceABI.js +0 -458
- package/lib/mechain/abis/taskABI.js +0 -509
- package/lib/mechain/client/create-claim-on-mechain.js +0 -28
- package/lib/mechain/client/index.js +0 -1
- package/lib/mechain/constants/index.js +0 -3
- package/lib/mechain/index.js +0 -2
- package/lib/mechain/types/index.js +0 -1
- package/lib/proto/api.js +0 -4363
- package/lib/proto/tee-bundle.js +0 -1316
- package/lib/providers/http/index.js +0 -653
- package/lib/providers/http/patch-parse5-tree.js +0 -32
- package/lib/providers/http/utils.js +0 -324
- package/lib/providers/index.js +0 -4
- package/lib/server/create-server.js +0 -103
- package/lib/server/handlers/claimTeeBundle.js +0 -252
- package/lib/server/handlers/claimTunnel.js +0 -73
- package/lib/server/handlers/completeClaimOnChain.js +0 -24
- package/lib/server/handlers/createClaimOnChain.js +0 -26
- package/lib/server/handlers/createTaskOnMechain.js +0 -47
- package/lib/server/handlers/createTunnel.js +0 -93
- package/lib/server/handlers/disconnectTunnel.js +0 -5
- package/lib/server/handlers/fetchCertificateBytes.js +0 -41
- package/lib/server/handlers/index.js +0 -22
- package/lib/server/handlers/init.js +0 -32
- package/lib/server/handlers/toprf.js +0 -16
- package/lib/server/index.js +0 -4
- package/lib/server/socket.js +0 -109
- package/lib/server/tunnels/make-tcp-tunnel.js +0 -177
- package/lib/server/utils/apm.js +0 -36
- package/lib/server/utils/assert-valid-claim-request.js +0 -325
- package/lib/server/utils/config-env.js +0 -4
- package/lib/server/utils/dns.js +0 -18
- package/lib/server/utils/gcp-attestation.js +0 -289
- package/lib/server/utils/generics.js +0 -51
- package/lib/server/utils/iso.js +0 -256
- package/lib/server/utils/keep-alive.js +0 -38
- package/lib/server/utils/nitro-attestation.js +0 -324
- package/lib/server/utils/oprf-raw.js +0 -54
- package/lib/server/utils/process-handshake.js +0 -215
- package/lib/server/utils/proxy-session.js +0 -6
- package/lib/server/utils/tee-oprf-mpc-verification.js +0 -90
- package/lib/server/utils/tee-oprf-verification.js +0 -174
- package/lib/server/utils/tee-transcript-reconstruction.js +0 -187
- package/lib/server/utils/tee-verification.js +0 -421
- package/lib/server/utils/validation.js +0 -38
- package/lib/tls-exports.js +0 -5
- package/lib/types/bgp.js +0 -1
- package/lib/types/claims.js +0 -1
- package/lib/types/client.js +0 -1
- package/lib/types/general.js +0 -1
- package/lib/types/handlers.js +0 -1
- package/lib/types/index.js +0 -10
- package/lib/types/providers.gen.js +0 -10
- package/lib/types/providers.js +0 -1
- package/lib/types/rpc.js +0 -1
- package/lib/types/signatures.js +0 -1
- package/lib/types/tunnel.js +0 -1
- package/lib/types/zk.js +0 -1
- package/lib/utils/auth.js +0 -59
- package/lib/utils/b64-json.js +0 -17
- package/lib/utils/bgp-listener.js +0 -119
- package/lib/utils/claims.js +0 -98
- package/lib/utils/env.js +0 -15
- package/lib/utils/error.js +0 -50
- package/lib/utils/generics.js +0 -317
- package/lib/utils/http-parser.js +0 -246
- package/lib/utils/index.js +0 -13
- package/lib/utils/logger.js +0 -91
- package/lib/utils/prepare-packets.js +0 -71
- package/lib/utils/redactions.js +0 -177
- package/lib/utils/retries.js +0 -24
- package/lib/utils/signatures/eth.js +0 -32
- package/lib/utils/signatures/index.js +0 -7
- package/lib/utils/socket-base.js +0 -92
- package/lib/utils/tls.js +0 -58
- package/lib/utils/ws.js +0 -22
- package/lib/utils/zk.js +0 -585
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/external-rpc/handle-incoming-msg.ts", "../../src/avs/client/create-claim-on-avs.ts", "../../src/utils/env.ts", "../../src/avs/config.ts", "../../src/avs/utils/contracts.ts", "../../src/avs/abis/avsDirectoryABI.ts", "../../src/avs/abis/delegationABI.ts", "../../src/avs/abis/registryABI.ts", "../../src/avs/contracts/factories/ReclaimServiceManager__factory.ts", "../../src/avs/utils/tasks.ts", "../../src/client/create-claim.ts", "../../src/client/tunnels/make-rpc-tls-tunnel.ts", "../../src/utils/generics.ts", "../../src/proto/api.ts", "../../src/utils/logger.ts", "../../src/utils/redactions.ts", "../../src/utils/http-parser.ts", "../../src/utils/zk.ts", "../../src/config/index.ts", "../../src/utils/error.ts", "../../src/utils/claims.ts", "../../src/utils/prepare-packets.ts", "../../src/utils/signatures/eth.ts", "../../src/utils/signatures/index.ts", "../../src/utils/auth.ts", "../../src/utils/b64-json.ts", "../../src/utils/bgp-listener.ts", "../../src/utils/ws.ts", "../../src/utils/tls.ts", "../../src/client/tunnels/make-rpc-tcp-tunnel.ts", "../../src/client/utils/client-socket.ts", "../../src/client/utils/message-handler.ts", "../../src/utils/socket-base.ts", "../../src/client/utils/attestor-pool.ts", "../../src/providers/http/index.ts", "../../node_modules/domelementtype/lib/esm/index.js", "../../node_modules/domhandler/lib/esm/node.js", "../../src/providers/http/patch-parse5-tree.ts", "../../src/providers/http/utils.ts", "../../src/server/utils/proxy-session.ts", "../../src/providers/index.ts", "../../src/utils/retries.ts", "../../src/external-rpc/benchmark.ts", "../../src/external-rpc/event-bus.ts", "../../src/external-rpc/utils.ts", "../../src/external-rpc/zk.ts", "../../src/mechain/client/create-claim-on-mechain.ts"],
|
|
4
|
+
"sourcesContent": ["\nimport type { ZKEngine } from '@reclaimprotocol/zk-symmetric-crypto'\nimport { hexlify } from 'ethers'\n\nimport { createClaimOnAvs } from '#src/avs/client/create-claim-on-avs.ts'\nimport { createClaimOnAttestor } from '#src/client/index.ts'\nimport { benchmark } from '#src/external-rpc/benchmark.ts'\nimport type { CreateClaimResponse, ExternalRPCClient, ExternalRPCErrorResponse, ExternalRPCIncomingMsg, ExternalRPCOutgoingMsg, ExternalRPCResponse, RPCCreateClaimOptions } from '#src/external-rpc/types.ts'\nimport { generateRpcRequestId, getCurrentMemoryUsage, getWsApiUrlFromBaseUrl, RPC_MSG_BRIDGE, sendMessageToApp, waitForResponse } from '#src/external-rpc/utils.ts'\nimport { ALL_ENC_ALGORITHMS, makeExternalRpcOprfOperator, makeExternalRpcZkOperator } from '#src/external-rpc/zk.ts'\nimport { createClaimOnMechain } from '#src/mechain/client/create-claim-on-mechain.ts'\nimport type { ClaimTunnelResponse } from '#src/proto/api.ts'\nimport { extractHTMLElement, extractJSONValueIndex, generateRequstAndResponseFromTranscript } from '#src/providers/http/utils.ts'\nimport type { OPRFOperators, ProviderParams, ProviderSecretParams, ZKOperators } from '#src/types/index.ts'\nimport { B64_JSON_REVIVER } from '#src/utils/b64-json.ts'\nimport { AttestorError, getIdentifierFromClaimInfo, logger, makeLogger, uint8ArrayToStr } from '#src/utils/index.ts'\n\nexport async function handleIncomingMessage(data: string | ExternalRPCIncomingMsg) {\n\tlet id = ''\n\ttry {\n\t\tconst req: ExternalRPCIncomingMsg = (\n\t\t\ttypeof data === 'string'\n\t\t\t\t? JSON.parse(data, B64_JSON_REVIVER)\n\t\t\t\t: data\n\t\t)\n\n\t\tid = req.id || ''\n\n\t\tconst rslt = await _handleIncomingMessage(req)\n\t\tif(!rslt) {\n\t\t\treturn\n\t\t}\n\n\t\trespond(rslt)\n\t} catch(err) {\n\t\tconsole.error('Error in RPC', { id, error: err })\n\t\trespond({\n\t\t\ttype: 'error',\n\t\t\tdata: {\n\t\t\t\tmessage: err.message,\n\t\t\t\tstack: err.stack,\n\t\t\t}\n\t\t})\n\t}\n\n\tfunction respond(\n\t\tdata: ExternalRPCResponse<ExternalRPCClient, keyof ExternalRPCClient>\n\t\t\t| ExternalRPCErrorResponse\n\t) {\n\t\tconst res = {\n\t\t\t...data,\n\t\t\tid,\n\t\t\tisResponse: true\n\t\t} as ExternalRPCOutgoingMsg\n\t\treturn sendMessageToApp(res)\n\t}\n}\n\nasync function _handleIncomingMessage(req: ExternalRPCIncomingMsg): Promise<\n\tExternalRPCResponse<ExternalRPCClient, keyof ExternalRPCClient> | undefined\n> {\n\tconst { id: reqId, type: reqType } = req\n\t// ignore any messages not for us\n\tif(!reqId || !reqType) {\n\t\treturn\n\t}\n\n\tRPC_MSG_BRIDGE.dispatch(req)\n\t// ignore response messages\n\tif(('isResponse' in req && req.isResponse)) {\n\t\treturn\n\t}\n\n\tif(!reqId) {\n\t\tlogger.warn({ req }, 'Window RPC request missing ID')\n\t\treturn\n\t}\n\n\tlogger.info({ req }, 'processing RPC request')\n\n\tswitch (req.type) {\n\tcase 'createClaim':\n\t\tconst claimTunnelRes = await createClaimOnAttestor({\n\t\t\t...req.request,\n\t\t\tcontext: req.request.context\n\t\t\t\t? JSON.parse(req.request.context)\n\t\t\t\t: undefined,\n\t\t\tzkOperators: getZkOperators(\n\t\t\t\treq.request.zkOperatorMode, req.request.zkEngine\n\t\t\t),\n\t\t\toprfOperators: getOprfOperators(\n\t\t\t\treq.request.zkOperatorMode, req.request.zkEngine\n\t\t\t),\n\t\t\tclient: {\n\t\t\t\turl: getWsApiUrlFromBaseUrl(),\n\t\t\t\tauthRequest: req.request.authRequest\n\t\t\t},\n\t\t\tlogger,\n\t\t\tonStep(step) {\n\t\t\t\tsendMessageToApp({\n\t\t\t\t\ttype: 'createClaimStep',\n\t\t\t\t\tstep: { name: 'attestor-progress', step },\n\t\t\t\t\tid: req.id,\n\t\t\t\t})\n\t\t\t},\n\t\t\tupdateProviderParams : req.request.updateProviderParams\n\t\t\t\t? updateProviderParams\n\t\t\t\t: undefined,\n\t\t})\n\t\tconst response = mapToCreateClaimResponse(claimTunnelRes)\n\t\treturn { type: 'createClaimDone', response }\n\tcase 'createClaimOnAvs':\n\t\tconst avsRes = await createClaimOnAvs({\n\t\t\t...req.request,\n\t\t\tpayer: req.request.payer === 'attestor'\n\t\t\t\t? { attestor: getWsApiUrlFromBaseUrl() }\n\t\t\t\t: undefined,\n\t\t\tcontext: req.request.context\n\t\t\t\t? JSON.parse(req.request.context)\n\t\t\t\t: undefined,\n\t\t\tzkOperators: getZkOperators(\n\t\t\t\treq.request.zkOperatorMode, req.request.zkEngine\n\t\t\t),\n\t\t\toprfOperators: getOprfOperators(\n\t\t\t\treq.request.zkOperatorMode, req.request.zkEngine\n\t\t\t),\n\t\t\tlogger,\n\t\t\tonStep(step) {\n\t\t\t\tsendMessageToApp({\n\t\t\t\t\ttype: 'createClaimOnAvsStep',\n\t\t\t\t\tstep,\n\t\t\t\t\tid: req.id,\n\t\t\t\t})\n\t\t\t},\n\t\t})\n\t\treturn {\n\t\t\ttype: 'createClaimOnAvsDone',\n\t\t\tresponse: avsRes,\n\t\t}\n\tcase 'createClaimOnMechain':\n\t\tconst mechainRes = await createClaimOnMechain({\n\t\t\t...req.request,\n\t\t\tcontext: req.request.context\n\t\t\t\t? JSON.parse(req.request.context)\n\t\t\t\t: undefined,\n\t\t\tzkOperators: getZkOperators(\n\t\t\t\treq.request.zkOperatorMode, req.request.zkEngine\n\t\t\t),\n\t\t\toprfOperators: getOprfOperators(\n\t\t\t\treq.request.zkOperatorMode, req.request.zkEngine\n\t\t\t),\n\t\t\tclient: {\turl: getWsApiUrlFromBaseUrl() },\n\t\t\tlogger,\n\t\t\tonStep(step) {\n\t\t\t\tsendMessageToApp({\n\t\t\t\t\ttype: 'createClaimOnMechainStep',\n\t\t\t\t\tstep,\n\t\t\t\t\tid: req.id,\n\t\t\t\t})\n\t\t\t},\n\t\t})\n\t\tconst claimResponses: CreateClaimResponse[] = []\n\t\tfor(let i = 0; i < mechainRes.responses.length; i++) {\n\t\t\tclaimResponses[i] = mapToCreateClaimResponse(mechainRes.responses[i])\n\t\t}\n\n\t\treturn {\n\t\t\ttype: 'createClaimOnMechainDone',\n\t\t\tresponse: { taskId: mechainRes.taskId, data: claimResponses },\n\t\t}\n\tcase 'extractHtmlElement':\n\t\treturn {\n\t\t\ttype: 'extractHtmlElementDone',\n\t\t\tresponse: extractHTMLElement(\n\t\t\t\treq.request.html,\n\t\t\t\treq.request.xpathExpression,\n\t\t\t\treq.request.contentsOnly\n\t\t\t),\n\t\t}\n\tcase 'extractJSONValueIndex':\n\t\treturn {\n\t\t\ttype: 'extractJSONValueIndexDone',\n\t\t\tresponse: extractJSONValueIndex(\n\t\t\t\treq.request.json,\n\t\t\t\treq.request.jsonPath\n\t\t\t),\n\t\t}\n\tcase 'getCurrentMemoryUsage':\n\t\treturn {\n\t\t\ttype: 'getCurrentMemoryUsageDone',\n\t\t\tresponse: await getCurrentMemoryUsage(),\n\t\t}\n\tcase 'setLogLevel':\n\t\tmakeLogger(\n\t\t\ttrue,\n\t\t\treq.request.logLevel,\n\t\t\treq.request.sendLogsToApp\n\t\t\t\t? (level, message) => (\n\t\t\t\t\tsendMessageToApp({\n\t\t\t\t\t\ttype: 'log',\n\t\t\t\t\t\tlevel,\n\t\t\t\t\t\tmessage,\n\t\t\t\t\t\tid: req.id,\n\t\t\t\t\t})\n\t\t\t\t)\n\t\t\t\t: undefined\n\t\t)\n\t\treturn { type: 'setLogLevelDone', response: undefined }\n\tcase 'benchmarkZK':\n\t\treturn { type: 'benchmarkZKDone', response: await benchmark() }\n\tcase 'ping':\n\t\treturn { type: 'pingDone', response: { pong: new Date().toJSON() } }\n\tdefault:\n\t\tbreak\n\t}\n}\n\n\nfunction getZkOperators(\n\tmode: RPCCreateClaimOptions['zkOperatorMode'] = 'default',\n\tzkEngine: ZKEngine = 'snarkjs'\n) {\n// use default snarkJS ops\n\tif(mode === 'default') {\n\t\treturn\n\t}\n\n\t// the native app/window calling implements\n\t// a ZK operator & wants to use it\n\tconst operators: ZKOperators = {}\n\tfor(const alg of ALL_ENC_ALGORITHMS) {\n\t\toperators[alg] = makeExternalRpcZkOperator(alg, zkEngine)\n\t}\n\n\treturn operators\n}\n\nfunction getOprfOperators(\n\tmode: RPCCreateClaimOptions['zkOperatorMode'] = 'default',\n\tzkEngine: ZKEngine = 'snarkjs'\n) {\n// use default webview ops\n\tif(mode === 'default') {\n\t\treturn\n\t}\n\n\t// the native app/window calling implements\n\t// a ZK operator & wants to use it\n\tconst operators: OPRFOperators = {}\n\tfor(const alg of ALL_ENC_ALGORITHMS) {\n\t\toperators[alg] = makeExternalRpcOprfOperator(alg, zkEngine)\n\t}\n\n\treturn operators\n}\n\nasync function updateProviderParams(\n\ttranscript,\n\ttlsVersion,\n): Promise<{\n\tparams: Partial<ProviderParams<'http'>>\n\tsecretParams: Partial<ProviderSecretParams<'http'>>\n}> {\n\tconst { req, res } = generateRequstAndResponseFromTranscript(\n\t\ttranscript,\n\t\ttlsVersion\n\t)\n\tconst id = generateRpcRequestId()\n\tconst waitForRes = waitForResponse('updateProviderParams', id)\n\tsendMessageToApp({\n\t\ttype: 'updateProviderParams',\n\t\tid,\n\t\trequest: {\n\t\t\trequest: {\n\t\t\t\t...req,\n\t\t\t\tbody: req.body\n\t\t\t\t\t? uint8ArrayToStr(req.body)\n\t\t\t\t\t: undefined\n\t\t\t},\n\t\t\tresponse: { ...res, body: uint8ArrayToStr(res.body) },\n\t\t}\n\t})\n\treturn waitForRes\n}\n\nfunction mapToCreateClaimResponse(\n\tres: ClaimTunnelResponse\n): CreateClaimResponse {\n\tif(!res.claim) {\n\t\tthrow AttestorError.fromProto(res.error)\n\t}\n\n\treturn {\n\t\tidentifier: getIdentifierFromClaimInfo(res.claim),\n\t\tclaimData: res.claim,\n\t\twitnesses: [\n\t\t\t{\n\t\t\t\tid: res.signatures!.attestorAddress,\n\t\t\t\turl: getWsApiUrlFromBaseUrl()\n\t\t\t}\n\t\t],\n\t\tsignatures: [\n\t\t\thexlify(res.signatures!.claimSignature)\n\t\t\t\t.toLowerCase()\n\t\t]\n\t}\n}", "import { EventLog, hexlify, Wallet } from 'ethers'\n\nimport { CHAIN_CONFIGS, SELECTED_CHAIN_ID } from '#src/avs/config.ts'\nimport type { IReclaimServiceManager, NewTaskCreatedEvent, TaskCompletedEvent } from '#src/avs/contracts/ReclaimServiceManager.ts'\nimport type { CreateClaimOnAvsOpts } from '#src/avs/types/index.ts'\nimport { initialiseContracts } from '#src/avs/utils/contracts.ts'\nimport { createNewClaimRequestOnChain, signClaimRequest } from '#src/avs/utils/tasks.ts'\nimport { createClaimOnAttestor as _createClaimOnAttestor, getAttestorClientFromPool } from '#src/client/index.ts'\nimport type { ClaimRequestData, ClaimTunnelResponse, ProviderClaimData } from '#src/proto/api.ts'\nimport type { ProviderName } from '#src/types/index.ts'\nimport { AttestorError, canonicalStringify, getIdentifierFromClaimInfo, logger as LOGGER, unixTimestampSeconds } from '#src/utils/index.ts'\n\nconst EMPTY_CLAIM_USER_ID = hexlify(new Uint8Array(32))\n\n/**\n * Creates a Reclaim claim on the AVS chain.\n */\nexport async function createClaimOnAvs<N extends ProviderName>({\n\tonStep,\n\tcreateClaimOnAttestor = _createClaimOnAttestor,\n\tchainId = SELECTED_CHAIN_ID,\n\tpayer,\n\t...opts\n}: CreateClaimOnAvsOpts<N>) {\n\tconst {\n\t\tlogger = LOGGER,\n\t\townerPrivateKey,\n\t\tname,\n\t\tparams,\n\t\tcontext,\n\t} = opts\n\tconst { contract, wallet, provider } = initialiseContracts(\n\t\tCHAIN_CONFIGS[chainId!],\n\t\townerPrivateKey\n\t)\n\n\tlogger.info(\n\t\t{ owner: wallet!.address, contract: await contract.getAddress() },\n\t\t'creating claim'\n\t)\n\n\tconst arg = await requestClaimCreation()\n\n\tlogger.info(\n\t\t{\n\t\t\tindex: arg.taskIndex,\n\t\t\toperators: arg.task.operators.length,\n\t\t},\n\t\t'task created, collecting claim signatures...'\n\t)\n\n\tonStep?.({ type: 'taskCreated', data: arg })\n\n\tconst responses: ClaimTunnelResponse[] = []\n\tconst timestampS = +arg.task.createdAt.toString()\n\tfor(const op of arg.task.operators) {\n\t\tconst res = await createClaimOnAttestor({\n\t\t\t...opts,\n\t\t\tclient: { url: op.url },\n\t\t\ttimestampS,\n\t\t\tonStep: (step) => (\n\t\t\t\tonStep?.({\n\t\t\t\t\ttype: 'attestorStep',\n\t\t\t\t\tdata: {\n\t\t\t\t\t\toperatorAddress: op.addr,\n\t\t\t\t\t\tstep,\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t),\n\t\t\tlogger: logger.child({ operator: op.addr }),\n\t\t})\n\t\tconst signature = res.signatures?.claimSignature\n\t\tif(!signature) {\n\t\t\tthrow new Error('INTERNAL: Claim signature not generated')\n\t\t}\n\n\t\tconst diff = getClaimRequestDifference(res.request?.data!, res.claim!)\n\t\tif(diff) {\n\t\t\tthrow new AttestorError(\n\t\t\t\t'ERROR_INVALID_CLAIM',\n\t\t\t\t`Claim request does not match the claim res data: ${diff}`,\n\t\t\t\t{\n\t\t\t\t\tdiff,\n\t\t\t\t\trequest: res.request?.data?.[diff],\n\t\t\t\t\tclaim: res.claim?.[diff]\n\t\t\t\t}\n\t\t\t)\n\t\t}\n\n\t\tresponses.push(res)\n\n\t\tlogger.info({ operator: op.addr }, 'signature generated')\n\n\t\tonStep?.({\n\t\t\ttype: 'attestorDone',\n\t\t\tdata: {\n\t\t\t\ttask: arg,\n\t\t\t\tresponsesDone: responses,\n\t\t\t},\n\t\t})\n\t}\n\n\tconst rslt = await completeTask()\n\n\tlogger.info(\n\t\t{ tx: rslt.txHash, task: arg.taskIndex },\n\t\t'claim submitted & validated'\n\t)\n\n\treturn { ...rslt, claimData: responses[0].claim! }\n\n\tasync function requestClaimCreation() {\n\t\tconst request: IReclaimServiceManager.ClaimRequestStruct = {\n\t\t\tprovider: name,\n\t\t\t// blank for now -- till we figure out the right\n\t\t\t// algorithm for this\n\t\t\tclaimUserId: EMPTY_CLAIM_USER_ID,\n\t\t\tclaimHash: getIdentifierFromClaimInfo({\n\t\t\t\tprovider: name,\n\t\t\t\tparameters: canonicalStringify(params),\n\t\t\t\tcontext: context\n\t\t\t\t\t? canonicalStringify(context)\n\t\t\t\t\t: '',\n\t\t\t}),\n\t\t\towner: wallet!.address,\n\t\t\trequestedAt: unixTimestampSeconds()\n\t\t}\n\n\t\tif(!payer) {\n\t\t\tconst payerWallet = new Wallet(ownerPrivateKey, provider)\n\t\t\tconst { task } = await createNewClaimRequestOnChain({\n\t\t\t\trequest,\n\t\t\t\tpayer: payerWallet,\n\t\t\t\towner: payerWallet,\n\t\t\t\tchainId\n\t\t\t})\n\t\t\treturn task\n\t\t}\n\n\t\tconst requestSignature = await signClaimRequest(\n\t\t\trequest,\n\t\t\twallet!,\n\t\t\tchainId\n\t\t)\n\t\tconst client = getAttestorClientFromPool(payer.attestor)\n\t\tawait client.waitForInit()\n\t\tconst rslt = await client.rpc('createClaimOnChain', {\n\t\t\tchainId: +chainId!,\n\t\t\tjsonCreateClaimRequest: JSON.stringify(request),\n\t\t\trequestSignature\n\t\t})\n\n\t\treturn JSON.parse(rslt.jsonTask) as NewTaskCreatedEvent.OutputObject\n\t}\n\n\tasync function completeTask() {\n\t\tconst data: IReclaimServiceManager.CompletedTaskStruct = {\n\t\t\ttask: arg.task,\n\t\t\tsignatures: responses\n\t\t\t\t.map(res => (\n\t\t\t\t\thexlify(res.signatures?.claimSignature!)\n\t\t\t\t)),\n\t\t}\n\n\t\tif(!payer) {\n\t\t\tconst tx = await contract.taskCompleted(data, arg.taskIndex)\n\t\t\tconst rslt = await tx.wait()\n\t\t\t// check task created event was emitted\n\t\t\tconst logs = rslt?.logs ?? []\n\t\t\tconst eventLogs = logs.filter((log): log is EventLog => log instanceof EventLog)\n\t\t\tconst ev = eventLogs[0]\n\t\t\treturn {\n\t\t\t\tobject: ev?.args as unknown as TaskCompletedEvent.OutputObject,\n\t\t\t\ttxHash: rslt!.hash\n\t\t\t}\n\t\t}\n\n\t\tconst client = getAttestorClientFromPool(payer.attestor)\n\t\tawait client.waitForInit()\n\t\tconst rslt = await client.rpc('completeClaimOnChain', {\n\t\t\tchainId: +chainId!,\n\t\t\ttaskIndex: Number(arg.taskIndex),\n\t\t\tcompletedTaskJson: JSON.stringify(data)\n\t\t})\n\t\tconst object = JSON.parse(rslt.taskCompletedObjectJson) as TaskCompletedEvent.OutputObject\n\t\treturn { object, txHash: rslt.txHash }\n\t}\n}\n\ntype Req = ProviderClaimData | ClaimRequestData\n\nfunction getClaimRequestDifference(a: Req, b: Req): (keyof Req) | undefined {\n\tif(a.provider !== b.provider) {\n\t\treturn 'provider'\n\t}\n\n\tif(a.context !== b.context) {\n\t\treturn 'context'\n\t}\n\n\tif(a.parameters !== b.parameters) {\n\t\treturn 'parameters'\n\t}\n\n\tif(a.timestampS !== b.timestampS) {\n\t\treturn 'timestampS'\n\t}\n}", "export type TransportType = 'node' | 'react-native' | 'browser'\n\nexport function detectEnvironment(): TransportType {\n\tif(typeof navigator !== 'undefined' && navigator.product === 'ReactNative') {\n\t\treturn 'react-native'\n\t}\n\n\tif(typeof window !== 'undefined') {\n\t\treturn 'browser'\n\t}\n\n\treturn 'node'\n}\n\nexport function getEnvVariable(name: string) {\n\tif(typeof process === 'undefined') {\n\t\treturn undefined\n\t}\n\n\treturn process?.env[name]\n}", "import type { ChainConfig } from '#src/avs/types/index.ts'\nimport { getEnvVariable } from '#src/utils/env.ts'\n\nexport const CHAIN_CONFIGS: { [key: string]: ChainConfig } = {\n\t'31337': {\n\t\trpcUrl: 'http://localhost:8545',\n\t\tcontractAddress: '0x84eA74d481Ee0A5332c457a4d796187F6Ba67fEB',\n\t\tdelegationManagerAddress: '0xCf7Ed3AccA5a467e9e704C703E8D87F634fB0Fc9',\n\t\tstakeRegistryAddress: '0x9E545E3C0baAB3E08CdfD552C960A1050f373042',\n\t\tavsDirectoryAddress: '0x5FC8d32690cc91D4c39d9d3abcBD16989F875707'\n\t},\n\t'17000': {\n\t\trpcUrl: getEnvVariable('RPC_URL') || 'https://rpc.holesky.ethpandaops.io',\n\t\tcontractAddress: '0x0861afc305999bfD3028dB66145395BdD7299366',\n\t\tdelegationManagerAddress: '0xA44151489861Fe9e3055d95adC98FbD462B948e7',\n\t\tstakeRegistryAddress: '0xDa11C9Da04Ab02C4AF9374B27A5E727944D3E1dD',\n\t\tavsDirectoryAddress: '0x055733000064333CaDDbC92763c58BF0192fFeBf'\n\t}\n}\n\nexport const PRIVATE_KEY = getEnvVariable('PRIVATE_KEY')!\n\nexport const SELECTED_CHAIN_ID = getEnvVariable('CHAIN_ID')\n\nexport const RECLAIM_PUBLIC_URL = getEnvVariable('RECLAIM_PUBLIC_URL')!", "import { Contract, JsonRpcProvider, Wallet } from 'ethers'\n\nimport { avsDirectoryABI } from '#src/avs/abis/avsDirectoryABI.ts'\nimport { delegationABI } from '#src/avs/abis/delegationABI.ts'\nimport { registryABI } from '#src/avs/abis/registryABI.ts'\nimport { CHAIN_CONFIGS, PRIVATE_KEY, SELECTED_CHAIN_ID } from '#src/avs/config.ts'\nimport { ReclaimServiceManager__factory } from '#src/avs/contracts/index.ts'\nimport type { ChainConfig } from '#src/avs/types/index.ts'\n\ntype Contracts = ReturnType<typeof initialiseContracts>\n\nconst configs: { [key: string]: Contracts } = {}\n\n/**\n * get the contracts for the given chain ID\n */\nexport function getContracts(chainId = SELECTED_CHAIN_ID!) {\n\tconst config = CHAIN_CONFIGS[chainId]\n\tif(!config) {\n\t\tthrow new Error(`No config found for chain ID: ${chainId}`)\n\t}\n\n\tconfigs[chainId] ||= initialiseContracts(config)\n\treturn configs[chainId]\n}\n\nexport function initialiseContracts(\n\t{\n\t\trpcUrl,\n\t\tstakeRegistryAddress,\n\t\tavsDirectoryAddress,\n\t\tcontractAddress,\n\t\tdelegationManagerAddress,\n\t}: ChainConfig,\n\tprivateKey: string | undefined = PRIVATE_KEY\n) {\n\tconst provider = new JsonRpcProvider(rpcUrl)\n\tconst wallet = privateKey\n\t\t? new Wallet(privateKey, provider)\n\t\t: undefined\n\n\treturn {\n\t\tprovider,\n\t\twallet,\n\t\tdelegationManager: new Contract(\n\t\t\tdelegationManagerAddress,\n\t\t\tdelegationABI,\n\t\t\twallet || provider\n\t\t),\n\t\t// eslint-disable-next-line camelcase\n\t\tcontract: ReclaimServiceManager__factory.connect(\n\t\t\tcontractAddress,\n\t\t\twallet || provider\n\t\t),\n\t\tregistryContract: new Contract(\n\t\t\tstakeRegistryAddress,\n\t\t\tregistryABI,\n\t\t\twallet || provider\n\t\t),\n\t\tavsDirectory: new Contract(\n\t\t\tavsDirectoryAddress,\n\t\t\tavsDirectoryABI,\n\t\t\twallet || provider\n\t\t),\n\t}\n}", "export const avsDirectoryABI = [\n {\n type: \"constructor\",\n inputs: [\n {\n name: \"_delegation\",\n type: \"address\",\n internalType: \"contract IDelegationManager\",\n },\n ],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"DOMAIN_TYPEHASH\",\n inputs: [],\n outputs: [{ name: \"\", type: \"bytes32\", internalType: \"bytes32\" }],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"OPERATOR_AVS_REGISTRATION_TYPEHASH\",\n inputs: [],\n outputs: [{ name: \"\", type: \"bytes32\", internalType: \"bytes32\" }],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"avsOperatorStatus\",\n inputs: [\n { name: \"\", type: \"address\", internalType: \"address\" },\n { name: \"\", type: \"address\", internalType: \"address\" },\n ],\n outputs: [\n {\n name: \"\",\n type: \"uint8\",\n internalType: \"enum IAVSDirectory.OperatorAVSRegistrationStatus\",\n },\n ],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"calculateOperatorAVSRegistrationDigestHash\",\n inputs: [\n { name: \"operator\", type: \"address\", internalType: \"address\" },\n { name: \"avs\", type: \"address\", internalType: \"address\" },\n { name: \"salt\", type: \"bytes32\", internalType: \"bytes32\" },\n { name: \"expiry\", type: \"uint256\", internalType: \"uint256\" },\n ],\n outputs: [{ name: \"\", type: \"bytes32\", internalType: \"bytes32\" }],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"cancelSalt\",\n inputs: [{ name: \"salt\", type: \"bytes32\", internalType: \"bytes32\" }],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"delegation\",\n inputs: [],\n outputs: [\n {\n name: \"\",\n type: \"address\",\n internalType: \"contract IDelegationManager\",\n },\n ],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"deregisterOperatorFromAVS\",\n inputs: [{ name: \"operator\", type: \"address\", internalType: \"address\" }],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"domainSeparator\",\n inputs: [],\n outputs: [{ name: \"\", type: \"bytes32\", internalType: \"bytes32\" }],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"initialize\",\n inputs: [\n { name: \"initialOwner\", type: \"address\", internalType: \"address\" },\n {\n name: \"_pauserRegistry\",\n type: \"address\",\n internalType: \"contract IPauserRegistry\",\n },\n { name: \"initialPausedStatus\", type: \"uint256\", internalType: \"uint256\" },\n ],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"operatorSaltIsSpent\",\n inputs: [\n { name: \"\", type: \"address\", internalType: \"address\" },\n { name: \"\", type: \"bytes32\", internalType: \"bytes32\" },\n ],\n outputs: [{ name: \"\", type: \"bool\", internalType: \"bool\" }],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"owner\",\n inputs: [],\n outputs: [{ name: \"\", type: \"address\", internalType: \"address\" }],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"pause\",\n inputs: [\n { name: \"newPausedStatus\", type: \"uint256\", internalType: \"uint256\" },\n ],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"pauseAll\",\n inputs: [],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"paused\",\n inputs: [{ name: \"index\", type: \"uint8\", internalType: \"uint8\" }],\n outputs: [{ name: \"\", type: \"bool\", internalType: \"bool\" }],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"paused\",\n inputs: [],\n outputs: [{ name: \"\", type: \"uint256\", internalType: \"uint256\" }],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"pauserRegistry\",\n inputs: [],\n outputs: [\n { name: \"\", type: \"address\", internalType: \"contract IPauserRegistry\" },\n ],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"registerOperatorToAVS\",\n inputs: [\n { name: \"operator\", type: \"address\", internalType: \"address\" },\n {\n name: \"operatorSignature\",\n type: \"tuple\",\n internalType: \"struct ISignatureUtils.SignatureWithSaltAndExpiry\",\n components: [\n { name: \"signature\", type: \"bytes\", internalType: \"bytes\" },\n { name: \"salt\", type: \"bytes32\", internalType: \"bytes32\" },\n { name: \"expiry\", type: \"uint256\", internalType: \"uint256\" },\n ],\n },\n ],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"renounceOwnership\",\n inputs: [],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"setPauserRegistry\",\n inputs: [\n {\n name: \"newPauserRegistry\",\n type: \"address\",\n internalType: \"contract IPauserRegistry\",\n },\n ],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"transferOwnership\",\n inputs: [{ name: \"newOwner\", type: \"address\", internalType: \"address\" }],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"unpause\",\n inputs: [\n { name: \"newPausedStatus\", type: \"uint256\", internalType: \"uint256\" },\n ],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"updateAVSMetadataURI\",\n inputs: [{ name: \"metadataURI\", type: \"string\", internalType: \"string\" }],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"event\",\n name: \"AVSMetadataURIUpdated\",\n inputs: [\n { name: \"avs\", type: \"address\", indexed: true, internalType: \"address\" },\n {\n name: \"metadataURI\",\n type: \"string\",\n indexed: false,\n internalType: \"string\",\n },\n ],\n anonymous: false,\n },\n {\n type: \"event\",\n name: \"Initialized\",\n inputs: [\n { name: \"version\", type: \"uint8\", indexed: false, internalType: \"uint8\" },\n ],\n anonymous: false,\n },\n {\n type: \"event\",\n name: \"OperatorAVSRegistrationStatusUpdated\",\n inputs: [\n {\n name: \"operator\",\n type: \"address\",\n indexed: true,\n internalType: \"address\",\n },\n { name: \"avs\", type: \"address\", indexed: true, internalType: \"address\" },\n {\n name: \"status\",\n type: \"uint8\",\n indexed: false,\n internalType: \"enum IAVSDirectory.OperatorAVSRegistrationStatus\",\n },\n ],\n anonymous: false,\n },\n {\n type: \"event\",\n name: \"OwnershipTransferred\",\n inputs: [\n {\n name: \"previousOwner\",\n type: \"address\",\n indexed: true,\n internalType: \"address\",\n },\n {\n name: \"newOwner\",\n type: \"address\",\n indexed: true,\n internalType: \"address\",\n },\n ],\n anonymous: false,\n },\n {\n type: \"event\",\n name: \"Paused\",\n inputs: [\n {\n name: \"account\",\n type: \"address\",\n indexed: true,\n internalType: \"address\",\n },\n {\n name: \"newPausedStatus\",\n type: \"uint256\",\n indexed: false,\n internalType: \"uint256\",\n },\n ],\n anonymous: false,\n },\n {\n type: \"event\",\n name: \"PauserRegistrySet\",\n inputs: [\n {\n name: \"pauserRegistry\",\n type: \"address\",\n indexed: false,\n internalType: \"contract IPauserRegistry\",\n },\n {\n name: \"newPauserRegistry\",\n type: \"address\",\n indexed: false,\n internalType: \"contract IPauserRegistry\",\n },\n ],\n anonymous: false,\n },\n {\n type: \"event\",\n name: \"Unpaused\",\n inputs: [\n {\n name: \"account\",\n type: \"address\",\n indexed: true,\n internalType: \"address\",\n },\n {\n name: \"newPausedStatus\",\n type: \"uint256\",\n indexed: false,\n internalType: \"uint256\",\n },\n ],\n anonymous: false,\n },\n];\n", "export const delegationABI = [{\"type\":\"function\",\"name\":\"DELEGATION_APPROVAL_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"DOMAIN_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"STAKER_DELEGATION_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"beaconChainETHStrategy\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contract IStrategy\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"calculateCurrentStakerDelegationDigestHash\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"calculateDelegationApprovalDigestHash\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_delegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"approverSalt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"calculateStakerDelegationDigestHash\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_stakerNonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"calculateWithdrawalRoot\",\"inputs\":[{\"name\":\"withdrawal\",\"type\":\"tuple\",\"internalType\":\"struct IDelegationManager.Withdrawal\",\"components\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegatedTo\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"withdrawer\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"startBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contract IStrategy[]\"},{\"name\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"completeQueuedWithdrawal\",\"inputs\":[{\"name\":\"withdrawal\",\"type\":\"tuple\",\"internalType\":\"struct IDelegationManager.Withdrawal\",\"components\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegatedTo\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"withdrawer\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"startBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contract IStrategy[]\"},{\"name\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]},{\"name\":\"tokens\",\"type\":\"address[]\",\"internalType\":\"contract IERC20[]\"},{\"name\":\"middlewareTimesIndex\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"receiveAsTokens\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"completeQueuedWithdrawals\",\"inputs\":[{\"name\":\"withdrawals\",\"type\":\"tuple[]\",\"internalType\":\"struct IDelegationManager.Withdrawal[]\",\"components\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegatedTo\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"withdrawer\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"startBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contract IStrategy[]\"},{\"name\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]},{\"name\":\"tokens\",\"type\":\"address[][]\",\"internalType\":\"contract IERC20[][]\"},{\"name\":\"middlewareTimesIndexes\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"},{\"name\":\"receiveAsTokens\",\"type\":\"bool[]\",\"internalType\":\"bool[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"cumulativeWithdrawalsQueued\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"decreaseDelegatedShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contract IStrategy\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"delegateTo\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"approverSignatureAndExpiry\",\"type\":\"tuple\",\"internalType\":\"struct ISignatureUtils.SignatureWithExpiry\",\"components\":[{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"approverSalt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"delegateToBySignature\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerSignatureAndExpiry\",\"type\":\"tuple\",\"internalType\":\"struct ISignatureUtils.SignatureWithExpiry\",\"components\":[{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"approverSignatureAndExpiry\",\"type\":\"tuple\",\"internalType\":\"struct ISignatureUtils.SignatureWithExpiry\",\"components\":[{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"approverSalt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"delegatedTo\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"delegationApprover\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"delegationApproverSaltIsSpent\",\"inputs\":[{\"name\":\"_delegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"salt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"domainSeparator\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"earningsReceiver\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorShares\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contract IStrategy[]\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getWithdrawalDelay\",\"inputs\":[{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contract IStrategy[]\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"increaseDelegatedShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contract IStrategy\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"isDelegated\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isOperator\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"migrateQueuedWithdrawals\",\"inputs\":[{\"name\":\"withdrawalsToQueue\",\"type\":\"tuple[]\",\"internalType\":\"struct IStrategyManager.DeprecatedStruct_QueuedWithdrawal[]\",\"components\":[{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contract IStrategy[]\"},{\"name\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"},{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"withdrawerAndNonce\",\"type\":\"tuple\",\"internalType\":\"struct IStrategyManager.DeprecatedStruct_WithdrawerAndNonce\",\"components\":[{\"name\":\"withdrawer\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"nonce\",\"type\":\"uint96\",\"internalType\":\"uint96\"}]},{\"name\":\"withdrawalStartBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"delegatedAddress\",\"type\":\"address\",\"internalType\":\"address\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"minWithdrawalDelayBlocks\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"modifyOperatorDetails\",\"inputs\":[{\"name\":\"newOperatorDetails\",\"type\":\"tuple\",\"internalType\":\"struct IDelegationManager.OperatorDetails\",\"components\":[{\"name\":\"earningsReceiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerOptOutWindowBlocks\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"operatorDetails\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"struct IDelegationManager.OperatorDetails\",\"components\":[{\"name\":\"earningsReceiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerOptOutWindowBlocks\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorShares\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contract IStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"queueWithdrawals\",\"inputs\":[{\"name\":\"queuedWithdrawalParams\",\"type\":\"tuple[]\",\"internalType\":\"struct IDelegationManager.QueuedWithdrawalParams[]\",\"components\":[{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contract IStrategy[]\"},{\"name\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"},{\"name\":\"withdrawer\",\"type\":\"address\",\"internalType\":\"address\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"registerAsOperator\",\"inputs\":[{\"name\":\"registeringOperatorDetails\",\"type\":\"tuple\",\"internalType\":\"struct IDelegationManager.OperatorDetails\",\"components\":[{\"name\":\"earningsReceiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerOptOutWindowBlocks\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"metadataURI\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"stakerNonce\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"stakerOptOutWindowBlocks\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"strategyWithdrawalDelayBlocks\",\"inputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contract IStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"undelegate\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"withdrawalRoot\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateOperatorMetadataURI\",\"inputs\":[{\"name\":\"metadataURI\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"MinWithdrawalDelayBlocksSet\",\"inputs\":[{\"name\":\"previousValue\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"newValue\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorDetailsModified\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOperatorDetails\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"struct IDelegationManager.OperatorDetails\",\"components\":[{\"name\":\"earningsReceiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerOptOutWindowBlocks\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorMetadataURIUpdated\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"metadataURI\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorRegistered\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operatorDetails\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"struct IDelegationManager.OperatorDetails\",\"components\":[{\"name\":\"earningsReceiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerOptOutWindowBlocks\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorSharesDecreased\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"staker\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contract IStrategy\"},{\"name\":\"shares\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorSharesIncreased\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"staker\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contract IStrategy\"},{\"name\":\"shares\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"StakerDelegated\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"StakerForceUndelegated\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"StakerUndelegated\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"StrategyWithdrawalDelayBlocksSet\",\"inputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contract IStrategy\"},{\"name\":\"previousValue\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"newValue\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawalCompleted\",\"inputs\":[{\"name\":\"withdrawalRoot\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawalMigrated\",\"inputs\":[{\"name\":\"oldWithdrawalRoot\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"},{\"name\":\"newWithdrawalRoot\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawalQueued\",\"inputs\":[{\"name\":\"withdrawalRoot\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"},{\"name\":\"withdrawal\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"struct IDelegationManager.Withdrawal\",\"components\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegatedTo\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"withdrawer\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"startBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contract IStrategy[]\"},{\"name\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]}],\"anonymous\":false}]", "export const registryABI = [\n\t{\n\t\t\"type\": \"constructor\",\n\t\t\"inputs\": [\n\t\t\t{\n\t\t\t\t\"name\": \"_delegationManager\",\n\t\t\t\t\"type\": \"address\",\n\t\t\t\t\"internalType\": \"contract IDelegationManager\"\n\t\t\t}\n\t\t],\n\t\t\"stateMutability\": \"nonpayable\"\n\t},\n\t{\n\t\t\"type\": \"function\",\n\t\t\"name\": \"deregisterOperator\",\n\t\t\"inputs\": [],\n\t\t\"outputs\": [],\n\t\t\"stateMutability\": \"nonpayable\"\n\t},\n\t{\n\t\t\"type\": \"function\",\n\t\t\"name\": \"getLastCheckpointOperatorWeight\",\n\t\t\"inputs\": [\n\t\t\t{\n\t\t\t\t\"name\": \"_operator\",\n\t\t\t\t\"type\": \"address\",\n\t\t\t\t\"internalType\": \"address\"\n\t\t\t}\n\t\t],\n\t\t\"outputs\": [\n\t\t\t{\n\t\t\t\t\"name\": \"\",\n\t\t\t\t\"type\": \"uint256\",\n\t\t\t\t\"internalType\": \"uint256\"\n\t\t\t}\n\t\t],\n\t\t\"stateMutability\": \"view\"\n\t},\n\t{\n\t\t\"type\": \"function\",\n\t\t\"name\": \"getLastCheckpointThresholdWeight\",\n\t\t\"inputs\": [],\n\t\t\"outputs\": [\n\t\t\t{\n\t\t\t\t\"name\": \"\",\n\t\t\t\t\"type\": \"uint256\",\n\t\t\t\t\"internalType\": \"uint256\"\n\t\t\t}\n\t\t],\n\t\t\"stateMutability\": \"view\"\n\t},\n\t{\n\t\t\"type\": \"function\",\n\t\t\"name\": \"getLastCheckpointThresholdWeightAtBlock\",\n\t\t\"inputs\": [\n\t\t\t{\n\t\t\t\t\"name\": \"_blockNumber\",\n\t\t\t\t\"type\": \"uint32\",\n\t\t\t\t\"internalType\": \"uint32\"\n\t\t\t}\n\t\t],\n\t\t\"outputs\": [\n\t\t\t{\n\t\t\t\t\"name\": \"\",\n\t\t\t\t\"type\": \"uint256\",\n\t\t\t\t\"internalType\": \"uint256\"\n\t\t\t}\n\t\t],\n\t\t\"stateMutability\": \"view\"\n\t},\n\t{\n\t\t\"type\": \"function\",\n\t\t\"name\": \"getLastCheckpointTotalWeight\",\n\t\t\"inputs\": [],\n\t\t\"outputs\": [\n\t\t\t{\n\t\t\t\t\"name\": \"\",\n\t\t\t\t\"type\": \"uint256\",\n\t\t\t\t\"internalType\": \"uint256\"\n\t\t\t}\n\t\t],\n\t\t\"stateMutability\": \"view\"\n\t},\n\t{\n\t\t\"type\": \"function\",\n\t\t\"name\": \"getLastCheckpointTotalWeightAtBlock\",\n\t\t\"inputs\": [\n\t\t\t{\n\t\t\t\t\"name\": \"_blockNumber\",\n\t\t\t\t\"type\": \"uint32\",\n\t\t\t\t\"internalType\": \"uint32\"\n\t\t\t}\n\t\t],\n\t\t\"outputs\": [\n\t\t\t{\n\t\t\t\t\"name\": \"\",\n\t\t\t\t\"type\": \"uint256\",\n\t\t\t\t\"internalType\": \"uint256\"\n\t\t\t}\n\t\t],\n\t\t\"stateMutability\": \"view\"\n\t},\n\t{\n\t\t\"type\": \"function\",\n\t\t\"name\": \"getOperatorWeight\",\n\t\t\"inputs\": [\n\t\t\t{\n\t\t\t\t\"name\": \"_operator\",\n\t\t\t\t\"type\": \"address\",\n\t\t\t\t\"internalType\": \"address\"\n\t\t\t}\n\t\t],\n\t\t\"outputs\": [\n\t\t\t{\n\t\t\t\t\"name\": \"\",\n\t\t\t\t\"type\": \"uint256\",\n\t\t\t\t\"internalType\": \"uint256\"\n\t\t\t}\n\t\t],\n\t\t\"stateMutability\": \"view\"\n\t},\n\t{\n\t\t\"type\": \"function\",\n\t\t\"name\": \"getOperatorWeightAtBlock\",\n\t\t\"inputs\": [\n\t\t\t{\n\t\t\t\t\"name\": \"_operator\",\n\t\t\t\t\"type\": \"address\",\n\t\t\t\t\"internalType\": \"address\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"_blockNumber\",\n\t\t\t\t\"type\": \"uint32\",\n\t\t\t\t\"internalType\": \"uint32\"\n\t\t\t}\n\t\t],\n\t\t\"outputs\": [\n\t\t\t{\n\t\t\t\t\"name\": \"\",\n\t\t\t\t\"type\": \"uint256\",\n\t\t\t\t\"internalType\": \"uint256\"\n\t\t\t}\n\t\t],\n\t\t\"stateMutability\": \"view\"\n\t},\n\t{\n\t\t\"type\": \"function\",\n\t\t\"name\": \"initialize\",\n\t\t\"inputs\": [\n\t\t\t{\n\t\t\t\t\"name\": \"_serviceManager\",\n\t\t\t\t\"type\": \"address\",\n\t\t\t\t\"internalType\": \"address\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"_thresholdWeight\",\n\t\t\t\t\"type\": \"uint256\",\n\t\t\t\t\"internalType\": \"uint256\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"_quorum\",\n\t\t\t\t\"type\": \"tuple\",\n\t\t\t\t\"internalType\": \"struct Quorum\",\n\t\t\t\t\"components\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"name\": \"strategies\",\n\t\t\t\t\t\t\"type\": \"tuple[]\",\n\t\t\t\t\t\t\"internalType\": \"struct StrategyParams[]\",\n\t\t\t\t\t\t\"components\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"name\": \"strategy\",\n\t\t\t\t\t\t\t\t\"type\": \"address\",\n\t\t\t\t\t\t\t\t\"internalType\": \"contract IStrategy\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"name\": \"multiplier\",\n\t\t\t\t\t\t\t\t\"type\": \"uint96\",\n\t\t\t\t\t\t\t\t\"internalType\": \"uint96\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t}\n\t\t],\n\t\t\"outputs\": [],\n\t\t\"stateMutability\": \"nonpayable\"\n\t},\n\t{\n\t\t\"type\": \"function\",\n\t\t\"name\": \"isValidSignature\",\n\t\t\"inputs\": [\n\t\t\t{\n\t\t\t\t\"name\": \"_dataHash\",\n\t\t\t\t\"type\": \"bytes32\",\n\t\t\t\t\"internalType\": \"bytes32\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"_signatureData\",\n\t\t\t\t\"type\": \"bytes\",\n\t\t\t\t\"internalType\": \"bytes\"\n\t\t\t}\n\t\t],\n\t\t\"outputs\": [\n\t\t\t{\n\t\t\t\t\"name\": \"\",\n\t\t\t\t\"type\": \"bytes4\",\n\t\t\t\t\"internalType\": \"bytes4\"\n\t\t\t}\n\t\t],\n\t\t\"stateMutability\": \"view\"\n\t},\n\t{\n\t\t\"type\": \"function\",\n\t\t\"name\": \"minimumWeight\",\n\t\t\"inputs\": [],\n\t\t\"outputs\": [\n\t\t\t{\n\t\t\t\t\"name\": \"\",\n\t\t\t\t\"type\": \"uint256\",\n\t\t\t\t\"internalType\": \"uint256\"\n\t\t\t}\n\t\t],\n\t\t\"stateMutability\": \"view\"\n\t},\n\t{\n\t\t\"type\": \"function\",\n\t\t\"name\": \"operatorRegistered\",\n\t\t\"inputs\": [\n\t\t\t{\n\t\t\t\t\"name\": \"_operator\",\n\t\t\t\t\"type\": \"address\",\n\t\t\t\t\"internalType\": \"address\"\n\t\t\t}\n\t\t],\n\t\t\"outputs\": [\n\t\t\t{\n\t\t\t\t\"name\": \"\",\n\t\t\t\t\"type\": \"bool\",\n\t\t\t\t\"internalType\": \"bool\"\n\t\t\t}\n\t\t],\n\t\t\"stateMutability\": \"view\"\n\t},\n\t{\n\t\t\"type\": \"function\",\n\t\t\"name\": \"owner\",\n\t\t\"inputs\": [],\n\t\t\"outputs\": [\n\t\t\t{\n\t\t\t\t\"name\": \"\",\n\t\t\t\t\"type\": \"address\",\n\t\t\t\t\"internalType\": \"address\"\n\t\t\t}\n\t\t],\n\t\t\"stateMutability\": \"view\"\n\t},\n\t{\n\t\t\"type\": \"function\",\n\t\t\"name\": \"quorum\",\n\t\t\"inputs\": [],\n\t\t\"outputs\": [\n\t\t\t{\n\t\t\t\t\"name\": \"\",\n\t\t\t\t\"type\": \"tuple\",\n\t\t\t\t\"internalType\": \"struct Quorum\",\n\t\t\t\t\"components\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"name\": \"strategies\",\n\t\t\t\t\t\t\"type\": \"tuple[]\",\n\t\t\t\t\t\t\"internalType\": \"struct StrategyParams[]\",\n\t\t\t\t\t\t\"components\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"name\": \"strategy\",\n\t\t\t\t\t\t\t\t\"type\": \"address\",\n\t\t\t\t\t\t\t\t\"internalType\": \"contract IStrategy\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"name\": \"multiplier\",\n\t\t\t\t\t\t\t\t\"type\": \"uint96\",\n\t\t\t\t\t\t\t\t\"internalType\": \"uint96\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t}\n\t\t],\n\t\t\"stateMutability\": \"view\"\n\t},\n\t{\n\t\t\"type\": \"function\",\n\t\t\"name\": \"registerOperatorWithSignature\",\n\t\t\"inputs\": [\n\t\t\t{\n\t\t\t\t\"name\": \"_operator\",\n\t\t\t\t\"type\": \"address\",\n\t\t\t\t\"internalType\": \"address\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"_operatorSignature\",\n\t\t\t\t\"type\": \"tuple\",\n\t\t\t\t\"internalType\": \"struct ISignatureUtils.SignatureWithSaltAndExpiry\",\n\t\t\t\t\"components\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"name\": \"signature\",\n\t\t\t\t\t\t\"type\": \"bytes\",\n\t\t\t\t\t\t\"internalType\": \"bytes\"\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t\"name\": \"salt\",\n\t\t\t\t\t\t\"type\": \"bytes32\",\n\t\t\t\t\t\t\"internalType\": \"bytes32\"\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t\"name\": \"expiry\",\n\t\t\t\t\t\t\"type\": \"uint256\",\n\t\t\t\t\t\t\"internalType\": \"uint256\"\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t}\n\t\t],\n\t\t\"outputs\": [],\n\t\t\"stateMutability\": \"nonpayable\"\n\t},\n\t{\n\t\t\"type\": \"function\",\n\t\t\"name\": \"renounceOwnership\",\n\t\t\"inputs\": [],\n\t\t\"outputs\": [],\n\t\t\"stateMutability\": \"nonpayable\"\n\t},\n\t{\n\t\t\"type\": \"function\",\n\t\t\"name\": \"transferOwnership\",\n\t\t\"inputs\": [\n\t\t\t{\n\t\t\t\t\"name\": \"newOwner\",\n\t\t\t\t\"type\": \"address\",\n\t\t\t\t\"internalType\": \"address\"\n\t\t\t}\n\t\t],\n\t\t\"outputs\": [],\n\t\t\"stateMutability\": \"nonpayable\"\n\t},\n\t{\n\t\t\"type\": \"function\",\n\t\t\"name\": \"updateMinimumWeight\",\n\t\t\"inputs\": [\n\t\t\t{\n\t\t\t\t\"name\": \"_newMinimumWeight\",\n\t\t\t\t\"type\": \"uint256\",\n\t\t\t\t\"internalType\": \"uint256\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"_operators\",\n\t\t\t\t\"type\": \"address[]\",\n\t\t\t\t\"internalType\": \"address[]\"\n\t\t\t}\n\t\t],\n\t\t\"outputs\": [],\n\t\t\"stateMutability\": \"nonpayable\"\n\t},\n\t{\n\t\t\"type\": \"function\",\n\t\t\"name\": \"updateOperators\",\n\t\t\"inputs\": [\n\t\t\t{\n\t\t\t\t\"name\": \"_operators\",\n\t\t\t\t\"type\": \"address[]\",\n\t\t\t\t\"internalType\": \"address[]\"\n\t\t\t}\n\t\t],\n\t\t\"outputs\": [],\n\t\t\"stateMutability\": \"nonpayable\"\n\t},\n\t{\n\t\t\"type\": \"function\",\n\t\t\"name\": \"updateOperatorsForQuorum\",\n\t\t\"inputs\": [\n\t\t\t{\n\t\t\t\t\"name\": \"operatorsPerQuorum\",\n\t\t\t\t\"type\": \"address[][]\",\n\t\t\t\t\"internalType\": \"address[][]\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"\",\n\t\t\t\t\"type\": \"bytes\",\n\t\t\t\t\"internalType\": \"bytes\"\n\t\t\t}\n\t\t],\n\t\t\"outputs\": [],\n\t\t\"stateMutability\": \"nonpayable\"\n\t},\n\t{\n\t\t\"type\": \"function\",\n\t\t\"name\": \"updateQuorumConfig\",\n\t\t\"inputs\": [\n\t\t\t{\n\t\t\t\t\"name\": \"_quorum\",\n\t\t\t\t\"type\": \"tuple\",\n\t\t\t\t\"internalType\": \"struct Quorum\",\n\t\t\t\t\"components\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"name\": \"strategies\",\n\t\t\t\t\t\t\"type\": \"tuple[]\",\n\t\t\t\t\t\t\"internalType\": \"struct StrategyParams[]\",\n\t\t\t\t\t\t\"components\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"name\": \"strategy\",\n\t\t\t\t\t\t\t\t\"type\": \"address\",\n\t\t\t\t\t\t\t\t\"internalType\": \"contract IStrategy\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"name\": \"multiplier\",\n\t\t\t\t\t\t\t\t\"type\": \"uint96\",\n\t\t\t\t\t\t\t\t\"internalType\": \"uint96\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"_operators\",\n\t\t\t\t\"type\": \"address[]\",\n\t\t\t\t\"internalType\": \"address[]\"\n\t\t\t}\n\t\t],\n\t\t\"outputs\": [],\n\t\t\"stateMutability\": \"nonpayable\"\n\t},\n\t{\n\t\t\"type\": \"function\",\n\t\t\"name\": \"updateStakeThreshold\",\n\t\t\"inputs\": [\n\t\t\t{\n\t\t\t\t\"name\": \"_thresholdWeight\",\n\t\t\t\t\"type\": \"uint256\",\n\t\t\t\t\"internalType\": \"uint256\"\n\t\t\t}\n\t\t],\n\t\t\"outputs\": [],\n\t\t\"stateMutability\": \"nonpayable\"\n\t},\n\t{\n\t\t\"type\": \"event\",\n\t\t\"name\": \"Initialized\",\n\t\t\"inputs\": [\n\t\t\t{\n\t\t\t\t\"name\": \"version\",\n\t\t\t\t\"type\": \"uint8\",\n\t\t\t\t\"indexed\": false,\n\t\t\t\t\"internalType\": \"uint8\"\n\t\t\t}\n\t\t],\n\t\t\"anonymous\": false\n\t},\n\t{\n\t\t\"type\": \"event\",\n\t\t\"name\": \"MinimumWeightUpdated\",\n\t\t\"inputs\": [\n\t\t\t{\n\t\t\t\t\"name\": \"_old\",\n\t\t\t\t\"type\": \"uint256\",\n\t\t\t\t\"indexed\": false,\n\t\t\t\t\"internalType\": \"uint256\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"_new\",\n\t\t\t\t\"type\": \"uint256\",\n\t\t\t\t\"indexed\": false,\n\t\t\t\t\"internalType\": \"uint256\"\n\t\t\t}\n\t\t],\n\t\t\"anonymous\": false\n\t},\n\t{\n\t\t\"type\": \"event\",\n\t\t\"name\": \"OperatorDeregistered\",\n\t\t\"inputs\": [\n\t\t\t{\n\t\t\t\t\"name\": \"_operator\",\n\t\t\t\t\"type\": \"address\",\n\t\t\t\t\"indexed\": true,\n\t\t\t\t\"internalType\": \"address\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"_avs\",\n\t\t\t\t\"type\": \"address\",\n\t\t\t\t\"indexed\": true,\n\t\t\t\t\"internalType\": \"address\"\n\t\t\t}\n\t\t],\n\t\t\"anonymous\": false\n\t},\n\t{\n\t\t\"type\": \"event\",\n\t\t\"name\": \"OperatorRegistered\",\n\t\t\"inputs\": [\n\t\t\t{\n\t\t\t\t\"name\": \"_operator\",\n\t\t\t\t\"type\": \"address\",\n\t\t\t\t\"indexed\": true,\n\t\t\t\t\"internalType\": \"address\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"_avs\",\n\t\t\t\t\"type\": \"address\",\n\t\t\t\t\"indexed\": true,\n\t\t\t\t\"internalType\": \"address\"\n\t\t\t}\n\t\t],\n\t\t\"anonymous\": false\n\t},\n\t{\n\t\t\"type\": \"event\",\n\t\t\"name\": \"OperatorWeightUpdated\",\n\t\t\"inputs\": [\n\t\t\t{\n\t\t\t\t\"name\": \"_operator\",\n\t\t\t\t\"type\": \"address\",\n\t\t\t\t\"indexed\": true,\n\t\t\t\t\"internalType\": \"address\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"oldWeight\",\n\t\t\t\t\"type\": \"uint256\",\n\t\t\t\t\"indexed\": false,\n\t\t\t\t\"internalType\": \"uint256\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"newWeight\",\n\t\t\t\t\"type\": \"uint256\",\n\t\t\t\t\"indexed\": false,\n\t\t\t\t\"internalType\": \"uint256\"\n\t\t\t}\n\t\t],\n\t\t\"anonymous\": false\n\t},\n\t{\n\t\t\"type\": \"event\",\n\t\t\"name\": \"OwnershipTransferred\",\n\t\t\"inputs\": [\n\t\t\t{\n\t\t\t\t\"name\": \"previousOwner\",\n\t\t\t\t\"type\": \"address\",\n\t\t\t\t\"indexed\": true,\n\t\t\t\t\"internalType\": \"address\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"newOwner\",\n\t\t\t\t\"type\": \"address\",\n\t\t\t\t\"indexed\": true,\n\t\t\t\t\"internalType\": \"address\"\n\t\t\t}\n\t\t],\n\t\t\"anonymous\": false\n\t},\n\t{\n\t\t\"type\": \"event\",\n\t\t\"name\": \"QuorumUpdated\",\n\t\t\"inputs\": [\n\t\t\t{\n\t\t\t\t\"name\": \"_old\",\n\t\t\t\t\"type\": \"tuple\",\n\t\t\t\t\"indexed\": false,\n\t\t\t\t\"internalType\": \"struct Quorum\",\n\t\t\t\t\"components\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"name\": \"strategies\",\n\t\t\t\t\t\t\"type\": \"tuple[]\",\n\t\t\t\t\t\t\"internalType\": \"struct StrategyParams[]\",\n\t\t\t\t\t\t\"components\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"name\": \"strategy\",\n\t\t\t\t\t\t\t\t\"type\": \"address\",\n\t\t\t\t\t\t\t\t\"internalType\": \"contract IStrategy\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"name\": \"multiplier\",\n\t\t\t\t\t\t\t\t\"type\": \"uint96\",\n\t\t\t\t\t\t\t\t\"internalType\": \"uint96\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"_new\",\n\t\t\t\t\"type\": \"tuple\",\n\t\t\t\t\"indexed\": false,\n\t\t\t\t\"internalType\": \"struct Quorum\",\n\t\t\t\t\"components\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"name\": \"strategies\",\n\t\t\t\t\t\t\"type\": \"tuple[]\",\n\t\t\t\t\t\t\"internalType\": \"struct StrategyParams[]\",\n\t\t\t\t\t\t\"components\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"name\": \"strategy\",\n\t\t\t\t\t\t\t\t\"type\": \"address\",\n\t\t\t\t\t\t\t\t\"internalType\": \"contract IStrategy\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"name\": \"multiplier\",\n\t\t\t\t\t\t\t\t\"type\": \"uint96\",\n\t\t\t\t\t\t\t\t\"internalType\": \"uint96\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t}\n\t\t],\n\t\t\"anonymous\": false\n\t},\n\t{\n\t\t\"type\": \"event\",\n\t\t\"name\": \"ThresholdWeightUpdated\",\n\t\t\"inputs\": [\n\t\t\t{\n\t\t\t\t\"name\": \"_thresholdWeight\",\n\t\t\t\t\"type\": \"uint256\",\n\t\t\t\t\"indexed\": false,\n\t\t\t\t\"internalType\": \"uint256\"\n\t\t\t}\n\t\t],\n\t\t\"anonymous\": false\n\t},\n\t{\n\t\t\"type\": \"event\",\n\t\t\"name\": \"TotalWeightUpdated\",\n\t\t\"inputs\": [\n\t\t\t{\n\t\t\t\t\"name\": \"oldTotalWeight\",\n\t\t\t\t\"type\": \"uint256\",\n\t\t\t\t\"indexed\": false,\n\t\t\t\t\"internalType\": \"uint256\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"newTotalWeight\",\n\t\t\t\t\"type\": \"uint256\",\n\t\t\t\t\"indexed\": false,\n\t\t\t\t\"internalType\": \"uint256\"\n\t\t\t}\n\t\t],\n\t\t\"anonymous\": false\n\t},\n\t{\n\t\t\"type\": \"event\",\n\t\t\"name\": \"UpdateMinimumWeight\",\n\t\t\"inputs\": [\n\t\t\t{\n\t\t\t\t\"name\": \"oldMinimumWeight\",\n\t\t\t\t\"type\": \"uint256\",\n\t\t\t\t\"indexed\": false,\n\t\t\t\t\"internalType\": \"uint256\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"newMinimumWeight\",\n\t\t\t\t\"type\": \"uint256\",\n\t\t\t\t\"indexed\": false,\n\t\t\t\t\"internalType\": \"uint256\"\n\t\t\t}\n\t\t],\n\t\t\"anonymous\": false\n\t},\n\t{\n\t\t\"type\": \"error\",\n\t\t\"name\": \"InsufficientSignedStake\",\n\t\t\"inputs\": []\n\t},\n\t{\n\t\t\"type\": \"error\",\n\t\t\"name\": \"InsufficientWeight\",\n\t\t\"inputs\": []\n\t},\n\t{\n\t\t\"type\": \"error\",\n\t\t\"name\": \"InvalidLength\",\n\t\t\"inputs\": []\n\t},\n\t{\n\t\t\"type\": \"error\",\n\t\t\"name\": \"InvalidQuorum\",\n\t\t\"inputs\": []\n\t},\n\t{\n\t\t\"type\": \"error\",\n\t\t\"name\": \"InvalidSignature\",\n\t\t\"inputs\": []\n\t},\n\t{\n\t\t\"type\": \"error\",\n\t\t\"name\": \"InvalidSignedWeight\",\n\t\t\"inputs\": []\n\t},\n\t{\n\t\t\"type\": \"error\",\n\t\t\"name\": \"InvalidThreshold\",\n\t\t\"inputs\": []\n\t},\n\t{\n\t\t\"type\": \"error\",\n\t\t\"name\": \"LengthMismatch\",\n\t\t\"inputs\": []\n\t},\n\t{\n\t\t\"type\": \"error\",\n\t\t\"name\": \"MustUpdateAllOperators\",\n\t\t\"inputs\": []\n\t},\n\t{\n\t\t\"type\": \"error\",\n\t\t\"name\": \"NotSorted\",\n\t\t\"inputs\": []\n\t},\n\t{\n\t\t\"type\": \"error\",\n\t\t\"name\": \"OperatorAlreadyRegistered\",\n\t\t\"inputs\": []\n\t},\n\t{\n\t\t\"type\": \"error\",\n\t\t\"name\": \"OperatorNotRegistered\",\n\t\t\"inputs\": []\n\t}\n];", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n Contract,\n ContractFactory,\n ContractTransactionResponse,\n Interface,\n} from \"ethers\";\nimport type {\n Signer,\n AddressLike,\n ContractDeployTransaction,\n ContractRunner,\n} from \"ethers\";\nimport type { NonPayableOverrides } from \"../common.ts\";\nimport type {\n ReclaimServiceManager,\n ReclaimServiceManagerInterface,\n} from \"../ReclaimServiceManager.ts\";\n\nconst _abi = [\n {\n type: \"constructor\",\n inputs: [\n {\n name: \"_avsDirectory\",\n type: \"address\",\n internalType: \"address\",\n },\n {\n name: \"_stakeRegistry\",\n type: \"address\",\n internalType: \"address\",\n },\n {\n name: \"_delegationManager\",\n type: \"address\",\n internalType: \"address\",\n },\n ],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"admins\",\n inputs: [\n {\n name: \"\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"address\",\n internalType: \"address\",\n },\n ],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"allTaskHashes\",\n inputs: [\n {\n name: \"\",\n type: \"uint32\",\n internalType: \"uint32\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"bytes32\",\n internalType: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"avsDirectory\",\n inputs: [],\n outputs: [\n {\n name: \"\",\n type: \"address\",\n internalType: \"address\",\n },\n ],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"checkSignerAddress\",\n inputs: [\n {\n name: \"request\",\n type: \"tuple\",\n internalType: \"struct IReclaimServiceManager.ClaimRequest\",\n components: [\n {\n name: \"provider\",\n type: \"string\",\n internalType: \"string\",\n },\n {\n name: \"claimUserId\",\n type: \"bytes32\",\n internalType: \"bytes32\",\n },\n {\n name: \"claimHash\",\n type: \"bytes32\",\n internalType: \"bytes32\",\n },\n {\n name: \"requestedAt\",\n type: \"uint32\",\n internalType: \"uint32\",\n },\n {\n name: \"owner\",\n type: \"address\",\n internalType: \"address\",\n },\n ],\n },\n {\n name: \"requestSignature\",\n type: \"bytes\",\n internalType: \"bytes\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"address\",\n internalType: \"address\",\n },\n ],\n stateMutability: \"pure\",\n },\n {\n type: \"function\",\n name: \"createNewTask\",\n inputs: [\n {\n name: \"request\",\n type: \"tuple\",\n internalType: \"struct IReclaimServiceManager.ClaimRequest\",\n components: [\n {\n name: \"provider\",\n type: \"string\",\n internalType: \"string\",\n },\n {\n name: \"claimUserId\",\n type: \"bytes32\",\n internalType: \"bytes32\",\n },\n {\n name: \"claimHash\",\n type: \"bytes32\",\n internalType: \"bytes32\",\n },\n {\n name: \"requestedAt\",\n type: \"uint32\",\n internalType: \"uint32\",\n },\n {\n name: \"owner\",\n type: \"address\",\n internalType: \"address\",\n },\n ],\n },\n {\n name: \"requestSignature\",\n type: \"bytes\",\n internalType: \"bytes\",\n },\n ],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"deregisterOperatorFromAVS\",\n inputs: [\n {\n name: \"operator\",\n type: \"address\",\n internalType: \"address\",\n },\n ],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"encodeClaimRequest\",\n inputs: [\n {\n name: \"request\",\n type: \"tuple\",\n internalType: \"struct IReclaimServiceManager.ClaimRequest\",\n components: [\n {\n name: \"provider\",\n type: \"string\",\n internalType: \"string\",\n },\n {\n name: \"claimUserId\",\n type: \"bytes32\",\n internalType: \"bytes32\",\n },\n {\n name: \"claimHash\",\n type: \"bytes32\",\n internalType: \"bytes32\",\n },\n {\n name: \"requestedAt\",\n type: \"uint32\",\n internalType: \"uint32\",\n },\n {\n name: \"owner\",\n type: \"address\",\n internalType: \"address\",\n },\n ],\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"bytes\",\n internalType: \"bytes\",\n },\n ],\n stateMutability: \"pure\",\n },\n {\n type: \"function\",\n name: \"getMetadataForOperator\",\n inputs: [\n {\n name: \"operator\",\n type: \"address\",\n internalType: \"address\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"tuple\",\n internalType: \"struct IReclaimServiceManager.OperatorMetadata\",\n components: [\n {\n name: \"addr\",\n type: \"address\",\n internalType: \"address\",\n },\n {\n name: \"url\",\n type: \"string\",\n internalType: \"string\",\n },\n ],\n },\n ],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"getOperatorRestakedStrategies\",\n inputs: [\n {\n name: \"_operator\",\n type: \"address\",\n internalType: \"address\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"address[]\",\n internalType: \"address[]\",\n },\n ],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"getRestakeableStrategies\",\n inputs: [],\n outputs: [\n {\n name: \"\",\n type: \"address[]\",\n internalType: \"address[]\",\n },\n ],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"isAdmin\",\n inputs: [\n {\n name: \"_admin\",\n type: \"address\",\n internalType: \"address\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"bool\",\n internalType: \"bool\",\n },\n ],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"isOperatorWhitelisted\",\n inputs: [\n {\n name: \"operator\",\n type: \"address\",\n internalType: \"address\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"bool\",\n internalType: \"bool\",\n },\n ],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"latestTaskNum\",\n inputs: [],\n outputs: [\n {\n name: \"\",\n type: \"uint32\",\n internalType: \"uint32\",\n },\n ],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"operatorHasMinimumWeight\",\n inputs: [\n {\n name: \"operator\",\n type: \"address\",\n internalType: \"address\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"bool\",\n internalType: \"bool\",\n },\n ],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"owner\",\n inputs: [],\n outputs: [\n {\n name: \"\",\n type: \"address\",\n internalType: \"address\",\n },\n ],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"pause\",\n inputs: [\n {\n name: \"newPausedStatus\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n ],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"pauseAll\",\n inputs: [],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"paused\",\n inputs: [\n {\n name: \"index\",\n type: \"uint8\",\n internalType: \"uint8\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"bool\",\n internalType: \"bool\",\n },\n ],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"paused\",\n inputs: [],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"pauserRegistry\",\n inputs: [],\n outputs: [\n {\n name: \"\",\n type: \"address\",\n internalType: \"contract IPauserRegistry\",\n },\n ],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"payForRange\",\n inputs: [\n {\n name: \"rangePayments\",\n type: \"tuple[]\",\n internalType: \"struct IPaymentCoordinator.RangePayment[]\",\n components: [\n {\n name: \"strategiesAndMultipliers\",\n type: \"tuple[]\",\n internalType: \"struct IPaymentCoordinator.StrategyAndMultiplier[]\",\n components: [\n {\n name: \"strategy\",\n type: \"address\",\n internalType: \"contract IStrategy\",\n },\n {\n name: \"multiplier\",\n type: \"uint96\",\n internalType: \"uint96\",\n },\n ],\n },\n {\n name: \"token\",\n type: \"address\",\n internalType: \"contract IERC20\",\n },\n {\n name: \"amount\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n {\n name: \"startTimestamp\",\n type: \"uint32\",\n internalType: \"uint32\",\n },\n {\n name: \"duration\",\n type: \"uint32\",\n internalType: \"uint32\",\n },\n ],\n },\n ],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"registerOperatorToAVS\",\n inputs: [\n {\n name: \"operator\",\n type: \"address\",\n internalType: \"address\",\n },\n {\n name: \"operatorSignature\",\n type: \"tuple\",\n internalType: \"struct ISignatureUtils.SignatureWithSaltAndExpiry\",\n components: [\n {\n name: \"signature\",\n type: \"bytes\",\n internalType: \"bytes\",\n },\n {\n name: \"salt\",\n type: \"bytes32\",\n internalType: \"bytes32\",\n },\n {\n name: \"expiry\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n ],\n },\n ],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"registeredOperators\",\n inputs: [\n {\n name: \"\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n ],\n outputs: [\n {\n name: \"addr\",\n type: \"address\",\n internalType: \"address\",\n },\n {\n name: \"url\",\n type: \"string\",\n internalType: \"string\",\n },\n ],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"renounceOwnership\",\n inputs: [],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"setPauserRegistry\",\n inputs: [\n {\n name: \"newPauserRegistry\",\n type: \"address\",\n internalType: \"contract IPauserRegistry\",\n },\n ],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"setup\",\n inputs: [\n {\n name: \"initialAdmin\",\n type: \"address\",\n internalType: \"address\",\n },\n ],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"stakeRegistry\",\n inputs: [],\n outputs: [\n {\n name: \"\",\n type: \"address\",\n internalType: \"address\",\n },\n ],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"taskCompleted\",\n inputs: [\n {\n name: \"completedTask\",\n type: \"tuple\",\n internalType: \"struct IReclaimServiceManager.CompletedTask\",\n components: [\n {\n name: \"task\",\n type: \"tuple\",\n internalType: \"struct IReclaimServiceManager.Task\",\n components: [\n {\n name: \"request\",\n type: \"tuple\",\n internalType: \"struct IReclaimServiceManager.ClaimRequest\",\n components: [\n {\n name: \"provider\",\n type: \"string\",\n internalType: \"string\",\n },\n {\n name: \"claimUserId\",\n type: \"bytes32\",\n internalType: \"bytes32\",\n },\n {\n name: \"claimHash\",\n type: \"bytes32\",\n internalType: \"bytes32\",\n },\n {\n name: \"requestedAt\",\n type: \"uint32\",\n internalType: \"uint32\",\n },\n {\n name: \"owner\",\n type: \"address\",\n internalType: \"address\",\n },\n ],\n },\n {\n name: \"createdAt\",\n type: \"uint32\",\n internalType: \"uint32\",\n },\n {\n name: \"expiresAt\",\n type: \"uint32\",\n internalType: \"uint32\",\n },\n {\n name: \"minimumSignatures\",\n type: \"uint8\",\n internalType: \"uint8\",\n },\n {\n name: \"operators\",\n type: \"tuple[]\",\n internalType: \"struct IReclaimServiceManager.Operator[]\",\n components: [\n {\n name: \"addr\",\n type: \"address\",\n internalType: \"address\",\n },\n {\n name: \"url\",\n type: \"string\",\n internalType: \"string\",\n },\n ],\n },\n {\n name: \"feePaid\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n ],\n },\n {\n name: \"signatures\",\n type: \"bytes[]\",\n internalType: \"bytes[]\",\n },\n ],\n },\n {\n name: \"referenceTaskIndex\",\n type: \"uint32\",\n internalType: \"uint32\",\n },\n ],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"taskCreationMetadata\",\n inputs: [],\n outputs: [\n {\n name: \"maxTaskLifetimeS\",\n type: \"uint32\",\n internalType: \"uint32\",\n },\n {\n name: \"minSignaturesPerTask\",\n type: \"uint8\",\n internalType: \"uint8\",\n },\n {\n name: \"maxTaskCreationDelayS\",\n type: \"uint32\",\n internalType: \"uint32\",\n },\n ],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"transferOwnership\",\n inputs: [\n {\n name: \"newOwner\",\n type: \"address\",\n internalType: \"address\",\n },\n ],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"unpause\",\n inputs: [\n {\n name: \"newPausedStatus\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n ],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"updateAVSMetadataURI\",\n inputs: [\n {\n name: \"_metadataURI\",\n type: \"string\",\n internalType: \"string\",\n },\n ],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"updateOperatorMetadata\",\n inputs: [\n {\n name: \"metadata\",\n type: \"tuple\",\n internalType: \"struct IReclaimServiceManager.OperatorMetadata\",\n components: [\n {\n name: \"addr\",\n type: \"address\",\n internalType: \"address\",\n },\n {\n name: \"url\",\n type: \"string\",\n internalType: \"string\",\n },\n ],\n },\n ],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"updateTaskCreationMetadata\",\n inputs: [\n {\n name: \"newMetadata\",\n type: \"tuple\",\n internalType: \"struct IReclaimServiceManager.TaskCreationMetadata\",\n components: [\n {\n name: \"maxTaskLifetimeS\",\n type: \"uint32\",\n internalType: \"uint32\",\n },\n {\n name: \"minSignaturesPerTask\",\n type: \"uint8\",\n internalType: \"uint8\",\n },\n {\n name: \"maxTaskCreationDelayS\",\n type: \"uint32\",\n internalType: \"uint32\",\n },\n ],\n },\n ],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"whitelistAddressAsOperator\",\n inputs: [\n {\n name: \"operator\",\n type: \"address\",\n internalType: \"address\",\n },\n {\n name: \"isWhitelisted\",\n type: \"bool\",\n internalType: \"bool\",\n },\n ],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"whitelistedOperators\",\n inputs: [\n {\n name: \"\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"address\",\n internalType: \"address\",\n },\n ],\n stateMutability: \"view\",\n },\n {\n type: \"event\",\n name: \"Initialized\",\n inputs: [\n {\n name: \"version\",\n type: \"uint8\",\n indexed: false,\n internalType: \"uint8\",\n },\n ],\n anonymous: false,\n },\n {\n type: \"event\",\n name: \"NewTaskCreated\",\n inputs: [\n {\n name: \"taskIndex\",\n type: \"uint32\",\n indexed: true,\n internalType: \"uint32\",\n },\n {\n name: \"task\",\n type: \"tuple\",\n indexed: false,\n internalType: \"struct IReclaimServiceManager.Task\",\n components: [\n {\n name: \"request\",\n type: \"tuple\",\n internalType: \"struct IReclaimServiceManager.ClaimRequest\",\n components: [\n {\n name: \"provider\",\n type: \"string\",\n internalType: \"string\",\n },\n {\n name: \"claimUserId\",\n type: \"bytes32\",\n internalType: \"bytes32\",\n },\n {\n name: \"claimHash\",\n type: \"bytes32\",\n internalType: \"bytes32\",\n },\n {\n name: \"requestedAt\",\n type: \"uint32\",\n internalType: \"uint32\",\n },\n {\n name: \"owner\",\n type: \"address\",\n internalType: \"address\",\n },\n ],\n },\n {\n name: \"createdAt\",\n type: \"uint32\",\n internalType: \"uint32\",\n },\n {\n name: \"expiresAt\",\n type: \"uint32\",\n internalType: \"uint32\",\n },\n {\n name: \"minimumSignatures\",\n type: \"uint8\",\n internalType: \"uint8\",\n },\n {\n name: \"operators\",\n type: \"tuple[]\",\n internalType: \"struct IReclaimServiceManager.Operator[]\",\n components: [\n {\n name: \"addr\",\n type: \"address\",\n internalType: \"address\",\n },\n {\n name: \"url\",\n type: \"string\",\n internalType: \"string\",\n },\n ],\n },\n {\n name: \"feePaid\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n ],\n },\n ],\n anonymous: false,\n },\n {\n type: \"event\",\n name: \"OwnershipTransferred\",\n inputs: [\n {\n name: \"previousOwner\",\n type: \"address\",\n indexed: true,\n internalType: \"address\",\n },\n {\n name: \"newOwner\",\n type: \"address\",\n indexed: true,\n internalType: \"address\",\n },\n ],\n anonymous: false,\n },\n {\n type: \"event\",\n name: \"Paused\",\n inputs: [\n {\n name: \"account\",\n type: \"address\",\n indexed: true,\n internalType: \"address\",\n },\n {\n name: \"newPausedStatus\",\n type: \"uint256\",\n indexed: false,\n internalType: \"uint256\",\n },\n ],\n anonymous: false,\n },\n {\n type: \"event\",\n name: \"PauserRegistrySet\",\n inputs: [\n {\n name: \"pauserRegistry\",\n type: \"address\",\n indexed: false,\n internalType: \"contract IPauserRegistry\",\n },\n {\n name: \"newPauserRegistry\",\n type: \"address\",\n indexed: false,\n internalType: \"contract IPauserRegistry\",\n },\n ],\n anonymous: false,\n },\n {\n type: \"event\",\n name: \"TaskCompleted\",\n inputs: [\n {\n name: \"taskIndex\",\n type: \"uint32\",\n indexed: true,\n internalType: \"uint32\",\n },\n {\n name: \"task\",\n type: \"tuple\",\n indexed: false,\n internalType: \"struct IReclaimServiceManager.CompletedTask\",\n components: [\n {\n name: \"task\",\n type: \"tuple\",\n internalType: \"struct IReclaimServiceManager.Task\",\n components: [\n {\n name: \"request\",\n type: \"tuple\",\n internalType: \"struct IReclaimServiceManager.ClaimRequest\",\n components: [\n {\n name: \"provider\",\n type: \"string\",\n internalType: \"string\",\n },\n {\n name: \"claimUserId\",\n type: \"bytes32\",\n internalType: \"bytes32\",\n },\n {\n name: \"claimHash\",\n type: \"bytes32\",\n internalType: \"bytes32\",\n },\n {\n name: \"requestedAt\",\n type: \"uint32\",\n internalType: \"uint32\",\n },\n {\n name: \"owner\",\n type: \"address\",\n internalType: \"address\",\n },\n ],\n },\n {\n name: \"createdAt\",\n type: \"uint32\",\n internalType: \"uint32\",\n },\n {\n name: \"expiresAt\",\n type: \"uint32\",\n internalType: \"uint32\",\n },\n {\n name: \"minimumSignatures\",\n type: \"uint8\",\n internalType: \"uint8\",\n },\n {\n name: \"operators\",\n type: \"tuple[]\",\n internalType: \"struct IReclaimServiceManager.Operator[]\",\n components: [\n {\n name: \"addr\",\n type: \"address\",\n internalType: \"address\",\n },\n {\n name: \"url\",\n type: \"string\",\n internalType: \"string\",\n },\n ],\n },\n {\n name: \"feePaid\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n ],\n },\n {\n name: \"signatures\",\n type: \"bytes[]\",\n internalType: \"bytes[]\",\n },\n ],\n },\n ],\n anonymous: false,\n },\n {\n type: \"event\",\n name: \"Unpaused\",\n inputs: [\n {\n name: \"account\",\n type: \"address\",\n indexed: true,\n internalType: \"address\",\n },\n {\n name: \"newPausedStatus\",\n type: \"uint256\",\n indexed: false,\n internalType: \"uint256\",\n },\n ],\n anonymous: false,\n },\n] as const;\n\nconst _bytecode =\n \"0x610100604052348015610010575f5ffd5b50604051614a44380380614a4483398101604081905261002f91610140565b6001600160a01b0380841660a0528083166080525f60c081905290821660e052839083908361005c610068565b50505050505050610180565b5f54610100900460ff16156100d35760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b5f5460ff9081161015610123575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b80516001600160a01b038116811461013b575f5ffd5b919050565b5f5f5f60608486031215610152575f5ffd5b61015b84610125565b925061016960208501610125565b915061017760408501610125565b90509250925092565b60805160a05160c05160e0516148446102005f395f6120e401525f8181611e6c0152611f3f01525f81816103c30152818161232001528181612496015261250101525f818161039c015281816107d0015281816111930152818161149e015281816119150152818161198301528181611fa4015261294c01526148445ff3fe608060405234801561000f575f5ffd5b5060043610610213575f3560e01c8063715018a61161011f578063a98fb355116100a9578063d5dba76d11610079578063d5dba76d14610509578063e481af9d1461051c578063f289a7fb14610524578063f2fde38b14610577578063fabc1cbc1461058a575f5ffd5b8063a98fb355146104b0578063aa5b9cad146104c3578063abd3b6bd146104d6578063b224b979146104f6575f5ffd5b806394bb371b116100ef57806394bb371b146104365780639926ee7d14610456578063a3524f9514610469578063a364f4da1461047c578063a551c1b81461048f575f5ffd5b8063715018a6146103e5578063886f1195146103ed5780638b00ce7c146104005780638da5cb5b14610425575f5ffd5b80632e8da829116101a05780635c975abb116101705780635c975abb14610369578063630868dc1461037157806366d382031461038457806368304835146103975780636b3aa72e146103be575f5ffd5b80632e8da8291461030b57806333cfb7b71461031e578063595c6a671461033e5780635ac86ab714610346575f5ffd5b80631b445516116101e65780631b445516146102825780631be785ac146102955780631ee3ca10146102a857806324d7806c146102bb5780632d89f6fc146102de575f5ffd5b806310d67a2f14610217578063136439dd1461022c57806314bfd6d01461023f57806316bd83c31461026f575b5f5ffd5b61022a6102253660046133db565b61059d565b005b61022a61023a3660046133f6565b610656565b61025261024d3660046133f6565b610793565b6040516001600160a01b0390911681526020015b60405180910390f35b61022a61027d3660046135a7565b6107bb565b61022a6102903660046135d8565b610b18565b61022a6102a3366004613654565b610b2e565b61022a6102b63660046136ae565b610c23565b6102ce6102c93660046133db565b610ce2565b6040519015158152602001610266565b6102fd6102ec3660046136fc565b60cb6020525f908152604090205481565b604051908152602001610266565b6102ce6103193660046133db565b610d67565b61033161032c3660046133db565b610dd1565b6040516102669190613715565b61022a610de2565b6102ce610354366004613760565b609854600160ff9092169190911b9081161490565b6098546102fd565b61025261037f3660046133f6565b610ea6565b61022a6103923660046133db565b610eb5565b6102527f000000000000000000000000000000000000000000000000000000000000000081565b6102527f000000000000000000000000000000000000000000000000000000000000000081565b61022a611039565b609754610252906001600160a01b031681565b60c9546104109063ffffffff1681565b60405163ffffffff9091168152602001610266565b6033546001600160a01b0316610252565b6104496104443660046133db565b61104c565b60405161026691906137cd565b61022a6104643660046137df565b611188565b61022a610477366004613a33565b61122f565b61022a61048a3660046133db565b611493565b6104a261049d3660046133f6565b6114e4565b604051610266929190613b74565b61022a6104be366004613b97565b6115a2565b6102526104d1366004613bc8565b6115d0565b6104e96104e4366004613c2b565b611606565b6040516102669190613c5c565b61022a610504366004613bc8565b61162f565b6102ce6105173660046133db565b6118f2565b610331611a0c565b60ca5461054e9063ffffffff8082169160ff64010000000082041691650100000000009091041683565b6040805163ffffffff948516815260ff9093166020840152921691810191909152606001610266565b61022a6105853660046133db565b611a1b565b61022a6105983660046133f6565b611a91565b60975f9054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105ed573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106119190613c6e565b6001600160a01b0316336001600160a01b03161461064a5760405162461bcd60e51b815260040161064190613c89565b60405180910390fd5b61065381611bea565b50565b60975460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa15801561069c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106c09190613cd3565b6106dc5760405162461bcd60e51b815260040161064190613cee565b609854818116146107555760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c69747900000000000000006064820152608401610641565b609881905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b60cd81815481106107a2575f80fd5b5f918252602090912001546001600160a01b0316905081565b60405163ec7fbb3160e01b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063ec7fbb3190602401602060405180830381865afa15801561081d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108419190613cd3565b15156001146108925760405162461bcd60e51b815260206004820152601b60248201527f4f70657261746f72206d757374206265207468652063616c6c657200000000006044820152606401610641565b80516001600160a01b031633146108fa5760405162461bcd60e51b815260206004820152602660248201527f4d657461646174612061646472657373206d757374206d61746368207468652060448201526531b0b63632b960d11b6064820152608401610641565b6020810151511580156109db575f5b60ce5481101561099d57825f01516001600160a01b031660ce828154811061093357610933613d36565b5f9182526020909120600290910201546001600160a01b0316036109955760ce818154811061096457610964613d36565b5f9182526020822060029091020180546001600160a01b03191681559061098e600183018261337c565b5050505050565b600101610909565b5060405162461bcd60e51b815260206004820152601260248201527113dc195c985d1bdc881b9bdd08199bdd5b9960721b6044820152606401610641565b5f5b60ce54811015610a8c57825f01516001600160a01b031660ce8281548110610a0757610a07613d36565b5f9182526020909120600290910201546001600160a01b031603610a84578260ce8281548110610a3957610a39613d36565b5f91825260209182902083516002929092020180546001600160a01b0319166001600160a01b03909216919091178155908201516001820190610a7c9082613dd5565b505050505050565b6001016109dd565b5060ce80546001810182555f9190915282517fd36cd1c74ef8d7326d8021b776c18fb5a5724b7f7bc93c2f42e43e10ef27d12a600290920291820180546001600160a01b0319166001600160a01b03909216919091178155602084015184927fd36cd1c74ef8d7326d8021b776c18fb5a5724b7f7bc93c2f42e43e10ef27d12b019061098e9082613dd5565b610b20611ce1565b610b2a8282611d3b565b5050565b610b3733610ce2565b610b535760405162461bcd60e51b815260040161064190613e8f565b8015610ba95760cc80546001810182555f919091527f47197230e1e4b29fc0bd84d7d78966c0925452aff72a2a121538b102457e9ebe0180546001600160a01b0384166001600160a01b03199091161790555050565b5f5b60cc5481101561099d57826001600160a01b031660cc8281548110610bd257610bd2613d36565b5f918252602090912001546001600160a01b031603610c1b5760cc8181548110610bfe57610bfe613d36565b5f91825260209091200180546001600160a01b0319169055505050565b600101610bab565b610c2c33610ce2565b610c485760405162461bcd60e51b815260040161064190613e8f565b805163ffffffff1615610c7157805160ca805463ffffffff191663ffffffff9092169190911790555b602081015160ff1615610ca457602081015160ca805460ff9092166401000000000264ff00000000199092169190911790555b604081015163ffffffff1615610653576040015160ca805463ffffffff909216650100000000000268ffffffff000000000019909216919091179055565b5f610cf56033546001600160a01b031690565b6001600160a01b03163303610d0c57506001919050565b5f5b60cd54811015610d5f57826001600160a01b031660cd8281548110610d3557610d35613d36565b5f918252602090912001546001600160a01b031603610d575750600192915050565b600101610d0e565b505f92915050565b5f610d7182610ce2565b15610d7e57506001919050565b5f5b60cc54811015610d5f57826001600160a01b031660cc8281548110610da757610da7613d36565b5f918252602090912001546001600160a01b031603610dc95750600192915050565b600101610d80565b6060610ddc82611f9f565b92915050565b60975460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610e28573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e4c9190613cd3565b610e685760405162461bcd60e51b815260040161064190613cee565b5f19609881905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b60cc81815481106107a2575f80fd5b5f54610100900460ff1615808015610ed357505f54600160ff909116105b80610eec5750303b158015610eec57505f5460ff166001145b610f4f5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610641565b5f805460ff191660011790558015610f70575f805461ff0019166101001790555b60408051606081018252610708815260016020820181905261012c919092015260ca805468ffffffffffffffffff191666012c010000070817905560cd805491820181555f527f83978b4c69c48dd978ab43fe30f077615294f938fb7f936d9eb340e51ea7db2e0180546001600160a01b0319166001600160a01b0384161790558015610b2a575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b611041611ce1565b61104a5f6122b8565b565b604080518082019091525f8152606060208201525f5b60ce5481101561099d57826001600160a01b031660ce828154811061108957611089613d36565b5f9182526020909120600290910201546001600160a01b0316036111805760ce81815481106110ba576110ba613d36565b5f9182526020918290206040805180820190915260029092020180546001600160a01b0316825260018101805492939192918401916110f890613d4a565b80601f016020809104026020016040519081016040528092919081815260200182805461112490613d4a565b801561116f5780601f106111465761010080835404028352916020019161116f565b820191905f5260205f20905b81548152906001019060200180831161115257829003601f168201915b505050505081525050915050919050565b600101611062565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146111d05760405162461bcd60e51b815260040161064190613ebc565b6111d982610d67565b6112255760405162461bcd60e51b815260206004820152601860248201527f4f70657261746f72206e6f742077686974656c697374656400000000000000006044820152606401610641565b610b2a8282612309565b63ffffffff81165f90815260cb60209081526040918290205484519251909261125a92909101614039565b60405160208183030381529060405280519060200120146112e35760405162461bcd60e51b815260206004820152603d60248201527f737570706c696564207461736b20646f6573206e6f74206d617463682074686560448201527f206f6e65207265636f7264656420696e2074686520636f6e74726163740000006064820152608401610641565b81516040015163ffffffff4281169116116113335760405162461bcd60e51b815260206004820152601060248201526f15185cdac81a185cc8195e1c1a5c995960821b6044820152606401610641565b6040805160c0810182528351518201519181019182528351516080908101516001600160a01b03166060830152845160209081015163ffffffff1682840152600160a08401529282528285015192820192909252835190910151515f906001600160401b038111156113a7576113a761340d565b6040519080825280602002602001820160405280156113d0578160200160208202803683370190505b5090505f5b8151811015611433578451608001518051829081106113f6576113f6613d36565b60200260200101515f015182828151811061141357611413613d36565b6001600160a01b03909216602092830291909101909101526001016113d5565b5061143e8282612357565b63ffffffff83165f81815260cb602052604080822091909155517fa5be567caa88ff11b6da2cf017f9cefffcafa24111a9ecbf0b0bc476944f0f099061148590879061404b565b60405180910390a250505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146114db5760405162461bcd60e51b815260040161064190613ebc565b61065381612477565b60ce81815481106114f3575f80fd5b5f918252602090912060029091020180546001820180546001600160a01b0390921693509061152190613d4a565b80601f016020809104026020016040519081016040528092919081815260200182805461154d90613d4a565b80156115985780601f1061156f57610100808354040283529160200191611598565b820191905f5260205f20905b81548152906001019060200180831161157b57829003601f168201915b5050505050905082565b6115ab33610ce2565b6115c75760405162461bcd60e51b815260040161064190613e8f565b610653816124ea565b5f5f836040516020016115e391906140ce565b60405160208183030381529060405290506115fe8184612536565b949350505050565b60608160405160200161161991906140ce565b6040516020818303038152906040529050919050565b60808201516001600160a01b031633146116f3575f8260405160200161165591906140ce565b60405160208183030381529060405290505f6116718284612536565b905083608001516001600160a01b0316816001600160a01b0316146116f05760405162461bcd60e51b815260206004820152602f60248201527f5369676e6572206f6620726571756573745369676e6174757265206973206e6f60448201526e3a103932b8bab2b9ba1737bbb732b960891b6064820152608401610641565b50505b5f611702836060015142612576565b60ca5490915063ffffffff650100000000009091048116908216111561176a5760405162461bcd60e51b815260206004820152601e60248201527f526571756573742074696d657374616d7020746f6f20666172206177617900006044820152606401610641565b6040805161016081018252606060c082018190525f60e08301819052610100830181905261012083018190526101408301819052928201839052808201839052608082015260a081019190915283815263ffffffff4281166020830181905260ca546117d79216906140f4565b63ffffffff1660408281019190915260ca54640100000000900460ff166060830152515f9061180a908390602001614039565b60408051808303601f19018152919052805160209091012060ca5490915061183d90640100000000900460ff16826125aa565b6080830152604051611853908390602001614039565b60408051601f19818403018152828252805160209182012060c9805463ffffffff9081165f90815260cb90945293909220555416907f7738d1b30deac7824a0580de02efde3bb766c7b7b5ea79da34869ebd887cebf3906118b5908590614039565b60405180910390a260c9546118d19063ffffffff1660016140f4565b60c9805463ffffffff191663ffffffff929092169190911790555050505050565b6040516398ec1ac960e01b81526001600160a01b0382811660048301525f9182917f000000000000000000000000000000000000000000000000000000000000000016906398ec1ac990602401602060405180830381865afa15801561195a573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061197e9190614110565b90505f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166340bf2fb76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119dd573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a019190614110565b909110159392505050565b6060611a16612947565b905090565b611a23611ce1565b6001600160a01b038116611a885760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610641565b610653816122b8565b60975f9054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ae1573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b059190613c6e565b6001600160a01b0316336001600160a01b031614611b355760405162461bcd60e51b815260040161064190613c89565b609854198119609854191614611bb35760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c69747900000000000000006064820152608401610641565b609881905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c90602001610788565b6001600160a01b038116611c785760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a401610641565b609754604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1609780546001600160a01b0319166001600160a01b0392909216919091179055565b6033546001600160a01b0316331461104a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610641565b5f5b81811015611f2757828282818110611d5757611d57613d36565b9050602002810190611d699190614127565b611d7a9060408101906020016133db565b6001600160a01b03166323b872dd3330868686818110611d9c57611d9c613d36565b9050602002810190611dae9190614127565b604080516001600160e01b031960e087901b1681526001600160a01b039485166004820152939092166024840152013560448201526064016020604051808303815f875af1158015611e02573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e269190613cd3565b50828282818110611e3957611e39613d36565b9050602002810190611e4b9190614127565b611e5c9060408101906020016133db565b6001600160a01b031663095ea7b37f0000000000000000000000000000000000000000000000000000000000000000858585818110611e9d57611e9d613d36565b9050602002810190611eaf9190614127565b604080516001600160e01b031960e086901b1681526001600160a01b039093166004840152013560248201526044016020604051808303815f875af1158015611efa573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f1e9190613cd3565b50600101611d3d565b50604051630da22a8b60e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690631b44551690611f7690859085906004016141d2565b5f604051808303815f87803b158015611f8d575f5ffd5b505af1158015610a7c573d5f5f3e3d5ffd5b60605f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316631703a0186040518163ffffffff1660e01b81526004015f60405180830381865afa158015611ffd573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261202491908101906142e7565b8051519091505f816001600160401b038111156120435761204361340d565b60405190808252806020026020018201604052801561206c578160200160208202803683370190505b5090505f5b828110156120ca57835180518290811061208d5761208d613d36565b60200260200101515f01518282815181106120aa576120aa613d36565b6001600160a01b0390921660209283029190910190910152600101612071565b50604051639004134760e01b81525f906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063900413479061211b90899086906004016143e7565b5f60405180830381865afa158015612135573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261215c9190810190614445565b90505f836001600160401b038111156121775761217761340d565b6040519080825280602002602001820160405280156121a0578160200160208202803683370190505b5090505f5f5b858110156121e5575f8482815181106121c1576121c1613d36565b602002602001015111156121dd57816121d9816144d5565b9250505b6001016121a6565b505f816001600160401b038111156121ff576121ff61340d565b604051908082528060200260200182016040528015612228578160200160208202803683370190505b5090505f5b868110156122ab575f85828151811061224857612248613d36565b602002602001015111156122a35783818151811061226857612268613d36565b602002602001015182828151811061228257612282613d36565b60200260200101906001600160a01b031690816001600160a01b0316815250505b60010161222d565b5098975050505050505050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b604051639926ee7d60e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690639926ee7d90611f7690859085906004016144ed565b5f8260200151511161239b5760405162461bcd60e51b815260206004820152600d60248201526c4e6f207369676e61747572657360981b6044820152606401610641565b5f6123a583612a7b565b90505f5b8251811015612471575f805b835181101561241a578483815181106123d0576123d0613d36565b60200260200101516001600160a01b03168482815181106123f3576123f3613d36565b60200260200101516001600160a01b031603612412576001915061241a565b6001016123b5565b50806124685760405162461bcd60e51b815260206004820152601a60248201527f4d697373696e67206174746573746f72207369676e61747572650000000000006044820152606401610641565b506001016123a9565b50505050565b6040516351b27a6d60e11b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063a364f4da906024015b5f604051808303815f87803b1580156124d8575f5ffd5b505af115801561098e573d5f5f3e3d5ffd5b60405163a98fb35560e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a98fb355906124c1908490600401613c5c565b5f5f6125428451612b46565b8460405160200161255492919061454e565b6040516020818303038152906040528051906020012090506115fe8184612c6b565b5f8163ffffffff168363ffffffff1611612599576125948383614588565b6125a3565b6125a38284614588565b9392505050565b60ce5460609060ff841611156126025760405162461bcd60e51b815260206004820152601e60248201527f496e7465726e616c3a204e6f7420656e6f756768206f70657261746f727300006044820152606401610641565b5f60ce805480602002602001604051908101604052809291908181526020015f905b828210156126fa575f848152602090819020604080518082019091526002850290910180546001600160a01b03168252600181018054929391929184019161266b90613d4a565b80601f016020809104026020016040519081016040528092919081815260200182805461269790613d4a565b80156126e25780601f106126b9576101008083540402835291602001916126e2565b820191905f5260205f20905b8154815290600101906020018083116126c557829003601f168201915b50505050508152505081526020019060010190612624565b505082519293505f91505060ff86166001600160401b038111156127205761272061340d565b60405190808252806020026020018201604052801561276557816020015b604080518082019091525f81526060602082015281526020019060019003908161273e5790505b5090505f5b81518160ff16101561293d575f83116127eb5760405162461bcd60e51b815260206004820152603760248201527f496e7465726e616c3a204665657320746f6f206c6f772e204e6f206f7065726160448201527f746f7273206c65667420746f207069636b2066726f6d2e0000000000000000006064820152608401610641565b5f836128336127fd60ff85168a6145a4565b60408051446020808301919091524282840152606080830194909452825180830390940184526080909101909152815191012090565b61283d91906145cb565b90505f85828151811061285257612852613d36565b602002602001015190508560018661286a91906145de565b8151811061287a5761287a613d36565b602002602001015186838151811061289457612894613d36565b60209081029190910101526128aa6001866145de565b94506128b8815f01516118f2565b6128c357505061276a565b805f0151848460ff16815181106128dc576128dc613d36565b60200260200101515f01906001600160a01b031690816001600160a01b0316815250508060200151848460ff168151811061291957612919613d36565b6020026020010151602001819052508280612933906145f1565b935050505061276a565b5095945050505050565b60605f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316631703a0186040518163ffffffff1660e01b81526004015f60405180830381865afa1580156129a5573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526129cc91908101906142e7565b90505f815f0151516001600160401b038111156129eb576129eb61340d565b604051908082528060200260200182016040528015612a14578160200160208202803683370190505b5090505f5b825151811015612a74578251805182908110612a3757612a37613d36565b60200260200101515f0151828281518110612a5457612a54613d36565b6001600160a01b0390921660209283029190910190910152600101612a19565b5092915050565b60605f612a8a835f0151612c85565b90505f8360200151516001600160401b03811115612aaa57612aaa61340d565b604051908082528060200260200182016040528015612ad3578160200160208202803683370190505b5090505f5b846020015151811015612b3e57612b0c8386602001518381518110612aff57612aff613d36565b6020026020010151612536565b828281518110612b1e57612b1e613d36565b6001600160a01b0390921660209283029190910190910152600101612ad8565b509392505050565b6060815f03612b6c5750506040805180820190915260018152600360fc1b602082015290565b815f5b8115612b955780612b7f816144d5565b9150612b8e9050600a8361460f565b9150612b6f565b5f816001600160401b03811115612bae57612bae61340d565b6040519080825280601f01601f191660200182016040528015612bd8576020820181803683370190505b509050815b8515612c6257612bee6001826145de565b90505f612bfc600a8861460f565b612c0790600a614622565b612c1190886145de565b612c1c906030614639565b90505f8160f81b905080848481518110612c3857612c38613d36565b60200101906001600160f81b03191690815f1a905350612c59600a8961460f565b97505050612bdd565b50949350505050565b5f5f5f612c788585612cf4565b91509150612b3e81612d5f565b6060612cb4825f0151604051602001612ca091815260200190565b604051602081830303815290604052612f14565b612cc183602001516130c9565b612cd4846040015163ffffffff16612b46565b612ce18560600151612b46565b6040516020016116199493929190614652565b5f5f8251604103612d28576020830151604084015160608501515f1a612d1c87828585613224565b94509450505050612d58565b8251604003612d515760208301516040840151612d46868383613309565b935093505050612d58565b505f905060025b9250929050565b5f816004811115612d7257612d726146a8565b03612d7a5750565b6001816004811115612d8e57612d8e6146a8565b03612ddb5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610641565b6002816004811115612def57612def6146a8565b03612e3c5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610641565b6003816004811115612e5057612e506146a8565b03612ea85760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610641565b6004816004811115612ebc57612ebc6146a8565b036106535760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610641565b60605f82516002612f259190614622565b6001600160401b03811115612f3c57612f3c61340d565b6040519080825280601f01601f191660200182016040528015612f66576020820181803683370190505b5060408051808201909152601081526f181899199a1a9b1b9c1cb0b131b232b360811b60208201529091505f5b845181101561309f57818251868381518110612fb157612fb1613d36565b0160200151612fc3919060f81c61460f565b81518110612fd357612fd3613d36565b01602001516001600160f81b03191683612fee836002614622565b81518110612ffe57612ffe613d36565b60200101906001600160f81b03191690815f1a90535081825186838151811061302957613029613d36565b016020015161303b919060f81c6145cb565b8151811061304b5761304b613d36565b01602001516001600160f81b03191683613066836002614622565b6130719060016145a4565b8151811061308157613081613d36565b60200101906001600160f81b03191690815f1a905350600101612f93565b50816040516020016130b191906146bc565b60405160208183030381529060405292505050919050565b60408051602880825260608281019093525f91906020820181803683370190505090505f5b60148110156131fb575f6131038260136145de565b61310e906008614622565b6131199060026147ad565b61312c906001600160a01b03871661460f565b60f81b90505f60108260f81c61314291906147b8565b60f81b90505f8160f81c601061315891906147d9565b8360f81c61316691906147f5565b60f81b905061317482613342565b85613180866002614622565b8151811061319057613190613d36565b60200101906001600160f81b03191690815f1a9053506131af81613342565b856131bb866002614622565b6131c69060016145a4565b815181106131d6576131d6613d36565b60200101906001600160f81b03191690815f1a90535050600190920191506130ee9050565b508060405160200161320d91906146bc565b604051602081830303815290604052915050919050565b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561325957505f90506003613300565b8460ff16601b1415801561327157508460ff16601c14155b1561328157505f90506004613300565b604080515f8082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156132d2573d5f5f3e3d5ffd5b5050604051601f1901519150506001600160a01b0381166132fa575f60019250925050613300565b91505f90505b94509492505050565b5f806001600160ff1b0383168161332560ff86901c601b6145a4565b905061333387828885613224565b9350935050505b935093915050565b5f600a60f883901c10156133685761335f60f883901c6030614639565b60f81b92915050565b61335f60f883901c6057614639565b919050565b50805461338890613d4a565b5f825580601f10613397575050565b601f0160209004905f5260205f209061065391905f5b808211156133c2575f818401556001016133ad565b505090565b6001600160a01b0381168114610653575f5ffd5b5f602082840312156133eb575f5ffd5b81356125a3816133c7565b5f60208284031215613406575f5ffd5b5035919050565b634e487b7160e01b5f52604160045260245ffd5b604080519081016001600160401b03811182821017156134435761344361340d565b60405290565b604051606081016001600160401b03811182821017156134435761344361340d565b60405160c081016001600160401b03811182821017156134435761344361340d565b604051602081016001600160401b03811182821017156134435761344361340d565b604051601f8201601f191681016001600160401b03811182821017156134d7576134d761340d565b604052919050565b5f82601f8301126134ee575f5ffd5b8135602083015f5f6001600160401b0384111561350d5761350d61340d565b50601f8301601f1916602001613522816134af565b915050828152858383011115613536575f5ffd5b828260208301375f92810160200192909252509392505050565b5f60408284031215613560575f5ffd5b613568613421565b90508135613575816133c7565b815260208201356001600160401b0381111561358f575f5ffd5b61359b848285016134df565b60208301525092915050565b5f602082840312156135b7575f5ffd5b81356001600160401b038111156135cc575f5ffd5b6115fe84828501613550565b5f5f602083850312156135e9575f5ffd5b82356001600160401b038111156135fe575f5ffd5b8301601f8101851361360e575f5ffd5b80356001600160401b03811115613623575f5ffd5b8560208260051b8401011115613637575f5ffd5b6020919091019590945092505050565b8015158114610653575f5ffd5b5f5f60408385031215613665575f5ffd5b8235613670816133c7565b9150602083013561368081613647565b809150509250929050565b803563ffffffff81168114613377575f5ffd5b803560ff81168114613377575f5ffd5b5f60608284031280156136bf575f5ffd5b506136c8613449565b6136d18361368b565b81526136df6020840161369e565b60208201526136f06040840161368b565b60408201529392505050565b5f6020828403121561370c575f5ffd5b6125a38261368b565b602080825282518282018190525f918401906040840190835b818110156137555783516001600160a01b031683526020938401939092019160010161372e565b509095945050505050565b5f60208284031215613770575f5ffd5b6125a38261369e565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b60018060a01b0381511682525f6020820151604060208501526115fe6040850182613779565b602081525f6125a360208301846137a7565b5f5f604083850312156137f0575f5ffd5b82356137fb816133c7565b915060208301356001600160401b03811115613815575f5ffd5b830160608186031215613826575f5ffd5b61382e613449565b81356001600160401b03811115613843575f5ffd5b61384f878285016134df565b8252506020828101359082015260409182013591810191909152919491935090915050565b5f60a08284031215613884575f5ffd5b60405160a081016001600160401b03811182821017156138a6576138a661340d565b60405290508082356001600160401b038111156138c1575f5ffd5b6138cd858286016134df565b82525060208381013590820152604080840135908201526138f06060840161368b565b60608201526080830135613903816133c7565b6080919091015292915050565b5f6001600160401b038211156139285761392861340d565b5060051b60200190565b5f82601f830112613941575f5ffd5b813561395461394f82613910565b6134af565b8082825260208201915060208360051b860101925085831115613975575f5ffd5b602085015b8381101561293d5780356001600160401b03811115613997575f5ffd5b6139a6886020838a0101613550565b8452506020928301920161397a565b5f82601f8301126139c4575f5ffd5b81356139d261394f82613910565b8082825260208201915060208360051b8601019250858311156139f3575f5ffd5b602085015b8381101561293d5780356001600160401b03811115613a15575f5ffd5b613a24886020838a01016134df565b845250602092830192016139f8565b5f5f60408385031215613a44575f5ffd5b82356001600160401b03811115613a59575f5ffd5b830160408186031215613a6a575f5ffd5b613a72613421565b81356001600160401b03811115613a87575f5ffd5b820160c08188031215613a98575f5ffd5b613aa061346b565b81356001600160401b03811115613ab5575f5ffd5b613ac189828501613874565b825250613ad06020830161368b565b6020820152613ae16040830161368b565b6040820152613af26060830161369e565b606082015260808201356001600160401b03811115613b0f575f5ffd5b613b1b89828501613932565b60808301525060a09182013591810191909152815260208201356001600160401b03811115613b48575f5ffd5b613b54878285016139b5565b6020830152508093505050613b6b6020840161368b565b90509250929050565b6001600160a01b03831681526040602082018190525f906115fe90830184613779565b5f60208284031215613ba7575f5ffd5b81356001600160401b03811115613bbc575f5ffd5b6115fe848285016134df565b5f5f60408385031215613bd9575f5ffd5b82356001600160401b03811115613bee575f5ffd5b613bfa85828601613874565b92505060208301356001600160401b03811115613c15575f5ffd5b613c21858286016134df565b9150509250929050565b5f60208284031215613c3b575f5ffd5b81356001600160401b03811115613c50575f5ffd5b6115fe84828501613874565b602081525f6125a36020830184613779565b5f60208284031215613c7e575f5ffd5b81516125a3816133c7565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b5f60208284031215613ce3575f5ffd5b81516125a381613647565b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b634e487b7160e01b5f52603260045260245ffd5b600181811c90821680613d5e57607f821691505b602082108103613d7c57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115613dd05782821115613dd057805f5260205f20601f840160051c6020851015613dad57505f5b90810190601f840160051c035f5b81811015610a7c575f83820155600101613dbb565b505050565b81516001600160401b03811115613dee57613dee61340d565b613e0281613dfc8454613d4a565b84613d82565b6020601f821160018114613e34575f8315613e1d5750848201515b5f19600385901b1c1916600184901b17845561098e565b5f84815260208120601f198516915b82811015613e635787850151825560209485019460019092019101613e43565b5084821015613e8057868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b60208082526013908201527221b0b63632b91034b9903737ba1030b236b4b760691b604082015260600190565b6020808252604a908201527f4543445341536572766963654d616e61676572426173652e6f6e6c795374616b60408201527f6552656769737472793a2063616c6c6572206973206e6f7420746865207374616060820152696b65526567697374727960b01b608082015260a00190565b5f815160a08452613f4060a0850182613779565b602084810151908601526040808501519086015260608085015163ffffffff16908601526080938401516001600160a01b031693909401929092525090919050565b5f815160c08452613f9660c0850182613f2c565b905063ffffffff602084015116602085015263ffffffff604084015116604085015260ff60608401511660608501526080830151848203608086015281815180845260208401915060208160051b8501016020840193505f5b8281101561402057601f1986830301845261400b8286516137a7565b60209586019594909401939150600101613fef565b5060a087015160a0890152809550505050505092915050565b602081525f6125a36020830184613f82565b602081525f8251604060208401526140666060840182613f82565b602085810151858303601f19016040870152805180845292935081019181840191600582901b8501015f5b828110156140c257601f198683030184526140ad828651613779565b60209586019594909401939150600101614091565b50979650505050505050565b602081525f6125a36020830184613f2c565b634e487b7160e01b5f52601160045260245ffd5b63ffffffff8181168382160190811115610ddc57610ddc6140e0565b5f60208284031215614120575f5ffd5b5051919050565b5f8235609e1983360301811261413b575f5ffd5b9190910192915050565b8035613377816133c7565b6bffffffffffffffffffffffff81168114610653575f5ffd5b8183526020830192505f815f5b848110156141c8578135614189816133c7565b6001600160a01b0316865260208201356141a281614150565b6bffffffffffffffffffffffff1660208701526040958601959190910190600101614176565b5093949350505050565b602080825281018290525f6040600584901b830181019083018583609e1936839003015b878210156142da57868503603f190184528235818112614214575f5ffd5b8901803536829003601e1901811261422a575f5ffd5b81016020810190356001600160401b03811115614245575f5ffd5b8060061b3603821315614256575f5ffd5b60a0885261426860a089018284614169565b91505061427760208301614145565b6001600160a01b031660208801526040828101359088015261429b6060830161368b565b63ffffffff1660608801526142b26080830161368b565b63ffffffff8116608089015291509550506020938401939290920191600191909101906141f6565b5092979650505050505050565b5f602082840312156142f7575f5ffd5b81516001600160401b0381111561430c575f5ffd5b82016020818503121561431d575f5ffd5b61432561348d565b81516001600160401b0381111561433a575f5ffd5b80830192505084601f83011261434e575f5ffd5b815161435c61394f82613910565b8082825260208201915060208360061b86010192508783111561437d575f5ffd5b6020850194505b828510156143da576040858903121561439b575f5ffd5b6143a3613421565b85516143ae816133c7565b815260208601516143be81614150565b8060208301525080835250602082019150604085019450614384565b8352509095945050505050565b6001600160a01b03831681526040602080830182905283519183018290525f91908401906060840190835b818110156144395783516001600160a01b0316835260209384019390920191600101614412565b50909695505050505050565b5f60208284031215614455575f5ffd5b81516001600160401b0381111561446a575f5ffd5b8201601f8101841361447a575f5ffd5b805161448861394f82613910565b8082825260208201915060208360051b8501019250868311156144a9575f5ffd5b6020840193505b828410156144cb5783518252602093840193909101906144b0565b9695505050505050565b5f600182016144e6576144e66140e0565b5060010190565b60018060a01b0383168152604060208201525f82516060604084015261451660a0840182613779565b90506020840151606084015260408401516080840152809150509392505050565b5f81518060208401855e5f93019283525090919050565b7f19457468657265756d205369676e6564204d6573736167653a0a00000000000081525f6115fe614582601a840186614537565b84614537565b63ffffffff8281168282160390811115610ddc57610ddc6140e0565b80820180821115610ddc57610ddc6140e0565b634e487b7160e01b5f52601260045260245ffd5b5f826145d9576145d96145b7565b500690565b81810381811115610ddc57610ddc6140e0565b5f60ff821660ff8103614606576146066140e0565b60010192915050565b5f8261461d5761461d6145b7565b500490565b8082028115828204841417610ddc57610ddc6140e0565b60ff8181168382160190811115610ddc57610ddc6140e0565b5f61465d8287614537565b600560f91b81526146716001820187614537565b600560f91b815290506146876001820186614537565b600560f91b8152905061469d6001820185614537565b979650505050505050565b634e487b7160e01b5f52602160045260245ffd5b61060f60f31b81525f6125a36002830184614537565b6001815b600184111561333a578085048111156146f1576146f16140e0565b60018416156146ff57908102905b60019390931c9280026146d6565b5f8261471b57506001610ddc565b8161472757505f610ddc565b816001811461473d576002811461474757614763565b6001915050610ddc565b60ff841115614758576147586140e0565b50506001821b610ddc565b5060208310610133831016604e8410600b8410161715614786575081810a610ddc565b6147925f1984846146d2565b805f19048211156147a5576147a56140e0565b029392505050565b5f6125a3838361470d565b5f60ff8316806147ca576147ca6145b7565b8060ff84160491505092915050565b60ff8181168382160290811690818114612a7457612a746140e0565b60ff8281168282160390811115610ddc57610ddc6140e056fea2646970667358221220a51eaf07872263397e28bcc5982530f164b46c95f25372731d7576b5e5498adf64736f6c63430008210033\";\n\ntype ReclaimServiceManagerConstructorParams =\n | [signer?: Signer]\n | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n xs: ReclaimServiceManagerConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class ReclaimServiceManager__factory extends ContractFactory {\n constructor(...args: ReclaimServiceManagerConstructorParams) {\n if (isSuperArgs(args)) {\n super(...args);\n } else {\n super(_abi, _bytecode, args[0]);\n }\n }\n\n override getDeployTransaction(\n _avsDirectory: AddressLike,\n _stakeRegistry: AddressLike,\n _delegationManager: AddressLike,\n overrides?: NonPayableOverrides & { from?: string }\n ): Promise<ContractDeployTransaction> {\n return super.getDeployTransaction(\n _avsDirectory,\n _stakeRegistry,\n _delegationManager,\n overrides || {}\n );\n }\n override deploy(\n _avsDirectory: AddressLike,\n _stakeRegistry: AddressLike,\n _delegationManager: AddressLike,\n overrides?: NonPayableOverrides & { from?: string }\n ) {\n return super.deploy(\n _avsDirectory,\n _stakeRegistry,\n _delegationManager,\n overrides || {}\n ) as Promise<\n ReclaimServiceManager & {\n deploymentTransaction(): ContractTransactionResponse;\n }\n >;\n }\n override connect(\n runner: ContractRunner | null\n ): ReclaimServiceManager__factory {\n return super.connect(runner) as ReclaimServiceManager__factory;\n }\n\n static readonly bytecode = _bytecode;\n static readonly abi = _abi;\n static createInterface(): ReclaimServiceManagerInterface {\n return new Interface(_abi) as ReclaimServiceManagerInterface;\n }\n static connect(\n address: string,\n runner?: ContractRunner | null\n ): ReclaimServiceManager {\n return new Contract(\n address,\n _abi,\n runner\n ) as unknown as ReclaimServiceManager;\n }\n}\n", "import { EventLog, getBytes, type Wallet } from 'ethers'\n\nimport type { IReclaimServiceManager, NewTaskCreatedEvent } from '#src/avs/contracts/ReclaimServiceManager.ts'\nimport { getContracts } from '#src/avs/utils/contracts.ts'\n\ntype CreateClaimWithoutOwner = Omit<IReclaimServiceManager.ClaimRequestStruct, 'owner'>\n\ntype CreateNewClaimRequestOnChainOpts = {\n\trequest: CreateClaimWithoutOwner\n\tpayer: Wallet\n\tchainId?: string\n} & ({\n\towner: Wallet\n} | {\n\t/**\n\t * Address of the owner of the claim\n\t */\n\towner: string\n\trequestSignature?: string | Uint8Array\n})\n\nexport async function createNewClaimRequestOnChain({\n\trequest,\n\tpayer,\n\tchainId,\n\t...rest\n}: CreateNewClaimRequestOnChainOpts) {\n\tconst contracts = getContracts(chainId)\n\tconst contract = contracts.contract.connect(payer)\n\tconst ownerAddress = typeof rest.owner === 'string'\n\t\t? rest.owner\n\t\t: rest.owner.address\n\tconst fullRequest: IReclaimServiceManager.ClaimRequestStruct = {\n\t\t...request,\n\t\towner: ownerAddress\n\t}\n\tconst signature = await getSignature()\n\tconst task = await contract.createNewTask(fullRequest, signature || '0x00')\n\tconst rslt = await task.wait()\n\tconst logs = rslt?.logs ?? []\n\tconst eventLogs = logs.filter((log): log is EventLog => log instanceof EventLog)\n\t// check task created event was emitted\n\tconst ev = eventLogs[0]\n\tconst arg = ev?.args as unknown as NewTaskCreatedEvent.OutputObject\n\n\treturn { task: arg, tx: rslt }\n\n\tfunction getSignature() {\n\t\tif(ownerAddress.toLowerCase() === payer.address.toLowerCase()) {\n\t\t\treturn\n\t\t}\n\n\t\tif('requestSignature' in rest) {\n\t\t\treturn rest.requestSignature\n\t\t}\n\n\t\tif(typeof rest.owner !== 'object') {\n\t\t\tthrow new Error(\n\t\t\t\t'Owner wallet must be provided or'\n\t\t\t\t+ ' requestSignature must be provided'\n\t\t\t)\n\t\t}\n\n\t\treturn signClaimRequest(fullRequest, rest.owner, chainId)\n\t}\n}\n\nexport async function signClaimRequest(\n\trequest: IReclaimServiceManager.ClaimRequestStruct,\n\towner: Wallet,\n\tchainId?: string\n) {\n\tconst contract = getContracts(chainId).contract\n\tconst encoded = await contract.encodeClaimRequest(request)\n\tconst strSig = await owner.signMessage(getBytes(encoded))\n\treturn getBytes(strSig)\n}", "import type { TLSConnectionOptions, TLSPacketContext } from '@reclaimprotocol/tls'\nimport { asciiToUint8Array } from '@reclaimprotocol/tls'\n\nimport { makeRpcTlsTunnel } from '#src/client/tunnels/make-rpc-tls-tunnel.ts'\nimport { getAttestorClientFromPool } from '#src/client/utils/attestor-pool.ts'\nimport { DEFAULT_HTTPS_PORT, PROVIDER_CTX, TOPRF_DOMAIN_SEPARATOR } from '#src/config/index.ts'\nimport { ClaimTunnelRequest } from '#src/proto/api.ts'\nimport { providers } from '#src/providers/index.ts'\nimport type {\n\tCreateClaimOnAttestorOpts,\n\tIAttestorClient,\n\tMessageRevealInfo,\n\tProviderName,\n\tTOPRFProofParams,\n\tTranscript\n} from '#src/types/index.ts'\nimport type {\n\tRevealedSlices } from '#src/utils/index.ts'\nimport {\n\tAttestorError,\n\tbinaryHashToStr,\n\tcanonicalStringify,\n\tgenerateTunnelId,\n\tgetBlocksToReveal,\n\tgetEngineProto,\n\tgetProviderValue,\n\tisApplicationData,\n\tlogger as LOGGER,\n\tmakeDefaultOPRFOperator,\n\tmakeHttpResponseParser,\n\tpreparePacketsForReveal,\n\tredactSlices,\n\tuint8ArrayToStr,\n\tunixTimestampSeconds\n} from '#src/utils/index.ts'\nimport { executeWithRetries } from '#src/utils/retries.ts'\nimport { SIGNATURES } from '#src/utils/signatures/index.ts'\nimport { getDefaultTlsOptions } from '#src/utils/tls.ts'\n\ntype ServerAppDataPacket = {\n\tplaintext: Uint8Array\n\tmessage: TLSPacketContext\n}\n\n/**\n * Create a claim on the attestor\n */\nexport function createClaimOnAttestor<N extends ProviderName>(\n\t{\n\t\tlogger: _logger, maxRetries = 3, ...opts\n\t}: CreateClaimOnAttestorOpts<N>\n) {\n\tconst logger = _logger\n\t\t// if the client has already been initialised\n\t\t// and no logger is provided, use the client's logger\n\t\t// otherwise default to the global logger\n\t\t|| ('logger' in opts.client ? opts.client.logger : LOGGER)\n\treturn executeWithRetries(\n\t\tattempt => (\n\t\t\t_createClaimOnAttestor<N>({\n\t\t\t\t...opts,\n\t\t\t\tlogger: attempt ? logger.child({ attempt }) : logger\n\t\t\t})\n\t\t),\n\t\t{ maxRetries, logger, shouldRetry }\n\t)\n}\n\nfunction shouldRetry(err: Error) {\n\tif(err instanceof TypeError) {\n\t\treturn false\n\t}\n\n\t// possibly a network error, or the server\n\t// closed the connection before we received the full data\n\tif(err?.message?.includes('stream ended before')) {\n\t\treturn true\n\t}\n\n\treturn err instanceof AttestorError\n\t\t&& err.code !== 'ERROR_INVALID_CLAIM'\n\t\t&& err.code !== 'ERROR_BAD_REQUEST'\n\t\t&& err.code !== 'ERROR_AUTHENTICATION_FAILED'\n\t\t&& err.code !== 'ERROR_TOPRF_OUT_OF_BOUNDS'\n}\n\nasync function _createClaimOnAttestor<N extends ProviderName>(\n\t{\n\t\tname,\n\t\tparams,\n\t\tsecretParams,\n\t\tcontext,\n\t\tonStep,\n\t\townerPrivateKey,\n\t\tclient: clientInit,\n\t\tlogger = LOGGER,\n\t\ttimestampS,\n\t\tupdateProviderParams,\n\t\tupdateParametersFromOprfData = true,\n\t\t...zkOpts\n\t}: CreateClaimOnAttestorOpts<N>\n) {\n\tconst provider = providers[name]\n\tconst hostPort = getProviderValue(params, provider.hostPort, secretParams)\n\tconst geoLocation = getProviderValue(params, provider.geoLocation, secretParams)\n\tconst proxySessionId = getProviderValue(params, provider.proxySessionId, secretParams)\n\tconst providerTlsOpts = getProviderValue(\n\t\tparams,\n\t\tprovider.additionalClientOptions\n\t)\n\tconst tlsOpts: TLSConnectionOptions = {\n\t\t...getDefaultTlsOptions(),\n\t\tfetchCertificateBytes: fetchCertificateBytesFromAttestor,\n\t\t...providerTlsOpts\n\t}\n\tconst { zkEngine = 'snarkjs' } = zkOpts\n\n\tlet redactionMode = getProviderValue(params, provider.writeRedactionMode)\n\n\tconst [host, port] = hostPort.split(':')\n\tconst resParser = makeHttpResponseParser()\n\n\tlet client: IAttestorClient\n\tlet lastMsgRevealed = false\n\n\tconst revealMap = new Map<TLSPacketContext, MessageRevealInfo>()\n\n\tonStep?.({ name: 'connecting' })\n\n\tlet endedHttpRequest: ((err?: Error) => void) | undefined\n\tconst createTunnelReq = {\n\t\thost,\n\t\tport: port ? +port : DEFAULT_HTTPS_PORT,\n\t\tgeoLocation,\n\t\tproxySessionId,\n\t\tid: generateTunnelId()\n\t}\n\n\tlogger = logger.child({ tunnelId: createTunnelReq.id })\n\n\tconst authRequest = 'authRequest' in clientInit\n\t\t? (\n\t\t\ttypeof clientInit.authRequest === 'function'\n\t\t\t\t? await clientInit.authRequest()\n\t\t\t\t: clientInit.authRequest\n\t\t)\n\t\t: undefined\n\n\tconst tunnel = await makeRpcTlsTunnel({\n\t\ttlsOpts,\n\t\tconnect: (connectMsgs) => {\n\t\t\tlet created = false\n\t\t\tif('metadata' in clientInit) {\n\t\t\t\tclient = clientInit\n\t\t\t} else {\n\t\t\t\tclient = getAttestorClientFromPool(\n\t\t\t\t\tclientInit.url,\n\t\t\t\t\t() => {\n\t\t\t\t\t\tcreated = true\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tauthRequest: authRequest,\n\t\t\t\t\t\t\tinitMessages: connectMsgs,\n\t\t\t\t\t\t\tlogger\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t)\n\t\t\t}\n\n\t\t\tif(!created) {\n\t\t\t\tclient\n\t\t\t\t\t.waitForInit()\n\t\t\t\t\t.then(() => client.sendMessage(...connectMsgs))\n\t\t\t\t\t.catch(err => {\n\t\t\t\t\t\tlogger.error(\n\t\t\t\t\t\t\t{ err },\n\t\t\t\t\t\t\t'error in sending init msgs'\n\t\t\t\t\t\t)\n\t\t\t\t\t})\n\t\t\t}\n\n\t\t\treturn client\n\t\t},\n\t\tlogger,\n\t\trequest: createTunnelReq,\n\t\tonMessage(data) {\n\t\t\tlogger.debug({ bytes: data.length }, 'recv data from server')\n\n\t\t\tresParser.onChunk(data)\n\t\t\tif(resParser.res.complete) {\n\t\t\t\tlogger?.debug('got complete HTTP response from server')\n\t\t\t\t// wait a little bit to make sure the client has\n\t\t\t\t// finished writing the response\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tendedHttpRequest?.()\n\t\t\t\t}, 100)\n\t\t\t}\n\t\t},\n\t\tonClose(err) {\n\t\t\tconst level = err ? 'error' : 'debug'\n\t\t\tlogger?.[level]({ err }, 'tls session ended')\n\t\t\tendedHttpRequest?.(err)\n\t\t\ttry {\n\t\t\t\tresParser.streamEnded()\n\t\t\t} catch{ }\n\t\t},\n\t})\n\n\tconst {\n\t\tversion: tlsVersion,\n\t\tcipherSuite\n\t} = tunnel.tls.getMetadata()\n\tif(tlsVersion === 'TLS1_2' && redactionMode !== 'zk') {\n\t\tredactionMode = 'zk'\n\t\tlogger.info('TLS1.2 detected, defaulting to zk redaction mode')\n\t}\n\n\tconst {\n\t\tredactions,\n\t\tdata: requestStr\n\t} = provider.createRequest(\n\t\t// @ts-ignore\n\t\tsecretParams,\n\t\tparams,\n\t\tlogger\n\t)\n\tconst requestData = typeof requestStr === 'string'\n\t\t? asciiToUint8Array(requestStr)\n\t\t: requestStr\n\n\tlogger.debug(\n\t\t{ redactions: redactions.length },\n\t\t'generated request'\n\t)\n\n\tconst waitForAllData = new Promise<void>(\n\t\t(resolve, reject) => {\n\t\t\tendedHttpRequest = err => (\n\t\t\t\terr ? reject(err) : resolve()\n\t\t\t)\n\t\t}\n\t)\n\n\tonStep?.({ name: 'sending-request-data' })\n\n\ttry {\n\t\tif(redactionMode === 'zk') {\n\t\t\tawait writeRedactedZk()\n\t\t} else {\n\t\t\tawait writeRedactedWithKeyUpdate()\n\t\t}\n\n\t\tlogger.info('wrote request to server')\n\t} catch(err) {\n\t\t// wait for complete stream end when the session is closed\n\t\t// mid-write, as this means the server could not process\n\t\t// our request due to some error. Hope the stream end\n\t\t// error will be more descriptive\n\t\tlogger.error(\n\t\t\t{ err },\n\t\t\t'session errored during write, waiting for stream end'\n\t\t)\n\t}\n\n\tonStep?.({ name: 'waiting-for-response' })\n\n\tawait waitForAllData\n\tawait tunnel.close()\n\n\tlogger.info('session closed, processing response')\n\n\t// update the response selections\n\tif(updateProviderParams) {\n\t\tconst { params:updatedParms, secretParams:updatedSecretParms } = await updateProviderParams(tunnel.transcript, tlsVersion ?? 'TLS1_2')\n\t\tparams = { ...params, ...updatedParms }\n\t\tsecretParams = { ...secretParams, ...updatedSecretParms }\n\t}\n\n\tconst signatureAlg = SIGNATURES[client!.metadata.signatureType]\n\n\tlet serverIV: Uint8Array\n\tlet clientIV: Uint8Array\n\tconst [serverBlock] = getLastBlocks('server', 1)\n\tif(serverBlock?.message.type === 'ciphertext') {\n\t\tserverIV = serverBlock.message.fixedIv\n\t}\n\n\tconst [clientBlock] = getLastBlocks('client', 1)\n\tif(clientBlock?.message.type === 'ciphertext') {\n\t\tclientIV = clientBlock.message.fixedIv\n\t}\n\n\tconst transcript = await generateTranscript()\n\n\t// now that we have the full transcript, we need\n\t// to generate the ZK proofs & send them to the attestor\n\t// to verify & sign our claim\n\tconst claimTunnelReq = ClaimTunnelRequest.create({\n\t\trequest: createTunnelReq,\n\t\tdata: {\n\t\t\tprovider: name,\n\t\t\tparameters: canonicalStringify(params),\n\t\t\tcontext: canonicalStringify(context),\n\t\t\ttimestampS: timestampS ?? unixTimestampSeconds(),\n\t\t\towner: getAddress(),\n\t\t},\n\t\ttranscript:transcript,\n\t\tzkEngine: getEngineProto(zkEngine),\n\t\tfixedServerIV: serverIV!,\n\t\tfixedClientIV: clientIV!,\n\t})\n\n\tonStep?.({ name: 'waiting-for-verification' })\n\n\tconst claimTunnelBytes = ClaimTunnelRequest\n\t\t.encode(claimTunnelReq).finish()\n\tconst requestSignature = await signatureAlg\n\t\t.sign(claimTunnelBytes, ownerPrivateKey)\n\tclaimTunnelReq.signatures = { requestSignature }\n\n\tconst result = await client!.rpc('claimTunnel', claimTunnelReq)\n\n\tlogger.info({ success: !!result.claim }, 'recv claim response')\n\n\treturn result\n\n\tasync function fetchCertificateBytesFromAttestor(url: string) {\n\t\tif(!client) {\n\t\t\tthrow new Error('attestor client not initialized')\n\t\t}\n\n\t\tconst result = await client.rpc('fetchCertificateBytes', { url })\n\t\treturn result.bytes\n\t}\n\n\tasync function writeRedactedWithKeyUpdate() {\n\t\tlet currentIndex = 0\n\t\tfor(const section of redactions) {\n\t\t\tconst block = requestData\n\t\t\t\t.slice(currentIndex, section.fromIndex)\n\t\t\tif(block.length) {\n\t\t\t\tawait writeWithReveal(block, true)\n\t\t\t}\n\n\t\t\tconst redacted = requestData\n\t\t\t\t.slice(section.fromIndex, section.toIndex)\n\t\t\tawait writeWithReveal(redacted, false)\n\t\t\tcurrentIndex = section.toIndex\n\t\t}\n\n\t\t// write if redactions were there\n\t\tconst lastBlockStart = redactions?.[redactions.length - 1]\n\t\t\t?.toIndex || 0\n\t\tconst block = requestData.slice(lastBlockStart)\n\t\tif(block.length) {\n\t\t\tawait writeWithReveal(block, true)\n\t\t}\n\t}\n\n\tasync function writeRedactedZk() {\n\t\tlet blocksWritten = tunnel.transcript.length\n\t\tawait tunnel.tls.write(requestData)\n\t\tblocksWritten = tunnel.transcript.length - blocksWritten\n\t\tsetRevealOfLastSentBlocks(\n\t\t\t{\n\t\t\t\ttype: 'zk',\n\t\t\t\tredactedPlaintext: redactSlices(requestData, redactions)\n\t\t\t},\n\t\t\tblocksWritten\n\t\t)\n\t}\n\n\t/**\n\t * Write data to the tunnel, with the option to mark the packet\n\t * as revealable to the attestor or not\n\t */\n\tasync function writeWithReveal(data: Uint8Array, reveal: boolean) {\n\t\t// if the reveal state has changed, update the traffic keys\n\t\t// to not accidentally reveal a packet not meant to be revealed\n\t\t// and vice versa\n\t\tif(reveal !== lastMsgRevealed) {\n\t\t\tawait tunnel.tls.updateTrafficKeys()\n\t\t}\n\n\t\tlet blocksWritten = tunnel.transcript.length\n\t\tawait tunnel.write(data)\n\t\tblocksWritten = tunnel.transcript.length - blocksWritten\n\t\t// now we mark the packet to be revealed to the attestor\n\t\tsetRevealOfLastSentBlocks(reveal ? { type: 'complete' } : undefined, blocksWritten)\n\t\tlastMsgRevealed = reveal\n\t}\n\n\tfunction setRevealOfLastSentBlocks(\n\t\treveal: MessageRevealInfo | undefined,\n\t\tnBlocks = 1\n\t) {\n\t\tconst lastBlocks = getLastBlocks('client', nBlocks)\n\t\tif(!lastBlocks.length) {\n\t\t\treturn\n\t\t}\n\n\t\tfor(const block of lastBlocks) {\n\t\t\tsetRevealOfMessage(block.message, reveal)\n\t\t}\n\n\t}\n\n\tfunction getLastBlocks(sender: 'client' | 'server', nBlocks: number) {\n\t\t// set the correct index for the server blocks\n\t\tconst lastBlocks: typeof tunnel.transcript = []\n\t\tfor(let i = tunnel.transcript.length - 1;i >= 0;i--) {\n\t\t\tconst block = tunnel.transcript[i]\n\t\t\tif(block.sender === sender) {\n\t\t\t\tlastBlocks.push(block)\n\t\t\t\tif(lastBlocks.length === nBlocks) {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn lastBlocks\n\t}\n\n\t/**\n\t * Generate transcript with reveal data for the attestor to verify\n\t */\n\tasync function generateTranscript() {\n\t\tawait addServerSideReveals()\n\n\t\tconst startMs = Date.now()\n\t\tconst revealedMessages = await preparePacketsForReveal(\n\t\t\ttunnel.transcript,\n\t\t\trevealMap,\n\t\t\t{\n\t\t\t\tlogger,\n\t\t\t\tcipherSuite: cipherSuite!,\n\t\t\t\tonZkProgress(done, total) {\n\t\t\t\t\tconst timeSinceStartMs = Date.now() - startMs\n\t\t\t\t\tconst timePerBlockMs = timeSinceStartMs / done\n\t\t\t\t\tconst timeLeftMs = timePerBlockMs * (total - done)\n\t\t\t\t\tonStep?.({\n\t\t\t\t\t\tname: 'generating-zk-proofs',\n\t\t\t\t\t\tproofsDone: done,\n\t\t\t\t\t\tproofsTotal: total,\n\t\t\t\t\t\tapproxTimeLeftS: Math.round(timeLeftMs / 1000),\n\t\t\t\t\t})\n\t\t\t\t},\n\t\t\t\t...zkOpts,\n\t\t\t}\n\t\t)\n\n\t\treturn revealedMessages\n\t}\n\n\t/**\n\t * Add reveals for server side blocks, using\n\t * the provider's redaction function if available.\n\t * Otherwise, opts to reveal all server side blocks.\n\t */\n\tasync function addServerSideReveals() {\n\t\tconst allPackets = tunnel.transcript\n\t\tlet serverPacketsToReveal: RevealedSlices<ServerAppDataPacket> = 'all'\n\n\t\tconst packets: Transcript<Uint8Array> = []\n\t\tconst serverBlocks: ServerAppDataPacket[] = []\n\t\tfor(const b of allPackets) {\n\t\t\tif(b.message.type !== 'ciphertext'\n\t\t\t\t|| !isApplicationData(b.message, tlsVersion)\n\t\t\t) {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tconst plaintext = tlsVersion === 'TLS1_3'\n\t\t\t\t? b.message.plaintext.slice(0, -1)\n\t\t\t\t: b.message.plaintext\n\n\t\t\tpackets.push({\n\t\t\t\tmessage: plaintext,\n\t\t\t\tsender: b.sender\n\t\t\t})\n\n\t\t\tif(b.sender === 'server') {\n\t\t\t\tserverBlocks.push({\n\t\t\t\t\tplaintext:plaintext,\n\t\t\t\t\tmessage: b.message\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\n\t\tif(provider.getResponseRedactions) {\n\t\t\tserverPacketsToReveal = await getBlocksToReveal(\n\t\t\t\tserverBlocks,\n\t\t\t\ttotal => provider.getResponseRedactions!({\n\t\t\t\t\tresponse: total,\n\t\t\t\t\tparams,\n\t\t\t\t\tlogger,\n\t\t\t\t\tctx: PROVIDER_CTX\n\t\t\t\t}),\n\t\t\t\tperformOprf\n\t\t\t)\n\t\t}\n\n\t\tconst revealedPackets: Transcript<Uint8Array> = packets\n\t\t\t.filter(p => p.sender === 'client')\n\n\t\tif(serverPacketsToReveal === 'all') {\n\t\t\t// reveal all server side blocks\n\t\t\tfor(const { message, sender } of allPackets) {\n\t\t\t\tif(sender === 'server') {\n\t\t\t\t\tsetRevealOfMessage(message, { type: 'complete' })\n\t\t\t\t}\n\t\t\t}\n\n\t\t\trevealedPackets.push(...packets.filter(p => p.sender === 'server'))\n\t\t} else {\n\t\t\tfor(const {\n\t\t\t\tblock, redactedPlaintext, overshotToprfFromPrevBlock, toprfs, oprfRawMarkers\n\t\t\t} of serverPacketsToReveal) {\n\t\t\t\tsetRevealOfMessage(block.message, {\n\t\t\t\t\ttype: 'zk',\n\t\t\t\t\tredactedPlaintext,\n\t\t\t\t\ttoprfs,\n\t\t\t\t\toprfRawMarkers,\n\t\t\t\t\tovershotToprfFromPrevBlock\n\t\t\t\t})\n\t\t\t\trevealedPackets.push(\n\t\t\t\t\t{ sender: 'server', message: redactedPlaintext }\n\t\t\t\t)\n\t\t\t\tif(updateParametersFromOprfData && toprfs) {\n\t\t\t\t\tlet strParams = canonicalStringify(params)\n\t\t\t\t\tfor(const toprf of toprfs) {\n\t\t\t\t\t\tconst ogText = uint8ArrayToStr(toprf.plaintext)\n\t\t\t\t\t\tconst hashedText = binaryHashToStr(\n\t\t\t\t\t\t\ttoprf.nullifier,\n\t\t\t\t\t\t\ttoprf.dataLocation!.length\n\t\t\t\t\t\t)\n\t\t\t\t\t\tstrParams = strParams.replaceAll(ogText, hashedText)\n\t\t\t\t\t}\n\n\t\t\t\t\tparams = JSON.parse(strParams)\n\t\t\t\t}\n\n\t\t\t}\n\t\t}\n\n\t\tawait provider.assertValidProviderReceipt({\n\t\t\treceipt: revealedPackets,\n\t\t\tparams: {\n\t\t\t\t...params,\n\t\t\t\t// provide secret params for proper\n\t\t\t\t// request body validation\n\t\t\t\tsecretParams,\n\t\t\t},\n\t\t\tlogger,\n\t\t\tctx: PROVIDER_CTX\n\t\t})\n\n\t\t// reveal all handshake blocks\n\t\t// so the attestor can verify there was no\n\t\t// hanky-panky\n\t\tfor(const p of allPackets) {\n\t\t\tif(p.message.type !== 'ciphertext') {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\t// break the moment we hit the first\n\t\t\t// application data packet\n\t\t\tif(isApplicationData(p.message, tlsVersion)) {\n\t\t\t\tbreak\n\t\t\t}\n\n\t\t\tsetRevealOfMessage(p.message, { type: 'complete' })\n\t\t}\n\t}\n\n\tasync function performOprf(plaintext: Uint8Array) {\n\t\tlogger.info({ length: plaintext.length }, 'generating OPRF...')\n\n\t\tconst oprfOperator = zkOpts.oprfOperators?.['chacha20']\n\t\t\t|| makeDefaultOPRFOperator(\n\t\t\t\t'chacha20',\n\t\t\t\tzkEngine,\n\t\t\t\tlogger\n\t\t\t)\n\t\tconst reqData = await oprfOperator.generateOPRFRequestData(\n\t\t\tplaintext,\n\t\t\tTOPRF_DOMAIN_SEPARATOR,\n\t\t\tlogger\n\t\t)\n\t\tconst res = await client.rpc('toprf', {\n\t\t\tmaskedData: reqData.maskedData,\n\t\t\tengine: getEngineProto(zkEngine)\n\t\t})\n\t\tconst nullifier = await oprfOperator.finaliseOPRF(\n\t\t\tclient.initResponse!.toprfPublicKey,\n\t\t\treqData,\n\t\t\t[res]\n\t\t)\n\n\t\tconst data: TOPRFProofParams = {\n\t\t\tnullifier,\n\t\t\tresponses: [res],\n\t\t\tmask: reqData.mask,\n\t\t\tdataLocation: undefined,\n\t\t\tplaintext\n\t\t}\n\n\t\treturn data\n\t}\n\n\tfunction setRevealOfMessage(message: TLSPacketContext, reveal: MessageRevealInfo | undefined) {\n\t\tif(reveal) {\n\t\t\trevealMap.set(message, reveal)\n\t\t\treturn\n\t\t}\n\n\t\trevealMap.delete(message)\n\t}\n\n\tfunction getAddress() {\n\t\tconst { getAddress, getPublicKey } = signatureAlg\n\t\tconst pubKey = getPublicKey(ownerPrivateKey)\n\t\treturn getAddress(pubKey)\n\t}\n\n}", "import type { TLSConnectionOptions } from '@reclaimprotocol/tls'\nimport { concatenateUint8Arrays, makeTLSClient } from '@reclaimprotocol/tls'\n\nimport { makeRpcTcpTunnel } from '#src/client/tunnels/make-rpc-tcp-tunnel.ts'\nimport { DEFAULT_HTTPS_PORT } from '#src/config/index.ts'\nimport type { CreateTunnelRequest, RPCMessage } from '#src/proto/api.ts'\nimport type { CompleteTLSPacket, IAttestorClient, Logger, MakeTunnelFn, Transcript, Tunnel } from '#src/types/index.ts'\nimport { generateRpcMessageId, generateTunnelId } from '#src/utils/index.ts'\n\ntype ExtraTLSOptions = {\n\trequest: Partial<CreateTunnelRequest>\n\tlogger: Logger\n\t/**\n\t * Either create a client with the given initMessages,\n\t * or simply send the messages to the server via an existing\n\t * client\n\t *\n\t * @returns the client that was used to send the messages\n\t */\n\tconnect(initMessages: Partial<RPCMessage>[]): IAttestorClient\n\ttlsOpts?: TLSConnectionOptions\n}\n\ntype TLSTunnelProperties = {\n\ttranscript: Transcript<CompleteTLSPacket>\n\ttls: ReturnType<typeof makeTLSClient>\n}\n\n/**\n * Makes a TLS tunnel that connects to the server via RPC protocol\n */\nexport const makeRpcTlsTunnel: MakeTunnelFn<ExtraTLSOptions, TLSTunnelProperties> = async({\n\tonMessage, onClose,\n\ttlsOpts, request,\n\tconnect, logger\n}) => {\n\tconst transcript: TLSTunnelProperties['transcript'] = []\n\tconst tunnelId = request.id || generateTunnelId()\n\tlet tunnel: Tunnel<{}>\n\tlet client: IAttestorClient | undefined\n\n\tlet handshakeResolve: ((value: void) => void) | undefined\n\tlet handshakeReject: ((reason: any) => void) | undefined\n\tconst waitForHandshake = new Promise<void>((resolve, reject) => {\n\t\thandshakeResolve = resolve\n\t\thandshakeReject = reject\n\t})\n\n\tconst tls = makeTLSClient({\n\t\thost: request.host!,\n\t\t...tlsOpts,\n\t\tlogger,\n\t\tonHandshake() {\n\t\t\thandshakeResolve?.()\n\t\t},\n\t\tonApplicationData(plaintext) {\n\t\t\treturn onMessage?.(plaintext)\n\t\t},\n\t\tonTlsEnd: onConnectionClose,\n\t\tasync write(packet, ctx) {\n\t\t\tconst message = concatenateUint8Arrays([\n\t\t\t\tpacket.header,\n\t\t\t\tpacket.content\n\t\t\t])\n\t\t\ttranscript.push({\n\t\t\t\tsender: 'client',\n\t\t\t\tmessage: { ...ctx, data: message }\n\t\t\t})\n\n\t\t\tif(!tunnel) {\n\t\t\t\t// sends the packet as the initial message\n\t\t\t\t// to the plaintext tunnel. Prevents another\n\t\t\t\t// round trip to the server as we send the packet\n\t\t\t\t// in the same message as the tunnel creation.\n\t\t\t\tconst createTunnelReqId = generateRpcMessageId()\n\t\t\t\tclient = connect([\n\t\t\t\t\t{\n\t\t\t\t\t\tid: createTunnelReqId,\n\t\t\t\t\t\tcreateTunnelRequest: {\n\t\t\t\t\t\t\thost: request.host || '',\n\t\t\t\t\t\t\tport: request.port || DEFAULT_HTTPS_PORT,\n\t\t\t\t\t\t\tgeoLocation: request.geoLocation || '',\n\t\t\t\t\t\t\tproxySessionId: request.proxySessionId || '',\n\t\t\t\t\t\t\tid: tunnelId\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t{ tunnelMessage: { tunnelId, message } }\n\t\t\t\t])\n\n\t\t\t\ttry {\n\t\t\t\t\tawait makeTunnel()\n\t\t\t\t\t// wait for tunnel to be successfully created\n\t\t\t\t\tawait client.waitForResponse(createTunnelReqId)\n\t\t\t\t} catch(err) {\n\t\t\t\t\tonConnectionClose(err)\n\t\t\t\t}\n\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\treturn tunnel.write(message)\n\t\t},\n\t\tonRead(packet, ctx) {\n\t\t\ttranscript.push({\n\t\t\t\tsender: 'server',\n\t\t\t\tmessage: {\n\t\t\t\t\t...ctx,\n\t\t\t\t\tdata: concatenateUint8Arrays([\n\t\t\t\t\t\tpacket.header,\n\t\t\t\t\t\t// the TLS package sends us the decrypted\n\t\t\t\t\t\t// content, so we need to get the orginal\n\t\t\t\t\t\t// ciphertext received from the server\n\t\t\t\t\t\t// as that's part of the true transcript.\n\t\t\t\t\t\tctx.type === 'ciphertext'\n\t\t\t\t\t\t\t? ctx.ciphertext\n\t\t\t\t\t\t\t: packet.content\n\t\t\t\t\t])\n\t\t\t\t}\n\t\t\t})\n\t\t},\n\t})\n\n\tawait tls.startHandshake()\n\t// wait for handshake completion\n\tawait waitForHandshake\n\n\thandshakeResolve = handshakeReject = undefined\n\n\treturn {\n\t\ttranscript,\n\t\ttls,\n\t\twrite(data) {\n\t\t\treturn tls.write(data)\n\t\t},\n\t\tasync close(err) {\n\t\t\tonConnectionClose(err)\n\t\t\ttry {\n\t\t\t\tawait tunnel.close(err)\n\t\t\t} catch(err) {\n\t\t\t\tlogger?.error({ err }, 'err in close tunnel')\n\t\t\t}\n\t\t},\n\t}\n\n\tfunction onConnectionClose(err: Error | undefined) {\n\t\tonClose?.(err)\n\t\t// once the TLS connection is closed, we no longer\n\t\t// want to send `onClose` events back to the caller\n\t\t// of this function.\n\t\tonClose = undefined\n\t\thandshakeReject?.(\n\t\t\terr || new Error('TLS connection closed')\n\t\t)\n\t}\n\n\tasync function makeTunnel() {\n\t\ttunnel = await makeRpcTcpTunnel({\n\t\t\ttunnelId,\n\t\t\tclient: client!,\n\t\t\tonMessage(data) {\n\t\t\t\ttls.handleReceivedBytes(data)\n\t\t\t},\n\t\t\tonClose(err) {\n\t\t\t\ttls.end(err)\n\t\t\t},\n\t\t})\n\n\t\tlogger?.debug('plaintext tunnel created')\n\n\t\treturn tunnel\n\t}\n}", "import type {\n\tCipherSuite, TLSProtocolVersion } from '@reclaimprotocol/tls'\nimport {\n\tareUint8ArraysEqual,\n\tCONTENT_TYPE_MAP,\n\tcrypto,\n\tdecryptWrappedRecord,\n\tPACKET_TYPE,\n\tSUPPORTED_CIPHER_SUITE_MAP,\n\tuint8ArrayToBinaryStr,\n\tuint8ArrayToDataView } from '@reclaimprotocol/tls'\nimport { REDACTION_CHAR_CODE } from '@reclaimprotocol/zk-symmetric-crypto'\n\nimport { RPCMessage, RPCMessages } from '#src/proto/api.ts'\nimport type {\n\tCompleteTLSPacket,\n\tIDecryptedTranscript, IDecryptedTranscriptMessage,\n\tProviderField,\n\tRPCEvent,\n\tRPCEventMap,\n\tRPCEventType,\n\tRPCType,\n\tTranscript\n} from '#src/types/index.ts'\n\nconst DEFAULT_REDACTION_DATA = new Uint8Array(4)\n\t.fill(REDACTION_CHAR_CODE)\n\nexport { uint8ArrayToBinaryStr }\n\n/**\n * Decodes a Uint8Array to a UTF-8 string.\n */\nexport function uint8ArrayToStr(arr: Uint8Array) {\n\treturn new TextDecoder().decode(arr)\n}\n\n/**\n * Encodes a UTF-8 string to a Uint8Array.\n */\nexport function strToUint8Array(str: string): Uint8Array {\n\treturn new TextEncoder().encode(str)\n}\n\nexport function getTranscriptString(receipt: IDecryptedTranscript) {\n\tconst applMsgs = extractApplicationDataFromTranscript(receipt)\n\tconst strList: string[] = []\n\tfor(const { message, sender } of applMsgs) {\n\t\tconst content = uint8ArrayToStr(message)\n\t\tif(strList[strList.length - 1]?.startsWith(sender)) {\n\t\t\tstrList[strList.length - 1] += content\n\t\t} else {\n\t\t\tstrList.push(`${sender}: ${content}`)\n\t\t}\n\t}\n\n\treturn strList.join('\\n')\n}\n\nexport const unixTimestampSeconds = () => Math.floor(Date.now() / 1000)\n\n/**\n * Find index of needle in haystack\n */\nexport function findIndexInUint8Array(\n\thaystack: Uint8Array,\n\tneedle: Uint8Array,\n) {\n\tfor(let i = 0; i < haystack.length; i++) {\n\t\tif(areUint8ArraysEqual(haystack.slice(i, i + needle.length), needle)) {\n\t\t\treturn i\n\t\t}\n\t}\n\n\treturn -1\n}\n\n/**\n * Fetch the ZK algorithm for the specified cipher suite\n */\nexport function getZkAlgorithmForCipherSuite(cipherSuite: CipherSuite) {\n\tif(cipherSuite.includes('CHACHA20')) {\n\t\treturn 'chacha20'\n\t}\n\n\tif(cipherSuite.includes('AES_256_GCM')) {\n\t\treturn 'aes-256-ctr'\n\t}\n\n\tif(cipherSuite.includes('AES_128_GCM')) {\n\t\treturn 'aes-128-ctr'\n\t}\n\n\tthrow new Error(`${cipherSuite} not supported for ZK ops`)\n}\n\n/**\n * Get the pure ciphertext without any MAC,\n * or authentication tag,\n * @param content content w/o header\n * @param cipherSuite\n */\nexport function getPureCiphertext(\n\tcontent: Uint8Array,\n\tcipherSuite: CipherSuite\n) {\n\t// assert that the cipher suite is supported\n\tgetZkAlgorithmForCipherSuite(cipherSuite)\n\n\t// 16 => auth tag length\n\tcontent = content.slice(0, -16)\n\n\tconst {\n\t\tivLength: fixedIvLength,\n\t} = SUPPORTED_CIPHER_SUITE_MAP[cipherSuite]\n\t// 12 => total IV length\n\tconst recordIvLength = 12 - fixedIvLength\n\t// record IV is prefixed to the ciphertext\n\tcontent = content.slice(recordIvLength)\n\n\treturn content\n}\n\n\n/**\n * Get the 8 byte IV part that's stored in the record for some cipher suites\n * @param content content w/o header\n * @param cipherSuite\n */\nexport function getRecordIV(\n\tcontent: Uint8Array,\n\tcipherSuite: CipherSuite\n) {\n\t// assert that the cipher suite is supported\n\tgetZkAlgorithmForCipherSuite(cipherSuite)\n\n\tconst {\n\t\tivLength: fixedIvLength,\n\t} = SUPPORTED_CIPHER_SUITE_MAP[cipherSuite]\n\t// 12 => total IV length\n\tconst recordIvLength = 12 - fixedIvLength\n\treturn content.slice(0, recordIvLength)\n}\n\nexport function getProviderValue<P, S, T>(params: P, fn: ProviderField<P, S, T>, secretParams?: S) {\n\treturn typeof fn === 'function'\n\t\t// @ts-ignore\n\t\t? fn(params, secretParams) as T\n\t\t: fn\n}\n\nexport function generateRpcMessageId() {\n\treturn uint8ArrayToDataView(crypto.randomBytes(4)).getUint32(0)\n}\n\n/**\n * Random session ID for a WebSocket client.\n */\nexport function generateSessionId() {\n\treturn generateRpcMessageId()\n}\n\n/**\n * Random ID for a tunnel.\n */\nexport function generateTunnelId() {\n\treturn generateRpcMessageId()\n}\n\nexport function makeRpcEvent<T extends RPCEventType>(\n\ttype: T,\n\tdata: RPCEventMap[T]\n) {\n\tconst ev = new Event(type) as RPCEvent<T>\n\tev.data = data\n\treturn ev\n}\n\n/**\n * Get the RPC type from the key.\n * For eg. \"claimTunnelRequest\" ->\n * { type: 'claimTunnel', direction: 'request' }\n */\nexport function getRpcTypeFromKey(key: string) {\n\tif(key.endsWith('Request')) {\n\t\treturn {\n\t\t\ttype: key.slice(0, -7) as RPCType,\n\t\t\tdirection: 'request' as const\n\t\t}\n\t}\n\n\tif(key.endsWith('Response')) {\n\t\treturn {\n\t\t\ttype: key.slice(0, -8) as RPCType,\n\t\t\tdirection: 'response' as const\n\t\t}\n\t}\n}\n\n/**\n * Get the RPC response type from the RPC type.\n * For eg. \"claimTunnel\" -> \"claimTunnelResponse\"\n */\nexport function getRpcResponseType<T extends RPCType>(type: T) {\n\treturn `${type}Response` as const\n}\n\n/**\n * Get the RPC request type from the RPC type.\n * For eg. \"claimTunnel\" -> \"claimTunnelRequest\"\n */\nexport function getRpcRequestType<T extends RPCType>(type: T) {\n\treturn `${type}Request` as const\n}\n\nexport function isApplicationData(\n\tpacket: CompleteTLSPacket,\n\ttlsVersion: string | undefined\n) {\n\treturn packet.type === 'ciphertext'\n\t\t&& (\n\t\t\tpacket.contentType === 'APPLICATION_DATA'\n\t\t\t|| (\n\t\t\t\tpacket.data[0] === PACKET_TYPE.WRAPPED_RECORD\n\t\t\t\t&& tlsVersion === 'TLS1_2'\n\t\t\t)\n\t\t)\n}\n\n/**\n * Convert the received data from a WS to a Uint8Array\n */\nexport async function extractArrayBufferFromWsData(\n\tdata: unknown\n): Promise<Uint8Array> {\n\tif(data instanceof ArrayBuffer) {\n\t\treturn new Uint8Array(data)\n\t}\n\n\t// uint8array/Buffer\n\tif(\n\t\tdata instanceof Uint8Array\n\t\t|| (typeof data === 'object' && data && 'buffer' in data)\n\t) {\n\t\treturn data as Uint8Array\n\t}\n\n\tif(typeof data === 'string') {\n\t\treturn strToUint8Array(data)\n\t}\n\n\tif(typeof Blob !== 'undefined' && data instanceof Blob) {\n\t\treturn new Uint8Array(await data.arrayBuffer())\n\t}\n\n\tthrow new Error('unsupported data: ' + String(data))\n}\n\n/**\n * Check if the RPC message is a request or a response.\n */\nexport function getRpcRequest(msg: RPCMessage) {\n\tif(msg.requestError) {\n\t\treturn {\n\t\t\tdirection: 'response' as const,\n\t\t\ttype: 'error' as const\n\t\t}\n\t}\n\n\tfor(const key in msg) {\n\t\tif(!msg[key]) {\n\t\t\tcontinue\n\t\t}\n\n\t\tconst rpcType = getRpcTypeFromKey(key)\n\t\tif(!rpcType) {\n\t\t\tcontinue\n\t\t}\n\n\t\treturn rpcType\n\t}\n}\n\n/**\n * Finds all application data messages in a transcript\n * and returns them. Removes the \"contentType\" suffix from the message.\n * in TLS 1.3\n */\nexport function extractApplicationDataFromTranscript(\n\t{ transcript, tlsVersion }: IDecryptedTranscript,\n) {\n\tconst msgs: Transcript<Uint8Array> = []\n\tfor(const m of transcript) {\n\t\tlet message: Uint8Array\n\t\t// redacted msgs but with a valid packet header\n\t\t// can be considered application data messages\n\t\tif(m.redacted) {\n\t\t\tif(!m.plaintextLength) {\n\t\t\t\tmessage = DEFAULT_REDACTION_DATA\n\t\t\t} else {\n\t\t\t\tconst len = tlsVersion === 'TLS1_3'\n\t\t\t\t\t// remove content type suffix\n\t\t\t\t\t? m.plaintextLength - 1\n\t\t\t\t\t: m.plaintextLength\n\t\t\t\tmessage = new Uint8Array(len)\n\t\t\t\t\t.fill(REDACTION_CHAR_CODE)\n\t\t\t}\n\t\t\t// otherwise, we need to check the content type\n\t\t} else if(tlsVersion === 'TLS1_3') {\n\t\t\tconst contentType = m.message[m.message.length - 1]\n\t\t\tif(contentType !== CONTENT_TYPE_MAP['APPLICATION_DATA']) {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tmessage = m.message.slice(0, -1)\n\t\t} else if(m.recordHeader[0] === PACKET_TYPE.WRAPPED_RECORD) {\n\t\t\tmessage = m.message\n\t\t} else {\n\t\t\tcontinue\n\t\t}\n\n\t\tmsgs.push({ message, sender: m.sender })\n\t}\n\n\treturn msgs\n}\n\nexport type HandshakeTranscript<T> = {\n\tsender: 'client' | 'server'\n\tindex: number\n\tmessage: T\n}[]\n\nexport function extractHandshakeFromTranscript(\n\t{ transcript, tlsVersion }: { transcript: IDecryptedTranscriptMessage[], tlsVersion: TLSProtocolVersion }\n) {\n\tconst msgs: HandshakeTranscript<Uint8Array> = []\n\tfor(const [i, m] of transcript.entries()) {\n\t\tif(m.redacted) {\n\t\t\tbreak // stop at first encrypted message\n\t\t}\n\n\t\tlet message: Uint8Array\n\t\tif(m.recordHeader[0] === PACKET_TYPE.HELLO) {\n\t\t\tmessage = m.message\n\t\t} else if(m.recordHeader[0] === PACKET_TYPE.WRAPPED_RECORD) {\n\t\t\tif(tlsVersion === 'TLS1_3') {\n\t\t\t\tconst contentType = m.message[m.message.length - 1]\n\t\t\t\tif(contentType !== CONTENT_TYPE_MAP['HANDSHAKE']) {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\n\t\t\t\tmessage = m.message.slice(0, -1)\n\t\t\t} else {\n\t\t\t\tbreak\n\t\t\t}\n\t\t} else {\n\t\t\tcontinue\n\t\t}\n\n\t\tif(!message.length) {\n\t\t\tthrow new Error('unsupported handshake message')\n\t\t}\n\n\t\tmsgs.push({ message, sender: m.sender, index: i })\n\n\t}\n\n\treturn msgs\n}\n\nexport async function decryptDirect(directReveal, cipherSuite: CipherSuite, recordHeader: Uint8Array, serverTlsVersion: TLSProtocolVersion, content: Uint8Array) {\n\tconst { key, iv, recordNumber } = directReveal\n\tconst { cipher } = SUPPORTED_CIPHER_SUITE_MAP[cipherSuite]\n\tconst importedKey = await crypto.importKey(cipher, key)\n\treturn await decryptWrappedRecord(\n\t\tcontent,\n\t\t{\n\t\t\tiv,\n\t\t\tkey: importedKey,\n\t\t\trecordHeader,\n\t\t\trecordNumber,\n\t\t\tversion: serverTlsVersion,\n\t\t\tcipherSuite,\n\t\t}\n\t)\n}\n\nexport function packRpcMessages(...msgs: Partial<RPCMessage>[]) {\n\treturn RPCMessages.create({\n\t\tmessages: msgs.map(msg => (\n\t\t\tRPCMessage.create({\n\t\t\t\t...msg,\n\t\t\t\tid: msg.id || generateRpcMessageId()\n\t\t\t})\n\t\t))\n\t})\n}\n\n/**\n * Converts an Ethers struct (an array w named keys) to\n * a plain object. Recursively converts all structs inside.\n * Required to correctly JSON.stringify the struct.\n */\nexport function ethersStructToPlainObject<T>(struct: T): T {\n\tif(!Array.isArray(struct)) {\n\t\treturn struct\n\t}\n\n\tconst namedKeys = Object.keys(struct)\n\t\t.filter(key => isNaN(Number(key)))\n\t// seems to be an actual array\n\tif(!namedKeys.length) {\n\t\treturn struct.map(ethersStructToPlainObject) as any\n\t}\n\n\tconst obj: any = {}\n\tfor(const key of namedKeys) {\n\t\tobj[key] = ethersStructToPlainObject(struct[key])\n\t}\n\n\treturn obj\n}\n\nexport function isTls13Suite(suite: CipherSuite) {\n\treturn suite === 'TLS_AES_128_GCM_SHA256'\n\t\t|| suite === 'TLS_AES_256_GCM_SHA384'\n\t\t|| suite === 'TLS_CHACHA20_POLY1305_SHA256'\n}\n", "// Code generated by protoc-gen-ts_proto. DO NOT EDIT.\n// versions:\n// protoc-gen-ts_proto v2.5.0\n// protoc v6.31.1\n// source: api.proto\n\n/* eslint-disable */\nimport { BinaryReader, BinaryWriter } from \"@bufbuild/protobuf/wire\";\n\nexport const protobufPackage = \"reclaim_attestor\";\n\nexport const TranscriptMessageSenderType = {\n TRANSCRIPT_MESSAGE_SENDER_TYPE_UNKNOWN: 0,\n TRANSCRIPT_MESSAGE_SENDER_TYPE_CLIENT: 1,\n TRANSCRIPT_MESSAGE_SENDER_TYPE_SERVER: 2,\n UNRECOGNIZED: -1,\n} as const;\n\nexport type TranscriptMessageSenderType = typeof TranscriptMessageSenderType[keyof typeof TranscriptMessageSenderType];\n\nexport namespace TranscriptMessageSenderType {\n export type TRANSCRIPT_MESSAGE_SENDER_TYPE_UNKNOWN =\n typeof TranscriptMessageSenderType.TRANSCRIPT_MESSAGE_SENDER_TYPE_UNKNOWN;\n export type TRANSCRIPT_MESSAGE_SENDER_TYPE_CLIENT =\n typeof TranscriptMessageSenderType.TRANSCRIPT_MESSAGE_SENDER_TYPE_CLIENT;\n export type TRANSCRIPT_MESSAGE_SENDER_TYPE_SERVER =\n typeof TranscriptMessageSenderType.TRANSCRIPT_MESSAGE_SENDER_TYPE_SERVER;\n export type UNRECOGNIZED = typeof TranscriptMessageSenderType.UNRECOGNIZED;\n}\n\nexport function transcriptMessageSenderTypeFromJSON(object: any): TranscriptMessageSenderType {\n switch (object) {\n case 0:\n case \"TRANSCRIPT_MESSAGE_SENDER_TYPE_UNKNOWN\":\n return TranscriptMessageSenderType.TRANSCRIPT_MESSAGE_SENDER_TYPE_UNKNOWN;\n case 1:\n case \"TRANSCRIPT_MESSAGE_SENDER_TYPE_CLIENT\":\n return TranscriptMessageSenderType.TRANSCRIPT_MESSAGE_SENDER_TYPE_CLIENT;\n case 2:\n case \"TRANSCRIPT_MESSAGE_SENDER_TYPE_SERVER\":\n return TranscriptMessageSenderType.TRANSCRIPT_MESSAGE_SENDER_TYPE_SERVER;\n case -1:\n case \"UNRECOGNIZED\":\n default:\n return TranscriptMessageSenderType.UNRECOGNIZED;\n }\n}\n\nexport function transcriptMessageSenderTypeToJSON(object: TranscriptMessageSenderType): string {\n switch (object) {\n case TranscriptMessageSenderType.TRANSCRIPT_MESSAGE_SENDER_TYPE_UNKNOWN:\n return \"TRANSCRIPT_MESSAGE_SENDER_TYPE_UNKNOWN\";\n case TranscriptMessageSenderType.TRANSCRIPT_MESSAGE_SENDER_TYPE_CLIENT:\n return \"TRANSCRIPT_MESSAGE_SENDER_TYPE_CLIENT\";\n case TranscriptMessageSenderType.TRANSCRIPT_MESSAGE_SENDER_TYPE_SERVER:\n return \"TRANSCRIPT_MESSAGE_SENDER_TYPE_SERVER\";\n case TranscriptMessageSenderType.UNRECOGNIZED:\n default:\n return \"UNRECOGNIZED\";\n }\n}\n\nexport const ServiceSignatureType = {\n SERVICE_SIGNATURE_TYPE_UNKNOWN: 0,\n /**\n * SERVICE_SIGNATURE_TYPE_ETH - ETH keys & signature\n * keys: secp256k1\n * signature: ethereum flavor of ECDSA (https://goethereumbook.org/signature-generate/)\n */\n SERVICE_SIGNATURE_TYPE_ETH: 1,\n UNRECOGNIZED: -1,\n} as const;\n\nexport type ServiceSignatureType = typeof ServiceSignatureType[keyof typeof ServiceSignatureType];\n\nexport namespace ServiceSignatureType {\n export type SERVICE_SIGNATURE_TYPE_UNKNOWN = typeof ServiceSignatureType.SERVICE_SIGNATURE_TYPE_UNKNOWN;\n export type SERVICE_SIGNATURE_TYPE_ETH = typeof ServiceSignatureType.SERVICE_SIGNATURE_TYPE_ETH;\n export type UNRECOGNIZED = typeof ServiceSignatureType.UNRECOGNIZED;\n}\n\nexport function serviceSignatureTypeFromJSON(object: any): ServiceSignatureType {\n switch (object) {\n case 0:\n case \"SERVICE_SIGNATURE_TYPE_UNKNOWN\":\n return ServiceSignatureType.SERVICE_SIGNATURE_TYPE_UNKNOWN;\n case 1:\n case \"SERVICE_SIGNATURE_TYPE_ETH\":\n return ServiceSignatureType.SERVICE_SIGNATURE_TYPE_ETH;\n case -1:\n case \"UNRECOGNIZED\":\n default:\n return ServiceSignatureType.UNRECOGNIZED;\n }\n}\n\nexport function serviceSignatureTypeToJSON(object: ServiceSignatureType): string {\n switch (object) {\n case ServiceSignatureType.SERVICE_SIGNATURE_TYPE_UNKNOWN:\n return \"SERVICE_SIGNATURE_TYPE_UNKNOWN\";\n case ServiceSignatureType.SERVICE_SIGNATURE_TYPE_ETH:\n return \"SERVICE_SIGNATURE_TYPE_ETH\";\n case ServiceSignatureType.UNRECOGNIZED:\n default:\n return \"UNRECOGNIZED\";\n }\n}\n\nexport const AttestorVersion = {\n ATTESTOR_VERSION_UNKNOWN: 0,\n ATTESTOR_VERSION_1_0_0: 1,\n ATTESTOR_VERSION_1_1_0: 2,\n ATTESTOR_VERSION_2_0_0: 3,\n ATTESTOR_VERSION_2_0_1: 4,\n ATTESTOR_VERSION_3_0_0: 5,\n UNRECOGNIZED: -1,\n} as const;\n\nexport type AttestorVersion = typeof AttestorVersion[keyof typeof AttestorVersion];\n\nexport namespace AttestorVersion {\n export type ATTESTOR_VERSION_UNKNOWN = typeof AttestorVersion.ATTESTOR_VERSION_UNKNOWN;\n export type ATTESTOR_VERSION_1_0_0 = typeof AttestorVersion.ATTESTOR_VERSION_1_0_0;\n export type ATTESTOR_VERSION_1_1_0 = typeof AttestorVersion.ATTESTOR_VERSION_1_1_0;\n export type ATTESTOR_VERSION_2_0_0 = typeof AttestorVersion.ATTESTOR_VERSION_2_0_0;\n export type ATTESTOR_VERSION_2_0_1 = typeof AttestorVersion.ATTESTOR_VERSION_2_0_1;\n export type ATTESTOR_VERSION_3_0_0 = typeof AttestorVersion.ATTESTOR_VERSION_3_0_0;\n export type UNRECOGNIZED = typeof AttestorVersion.UNRECOGNIZED;\n}\n\nexport function attestorVersionFromJSON(object: any): AttestorVersion {\n switch (object) {\n case 0:\n case \"ATTESTOR_VERSION_UNKNOWN\":\n return AttestorVersion.ATTESTOR_VERSION_UNKNOWN;\n case 1:\n case \"ATTESTOR_VERSION_1_0_0\":\n return AttestorVersion.ATTESTOR_VERSION_1_0_0;\n case 2:\n case \"ATTESTOR_VERSION_1_1_0\":\n return AttestorVersion.ATTESTOR_VERSION_1_1_0;\n case 3:\n case \"ATTESTOR_VERSION_2_0_0\":\n return AttestorVersion.ATTESTOR_VERSION_2_0_0;\n case 4:\n case \"ATTESTOR_VERSION_2_0_1\":\n return AttestorVersion.ATTESTOR_VERSION_2_0_1;\n case 5:\n case \"ATTESTOR_VERSION_3_0_0\":\n return AttestorVersion.ATTESTOR_VERSION_3_0_0;\n case -1:\n case \"UNRECOGNIZED\":\n default:\n return AttestorVersion.UNRECOGNIZED;\n }\n}\n\nexport function attestorVersionToJSON(object: AttestorVersion): string {\n switch (object) {\n case AttestorVersion.ATTESTOR_VERSION_UNKNOWN:\n return \"ATTESTOR_VERSION_UNKNOWN\";\n case AttestorVersion.ATTESTOR_VERSION_1_0_0:\n return \"ATTESTOR_VERSION_1_0_0\";\n case AttestorVersion.ATTESTOR_VERSION_1_1_0:\n return \"ATTESTOR_VERSION_1_1_0\";\n case AttestorVersion.ATTESTOR_VERSION_2_0_0:\n return \"ATTESTOR_VERSION_2_0_0\";\n case AttestorVersion.ATTESTOR_VERSION_2_0_1:\n return \"ATTESTOR_VERSION_2_0_1\";\n case AttestorVersion.ATTESTOR_VERSION_3_0_0:\n return \"ATTESTOR_VERSION_3_0_0\";\n case AttestorVersion.UNRECOGNIZED:\n default:\n return \"UNRECOGNIZED\";\n }\n}\n\nexport const ErrorCode = {\n /**\n * ERROR_NO_ERROR - 0 should be treated as the absence of an error\n * should be used when gracefully closing the connection\n */\n ERROR_NO_ERROR: 0,\n /**\n * ERROR_INTERNAL - internal error in the attestor -- all \"Error/TypeError\"\n * messages are mapped to this\n */\n ERROR_INTERNAL: 1,\n /** ERROR_BAD_REQUEST - bad request from the client */\n ERROR_BAD_REQUEST: 2,\n /** ERROR_NOT_FOUND - the item requested was not found */\n ERROR_NOT_FOUND: 3,\n /** ERROR_PROXY_ERROR - error in the proxy */\n ERROR_PROXY_ERROR: 4,\n /**\n * ERROR_INVALID_CLAIM - claim creation failed -- i.e. the transcript\n * did not result in a valid claim\n */\n ERROR_INVALID_CLAIM: 5,\n /** ERROR_NETWORK_ERROR - any network error */\n ERROR_NETWORK_ERROR: 6,\n /** ERROR_PAYMENT_REFUSED - attestor refused to pay the costs */\n ERROR_PAYMENT_REFUSED: 7,\n /**\n * ERROR_BGP_ANNOUNCEMENT_OVERLAP - BGP announcement overlapped, potentially\n * compromising the claim's authenticity\n */\n ERROR_BGP_ANNOUNCEMENT_OVERLAP: 8,\n /** ERROR_AUTHENTICATION_FAILED - authentication failed */\n ERROR_AUTHENTICATION_FAILED: 9,\n /** ERROR_TIMEOUT - timed out waiting for the server to respond */\n ERROR_TIMEOUT: 10,\n /** ERROR_TOPRF_OUT_OF_BOUNDS - toprf couldn't be computed, as it went out of bounds */\n ERROR_TOPRF_OUT_OF_BOUNDS: 11,\n /** ERROR_CERTIFICATE_FETCH_FAILED - failed to fetch certificate bytes from the URL */\n ERROR_CERTIFICATE_FETCH_FAILED: 12,\n UNRECOGNIZED: -1,\n} as const;\n\nexport type ErrorCode = typeof ErrorCode[keyof typeof ErrorCode];\n\nexport namespace ErrorCode {\n export type ERROR_NO_ERROR = typeof ErrorCode.ERROR_NO_ERROR;\n export type ERROR_INTERNAL = typeof ErrorCode.ERROR_INTERNAL;\n export type ERROR_BAD_REQUEST = typeof ErrorCode.ERROR_BAD_REQUEST;\n export type ERROR_NOT_FOUND = typeof ErrorCode.ERROR_NOT_FOUND;\n export type ERROR_PROXY_ERROR = typeof ErrorCode.ERROR_PROXY_ERROR;\n export type ERROR_INVALID_CLAIM = typeof ErrorCode.ERROR_INVALID_CLAIM;\n export type ERROR_NETWORK_ERROR = typeof ErrorCode.ERROR_NETWORK_ERROR;\n export type ERROR_PAYMENT_REFUSED = typeof ErrorCode.ERROR_PAYMENT_REFUSED;\n export type ERROR_BGP_ANNOUNCEMENT_OVERLAP = typeof ErrorCode.ERROR_BGP_ANNOUNCEMENT_OVERLAP;\n export type ERROR_AUTHENTICATION_FAILED = typeof ErrorCode.ERROR_AUTHENTICATION_FAILED;\n export type ERROR_TIMEOUT = typeof ErrorCode.ERROR_TIMEOUT;\n export type ERROR_TOPRF_OUT_OF_BOUNDS = typeof ErrorCode.ERROR_TOPRF_OUT_OF_BOUNDS;\n export type ERROR_CERTIFICATE_FETCH_FAILED = typeof ErrorCode.ERROR_CERTIFICATE_FETCH_FAILED;\n export type UNRECOGNIZED = typeof ErrorCode.UNRECOGNIZED;\n}\n\nexport function errorCodeFromJSON(object: any): ErrorCode {\n switch (object) {\n case 0:\n case \"ERROR_NO_ERROR\":\n return ErrorCode.ERROR_NO_ERROR;\n case 1:\n case \"ERROR_INTERNAL\":\n return ErrorCode.ERROR_INTERNAL;\n case 2:\n case \"ERROR_BAD_REQUEST\":\n return ErrorCode.ERROR_BAD_REQUEST;\n case 3:\n case \"ERROR_NOT_FOUND\":\n return ErrorCode.ERROR_NOT_FOUND;\n case 4:\n case \"ERROR_PROXY_ERROR\":\n return ErrorCode.ERROR_PROXY_ERROR;\n case 5:\n case \"ERROR_INVALID_CLAIM\":\n return ErrorCode.ERROR_INVALID_CLAIM;\n case 6:\n case \"ERROR_NETWORK_ERROR\":\n return ErrorCode.ERROR_NETWORK_ERROR;\n case 7:\n case \"ERROR_PAYMENT_REFUSED\":\n return ErrorCode.ERROR_PAYMENT_REFUSED;\n case 8:\n case \"ERROR_BGP_ANNOUNCEMENT_OVERLAP\":\n return ErrorCode.ERROR_BGP_ANNOUNCEMENT_OVERLAP;\n case 9:\n case \"ERROR_AUTHENTICATION_FAILED\":\n return ErrorCode.ERROR_AUTHENTICATION_FAILED;\n case 10:\n case \"ERROR_TIMEOUT\":\n return ErrorCode.ERROR_TIMEOUT;\n case 11:\n case \"ERROR_TOPRF_OUT_OF_BOUNDS\":\n return ErrorCode.ERROR_TOPRF_OUT_OF_BOUNDS;\n case 12:\n case \"ERROR_CERTIFICATE_FETCH_FAILED\":\n return ErrorCode.ERROR_CERTIFICATE_FETCH_FAILED;\n case -1:\n case \"UNRECOGNIZED\":\n default:\n return ErrorCode.UNRECOGNIZED;\n }\n}\n\nexport function errorCodeToJSON(object: ErrorCode): string {\n switch (object) {\n case ErrorCode.ERROR_NO_ERROR:\n return \"ERROR_NO_ERROR\";\n case ErrorCode.ERROR_INTERNAL:\n return \"ERROR_INTERNAL\";\n case ErrorCode.ERROR_BAD_REQUEST:\n return \"ERROR_BAD_REQUEST\";\n case ErrorCode.ERROR_NOT_FOUND:\n return \"ERROR_NOT_FOUND\";\n case ErrorCode.ERROR_PROXY_ERROR:\n return \"ERROR_PROXY_ERROR\";\n case ErrorCode.ERROR_INVALID_CLAIM:\n return \"ERROR_INVALID_CLAIM\";\n case ErrorCode.ERROR_NETWORK_ERROR:\n return \"ERROR_NETWORK_ERROR\";\n case ErrorCode.ERROR_PAYMENT_REFUSED:\n return \"ERROR_PAYMENT_REFUSED\";\n case ErrorCode.ERROR_BGP_ANNOUNCEMENT_OVERLAP:\n return \"ERROR_BGP_ANNOUNCEMENT_OVERLAP\";\n case ErrorCode.ERROR_AUTHENTICATION_FAILED:\n return \"ERROR_AUTHENTICATION_FAILED\";\n case ErrorCode.ERROR_TIMEOUT:\n return \"ERROR_TIMEOUT\";\n case ErrorCode.ERROR_TOPRF_OUT_OF_BOUNDS:\n return \"ERROR_TOPRF_OUT_OF_BOUNDS\";\n case ErrorCode.ERROR_CERTIFICATE_FETCH_FAILED:\n return \"ERROR_CERTIFICATE_FETCH_FAILED\";\n case ErrorCode.UNRECOGNIZED:\n default:\n return \"UNRECOGNIZED\";\n }\n}\n\nexport const ZKProofEngine = { ZK_ENGINE_SNARKJS: 0, ZK_ENGINE_GNARK: 1, ZK_ENGINE_STWO: 2, UNRECOGNIZED: -1 } as const;\n\nexport type ZKProofEngine = typeof ZKProofEngine[keyof typeof ZKProofEngine];\n\nexport namespace ZKProofEngine {\n export type ZK_ENGINE_SNARKJS = typeof ZKProofEngine.ZK_ENGINE_SNARKJS;\n export type ZK_ENGINE_GNARK = typeof ZKProofEngine.ZK_ENGINE_GNARK;\n export type ZK_ENGINE_STWO = typeof ZKProofEngine.ZK_ENGINE_STWO;\n export type UNRECOGNIZED = typeof ZKProofEngine.UNRECOGNIZED;\n}\n\nexport function zKProofEngineFromJSON(object: any): ZKProofEngine {\n switch (object) {\n case 0:\n case \"ZK_ENGINE_SNARKJS\":\n return ZKProofEngine.ZK_ENGINE_SNARKJS;\n case 1:\n case \"ZK_ENGINE_GNARK\":\n return ZKProofEngine.ZK_ENGINE_GNARK;\n case 2:\n case \"ZK_ENGINE_STWO\":\n return ZKProofEngine.ZK_ENGINE_STWO;\n case -1:\n case \"UNRECOGNIZED\":\n default:\n return ZKProofEngine.UNRECOGNIZED;\n }\n}\n\nexport function zKProofEngineToJSON(object: ZKProofEngine): string {\n switch (object) {\n case ZKProofEngine.ZK_ENGINE_SNARKJS:\n return \"ZK_ENGINE_SNARKJS\";\n case ZKProofEngine.ZK_ENGINE_GNARK:\n return \"ZK_ENGINE_GNARK\";\n case ZKProofEngine.ZK_ENGINE_STWO:\n return \"ZK_ENGINE_STWO\";\n case ZKProofEngine.UNRECOGNIZED:\n default:\n return \"UNRECOGNIZED\";\n }\n}\n\nexport interface ClaimContext {\n /**\n * Extracted parameters from the TLS transcript\n * by the provider. Any parameters provided by the\n * user will be overwritten\n */\n extractedParameters: { [key: string]: string };\n /** Provider hash. TODO: docs */\n providerHash: string;\n}\n\nexport interface ClaimContext_ExtractedParametersEntry {\n key: string;\n value: string;\n}\n\nexport interface ProviderClaimData {\n /**\n * Name of the provider to generate the\n * claim using.\n * @example \"http\"\n */\n provider: string;\n /**\n * Canonically JSON stringified parameters\n * of the claim, as specified by the provider.\n * @example '{\"url\":\"https://example.com\",\"method\":\"GET\"}'\n */\n parameters: string;\n /**\n * Owner of the claim. Must be the public key/address\n * @example \"0x1234...\"\n */\n owner: string;\n /**\n * Unix timestamp in seconds of the claim being made.\n * Cannot be more than 10 minutes in the past or future\n */\n timestampS: number;\n /**\n * Any additional data you want to store with the claim.\n * Also expected to be a canonical JSON string.\n */\n context: string;\n /**\n * identifier of the claim;\n * Hash of (provider, parameters, context)\n */\n identifier: string;\n /** Legacy V1 Beacon epoch number */\n epoch: number;\n}\n\nexport interface ProviderClaimInfo {\n provider: string;\n parameters: string;\n context: string;\n}\n\nexport interface ErrorData {\n code: ErrorCode;\n message: string;\n data: string;\n}\n\nexport interface CreateTunnelRequest {\n /**\n * Assign a unique ID to the client for this tunnel\n * request. This ID will be used to identify the tunnel\n * to later send messages or disconnect the tunnel.\n */\n id: number;\n host: string;\n port: number;\n /**\n * Geo location from which the request will be made.\n * Provide 2 letter ISO country code. Leave empty\n * if you don't want to use geo location.\n *\n * Geo location is implemented using an https proxy\n * eg. US, IN, GB, etc.\n */\n geoLocation: string;\n /**\n * Session identifier for proxy IP persistence.\n *\n * When provided, ensures all requests within the same session\n * are routed through the same proxy IP address. Useful for\n * maintaining IP consistency across multiple requests.\n *\n * Can be a smallcase alphanumeric string of length 8-14 characters.\n * eg. \"mystring12345\", \"something1234\".\n */\n proxySessionId: string;\n}\n\nexport interface FetchCertificateBytesRequest {\n url: string;\n}\n\nexport interface FetchCertificateBytesResponse {\n bytes: Uint8Array;\n}\n\nexport interface DisconnectTunnelRequest {\n id: number;\n}\n\n/** empty message */\nexport interface Empty {\n}\n\nexport interface TunnelMessage {\n /** ID of the tunnel where this message belongs */\n tunnelId: number;\n message: Uint8Array;\n}\n\nexport interface TunnelDisconnectEvent {\n tunnelId: number;\n error: ErrorData | undefined;\n}\n\nexport interface MessageReveal {\n /**\n * direct reveal of the block via the key & IV\n * cipher (aes, chacha) for decryption\n * selected based on `cipherSuite`\n * determined by the server hello packet\n */\n directReveal?:\n | MessageReveal_MessageRevealDirect\n | undefined;\n /** partially or fully reveal the block via a zk proof */\n zkReveal?: MessageReveal_MessageRevealZk | undefined;\n}\n\nexport interface MessageReveal_MessageRevealDirect {\n /** key for the block */\n key: Uint8Array;\n /** IV for the block */\n iv: Uint8Array;\n /**\n * used to generate IV in authenticated\n * cipher suites\n */\n recordNumber: number;\n}\n\nexport interface MessageReveal_MessageRevealZk {\n proofs: MessageReveal_ZKProof[];\n toprfs: MessageReveal_TOPRFProof[];\n /** Markers for server-side OPRF computation (oprf-raw mode) */\n oprfRawMarkers: MessageReveal_OPRFRawMarker[];\n /**\n * If an oprf-raw marker from the previous packet overshot into this packet,\n * this indicates how many bytes of plaintext from this packet should be\n * collected to complete the server-side OPRF computation.\n */\n overshotOprfRawLength: number;\n}\n\n/** Marker for server-side OPRF computation (oprf-raw mode). */\nexport interface MessageReveal_OPRFRawMarker {\n /** Location of the data to OPRF in the revealed plaintext */\n dataLocation: DataSlice | undefined;\n}\n\nexport interface MessageReveal_ZKProof {\n /** the decrypted ciphertext as output by the ZK proof */\n decryptedRedactedCiphertext: Uint8Array;\n /** the plaintext that is fully or partially revealed */\n redactedPlaintext: Uint8Array;\n /**\n * start of this specific block\n * in the redactedPlaintext\n */\n startIdx: number;\n proofData: Uint8Array;\n}\n\nexport interface MessageReveal_TOPRFProof {\n /**\n * start of this specific block\n * in the redactedPlaintext\n */\n startIdx: number;\n proofData: Uint8Array;\n /**\n * If this block's proof contains an OPRF'd piece of data,\n * then provide the OPRF data here\n */\n payload: TOPRFPayload | undefined;\n}\n\nexport interface TOPRFPayload {\n /** Location of the data in the chunk that was masked */\n dataLocation:\n | DataSlice\n | undefined;\n /** OPRF hash of the data */\n nullifier: Uint8Array;\n responses: TOPRFResponse[];\n}\n\nexport interface DataSlice {\n fromIndex: number;\n length: number;\n}\n\nexport interface ClaimRequestData {\n provider: string;\n parameters: string;\n /**\n * Owner of the claim. Must be the public key/address\n * of the signatures\n */\n owner: string;\n /**\n * Timestamp of the claim being made.\n * Cannot be more than 10 minutes in the past\n * or in the future\n */\n timestampS: number;\n context: string;\n}\n\nexport interface ClaimTeeBundleRequest {\n /** TEE verification bundle containing attestations and signed data */\n verificationBundle: Uint8Array;\n /** Data describing the claim you want to prove */\n data:\n | ClaimRequestData\n | undefined;\n /** User signature on the request */\n signatures: ClaimTeeBundleRequest_Signatures | undefined;\n}\n\nexport interface ClaimTeeBundleRequest_Signatures {\n /**\n * Signature of ClaimTeeBundleRequest\n * with empty \"signatures\" field\n */\n requestSignature: Uint8Array;\n}\n\nexport interface ClaimTeeBundleResponse {\n /** The original request that was made */\n request: ClaimTeeBundleRequest | undefined;\n claim?: ProviderClaimData | undefined;\n error?: ErrorData | undefined;\n signatures: ClaimTeeBundleResponse_Signatures | undefined;\n}\n\nexport interface ClaimTeeBundleResponse_Signatures {\n /** Address of the attestor that has signed the claim */\n attestorAddress: string;\n /**\n * Signature of `stringifyProviderClaimData(claim)`,\n * if the claim was successful\n */\n claimSignature: Uint8Array;\n /**\n * Signature of the complete ClaimTeeBundleResponse\n * structure with empty \"signatures\" field\n */\n resultSignature: Uint8Array;\n}\n\nexport interface ClaimTunnelRequest {\n /**\n * parameters supplied to establish the tunnel\n * & connect to the end server\n */\n request:\n | CreateTunnelRequest\n | undefined;\n /** data describing the claim you want to prove */\n data:\n | ClaimRequestData\n | undefined;\n /**\n * messages from the client & server\n * in the order they were sent/received\n *\n * Attach a proof (if any) to each message\n * to reveal the contents of the message inside\n *\n * The revealed messages should support the proving\n * of the claim as defined in the provider's implementation\n */\n transcript: ClaimTunnelRequest_TranscriptMessage[];\n signatures:\n | ClaimTunnelRequest_Signatures\n | undefined;\n /** type of ZK engine used. SnarkJS or Gnark */\n zkEngine: ZKProofEngine;\n /** server and client fixed IVs needed for ZK validation */\n fixedServerIV: Uint8Array;\n fixedClientIV: Uint8Array;\n}\n\nexport interface ClaimTunnelRequest_Signatures {\n /**\n * signature of ClaimTunnelRequest\n * with empty \"signatures\" field\n */\n requestSignature: Uint8Array;\n}\n\nexport interface ClaimTunnelRequest_TranscriptMessage {\n /** client or server */\n sender: TranscriptMessageSenderType;\n /** packet data */\n message: Uint8Array;\n reveal: MessageReveal | undefined;\n}\n\nexport interface ClaimTunnelResponse {\n /** The original request that was made to claim the tunnel */\n request: ClaimTunnelRequest | undefined;\n claim?: ProviderClaimData | undefined;\n error?: ErrorData | undefined;\n signatures: ClaimTunnelResponse_Signatures | undefined;\n}\n\nexport interface ClaimTunnelResponse_Signatures {\n /** Address of the attestor that has signed the claim */\n attestorAddress: string;\n /**\n * signature of `stringifyProviderClaimData(claim)`,\n * if the claim was successful\n */\n claimSignature: Uint8Array;\n /**\n * signature of the complete ClaimTunnelResponse\n * structure with empty \"signatures\" field\n */\n resultSignature: Uint8Array;\n}\n\nexport interface RequestClaimOnAvsRequest {\n /**\n * Chain ID of the chain on which the claim is to be made\n * @example 17000 (holesky)\n */\n chainId: number;\n /** Serialised JSON string of the ClaimRequest struct */\n jsonCreateClaimRequest: string;\n /** ETH signature of the `ClaimRequest` struct */\n requestSignature: Uint8Array;\n}\n\nexport interface RequestClaimOnAvsResponse {\n txHash: string;\n taskIndex: number;\n jsonTask: string;\n}\n\nexport interface CompleteClaimOnAvsRequest {\n /**\n * Chain ID of the chain on which the claim is to be made\n * @example 17000 (holesky)\n */\n chainId: number;\n taskIndex: number;\n completedTaskJson: string;\n}\n\nexport interface CompleteClaimOnAvsResponse {\n txHash: string;\n taskCompletedObjectJson: string;\n}\n\nexport interface CreateTaskOnMechainRequest {\n timestamp: number;\n}\n\nexport interface CreateTaskOnMechainResponse {\n taskId: number;\n requiredAttestors: number;\n hosts: string[];\n}\n\nexport interface AuthenticatedUserData {\n /** Unique identifier for the user */\n id: string;\n createdAt: number;\n /**\n * Unix timestamp in seconds when the user's\n * authentication will expire.\n */\n expiresAt: number;\n /**\n * List of allowed hosts the user is allowed to connect to.\n * Will throw a BAD_REQUEST error if the user tries to connect.\n * Pass an empty list to allow all hosts.\n */\n hostWhitelist: string[];\n}\n\nexport interface AuthenticationRequest {\n data:\n | AuthenticatedUserData\n | undefined;\n /** Signature of the `userData` */\n signature: Uint8Array;\n}\n\nexport interface InitRequest {\n /** Attestor client version */\n clientVersion: AttestorVersion;\n /** Signature type used & expected by the user */\n signatureType: ServiceSignatureType;\n /**\n * Request the attestor to authenticate the user\n * with the given data. If auth fails, will return\n * an AUTHENTICATION_FAILED error.\n */\n auth: AuthenticationRequest | undefined;\n}\n\nexport interface InitResponse {\n toprfPublicKey: Uint8Array;\n /** Address of the attestor */\n attestorAddress: string;\n}\n\nexport interface TOPRFRequest {\n maskedData: Uint8Array;\n engine: ZKProofEngine;\n}\n\nexport interface TOPRFResponse {\n publicKeyShare: Uint8Array;\n /** OPRF output */\n evaluated: Uint8Array;\n c: Uint8Array;\n r: Uint8Array;\n}\n\nexport interface RPCMessage {\n /**\n * Per connection unique RPC message ID. Either party sending a\n * duplicate ID will do nothing except confuse the other party.\n *\n * For response messages, the ID should be the same as the request\n * to which it is responding.\n */\n id: number;\n initRequest?:\n | InitRequest\n | undefined;\n /** Response to the init request. */\n initResponse?:\n | InitResponse\n | undefined;\n /**\n * Data representing an error in the WebSocket connection.\n * The party sending this message should close the connection\n * immediately after sending this message.\n */\n connectionTerminationAlert?:\n | ErrorData\n | undefined;\n /**\n * Data representing an error in the attestor's\n * request to the server. This should be sent in case\n * there was an error in processing the request.\n */\n requestError?:\n | ErrorData\n | undefined;\n /** Create a tunnel to the specified host & port. */\n createTunnelRequest?: CreateTunnelRequest | undefined;\n createTunnelResponse?:\n | Empty\n | undefined;\n /** Disconnect a tunnel. */\n disconnectTunnelRequest?: DisconnectTunnelRequest | undefined;\n disconnectTunnelResponse?:\n | Empty\n | undefined;\n /**\n * Message to send through a tunnel. Client can send\n * this message to forward data to the server.\n */\n tunnelMessage?:\n | TunnelMessage\n | undefined;\n /**\n * Event indicating that a tunnel has been disconnected.\n * The client should not send any more messages through\n * this tunnel.\n */\n tunnelDisconnectEvent?:\n | TunnelDisconnectEvent\n | undefined;\n /**\n * Using the transcript of a tunnel, make a claim.\n * The tunnel must be disconnected before making a claim.\n */\n claimTunnelRequest?: ClaimTunnelRequest | undefined;\n claimTunnelResponse?:\n | ClaimTunnelResponse\n | undefined;\n /**\n * Request the attestor to pay for the claim on the chain.\n * The Attestor can choose to reject the request.\n */\n createClaimOnChainRequest?: RequestClaimOnAvsRequest | undefined;\n createClaimOnChainResponse?:\n | RequestClaimOnAvsResponse\n | undefined;\n /** Submit the work done for the claim on the chain. */\n completeClaimOnChainRequest?: CompleteClaimOnAvsRequest | undefined;\n completeClaimOnChainResponse?:\n | CompleteClaimOnAvsResponse\n | undefined;\n /** Request to perform thresholded OPRF */\n toprfRequest?: TOPRFRequest | undefined;\n toprfResponse?:\n | TOPRFResponse\n | undefined;\n /** Request the attestor to create a Task on the ReclaimTask contract. */\n createTaskOnMechainRequest?: CreateTaskOnMechainRequest | undefined;\n createTaskOnMechainResponse?:\n | CreateTaskOnMechainResponse\n | undefined;\n /** Claim a TEE verification bundle instead of traditional TLS transcript */\n claimTeeBundleRequest?: ClaimTeeBundleRequest | undefined;\n claimTeeBundleResponse?:\n | ClaimTeeBundleResponse\n | undefined;\n /**\n * Request the attestor to fetch certificate bytes from a URL. This RPC\n * is there as a helper for clients that cannot directly fetch certificates\n * due to network restrictions.\n */\n fetchCertificateBytesRequest?: FetchCertificateBytesRequest | undefined;\n fetchCertificateBytesResponse?: FetchCertificateBytesResponse | undefined;\n}\n\nexport interface RPCMessages {\n messages: RPCMessage[];\n}\n\nfunction createBaseClaimContext(): ClaimContext {\n return { extractedParameters: {}, providerHash: \"\" };\n}\n\nexport const ClaimContext: MessageFns<ClaimContext> = {\n encode(message: ClaimContext, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n Object.entries(message.extractedParameters).forEach(([key, value]) => {\n ClaimContext_ExtractedParametersEntry.encode({ key: key as any, value }, writer.uint32(10).fork()).join();\n });\n if (message.providerHash !== \"\") {\n writer.uint32(18).string(message.providerHash);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): ClaimContext {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseClaimContext();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1: {\n if (tag !== 10) {\n break;\n }\n\n const entry1 = ClaimContext_ExtractedParametersEntry.decode(reader, reader.uint32());\n if (entry1.value !== undefined) {\n message.extractedParameters[entry1.key] = entry1.value;\n }\n continue;\n }\n case 2: {\n if (tag !== 18) {\n break;\n }\n\n message.providerHash = reader.string();\n continue;\n }\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): ClaimContext {\n return {\n extractedParameters: isObject(object.extractedParameters)\n ? Object.entries(object.extractedParameters).reduce<{ [key: string]: string }>((acc, [key, value]) => {\n acc[key] = String(value);\n return acc;\n }, {})\n : {},\n providerHash: isSet(object.providerHash) ? globalThis.String(object.providerHash) : \"\",\n };\n },\n\n toJSON(message: ClaimContext): unknown {\n const obj: any = {};\n if (message.extractedParameters) {\n const entries = Object.entries(message.extractedParameters);\n if (entries.length > 0) {\n obj.extractedParameters = {};\n entries.forEach(([k, v]) => {\n obj.extractedParameters[k] = v;\n });\n }\n }\n if (message.providerHash !== \"\") {\n obj.providerHash = message.providerHash;\n }\n return obj;\n },\n\n create(base?: DeepPartial<ClaimContext>): ClaimContext {\n return ClaimContext.fromPartial(base ?? {});\n },\n fromPartial(object: DeepPartial<ClaimContext>): ClaimContext {\n const message = createBaseClaimContext();\n message.extractedParameters = Object.entries(object.extractedParameters ?? {}).reduce<{ [key: string]: string }>(\n (acc, [key, value]) => {\n if (value !== undefined) {\n acc[key] = globalThis.String(value);\n }\n return acc;\n },\n {},\n );\n message.providerHash = object.providerHash ?? \"\";\n return message;\n },\n};\n\nfunction createBaseClaimContext_ExtractedParametersEntry(): ClaimContext_ExtractedParametersEntry {\n return { key: \"\", value: \"\" };\n}\n\nexport const ClaimContext_ExtractedParametersEntry: MessageFns<ClaimContext_ExtractedParametersEntry> = {\n encode(message: ClaimContext_ExtractedParametersEntry, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.key !== \"\") {\n writer.uint32(10).string(message.key);\n }\n if (message.value !== \"\") {\n writer.uint32(18).string(message.value);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): ClaimContext_ExtractedParametersEntry {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseClaimContext_ExtractedParametersEntry();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1: {\n if (tag !== 10) {\n break;\n }\n\n message.key = reader.string();\n continue;\n }\n case 2: {\n if (tag !== 18) {\n break;\n }\n\n message.value = reader.string();\n continue;\n }\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): ClaimContext_ExtractedParametersEntry {\n return {\n key: isSet(object.key) ? globalThis.String(object.key) : \"\",\n value: isSet(object.value) ? globalThis.String(object.value) : \"\",\n };\n },\n\n toJSON(message: ClaimContext_ExtractedParametersEntry): unknown {\n const obj: any = {};\n if (message.key !== \"\") {\n obj.key = message.key;\n }\n if (message.value !== \"\") {\n obj.value = message.value;\n }\n return obj;\n },\n\n create(base?: DeepPartial<ClaimContext_ExtractedParametersEntry>): ClaimContext_ExtractedParametersEntry {\n return ClaimContext_ExtractedParametersEntry.fromPartial(base ?? {});\n },\n fromPartial(object: DeepPartial<ClaimContext_ExtractedParametersEntry>): ClaimContext_ExtractedParametersEntry {\n const message = createBaseClaimContext_ExtractedParametersEntry();\n message.key = object.key ?? \"\";\n message.value = object.value ?? \"\";\n return message;\n },\n};\n\nfunction createBaseProviderClaimData(): ProviderClaimData {\n return { provider: \"\", parameters: \"\", owner: \"\", timestampS: 0, context: \"\", identifier: \"\", epoch: 0 };\n}\n\nexport const ProviderClaimData: MessageFns<ProviderClaimData> = {\n encode(message: ProviderClaimData, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.provider !== \"\") {\n writer.uint32(10).string(message.provider);\n }\n if (message.parameters !== \"\") {\n writer.uint32(18).string(message.parameters);\n }\n if (message.owner !== \"\") {\n writer.uint32(26).string(message.owner);\n }\n if (message.timestampS !== 0) {\n writer.uint32(32).uint32(message.timestampS);\n }\n if (message.context !== \"\") {\n writer.uint32(50).string(message.context);\n }\n if (message.identifier !== \"\") {\n writer.uint32(66).string(message.identifier);\n }\n if (message.epoch !== 0) {\n writer.uint32(72).uint32(message.epoch);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): ProviderClaimData {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseProviderClaimData();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1: {\n if (tag !== 10) {\n break;\n }\n\n message.provider = reader.string();\n continue;\n }\n case 2: {\n if (tag !== 18) {\n break;\n }\n\n message.parameters = reader.string();\n continue;\n }\n case 3: {\n if (tag !== 26) {\n break;\n }\n\n message.owner = reader.string();\n continue;\n }\n case 4: {\n if (tag !== 32) {\n break;\n }\n\n message.timestampS = reader.uint32();\n continue;\n }\n case 6: {\n if (tag !== 50) {\n break;\n }\n\n message.context = reader.string();\n continue;\n }\n case 8: {\n if (tag !== 66) {\n break;\n }\n\n message.identifier = reader.string();\n continue;\n }\n case 9: {\n if (tag !== 72) {\n break;\n }\n\n message.epoch = reader.uint32();\n continue;\n }\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): ProviderClaimData {\n return {\n provider: isSet(object.provider) ? globalThis.String(object.provider) : \"\",\n parameters: isSet(object.parameters) ? globalThis.String(object.parameters) : \"\",\n owner: isSet(object.owner) ? globalThis.String(object.owner) : \"\",\n timestampS: isSet(object.timestampS) ? globalThis.Number(object.timestampS) : 0,\n context: isSet(object.context) ? globalThis.String(object.context) : \"\",\n identifier: isSet(object.identifier) ? globalThis.String(object.identifier) : \"\",\n epoch: isSet(object.epoch) ? globalThis.Number(object.epoch) : 0,\n };\n },\n\n toJSON(message: ProviderClaimData): unknown {\n const obj: any = {};\n if (message.provider !== \"\") {\n obj.provider = message.provider;\n }\n if (message.parameters !== \"\") {\n obj.parameters = message.parameters;\n }\n if (message.owner !== \"\") {\n obj.owner = message.owner;\n }\n if (message.timestampS !== 0) {\n obj.timestampS = Math.round(message.timestampS);\n }\n if (message.context !== \"\") {\n obj.context = message.context;\n }\n if (message.identifier !== \"\") {\n obj.identifier = message.identifier;\n }\n if (message.epoch !== 0) {\n obj.epoch = Math.round(message.epoch);\n }\n return obj;\n },\n\n create(base?: DeepPartial<ProviderClaimData>): ProviderClaimData {\n return ProviderClaimData.fromPartial(base ?? {});\n },\n fromPartial(object: DeepPartial<ProviderClaimData>): ProviderClaimData {\n const message = createBaseProviderClaimData();\n message.provider = object.provider ?? \"\";\n message.parameters = object.parameters ?? \"\";\n message.owner = object.owner ?? \"\";\n message.timestampS = object.timestampS ?? 0;\n message.context = object.context ?? \"\";\n message.identifier = object.identifier ?? \"\";\n message.epoch = object.epoch ?? 0;\n return message;\n },\n};\n\nfunction createBaseProviderClaimInfo(): ProviderClaimInfo {\n return { provider: \"\", parameters: \"\", context: \"\" };\n}\n\nexport const ProviderClaimInfo: MessageFns<ProviderClaimInfo> = {\n encode(message: ProviderClaimInfo, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.provider !== \"\") {\n writer.uint32(10).string(message.provider);\n }\n if (message.parameters !== \"\") {\n writer.uint32(18).string(message.parameters);\n }\n if (message.context !== \"\") {\n writer.uint32(50).string(message.context);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): ProviderClaimInfo {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseProviderClaimInfo();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1: {\n if (tag !== 10) {\n break;\n }\n\n message.provider = reader.string();\n continue;\n }\n case 2: {\n if (tag !== 18) {\n break;\n }\n\n message.parameters = reader.string();\n continue;\n }\n case 6: {\n if (tag !== 50) {\n break;\n }\n\n message.context = reader.string();\n continue;\n }\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): ProviderClaimInfo {\n return {\n provider: isSet(object.provider) ? globalThis.String(object.provider) : \"\",\n parameters: isSet(object.parameters) ? globalThis.String(object.parameters) : \"\",\n context: isSet(object.context) ? globalThis.String(object.context) : \"\",\n };\n },\n\n toJSON(message: ProviderClaimInfo): unknown {\n const obj: any = {};\n if (message.provider !== \"\") {\n obj.provider = message.provider;\n }\n if (message.parameters !== \"\") {\n obj.parameters = message.parameters;\n }\n if (message.context !== \"\") {\n obj.context = message.context;\n }\n return obj;\n },\n\n create(base?: DeepPartial<ProviderClaimInfo>): ProviderClaimInfo {\n return ProviderClaimInfo.fromPartial(base ?? {});\n },\n fromPartial(object: DeepPartial<ProviderClaimInfo>): ProviderClaimInfo {\n const message = createBaseProviderClaimInfo();\n message.provider = object.provider ?? \"\";\n message.parameters = object.parameters ?? \"\";\n message.context = object.context ?? \"\";\n return message;\n },\n};\n\nfunction createBaseErrorData(): ErrorData {\n return { code: 0, message: \"\", data: \"\" };\n}\n\nexport const ErrorData: MessageFns<ErrorData> = {\n encode(message: ErrorData, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.code !== 0) {\n writer.uint32(8).int32(message.code);\n }\n if (message.message !== \"\") {\n writer.uint32(18).string(message.message);\n }\n if (message.data !== \"\") {\n writer.uint32(26).string(message.data);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): ErrorData {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseErrorData();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1: {\n if (tag !== 8) {\n break;\n }\n\n message.code = reader.int32() as any;\n continue;\n }\n case 2: {\n if (tag !== 18) {\n break;\n }\n\n message.message = reader.string();\n continue;\n }\n case 3: {\n if (tag !== 26) {\n break;\n }\n\n message.data = reader.string();\n continue;\n }\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): ErrorData {\n return {\n code: isSet(object.code) ? errorCodeFromJSON(object.code) : 0,\n message: isSet(object.message) ? globalThis.String(object.message) : \"\",\n data: isSet(object.data) ? globalThis.String(object.data) : \"\",\n };\n },\n\n toJSON(message: ErrorData): unknown {\n const obj: any = {};\n if (message.code !== 0) {\n obj.code = errorCodeToJSON(message.code);\n }\n if (message.message !== \"\") {\n obj.message = message.message;\n }\n if (message.data !== \"\") {\n obj.data = message.data;\n }\n return obj;\n },\n\n create(base?: DeepPartial<ErrorData>): ErrorData {\n return ErrorData.fromPartial(base ?? {});\n },\n fromPartial(object: DeepPartial<ErrorData>): ErrorData {\n const message = createBaseErrorData();\n message.code = object.code ?? 0;\n message.message = object.message ?? \"\";\n message.data = object.data ?? \"\";\n return message;\n },\n};\n\nfunction createBaseCreateTunnelRequest(): CreateTunnelRequest {\n return { id: 0, host: \"\", port: 0, geoLocation: \"\", proxySessionId: \"\" };\n}\n\nexport const CreateTunnelRequest: MessageFns<CreateTunnelRequest> = {\n encode(message: CreateTunnelRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.id !== 0) {\n writer.uint32(8).uint32(message.id);\n }\n if (message.host !== \"\") {\n writer.uint32(18).string(message.host);\n }\n if (message.port !== 0) {\n writer.uint32(24).uint32(message.port);\n }\n if (message.geoLocation !== \"\") {\n writer.uint32(34).string(message.geoLocation);\n }\n if (message.proxySessionId !== \"\") {\n writer.uint32(42).string(message.proxySessionId);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): CreateTunnelRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseCreateTunnelRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1: {\n if (tag !== 8) {\n break;\n }\n\n message.id = reader.uint32();\n continue;\n }\n case 2: {\n if (tag !== 18) {\n break;\n }\n\n message.host = reader.string();\n continue;\n }\n case 3: {\n if (tag !== 24) {\n break;\n }\n\n message.port = reader.uint32();\n continue;\n }\n case 4: {\n if (tag !== 34) {\n break;\n }\n\n message.geoLocation = reader.string();\n continue;\n }\n case 5: {\n if (tag !== 42) {\n break;\n }\n\n message.proxySessionId = reader.string();\n continue;\n }\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): CreateTunnelRequest {\n return {\n id: isSet(object.id) ? globalThis.Number(object.id) : 0,\n host: isSet(object.host) ? globalThis.String(object.host) : \"\",\n port: isSet(object.port) ? globalThis.Number(object.port) : 0,\n geoLocation: isSet(object.geoLocation) ? globalThis.String(object.geoLocation) : \"\",\n proxySessionId: isSet(object.proxySessionId) ? globalThis.String(object.proxySessionId) : \"\",\n };\n },\n\n toJSON(message: CreateTunnelRequest): unknown {\n const obj: any = {};\n if (message.id !== 0) {\n obj.id = Math.round(message.id);\n }\n if (message.host !== \"\") {\n obj.host = message.host;\n }\n if (message.port !== 0) {\n obj.port = Math.round(message.port);\n }\n if (message.geoLocation !== \"\") {\n obj.geoLocation = message.geoLocation;\n }\n if (message.proxySessionId !== \"\") {\n obj.proxySessionId = message.proxySessionId;\n }\n return obj;\n },\n\n create(base?: DeepPartial<CreateTunnelRequest>): CreateTunnelRequest {\n return CreateTunnelRequest.fromPartial(base ?? {});\n },\n fromPartial(object: DeepPartial<CreateTunnelRequest>): CreateTunnelRequest {\n const message = createBaseCreateTunnelRequest();\n message.id = object.id ?? 0;\n message.host = object.host ?? \"\";\n message.port = object.port ?? 0;\n message.geoLocation = object.geoLocation ?? \"\";\n message.proxySessionId = object.proxySessionId ?? \"\";\n return message;\n },\n};\n\nfunction createBaseFetchCertificateBytesRequest(): FetchCertificateBytesRequest {\n return { url: \"\" };\n}\n\nexport const FetchCertificateBytesRequest: MessageFns<FetchCertificateBytesRequest> = {\n encode(message: FetchCertificateBytesRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.url !== \"\") {\n writer.uint32(10).string(message.url);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): FetchCertificateBytesRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseFetchCertificateBytesRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1: {\n if (tag !== 10) {\n break;\n }\n\n message.url = reader.string();\n continue;\n }\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): FetchCertificateBytesRequest {\n return { url: isSet(object.url) ? globalThis.String(object.url) : \"\" };\n },\n\n toJSON(message: FetchCertificateBytesRequest): unknown {\n const obj: any = {};\n if (message.url !== \"\") {\n obj.url = message.url;\n }\n return obj;\n },\n\n create(base?: DeepPartial<FetchCertificateBytesRequest>): FetchCertificateBytesRequest {\n return FetchCertificateBytesRequest.fromPartial(base ?? {});\n },\n fromPartial(object: DeepPartial<FetchCertificateBytesRequest>): FetchCertificateBytesRequest {\n const message = createBaseFetchCertificateBytesRequest();\n message.url = object.url ?? \"\";\n return message;\n },\n};\n\nfunction createBaseFetchCertificateBytesResponse(): FetchCertificateBytesResponse {\n return { bytes: new Uint8Array(0) };\n}\n\nexport const FetchCertificateBytesResponse: MessageFns<FetchCertificateBytesResponse> = {\n encode(message: FetchCertificateBytesResponse, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.bytes.length !== 0) {\n writer.uint32(10).bytes(message.bytes);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): FetchCertificateBytesResponse {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseFetchCertificateBytesResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1: {\n if (tag !== 10) {\n break;\n }\n\n message.bytes = reader.bytes();\n continue;\n }\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): FetchCertificateBytesResponse {\n return { bytes: isSet(object.bytes) ? bytesFromBase64(object.bytes) : new Uint8Array(0) };\n },\n\n toJSON(message: FetchCertificateBytesResponse): unknown {\n const obj: any = {};\n if (message.bytes.length !== 0) {\n obj.bytes = base64FromBytes(message.bytes);\n }\n return obj;\n },\n\n create(base?: DeepPartial<FetchCertificateBytesResponse>): FetchCertificateBytesResponse {\n return FetchCertificateBytesResponse.fromPartial(base ?? {});\n },\n fromPartial(object: DeepPartial<FetchCertificateBytesResponse>): FetchCertificateBytesResponse {\n const message = createBaseFetchCertificateBytesResponse();\n message.bytes = object.bytes ?? new Uint8Array(0);\n return message;\n },\n};\n\nfunction createBaseDisconnectTunnelRequest(): DisconnectTunnelRequest {\n return { id: 0 };\n}\n\nexport const DisconnectTunnelRequest: MessageFns<DisconnectTunnelRequest> = {\n encode(message: DisconnectTunnelRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.id !== 0) {\n writer.uint32(8).uint32(message.id);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): DisconnectTunnelRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseDisconnectTunnelRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1: {\n if (tag !== 8) {\n break;\n }\n\n message.id = reader.uint32();\n continue;\n }\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): DisconnectTunnelRequest {\n return { id: isSet(object.id) ? globalThis.Number(object.id) : 0 };\n },\n\n toJSON(message: DisconnectTunnelRequest): unknown {\n const obj: any = {};\n if (message.id !== 0) {\n obj.id = Math.round(message.id);\n }\n return obj;\n },\n\n create(base?: DeepPartial<DisconnectTunnelRequest>): DisconnectTunnelRequest {\n return DisconnectTunnelRequest.fromPartial(base ?? {});\n },\n fromPartial(object: DeepPartial<DisconnectTunnelRequest>): DisconnectTunnelRequest {\n const message = createBaseDisconnectTunnelRequest();\n message.id = object.id ?? 0;\n return message;\n },\n};\n\nfunction createBaseEmpty(): Empty {\n return {};\n}\n\nexport const Empty: MessageFns<Empty> = {\n encode(_: Empty, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): Empty {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseEmpty();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(_: any): Empty {\n return {};\n },\n\n toJSON(_: Empty): unknown {\n const obj: any = {};\n return obj;\n },\n\n create(base?: DeepPartial<Empty>): Empty {\n return Empty.fromPartial(base ?? {});\n },\n fromPartial(_: DeepPartial<Empty>): Empty {\n const message = createBaseEmpty();\n return message;\n },\n};\n\nfunction createBaseTunnelMessage(): TunnelMessage {\n return { tunnelId: 0, message: new Uint8Array(0) };\n}\n\nexport const TunnelMessage: MessageFns<TunnelMessage> = {\n encode(message: TunnelMessage, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.tunnelId !== 0) {\n writer.uint32(8).uint32(message.tunnelId);\n }\n if (message.message.length !== 0) {\n writer.uint32(18).bytes(message.message);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): TunnelMessage {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseTunnelMessage();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1: {\n if (tag !== 8) {\n break;\n }\n\n message.tunnelId = reader.uint32();\n continue;\n }\n case 2: {\n if (tag !== 18) {\n break;\n }\n\n message.message = reader.bytes();\n continue;\n }\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): TunnelMessage {\n return {\n tunnelId: isSet(object.tunnelId) ? globalThis.Number(object.tunnelId) : 0,\n message: isSet(object.message) ? bytesFromBase64(object.message) : new Uint8Array(0),\n };\n },\n\n toJSON(message: TunnelMessage): unknown {\n const obj: any = {};\n if (message.tunnelId !== 0) {\n obj.tunnelId = Math.round(message.tunnelId);\n }\n if (message.message.length !== 0) {\n obj.message = base64FromBytes(message.message);\n }\n return obj;\n },\n\n create(base?: DeepPartial<TunnelMessage>): TunnelMessage {\n return TunnelMessage.fromPartial(base ?? {});\n },\n fromPartial(object: DeepPartial<TunnelMessage>): TunnelMessage {\n const message = createBaseTunnelMessage();\n message.tunnelId = object.tunnelId ?? 0;\n message.message = object.message ?? new Uint8Array(0);\n return message;\n },\n};\n\nfunction createBaseTunnelDisconnectEvent(): TunnelDisconnectEvent {\n return { tunnelId: 0, error: undefined };\n}\n\nexport const TunnelDisconnectEvent: MessageFns<TunnelDisconnectEvent> = {\n encode(message: TunnelDisconnectEvent, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.tunnelId !== 0) {\n writer.uint32(8).uint32(message.tunnelId);\n }\n if (message.error !== undefined) {\n ErrorData.encode(message.error, writer.uint32(18).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): TunnelDisconnectEvent {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseTunnelDisconnectEvent();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1: {\n if (tag !== 8) {\n break;\n }\n\n message.tunnelId = reader.uint32();\n continue;\n }\n case 2: {\n if (tag !== 18) {\n break;\n }\n\n message.error = ErrorData.decode(reader, reader.uint32());\n continue;\n }\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): TunnelDisconnectEvent {\n return {\n tunnelId: isSet(object.tunnelId) ? globalThis.Number(object.tunnelId) : 0,\n error: isSet(object.error) ? ErrorData.fromJSON(object.error) : undefined,\n };\n },\n\n toJSON(message: TunnelDisconnectEvent): unknown {\n const obj: any = {};\n if (message.tunnelId !== 0) {\n obj.tunnelId = Math.round(message.tunnelId);\n }\n if (message.error !== undefined) {\n obj.error = ErrorData.toJSON(message.error);\n }\n return obj;\n },\n\n create(base?: DeepPartial<TunnelDisconnectEvent>): TunnelDisconnectEvent {\n return TunnelDisconnectEvent.fromPartial(base ?? {});\n },\n fromPartial(object: DeepPartial<TunnelDisconnectEvent>): TunnelDisconnectEvent {\n const message = createBaseTunnelDisconnectEvent();\n message.tunnelId = object.tunnelId ?? 0;\n message.error = (object.error !== undefined && object.error !== null)\n ? ErrorData.fromPartial(object.error)\n : undefined;\n return message;\n },\n};\n\nfunction createBaseMessageReveal(): MessageReveal {\n return { directReveal: undefined, zkReveal: undefined };\n}\n\nexport const MessageReveal: MessageFns<MessageReveal> = {\n encode(message: MessageReveal, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.directReveal !== undefined) {\n MessageReveal_MessageRevealDirect.encode(message.directReveal, writer.uint32(10).fork()).join();\n }\n if (message.zkReveal !== undefined) {\n MessageReveal_MessageRevealZk.encode(message.zkReveal, writer.uint32(18).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): MessageReveal {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseMessageReveal();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1: {\n if (tag !== 10) {\n break;\n }\n\n message.directReveal = MessageReveal_MessageRevealDirect.decode(reader, reader.uint32());\n continue;\n }\n case 2: {\n if (tag !== 18) {\n break;\n }\n\n message.zkReveal = MessageReveal_MessageRevealZk.decode(reader, reader.uint32());\n continue;\n }\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): MessageReveal {\n return {\n directReveal: isSet(object.directReveal)\n ? MessageReveal_MessageRevealDirect.fromJSON(object.directReveal)\n : undefined,\n zkReveal: isSet(object.zkReveal) ? MessageReveal_MessageRevealZk.fromJSON(object.zkReveal) : undefined,\n };\n },\n\n toJSON(message: MessageReveal): unknown {\n const obj: any = {};\n if (message.directReveal !== undefined) {\n obj.directReveal = MessageReveal_MessageRevealDirect.toJSON(message.directReveal);\n }\n if (message.zkReveal !== undefined) {\n obj.zkReveal = MessageReveal_MessageRevealZk.toJSON(message.zkReveal);\n }\n return obj;\n },\n\n create(base?: DeepPartial<MessageReveal>): MessageReveal {\n return MessageReveal.fromPartial(base ?? {});\n },\n fromPartial(object: DeepPartial<MessageReveal>): MessageReveal {\n const message = createBaseMessageReveal();\n message.directReveal = (object.directReveal !== undefined && object.directReveal !== null)\n ? MessageReveal_MessageRevealDirect.fromPartial(object.directReveal)\n : undefined;\n message.zkReveal = (object.zkReveal !== undefined && object.zkReveal !== null)\n ? MessageReveal_MessageRevealZk.fromPartial(object.zkReveal)\n : undefined;\n return message;\n },\n};\n\nfunction createBaseMessageReveal_MessageRevealDirect(): MessageReveal_MessageRevealDirect {\n return { key: new Uint8Array(0), iv: new Uint8Array(0), recordNumber: 0 };\n}\n\nexport const MessageReveal_MessageRevealDirect: MessageFns<MessageReveal_MessageRevealDirect> = {\n encode(message: MessageReveal_MessageRevealDirect, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.key.length !== 0) {\n writer.uint32(10).bytes(message.key);\n }\n if (message.iv.length !== 0) {\n writer.uint32(18).bytes(message.iv);\n }\n if (message.recordNumber !== 0) {\n writer.uint32(24).uint32(message.recordNumber);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): MessageReveal_MessageRevealDirect {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseMessageReveal_MessageRevealDirect();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1: {\n if (tag !== 10) {\n break;\n }\n\n message.key = reader.bytes();\n continue;\n }\n case 2: {\n if (tag !== 18) {\n break;\n }\n\n message.iv = reader.bytes();\n continue;\n }\n case 3: {\n if (tag !== 24) {\n break;\n }\n\n message.recordNumber = reader.uint32();\n continue;\n }\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): MessageReveal_MessageRevealDirect {\n return {\n key: isSet(object.key) ? bytesFromBase64(object.key) : new Uint8Array(0),\n iv: isSet(object.iv) ? bytesFromBase64(object.iv) : new Uint8Array(0),\n recordNumber: isSet(object.recordNumber) ? globalThis.Number(object.recordNumber) : 0,\n };\n },\n\n toJSON(message: MessageReveal_MessageRevealDirect): unknown {\n const obj: any = {};\n if (message.key.length !== 0) {\n obj.key = base64FromBytes(message.key);\n }\n if (message.iv.length !== 0) {\n obj.iv = base64FromBytes(message.iv);\n }\n if (message.recordNumber !== 0) {\n obj.recordNumber = Math.round(message.recordNumber);\n }\n return obj;\n },\n\n create(base?: DeepPartial<MessageReveal_MessageRevealDirect>): MessageReveal_MessageRevealDirect {\n return MessageReveal_MessageRevealDirect.fromPartial(base ?? {});\n },\n fromPartial(object: DeepPartial<MessageReveal_MessageRevealDirect>): MessageReveal_MessageRevealDirect {\n const message = createBaseMessageReveal_MessageRevealDirect();\n message.key = object.key ?? new Uint8Array(0);\n message.iv = object.iv ?? new Uint8Array(0);\n message.recordNumber = object.recordNumber ?? 0;\n return message;\n },\n};\n\nfunction createBaseMessageReveal_MessageRevealZk(): MessageReveal_MessageRevealZk {\n return { proofs: [], toprfs: [], oprfRawMarkers: [], overshotOprfRawLength: 0 };\n}\n\nexport const MessageReveal_MessageRevealZk: MessageFns<MessageReveal_MessageRevealZk> = {\n encode(message: MessageReveal_MessageRevealZk, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n for (const v of message.proofs) {\n MessageReveal_ZKProof.encode(v!, writer.uint32(10).fork()).join();\n }\n for (const v of message.toprfs) {\n MessageReveal_TOPRFProof.encode(v!, writer.uint32(18).fork()).join();\n }\n for (const v of message.oprfRawMarkers) {\n MessageReveal_OPRFRawMarker.encode(v!, writer.uint32(26).fork()).join();\n }\n if (message.overshotOprfRawLength !== 0) {\n writer.uint32(32).uint32(message.overshotOprfRawLength);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): MessageReveal_MessageRevealZk {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseMessageReveal_MessageRevealZk();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1: {\n if (tag !== 10) {\n break;\n }\n\n message.proofs.push(MessageReveal_ZKProof.decode(reader, reader.uint32()));\n continue;\n }\n case 2: {\n if (tag !== 18) {\n break;\n }\n\n message.toprfs.push(MessageReveal_TOPRFProof.decode(reader, reader.uint32()));\n continue;\n }\n case 3: {\n if (tag !== 26) {\n break;\n }\n\n message.oprfRawMarkers.push(MessageReveal_OPRFRawMarker.decode(reader, reader.uint32()));\n continue;\n }\n case 4: {\n if (tag !== 32) {\n break;\n }\n\n message.overshotOprfRawLength = reader.uint32();\n continue;\n }\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): MessageReveal_MessageRevealZk {\n return {\n proofs: globalThis.Array.isArray(object?.proofs)\n ? object.proofs.map((e: any) => MessageReveal_ZKProof.fromJSON(e))\n : [],\n toprfs: globalThis.Array.isArray(object?.toprfs)\n ? object.toprfs.map((e: any) => MessageReveal_TOPRFProof.fromJSON(e))\n : [],\n oprfRawMarkers: globalThis.Array.isArray(object?.oprfRawMarkers)\n ? object.oprfRawMarkers.map((e: any) => MessageReveal_OPRFRawMarker.fromJSON(e))\n : [],\n overshotOprfRawLength: isSet(object.overshotOprfRawLength) ? globalThis.Number(object.overshotOprfRawLength) : 0,\n };\n },\n\n toJSON(message: MessageReveal_MessageRevealZk): unknown {\n const obj: any = {};\n if (message.proofs?.length) {\n obj.proofs = message.proofs.map((e) => MessageReveal_ZKProof.toJSON(e));\n }\n if (message.toprfs?.length) {\n obj.toprfs = message.toprfs.map((e) => MessageReveal_TOPRFProof.toJSON(e));\n }\n if (message.oprfRawMarkers?.length) {\n obj.oprfRawMarkers = message.oprfRawMarkers.map((e) => MessageReveal_OPRFRawMarker.toJSON(e));\n }\n if (message.overshotOprfRawLength !== 0) {\n obj.overshotOprfRawLength = Math.round(message.overshotOprfRawLength);\n }\n return obj;\n },\n\n create(base?: DeepPartial<MessageReveal_MessageRevealZk>): MessageReveal_MessageRevealZk {\n return MessageReveal_MessageRevealZk.fromPartial(base ?? {});\n },\n fromPartial(object: DeepPartial<MessageReveal_MessageRevealZk>): MessageReveal_MessageRevealZk {\n const message = createBaseMessageReveal_MessageRevealZk();\n message.proofs = object.proofs?.map((e) => MessageReveal_ZKProof.fromPartial(e)) || [];\n message.toprfs = object.toprfs?.map((e) => MessageReveal_TOPRFProof.fromPartial(e)) || [];\n message.oprfRawMarkers = object.oprfRawMarkers?.map((e) => MessageReveal_OPRFRawMarker.fromPartial(e)) || [];\n message.overshotOprfRawLength = object.overshotOprfRawLength ?? 0;\n return message;\n },\n};\n\nfunction createBaseMessageReveal_OPRFRawMarker(): MessageReveal_OPRFRawMarker {\n return { dataLocation: undefined };\n}\n\nexport const MessageReveal_OPRFRawMarker: MessageFns<MessageReveal_OPRFRawMarker> = {\n encode(message: MessageReveal_OPRFRawMarker, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.dataLocation !== undefined) {\n DataSlice.encode(message.dataLocation, writer.uint32(10).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): MessageReveal_OPRFRawMarker {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseMessageReveal_OPRFRawMarker();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1: {\n if (tag !== 10) {\n break;\n }\n\n message.dataLocation = DataSlice.decode(reader, reader.uint32());\n continue;\n }\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): MessageReveal_OPRFRawMarker {\n return { dataLocation: isSet(object.dataLocation) ? DataSlice.fromJSON(object.dataLocation) : undefined };\n },\n\n toJSON(message: MessageReveal_OPRFRawMarker): unknown {\n const obj: any = {};\n if (message.dataLocation !== undefined) {\n obj.dataLocation = DataSlice.toJSON(message.dataLocation);\n }\n return obj;\n },\n\n create(base?: DeepPartial<MessageReveal_OPRFRawMarker>): MessageReveal_OPRFRawMarker {\n return MessageReveal_OPRFRawMarker.fromPartial(base ?? {});\n },\n fromPartial(object: DeepPartial<MessageReveal_OPRFRawMarker>): MessageReveal_OPRFRawMarker {\n const message = createBaseMessageReveal_OPRFRawMarker();\n message.dataLocation = (object.dataLocation !== undefined && object.dataLocation !== null)\n ? DataSlice.fromPartial(object.dataLocation)\n : undefined;\n return message;\n },\n};\n\nfunction createBaseMessageReveal_ZKProof(): MessageReveal_ZKProof {\n return {\n decryptedRedactedCiphertext: new Uint8Array(0),\n redactedPlaintext: new Uint8Array(0),\n startIdx: 0,\n proofData: new Uint8Array(0),\n };\n}\n\nexport const MessageReveal_ZKProof: MessageFns<MessageReveal_ZKProof> = {\n encode(message: MessageReveal_ZKProof, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.decryptedRedactedCiphertext.length !== 0) {\n writer.uint32(18).bytes(message.decryptedRedactedCiphertext);\n }\n if (message.redactedPlaintext.length !== 0) {\n writer.uint32(26).bytes(message.redactedPlaintext);\n }\n if (message.startIdx !== 0) {\n writer.uint32(32).uint32(message.startIdx);\n }\n if (message.proofData.length !== 0) {\n writer.uint32(42).bytes(message.proofData);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): MessageReveal_ZKProof {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseMessageReveal_ZKProof();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 2: {\n if (tag !== 18) {\n break;\n }\n\n message.decryptedRedactedCiphertext = reader.bytes();\n continue;\n }\n case 3: {\n if (tag !== 26) {\n break;\n }\n\n message.redactedPlaintext = reader.bytes();\n continue;\n }\n case 4: {\n if (tag !== 32) {\n break;\n }\n\n message.startIdx = reader.uint32();\n continue;\n }\n case 5: {\n if (tag !== 42) {\n break;\n }\n\n message.proofData = reader.bytes();\n continue;\n }\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): MessageReveal_ZKProof {\n return {\n decryptedRedactedCiphertext: isSet(object.decryptedRedactedCiphertext)\n ? bytesFromBase64(object.decryptedRedactedCiphertext)\n : new Uint8Array(0),\n redactedPlaintext: isSet(object.redactedPlaintext)\n ? bytesFromBase64(object.redactedPlaintext)\n : new Uint8Array(0),\n startIdx: isSet(object.startIdx) ? globalThis.Number(object.startIdx) : 0,\n proofData: isSet(object.proofData) ? bytesFromBase64(object.proofData) : new Uint8Array(0),\n };\n },\n\n toJSON(message: MessageReveal_ZKProof): unknown {\n const obj: any = {};\n if (message.decryptedRedactedCiphertext.length !== 0) {\n obj.decryptedRedactedCiphertext = base64FromBytes(message.decryptedRedactedCiphertext);\n }\n if (message.redactedPlaintext.length !== 0) {\n obj.redactedPlaintext = base64FromBytes(message.redactedPlaintext);\n }\n if (message.startIdx !== 0) {\n obj.startIdx = Math.round(message.startIdx);\n }\n if (message.proofData.length !== 0) {\n obj.proofData = base64FromBytes(message.proofData);\n }\n return obj;\n },\n\n create(base?: DeepPartial<MessageReveal_ZKProof>): MessageReveal_ZKProof {\n return MessageReveal_ZKProof.fromPartial(base ?? {});\n },\n fromPartial(object: DeepPartial<MessageReveal_ZKProof>): MessageReveal_ZKProof {\n const message = createBaseMessageReveal_ZKProof();\n message.decryptedRedactedCiphertext = object.decryptedRedactedCiphertext ?? new Uint8Array(0);\n message.redactedPlaintext = object.redactedPlaintext ?? new Uint8Array(0);\n message.startIdx = object.startIdx ?? 0;\n message.proofData = object.proofData ?? new Uint8Array(0);\n return message;\n },\n};\n\nfunction createBaseMessageReveal_TOPRFProof(): MessageReveal_TOPRFProof {\n return { startIdx: 0, proofData: new Uint8Array(0), payload: undefined };\n}\n\nexport const MessageReveal_TOPRFProof: MessageFns<MessageReveal_TOPRFProof> = {\n encode(message: MessageReveal_TOPRFProof, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.startIdx !== 0) {\n writer.uint32(8).uint32(message.startIdx);\n }\n if (message.proofData.length !== 0) {\n writer.uint32(18).bytes(message.proofData);\n }\n if (message.payload !== undefined) {\n TOPRFPayload.encode(message.payload, writer.uint32(26).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): MessageReveal_TOPRFProof {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseMessageReveal_TOPRFProof();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1: {\n if (tag !== 8) {\n break;\n }\n\n message.startIdx = reader.uint32();\n continue;\n }\n case 2: {\n if (tag !== 18) {\n break;\n }\n\n message.proofData = reader.bytes();\n continue;\n }\n case 3: {\n if (tag !== 26) {\n break;\n }\n\n message.payload = TOPRFPayload.decode(reader, reader.uint32());\n continue;\n }\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): MessageReveal_TOPRFProof {\n return {\n startIdx: isSet(object.startIdx) ? globalThis.Number(object.startIdx) : 0,\n proofData: isSet(object.proofData) ? bytesFromBase64(object.proofData) : new Uint8Array(0),\n payload: isSet(object.payload) ? TOPRFPayload.fromJSON(object.payload) : undefined,\n };\n },\n\n toJSON(message: MessageReveal_TOPRFProof): unknown {\n const obj: any = {};\n if (message.startIdx !== 0) {\n obj.startIdx = Math.round(message.startIdx);\n }\n if (message.proofData.length !== 0) {\n obj.proofData = base64FromBytes(message.proofData);\n }\n if (message.payload !== undefined) {\n obj.payload = TOPRFPayload.toJSON(message.payload);\n }\n return obj;\n },\n\n create(base?: DeepPartial<MessageReveal_TOPRFProof>): MessageReveal_TOPRFProof {\n return MessageReveal_TOPRFProof.fromPartial(base ?? {});\n },\n fromPartial(object: DeepPartial<MessageReveal_TOPRFProof>): MessageReveal_TOPRFProof {\n const message = createBaseMessageReveal_TOPRFProof();\n message.startIdx = object.startIdx ?? 0;\n message.proofData = object.proofData ?? new Uint8Array(0);\n message.payload = (object.payload !== undefined && object.payload !== null)\n ? TOPRFPayload.fromPartial(object.payload)\n : undefined;\n return message;\n },\n};\n\nfunction createBaseTOPRFPayload(): TOPRFPayload {\n return { dataLocation: undefined, nullifier: new Uint8Array(0), responses: [] };\n}\n\nexport const TOPRFPayload: MessageFns<TOPRFPayload> = {\n encode(message: TOPRFPayload, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.dataLocation !== undefined) {\n DataSlice.encode(message.dataLocation, writer.uint32(10).fork()).join();\n }\n if (message.nullifier.length !== 0) {\n writer.uint32(18).bytes(message.nullifier);\n }\n for (const v of message.responses) {\n TOPRFResponse.encode(v!, writer.uint32(26).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): TOPRFPayload {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseTOPRFPayload();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1: {\n if (tag !== 10) {\n break;\n }\n\n message.dataLocation = DataSlice.decode(reader, reader.uint32());\n continue;\n }\n case 2: {\n if (tag !== 18) {\n break;\n }\n\n message.nullifier = reader.bytes();\n continue;\n }\n case 3: {\n if (tag !== 26) {\n break;\n }\n\n message.responses.push(TOPRFResponse.decode(reader, reader.uint32()));\n continue;\n }\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): TOPRFPayload {\n return {\n dataLocation: isSet(object.dataLocation) ? DataSlice.fromJSON(object.dataLocation) : undefined,\n nullifier: isSet(object.nullifier) ? bytesFromBase64(object.nullifier) : new Uint8Array(0),\n responses: globalThis.Array.isArray(object?.responses)\n ? object.responses.map((e: any) => TOPRFResponse.fromJSON(e))\n : [],\n };\n },\n\n toJSON(message: TOPRFPayload): unknown {\n const obj: any = {};\n if (message.dataLocation !== undefined) {\n obj.dataLocation = DataSlice.toJSON(message.dataLocation);\n }\n if (message.nullifier.length !== 0) {\n obj.nullifier = base64FromBytes(message.nullifier);\n }\n if (message.responses?.length) {\n obj.responses = message.responses.map((e) => TOPRFResponse.toJSON(e));\n }\n return obj;\n },\n\n create(base?: DeepPartial<TOPRFPayload>): TOPRFPayload {\n return TOPRFPayload.fromPartial(base ?? {});\n },\n fromPartial(object: DeepPartial<TOPRFPayload>): TOPRFPayload {\n const message = createBaseTOPRFPayload();\n message.dataLocation = (object.dataLocation !== undefined && object.dataLocation !== null)\n ? DataSlice.fromPartial(object.dataLocation)\n : undefined;\n message.nullifier = object.nullifier ?? new Uint8Array(0);\n message.responses = object.responses?.map((e) => TOPRFResponse.fromPartial(e)) || [];\n return message;\n },\n};\n\nfunction createBaseDataSlice(): DataSlice {\n return { fromIndex: 0, length: 0 };\n}\n\nexport const DataSlice: MessageFns<DataSlice> = {\n encode(message: DataSlice, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.fromIndex !== 0) {\n writer.uint32(8).uint32(message.fromIndex);\n }\n if (message.length !== 0) {\n writer.uint32(16).uint32(message.length);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): DataSlice {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseDataSlice();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1: {\n if (tag !== 8) {\n break;\n }\n\n message.fromIndex = reader.uint32();\n continue;\n }\n case 2: {\n if (tag !== 16) {\n break;\n }\n\n message.length = reader.uint32();\n continue;\n }\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): DataSlice {\n return {\n fromIndex: isSet(object.fromIndex) ? globalThis.Number(object.fromIndex) : 0,\n length: isSet(object.length) ? globalThis.Number(object.length) : 0,\n };\n },\n\n toJSON(message: DataSlice): unknown {\n const obj: any = {};\n if (message.fromIndex !== 0) {\n obj.fromIndex = Math.round(message.fromIndex);\n }\n if (message.length !== 0) {\n obj.length = Math.round(message.length);\n }\n return obj;\n },\n\n create(base?: DeepPartial<DataSlice>): DataSlice {\n return DataSlice.fromPartial(base ?? {});\n },\n fromPartial(object: DeepPartial<DataSlice>): DataSlice {\n const message = createBaseDataSlice();\n message.fromIndex = object.fromIndex ?? 0;\n message.length = object.length ?? 0;\n return message;\n },\n};\n\nfunction createBaseClaimRequestData(): ClaimRequestData {\n return { provider: \"\", parameters: \"\", owner: \"\", timestampS: 0, context: \"\" };\n}\n\nexport const ClaimRequestData: MessageFns<ClaimRequestData> = {\n encode(message: ClaimRequestData, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.provider !== \"\") {\n writer.uint32(10).string(message.provider);\n }\n if (message.parameters !== \"\") {\n writer.uint32(18).string(message.parameters);\n }\n if (message.owner !== \"\") {\n writer.uint32(26).string(message.owner);\n }\n if (message.timestampS !== 0) {\n writer.uint32(32).uint32(message.timestampS);\n }\n if (message.context !== \"\") {\n writer.uint32(42).string(message.context);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): ClaimRequestData {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseClaimRequestData();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1: {\n if (tag !== 10) {\n break;\n }\n\n message.provider = reader.string();\n continue;\n }\n case 2: {\n if (tag !== 18) {\n break;\n }\n\n message.parameters = reader.string();\n continue;\n }\n case 3: {\n if (tag !== 26) {\n break;\n }\n\n message.owner = reader.string();\n continue;\n }\n case 4: {\n if (tag !== 32) {\n break;\n }\n\n message.timestampS = reader.uint32();\n continue;\n }\n case 5: {\n if (tag !== 42) {\n break;\n }\n\n message.context = reader.string();\n continue;\n }\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): ClaimRequestData {\n return {\n provider: isSet(object.provider) ? globalThis.String(object.provider) : \"\",\n parameters: isSet(object.parameters) ? globalThis.String(object.parameters) : \"\",\n owner: isSet(object.owner) ? globalThis.String(object.owner) : \"\",\n timestampS: isSet(object.timestampS) ? globalThis.Number(object.timestampS) : 0,\n context: isSet(object.context) ? globalThis.String(object.context) : \"\",\n };\n },\n\n toJSON(message: ClaimRequestData): unknown {\n const obj: any = {};\n if (message.provider !== \"\") {\n obj.provider = message.provider;\n }\n if (message.parameters !== \"\") {\n obj.parameters = message.parameters;\n }\n if (message.owner !== \"\") {\n obj.owner = message.owner;\n }\n if (message.timestampS !== 0) {\n obj.timestampS = Math.round(message.timestampS);\n }\n if (message.context !== \"\") {\n obj.context = message.context;\n }\n return obj;\n },\n\n create(base?: DeepPartial<ClaimRequestData>): ClaimRequestData {\n return ClaimRequestData.fromPartial(base ?? {});\n },\n fromPartial(object: DeepPartial<ClaimRequestData>): ClaimRequestData {\n const message = createBaseClaimRequestData();\n message.provider = object.provider ?? \"\";\n message.parameters = object.parameters ?? \"\";\n message.owner = object.owner ?? \"\";\n message.timestampS = object.timestampS ?? 0;\n message.context = object.context ?? \"\";\n return message;\n },\n};\n\nfunction createBaseClaimTeeBundleRequest(): ClaimTeeBundleRequest {\n return { verificationBundle: new Uint8Array(0), data: undefined, signatures: undefined };\n}\n\nexport const ClaimTeeBundleRequest: MessageFns<ClaimTeeBundleRequest> = {\n encode(message: ClaimTeeBundleRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.verificationBundle.length !== 0) {\n writer.uint32(10).bytes(message.verificationBundle);\n }\n if (message.data !== undefined) {\n ClaimRequestData.encode(message.data, writer.uint32(18).fork()).join();\n }\n if (message.signatures !== undefined) {\n ClaimTeeBundleRequest_Signatures.encode(message.signatures, writer.uint32(26).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): ClaimTeeBundleRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseClaimTeeBundleRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1: {\n if (tag !== 10) {\n break;\n }\n\n message.verificationBundle = reader.bytes();\n continue;\n }\n case 2: {\n if (tag !== 18) {\n break;\n }\n\n message.data = ClaimRequestData.decode(reader, reader.uint32());\n continue;\n }\n case 3: {\n if (tag !== 26) {\n break;\n }\n\n message.signatures = ClaimTeeBundleRequest_Signatures.decode(reader, reader.uint32());\n continue;\n }\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): ClaimTeeBundleRequest {\n return {\n verificationBundle: isSet(object.verificationBundle)\n ? bytesFromBase64(object.verificationBundle)\n : new Uint8Array(0),\n data: isSet(object.data) ? ClaimRequestData.fromJSON(object.data) : undefined,\n signatures: isSet(object.signatures) ? ClaimTeeBundleRequest_Signatures.fromJSON(object.signatures) : undefined,\n };\n },\n\n toJSON(message: ClaimTeeBundleRequest): unknown {\n const obj: any = {};\n if (message.verificationBundle.length !== 0) {\n obj.verificationBundle = base64FromBytes(message.verificationBundle);\n }\n if (message.data !== undefined) {\n obj.data = ClaimRequestData.toJSON(message.data);\n }\n if (message.signatures !== undefined) {\n obj.signatures = ClaimTeeBundleRequest_Signatures.toJSON(message.signatures);\n }\n return obj;\n },\n\n create(base?: DeepPartial<ClaimTeeBundleRequest>): ClaimTeeBundleRequest {\n return ClaimTeeBundleRequest.fromPartial(base ?? {});\n },\n fromPartial(object: DeepPartial<ClaimTeeBundleRequest>): ClaimTeeBundleRequest {\n const message = createBaseClaimTeeBundleRequest();\n message.verificationBundle = object.verificationBundle ?? new Uint8Array(0);\n message.data = (object.data !== undefined && object.data !== null)\n ? ClaimRequestData.fromPartial(object.data)\n : undefined;\n message.signatures = (object.signatures !== undefined && object.signatures !== null)\n ? ClaimTeeBundleRequest_Signatures.fromPartial(object.signatures)\n : undefined;\n return message;\n },\n};\n\nfunction createBaseClaimTeeBundleRequest_Signatures(): ClaimTeeBundleRequest_Signatures {\n return { requestSignature: new Uint8Array(0) };\n}\n\nexport const ClaimTeeBundleRequest_Signatures: MessageFns<ClaimTeeBundleRequest_Signatures> = {\n encode(message: ClaimTeeBundleRequest_Signatures, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.requestSignature.length !== 0) {\n writer.uint32(10).bytes(message.requestSignature);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): ClaimTeeBundleRequest_Signatures {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseClaimTeeBundleRequest_Signatures();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1: {\n if (tag !== 10) {\n break;\n }\n\n message.requestSignature = reader.bytes();\n continue;\n }\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): ClaimTeeBundleRequest_Signatures {\n return {\n requestSignature: isSet(object.requestSignature) ? bytesFromBase64(object.requestSignature) : new Uint8Array(0),\n };\n },\n\n toJSON(message: ClaimTeeBundleRequest_Signatures): unknown {\n const obj: any = {};\n if (message.requestSignature.length !== 0) {\n obj.requestSignature = base64FromBytes(message.requestSignature);\n }\n return obj;\n },\n\n create(base?: DeepPartial<ClaimTeeBundleRequest_Signatures>): ClaimTeeBundleRequest_Signatures {\n return ClaimTeeBundleRequest_Signatures.fromPartial(base ?? {});\n },\n fromPartial(object: DeepPartial<ClaimTeeBundleRequest_Signatures>): ClaimTeeBundleRequest_Signatures {\n const message = createBaseClaimTeeBundleRequest_Signatures();\n message.requestSignature = object.requestSignature ?? new Uint8Array(0);\n return message;\n },\n};\n\nfunction createBaseClaimTeeBundleResponse(): ClaimTeeBundleResponse {\n return { request: undefined, claim: undefined, error: undefined, signatures: undefined };\n}\n\nexport const ClaimTeeBundleResponse: MessageFns<ClaimTeeBundleResponse> = {\n encode(message: ClaimTeeBundleResponse, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.request !== undefined) {\n ClaimTeeBundleRequest.encode(message.request, writer.uint32(10).fork()).join();\n }\n if (message.claim !== undefined) {\n ProviderClaimData.encode(message.claim, writer.uint32(18).fork()).join();\n }\n if (message.error !== undefined) {\n ErrorData.encode(message.error, writer.uint32(26).fork()).join();\n }\n if (message.signatures !== undefined) {\n ClaimTeeBundleResponse_Signatures.encode(message.signatures, writer.uint32(34).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): ClaimTeeBundleResponse {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseClaimTeeBundleResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1: {\n if (tag !== 10) {\n break;\n }\n\n message.request = ClaimTeeBundleRequest.decode(reader, reader.uint32());\n continue;\n }\n case 2: {\n if (tag !== 18) {\n break;\n }\n\n message.claim = ProviderClaimData.decode(reader, reader.uint32());\n continue;\n }\n case 3: {\n if (tag !== 26) {\n break;\n }\n\n message.error = ErrorData.decode(reader, reader.uint32());\n continue;\n }\n case 4: {\n if (tag !== 34) {\n break;\n }\n\n message.signatures = ClaimTeeBundleResponse_Signatures.decode(reader, reader.uint32());\n continue;\n }\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): ClaimTeeBundleResponse {\n return {\n request: isSet(object.request) ? ClaimTeeBundleRequest.fromJSON(object.request) : undefined,\n claim: isSet(object.claim) ? ProviderClaimData.fromJSON(object.claim) : undefined,\n error: isSet(object.error) ? ErrorData.fromJSON(object.error) : undefined,\n signatures: isSet(object.signatures) ? ClaimTeeBundleResponse_Signatures.fromJSON(object.signatures) : undefined,\n };\n },\n\n toJSON(message: ClaimTeeBundleResponse): unknown {\n const obj: any = {};\n if (message.request !== undefined) {\n obj.request = ClaimTeeBundleRequest.toJSON(message.request);\n }\n if (message.claim !== undefined) {\n obj.claim = ProviderClaimData.toJSON(message.claim);\n }\n if (message.error !== undefined) {\n obj.error = ErrorData.toJSON(message.error);\n }\n if (message.signatures !== undefined) {\n obj.signatures = ClaimTeeBundleResponse_Signatures.toJSON(message.signatures);\n }\n return obj;\n },\n\n create(base?: DeepPartial<ClaimTeeBundleResponse>): ClaimTeeBundleResponse {\n return ClaimTeeBundleResponse.fromPartial(base ?? {});\n },\n fromPartial(object: DeepPartial<ClaimTeeBundleResponse>): ClaimTeeBundleResponse {\n const message = createBaseClaimTeeBundleResponse();\n message.request = (object.request !== undefined && object.request !== null)\n ? ClaimTeeBundleRequest.fromPartial(object.request)\n : undefined;\n message.claim = (object.claim !== undefined && object.claim !== null)\n ? ProviderClaimData.fromPartial(object.claim)\n : undefined;\n message.error = (object.error !== undefined && object.error !== null)\n ? ErrorData.fromPartial(object.error)\n : undefined;\n message.signatures = (object.signatures !== undefined && object.signatures !== null)\n ? ClaimTeeBundleResponse_Signatures.fromPartial(object.signatures)\n : undefined;\n return message;\n },\n};\n\nfunction createBaseClaimTeeBundleResponse_Signatures(): ClaimTeeBundleResponse_Signatures {\n return { attestorAddress: \"\", claimSignature: new Uint8Array(0), resultSignature: new Uint8Array(0) };\n}\n\nexport const ClaimTeeBundleResponse_Signatures: MessageFns<ClaimTeeBundleResponse_Signatures> = {\n encode(message: ClaimTeeBundleResponse_Signatures, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.attestorAddress !== \"\") {\n writer.uint32(10).string(message.attestorAddress);\n }\n if (message.claimSignature.length !== 0) {\n writer.uint32(18).bytes(message.claimSignature);\n }\n if (message.resultSignature.length !== 0) {\n writer.uint32(26).bytes(message.resultSignature);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): ClaimTeeBundleResponse_Signatures {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseClaimTeeBundleResponse_Signatures();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1: {\n if (tag !== 10) {\n break;\n }\n\n message.attestorAddress = reader.string();\n continue;\n }\n case 2: {\n if (tag !== 18) {\n break;\n }\n\n message.claimSignature = reader.bytes();\n continue;\n }\n case 3: {\n if (tag !== 26) {\n break;\n }\n\n message.resultSignature = reader.bytes();\n continue;\n }\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): ClaimTeeBundleResponse_Signatures {\n return {\n attestorAddress: isSet(object.attestorAddress) ? globalThis.String(object.attestorAddress) : \"\",\n claimSignature: isSet(object.claimSignature) ? bytesFromBase64(object.claimSignature) : new Uint8Array(0),\n resultSignature: isSet(object.resultSignature) ? bytesFromBase64(object.resultSignature) : new Uint8Array(0),\n };\n },\n\n toJSON(message: ClaimTeeBundleResponse_Signatures): unknown {\n const obj: any = {};\n if (message.attestorAddress !== \"\") {\n obj.attestorAddress = message.attestorAddress;\n }\n if (message.claimSignature.length !== 0) {\n obj.claimSignature = base64FromBytes(message.claimSignature);\n }\n if (message.resultSignature.length !== 0) {\n obj.resultSignature = base64FromBytes(message.resultSignature);\n }\n return obj;\n },\n\n create(base?: DeepPartial<ClaimTeeBundleResponse_Signatures>): ClaimTeeBundleResponse_Signatures {\n return ClaimTeeBundleResponse_Signatures.fromPartial(base ?? {});\n },\n fromPartial(object: DeepPartial<ClaimTeeBundleResponse_Signatures>): ClaimTeeBundleResponse_Signatures {\n const message = createBaseClaimTeeBundleResponse_Signatures();\n message.attestorAddress = object.attestorAddress ?? \"\";\n message.claimSignature = object.claimSignature ?? new Uint8Array(0);\n message.resultSignature = object.resultSignature ?? new Uint8Array(0);\n return message;\n },\n};\n\nfunction createBaseClaimTunnelRequest(): ClaimTunnelRequest {\n return {\n request: undefined,\n data: undefined,\n transcript: [],\n signatures: undefined,\n zkEngine: 0,\n fixedServerIV: new Uint8Array(0),\n fixedClientIV: new Uint8Array(0),\n };\n}\n\nexport const ClaimTunnelRequest: MessageFns<ClaimTunnelRequest> = {\n encode(message: ClaimTunnelRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.request !== undefined) {\n CreateTunnelRequest.encode(message.request, writer.uint32(10).fork()).join();\n }\n if (message.data !== undefined) {\n ClaimRequestData.encode(message.data, writer.uint32(18).fork()).join();\n }\n for (const v of message.transcript) {\n ClaimTunnelRequest_TranscriptMessage.encode(v!, writer.uint32(26).fork()).join();\n }\n if (message.signatures !== undefined) {\n ClaimTunnelRequest_Signatures.encode(message.signatures, writer.uint32(34).fork()).join();\n }\n if (message.zkEngine !== 0) {\n writer.uint32(40).int32(message.zkEngine);\n }\n if (message.fixedServerIV.length !== 0) {\n writer.uint32(50).bytes(message.fixedServerIV);\n }\n if (message.fixedClientIV.length !== 0) {\n writer.uint32(58).bytes(message.fixedClientIV);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): ClaimTunnelRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseClaimTunnelRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1: {\n if (tag !== 10) {\n break;\n }\n\n message.request = CreateTunnelRequest.decode(reader, reader.uint32());\n continue;\n }\n case 2: {\n if (tag !== 18) {\n break;\n }\n\n message.data = ClaimRequestData.decode(reader, reader.uint32());\n continue;\n }\n case 3: {\n if (tag !== 26) {\n break;\n }\n\n message.transcript.push(ClaimTunnelRequest_TranscriptMessage.decode(reader, reader.uint32()));\n continue;\n }\n case 4: {\n if (tag !== 34) {\n break;\n }\n\n message.signatures = ClaimTunnelRequest_Signatures.decode(reader, reader.uint32());\n continue;\n }\n case 5: {\n if (tag !== 40) {\n break;\n }\n\n message.zkEngine = reader.int32() as any;\n continue;\n }\n case 6: {\n if (tag !== 50) {\n break;\n }\n\n message.fixedServerIV = reader.bytes();\n continue;\n }\n case 7: {\n if (tag !== 58) {\n break;\n }\n\n message.fixedClientIV = reader.bytes();\n continue;\n }\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): ClaimTunnelRequest {\n return {\n request: isSet(object.request) ? CreateTunnelRequest.fromJSON(object.request) : undefined,\n data: isSet(object.data) ? ClaimRequestData.fromJSON(object.data) : undefined,\n transcript: globalThis.Array.isArray(object?.transcript)\n ? object.transcript.map((e: any) => ClaimTunnelRequest_TranscriptMessage.fromJSON(e))\n : [],\n signatures: isSet(object.signatures) ? ClaimTunnelRequest_Signatures.fromJSON(object.signatures) : undefined,\n zkEngine: isSet(object.zkEngine) ? zKProofEngineFromJSON(object.zkEngine) : 0,\n fixedServerIV: isSet(object.fixedServerIV) ? bytesFromBase64(object.fixedServerIV) : new Uint8Array(0),\n fixedClientIV: isSet(object.fixedClientIV) ? bytesFromBase64(object.fixedClientIV) : new Uint8Array(0),\n };\n },\n\n toJSON(message: ClaimTunnelRequest): unknown {\n const obj: any = {};\n if (message.request !== undefined) {\n obj.request = CreateTunnelRequest.toJSON(message.request);\n }\n if (message.data !== undefined) {\n obj.data = ClaimRequestData.toJSON(message.data);\n }\n if (message.transcript?.length) {\n obj.transcript = message.transcript.map((e) => ClaimTunnelRequest_TranscriptMessage.toJSON(e));\n }\n if (message.signatures !== undefined) {\n obj.signatures = ClaimTunnelRequest_Signatures.toJSON(message.signatures);\n }\n if (message.zkEngine !== 0) {\n obj.zkEngine = zKProofEngineToJSON(message.zkEngine);\n }\n if (message.fixedServerIV.length !== 0) {\n obj.fixedServerIV = base64FromBytes(message.fixedServerIV);\n }\n if (message.fixedClientIV.length !== 0) {\n obj.fixedClientIV = base64FromBytes(message.fixedClientIV);\n }\n return obj;\n },\n\n create(base?: DeepPartial<ClaimTunnelRequest>): ClaimTunnelRequest {\n return ClaimTunnelRequest.fromPartial(base ?? {});\n },\n fromPartial(object: DeepPartial<ClaimTunnelRequest>): ClaimTunnelRequest {\n const message = createBaseClaimTunnelRequest();\n message.request = (object.request !== undefined && object.request !== null)\n ? CreateTunnelRequest.fromPartial(object.request)\n : undefined;\n message.data = (object.data !== undefined && object.data !== null)\n ? ClaimRequestData.fromPartial(object.data)\n : undefined;\n message.transcript = object.transcript?.map((e) => ClaimTunnelRequest_TranscriptMessage.fromPartial(e)) || [];\n message.signatures = (object.signatures !== undefined && object.signatures !== null)\n ? ClaimTunnelRequest_Signatures.fromPartial(object.signatures)\n : undefined;\n message.zkEngine = object.zkEngine ?? 0;\n message.fixedServerIV = object.fixedServerIV ?? new Uint8Array(0);\n message.fixedClientIV = object.fixedClientIV ?? new Uint8Array(0);\n return message;\n },\n};\n\nfunction createBaseClaimTunnelRequest_Signatures(): ClaimTunnelRequest_Signatures {\n return { requestSignature: new Uint8Array(0) };\n}\n\nexport const ClaimTunnelRequest_Signatures: MessageFns<ClaimTunnelRequest_Signatures> = {\n encode(message: ClaimTunnelRequest_Signatures, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.requestSignature.length !== 0) {\n writer.uint32(10).bytes(message.requestSignature);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): ClaimTunnelRequest_Signatures {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseClaimTunnelRequest_Signatures();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1: {\n if (tag !== 10) {\n break;\n }\n\n message.requestSignature = reader.bytes();\n continue;\n }\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): ClaimTunnelRequest_Signatures {\n return {\n requestSignature: isSet(object.requestSignature) ? bytesFromBase64(object.requestSignature) : new Uint8Array(0),\n };\n },\n\n toJSON(message: ClaimTunnelRequest_Signatures): unknown {\n const obj: any = {};\n if (message.requestSignature.length !== 0) {\n obj.requestSignature = base64FromBytes(message.requestSignature);\n }\n return obj;\n },\n\n create(base?: DeepPartial<ClaimTunnelRequest_Signatures>): ClaimTunnelRequest_Signatures {\n return ClaimTunnelRequest_Signatures.fromPartial(base ?? {});\n },\n fromPartial(object: DeepPartial<ClaimTunnelRequest_Signatures>): ClaimTunnelRequest_Signatures {\n const message = createBaseClaimTunnelRequest_Signatures();\n message.requestSignature = object.requestSignature ?? new Uint8Array(0);\n return message;\n },\n};\n\nfunction createBaseClaimTunnelRequest_TranscriptMessage(): ClaimTunnelRequest_TranscriptMessage {\n return { sender: 0, message: new Uint8Array(0), reveal: undefined };\n}\n\nexport const ClaimTunnelRequest_TranscriptMessage: MessageFns<ClaimTunnelRequest_TranscriptMessage> = {\n encode(message: ClaimTunnelRequest_TranscriptMessage, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.sender !== 0) {\n writer.uint32(8).int32(message.sender);\n }\n if (message.message.length !== 0) {\n writer.uint32(18).bytes(message.message);\n }\n if (message.reveal !== undefined) {\n MessageReveal.encode(message.reveal, writer.uint32(26).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): ClaimTunnelRequest_TranscriptMessage {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseClaimTunnelRequest_TranscriptMessage();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1: {\n if (tag !== 8) {\n break;\n }\n\n message.sender = reader.int32() as any;\n continue;\n }\n case 2: {\n if (tag !== 18) {\n break;\n }\n\n message.message = reader.bytes();\n continue;\n }\n case 3: {\n if (tag !== 26) {\n break;\n }\n\n message.reveal = MessageReveal.decode(reader, reader.uint32());\n continue;\n }\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): ClaimTunnelRequest_TranscriptMessage {\n return {\n sender: isSet(object.sender) ? transcriptMessageSenderTypeFromJSON(object.sender) : 0,\n message: isSet(object.message) ? bytesFromBase64(object.message) : new Uint8Array(0),\n reveal: isSet(object.reveal) ? MessageReveal.fromJSON(object.reveal) : undefined,\n };\n },\n\n toJSON(message: ClaimTunnelRequest_TranscriptMessage): unknown {\n const obj: any = {};\n if (message.sender !== 0) {\n obj.sender = transcriptMessageSenderTypeToJSON(message.sender);\n }\n if (message.message.length !== 0) {\n obj.message = base64FromBytes(message.message);\n }\n if (message.reveal !== undefined) {\n obj.reveal = MessageReveal.toJSON(message.reveal);\n }\n return obj;\n },\n\n create(base?: DeepPartial<ClaimTunnelRequest_TranscriptMessage>): ClaimTunnelRequest_TranscriptMessage {\n return ClaimTunnelRequest_TranscriptMessage.fromPartial(base ?? {});\n },\n fromPartial(object: DeepPartial<ClaimTunnelRequest_TranscriptMessage>): ClaimTunnelRequest_TranscriptMessage {\n const message = createBaseClaimTunnelRequest_TranscriptMessage();\n message.sender = object.sender ?? 0;\n message.message = object.message ?? new Uint8Array(0);\n message.reveal = (object.reveal !== undefined && object.reveal !== null)\n ? MessageReveal.fromPartial(object.reveal)\n : undefined;\n return message;\n },\n};\n\nfunction createBaseClaimTunnelResponse(): ClaimTunnelResponse {\n return { request: undefined, claim: undefined, error: undefined, signatures: undefined };\n}\n\nexport const ClaimTunnelResponse: MessageFns<ClaimTunnelResponse> = {\n encode(message: ClaimTunnelResponse, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.request !== undefined) {\n ClaimTunnelRequest.encode(message.request, writer.uint32(10).fork()).join();\n }\n if (message.claim !== undefined) {\n ProviderClaimData.encode(message.claim, writer.uint32(18).fork()).join();\n }\n if (message.error !== undefined) {\n ErrorData.encode(message.error, writer.uint32(26).fork()).join();\n }\n if (message.signatures !== undefined) {\n ClaimTunnelResponse_Signatures.encode(message.signatures, writer.uint32(34).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): ClaimTunnelResponse {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseClaimTunnelResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1: {\n if (tag !== 10) {\n break;\n }\n\n message.request = ClaimTunnelRequest.decode(reader, reader.uint32());\n continue;\n }\n case 2: {\n if (tag !== 18) {\n break;\n }\n\n message.claim = ProviderClaimData.decode(reader, reader.uint32());\n continue;\n }\n case 3: {\n if (tag !== 26) {\n break;\n }\n\n message.error = ErrorData.decode(reader, reader.uint32());\n continue;\n }\n case 4: {\n if (tag !== 34) {\n break;\n }\n\n message.signatures = ClaimTunnelResponse_Signatures.decode(reader, reader.uint32());\n continue;\n }\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): ClaimTunnelResponse {\n return {\n request: isSet(object.request) ? ClaimTunnelRequest.fromJSON(object.request) : undefined,\n claim: isSet(object.claim) ? ProviderClaimData.fromJSON(object.claim) : undefined,\n error: isSet(object.error) ? ErrorData.fromJSON(object.error) : undefined,\n signatures: isSet(object.signatures) ? ClaimTunnelResponse_Signatures.fromJSON(object.signatures) : undefined,\n };\n },\n\n toJSON(message: ClaimTunnelResponse): unknown {\n const obj: any = {};\n if (message.request !== undefined) {\n obj.request = ClaimTunnelRequest.toJSON(message.request);\n }\n if (message.claim !== undefined) {\n obj.claim = ProviderClaimData.toJSON(message.claim);\n }\n if (message.error !== undefined) {\n obj.error = ErrorData.toJSON(message.error);\n }\n if (message.signatures !== undefined) {\n obj.signatures = ClaimTunnelResponse_Signatures.toJSON(message.signatures);\n }\n return obj;\n },\n\n create(base?: DeepPartial<ClaimTunnelResponse>): ClaimTunnelResponse {\n return ClaimTunnelResponse.fromPartial(base ?? {});\n },\n fromPartial(object: DeepPartial<ClaimTunnelResponse>): ClaimTunnelResponse {\n const message = createBaseClaimTunnelResponse();\n message.request = (object.request !== undefined && object.request !== null)\n ? ClaimTunnelRequest.fromPartial(object.request)\n : undefined;\n message.claim = (object.claim !== undefined && object.claim !== null)\n ? ProviderClaimData.fromPartial(object.claim)\n : undefined;\n message.error = (object.error !== undefined && object.error !== null)\n ? ErrorData.fromPartial(object.error)\n : undefined;\n message.signatures = (object.signatures !== undefined && object.signatures !== null)\n ? ClaimTunnelResponse_Signatures.fromPartial(object.signatures)\n : undefined;\n return message;\n },\n};\n\nfunction createBaseClaimTunnelResponse_Signatures(): ClaimTunnelResponse_Signatures {\n return { attestorAddress: \"\", claimSignature: new Uint8Array(0), resultSignature: new Uint8Array(0) };\n}\n\nexport const ClaimTunnelResponse_Signatures: MessageFns<ClaimTunnelResponse_Signatures> = {\n encode(message: ClaimTunnelResponse_Signatures, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.attestorAddress !== \"\") {\n writer.uint32(10).string(message.attestorAddress);\n }\n if (message.claimSignature.length !== 0) {\n writer.uint32(18).bytes(message.claimSignature);\n }\n if (message.resultSignature.length !== 0) {\n writer.uint32(26).bytes(message.resultSignature);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): ClaimTunnelResponse_Signatures {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseClaimTunnelResponse_Signatures();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1: {\n if (tag !== 10) {\n break;\n }\n\n message.attestorAddress = reader.string();\n continue;\n }\n case 2: {\n if (tag !== 18) {\n break;\n }\n\n message.claimSignature = reader.bytes();\n continue;\n }\n case 3: {\n if (tag !== 26) {\n break;\n }\n\n message.resultSignature = reader.bytes();\n continue;\n }\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): ClaimTunnelResponse_Signatures {\n return {\n attestorAddress: isSet(object.attestorAddress) ? globalThis.String(object.attestorAddress) : \"\",\n claimSignature: isSet(object.claimSignature) ? bytesFromBase64(object.claimSignature) : new Uint8Array(0),\n resultSignature: isSet(object.resultSignature) ? bytesFromBase64(object.resultSignature) : new Uint8Array(0),\n };\n },\n\n toJSON(message: ClaimTunnelResponse_Signatures): unknown {\n const obj: any = {};\n if (message.attestorAddress !== \"\") {\n obj.attestorAddress = message.attestorAddress;\n }\n if (message.claimSignature.length !== 0) {\n obj.claimSignature = base64FromBytes(message.claimSignature);\n }\n if (message.resultSignature.length !== 0) {\n obj.resultSignature = base64FromBytes(message.resultSignature);\n }\n return obj;\n },\n\n create(base?: DeepPartial<ClaimTunnelResponse_Signatures>): ClaimTunnelResponse_Signatures {\n return ClaimTunnelResponse_Signatures.fromPartial(base ?? {});\n },\n fromPartial(object: DeepPartial<ClaimTunnelResponse_Signatures>): ClaimTunnelResponse_Signatures {\n const message = createBaseClaimTunnelResponse_Signatures();\n message.attestorAddress = object.attestorAddress ?? \"\";\n message.claimSignature = object.claimSignature ?? new Uint8Array(0);\n message.resultSignature = object.resultSignature ?? new Uint8Array(0);\n return message;\n },\n};\n\nfunction createBaseRequestClaimOnAvsRequest(): RequestClaimOnAvsRequest {\n return { chainId: 0, jsonCreateClaimRequest: \"\", requestSignature: new Uint8Array(0) };\n}\n\nexport const RequestClaimOnAvsRequest: MessageFns<RequestClaimOnAvsRequest> = {\n encode(message: RequestClaimOnAvsRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.chainId !== 0) {\n writer.uint32(8).uint32(message.chainId);\n }\n if (message.jsonCreateClaimRequest !== \"\") {\n writer.uint32(18).string(message.jsonCreateClaimRequest);\n }\n if (message.requestSignature.length !== 0) {\n writer.uint32(26).bytes(message.requestSignature);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): RequestClaimOnAvsRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseRequestClaimOnAvsRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1: {\n if (tag !== 8) {\n break;\n }\n\n message.chainId = reader.uint32();\n continue;\n }\n case 2: {\n if (tag !== 18) {\n break;\n }\n\n message.jsonCreateClaimRequest = reader.string();\n continue;\n }\n case 3: {\n if (tag !== 26) {\n break;\n }\n\n message.requestSignature = reader.bytes();\n continue;\n }\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): RequestClaimOnAvsRequest {\n return {\n chainId: isSet(object.chainId) ? globalThis.Number(object.chainId) : 0,\n jsonCreateClaimRequest: isSet(object.jsonCreateClaimRequest)\n ? globalThis.String(object.jsonCreateClaimRequest)\n : \"\",\n requestSignature: isSet(object.requestSignature) ? bytesFromBase64(object.requestSignature) : new Uint8Array(0),\n };\n },\n\n toJSON(message: RequestClaimOnAvsRequest): unknown {\n const obj: any = {};\n if (message.chainId !== 0) {\n obj.chainId = Math.round(message.chainId);\n }\n if (message.jsonCreateClaimRequest !== \"\") {\n obj.jsonCreateClaimRequest = message.jsonCreateClaimRequest;\n }\n if (message.requestSignature.length !== 0) {\n obj.requestSignature = base64FromBytes(message.requestSignature);\n }\n return obj;\n },\n\n create(base?: DeepPartial<RequestClaimOnAvsRequest>): RequestClaimOnAvsRequest {\n return RequestClaimOnAvsRequest.fromPartial(base ?? {});\n },\n fromPartial(object: DeepPartial<RequestClaimOnAvsRequest>): RequestClaimOnAvsRequest {\n const message = createBaseRequestClaimOnAvsRequest();\n message.chainId = object.chainId ?? 0;\n message.jsonCreateClaimRequest = object.jsonCreateClaimRequest ?? \"\";\n message.requestSignature = object.requestSignature ?? new Uint8Array(0);\n return message;\n },\n};\n\nfunction createBaseRequestClaimOnAvsResponse(): RequestClaimOnAvsResponse {\n return { txHash: \"\", taskIndex: 0, jsonTask: \"\" };\n}\n\nexport const RequestClaimOnAvsResponse: MessageFns<RequestClaimOnAvsResponse> = {\n encode(message: RequestClaimOnAvsResponse, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.txHash !== \"\") {\n writer.uint32(10).string(message.txHash);\n }\n if (message.taskIndex !== 0) {\n writer.uint32(16).uint32(message.taskIndex);\n }\n if (message.jsonTask !== \"\") {\n writer.uint32(26).string(message.jsonTask);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): RequestClaimOnAvsResponse {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseRequestClaimOnAvsResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1: {\n if (tag !== 10) {\n break;\n }\n\n message.txHash = reader.string();\n continue;\n }\n case 2: {\n if (tag !== 16) {\n break;\n }\n\n message.taskIndex = reader.uint32();\n continue;\n }\n case 3: {\n if (tag !== 26) {\n break;\n }\n\n message.jsonTask = reader.string();\n continue;\n }\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): RequestClaimOnAvsResponse {\n return {\n txHash: isSet(object.txHash) ? globalThis.String(object.txHash) : \"\",\n taskIndex: isSet(object.taskIndex) ? globalThis.Number(object.taskIndex) : 0,\n jsonTask: isSet(object.jsonTask) ? globalThis.String(object.jsonTask) : \"\",\n };\n },\n\n toJSON(message: RequestClaimOnAvsResponse): unknown {\n const obj: any = {};\n if (message.txHash !== \"\") {\n obj.txHash = message.txHash;\n }\n if (message.taskIndex !== 0) {\n obj.taskIndex = Math.round(message.taskIndex);\n }\n if (message.jsonTask !== \"\") {\n obj.jsonTask = message.jsonTask;\n }\n return obj;\n },\n\n create(base?: DeepPartial<RequestClaimOnAvsResponse>): RequestClaimOnAvsResponse {\n return RequestClaimOnAvsResponse.fromPartial(base ?? {});\n },\n fromPartial(object: DeepPartial<RequestClaimOnAvsResponse>): RequestClaimOnAvsResponse {\n const message = createBaseRequestClaimOnAvsResponse();\n message.txHash = object.txHash ?? \"\";\n message.taskIndex = object.taskIndex ?? 0;\n message.jsonTask = object.jsonTask ?? \"\";\n return message;\n },\n};\n\nfunction createBaseCompleteClaimOnAvsRequest(): CompleteClaimOnAvsRequest {\n return { chainId: 0, taskIndex: 0, completedTaskJson: \"\" };\n}\n\nexport const CompleteClaimOnAvsRequest: MessageFns<CompleteClaimOnAvsRequest> = {\n encode(message: CompleteClaimOnAvsRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.chainId !== 0) {\n writer.uint32(8).uint32(message.chainId);\n }\n if (message.taskIndex !== 0) {\n writer.uint32(16).uint32(message.taskIndex);\n }\n if (message.completedTaskJson !== \"\") {\n writer.uint32(26).string(message.completedTaskJson);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): CompleteClaimOnAvsRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseCompleteClaimOnAvsRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1: {\n if (tag !== 8) {\n break;\n }\n\n message.chainId = reader.uint32();\n continue;\n }\n case 2: {\n if (tag !== 16) {\n break;\n }\n\n message.taskIndex = reader.uint32();\n continue;\n }\n case 3: {\n if (tag !== 26) {\n break;\n }\n\n message.completedTaskJson = reader.string();\n continue;\n }\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): CompleteClaimOnAvsRequest {\n return {\n chainId: isSet(object.chainId) ? globalThis.Number(object.chainId) : 0,\n taskIndex: isSet(object.taskIndex) ? globalThis.Number(object.taskIndex) : 0,\n completedTaskJson: isSet(object.completedTaskJson) ? globalThis.String(object.completedTaskJson) : \"\",\n };\n },\n\n toJSON(message: CompleteClaimOnAvsRequest): unknown {\n const obj: any = {};\n if (message.chainId !== 0) {\n obj.chainId = Math.round(message.chainId);\n }\n if (message.taskIndex !== 0) {\n obj.taskIndex = Math.round(message.taskIndex);\n }\n if (message.completedTaskJson !== \"\") {\n obj.completedTaskJson = message.completedTaskJson;\n }\n return obj;\n },\n\n create(base?: DeepPartial<CompleteClaimOnAvsRequest>): CompleteClaimOnAvsRequest {\n return CompleteClaimOnAvsRequest.fromPartial(base ?? {});\n },\n fromPartial(object: DeepPartial<CompleteClaimOnAvsRequest>): CompleteClaimOnAvsRequest {\n const message = createBaseCompleteClaimOnAvsRequest();\n message.chainId = object.chainId ?? 0;\n message.taskIndex = object.taskIndex ?? 0;\n message.completedTaskJson = object.completedTaskJson ?? \"\";\n return message;\n },\n};\n\nfunction createBaseCompleteClaimOnAvsResponse(): CompleteClaimOnAvsResponse {\n return { txHash: \"\", taskCompletedObjectJson: \"\" };\n}\n\nexport const CompleteClaimOnAvsResponse: MessageFns<CompleteClaimOnAvsResponse> = {\n encode(message: CompleteClaimOnAvsResponse, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.txHash !== \"\") {\n writer.uint32(10).string(message.txHash);\n }\n if (message.taskCompletedObjectJson !== \"\") {\n writer.uint32(18).string(message.taskCompletedObjectJson);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): CompleteClaimOnAvsResponse {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseCompleteClaimOnAvsResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1: {\n if (tag !== 10) {\n break;\n }\n\n message.txHash = reader.string();\n continue;\n }\n case 2: {\n if (tag !== 18) {\n break;\n }\n\n message.taskCompletedObjectJson = reader.string();\n continue;\n }\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): CompleteClaimOnAvsResponse {\n return {\n txHash: isSet(object.txHash) ? globalThis.String(object.txHash) : \"\",\n taskCompletedObjectJson: isSet(object.taskCompletedObjectJson)\n ? globalThis.String(object.taskCompletedObjectJson)\n : \"\",\n };\n },\n\n toJSON(message: CompleteClaimOnAvsResponse): unknown {\n const obj: any = {};\n if (message.txHash !== \"\") {\n obj.txHash = message.txHash;\n }\n if (message.taskCompletedObjectJson !== \"\") {\n obj.taskCompletedObjectJson = message.taskCompletedObjectJson;\n }\n return obj;\n },\n\n create(base?: DeepPartial<CompleteClaimOnAvsResponse>): CompleteClaimOnAvsResponse {\n return CompleteClaimOnAvsResponse.fromPartial(base ?? {});\n },\n fromPartial(object: DeepPartial<CompleteClaimOnAvsResponse>): CompleteClaimOnAvsResponse {\n const message = createBaseCompleteClaimOnAvsResponse();\n message.txHash = object.txHash ?? \"\";\n message.taskCompletedObjectJson = object.taskCompletedObjectJson ?? \"\";\n return message;\n },\n};\n\nfunction createBaseCreateTaskOnMechainRequest(): CreateTaskOnMechainRequest {\n return { timestamp: 0 };\n}\n\nexport const CreateTaskOnMechainRequest: MessageFns<CreateTaskOnMechainRequest> = {\n encode(message: CreateTaskOnMechainRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.timestamp !== 0) {\n writer.uint32(8).uint32(message.timestamp);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): CreateTaskOnMechainRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseCreateTaskOnMechainRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1: {\n if (tag !== 8) {\n break;\n }\n\n message.timestamp = reader.uint32();\n continue;\n }\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): CreateTaskOnMechainRequest {\n return { timestamp: isSet(object.timestamp) ? globalThis.Number(object.timestamp) : 0 };\n },\n\n toJSON(message: CreateTaskOnMechainRequest): unknown {\n const obj: any = {};\n if (message.timestamp !== 0) {\n obj.timestamp = Math.round(message.timestamp);\n }\n return obj;\n },\n\n create(base?: DeepPartial<CreateTaskOnMechainRequest>): CreateTaskOnMechainRequest {\n return CreateTaskOnMechainRequest.fromPartial(base ?? {});\n },\n fromPartial(object: DeepPartial<CreateTaskOnMechainRequest>): CreateTaskOnMechainRequest {\n const message = createBaseCreateTaskOnMechainRequest();\n message.timestamp = object.timestamp ?? 0;\n return message;\n },\n};\n\nfunction createBaseCreateTaskOnMechainResponse(): CreateTaskOnMechainResponse {\n return { taskId: 0, requiredAttestors: 0, hosts: [] };\n}\n\nexport const CreateTaskOnMechainResponse: MessageFns<CreateTaskOnMechainResponse> = {\n encode(message: CreateTaskOnMechainResponse, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.taskId !== 0) {\n writer.uint32(8).uint32(message.taskId);\n }\n if (message.requiredAttestors !== 0) {\n writer.uint32(16).uint32(message.requiredAttestors);\n }\n for (const v of message.hosts) {\n writer.uint32(26).string(v!);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): CreateTaskOnMechainResponse {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseCreateTaskOnMechainResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1: {\n if (tag !== 8) {\n break;\n }\n\n message.taskId = reader.uint32();\n continue;\n }\n case 2: {\n if (tag !== 16) {\n break;\n }\n\n message.requiredAttestors = reader.uint32();\n continue;\n }\n case 3: {\n if (tag !== 26) {\n break;\n }\n\n message.hosts.push(reader.string());\n continue;\n }\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): CreateTaskOnMechainResponse {\n return {\n taskId: isSet(object.taskId) ? globalThis.Number(object.taskId) : 0,\n requiredAttestors: isSet(object.requiredAttestors) ? globalThis.Number(object.requiredAttestors) : 0,\n hosts: globalThis.Array.isArray(object?.hosts) ? object.hosts.map((e: any) => globalThis.String(e)) : [],\n };\n },\n\n toJSON(message: CreateTaskOnMechainResponse): unknown {\n const obj: any = {};\n if (message.taskId !== 0) {\n obj.taskId = Math.round(message.taskId);\n }\n if (message.requiredAttestors !== 0) {\n obj.requiredAttestors = Math.round(message.requiredAttestors);\n }\n if (message.hosts?.length) {\n obj.hosts = message.hosts;\n }\n return obj;\n },\n\n create(base?: DeepPartial<CreateTaskOnMechainResponse>): CreateTaskOnMechainResponse {\n return CreateTaskOnMechainResponse.fromPartial(base ?? {});\n },\n fromPartial(object: DeepPartial<CreateTaskOnMechainResponse>): CreateTaskOnMechainResponse {\n const message = createBaseCreateTaskOnMechainResponse();\n message.taskId = object.taskId ?? 0;\n message.requiredAttestors = object.requiredAttestors ?? 0;\n message.hosts = object.hosts?.map((e) => e) || [];\n return message;\n },\n};\n\nfunction createBaseAuthenticatedUserData(): AuthenticatedUserData {\n return { id: \"\", createdAt: 0, expiresAt: 0, hostWhitelist: [] };\n}\n\nexport const AuthenticatedUserData: MessageFns<AuthenticatedUserData> = {\n encode(message: AuthenticatedUserData, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.id !== \"\") {\n writer.uint32(10).string(message.id);\n }\n if (message.createdAt !== 0) {\n writer.uint32(16).uint32(message.createdAt);\n }\n if (message.expiresAt !== 0) {\n writer.uint32(24).uint32(message.expiresAt);\n }\n for (const v of message.hostWhitelist) {\n writer.uint32(34).string(v!);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): AuthenticatedUserData {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseAuthenticatedUserData();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1: {\n if (tag !== 10) {\n break;\n }\n\n message.id = reader.string();\n continue;\n }\n case 2: {\n if (tag !== 16) {\n break;\n }\n\n message.createdAt = reader.uint32();\n continue;\n }\n case 3: {\n if (tag !== 24) {\n break;\n }\n\n message.expiresAt = reader.uint32();\n continue;\n }\n case 4: {\n if (tag !== 34) {\n break;\n }\n\n message.hostWhitelist.push(reader.string());\n continue;\n }\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): AuthenticatedUserData {\n return {\n id: isSet(object.id) ? globalThis.String(object.id) : \"\",\n createdAt: isSet(object.createdAt) ? globalThis.Number(object.createdAt) : 0,\n expiresAt: isSet(object.expiresAt) ? globalThis.Number(object.expiresAt) : 0,\n hostWhitelist: globalThis.Array.isArray(object?.hostWhitelist)\n ? object.hostWhitelist.map((e: any) => globalThis.String(e))\n : [],\n };\n },\n\n toJSON(message: AuthenticatedUserData): unknown {\n const obj: any = {};\n if (message.id !== \"\") {\n obj.id = message.id;\n }\n if (message.createdAt !== 0) {\n obj.createdAt = Math.round(message.createdAt);\n }\n if (message.expiresAt !== 0) {\n obj.expiresAt = Math.round(message.expiresAt);\n }\n if (message.hostWhitelist?.length) {\n obj.hostWhitelist = message.hostWhitelist;\n }\n return obj;\n },\n\n create(base?: DeepPartial<AuthenticatedUserData>): AuthenticatedUserData {\n return AuthenticatedUserData.fromPartial(base ?? {});\n },\n fromPartial(object: DeepPartial<AuthenticatedUserData>): AuthenticatedUserData {\n const message = createBaseAuthenticatedUserData();\n message.id = object.id ?? \"\";\n message.createdAt = object.createdAt ?? 0;\n message.expiresAt = object.expiresAt ?? 0;\n message.hostWhitelist = object.hostWhitelist?.map((e) => e) || [];\n return message;\n },\n};\n\nfunction createBaseAuthenticationRequest(): AuthenticationRequest {\n return { data: undefined, signature: new Uint8Array(0) };\n}\n\nexport const AuthenticationRequest: MessageFns<AuthenticationRequest> = {\n encode(message: AuthenticationRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.data !== undefined) {\n AuthenticatedUserData.encode(message.data, writer.uint32(10).fork()).join();\n }\n if (message.signature.length !== 0) {\n writer.uint32(18).bytes(message.signature);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): AuthenticationRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseAuthenticationRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1: {\n if (tag !== 10) {\n break;\n }\n\n message.data = AuthenticatedUserData.decode(reader, reader.uint32());\n continue;\n }\n case 2: {\n if (tag !== 18) {\n break;\n }\n\n message.signature = reader.bytes();\n continue;\n }\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): AuthenticationRequest {\n return {\n data: isSet(object.data) ? AuthenticatedUserData.fromJSON(object.data) : undefined,\n signature: isSet(object.signature) ? bytesFromBase64(object.signature) : new Uint8Array(0),\n };\n },\n\n toJSON(message: AuthenticationRequest): unknown {\n const obj: any = {};\n if (message.data !== undefined) {\n obj.data = AuthenticatedUserData.toJSON(message.data);\n }\n if (message.signature.length !== 0) {\n obj.signature = base64FromBytes(message.signature);\n }\n return obj;\n },\n\n create(base?: DeepPartial<AuthenticationRequest>): AuthenticationRequest {\n return AuthenticationRequest.fromPartial(base ?? {});\n },\n fromPartial(object: DeepPartial<AuthenticationRequest>): AuthenticationRequest {\n const message = createBaseAuthenticationRequest();\n message.data = (object.data !== undefined && object.data !== null)\n ? AuthenticatedUserData.fromPartial(object.data)\n : undefined;\n message.signature = object.signature ?? new Uint8Array(0);\n return message;\n },\n};\n\nfunction createBaseInitRequest(): InitRequest {\n return { clientVersion: 0, signatureType: 0, auth: undefined };\n}\n\nexport const InitRequest: MessageFns<InitRequest> = {\n encode(message: InitRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.clientVersion !== 0) {\n writer.uint32(16).int32(message.clientVersion);\n }\n if (message.signatureType !== 0) {\n writer.uint32(24).int32(message.signatureType);\n }\n if (message.auth !== undefined) {\n AuthenticationRequest.encode(message.auth, writer.uint32(34).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): InitRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseInitRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 2: {\n if (tag !== 16) {\n break;\n }\n\n message.clientVersion = reader.int32() as any;\n continue;\n }\n case 3: {\n if (tag !== 24) {\n break;\n }\n\n message.signatureType = reader.int32() as any;\n continue;\n }\n case 4: {\n if (tag !== 34) {\n break;\n }\n\n message.auth = AuthenticationRequest.decode(reader, reader.uint32());\n continue;\n }\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): InitRequest {\n return {\n clientVersion: isSet(object.clientVersion) ? attestorVersionFromJSON(object.clientVersion) : 0,\n signatureType: isSet(object.signatureType) ? serviceSignatureTypeFromJSON(object.signatureType) : 0,\n auth: isSet(object.auth) ? AuthenticationRequest.fromJSON(object.auth) : undefined,\n };\n },\n\n toJSON(message: InitRequest): unknown {\n const obj: any = {};\n if (message.clientVersion !== 0) {\n obj.clientVersion = attestorVersionToJSON(message.clientVersion);\n }\n if (message.signatureType !== 0) {\n obj.signatureType = serviceSignatureTypeToJSON(message.signatureType);\n }\n if (message.auth !== undefined) {\n obj.auth = AuthenticationRequest.toJSON(message.auth);\n }\n return obj;\n },\n\n create(base?: DeepPartial<InitRequest>): InitRequest {\n return InitRequest.fromPartial(base ?? {});\n },\n fromPartial(object: DeepPartial<InitRequest>): InitRequest {\n const message = createBaseInitRequest();\n message.clientVersion = object.clientVersion ?? 0;\n message.signatureType = object.signatureType ?? 0;\n message.auth = (object.auth !== undefined && object.auth !== null)\n ? AuthenticationRequest.fromPartial(object.auth)\n : undefined;\n return message;\n },\n};\n\nfunction createBaseInitResponse(): InitResponse {\n return { toprfPublicKey: new Uint8Array(0), attestorAddress: \"\" };\n}\n\nexport const InitResponse: MessageFns<InitResponse> = {\n encode(message: InitResponse, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.toprfPublicKey.length !== 0) {\n writer.uint32(10).bytes(message.toprfPublicKey);\n }\n if (message.attestorAddress !== \"\") {\n writer.uint32(18).string(message.attestorAddress);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): InitResponse {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseInitResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1: {\n if (tag !== 10) {\n break;\n }\n\n message.toprfPublicKey = reader.bytes();\n continue;\n }\n case 2: {\n if (tag !== 18) {\n break;\n }\n\n message.attestorAddress = reader.string();\n continue;\n }\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): InitResponse {\n return {\n toprfPublicKey: isSet(object.toprfPublicKey) ? bytesFromBase64(object.toprfPublicKey) : new Uint8Array(0),\n attestorAddress: isSet(object.attestorAddress) ? globalThis.String(object.attestorAddress) : \"\",\n };\n },\n\n toJSON(message: InitResponse): unknown {\n const obj: any = {};\n if (message.toprfPublicKey.length !== 0) {\n obj.toprfPublicKey = base64FromBytes(message.toprfPublicKey);\n }\n if (message.attestorAddress !== \"\") {\n obj.attestorAddress = message.attestorAddress;\n }\n return obj;\n },\n\n create(base?: DeepPartial<InitResponse>): InitResponse {\n return InitResponse.fromPartial(base ?? {});\n },\n fromPartial(object: DeepPartial<InitResponse>): InitResponse {\n const message = createBaseInitResponse();\n message.toprfPublicKey = object.toprfPublicKey ?? new Uint8Array(0);\n message.attestorAddress = object.attestorAddress ?? \"\";\n return message;\n },\n};\n\nfunction createBaseTOPRFRequest(): TOPRFRequest {\n return { maskedData: new Uint8Array(0), engine: 0 };\n}\n\nexport const TOPRFRequest: MessageFns<TOPRFRequest> = {\n encode(message: TOPRFRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.maskedData.length !== 0) {\n writer.uint32(10).bytes(message.maskedData);\n }\n if (message.engine !== 0) {\n writer.uint32(16).int32(message.engine);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): TOPRFRequest {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseTOPRFRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1: {\n if (tag !== 10) {\n break;\n }\n\n message.maskedData = reader.bytes();\n continue;\n }\n case 2: {\n if (tag !== 16) {\n break;\n }\n\n message.engine = reader.int32() as any;\n continue;\n }\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): TOPRFRequest {\n return {\n maskedData: isSet(object.maskedData) ? bytesFromBase64(object.maskedData) : new Uint8Array(0),\n engine: isSet(object.engine) ? zKProofEngineFromJSON(object.engine) : 0,\n };\n },\n\n toJSON(message: TOPRFRequest): unknown {\n const obj: any = {};\n if (message.maskedData.length !== 0) {\n obj.maskedData = base64FromBytes(message.maskedData);\n }\n if (message.engine !== 0) {\n obj.engine = zKProofEngineToJSON(message.engine);\n }\n return obj;\n },\n\n create(base?: DeepPartial<TOPRFRequest>): TOPRFRequest {\n return TOPRFRequest.fromPartial(base ?? {});\n },\n fromPartial(object: DeepPartial<TOPRFRequest>): TOPRFRequest {\n const message = createBaseTOPRFRequest();\n message.maskedData = object.maskedData ?? new Uint8Array(0);\n message.engine = object.engine ?? 0;\n return message;\n },\n};\n\nfunction createBaseTOPRFResponse(): TOPRFResponse {\n return {\n publicKeyShare: new Uint8Array(0),\n evaluated: new Uint8Array(0),\n c: new Uint8Array(0),\n r: new Uint8Array(0),\n };\n}\n\nexport const TOPRFResponse: MessageFns<TOPRFResponse> = {\n encode(message: TOPRFResponse, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.publicKeyShare.length !== 0) {\n writer.uint32(10).bytes(message.publicKeyShare);\n }\n if (message.evaluated.length !== 0) {\n writer.uint32(18).bytes(message.evaluated);\n }\n if (message.c.length !== 0) {\n writer.uint32(26).bytes(message.c);\n }\n if (message.r.length !== 0) {\n writer.uint32(34).bytes(message.r);\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): TOPRFResponse {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseTOPRFResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1: {\n if (tag !== 10) {\n break;\n }\n\n message.publicKeyShare = reader.bytes();\n continue;\n }\n case 2: {\n if (tag !== 18) {\n break;\n }\n\n message.evaluated = reader.bytes();\n continue;\n }\n case 3: {\n if (tag !== 26) {\n break;\n }\n\n message.c = reader.bytes();\n continue;\n }\n case 4: {\n if (tag !== 34) {\n break;\n }\n\n message.r = reader.bytes();\n continue;\n }\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): TOPRFResponse {\n return {\n publicKeyShare: isSet(object.publicKeyShare) ? bytesFromBase64(object.publicKeyShare) : new Uint8Array(0),\n evaluated: isSet(object.evaluated) ? bytesFromBase64(object.evaluated) : new Uint8Array(0),\n c: isSet(object.c) ? bytesFromBase64(object.c) : new Uint8Array(0),\n r: isSet(object.r) ? bytesFromBase64(object.r) : new Uint8Array(0),\n };\n },\n\n toJSON(message: TOPRFResponse): unknown {\n const obj: any = {};\n if (message.publicKeyShare.length !== 0) {\n obj.publicKeyShare = base64FromBytes(message.publicKeyShare);\n }\n if (message.evaluated.length !== 0) {\n obj.evaluated = base64FromBytes(message.evaluated);\n }\n if (message.c.length !== 0) {\n obj.c = base64FromBytes(message.c);\n }\n if (message.r.length !== 0) {\n obj.r = base64FromBytes(message.r);\n }\n return obj;\n },\n\n create(base?: DeepPartial<TOPRFResponse>): TOPRFResponse {\n return TOPRFResponse.fromPartial(base ?? {});\n },\n fromPartial(object: DeepPartial<TOPRFResponse>): TOPRFResponse {\n const message = createBaseTOPRFResponse();\n message.publicKeyShare = object.publicKeyShare ?? new Uint8Array(0);\n message.evaluated = object.evaluated ?? new Uint8Array(0);\n message.c = object.c ?? new Uint8Array(0);\n message.r = object.r ?? new Uint8Array(0);\n return message;\n },\n};\n\nfunction createBaseRPCMessage(): RPCMessage {\n return {\n id: 0,\n initRequest: undefined,\n initResponse: undefined,\n connectionTerminationAlert: undefined,\n requestError: undefined,\n createTunnelRequest: undefined,\n createTunnelResponse: undefined,\n disconnectTunnelRequest: undefined,\n disconnectTunnelResponse: undefined,\n tunnelMessage: undefined,\n tunnelDisconnectEvent: undefined,\n claimTunnelRequest: undefined,\n claimTunnelResponse: undefined,\n createClaimOnChainRequest: undefined,\n createClaimOnChainResponse: undefined,\n completeClaimOnChainRequest: undefined,\n completeClaimOnChainResponse: undefined,\n toprfRequest: undefined,\n toprfResponse: undefined,\n createTaskOnMechainRequest: undefined,\n createTaskOnMechainResponse: undefined,\n claimTeeBundleRequest: undefined,\n claimTeeBundleResponse: undefined,\n fetchCertificateBytesRequest: undefined,\n fetchCertificateBytesResponse: undefined,\n };\n}\n\nexport const RPCMessage: MessageFns<RPCMessage> = {\n encode(message: RPCMessage, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n if (message.id !== 0) {\n writer.uint32(8).uint64(message.id);\n }\n if (message.initRequest !== undefined) {\n InitRequest.encode(message.initRequest, writer.uint32(18).fork()).join();\n }\n if (message.initResponse !== undefined) {\n InitResponse.encode(message.initResponse, writer.uint32(26).fork()).join();\n }\n if (message.connectionTerminationAlert !== undefined) {\n ErrorData.encode(message.connectionTerminationAlert, writer.uint32(34).fork()).join();\n }\n if (message.requestError !== undefined) {\n ErrorData.encode(message.requestError, writer.uint32(42).fork()).join();\n }\n if (message.createTunnelRequest !== undefined) {\n CreateTunnelRequest.encode(message.createTunnelRequest, writer.uint32(50).fork()).join();\n }\n if (message.createTunnelResponse !== undefined) {\n Empty.encode(message.createTunnelResponse, writer.uint32(58).fork()).join();\n }\n if (message.disconnectTunnelRequest !== undefined) {\n DisconnectTunnelRequest.encode(message.disconnectTunnelRequest, writer.uint32(66).fork()).join();\n }\n if (message.disconnectTunnelResponse !== undefined) {\n Empty.encode(message.disconnectTunnelResponse, writer.uint32(74).fork()).join();\n }\n if (message.tunnelMessage !== undefined) {\n TunnelMessage.encode(message.tunnelMessage, writer.uint32(82).fork()).join();\n }\n if (message.tunnelDisconnectEvent !== undefined) {\n TunnelDisconnectEvent.encode(message.tunnelDisconnectEvent, writer.uint32(90).fork()).join();\n }\n if (message.claimTunnelRequest !== undefined) {\n ClaimTunnelRequest.encode(message.claimTunnelRequest, writer.uint32(98).fork()).join();\n }\n if (message.claimTunnelResponse !== undefined) {\n ClaimTunnelResponse.encode(message.claimTunnelResponse, writer.uint32(106).fork()).join();\n }\n if (message.createClaimOnChainRequest !== undefined) {\n RequestClaimOnAvsRequest.encode(message.createClaimOnChainRequest, writer.uint32(114).fork()).join();\n }\n if (message.createClaimOnChainResponse !== undefined) {\n RequestClaimOnAvsResponse.encode(message.createClaimOnChainResponse, writer.uint32(122).fork()).join();\n }\n if (message.completeClaimOnChainRequest !== undefined) {\n CompleteClaimOnAvsRequest.encode(message.completeClaimOnChainRequest, writer.uint32(130).fork()).join();\n }\n if (message.completeClaimOnChainResponse !== undefined) {\n CompleteClaimOnAvsResponse.encode(message.completeClaimOnChainResponse, writer.uint32(138).fork()).join();\n }\n if (message.toprfRequest !== undefined) {\n TOPRFRequest.encode(message.toprfRequest, writer.uint32(146).fork()).join();\n }\n if (message.toprfResponse !== undefined) {\n TOPRFResponse.encode(message.toprfResponse, writer.uint32(154).fork()).join();\n }\n if (message.createTaskOnMechainRequest !== undefined) {\n CreateTaskOnMechainRequest.encode(message.createTaskOnMechainRequest, writer.uint32(162).fork()).join();\n }\n if (message.createTaskOnMechainResponse !== undefined) {\n CreateTaskOnMechainResponse.encode(message.createTaskOnMechainResponse, writer.uint32(170).fork()).join();\n }\n if (message.claimTeeBundleRequest !== undefined) {\n ClaimTeeBundleRequest.encode(message.claimTeeBundleRequest, writer.uint32(178).fork()).join();\n }\n if (message.claimTeeBundleResponse !== undefined) {\n ClaimTeeBundleResponse.encode(message.claimTeeBundleResponse, writer.uint32(186).fork()).join();\n }\n if (message.fetchCertificateBytesRequest !== undefined) {\n FetchCertificateBytesRequest.encode(message.fetchCertificateBytesRequest, writer.uint32(194).fork()).join();\n }\n if (message.fetchCertificateBytesResponse !== undefined) {\n FetchCertificateBytesResponse.encode(message.fetchCertificateBytesResponse, writer.uint32(202).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): RPCMessage {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseRPCMessage();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1: {\n if (tag !== 8) {\n break;\n }\n\n message.id = longToNumber(reader.uint64());\n continue;\n }\n case 2: {\n if (tag !== 18) {\n break;\n }\n\n message.initRequest = InitRequest.decode(reader, reader.uint32());\n continue;\n }\n case 3: {\n if (tag !== 26) {\n break;\n }\n\n message.initResponse = InitResponse.decode(reader, reader.uint32());\n continue;\n }\n case 4: {\n if (tag !== 34) {\n break;\n }\n\n message.connectionTerminationAlert = ErrorData.decode(reader, reader.uint32());\n continue;\n }\n case 5: {\n if (tag !== 42) {\n break;\n }\n\n message.requestError = ErrorData.decode(reader, reader.uint32());\n continue;\n }\n case 6: {\n if (tag !== 50) {\n break;\n }\n\n message.createTunnelRequest = CreateTunnelRequest.decode(reader, reader.uint32());\n continue;\n }\n case 7: {\n if (tag !== 58) {\n break;\n }\n\n message.createTunnelResponse = Empty.decode(reader, reader.uint32());\n continue;\n }\n case 8: {\n if (tag !== 66) {\n break;\n }\n\n message.disconnectTunnelRequest = DisconnectTunnelRequest.decode(reader, reader.uint32());\n continue;\n }\n case 9: {\n if (tag !== 74) {\n break;\n }\n\n message.disconnectTunnelResponse = Empty.decode(reader, reader.uint32());\n continue;\n }\n case 10: {\n if (tag !== 82) {\n break;\n }\n\n message.tunnelMessage = TunnelMessage.decode(reader, reader.uint32());\n continue;\n }\n case 11: {\n if (tag !== 90) {\n break;\n }\n\n message.tunnelDisconnectEvent = TunnelDisconnectEvent.decode(reader, reader.uint32());\n continue;\n }\n case 12: {\n if (tag !== 98) {\n break;\n }\n\n message.claimTunnelRequest = ClaimTunnelRequest.decode(reader, reader.uint32());\n continue;\n }\n case 13: {\n if (tag !== 106) {\n break;\n }\n\n message.claimTunnelResponse = ClaimTunnelResponse.decode(reader, reader.uint32());\n continue;\n }\n case 14: {\n if (tag !== 114) {\n break;\n }\n\n message.createClaimOnChainRequest = RequestClaimOnAvsRequest.decode(reader, reader.uint32());\n continue;\n }\n case 15: {\n if (tag !== 122) {\n break;\n }\n\n message.createClaimOnChainResponse = RequestClaimOnAvsResponse.decode(reader, reader.uint32());\n continue;\n }\n case 16: {\n if (tag !== 130) {\n break;\n }\n\n message.completeClaimOnChainRequest = CompleteClaimOnAvsRequest.decode(reader, reader.uint32());\n continue;\n }\n case 17: {\n if (tag !== 138) {\n break;\n }\n\n message.completeClaimOnChainResponse = CompleteClaimOnAvsResponse.decode(reader, reader.uint32());\n continue;\n }\n case 18: {\n if (tag !== 146) {\n break;\n }\n\n message.toprfRequest = TOPRFRequest.decode(reader, reader.uint32());\n continue;\n }\n case 19: {\n if (tag !== 154) {\n break;\n }\n\n message.toprfResponse = TOPRFResponse.decode(reader, reader.uint32());\n continue;\n }\n case 20: {\n if (tag !== 162) {\n break;\n }\n\n message.createTaskOnMechainRequest = CreateTaskOnMechainRequest.decode(reader, reader.uint32());\n continue;\n }\n case 21: {\n if (tag !== 170) {\n break;\n }\n\n message.createTaskOnMechainResponse = CreateTaskOnMechainResponse.decode(reader, reader.uint32());\n continue;\n }\n case 22: {\n if (tag !== 178) {\n break;\n }\n\n message.claimTeeBundleRequest = ClaimTeeBundleRequest.decode(reader, reader.uint32());\n continue;\n }\n case 23: {\n if (tag !== 186) {\n break;\n }\n\n message.claimTeeBundleResponse = ClaimTeeBundleResponse.decode(reader, reader.uint32());\n continue;\n }\n case 24: {\n if (tag !== 194) {\n break;\n }\n\n message.fetchCertificateBytesRequest = FetchCertificateBytesRequest.decode(reader, reader.uint32());\n continue;\n }\n case 25: {\n if (tag !== 202) {\n break;\n }\n\n message.fetchCertificateBytesResponse = FetchCertificateBytesResponse.decode(reader, reader.uint32());\n continue;\n }\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): RPCMessage {\n return {\n id: isSet(object.id) ? globalThis.Number(object.id) : 0,\n initRequest: isSet(object.initRequest) ? InitRequest.fromJSON(object.initRequest) : undefined,\n initResponse: isSet(object.initResponse) ? InitResponse.fromJSON(object.initResponse) : undefined,\n connectionTerminationAlert: isSet(object.connectionTerminationAlert)\n ? ErrorData.fromJSON(object.connectionTerminationAlert)\n : undefined,\n requestError: isSet(object.requestError) ? ErrorData.fromJSON(object.requestError) : undefined,\n createTunnelRequest: isSet(object.createTunnelRequest)\n ? CreateTunnelRequest.fromJSON(object.createTunnelRequest)\n : undefined,\n createTunnelResponse: isSet(object.createTunnelResponse)\n ? Empty.fromJSON(object.createTunnelResponse)\n : undefined,\n disconnectTunnelRequest: isSet(object.disconnectTunnelRequest)\n ? DisconnectTunnelRequest.fromJSON(object.disconnectTunnelRequest)\n : undefined,\n disconnectTunnelResponse: isSet(object.disconnectTunnelResponse)\n ? Empty.fromJSON(object.disconnectTunnelResponse)\n : undefined,\n tunnelMessage: isSet(object.tunnelMessage) ? TunnelMessage.fromJSON(object.tunnelMessage) : undefined,\n tunnelDisconnectEvent: isSet(object.tunnelDisconnectEvent)\n ? TunnelDisconnectEvent.fromJSON(object.tunnelDisconnectEvent)\n : undefined,\n claimTunnelRequest: isSet(object.claimTunnelRequest)\n ? ClaimTunnelRequest.fromJSON(object.claimTunnelRequest)\n : undefined,\n claimTunnelResponse: isSet(object.claimTunnelResponse)\n ? ClaimTunnelResponse.fromJSON(object.claimTunnelResponse)\n : undefined,\n createClaimOnChainRequest: isSet(object.createClaimOnChainRequest)\n ? RequestClaimOnAvsRequest.fromJSON(object.createClaimOnChainRequest)\n : undefined,\n createClaimOnChainResponse: isSet(object.createClaimOnChainResponse)\n ? RequestClaimOnAvsResponse.fromJSON(object.createClaimOnChainResponse)\n : undefined,\n completeClaimOnChainRequest: isSet(object.completeClaimOnChainRequest)\n ? CompleteClaimOnAvsRequest.fromJSON(object.completeClaimOnChainRequest)\n : undefined,\n completeClaimOnChainResponse: isSet(object.completeClaimOnChainResponse)\n ? CompleteClaimOnAvsResponse.fromJSON(object.completeClaimOnChainResponse)\n : undefined,\n toprfRequest: isSet(object.toprfRequest) ? TOPRFRequest.fromJSON(object.toprfRequest) : undefined,\n toprfResponse: isSet(object.toprfResponse) ? TOPRFResponse.fromJSON(object.toprfResponse) : undefined,\n createTaskOnMechainRequest: isSet(object.createTaskOnMechainRequest)\n ? CreateTaskOnMechainRequest.fromJSON(object.createTaskOnMechainRequest)\n : undefined,\n createTaskOnMechainResponse: isSet(object.createTaskOnMechainResponse)\n ? CreateTaskOnMechainResponse.fromJSON(object.createTaskOnMechainResponse)\n : undefined,\n claimTeeBundleRequest: isSet(object.claimTeeBundleRequest)\n ? ClaimTeeBundleRequest.fromJSON(object.claimTeeBundleRequest)\n : undefined,\n claimTeeBundleResponse: isSet(object.claimTeeBundleResponse)\n ? ClaimTeeBundleResponse.fromJSON(object.claimTeeBundleResponse)\n : undefined,\n fetchCertificateBytesRequest: isSet(object.fetchCertificateBytesRequest)\n ? FetchCertificateBytesRequest.fromJSON(object.fetchCertificateBytesRequest)\n : undefined,\n fetchCertificateBytesResponse: isSet(object.fetchCertificateBytesResponse)\n ? FetchCertificateBytesResponse.fromJSON(object.fetchCertificateBytesResponse)\n : undefined,\n };\n },\n\n toJSON(message: RPCMessage): unknown {\n const obj: any = {};\n if (message.id !== 0) {\n obj.id = Math.round(message.id);\n }\n if (message.initRequest !== undefined) {\n obj.initRequest = InitRequest.toJSON(message.initRequest);\n }\n if (message.initResponse !== undefined) {\n obj.initResponse = InitResponse.toJSON(message.initResponse);\n }\n if (message.connectionTerminationAlert !== undefined) {\n obj.connectionTerminationAlert = ErrorData.toJSON(message.connectionTerminationAlert);\n }\n if (message.requestError !== undefined) {\n obj.requestError = ErrorData.toJSON(message.requestError);\n }\n if (message.createTunnelRequest !== undefined) {\n obj.createTunnelRequest = CreateTunnelRequest.toJSON(message.createTunnelRequest);\n }\n if (message.createTunnelResponse !== undefined) {\n obj.createTunnelResponse = Empty.toJSON(message.createTunnelResponse);\n }\n if (message.disconnectTunnelRequest !== undefined) {\n obj.disconnectTunnelRequest = DisconnectTunnelRequest.toJSON(message.disconnectTunnelRequest);\n }\n if (message.disconnectTunnelResponse !== undefined) {\n obj.disconnectTunnelResponse = Empty.toJSON(message.disconnectTunnelResponse);\n }\n if (message.tunnelMessage !== undefined) {\n obj.tunnelMessage = TunnelMessage.toJSON(message.tunnelMessage);\n }\n if (message.tunnelDisconnectEvent !== undefined) {\n obj.tunnelDisconnectEvent = TunnelDisconnectEvent.toJSON(message.tunnelDisconnectEvent);\n }\n if (message.claimTunnelRequest !== undefined) {\n obj.claimTunnelRequest = ClaimTunnelRequest.toJSON(message.claimTunnelRequest);\n }\n if (message.claimTunnelResponse !== undefined) {\n obj.claimTunnelResponse = ClaimTunnelResponse.toJSON(message.claimTunnelResponse);\n }\n if (message.createClaimOnChainRequest !== undefined) {\n obj.createClaimOnChainRequest = RequestClaimOnAvsRequest.toJSON(message.createClaimOnChainRequest);\n }\n if (message.createClaimOnChainResponse !== undefined) {\n obj.createClaimOnChainResponse = RequestClaimOnAvsResponse.toJSON(message.createClaimOnChainResponse);\n }\n if (message.completeClaimOnChainRequest !== undefined) {\n obj.completeClaimOnChainRequest = CompleteClaimOnAvsRequest.toJSON(message.completeClaimOnChainRequest);\n }\n if (message.completeClaimOnChainResponse !== undefined) {\n obj.completeClaimOnChainResponse = CompleteClaimOnAvsResponse.toJSON(message.completeClaimOnChainResponse);\n }\n if (message.toprfRequest !== undefined) {\n obj.toprfRequest = TOPRFRequest.toJSON(message.toprfRequest);\n }\n if (message.toprfResponse !== undefined) {\n obj.toprfResponse = TOPRFResponse.toJSON(message.toprfResponse);\n }\n if (message.createTaskOnMechainRequest !== undefined) {\n obj.createTaskOnMechainRequest = CreateTaskOnMechainRequest.toJSON(message.createTaskOnMechainRequest);\n }\n if (message.createTaskOnMechainResponse !== undefined) {\n obj.createTaskOnMechainResponse = CreateTaskOnMechainResponse.toJSON(message.createTaskOnMechainResponse);\n }\n if (message.claimTeeBundleRequest !== undefined) {\n obj.claimTeeBundleRequest = ClaimTeeBundleRequest.toJSON(message.claimTeeBundleRequest);\n }\n if (message.claimTeeBundleResponse !== undefined) {\n obj.claimTeeBundleResponse = ClaimTeeBundleResponse.toJSON(message.claimTeeBundleResponse);\n }\n if (message.fetchCertificateBytesRequest !== undefined) {\n obj.fetchCertificateBytesRequest = FetchCertificateBytesRequest.toJSON(message.fetchCertificateBytesRequest);\n }\n if (message.fetchCertificateBytesResponse !== undefined) {\n obj.fetchCertificateBytesResponse = FetchCertificateBytesResponse.toJSON(message.fetchCertificateBytesResponse);\n }\n return obj;\n },\n\n create(base?: DeepPartial<RPCMessage>): RPCMessage {\n return RPCMessage.fromPartial(base ?? {});\n },\n fromPartial(object: DeepPartial<RPCMessage>): RPCMessage {\n const message = createBaseRPCMessage();\n message.id = object.id ?? 0;\n message.initRequest = (object.initRequest !== undefined && object.initRequest !== null)\n ? InitRequest.fromPartial(object.initRequest)\n : undefined;\n message.initResponse = (object.initResponse !== undefined && object.initResponse !== null)\n ? InitResponse.fromPartial(object.initResponse)\n : undefined;\n message.connectionTerminationAlert =\n (object.connectionTerminationAlert !== undefined && object.connectionTerminationAlert !== null)\n ? ErrorData.fromPartial(object.connectionTerminationAlert)\n : undefined;\n message.requestError = (object.requestError !== undefined && object.requestError !== null)\n ? ErrorData.fromPartial(object.requestError)\n : undefined;\n message.createTunnelRequest = (object.createTunnelRequest !== undefined && object.createTunnelRequest !== null)\n ? CreateTunnelRequest.fromPartial(object.createTunnelRequest)\n : undefined;\n message.createTunnelResponse = (object.createTunnelResponse !== undefined && object.createTunnelResponse !== null)\n ? Empty.fromPartial(object.createTunnelResponse)\n : undefined;\n message.disconnectTunnelRequest =\n (object.disconnectTunnelRequest !== undefined && object.disconnectTunnelRequest !== null)\n ? DisconnectTunnelRequest.fromPartial(object.disconnectTunnelRequest)\n : undefined;\n message.disconnectTunnelResponse =\n (object.disconnectTunnelResponse !== undefined && object.disconnectTunnelResponse !== null)\n ? Empty.fromPartial(object.disconnectTunnelResponse)\n : undefined;\n message.tunnelMessage = (object.tunnelMessage !== undefined && object.tunnelMessage !== null)\n ? TunnelMessage.fromPartial(object.tunnelMessage)\n : undefined;\n message.tunnelDisconnectEvent =\n (object.tunnelDisconnectEvent !== undefined && object.tunnelDisconnectEvent !== null)\n ? TunnelDisconnectEvent.fromPartial(object.tunnelDisconnectEvent)\n : undefined;\n message.claimTunnelRequest = (object.claimTunnelRequest !== undefined && object.claimTunnelRequest !== null)\n ? ClaimTunnelRequest.fromPartial(object.claimTunnelRequest)\n : undefined;\n message.claimTunnelResponse = (object.claimTunnelResponse !== undefined && object.claimTunnelResponse !== null)\n ? ClaimTunnelResponse.fromPartial(object.claimTunnelResponse)\n : undefined;\n message.createClaimOnChainRequest =\n (object.createClaimOnChainRequest !== undefined && object.createClaimOnChainRequest !== null)\n ? RequestClaimOnAvsRequest.fromPartial(object.createClaimOnChainRequest)\n : undefined;\n message.createClaimOnChainResponse =\n (object.createClaimOnChainResponse !== undefined && object.createClaimOnChainResponse !== null)\n ? RequestClaimOnAvsResponse.fromPartial(object.createClaimOnChainResponse)\n : undefined;\n message.completeClaimOnChainRequest =\n (object.completeClaimOnChainRequest !== undefined && object.completeClaimOnChainRequest !== null)\n ? CompleteClaimOnAvsRequest.fromPartial(object.completeClaimOnChainRequest)\n : undefined;\n message.completeClaimOnChainResponse =\n (object.completeClaimOnChainResponse !== undefined && object.completeClaimOnChainResponse !== null)\n ? CompleteClaimOnAvsResponse.fromPartial(object.completeClaimOnChainResponse)\n : undefined;\n message.toprfRequest = (object.toprfRequest !== undefined && object.toprfRequest !== null)\n ? TOPRFRequest.fromPartial(object.toprfRequest)\n : undefined;\n message.toprfResponse = (object.toprfResponse !== undefined && object.toprfResponse !== null)\n ? TOPRFResponse.fromPartial(object.toprfResponse)\n : undefined;\n message.createTaskOnMechainRequest =\n (object.createTaskOnMechainRequest !== undefined && object.createTaskOnMechainRequest !== null)\n ? CreateTaskOnMechainRequest.fromPartial(object.createTaskOnMechainRequest)\n : undefined;\n message.createTaskOnMechainResponse =\n (object.createTaskOnMechainResponse !== undefined && object.createTaskOnMechainResponse !== null)\n ? CreateTaskOnMechainResponse.fromPartial(object.createTaskOnMechainResponse)\n : undefined;\n message.claimTeeBundleRequest =\n (object.claimTeeBundleRequest !== undefined && object.claimTeeBundleRequest !== null)\n ? ClaimTeeBundleRequest.fromPartial(object.claimTeeBundleRequest)\n : undefined;\n message.claimTeeBundleResponse =\n (object.claimTeeBundleResponse !== undefined && object.claimTeeBundleResponse !== null)\n ? ClaimTeeBundleResponse.fromPartial(object.claimTeeBundleResponse)\n : undefined;\n message.fetchCertificateBytesRequest =\n (object.fetchCertificateBytesRequest !== undefined && object.fetchCertificateBytesRequest !== null)\n ? FetchCertificateBytesRequest.fromPartial(object.fetchCertificateBytesRequest)\n : undefined;\n message.fetchCertificateBytesResponse =\n (object.fetchCertificateBytesResponse !== undefined && object.fetchCertificateBytesResponse !== null)\n ? FetchCertificateBytesResponse.fromPartial(object.fetchCertificateBytesResponse)\n : undefined;\n return message;\n },\n};\n\nfunction createBaseRPCMessages(): RPCMessages {\n return { messages: [] };\n}\n\nexport const RPCMessages: MessageFns<RPCMessages> = {\n encode(message: RPCMessages, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n for (const v of message.messages) {\n RPCMessage.encode(v!, writer.uint32(10).fork()).join();\n }\n return writer;\n },\n\n decode(input: BinaryReader | Uint8Array, length?: number): RPCMessages {\n const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseRPCMessages();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1: {\n if (tag !== 10) {\n break;\n }\n\n message.messages.push(RPCMessage.decode(reader, reader.uint32()));\n continue;\n }\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skip(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): RPCMessages {\n return {\n messages: globalThis.Array.isArray(object?.messages)\n ? object.messages.map((e: any) => RPCMessage.fromJSON(e))\n : [],\n };\n },\n\n toJSON(message: RPCMessages): unknown {\n const obj: any = {};\n if (message.messages?.length) {\n obj.messages = message.messages.map((e) => RPCMessage.toJSON(e));\n }\n return obj;\n },\n\n create(base?: DeepPartial<RPCMessages>): RPCMessages {\n return RPCMessages.fromPartial(base ?? {});\n },\n fromPartial(object: DeepPartial<RPCMessages>): RPCMessages {\n const message = createBaseRPCMessages();\n message.messages = object.messages?.map((e) => RPCMessage.fromPartial(e)) || [];\n return message;\n },\n};\n\nfunction bytesFromBase64(b64: string): Uint8Array {\n if ((globalThis as any).Buffer) {\n return Uint8Array.from(globalThis.Buffer.from(b64, \"base64\"));\n } else {\n const bin = globalThis.atob(b64);\n const arr = new Uint8Array(bin.length);\n for (let i = 0; i < bin.length; ++i) {\n arr[i] = bin.charCodeAt(i);\n }\n return arr;\n }\n}\n\nfunction base64FromBytes(arr: Uint8Array): string {\n if ((globalThis as any).Buffer) {\n return globalThis.Buffer.from(arr).toString(\"base64\");\n } else {\n const bin: string[] = [];\n arr.forEach((byte) => {\n bin.push(globalThis.String.fromCharCode(byte));\n });\n return globalThis.btoa(bin.join(\"\"));\n }\n}\n\ntype Builtin = Date | Function | Uint8Array | string | number | boolean | undefined;\n\nexport type DeepPartial<T> = T extends Builtin ? T\n : T extends globalThis.Array<infer U> ? globalThis.Array<DeepPartial<U>>\n : T extends ReadonlyArray<infer U> ? ReadonlyArray<DeepPartial<U>>\n : T extends {} ? { [K in keyof T]?: DeepPartial<T[K]> }\n : Partial<T>;\n\nfunction longToNumber(int64: { toString(): string }): number {\n const num = globalThis.Number(int64.toString());\n if (num > globalThis.Number.MAX_SAFE_INTEGER) {\n throw new globalThis.Error(\"Value is larger than Number.MAX_SAFE_INTEGER\");\n }\n if (num < globalThis.Number.MIN_SAFE_INTEGER) {\n throw new globalThis.Error(\"Value is smaller than Number.MIN_SAFE_INTEGER\");\n }\n return num;\n}\n\nfunction isObject(value: any): boolean {\n return typeof value === \"object\" && value !== null;\n}\n\nfunction isSet(value: any): boolean {\n return value !== null && value !== undefined;\n}\n\nexport interface MessageFns<T> {\n encode(message: T, writer?: BinaryWriter): BinaryWriter;\n decode(input: BinaryReader | Uint8Array, length?: number): T;\n fromJSON(object: any): T;\n toJSON(message: T): unknown;\n create(base?: DeepPartial<T>): T;\n fromPartial(object: DeepPartial<T>): T;\n}\n", "import { type LoggerOptions, pino, stdTimeFunctions } from 'pino'\n\nimport type { LogLevel } from '#src/types/index.ts'\nimport { getEnvVariable } from '#src/utils/env.ts'\n\nconst PII_PROPERTIES = ['ownerPrivateKey', 'secretParams']\nconst redactedText = '[REDACTED]'\nconst envLevel = getEnvVariable('LOG_LEVEL') as LogLevel\n\nexport let logger = pino()\n\nmakeLogger(false, envLevel)\n\n/**\n * Creates a logger instance with optional redaction of PII.\n * Replaces default logger\n * See PII_PROPERTIES for the list of properties that will be redacted.\n *\n * @param redactPii - whether to redact PII from logs\n * @param level - the log level to use\n * @param onLog - a callback to call when a log is written\n */\nexport function makeLogger(\n\tredactPii: boolean,\n\tlevel?: LogLevel,\n\tonLog?: (level: LogLevel, log: any) => void\n) {\n\tconst opts: LoggerOptions = {\n\t\t// Log human readable time stamps instead of epoch time\n\t\ttimestamp: stdTimeFunctions.isoTime,\n\t}\n\tif(redactPii) {\n\t\topts.formatters = { log: redact }\n\t\topts.serializers = { redact }\n\t\topts.browser = {\n\t\t\twrite: {\n\t\t\t\tfatal: log => writeLog('fatal', log),\n\t\t\t\terror: log => writeLog('error', log),\n\t\t\t\twarn: log => writeLog('warn', log),\n\t\t\t\tinfo: log => writeLog('info', log),\n\t\t\t\tdebug: log => writeLog('debug', log),\n\t\t\t\ttrace: log => writeLog('trace', log),\n\t\t\t}\n\t\t}\n\t}\n\n\tconst pLogger = pino(opts)\n\tpLogger.level = level || 'info'\n\n\tlogger = pLogger\n\treturn pLogger\n\n\tfunction writeLog(level: LogLevel, log: any) {\n\t\tlog = redact(log)\n\t\tconst { msg, ...obj } = log\n\t\tif(console[level]) {\n\t\t\tconsole[level](obj, msg)\n\t\t} else {\n\t\t\tconsole.log(obj, msg)\n\t\t}\n\n\t\tonLog?.(level, log)\n\t}\n}\n\nfunction isObjectProperty(property) {\n\treturn (typeof property) === 'object'\n\t\t&& !Array.isArray(property)\n\t\t&& property !== null\n}\n\nfunction getReplacer() {\n\t// Store references to previously visited objects\n\tconst references = new WeakSet()\n\n\treturn function(key, value) {\n\t\tconst isObject = (typeof value) === 'object' && value !== null\n\t\tif(isObject) {\n\t\t\tif(references.has(value)) {\n\t\t\t\treturn '[CIRCULAR]'\n\t\t\t}\n\n\t\t\treferences.add(value)\n\t\t}\n\n\t\treturn value\n\t}\n}\n\nexport function redact(json) {\n\tconst isObject = isObjectProperty(json)\n\n\tif(!isObject && !Array.isArray(json)) {\n\t\treturn json\n\t}\n\n\tconst redacted = JSON.parse(JSON.stringify(json, getReplacer()))\n\n\tfor(const prop in redacted) {\n\t\tif(PII_PROPERTIES.includes(prop)) {\n\t\t\tredacted[prop] = redactedText\n\t\t}\n\n\t\tif(Array.isArray(redacted[prop])) {\n\t\t\tfor(const [index, value] of redacted[prop].entries()) {\n\t\t\t\tredacted[prop][index] = redact(value)\n\t\t\t}\n\t\t} else if(isObjectProperty(redacted[prop])) {\n\t\t\tredacted[prop] = redact(redacted[prop])\n\t\t}\n\t}\n\n\treturn redacted\n}\n", "import { base64Encode } from '@bufbuild/protobuf/wire'\nimport { concatenateUint8Arrays } from '@reclaimprotocol/tls'\n\nimport type { ArraySlice, OPRFRawMarker, RedactedOrHashedArraySlice, TOPRFProofParams } from '#src/types/index.ts'\n\nexport const REDACTION_CHAR = '*'\nexport const REDACTION_CHAR_CODE = REDACTION_CHAR.charCodeAt(0)\n\ntype SliceWithReveal<T> = {\n\tblock: T\n\tredactedPlaintext: Uint8Array\n\t/**\n\t * If the block has some TOPRF claims -- they'll be set here\n\t */\n\ttoprfs?: TOPRFProofParams[]\n\t/**\n\t * If the block has oprf-raw markers for server-side OPRF computation\n\t */\n\toprfRawMarkers?: OPRFRawMarker[]\n\t/**\n\t * If text was replaced in the previous block w TOPRF but\n\t * it overshot into this block. The \"length\" specifies how much\n\t * of it got overshot into this block\n\t */\n\tovershotToprfFromPrevBlock?: { length: number }\n\t/**\n\t * If an oprf-raw marker from the previous block overshot into this block.\n\t * The server will collect plaintext from this block to complete the OPRF.\n\t */\n\tovershotOprfRawFromPrevBlock?: { length: number }\n}\n\nexport type RevealedSlices<T> = 'all' | SliceWithReveal<T>[]\n\n/**\n * Check if a redacted string is congruent with the original string.\n * @param redacted the redacted content, redacted content is replaced by '*'\n * @param original the original content\n */\nexport function isRedactionCongruent<T extends string | Uint8Array>(\n\tredacted: T,\n\toriginal: T\n): boolean {\n\tfor(let i = 0;i < redacted.length;i++) {\n\t\tconst element = redacted[i]\n\t\tconst areSame = element === original[i]\n\t\t\t|| (typeof element === 'string' && element === REDACTION_CHAR)\n\t\t\t|| (typeof element === 'number' && element === REDACTION_CHAR_CODE)\n\t\tif(!areSame) {\n\t\t\treturn false\n\t\t}\n\t}\n\n\treturn true\n}\n\n/**\n * Is the string fully redacted?\n */\nexport function isFullyRedacted<T extends string | Uint8Array>(\n\tredacted: T\n): boolean {\n\tfor(const element of redacted) {\n\t\tif(\n\t\t\telement !== REDACTION_CHAR\n\t\t\t&& element !== REDACTION_CHAR_CODE\n\t\t) {\n\t\t\treturn false\n\t\t}\n\t}\n\n\treturn true\n}\n\n/**\n * Given some plaintext blocks and a redaction function, return the blocks that\n * need to be revealed to the other party\n *\n * Use case: we get the response for a request in several blocks, and want to redact\n * pieces that go through multiple blocks. We can use this function to get the\n * blocks that need to be revealed to the other party\n *\n * @example if we received [\"secret is 12\",\"345\",\"678. Thanks\"]. We'd want\n * to redact the \"12345678\" and reveal the rest. We'd pass in the blocks and\n * the redact function will return the redactions, namely [10,19].\n * The function will return the blocks [\"secret is **\",\"***. Thanks\"].\n * The middle block is fully redacted, so it's not returned\n *\n * @param blocks blocks to reveal\n * @param redact function that returns the redactions\n * @returns blocks to reveal\n */\nexport async function getBlocksToReveal<T extends { plaintext: Uint8Array }>(\n\tblocks: T[],\n\tredact: (total: Uint8Array) => RedactedOrHashedArraySlice[],\n\tperformOprf: (plaintext: Uint8Array) => Promise<TOPRFProofParams>\n) {\n\tconst slicesWithReveal: SliceWithReveal<T>[] = blocks.map(block => ({\n\t\tblock,\n\t\t// copy the plaintext to avoid mutating the original\n\t\tredactedPlaintext: new Uint8Array(block.plaintext)\n\t}))\n\tconst total = concatenateUint8Arrays(blocks.map(b => b.plaintext))\n\tconst redactions = redact(total)\n\n\tif(!redactions.length) {\n\t\treturn 'all'\n\t}\n\n\tlet blockIdx = 0\n\tlet cursorInBlock = 0\n\tlet cursor = 0\n\n\tfor(const redaction of redactions) {\n\t\tawait redactBlocks(redaction)\n\t}\n\n\t// only reveal blocks that have some data to reveal,\n\t// or are completely plaintext\n\treturn slicesWithReveal\n\t\t.filter(s => !isFullyRedacted(s.redactedPlaintext))\n\n\tasync function redactBlocks(slice: RedactedOrHashedArraySlice) {\n\t\twhile(cursor < slice.fromIndex) {\n\t\t\tadvance()\n\t\t}\n\n\t\t// Handle oprf-raw: don't redact, don't call OPRF, just mark position\n\t\t// Server will compute OPRF and do replacement\n\t\tif(slice.hash === 'oprf-raw') {\n\t\t\tconst startBlockIdx = blockIdx\n\t\t\tconst startCursorInBlock = cursorInBlock\n\t\t\tconst totalLength = slice.toIndex - slice.fromIndex\n\n\t\t\t// Set marker on first block\n\t\t\tconst block = slicesWithReveal[blockIdx]\n\t\t\tblock.oprfRawMarkers ||= []\n\t\t\tblock.oprfRawMarkers.push({\n\t\t\t\tdataLocation: {\n\t\t\t\t\tfromIndex: startCursorInBlock,\n\t\t\t\t\tlength: totalLength\n\t\t\t\t}\n\t\t\t})\n\n\t\t\t// Advance cursor past this slice, tracking overshoot\n\t\t\tlet overshootLen = 0\n\t\t\twhile(cursor < slice.toIndex) {\n\t\t\t\tif(blockIdx !== startBlockIdx) {\n\t\t\t\t\tovershootLen += 1\n\t\t\t\t}\n\n\t\t\t\tadvance()\n\t\t\t}\n\n\t\t\t// If data overshot into next block, mark it\n\t\t\tif(overshootLen) {\n\t\t\t\tslicesWithReveal[blockIdx]\n\t\t\t\t\t.overshotOprfRawFromPrevBlock = { length: overshootLen }\n\t\t\t}\n\n\t\t\treturn\n\t\t}\n\n\t\tif(slice.hash) {\n\t\t\tconst plaintext = total.slice(slice.fromIndex, slice.toIndex)\n\t\t\tconst { nullifier, responses, mask } = await performOprf(plaintext)\n\n\t\t\t// set the TOPRF claim on the first blocks this\n\t\t\t// redaction covers\n\t\t\tconst toprf: TOPRFProofParams = {\n\t\t\t\tnullifier,\n\t\t\t\tresponses,\n\t\t\t\tdataLocation: {\n\t\t\t\t\tfromIndex: cursorInBlock,\n\t\t\t\t\tlength: slice.toIndex - slice.fromIndex\n\t\t\t\t},\n\t\t\t\tmask,\n\t\t\t\tplaintext\n\t\t\t}\n\t\t\tconst startBlockIdx = blockIdx\n\t\t\tconst block = slicesWithReveal[blockIdx]\n\t\t\tblock.toprfs ||= []\n\t\t\tblock.toprfs.push(toprf)\n\n\t\t\tconst nullifierStr\n\t\t\t\t= binaryHashToStr(nullifier, toprf.dataLocation!.length)\n\n\t\t\tlet i = 0\n\t\t\tlet overshootLen = 0\n\t\t\twhile(cursor < slice.toIndex) {\n\t\t\t\tif(blockIdx !== startBlockIdx) {\n\t\t\t\t\tovershootLen += 1\n\t\t\t\t}\n\n\t\t\t\tslicesWithReveal[blockIdx].redactedPlaintext[cursorInBlock]\n\t\t\t\t\t= nullifierStr.charCodeAt(i)\n\t\t\t\tadvance()\n\n\t\t\t\ti += 1\n\t\t\t}\n\n\t\t\tif(overshootLen) {\n\t\t\t\tslicesWithReveal[blockIdx]\n\t\t\t\t\t.overshotToprfFromPrevBlock = { length: overshootLen }\n\t\t\t}\n\t\t}\n\n\t\twhile(cursor < slice.toIndex) {\n\t\t\tslicesWithReveal[blockIdx]\n\t\t\t\t.redactedPlaintext[cursorInBlock] = REDACTION_CHAR_CODE\n\t\t\tadvance()\n\t\t}\n\t}\n\n\tfunction advance() {\n\t\tcursor += 1\n\t\tcursorInBlock += 1\n\t\tif(cursorInBlock >= blocks[blockIdx].plaintext.length) {\n\t\t\tblockIdx += 1\n\t\t\tcursorInBlock = 0\n\t\t}\n\t}\n}\n\n/**\n * Redact the following slices from the total\n */\nexport function redactSlices(total: Uint8Array, slices: ArraySlice[]) {\n\tconst redacted = new Uint8Array(total)\n\n\tfor(const slice of slices) {\n\t\tfor(let i = slice.fromIndex;i < slice.toIndex;i++) {\n\t\t\tredacted[i] = REDACTION_CHAR_CODE\n\t\t}\n\t}\n\n\treturn redacted\n}\n\n/**\n * Converts the binary hash to an ASCII string of the expected length.\n * If the hash is shorter than the expected length, it will be padded with\n * '0' characters. If it's longer, it will be truncated.\n */\nexport function binaryHashToStr(hash: Uint8Array, expLength: number) {\n\treturn base64Encode(hash).padEnd(expLength, '0').slice(0, expLength)\n}", "import { asciiToUint8Array, concatenateUint8Arrays } from '@reclaimprotocol/tls'\nimport type { IncomingHttpHeaders } from 'http'\n\nimport type { ArraySlice, Transcript } from '#src/types/index.ts'\nimport { findIndexInUint8Array, uint8ArrayToStr } from '#src/utils/generics.ts'\nimport { REDACTION_CHAR_CODE } from '#src/utils/redactions.ts'\n\nexport type HttpRequest = {\n method: string\n url: string\n protocol: string\n headers: IncomingHttpHeaders\n body?: Uint8Array\n}\n\nexport type HttpResponse = {\n statusCode: number\n statusMessage: string\n headers: IncomingHttpHeaders\n body: Uint8Array\n headersComplete: boolean\n complete: boolean\n\n /**\n * Index of the first byte of the status line\n */\n statusLineEndIndex?: number\n /**\n * Index of the first byte of the body\n * in the complete response\n */\n bodyStartIndex?: number\n /**\n * If using chunked transfer encoding,\n * this will be set & contain indices of each\n * chunk in the complete response\n */\n chunks?: ArraySlice[]\n\n headerIndices: Map<string, ArraySlice>\n\t/**\n\t * index of separator \\r\\n\\r\\n between headers and body\n\t */\n\theaderEndIdx: number\n}\n\nconst HTTP_HEADER_LINE_END = asciiToUint8Array('\\r\\n')\n\n/**\n * parses http/1.1 responses\n */\nexport function makeHttpResponseParser() {\n\t/** the HTTP response data */\n\tconst res: HttpResponse = {\n\t\tstatusCode: 0,\n\t\tstatusMessage: '',\n\t\theaders: {},\n\t\tbody: new Uint8Array(),\n\t\tcomplete: false,\n\t\theadersComplete: false,\n\t\theaderIndices:new Map<string, ArraySlice>(),\n\t\theaderEndIdx: 0\n\t}\n\n\tlet remainingBodyBytes = 0\n\tlet isChunked = false\n\tlet remaining: Uint8Array = new Uint8Array()\n\tlet currentByteIdx = 0\n\n\treturn {\n\t\tres,\n\t\t/**\n * Parse the next chunk of data\n * @param data the data to parse\n */\n\t\tonChunk(data: Uint8Array) {\n\t\t\t// concatenate the remaining data from the last chunk\n\t\t\tremaining = concatenateUint8Arrays([remaining, data])\n\t\t\t// if we don't have the headers yet, keep reading lines\n\t\t\t// as each header is in a line\n\t\t\tif(!res.headersComplete) {\n\t\t\t\tfor(let line = getLine(); typeof line !== 'undefined'; line = getLine()) {\n\t\t\t\t\t// first line is the HTTP version, status code & message\n\t\t\t\t\tif(!res.statusCode) {\n\t\t\t\t\t\tconst [, statusCode, statusMessage] = line.match(/HTTP\\/\\d\\.\\d (\\d+) (.*)/) || []\n\t\t\t\t\t\tres.statusCode = Number(statusCode)\n\t\t\t\t\t\tres.statusMessage = statusMessage\n\t\t\t\t\t\tres.statusLineEndIndex = currentByteIdx - HTTP_HEADER_LINE_END.length\n\t\t\t\t\t} else if(line === '') { // empty line signifies end of headers\n\t\t\t\t\t\tres.headersComplete = true\n\t\t\t\t\t\tres.headerEndIdx = currentByteIdx - 4\n\t\t\t\t\t\t// if the response is chunked, we need to process the body differently\n\t\t\t\t\t\tif(res.headers['transfer-encoding']?.includes('chunked')) {\n\t\t\t\t\t\t\tisChunked = true\n\t\t\t\t\t\t\tres.chunks = []\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t// if the response has a content-length, we know how many bytes to read\n\t\t\t\t\t\t} else if(res.headers['content-length']) {\n\t\t\t\t\t\t\tremainingBodyBytes = Number(res.headers['content-length'])\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tremainingBodyBytes = -1\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t// otherwise,\n\t\t\t\t\t\t\t// no content-length, no chunked transfer encoding\n\t\t\t\t\t\t\t// means wait till the stream ends\n\t\t\t\t\t\t\t// https://stackoverflow.com/a/11376887\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if(!res.complete) { // parse the header\n\t\t\t\t\t\tconst [key, value] = line.split(': ')\n\t\t\t\t\t\tres.headers[key.toLowerCase()] = value\n\t\t\t\t\t\tres.headerIndices[key.toLowerCase()] = {\n\t\t\t\t\t\t\tfromIndex:currentByteIdx - line.length - HTTP_HEADER_LINE_END.length,\n\t\t\t\t\t\t\ttoIndex:currentByteIdx - HTTP_HEADER_LINE_END.length\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthrow new Error('got more data after response was complete')\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif(res.headersComplete) {\n\t\t\t\tif(remainingBodyBytes) {\n\t\t\t\t\treadBody()\n\t\t\t\t\t// if no more body bytes to read,\n\t\t\t\t\t// and the response was not chunked we're done\n\t\t\t\t\tif(!remainingBodyBytes && !isChunked) {\n\t\t\t\t\t\tres.complete = true\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif(res.headers['content-length'] === '0') {\n\t\t\t\t\tres.complete = true\n\t\t\t\t}\n\n\t\t\t\tif(isChunked) {\n\t\t\t\t\tfor(let line = getLine(); typeof line !== 'undefined'; line = getLine()) {\n\t\t\t\t\t\tif(line === '') {\n\t\t\t\t\t\t\tcontinue\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst chunkSize = Number.parseInt(line, 16)\n\t\t\t\t\t\t// if chunk size is 0, we're done\n\t\t\t\t\t\tif(!chunkSize) {\n\t\t\t\t\t\t\tres.complete = true\n\t\t\t\t\t\t\tcontinue\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tres.chunks?.push({\n\t\t\t\t\t\t\tfromIndex: currentByteIdx,\n\t\t\t\t\t\t\ttoIndex: currentByteIdx + chunkSize,\n\t\t\t\t\t\t})\n\n\t\t\t\t\t\t// otherwise read the chunk\n\t\t\t\t\t\tremainingBodyBytes = chunkSize\n\t\t\t\t\t\treadBody()\n\n\t\t\t\t\t\t// if we read all the data we had,\n\t\t\t\t\t\t// but there's still data left,\n\t\t\t\t\t\t// break the loop and wait for the next chunk\n\t\t\t\t\t\tif(remainingBodyBytes) {\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t/**\n * Call to prevent further parsing; indicating the end of the request\n * Checks that the response is valid & complete, otherwise throws an error\n */\n\t\tstreamEnded() {\n\t\t\tif(!res.headersComplete) {\n\t\t\t\tthrow new Error('stream ended before headers were complete')\n\t\t\t}\n\n\t\t\tif(remaining.length) {\n\t\t\t\tthrow new Error('stream ended before remaining data arrived')\n\t\t\t}\n\n\t\t\tif(remainingBodyBytes > 0) {\n\t\t\t\tthrow new Error('stream ended before all body bytes were received')\n\t\t\t}\n\n\t\t\tres.complete = true\n\t\t}\n\t}\n\n\tfunction readBody() {\n\t\tif(res.complete) {\n\t\t\tthrow new Error('got more data after response was complete')\n\t\t}\n\n\t\tif(!res.bodyStartIndex) {\n\t\t\tres.bodyStartIndex = currentByteIdx\n\t\t}\n\n\t\tlet bytesToCopy: number\n\t\tif(remainingBodyBytes === -1) {\n\t\t\t// all bytes are body bytes\n\t\t\tbytesToCopy = remaining.length\n\t\t} else {\n\t\t\t// take the number of bytes we need to read, or the number of bytes remaining\n\t\t\t// and append to the bytes of the body\n\t\t\tbytesToCopy = Math.min(remainingBodyBytes, remaining.length)\n\t\t\tremainingBodyBytes -= bytesToCopy\n\t\t}\n\n\t\tres.body = concatenateUint8Arrays([\n\t\t\tres.body,\n\t\t\tremaining.slice(0, bytesToCopy)\n\t\t])\n\t\tremaining = remaining.slice(bytesToCopy)\n\t\tcurrentByteIdx += bytesToCopy\n\t}\n\n\tfunction getLine() {\n\t\t// find end of line, if it exists\n\t\t// otherwise return undefined\n\t\tconst idx = findIndexInUint8Array(remaining, HTTP_HEADER_LINE_END)\n\t\tif(idx === -1) {\n\t\t\treturn undefined\n\t\t}\n\n\t\tconst line = uint8ArrayToStr(remaining.slice(0, idx))\n\t\tremaining = remaining.slice(idx + HTTP_HEADER_LINE_END.length)\n\n\t\tcurrentByteIdx += idx + HTTP_HEADER_LINE_END.length\n\n\t\treturn line\n\t}\n}\n\n/**\n * Read the HTTP request from a TLS receipt transcript.\n * @param receipt the transcript to read from or application messages if they were extracted beforehand\n * @returns the parsed HTTP request\n */\nexport function getHttpRequestDataFromTranscript(receipt: Transcript<Uint8Array>) {\n\tconst clientMsgs = receipt\n\t\t.filter(s => s.sender === 'client')\n\n\t// if the first message is redacted, we can't parse it\n\t// as we don't know what the request was\n\tif(clientMsgs[0].message[0] === REDACTION_CHAR_CODE) {\n\t\tthrow new Error('First client message request is redacted. Cannot parse')\n\t}\n\n\tconst request: HttpRequest = {\n\t\tmethod: '',\n\t\turl: '',\n\t\tprotocol: '',\n\t\theaders: {}\n\t}\n\tlet requestBuffer = concatenateUint8Arrays(clientMsgs.map(m => m.message))\n\t// keep reading lines until we get to the end of the headers\n\tfor(let line = getLine(); typeof line !== 'undefined'; line = getLine()) {\n\t\tif(line === '') {\n\t\t\tbreak\n\t\t}\n\n\t\tif(!request.method) {\n\t\t\tconst [, method, url, protocol] = line.match(/(\\w+) (.*) (.*)/) || []\n\t\t\trequest.method = method.toLowerCase()\n\t\t\trequest.url = url\n\t\t\trequest.protocol = protocol\n\t\t} else {\n\t\t\tlet keyIdx = line.indexOf(':')\n\t\t\tif(keyIdx === -1) {\n\t\t\t\tkeyIdx = line.length - 1\n\t\t\t}\n\n\t\t\tconst key = line.slice(0, keyIdx)\n\t\t\t\t.toLowerCase()\n\t\t\t\t.trim()\n\t\t\tconst value = line.slice(keyIdx + 1)\n\t\t\t\t.trim()\n\t\t\tconst oldValue = request.headers[key]\n\t\t\tif(typeof oldValue === 'string') {\n\t\t\t\trequest.headers[key] = [oldValue, value]\n\t\t\t} else if(Array.isArray(oldValue)) {\n\t\t\t\toldValue.push(value)\n\t\t\t} else {\n\t\t\t\trequest.headers[key] = value\n\t\t\t}\n\t\t}\n\t}\n\n\t//the rest is request body\n\tif(requestBuffer.length) {\n\t\trequest.body = requestBuffer\n\t}\n\n\tif(!request.method) {\n\t\tthrow new Error('Client request is incomplete')\n\t}\n\n\treturn request\n\n\tfunction getLine() {\n\t\tconst idx = findIndexInUint8Array(requestBuffer, HTTP_HEADER_LINE_END)\n\t\tif(idx === -1) {\n\t\t\treturn undefined\n\t\t}\n\n\t\tconst line = uint8ArrayToStr(requestBuffer.slice(0, idx))\n\t\trequestBuffer = requestBuffer\n\t\t\t.slice(idx + HTTP_HEADER_LINE_END.length)\n\n\t\treturn line\n\t}\n}", "import type { CipherSuite } from '@reclaimprotocol/tls'\nimport { concatenateUint8Arrays, crypto, generateIV } from '@reclaimprotocol/tls'\nimport type {\n\tEncryptionAlgorithm,\n\tMakeOPRFOperator,\n\tMakeZKOperatorOpts,\n\tOPRFOperator,\n\tPrivateInput,\n\tPublicInput,\n\tRawPublicInput,\n\tZKEngine,\n\tZKOperator,\n\tZKTOPRFPublicSignals\n} from '@reclaimprotocol/zk-symmetric-crypto'\nimport {\n\tceilToBlockSizeMultiple,\n\tCONFIG as ZK_CONFIG,\n\tgenerateProof,\n\tgetBlockSizeBytes,\n\tmakeLocalFileFetch,\n\tmakeRemoteFileFetch,\n\tverifyProof\n} from '@reclaimprotocol/zk-symmetric-crypto'\nimport { makeGnarkOPRFOperator, makeGnarkZkOperator, } from '@reclaimprotocol/zk-symmetric-crypto/gnark'\nimport { makeSnarkJsZKOperator } from '@reclaimprotocol/zk-symmetric-crypto/snarkjs'\nimport { makeStwoZkOperator } from '@reclaimprotocol/zk-symmetric-crypto/stwo'\nimport PQueue from 'p-queue'\n\nimport {\n\tDEFAULT_REMOTE_FILE_FETCH_BASE_URL,\n\tDEFAULT_ZK_CONCURRENCY,\n\tTOPRF_DOMAIN_SEPARATOR\n} from '#src/config/index.ts'\nimport type {\n\tMessageReveal_MessageRevealZk as ZKReveal,\n\tMessageReveal_TOPRFProof as TOPRFProof,\n\tMessageReveal_ZKProof as ZKProof\n} from '#src/proto/api.ts'\nimport { ZKProofEngine } from '#src/proto/api.ts'\nimport type {\n\tArraySlice,\n\tCompleteTLSPacket,\n\tLogger,\n\tOPRFOperators,\n\tPrepareZKProofsBaseOpts,\n\tTOPRFProofParams,\n\tZKOperators,\n\tZKRevealInfo\n} from '#src/types/index.ts'\nimport { detectEnvironment, getEnvVariable } from '#src/utils/env.ts'\nimport { AttestorError } from '#src/utils/error.ts'\nimport {\n\tgetPureCiphertext,\n\tgetRecordIV,\n\tgetZkAlgorithmForCipherSuite,\n\tisTls13Suite,\n\tstrToUint8Array\n} from '#src/utils/generics.ts'\nimport { logger as LOGGER } from '#src/utils/logger.ts'\nimport { binaryHashToStr, isFullyRedacted, isRedactionCongruent, REDACTION_CHAR_CODE } from '#src/utils/redactions.ts'\n\ntype GenerateZKChunkProofOpts = {\n\tkey: Uint8Array\n\tiv: Uint8Array\n\t/**\n\t * ciphertext obtained from the TLS packet\n\t * includes authTag, record IV, and ciphertext\n\t */\n\tciphertext: Uint8Array\n\tredactedPlaintext: Uint8Array\n\n\tslice: ArraySlice\n}\n\ntype GenerateTOPRFChunkProofOpts = {\n\tkey: Uint8Array\n\tiv: Uint8Array\n\t/**\n\t * ciphertext obtained from the TLS packet\n\t * includes authTag, record IV, and ciphertext\n\t */\n\tciphertext: Uint8Array\n\n\tslice: ArraySlice\n\ttoprf: TOPRFProofParams\n}\n\ntype PrepareZKProofsOpts = {\n\tlogger?: Logger\n\tcipherSuite: CipherSuite\n} & PrepareZKProofsBaseOpts\n\ntype ZKVerifyOpts = {\n\tcipherSuite: CipherSuite\n\tciphertext: Uint8Array\n\tzkReveal: ZKReveal\n\tiv: Uint8Array\n\trecordNumber: number\n\ttoprfOvershotNullifier?: Uint8Array\n\t/**\n\t * Get the ciphertext of the next packet.\n\t * @param overshotNullifier The TOPRF nullifier that overshoots into\n\t * the next packet. This should be passed into the verifyZkPacket function\n\t * of the next packet.\n\t */\n\tgetNextPacket: (overshotNullifier: Uint8Array) => (Uint8Array | undefined)\n\n\tlogger?: Logger\n\t/** get ZK operator for specified algorithm */\n\tzkOperators?: ZKOperators\n\toprfOperators?: OPRFOperators\n\tzkEngine?: ZKEngine\n}\n\ntype ZKProofToGenerate = {\n\tstartIdx: number\n\tredactedPlaintext: Uint8Array\n\tprivateInput: PrivateInput\n\tpublicInput: PublicInput\n}\n\ntype TOPRFProofToGenerate = {\n\tprivateInput: PrivateInput\n\tpublicInput: PublicInput\n\ttoprf: TOPRFProofParams\n\tstartIdx: number\n}\n\ntype ZKPacketToProve = {\n\tonGeneratedProofs(proofs: ZKProof[], toprfs: TOPRFProof[]): void\n\talgorithm: EncryptionAlgorithm\n\tproofsToGenerate: ZKProofToGenerate[]\n\ttoprfsToGenerate: TOPRFProofToGenerate[]\n\tiv: Uint8Array\n}\n\nconst ZK_CONCURRENCY = +(\n\tgetEnvVariable('ZK_CONCURRENCY') || DEFAULT_ZK_CONCURRENCY\n)\n\nexport async function makeZkProofGenerator(\n\t{\n\t\tzkOperators,\n\t\toprfOperators,\n\t\tlogger = LOGGER,\n\t\tzkProofConcurrency = ZK_CONCURRENCY,\n\t\tcipherSuite,\n\t\tzkEngine = 'snarkjs'\n\t}: PrepareZKProofsOpts\n) {\n\tconst zkQueue\n\t\t= new PQueue({ concurrency: zkProofConcurrency, autoStart: true })\n\tconst packetsToProve: ZKPacketToProve[] = []\n\n\tlogger = logger.child({ module: 'zk', zkEngine })\n\tlet zkProofsToGen = 0\n\n\treturn {\n\t\t/**\n\t\t * Adds the given packet to the list of packets to\n\t\t * generate ZK proofs for.\n\t\t *\n\t\t * Call `generateProofs()` to finally generate the proofs\n\t\t */\n\t\tasync addPacketToProve(\n\t\t\tpacket: CompleteTLSPacket,\n\t\t\t{\n\t\t\t\tredactedPlaintext, toprfs = [], overshotToprfFromPrevBlock\n\t\t\t}: ZKRevealInfo,\n\t\t\tonGeneratedProofs: ZKPacketToProve['onGeneratedProofs'],\n\t\t\tgetNextPacket: () => CompleteTLSPacket | undefined\n\t\t) {\n\t\t\tif(packet.type === 'plaintext') {\n\t\t\t\tthrow new Error('Cannot generate proof for plaintext')\n\t\t\t}\n\n\t\t\tconst alg = getZkAlgorithmForCipherSuite(cipherSuite)\n\t\t\tconst chunkSizeBytes = getChunkSizeBytes(alg)\n\n\t\t\tconst key = await crypto.exportKey(packet.encKey)\n\t\t\tconst iv = packet.iv\n\t\t\tconst ciphertext = getPureCiphertext(packet.ciphertext, cipherSuite)\n\t\t\t// if the packet starts with TOPRF overflow from previous packet,\n\t\t\t// we can just redact that part of the ciphertext as it's not required\n\t\t\t// to be proven. Decrypting the raw ciphertext of this part would also\n\t\t\t// reveal the raw underlying text, which we don't want.\n\t\t\tif(overshotToprfFromPrevBlock) {\n\t\t\t\tredactedPlaintext.set(\n\t\t\t\t\tnew Uint8Array(overshotToprfFromPrevBlock.length)\n\t\t\t\t\t\t.fill(REDACTION_CHAR_CODE)\n\t\t\t\t)\n\t\t\t}\n\n\t\t\tconst trueCiphertextLength = isTls13Suite(cipherSuite)\n\t\t\t\t? ciphertext.length - 1 // remove content type byte\n\t\t\t\t: ciphertext.length\n\t\t\tconst packetToProve: ZKPacketToProve = {\n\t\t\t\tonGeneratedProofs,\n\t\t\t\talgorithm: alg,\n\t\t\t\tproofsToGenerate: [],\n\t\t\t\ttoprfsToGenerate: [],\n\t\t\t\tiv: packet.fixedIv,\n\t\t\t}\n\n\t\t\t// first we'll handle all TOPRF blocks\n\t\t\t// we do these first, because they can span multiple chunks\n\t\t\t// & we need to be able to span the right chunks\n\t\t\tfor(const toprf of toprfs) {\n\t\t\t\t// if the TOPRF data overshoots the ciphertext length,\n\t\t\t\t// then it means that the OPRF data is spread across multiple\n\t\t\t\t// TLS records & we need to include the next record's ciphertext\n\t\t\t\t// in our proof.\n\t\t\t\t// At most we support the OPRF data being spread across 2 records\n\t\t\t\tconst toprfDistFromEnd = trueCiphertextLength\n\t\t\t\t\t- (toprf.dataLocation!.fromIndex + toprf.dataLocation!.length)\n\t\t\t\tif(toprfDistFromEnd < 0) {\n\t\t\t\t\tconst nextPacket = getNextPacket()\n\t\t\t\t\tif(nextPacket?.type !== 'ciphertext') {\n\t\t\t\t\t\tthrow new AttestorError(\n\t\t\t\t\t\t\t'ERROR_INTERNAL',\n\t\t\t\t\t\t\t'TOPRF data overshoots ciphertext length, '\n\t\t\t\t\t\t\t+ 'but no next ciphertext packet found'\n\t\t\t\t\t\t)\n\t\t\t\t\t}\n\n\t\t\t\t\tif(nextPacket.encKey !== packet.encKey) {\n\t\t\t\t\t\tthrow new AttestorError(\n\t\t\t\t\t\t\t'ERROR_INTERNAL',\n\t\t\t\t\t\t\t'TOPRF data overshoots ciphertext length, '\n\t\t\t\t\t\t\t+ 'but next packet has different encryption key'\n\t\t\t\t\t\t)\n\t\t\t\t\t}\n\n\t\t\t\t\tconst nextCiphertext = nextPacket.ciphertext\n\t\t\t\t\t\t.slice(0, Math.abs(toprfDistFromEnd))\n\t\t\t\t\tconst iv = nextPacket.iv\n\t\t\t\t\ttoprf.overshoot = {\n\t\t\t\t\t\tciphertext: nextCiphertext,\n\t\t\t\t\t\tiv,\n\t\t\t\t\t\trecordNumber: nextPacket.recordNumber,\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst fromIndex = getIdealOffsetForToprfBlock(alg, toprf)\n\t\t\t\tconst toIndex = Math\n\t\t\t\t\t.min(fromIndex + chunkSizeBytes, ciphertext.length)\n\n\t\t\t\t// ensure this OPRF block doesn't overlap with any other OPRF block\n\t\t\t\tconst slice: ArraySlice = { fromIndex, toIndex }\n\t\t\t\tpacketToProve.toprfsToGenerate.push(getTOPRFProofGenerationParamsForSlice({\n\t\t\t\t\tkey,\n\t\t\t\t\tiv,\n\t\t\t\t\tciphertext,\n\t\t\t\t\tslice,\n\t\t\t\t\ttoprf: {\n\t\t\t\t\t\t...toprf,\n\t\t\t\t\t\tdataLocation: {\n\t\t\t\t\t\t\t...toprf.dataLocation!,\n\t\t\t\t\t\t\tfromIndex: toprf.dataLocation!.fromIndex - fromIndex\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}))\n\t\t\t\tzkProofsToGen += 1\n\n\t\t\t\t// we'll redact the OPRF part of the plaintext to not reveal\n\t\t\t\t// the actual plaintext to the attestor\n\t\t\t\tconst pktToIndex = Math.min(\n\t\t\t\t\ttrueCiphertextLength,\n\t\t\t\t\ttoprf.dataLocation!.fromIndex + toprf.dataLocation!.length\n\t\t\t\t)\n\t\t\t\tconst pktFromIndex = toprf.dataLocation!.fromIndex\n\t\t\t\tfor(let i = pktFromIndex; i < pktToIndex; i++) {\n\t\t\t\t\tredactedPlaintext[i] = REDACTION_CHAR_CODE\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor(let i = 0; i < ciphertext.length; i += chunkSizeBytes) {\n\t\t\t\tconst slice: ArraySlice = {\n\t\t\t\t\tfromIndex: i,\n\t\t\t\t\ttoIndex: Math.min(i + chunkSizeBytes, ciphertext.length)\n\t\t\t\t}\n\n\t\t\t\tconst proofParams = getProofGenerationParamsForSlice(\n\t\t\t\t\t{ key, iv, ciphertext, redactedPlaintext, slice }\n\t\t\t\t)\n\n\t\t\t\tif(!proofParams) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\tpacketToProve.proofsToGenerate.push(proofParams)\n\t\t\t\tzkProofsToGen += 1\n\t\t\t}\n\n\t\t\tpacketsToProve.push(packetToProve)\n\t\t},\n\t\tgetTotalChunksToProve() {\n\t\t\treturn zkProofsToGen\n\t\t},\n\t\tasync generateProofs(onChunkDone?: () => void) {\n\t\t\tif(!packetsToProve.length) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tconst start = Date.now()\n\t\t\tconst tasks: Promise<void>[] = []\n\t\t\tfor(const {\n\t\t\t\tonGeneratedProofs, algorithm, proofsToGenerate, toprfsToGenerate\n\t\t\t} of packetsToProve) {\n\t\t\t\tconst proofs: ZKProof[] = []\n\t\t\t\tconst toprfs: TOPRFProof[] = []\n\n\t\t\t\tlet proofsLeft = proofsToGenerate.length\n\t\t\t\t\t+ toprfsToGenerate.length\n\t\t\t\tfor(const proofToGen of proofsToGenerate) {\n\t\t\t\t\ttasks.push(zkQueue.add(async() => {\n\t\t\t\t\t\tconst proof = await generateZkProofForChunk(algorithm, proofToGen)\n\n\t\t\t\t\t\tonChunkDone?.()\n\t\t\t\t\t\tproofs.push(proof)\n\n\t\t\t\t\t\tproofsLeft -= 1\n\t\t\t\t\t\tif(proofsLeft === 0) {\n\t\t\t\t\t\t\tonGeneratedProofs(proofs, toprfs)\n\t\t\t\t\t\t}\n\t\t\t\t\t}, { throwOnTimeout: true }))\n\t\t\t\t}\n\n\t\t\t\tfor(const toprfToGen of toprfsToGenerate) {\n\t\t\t\t\ttasks.push(zkQueue.add(async() => {\n\t\t\t\t\t\tconst toprf = await generateOprfProofForChunk(algorithm, toprfToGen)\n\n\t\t\t\t\t\tonChunkDone?.()\n\t\t\t\t\t\ttoprfs.push(toprf)\n\n\t\t\t\t\t\tproofsLeft -= 1\n\t\t\t\t\t\tif(proofsLeft === 0) {\n\t\t\t\t\t\t\tonGeneratedProofs(proofs, toprfs)\n\t\t\t\t\t\t}\n\t\t\t\t\t}, { throwOnTimeout: true }))\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tawait Promise.all(tasks)\n\n\t\t\tlogger?.info(\n\t\t\t\t{ durationMs: Date.now() - start, zkProofsToGen },\n\t\t\t\t'generated ZK proofs'\n\t\t\t)\n\n\t\t\t// reset the packets to prove\n\t\t\tpacketsToProve.splice(0, packetsToProve.length)\n\t\t\tzkProofsToGen = 0\n\n\t\t\t// release ZK resources to free up memory\n\t\t\tconst alg = getZkAlgorithmForCipherSuite(cipherSuite)\n\t\t\tconst zkOperator = await getZkOperatorForAlgorithm(alg)\n\t\t\tzkOperator.release?.()\n\t\t},\n\t}\n\n\tasync function generateZkProofForChunk(\n\t\talgorithm: EncryptionAlgorithm,\n\t\t{\n\t\t\tstartIdx, redactedPlaintext, privateInput, publicInput\n\t\t}: ZKProofToGenerate\n\t): Promise<ZKProof> {\n\t\tconst operator = getZkOperatorForAlgorithm(algorithm)\n\t\tconst proof = await generateProof(\n\t\t\t{ algorithm, privateInput, publicInput, operator, logger }\n\t\t)\n\n\t\tlogger?.debug({ startIdx }, 'generated proof for chunk')\n\n\t\treturn {\n\t\t\tproofData: typeof proof.proofData === 'string'\n\t\t\t\t? strToUint8Array(proof.proofData)\n\t\t\t\t: proof.proofData,\n\t\t\tdecryptedRedactedCiphertext: proof.plaintext || new Uint8Array(),\n\t\t\tredactedPlaintext,\n\t\t\tstartIdx\n\t\t}\n\t}\n\n\tasync function generateOprfProofForChunk(\n\t\talgorithm: EncryptionAlgorithm,\n\t\t{ startIdx, privateInput, publicInput, toprf }: TOPRFProofToGenerate\n\t): Promise<TOPRFProof> {\n\t\tconst operator = getOprfOperatorForAlgorithm(algorithm)\n\t\tconst toprfLocations: ZKTOPRFPublicSignals['locations'] = []\n\t\tif(toprf?.overshoot) {\n\t\t\tconst { dataLocation, overshoot: { ciphertext } } = toprf\n\t\t\ttoprfLocations.push(\n\t\t\t\t{\n\t\t\t\t\tpos: dataLocation!.fromIndex,\n\t\t\t\t\tlen: dataLocation!.length - ciphertext.length\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tpos: ceilToBlockSizeMultiple(\n\t\t\t\t\t\tdataLocation!.fromIndex + dataLocation!.length,\n\t\t\t\t\t\talgorithm\n\t\t\t\t\t),\n\t\t\t\t\tlen: ciphertext.length\n\t\t\t\t}\n\t\t\t)\n\t\t} else if(toprf) {\n\t\t\ttoprfLocations.push({\n\t\t\t\tpos: toprf.dataLocation!.fromIndex,\n\t\t\t\tlen: toprf.dataLocation!.length,\n\t\t\t})\n\t\t}\n\n\t\tconst proof = await generateProof(\n\t\t\t{\n\t\t\t\talgorithm,\n\t\t\t\tprivateInput,\n\t\t\t\tpublicInput,\n\t\t\t\toperator,\n\t\t\t\tlogger,\n\t\t\t\t...(\n\t\t\t\t\ttoprf\n\t\t\t\t\t\t? {\n\t\t\t\t\t\t\ttoprf: {\n\t\t\t\t\t\t\t\tlocations: toprfLocations,\n\t\t\t\t\t\t\t\toutput: toprf.nullifier,\n\t\t\t\t\t\t\t\tresponses: toprf.responses,\n\t\t\t\t\t\t\t\tdomainSeparator: TOPRF_DOMAIN_SEPARATOR\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tmask: toprf.mask,\n\t\t\t\t\t\t}\n\t\t\t\t\t\t: {}\n\t\t\t\t)\n\t\t\t}\n\t\t)\n\n\t\tlogger?.debug({ toprfLocations }, 'generated TOPRF proof for chunk')\n\n\t\treturn {\n\t\t\tstartIdx,\n\t\t\tproofData: typeof proof.proofData === 'string'\n\t\t\t\t? strToUint8Array(proof.proofData)\n\t\t\t\t: proof.proofData,\n\t\t\tpayload: toprf,\n\t\t}\n\t}\n\n\tfunction getZkOperatorForAlgorithm(algorithm: EncryptionAlgorithm) {\n\t\treturn zkOperators?.[algorithm]\n\t\t\t|| makeDefaultZkOperator(algorithm, zkEngine, logger)\n\t}\n\n\tfunction getOprfOperatorForAlgorithm(algorithm: EncryptionAlgorithm) {\n\t\treturn oprfOperators?.[algorithm]\n\t\t\t|| makeDefaultOPRFOperator(algorithm, zkEngine, logger)\n\t}\n}\n\n/**\n * Verify the given ZK proof\n */\nexport async function verifyZkPacket(\n\t{\n\t\tcipherSuite,\n\t\tciphertext,\n\t\tzkReveal,\n\t\tzkOperators,\n\t\toprfOperators,\n\t\tlogger = LOGGER,\n\t\tzkEngine = 'snarkjs',\n\t\tiv,\n\t\trecordNumber,\n\t\ttoprfOvershotNullifier,\n\t\tgetNextPacket\n\t}: ZKVerifyOpts,\n) {\n\tconst { proofs, toprfs, oprfRawMarkers } = zkReveal\n\tconst algorithm = getZkAlgorithmForCipherSuite(cipherSuite)\n\n\tconst recordIV = getRecordIV(ciphertext, cipherSuite)\n\tciphertext = new Uint8Array(getPureCiphertext(ciphertext, cipherSuite))\n\tconst realRedactedPlaintext\n\t\t= new Uint8Array(ciphertext.length).fill(REDACTION_CHAR_CODE)\n\n\tconst replacements = await Promise.all(toprfs.map(async(toprf, i) => {\n\t\ttry {\n\t\t\treturn await verifyToprfProofPacket(toprf)\n\t\t} catch(e) {\n\t\t\te.message += ` (TOPRF proof ${i}, `\n\t\t\t\t+ `from ${toprf.payload?.dataLocation?.fromIndex}, `\n\t\t\t\t+ `record ${recordNumber})`\n\t\t\tthrow e\n\t\t}\n\t}))\n\n\tawait Promise.all(proofs.map(async(proof, i) => {\n\t\ttry {\n\t\t\tawait verifyZkProofPacket(proof)\n\t\t} catch(e) {\n\t\t\te.message +=\n\t\t\t\t` (ZK proof ${i}, startIdx ${proof.startIdx}, record ${recordNumber})`\n\t\t\tthrow e\n\t\t}\n\t}))\n\n\tfor(const { set, startIdx } of replacements) {\n\t\trealRedactedPlaintext.set(set, startIdx)\n\t}\n\n\t/**\n\t * to verify if the user has given us the correct redacted plaintext,\n\t * and isn't providing plaintext that they haven't proven they have\n\t * we start with a fully redacted plaintext, and then replace the\n\t * redacted parts with the plaintext that the user has provided\n\t * in the proofs\n\t */\n\tif(toprfOvershotNullifier) {\n\t\trealRedactedPlaintext.set(toprfOvershotNullifier)\n\t}\n\n\treturn { redactedPlaintext: realRedactedPlaintext, oprfRawMarkers }\n\n\tasync function verifyZkProofPacket(\n\t\t{\n\t\t\tproofData,\n\t\t\tdecryptedRedactedCiphertext,\n\t\t\tredactedPlaintext,\n\t\t\tstartIdx,\n\t\t}: ZKProof,\n\t) {\n\t\t// get the ciphertext chunk we received from the server\n\t\t// the ZK library, will verify that the decrypted redacted\n\t\t// ciphertext matches the ciphertext received from the server\n\t\tconst ciphertextChunkEnd = startIdx + redactedPlaintext.length\n\t\tconst ciphertextChunk = ciphertext.slice(startIdx, ciphertextChunkEnd)\n\t\t// redact ciphertext if plaintext is redacted\n\t\t// to prepare for decryption in ZK circuit\n\t\t// the ZK circuit will take in the redacted ciphertext,\n\t\t// which shall produce the redacted plaintext\n\t\tfor(let i = 0; i < ciphertextChunk.length; i++) {\n\t\t\tif(redactedPlaintext[i] === REDACTION_CHAR_CODE) {\n\t\t\t\tciphertextChunk[i] = REDACTION_CHAR_CODE\n\t\t\t}\n\t\t}\n\n\t\tlet nonce = concatenateUint8Arrays([iv, recordIV])\n\t\tif(!recordIV.length) {\n\t\t\tnonce = generateIV(nonce, recordNumber)\n\t\t}\n\n\t\tconst ciphertextInput: RawPublicInput = {\n\t\t\tciphertext: ciphertextChunk,\n\t\t\tiv: nonce,\n\t\t\toffsetBytes: startIdx\n\t\t}\n\t\tif(\n\t\t\t!isRedactionCongruent(redactedPlaintext, decryptedRedactedCiphertext)\n\t\t) {\n\t\t\tthrow new Error('redacted ciphertext not congruent')\n\t\t}\n\n\t\tawait verifyProof(\n\t\t\t{\n\t\t\t\tproof: {\n\t\t\t\t\talgorithm,\n\t\t\t\t\tproofData: proofData,\n\t\t\t\t\tplaintext: decryptedRedactedCiphertext,\n\t\t\t\t},\n\t\t\t\tpublicInput: ciphertextInput,\n\t\t\t\tlogger,\n\t\t\t\toperator: getZkOperator()\n\t\t\t}\n\t\t)\n\n\t\tlogger?.debug(\n\t\t\t{ startIdx, endIdx: startIdx + redactedPlaintext.length },\n\t\t\t'verified proof'\n\t\t)\n\n\t\trealRedactedPlaintext.set(redactedPlaintext, startIdx)\n\t}\n\n\tasync function verifyToprfProofPacket(\n\t\t{ startIdx, proofData, payload: toprf }: TOPRFProof,\n\t) {\n\t\tif(!toprf?.dataLocation || !toprf.responses || !toprf.nullifier) {\n\t\t\tthrow new Error('invalid TOPRF proof payload')\n\t\t}\n\n\t\tconst { dataLocation, nullifier } = toprf\n\t\tconst ciphertextChunkEnd = Math\n\t\t\t.min(ciphertext.length, getChunkSizeBytes(algorithm) + startIdx)\n\t\tconst isLastChunk = ciphertextChunkEnd >= ciphertext.length\n\t\tconst ciphertextChunk = ciphertext.slice(startIdx, ciphertextChunkEnd)\n\n\t\tlet nonce = concatenateUint8Arrays([iv, recordIV])\n\t\tif(!recordIV.length) {\n\t\t\tnonce = generateIV(nonce, recordNumber)\n\t\t}\n\n\t\tconst ciphertextInput: RawPublicInput = {\n\t\t\tciphertext: ciphertextChunk,\n\t\t\tiv: nonce,\n\t\t\toffsetBytes: startIdx\n\t\t}\n\t\tlet pubInput: PublicInput = ciphertextInput\n\t\tconst nulliferStr = binaryHashToStr(nullifier, dataLocation.length)\n\n\t\tconst locations: ZKTOPRFPublicSignals['locations'] = []\n\n\t\tconst toprfEndIdx = dataLocation.fromIndex + dataLocation.length\n\t\tconst trueCiphLen = isLastChunk && isTls13Suite(cipherSuite)\n\t\t\t? ciphertextChunk.length - 1\n\t\t\t: ciphertextChunk.length\n\t\tconst overshoot = toprfEndIdx - trueCiphLen\n\t\tif(overshoot > 0) {\n\t\t\t// fetch the overshoot part of the nullifier\n\t\t\tconst nextPkt = getNextPacket(\n\t\t\t\tstrToUint8Array(nulliferStr.slice(dataLocation.length - overshoot))\n\t\t\t)\n\t\t\tif(!nextPkt) {\n\t\t\t\tthrow new Error('OPRF data overshot, but no next packet found')\n\t\t\t}\n\n\t\t\tconst nextRecordIV = getRecordIV(ciphertext, cipherSuite)\n\t\t\tlet nextNonce = concatenateUint8Arrays([iv, nextRecordIV])\n\t\t\tif(!nextRecordIV.length) {\n\t\t\t\tnextNonce = generateIV(nextNonce, recordNumber + 1)\n\t\t\t}\n\n\t\t\tpubInput = [\n\t\t\t\tciphertextInput,\n\t\t\t\t{\n\t\t\t\t\tciphertext: nextPkt.slice(0, overshoot),\n\t\t\t\t\tiv: nextNonce,\n\t\t\t\t\toffsetBytes: 0,\n\t\t\t\t}\n\t\t\t]\n\n\t\t\tlocations.push(\n\t\t\t\t{\n\t\t\t\t\tpos: dataLocation.fromIndex,\n\t\t\t\t\tlen: dataLocation.length - overshoot\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tpos: ceilToBlockSizeMultiple(\n\t\t\t\t\t\tdataLocation.fromIndex + dataLocation.length,\n\t\t\t\t\t\talgorithm\n\t\t\t\t\t),\n\t\t\t\t\tlen: overshoot\n\t\t\t\t}\n\t\t\t)\n\t\t} else {\n\t\t\tlocations.push({\n\t\t\t\tpos: dataLocation.fromIndex,\n\t\t\t\tlen: dataLocation.length,\n\t\t\t})\n\t\t}\n\n\t\tawait verifyProof(\n\t\t\t{\n\t\t\t\tproof: { algorithm, proofData: proofData, plaintext: undefined },\n\t\t\t\tpublicInput: pubInput,\n\t\t\t\tlogger,\n\t\t\t\toperator: getOprfOperator(),\n\t\t\t\ttoprf: {\n\t\t\t\t\tlocations,\n\t\t\t\t\tdomainSeparator: TOPRF_DOMAIN_SEPARATOR,\n\t\t\t\t\toutput: nullifier,\n\t\t\t\t\tresponses: toprf.responses,\n\t\t\t\t}\n\t\t\t}\n\t\t)\n\n\t\tlogger?.debug({ locations }, 'verified TOPRF proof')\n\n\t\treturn {\n\t\t\tset: strToUint8Array(\n\t\t\t\tnulliferStr.slice(0, locations[0].len)\n\t\t\t),\n\t\t\tstartIdx: locations[0].pos + startIdx,\n\t\t}\n\t}\n\n\tfunction getZkOperator() {\n\t\treturn zkOperators?.[algorithm]\n\t\t\t|| makeDefaultZkOperator(algorithm, zkEngine, logger)\n\t}\n\n\tfunction getOprfOperator() {\n\t\treturn oprfOperators?.[algorithm]\n\t\t\t|| makeDefaultOPRFOperator(algorithm, zkEngine, logger)\n\t}\n}\n\n// the chunk size of the ZK circuit in bytes\n// this will be >= the block size\nfunction getChunkSizeBytes(alg: EncryptionAlgorithm) {\n\tconst { chunkSize, bitsPerWord } = ZK_CONFIG[alg]\n\treturn chunkSize * bitsPerWord / 8\n}\n\nconst zkEngines: {\n\t[z in ZKEngine]?: { [E in EncryptionAlgorithm]?: ZKOperator }\n} = {}\n\nconst oprfEngines: {\n\t[z in ZKEngine]?: { [E in EncryptionAlgorithm]?: OPRFOperator }\n} = {}\n\nconst operatorMakers: { [z in ZKEngine]?: (opts: MakeZKOperatorOpts<{}>) => ZKOperator } = {\n\t'snarkjs': makeSnarkJsZKOperator,\n\t'gnark': makeGnarkZkOperator,\n\t'stwo': makeStwoZkOperator,\n}\n\nconst OPRF_OPERATOR_MAKERS: { [z in ZKEngine]?: MakeOPRFOperator<{}> } = {\n\t'gnark': makeGnarkOPRFOperator\n}\n\nexport function makeDefaultZkOperator(\n\talgorithm: EncryptionAlgorithm,\n\tzkEngine: ZKEngine,\n\tlogger: Logger,\n) {\n\tlet zkOperators = zkEngines[zkEngine]\n\tif(!zkOperators) {\n\t\tzkEngines[zkEngine] = {}\n\t\tzkOperators = zkEngines[zkEngine]\n\t}\n\n\tif(!zkOperators[algorithm]) {\n\t\tconst opType = getOperatorType()\n\t\tconst zkBaseUrl = opType === 'remote' ? getZkResourcesBaseUrl() : undefined\n\n\t\tlogger?.info({ type: opType, algorithm, zkBaseUrl }, 'fetching zk operator')\n\n\t\tconst fetcher = opType === 'local'\n\t\t\t? makeLocalFileFetch()\n\t\t\t: makeRemoteFileFetch({ baseUrl: zkBaseUrl, logger })\n\t\tconst maker = operatorMakers[zkEngine]\n\t\tif(!maker) {\n\t\t\tthrow new Error(`No ZK operator maker for ${zkEngine}`)\n\t\t}\n\n\t\tzkOperators[algorithm] = maker({ algorithm, fetcher })\n\t}\n\n\treturn zkOperators[algorithm]\n}\n\nfunction getOperatorType() {\n\tconst envop = getEnvVariable('ZK_OPERATOR_TYPE')\n\tif(envop === 'local' || envop === 'remote') {\n\t\treturn envop\n\t}\n\n\treturn detectEnvironment() === 'node' ? 'local' : 'remote'\n}\n\nexport function makeDefaultOPRFOperator(\n\talgorithm: EncryptionAlgorithm,\n\tzkEngine: ZKEngine,\n\tlogger: Logger,\n) {\n\tlet operators = oprfEngines[zkEngine]\n\tif(!operators) {\n\t\toprfEngines[zkEngine] = {}\n\t\toperators = oprfEngines[zkEngine]\n\t}\n\n\tif(!operators[algorithm]) {\n\t\tconst type = getOperatorType()\n\t\tconst zkBaseUrl = type === 'remote' ? getZkResourcesBaseUrl() : undefined\n\n\t\tlogger?.info({ type, algorithm, zkBaseUrl }, 'fetching oprf operator')\n\n\t\tconst fetcher = type === 'local'\n\t\t\t? makeLocalFileFetch()\n\t\t\t: makeRemoteFileFetch({ baseUrl: zkBaseUrl, logger })\n\t\tconst maker = OPRF_OPERATOR_MAKERS[zkEngine]\n\t\tif(!maker) {\n\t\t\tthrow new Error(`No OPRF operator maker for ${zkEngine}`)\n\t\t}\n\n\t\toperators[algorithm] = maker({ algorithm, fetcher })\n\t}\n\n\treturn operators[algorithm]\n}\n\nexport function getEngineString(engine: ZKProofEngine) {\n\tif(engine === ZKProofEngine.ZK_ENGINE_GNARK) {\n\t\treturn 'gnark'\n\t}\n\n\tif(engine === ZKProofEngine.ZK_ENGINE_SNARKJS) {\n\t\treturn 'snarkjs'\n\t}\n\n\tif(engine === ZKProofEngine.ZK_ENGINE_STWO) {\n\t\treturn 'stwo'\n\t}\n\n\tthrow new Error(`Unknown ZK engine: ${engine}`)\n}\n\n\nexport function getEngineProto(engine: ZKEngine) {\n\tif(engine === 'gnark') {\n\t\treturn ZKProofEngine.ZK_ENGINE_GNARK\n\t}\n\n\tif(engine === 'snarkjs') {\n\t\treturn ZKProofEngine.ZK_ENGINE_SNARKJS\n\t}\n\n\tif(engine === 'stwo') {\n\t\treturn ZKProofEngine.ZK_ENGINE_STWO\n\t}\n\n\tthrow new Error(`Unknown ZK engine: ${engine}`)\n}\n\nfunction getProofGenerationParamsForSlice(\n\t{\n\t\tkey,\n\t\tiv,\n\t\tciphertext,\n\t\tredactedPlaintext,\n\t\tslice: { fromIndex, toIndex },\n\t}: GenerateZKChunkProofOpts,\n): ZKProofToGenerate | undefined {\n\tconst ciphertextChunk = ciphertext.slice(fromIndex, toIndex)\n\tconst plaintextChunk = redactedPlaintext.slice(fromIndex, toIndex)\n\tif(isFullyRedacted(plaintextChunk)) {\n\t\treturn\n\t}\n\n\t// redact ciphertext if plaintext is redacted\n\t// to prepare for decryption in ZK circuit\n\t// the ZK circuit will take in the redacted ciphertext,\n\t// which shall produce the redacted plaintext\n\tfor(let i = 0; i < ciphertextChunk.length; i++) {\n\t\tif(plaintextChunk[i] === REDACTION_CHAR_CODE) {\n\t\t\tciphertextChunk[i] = REDACTION_CHAR_CODE\n\t\t}\n\t}\n\n\treturn {\n\t\tstartIdx: fromIndex,\n\t\tredactedPlaintext: plaintextChunk,\n\t\tprivateInput: { key },\n\t\tpublicInput: { ciphertext: ciphertextChunk, iv, offsetBytes: fromIndex },\n\t}\n}\n\nfunction getTOPRFProofGenerationParamsForSlice(\n\t{\n\t\tkey,\n\t\tiv,\n\t\tciphertext,\n\t\tslice: { fromIndex, toIndex },\n\t\ttoprf,\n\t}: GenerateTOPRFChunkProofOpts,\n): TOPRFProofToGenerate {\n\tconst ciphertextChunk = ciphertext.slice(fromIndex, toIndex)\n\tif(toprf?.overshoot) {\n\t\tconst {\n\t\t\tovershoot: { ciphertext: overshootCiphertext, iv: overshootIv }\n\t\t} = toprf\n\t\treturn {\n\t\t\tprivateInput: { key },\n\t\t\tpublicInput: [\n\t\t\t\t{\n\t\t\t\t\tciphertext: ciphertextChunk,\n\t\t\t\t\tiv,\n\t\t\t\t\toffsetBytes: fromIndex,\n\t\t\t\t},\n\t\t\t\t{ ciphertext: overshootCiphertext, iv: overshootIv }\n\t\t\t],\n\t\t\ttoprf,\n\t\t\tstartIdx: fromIndex,\n\t\t}\n\t}\n\n\treturn {\n\t\tprivateInput: { key },\n\t\tpublicInput: { ciphertext: ciphertextChunk, iv, offsetBytes: fromIndex },\n\t\ttoprf,\n\t\tstartIdx: fromIndex,\n\t}\n}\n\n/**\n * Get the ideal location to generate a ZK proof for a TOPRF block.\n * Ideally it should be put into a slice that's a divisor of the chunk size,\n * as that'll minimize the number of proofs that need to be generated.\n * @returns the offset in bytes\n */\nfunction getIdealOffsetForToprfBlock(\n\talg: EncryptionAlgorithm,\n\t{ dataLocation, overshoot }: TOPRFProofParams,\n) {\n\tconst chunkSizeBytes = getChunkSizeBytes(alg)\n\tconst blockSizeBytes = getBlockSizeBytes(alg)\n\tconst offsetChunks = Math\n\t\t.floor(dataLocation!.fromIndex / chunkSizeBytes)\n\tconst endOffsetChunks = Math\n\t\t.floor((dataLocation!.fromIndex + dataLocation!.length) / chunkSizeBytes)\n\t// happy case -- the OPRF block fits into a single chunk, that's a\n\t// divisor of the chunk size\n\tif(endOffsetChunks === offsetChunks) {\n\t\tconst start = offsetChunks * chunkSizeBytes\n\t\tif(overshoot) {\n\t\t\tconst overshootBlocks = Math\n\t\t\t\t.ceil(overshoot.ciphertext.length / blockSizeBytes)\n\t\t\treturn start + (overshootBlocks * blockSizeBytes)\n\t\t}\n\n\t\treturn start\n\t}\n\n\tconst offsetBytes = Math\n\t\t.floor(dataLocation!.fromIndex / blockSizeBytes) * blockSizeBytes\n\tconst endOffsetBytes = Math\n\t\t.ceil((dataLocation!.fromIndex + dataLocation!.length) / blockSizeBytes)\n\tif(endOffsetBytes - offsetBytes > chunkSizeBytes) {\n\t\tthrow new AttestorError(\n\t\t\t'ERROR_BAD_REQUEST',\n\t\t\t'OPRF data cannot fit into a single chunk'\n\t\t)\n\t}\n\n\treturn offsetBytes\n}\n\nfunction getZkResourcesBaseUrl() {\n\tif(typeof ATTESTOR_BASE_URL !== 'string') {\n\t\treturn DEFAULT_REMOTE_FILE_FETCH_BASE_URL\n\t}\n\n\treturn new URL(\n\t\tDEFAULT_REMOTE_FILE_FETCH_BASE_URL,\n\t\tATTESTOR_BASE_URL\n\t).toString()\n}\n", "import type { InitRequest } from '#src/proto/api.ts'\nimport { AttestorVersion, ServiceSignatureType } from '#src/proto/api.ts'\n\nexport const DEFAULT_ZK_CONCURRENCY = 10\n\nexport const RECLAIM_USER_AGENT = 'reclaim/0.0.1'\n\nexport const DEFAULT_HTTPS_PORT = 443\n\nexport const WS_PATHNAME = '/ws'\n\nexport const BROWSER_RPC_PATHNAME = '/browser-rpc'\n\nexport const ATTESTOR_ADDRESS_PATHNAME = '/address'\n\nexport const DEFAULT_REMOTE_FILE_FETCH_BASE_URL = `${BROWSER_RPC_PATHNAME}/resources`\n\nexport const API_SERVER_PORT = 8001\n\n// 10s\nexport const CONNECTION_TIMEOUT_MS = 10_000\n\nexport const DNS_SERVERS = [\n\t'8.8.8.8',\n\t'8.8.4.4'\n]\n\n// 10m\nexport const MAX_CLAIM_TIMESTAMP_DIFF_S = 10 * 60\n\nexport const CURRENT_ATTESTOR_VERSION = AttestorVersion.ATTESTOR_VERSION_3_0_0\n\nexport const DEFAULT_METADATA: InitRequest = {\n\tsignatureType: ServiceSignatureType.SERVICE_SIGNATURE_TYPE_ETH,\n\tclientVersion: CURRENT_ATTESTOR_VERSION,\n\tauth: undefined\n}\n\nexport const PROVIDER_CTX = { version: CURRENT_ATTESTOR_VERSION }\n\nexport const PING_INTERVAL_MS = 10_000\n/**\n * Maximum interval in seconds to wait for before assuming\n * the connection is dead\n * @default 30s\n */\nexport const MAX_NO_DATA_INTERVAL_MS = 30_000\n\nexport const MAX_PAYLOAD_SIZE = 512 * 1024 * 1024 // 512MB\n\nexport const DEFAULT_AUTH_EXPIRY_S = 15 * 60 // 15m\n\nexport const DEFAULT_RPC_TIMEOUT_MS = 90_000\n\nexport const TOPRF_DOMAIN_SEPARATOR = 'reclaim-toprf'\n\nexport const MAX_CERT_SIZE_BYTES = 10 * 1024 * 1024 * 1024 // 10MB\n\nexport const CERT_ALLOWED_MIMETYPES = [\n\t'application/x-x509-ca-cert',\n\t'application/x-x509-user-cert',\n\t'application/pkix-cert',\n\t'application/pkcs7-mime',\n\t'application/octet-stream'\n]\n\nexport const BGP_WS_URL = 'wss://ris-live.ripe.net/v1/ws/?client=reclaim-hijack-detector'\n", "import { ErrorCode, ErrorData } from '#src/proto/api.ts'\n\nconst PROTO_ERROR = ErrorData.fromJSON({})\n\n/**\n * Represents an error that can be thrown by the Attestor Core\n * or server. Provides a code, and optional data\n * to pass along with the error.\n */\nexport class AttestorError extends Error {\n\n\treadonly name = 'AttestorError'\n\treadonly code: keyof typeof ErrorCode\n\treadonly data: { [_: string]: any } | undefined\n\n\tconstructor(\n\t\tcode: keyof typeof ErrorCode,\n\t\tmessage: string,\n\t\tdata?: { [_: string]: any }\n\t) {\n\t\tsuper(message)\n\t\tthis.code = code\n\t\tthis.data = data\n\t}\n\n\t/**\n\t * Encodes the error as a ErrorData\n\t * protobuf message\n\t */\n\ttoProto() {\n\t\treturn ErrorData.create({\n\t\t\tcode: ErrorCode[this.code],\n\t\t\tmessage: this.message,\n\t\t\tdata: JSON.stringify(this.data)\n\t\t})\n\t}\n\n\tstatic fromProto(data = PROTO_ERROR) {\n\t\treturn new AttestorError(\n\t\t\ttypeof data.code === 'number'\n\t\t\t\t? getKeyForValue(ErrorCode, data.code) || 'UNRECOGNIZED'\n\t\t\t\t: data.code,\n\t\t\tdata.message,\n\t\t\tdata.data ? JSON.parse(data.data) : undefined\n\t\t)\n\t}\n\n\tstatic fromError(\n\t\terr: Error,\n\t\tcode: keyof typeof ErrorCode = 'ERROR_INTERNAL'\n\t) {\n\t\tif(err instanceof AttestorError) {\n\t\t\treturn err\n\t\t}\n\n\t\treturn new AttestorError(code, err.message)\n\t}\n\n\tstatic badRequest(message: string, data?: { [_: string]: any }) {\n\t\treturn new AttestorError(\n\t\t\t'ERROR_BAD_REQUEST',\n\t\t\tmessage,\n\t\t\tdata\n\t\t)\n\t}\n}\n\nfunction getKeyForValue<T>(obj: T, value: T[keyof T]): keyof T | undefined {\n\tfor(const key in obj) {\n\t\tif(obj[key] === value) {\n\t\t\treturn key as keyof T\n\t\t}\n\t}\n\n\treturn undefined\n}", "import canonicalize from 'canonicalize'\nimport { keccak256 } from 'ethers'\nimport { SIGNATURES, strToUint8Array } from './index.ts'\n\nimport { DEFAULT_METADATA } from '#src/config/index.ts'\nimport { ClaimTunnelResponse } from '#src/proto/api.ts'\nimport type { ClaimID, ClaimInfo, CompleteClaimData, ProviderParams } from '#src/types/index.ts'\n\n/**\n * Creates the standard string to sign for a claim.\n * This data is what the attestor will sign when it successfully\n * verifies a claim.\n */\nexport function createSignDataForClaim(data: CompleteClaimData) {\n\tconst lines = [\n\t\tgetIdentifierFromClaimInfo(data),\n\t\t// we lowercase the owner to ensure that the\n\t\t// ETH addresses always serialize the same way\n\t\tdata.owner.toLowerCase(),\n\t\tdata.timestampS.toString(),\n\t\tdata.epoch.toString(),\n\t]\n\n\treturn lines.join('\\n')\n}\n\n/**\n * Verify the claim tunnel response from a attestor.\n *\n * If you'd only like to verify the claim signature, you can\n * optionally only pass \"claim\" & \"signatures.claimSignature\"\n * to this function.\n *\n * The successful run of this function means that the claim\n * is valid, and the attestor that signed the claim is valid.\n */\nexport async function assertValidClaimSignatures(\n\t{\n\t\tsignatures,\n\t\t...res\n\t}: Partial<ClaimTunnelResponse>,\n\tmetadata = DEFAULT_METADATA\n) {\n\tif(!signatures) {\n\t\tthrow new Error('No signatures provided')\n\t}\n\n\tconst {\n\t\tresultSignature,\n\t\tclaimSignature,\n\t\tattestorAddress\n\t} = signatures\n\n\tconst { verify } = SIGNATURES[metadata.signatureType]\n\tif(signatures?.resultSignature) {\n\t\tconst resBytes = ClaimTunnelResponse\n\t\t\t.encode(ClaimTunnelResponse.create(res)).finish()\n\t\tconst verified\n\t\t\t= await verify(resBytes, resultSignature, attestorAddress)\n\t\tif(!verified) {\n\t\t\tthrow new Error('Invalid result signature')\n\t\t}\n\t}\n\n\t// claim wasn't generated -- i.e. the transcript\n\t// did not contain the necessary data\n\tif(!res.claim) {\n\t\treturn\n\t}\n\n\tconst signData = createSignDataForClaim(res.claim)\n\tconst verifiedClaim = await verify(\n\t\tstrToUint8Array(signData),\n\t\tclaimSignature,\n\t\tattestorAddress\n\t)\n\tif(!verifiedClaim) {\n\t\tthrow new Error('Invalid claim signature')\n\t}\n}\n\n/**\n * Generates a unique identifier for given claim info\n * @param info\n * @returns\n */\nexport function getIdentifierFromClaimInfo(info: ClaimInfo): ClaimID {\n\t//re-canonicalize context if it's not empty\n\tif(info.context?.length > 0) {\n\t\ttry {\n\t\t\tconst ctx = JSON.parse(info.context)\n\t\t\tinfo.context = canonicalStringify(ctx)!\n\t\t} catch {\n\t\t\tthrow new Error('unable to parse non-empty context. Must be JSON')\n\t\t}\n\t}\n\n\tconst str = `${info.provider}\\n${info.parameters}\\n${info.context || ''}`\n\t//console.log('Identifier: ' + btoa(str))\n\treturn keccak256(strToUint8Array(str)).toLowerCase()\n}\n\n/**\n * Canonically stringifies an object, so that the same object will always\n * produce the same string despite the order of keys\n */\nexport function canonicalStringify(params: { [key: string]: any } | undefined) {\n\tif(!params) {\n\t\treturn ''\n\t}\n\n\t// have to cast as ESM isn't correctly typing this\n\treturn (canonicalize as unknown as ((p: unknown) => string))(params) || ''\n}\n\nexport function hashProviderParams(params: ProviderParams<'http'>): string {\n\tconst filteredParams = {\n\t\turl: params.url,\n\t\tmethod: params.method,\n\t\tbody: params.body,\n\t\tresponseMatches: params.responseMatches,\n\t\tresponseRedactions: params.responseRedactions\n\t}\n\n\tconst serializedParams = canonicalStringify(filteredParams)\n\treturn keccak256(\n\t\tstrToUint8Array(serializedParams)\n\t).toLowerCase()\n}\n", "import type { CipherSuite, TLSPacketContext } from '@reclaimprotocol/tls'\nimport { concatenateUint8Arrays, crypto } from '@reclaimprotocol/tls'\n\nimport type {\n\tClaimTunnelRequest_TranscriptMessage as TranscriptMessage } from '#src/proto/api.ts'\nimport {\n\tTranscriptMessageSenderType\n} from '#src/proto/api.ts'\nimport type { CompleteTLSPacket, Logger, MessageRevealInfo, PrepareZKProofsBaseOpts, Transcript } from '#src/types/index.ts'\nimport { makeZkProofGenerator } from '#src/utils/zk.ts'\n\nexport type PreparePacketsForRevealOpts = {\n\tcipherSuite: CipherSuite\n\tlogger: Logger\n\t/**\n\t * Progress of Zk proof generation\n\t */\n\tonZkProgress?(blocksDone: number, totalBlocks: number): void\n} & PrepareZKProofsBaseOpts\n\n/**\n * Prepares the packets for reveal to the server\n * according to the specified reveal type\n */\nexport async function preparePacketsForReveal(\n\ttlsTranscript: Transcript<CompleteTLSPacket>,\n\treveals: Map<TLSPacketContext, MessageRevealInfo>,\n\t{ onZkProgress, ...opts }: PreparePacketsForRevealOpts\n) {\n\tconst transcript: TranscriptMessage[] = []\n\tconst proofGenerator = await makeZkProofGenerator(opts)\n\n\tlet zkPacketsDone = 0\n\n\tawait Promise.all(tlsTranscript.map(async({ message, sender }, i) => {\n\t\tconst msg: TranscriptMessage = {\n\t\t\tsender: sender === 'client'\n\t\t\t\t? TranscriptMessageSenderType.TRANSCRIPT_MESSAGE_SENDER_TYPE_CLIENT\n\t\t\t\t: TranscriptMessageSenderType.TRANSCRIPT_MESSAGE_SENDER_TYPE_SERVER,\n\t\t\tmessage: message.data,\n\t\t\treveal: undefined\n\t\t}\n\t\ttranscript.push(msg)\n\n\t\tconst reveal = reveals.get(message)\n\t\tif(!reveal || message.type === 'plaintext') {\n\t\t\treturn\n\t\t}\n\n\t\tswitch (reveal?.type) {\n\t\tcase 'complete':\n\t\t\tmsg.reveal = {\n\t\t\t\tdirectReveal: {\n\t\t\t\t\tkey: await crypto.exportKey(message.encKey),\n\t\t\t\t\tiv: message.fixedIv,\n\t\t\t\t\trecordNumber: message.recordNumber,\n\t\t\t\t},\n\t\t\t}\n\t\t\tbreak\n\t\tcase 'zk': {\n\t\t\t// the redacted section can be smaller than the actual\n\t\t\t// plaintext encrypted, in case of TLS1.3 as it has a\n\t\t\t// content type suffix\n\t\t\treveal.redactedPlaintext = concatenateUint8Arrays([\n\t\t\t\treveal.redactedPlaintext,\n\t\t\t\tmessage.plaintext.slice(reveal.redactedPlaintext.length)\n\t\t\t])\n\n\t\t\t// Capture oprfRawMarkers for server-side OPRF computation\n\t\t\tconst oprfRawMarkers = reveal.oprfRawMarkers?.map(m => ({\n\t\t\t\tdataLocation: m.dataLocation\n\t\t\t})) || []\n\n\t\t\t// Capture overshoot from previous block's oprf-raw marker\n\t\t\tconst overshotOprfRawLength = reveal.overshotOprfRawFromPrevBlock?.length ?? 0\n\n\t\t\tawait proofGenerator.addPacketToProve(\n\t\t\t\tmessage,\n\t\t\t\treveal,\n\t\t\t\t(proofs, toprfs) => (msg.reveal = {\n\t\t\t\t\tzkReveal: { proofs, toprfs, oprfRawMarkers, overshotOprfRawLength }\n\t\t\t\t}),\n\t\t\t\t() => {\n\t\t\t\t\tconst next = tlsTranscript\n\t\t\t\t\t\t.slice(i + 1)\n\t\t\t\t\t\t.find(t => t.sender === sender)\n\t\t\t\t\treturn next?.message\n\t\t\t\t}\n\t\t\t)\n\t\t\tbreak\n\t\t}\n\n\t\tdefault:\n\t\t\t// no reveal\n\t\t\tbreak\n\t\t}\n\t}))\n\n\tconst zkPacketsTotal = proofGenerator.getTotalChunksToProve()\n\tonZkProgress?.(zkPacketsDone, zkPacketsTotal)\n\n\tawait proofGenerator.generateProofs(\n\t\t() => {\n\t\t\tzkPacketsDone += 1\n\t\t\tonZkProgress?.(zkPacketsDone, zkPacketsTotal)\n\t\t}\n\t)\n\n\treturn transcript\n}", "import { computeAddress, getBytes, hexlify, SigningKey, verifyMessage, Wallet } from 'ethers'\n\nimport type { ServiceSignatureProvider } from '#src/types/index.ts'\n\nexport const ETH_SIGNATURE_PROVIDER: ServiceSignatureProvider = {\n\tgetPublicKey(privateKey) {\n\t\tconst pub = SigningKey.computePublicKey(privateKey, true)\n\t\treturn getBytes(pub)\n\t},\n\tgetAddress(publicKey) {\n\t\t// computeAddress in v6 expects hex string\n\t\tconst pubKeyHex = typeof publicKey === 'string' ? publicKey : hexlify(publicKey)\n\t\treturn computeAddress(pubKeyHex).toLowerCase()\n\t},\n\tasync sign(data, privateKey) {\n\t\tconst wallet = getEthWallet(privateKey)\n\t\tconst signature = await wallet.signMessage(data)\n\t\treturn getBytes(signature)\n\t},\n\tasync verify(data, signature, addressBytes) {\n\t\tconst address = typeof addressBytes === 'string'\n\t\t\t? addressBytes\n\t\t\t: hexlify(addressBytes)\n\t\t// verifyMessage in v6 expects SignatureLike (hex string)\n\t\tconst signatureHex = typeof signature === 'string' ? signature : hexlify(signature)\n\t\tconst signerAddress = verifyMessage(data, signatureHex)\n\t\treturn signerAddress.toLowerCase() === address.toLowerCase()\n\t}\n}\n\nfunction getEthWallet(privateKey: string) {\n\tif(!privateKey) {\n\t\tthrow new Error('Private key missing')\n\t}\n\n\treturn new Wallet(privateKey)\n}", "import { ServiceSignatureType } from '#src/proto/api.ts'\nimport type { ServiceSignatureProvider } from '#src/types/index.ts'\nimport { ETH_SIGNATURE_PROVIDER } from '#src/utils/signatures/eth.ts'\n\nexport const SIGNATURES = {\n\t[ServiceSignatureType.SERVICE_SIGNATURE_TYPE_ETH]: ETH_SIGNATURE_PROVIDER,\n} as { [key in ServiceSignatureType]: ServiceSignatureProvider }\n\nexport const SelectedServiceSignatureType = ServiceSignatureType.SERVICE_SIGNATURE_TYPE_ETH\n\nexport const SelectedServiceSignature = SIGNATURES[SelectedServiceSignatureType]", "import { getBytes } from 'ethers'\n\nimport { DEFAULT_AUTH_EXPIRY_S } from '#src/config/index.ts'\nimport type { AuthenticationRequest, ServiceSignatureType } from '#src/proto/api.ts'\nimport { AuthenticatedUserData } from '#src/proto/api.ts'\nimport { getEnvVariable } from '#src/utils/env.ts'\nimport { AttestorError } from '#src/utils/error.ts'\nimport { unixTimestampSeconds } from '#src/utils/generics.ts'\nimport { SelectedServiceSignature, SIGNATURES } from '#src/utils/signatures/index.ts'\n\nexport async function assertValidAuthRequest(\n\trequest: AuthenticationRequest | undefined,\n\tsignatureType: ServiceSignatureType\n) {\n\tconst publicKey = getEnvVariable('AUTHENTICATION_PUBLIC_KEY')\n\t// nothing to verify\n\tif(!request) {\n\t\t// if pub key is provided -- but user didn't attempt to\n\t\t// authenticate, then we should throw an error\n\t\tif(publicKey) {\n\t\t\tthrow new AttestorError(\n\t\t\t\t'ERROR_AUTHENTICATION_FAILED',\n\t\t\t\t'User must be authenticated'\n\t\t\t)\n\t\t}\n\n\t\treturn\n\t}\n\n\tif(!publicKey) {\n\t\tthrow new AttestorError(\n\t\t\t'ERROR_BAD_REQUEST',\n\t\t\t'The attestor is not configured for authentication'\n\t\t)\n\t}\n\n\tconst { signature, data } = request\n\tif(!data) {\n\t\tthrow new AttestorError(\n\t\t\t'ERROR_AUTHENTICATION_FAILED',\n\t\t\t'Missing data in auth request'\n\t\t)\n\t}\n\n\tif(data.expiresAt < unixTimestampSeconds()) {\n\t\tthrow new AttestorError(\n\t\t\t'ERROR_AUTHENTICATION_FAILED',\n\t\t\t'Authentication request has expired'\n\t\t)\n\t}\n\n\tconst proto = AuthenticatedUserData.encode(data).finish()\n\tconst signatureAlg = SIGNATURES[signatureType]\n\tconst address = signatureAlg.getAddress(\n\t\tgetBytes(publicKey)\n\t)\n\tconst verified = await signatureAlg\n\t\t.verify(proto, signature, address)\n\tif(!verified) {\n\t\tthrow new AttestorError(\n\t\t\t'ERROR_AUTHENTICATION_FAILED',\n\t\t\t'Signature verification failed'\n\t\t)\n\t}\n}\n\n/**\n * Create an authentication request with the given data and private key,\n * which can then be used to authenticate with the service.\n */\nexport async function createAuthRequest(\n\t_data: Partial<AuthenticatedUserData>,\n\tprivateKey: string\n) {\n\tconst createdAt = unixTimestampSeconds()\n\tconst data: AuthenticatedUserData = {\n\t\tcreatedAt,\n\t\texpiresAt: createdAt + DEFAULT_AUTH_EXPIRY_S,\n\t\tid: '',\n\t\thostWhitelist: [],\n\t\t..._data,\n\t}\n\tconst proto = AuthenticatedUserData.encode(data).finish()\n\tconst signature = await SelectedServiceSignature\n\t\t.sign(proto, privateKey)\n\tconst request: AuthenticationRequest = {\n\t\tdata,\n\t\tsignature\n\t}\n\n\treturn request\n}", "import { decodeBase64, encodeBase64 } from 'ethers'\n\nexport const B64_JSON_REPLACER = (key: string, value: any) => {\n\tif(\n\t\tvalue instanceof Uint8Array\n\t\t|| (\n\t\t\ttypeof value === 'object'\n\t\t\t&& value\n\t\t\t&& 'buffer' in value\n\t\t\t&& value.buffer instanceof ArrayBuffer\n\t\t)\n\t) {\n\t\treturn { type: 'uint8array', value: encodeBase64(value) }\n\t}\n\n\treturn value\n}\n\nexport const B64_JSON_REVIVER = (key: string, value: any) => {\n\tif(value?.type === 'uint8array') {\n\t\treturn decodeBase64(value.value)\n\t}\n\n\treturn value\n}", "import CIDR from 'ip-cidr'\nimport type { Logger } from 'pino'\n\nimport { BGP_WS_URL } from '#src/config/index.ts'\nimport type { BGPAnnouncementOverlapData, BGPListener } from '#src/types/index.ts'\nimport { makeWebSocket } from '#src/utils/ws.ts'\n\nconst ANNOUNCEMENT_OVERLAP = 'announcement-overlap'\n\nclass BGPAnnouncementOverlapEvent extends Event {\n\n\treadonly data: BGPAnnouncementOverlapData\n\n\tconstructor(data: BGPAnnouncementOverlapData) {\n\t\tsuper(ANNOUNCEMENT_OVERLAP)\n\t\tthis.data = data\n\t}\n}\n\n/**\n * Listens for BGP announcements and emits events whenever\n * an announcement overlaps with a target IP.\n */\nexport function createBgpListener(logger: Logger): BGPListener {\n\tlet ws: ReturnType<typeof makeWebSocket>\n\tlet closed = false\n\n\tconst targetIps = new Set<string>()\n\tconst eventTarget = new EventTarget()\n\n\topenWs()\n\n\treturn {\n\t\tonOverlap(ips, callback) {\n\t\t\tfor(const ip of ips) {\n\t\t\t\ttargetIps.add(ip)\n\t\t\t}\n\n\t\t\teventTarget.addEventListener(\n\t\t\t\tANNOUNCEMENT_OVERLAP,\n\t\t\t\t_callback\n\t\t\t)\n\n\t\t\treturn () => {\n\t\t\t\tfor(const ip of ips) {\n\t\t\t\t\ttargetIps.delete(ip)\n\t\t\t\t}\n\n\t\t\t\teventTarget.removeEventListener(\n\t\t\t\t\tANNOUNCEMENT_OVERLAP,\n\t\t\t\t\t_callback\n\t\t\t\t)\n\t\t\t}\n\n\t\t\tfunction _callback(event: BGPAnnouncementOverlapEvent) {\n\t\t\t\tcallback(event.data)\n\t\t\t}\n\t\t},\n\t\tclose() {\n\t\t\tws.onclose = null\n\t\t\tws.onerror = null\n\t\t\tws.close()\n\t\t\tclosed = true\n\t\t}\n\t}\n\n\tfunction openWs() {\n\t\tlogger.debug('connecting to BGP websocket')\n\n\t\tws = makeWebSocket(BGP_WS_URL)\n\t\tws.onopen = onOpen\n\t\tws.onerror = (ev) => onClose(ev)\n\t\tws.onclose = () => onClose(new Error('Unexpected close'))\n\t\tws.onmessage = ({ data }) => {\n\t\t\tconst str = typeof data === 'string' ? data : data.toString()\n\t\t\ttry {\n\t\t\t\tonMessage(str)\n\t\t\t} catch(err) {\n\t\t\t\tlogger.error({ data, err }, 'error processing BGP message')\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction onOpen(): void {\n\t\tconst subscriptionMessage = {\n\t\t\ttype: 'ris_subscribe',\n\t\t\tdata: {\n\t\t\t\ttype: 'UPDATE',\n\t\t\t},\n\t\t}\n\t\tws.send(JSON.stringify(subscriptionMessage))\n\n\t\tlogger.info('connected to BGP websocket')\n\t}\n\n\tfunction onClose(err?: Error | Event) {\n\t\tif(closed) {\n\t\t\treturn\n\t\t}\n\n\t\tlogger.info({ err }, 'BGP websocket closed')\n\t\tif(!err) {\n\t\t\treturn\n\t\t}\n\n\t\tlogger.info('reconnecting to BGP websocket')\n\t\topenWs()\n\t}\n\n\tfunction onMessage(message: string): void {\n\t\tconst data = JSON.parse(message)\n\t\tconst announcements = data?.data?.announcements\n\n\t\tlogger.trace({ data }, 'got BGP update')\n\n\t\tif(!Array.isArray(announcements)) {\n\t\t\treturn\n\t\t}\n\n\t\tconst asPath = data?.data?.path\n\n\t\tfor(const announcement of announcements) {\n\t\t\tconst prefixes = announcement?.prefixes\n\t\t\tconst nextHop = announcement?.['next_hop']\n\n\t\t\tconst hasPrefixes = prefixes?.length && (nextHop || asPath)\n\t\t\tif(!hasPrefixes) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tfor(const prefix of prefixes) {\n\t\t\t\tif(!overlapsTargetIps(prefix)) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\t// emit event\n\t\t\t\teventTarget.dispatchEvent(\n\t\t\t\t\tnew BGPAnnouncementOverlapEvent({ prefix })\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction overlapsTargetIps(prefix: string): boolean {\n\t\t// ignore all prefixes that end with /0\n\t\tif(prefix.endsWith('/0')) {\n\t\t\treturn false\n\t\t}\n\n\t\tconst cidr = new CIDR(prefix)\n\t\tfor(const ip of targetIps) {\n\t\t\tif(cidr.contains(ip)) {\n\t\t\t\treturn true\n\t\t\t}\n\t\t}\n\n\t\treturn false\n\t}\n}\n", "import type { WebSocket as WSWebSocket } from 'ws'\n\nexport function makeWebSocket(url: string) {\n\treturn new WebSocket(url)\n}\n\n/**\n * Adds the \"sendPromise\" fn to the given WebSocket instance,\n * if not already present.\n */\nexport function promisifySend(ws: WSWebSocket) {\n\tif(ws.sendPromise) {\n\t\treturn ws\n\t}\n\n\tws.sendPromise = (data) => (\n\t\tnew Promise((resolve, reject) => {\n\t\t\tws.send(data, err => {\n\t\t\t\tif(err) {\n\t\t\t\t\treject(err)\n\t\t\t\t\treturn\n\t\t\t\t}\n\n\t\t\t\tresolve()\n\t\t\t})\n\t\t})\n\t)\n\n\treturn ws\n}", "import type { CipherSuite, TLSConnectionOptions } from '@reclaimprotocol/tls'\nimport { SUPPORTED_NAMED_CURVES } from '@reclaimprotocol/tls'\n\nimport { detectEnvironment } from '#src/utils/env.ts'\n\n// we only support the following cipher suites\n// for ZK proof generation\nconst ZK_CIPHER_SUITES: CipherSuite[] = [\n\t// chacha-20\n\t'TLS_CHACHA20_POLY1305_SHA256',\n\t'TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256',\n\t'TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256',\n\t// aes-256\n\t'TLS_AES_256_GCM_SHA384',\n\t'TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384',\n\t'TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384',\n\t// aes-128\n\t'TLS_AES_128_GCM_SHA256',\n\t'TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256',\n\t'TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256',\n\t'TLS_RSA_WITH_AES_128_GCM_SHA256'\n]\n\nconst NAMED_CURVE_LIST = detectEnvironment() === 'node'\n\t? SUPPORTED_NAMED_CURVES\n\t// X25519 is not supported in the browser\n\t: SUPPORTED_NAMED_CURVES.filter(c => c !== 'X25519')\n\nTLS_ADDITIONAL_ROOT_CA_LIST.push(\n\t`-----BEGIN CERTIFICATE-----\nMIIEszCCA5ugAwIBAgIQCyWUIs7ZgSoVoE6ZUooO+jANBgkqhkiG9w0BAQsFADBh\nMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3\nd3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBH\nMjAeFw0xNzExMDIxMjI0MzNaFw0yNzExMDIxMjI0MzNaMGAxCzAJBgNVBAYTAlVT\nMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j\nb20xHzAdBgNVBAMTFlJhcGlkU1NMIFRMUyBSU0EgQ0EgRzEwggEiMA0GCSqGSIb3\nDQEBAQUAA4IBDwAwggEKAoIBAQC/uVklRBI1FuJdUEkFCuDL/I3aJQiaZ6aibRHj\nap/ap9zy1aYNrphe7YcaNwMoPsZvXDR+hNJOo9gbgOYVTPq8gXc84I75YKOHiVA4\nNrJJQZ6p2sJQyqx60HkEIjzIN+1LQLfXTlpuznToOa1hyTD0yyitFyOYwURM+/CI\n8FNFMpBhw22hpeAQkOOLmsqT5QZJYeik7qlvn8gfD+XdDnk3kkuuu0eG+vuyrSGr\n5uX5LRhFWlv1zFQDch/EKmd163m6z/ycx/qLa9zyvILc7cQpb+k7TLra9WE17YPS\nn9ANjG+ECo9PDW3N9lwhKQCNvw1gGoguyCQu7HE7BnW8eSSFAgMBAAGjggFmMIIB\nYjAdBgNVHQ4EFgQUDNtsgkkPSmcKuBTuesRIUojrVjgwHwYDVR0jBBgwFoAUTiJU\nIBiV5uNu5g/6+rkS7QYXjzkwDgYDVR0PAQH/BAQDAgGGMB0GA1UdJQQWMBQGCCsG\nAQUFBwMBBggrBgEFBQcDAjASBgNVHRMBAf8ECDAGAQH/AgEAMDQGCCsGAQUFBwEB\nBCgwJjAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNlcnQuY29tMEIGA1Ud\nHwQ7MDkwN6A1oDOGMWh0dHA6Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEds\nb2JhbFJvb3RHMi5jcmwwYwYDVR0gBFwwWjA3BglghkgBhv1sAQEwKjAoBggrBgEF\nBQcCARYcaHR0cHM6Ly93d3cuZGlnaWNlcnQuY29tL0NQUzALBglghkgBhv1sAQIw\nCAYGZ4EMAQIBMAgGBmeBDAECAjANBgkqhkiG9w0BAQsFAAOCAQEAGUSlOb4K3Wtm\nSlbmE50UYBHXM0SKXPqHMzk6XQUpCheF/4qU8aOhajsyRQFDV1ih/uPIg7YHRtFi\nCTq4G+zb43X1T77nJgSOI9pq/TqCwtukZ7u9VLL3JAq3Wdy2moKLvvC8tVmRzkAe\n0xQCkRKIjbBG80MSyDX/R4uYgj6ZiNT/Zg6GI6RofgqgpDdssLc0XIRQEotxIZcK\nzP3pGJ9FCbMHmMLLyuBd+uCWvVcF2ogYAawufChS/PT61D9rqzPRS5I2uqa3tmIT\n44JhJgWhBnFMb7AGQkvNq9KNS9dd3GWc17H/dXa1enoxzWjE0hBdFjxPhUb0W3wi\n8o34/m8Fxw==\n-----END CERTIFICATE-----` //RapidSSL TLS RSA CA G1\n)\n\nexport function getDefaultTlsOptions(): TLSConnectionOptions {\n\treturn {\n\t\tcipherSuites: ZK_CIPHER_SUITES,\n\t\tnamedCurves: NAMED_CURVE_LIST,\n\t}\n}", "import type { CreateTunnelRequest } from '#src/proto/api.ts'\nimport type { IAttestorClient, MakeTunnelFn, RPCEvent } from '#src/types/index.ts'\nimport { AttestorError } from '#src/utils/index.ts'\n\nexport type TCPTunnelCreateOpts = {\n\t/**\n\t * The tunnel ID to communicate with.\n\t */\n\ttunnelId: CreateTunnelRequest['id']\n\tclient: IAttestorClient\n}\n\n/**\n * Makes a tunnel communication wrapper for a TCP tunnel.\n *\n * It listens for messages and disconnect events from the server,\n * and appropriately calls the `onMessage` and `onClose` callbacks.\n */\nexport const makeRpcTcpTunnel: MakeTunnelFn<TCPTunnelCreateOpts> = ({\n\ttunnelId,\n\tclient,\n\tonClose,\n\tonMessage,\n}) => {\n\tlet closed = false\n\tclient.addEventListener('tunnel-message', onMessageListener)\n\tclient.addEventListener('tunnel-disconnect-event', onDisconnectListener)\n\tclient.addEventListener('connection-terminated', onConnectionTerminatedListener)\n\n\treturn {\n\t\tasync write(message) {\n\t\t\tawait client.sendMessage({ tunnelMessage: { tunnelId, message } })\n\t\t},\n\t\tasync close(err) {\n\t\t\tif(closed) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tonErrorRecv(err)\n\t\t\tawait client.rpc('disconnectTunnel', { id: tunnelId })\n\t\t}\n\t}\n\n\tfunction onMessageListener({ data }: RPCEvent<'tunnel-message'>) {\n\t\tif(data.tunnelId !== tunnelId) {\n\t\t\treturn\n\t\t}\n\n\t\tonMessage?.(data.message)\n\t}\n\n\tfunction onDisconnectListener({ data }: RPCEvent<'tunnel-disconnect-event'>) {\n\t\tif(data.tunnelId !== tunnelId) {\n\t\t\treturn\n\t\t}\n\n\t\tonErrorRecv(\n\t\t\tdata.error?.code\n\t\t\t\t? AttestorError.fromProto(data.error)\n\t\t\t\t: undefined\n\t\t)\n\t}\n\n\tfunction onConnectionTerminatedListener({ data }: RPCEvent<'connection-terminated'>) {\n\t\tonErrorRecv(data)\n\t}\n\n\tfunction onErrorRecv(err: Error | undefined) {\n\t\tclient.logger?.debug({ tunnelId, err }, 'TCP tunnel closed')\n\n\t\tclient.removeEventListener('tunnel-message', onMessageListener)\n\t\tclient.removeEventListener('tunnel-disconnect-event', onDisconnectListener)\n\t\tclient.removeEventListener('connection-terminated', onConnectionTerminatedListener)\n\t\tonClose?.(err)\n\t\tonClose = undefined\n\t\tclosed = true\n\t}\n}", "import { encodeBase64 } from 'ethers'\n\nimport { DEFAULT_METADATA, DEFAULT_RPC_TIMEOUT_MS } from '#src/config/index.ts'\nimport type { InitResponse } from '#src/proto/api.ts'\nimport { RPCMessages } from '#src/proto/api.ts'\nimport type { IAttestorClient, IAttestorClientCreateOpts, RPCEvent, RPCRequestData, RPCResponseData, RPCType } from '#src/types/index.ts'\nimport { AttestorError, generateRpcMessageId, getRpcRequestType, logger as LOGGER, packRpcMessages } from '#src/utils/index.ts'\nimport { AttestorSocket } from '#src/utils/socket-base.ts'\nimport { makeWebSocket as defaultMakeWebSocket } from '#src/utils/ws.ts'\n\nexport class AttestorClient extends AttestorSocket implements IAttestorClient {\n\n\tprivate waitForInitPromise: Promise<void>\n\n\tpublic initResponse?: InitResponse\n\n\tconstructor({\n\t\turl,\n\t\tinitMessages = [],\n\t\tsignatureType = DEFAULT_METADATA.signatureType,\n\t\tlogger = LOGGER,\n\t\tauthRequest,\n\t\tmakeWebSocket = defaultMakeWebSocket\n\t}: IAttestorClientCreateOpts) {\n\t\tconst initRequest = {\n\t\t\t...DEFAULT_METADATA,\n\t\t\tsignatureType,\n\t\t\tauth: authRequest\n\t\t}\n\t\tconst msg = packRpcMessages({ initRequest }, ...initMessages)\n\t\tconst initRequestBytes = RPCMessages.encode(msg).finish()\n\t\tconst initRequestB64 = encodeBase64(initRequestBytes)\n\n\t\turl = new URL(url.toString())\n\t\turl.searchParams.set('messages', initRequestB64)\n\n\t\tsuper(\n\t\t\tmakeWebSocket(url) as WebSocket,\n\t\t\tinitRequest,\n\t\t\tlogger\n\t\t)\n\n\t\tconst initReqId = msg.messages[0].id\n\t\tthis.waitForInitPromise = this\n\t\t\t.waitForResponse<'init'>(initReqId, DEFAULT_RPC_TIMEOUT_MS)\n\t\t\t.then(res => {\n\t\t\t\tlogger.info('client initialised')\n\t\t\t\tthis.isInitialised = true\n\t\t\t\tthis.initResponse = res\n\t\t\t})\n\t\t// swallow the error if anything bad happens, and we've no\n\t\t// catch block to handle it\n\t\tthis.waitForInitPromise\n\t\t\t.catch(() => { })\n\n\t\tthis.addEventListener('connection-terminated', ev => (\n\t\t\tlogger.info({ err: ev.data }, 'connection terminated')\n\t\t))\n\t}\n\n\tasync rpc<T extends RPCType>(\n\t\ttype: T,\n\t\trequest: Partial<RPCRequestData<T>>,\n\t\ttimeoutMs: number = DEFAULT_RPC_TIMEOUT_MS\n\t) {\n\t\tconst msgId = generateRpcMessageId()\n\t\tthis.logger.debug({ type, id: msgId }, 'sending rpc request')\n\t\tconst now = Date.now()\n\t\ttry {\n\t\t\tconst rslt = this.waitForResponse<T>(msgId, timeoutMs)\n\t\t\tawait this.sendMessage({ id: msgId, [getRpcRequestType(type)]: request })\n\n\t\t\treturn await rslt\n\t\t} finally {\n\t\t\tconst timeTakenMs = Date.now() - now\n\t\t\tthis.logger.debug({ type, timeTakenMs }, 'received rpc response')\n\t\t}\n\t}\n\n\twaitForResponse<T extends RPCType>(\n\t\tid: number,\n\t\ttimeoutMs: number = DEFAULT_RPC_TIMEOUT_MS\n\t) {\n\t\tif(this.isClosed) {\n\t\t\tthrow new AttestorError(\n\t\t\t\t'ERROR_NETWORK_ERROR',\n\t\t\t\t'Client connection already closed'\n\t\t\t)\n\t\t}\n\n\t\t// setup a promise to wait for the response\n\t\treturn new Promise<RPCResponseData<T>>((resolve, reject) => {\n\t\t\tconst handler = (event: RPCEvent<'rpc-response'>) => {\n\t\t\t\tif(event.data.id !== id) {\n\t\t\t\t\treturn\n\t\t\t\t}\n\n\t\t\t\tremoveHandlers()\n\t\t\t\tif('error' in event.data) {\n\t\t\t\t\treject(event.data.error)\n\t\t\t\t\treturn\n\t\t\t\t}\n\n\t\t\t\t// @ts-expect-error\n\t\t\t\tresolve(event.data.data)\n\t\t\t}\n\n\t\t\tconst terminateHandler = (event: RPCEvent<'connection-terminated'>) => {\n\t\t\t\tremoveHandlers()\n\t\t\t\t// if the connection was terminated, reject the promise\n\t\t\t\t// but update the error code to reflect the network error\n\t\t\t\tif(event.data.code === 'ERROR_NO_ERROR') {\n\t\t\t\t\treject(\n\t\t\t\t\t\tnew AttestorError(\n\t\t\t\t\t\t\t'ERROR_NETWORK_ERROR',\n\t\t\t\t\t\t\tevent.data.message,\n\t\t\t\t\t\t\tevent.data.data\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t\treturn\n\t\t\t\t}\n\n\t\t\t\treject(event.data)\n\t\t\t}\n\n\t\t\tconst timeout = setTimeout(() => {\n\t\t\t\tremoveHandlers()\n\t\t\t\treject(\n\t\t\t\t\tnew AttestorError(\n\t\t\t\t\t\t'ERROR_TIMEOUT',\n\t\t\t\t\t\t`RPC request timed out after ${timeoutMs}ms`,\n\t\t\t\t\t\t{ id }\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t}, timeoutMs)\n\n\t\t\tconst removeHandlers = () => {\n\t\t\t\tclearTimeout(timeout)\n\t\t\t\tthis.removeEventListener('rpc-response', handler)\n\t\t\t\tthis.removeEventListener('connection-terminated', terminateHandler)\n\t\t\t}\n\n\t\t\tthis.addEventListener('rpc-response', handler)\n\t\t\tthis.addEventListener('connection-terminated', terminateHandler)\n\t\t})\n\t}\n\n\twaitForInit = () => {\n\t\tif(this.isClosed) {\n\t\t\tthrow new AttestorError(\n\t\t\t\t'ERROR_NETWORK_ERROR',\n\t\t\t\t'Client connection already closed'\n\t\t\t)\n\t\t}\n\n\t\treturn this.waitForInitPromise\n\t}\n}", "import type { RPCMessage } from '#src/proto/api.ts'\nimport { RPCMessages } from '#src/proto/api.ts'\nimport type { IAttestorSocket } from '#src/types/index.ts'\nimport { AttestorError, extractArrayBufferFromWsData, getRpcRequest, getRpcRequestType, getRpcResponseType } from '#src/utils/index.ts'\n\nexport async function wsMessageHandler(this: IAttestorSocket, data: unknown) {\n\t// extract array buffer from WS data & decode proto\n\tconst buff = await extractArrayBufferFromWsData(data)\n\tconst { messages } = RPCMessages.decode(buff)\n\tfor(const msg of messages) {\n\t\tawait handleMessage.call(this, msg)\n\t}\n}\n\nexport function handleMessage(this: IAttestorSocket, msg: RPCMessage) {\n\tthis.logger?.trace({ msg }, 'received message')\n\t// handle connection termination alert\n\tif(msg.connectionTerminationAlert) {\n\t\tconst err = AttestorError.fromProto(\n\t\t\tmsg.connectionTerminationAlert\n\t\t)\n\t\tthis.logger?.warn(\n\t\t\t{\n\t\t\t\terr: err.code !== 'ERROR_NO_ERROR'\n\t\t\t\t\t? err\n\t\t\t\t\t: undefined\n\t\t\t},\n\t\t\t'received connection termination alert'\n\t\t)\n\t\tthis.dispatchRPCEvent('connection-terminated', err)\n\t\treturn\n\t}\n\n\tconst rpcRequest = getRpcRequest(msg)\n\tif(rpcRequest) {\n\t\tif(\n\t\t\trpcRequest.direction === 'response'\n\t\t\t&& rpcRequest.type === 'error'\n\t\t) {\n\t\t\tthis.dispatchRPCEvent('rpc-response', {\n\t\t\t\tid: msg.id,\n\t\t\t\terror: AttestorError.fromProto(msg.requestError)\n\t\t\t})\n\t\t\treturn\n\t\t}\n\n\t\tconst resType = getRpcResponseType(rpcRequest.type)\n\t\tif(rpcRequest.direction === 'response') {\n\t\t\tthis.dispatchRPCEvent('rpc-response', {\n\t\t\t\tid: msg.id,\n\t\t\t\ttype: rpcRequest.type,\n\t\t\t\tdata: msg[resType]!\n\t\t\t})\n\t\t\treturn\n\t\t}\n\n\t\tif(!this.isInitialised && rpcRequest.type !== 'init') {\n\t\t\tthis.logger.warn(\n\t\t\t\t{ type: rpcRequest.type },\n\t\t\t\t'RPC request received before initialisation'\n\t\t\t)\n\t\t\tvoid this.sendMessage({\n\t\t\t\tid: msg.id,\n\t\t\t\trequestError: AttestorError\n\t\t\t\t\t.badRequest('Initialise connection first')\n\t\t\t\t\t.toProto()\n\t\t\t})\n\t\t\treturn\n\t\t}\n\n\t\treturn new Promise<void>((resolve, reject) => {\n\t\t\tthis.dispatchRPCEvent('rpc-request', {\n\t\t\t\trequestId: msg.id,\n\t\t\t\ttype: rpcRequest.type,\n\t\t\t\tdata: msg[getRpcRequestType(rpcRequest.type)]!,\n\t\t\t\trespond: (res) => {\n\t\t\t\t\tif(!this.isOpen) {\n\t\t\t\t\t\tthis.logger?.debug(\n\t\t\t\t\t\t\t{ type: rpcRequest.type, res },\n\t\t\t\t\t\t\t'connection closed before responding'\n\t\t\t\t\t\t)\n\t\t\t\t\t\treject(new Error('connection closed'))\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\n\t\t\t\t\tif('code' in res) {\n\t\t\t\t\t\treject(res)\n\t\t\t\t\t\treturn this.sendMessage({\n\t\t\t\t\t\t\tid: msg.id,\n\t\t\t\t\t\t\trequestError: res.toProto()\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\n\t\t\t\t\tresolve()\n\t\t\t\t\treturn this\n\t\t\t\t\t\t.sendMessage({ id: msg.id, [resType]: res })\n\t\t\t\t},\n\t\t\t})\n\t\t})\n\t}\n\n\tif(msg.tunnelMessage) {\n\t\tthis.dispatchRPCEvent('tunnel-message', msg.tunnelMessage)\n\t\treturn\n\t}\n\n\tif(msg.tunnelDisconnectEvent) {\n\t\tthis.dispatchRPCEvent(\n\t\t\t'tunnel-disconnect-event',\n\t\t\tmsg.tunnelDisconnectEvent\n\t\t)\n\t\treturn\n\t}\n\n\tthis.logger.warn({ msg }, 'unhandled message')\n}", "import type { WebSocket as WSWebSocket } from 'ws'\n\nimport { wsMessageHandler } from '#src/client/utils/message-handler.ts'\nimport type { InitRequest, RPCMessage } from '#src/proto/api.ts'\nimport { RPCMessages } from '#src/proto/api.ts'\nimport type { IAttestorSocket, Logger, RPCEvent, RPCEventMap } from '#src/types/index.ts'\nimport { AttestorError, makeRpcEvent, packRpcMessages } from '#src/utils/index.ts'\n\n/**\n * Common AttestorSocket class used on the client & server side as the\n * base for their respective socket implementations.\n */\nexport class AttestorSocket implements IAttestorSocket {\n\n\tprivate eventTarget = new EventTarget()\n\tprotected socket: WebSocket | WSWebSocket\n\treadonly logger: Logger\n\treadonly metadata: InitRequest\n\n\tisInitialised = false\n\n\tconstructor(\n\t\tsocket: WebSocket | WSWebSocket,\n\t\tmetadata: InitRequest,\n\t\tlogger: Logger\n\t) {\n\t\tthis.socket = socket\n\t\tthis.metadata = metadata\n\t\tthis.logger = logger\n\n\t\t// @ts-expect-error - WebSocket type differs between browser and Node.js\n\t\tsocket.addEventListener('error', (event: ErrorEvent) => {\n\t\t\tconst witErr = AttestorError.fromError(\n\t\t\t\tevent.error || new Error(event.message),\n\t\t\t\t'ERROR_NETWORK_ERROR'\n\t\t\t)\n\n\t\t\tthis.dispatchRPCEvent('connection-terminated', witErr)\n\t\t})\n\n\t\tsocket.addEventListener('close', () => (\n\t\t\tthis.dispatchRPCEvent(\n\t\t\t\t'connection-terminated',\n\t\t\t\tnew AttestorError(\n\t\t\t\t\t'ERROR_NO_ERROR',\n\t\t\t\t\t'connection closed'\n\t\t\t\t)\n\t\t\t)\n\t\t))\n\n\t\t// @ts-expect-error - WebSocket type differs between browser and Node.js\n\t\tsocket.addEventListener('message', async(event: MessageEvent) => {\n\t\t\ttry {\n\t\t\t\tawait wsMessageHandler.call(this, event.data)\n\t\t\t} catch(err) {\n\t\t\t\tthis.logger.error({ err }, 'error processing message')\n\t\t\t}\n\t\t})\n\t}\n\n\tget isOpen() {\n\t\treturn this.socket.readyState === this.socket.OPEN\n\t}\n\n\tget isClosed() {\n\t\treturn this.socket.readyState === this.socket.CLOSED\n\t\t\t|| this.socket.readyState === this.socket.CLOSING\n\t}\n\n\tasync sendMessage(...msgs: Partial<RPCMessage>[]) {\n\t\tif(this.isClosed) {\n\t\t\tthrow new AttestorError(\n\t\t\t\t'ERROR_NETWORK_ERROR',\n\t\t\t\t'Connection closed, cannot send message'\n\t\t\t)\n\t\t}\n\n\t\tif(!this.isOpen) {\n\t\t\tthrow new AttestorError(\n\t\t\t\t'ERROR_NETWORK_ERROR',\n\t\t\t\t'Wait for connection to open before sending message'\n\t\t\t)\n\t\t}\n\n\t\tconst msg = packRpcMessages(...msgs)\n\t\tconst bytes = RPCMessages.encode(msg).finish()\n\n\t\tthis.logger.trace({ msg }, 'sending messages')\n\n\t\tif('sendPromise' in this.socket && this.socket.sendPromise) {\n\t\t\tawait this.socket.sendPromise(bytes)\n\t\t} else {\n\t\t\tthis.socket.send(bytes)\n\t\t}\n\n\t\treturn msg\n\t}\n\n\tdispatchRPCEvent<K extends keyof RPCEventMap>(type: K, data: RPCEventMap[K]) {\n\t\tconst event = makeRpcEvent(type, data)\n\t\tthis.eventTarget.dispatchEvent(event)\n\t}\n\n\taddEventListener<K extends keyof RPCEventMap>(type: K, listener: (data: RPCEvent<K>) => void): void {\n\t\tthis.eventTarget.addEventListener(type, listener)\n\t}\n\n\tremoveEventListener<K extends keyof RPCEventMap>(type: K, listener: (data: RPCEvent<K>) => void): void {\n\t\tthis.eventTarget.removeEventListener(type, listener)\n\t}\n\n\tasync terminateConnection(err?: Error) {\n\t\t// connection already closed\n\t\tif(this.isClosed) {\n\t\t\treturn\n\t\t}\n\n\t\ttry {\n\t\t\tconst witErr = err\n\t\t\t\t? AttestorError.fromError(err)\n\t\t\t\t: new AttestorError('ERROR_NO_ERROR', '')\n\t\t\tthis.dispatchRPCEvent('connection-terminated', witErr)\n\t\t\tif(this.isOpen) {\n\t\t\t\tawait this.sendMessage({\n\t\t\t\t\tconnectionTerminationAlert: witErr.toProto()\n\t\t\t\t})\n\t\t\t}\n\t\t} catch(err) {\n\t\t\tthis.logger?.error({ err }, 'error terminating connection')\n\t\t} finally {\n\t\t\tthis.socket.close()\n\t\t}\n\t}\n}", "import { AttestorClient } from '#src/client/utils/client-socket.ts'\nimport type { IAttestorClient, IAttestorClientCreateOpts } from '#src/types/index.ts'\n\nconst POOL: { [url: string]: IAttestorClient | undefined } = {}\n\n/**\n * Get a attestor client from the pool,\n * if it doesn't exist, create one.\n * @param [getCreateOpts] - Function to get the options for creating a new client.\n * called synchronously, in the same tick as this function.\n */\nexport function getAttestorClientFromPool(\n\turl: string | URL,\n\tgetCreateOpts: () => Omit<IAttestorClientCreateOpts, 'url'> = () => ({})\n) {\n\tconst key = url.toString()\n\tlet client = POOL[key]\n\tlet createReason: string | undefined\n\tif(client?.isClosed) {\n\t\tcreateReason = 'closed'\n\t} else if(!client) {\n\t\tcreateReason = 'non-existent'\n\t}\n\n\tif(createReason) {\n\t\tconst createOpts = getCreateOpts()\n\t\tcreateOpts?.logger?.info(\n\t\t\t{ key, createReason },\n\t\t\t'creating new client'\n\t\t)\n\t\tclient = (POOL[key] = new AttestorClient({ ...createOpts, url }))\n\t}\n\n\treturn client!\n}", "import type { TLSConnectionOptions } from '@reclaimprotocol/tls'\nimport { areUint8ArraysEqual, concatenateUint8Arrays, uint8ArrayToBinaryStr } from '@reclaimprotocol/tls'\nimport { encodeBase64 } from 'ethers'\n\nimport { DEFAULT_HTTPS_PORT, RECLAIM_USER_AGENT } from '#src/config/index.ts'\nimport { AttestorVersion } from '#src/proto/api.ts'\nimport {\n\tbuildHeaders,\n\tconvertResponsePosToAbsolutePos,\n\textractHTMLElementsIndexes,\n\textractJSONValueIndexes,\n\tgetRedactionsForChunkHeaders,\n\tmakeRegex,\n\tmatchRedactedStrings,\n\tparseHttpResponse,\n} from '#src/providers/http/utils.ts'\nimport { isValidProxySessionId } from '#src/server/utils/proxy-session.ts'\nimport type {\n\tArraySlice,\n\tProvider,\n\tProviderCtx,\n\tProviderParams,\n\tProviderSecretParams,\n\tRedactedOrHashedArraySlice\n} from '#src/types/index.ts'\nimport {\n\tfindIndexInUint8Array,\n\tgetHttpRequestDataFromTranscript,\n\tlogger,\n\tREDACTION_CHAR_CODE,\n\tstrToUint8Array,\n\tuint8ArrayToStr,\n} from '#src/utils/index.ts'\n\nconst OK_HTTP_HEADER = 'HTTP/1.1 200'\nconst 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)'\nconst dateDiff = 1000 * 60 * 10 // allow 10 min difference\n\ntype HTTPProviderParams = ProviderParams<'http'>\n\ntype HTTPResponseRedaction = Exclude<HTTPProviderParams['responseRedactions'], undefined>[number]\n\nconst HTTP_PROVIDER: Provider<'http'> = {\n\thostPort: getHostPort,\n\twriteRedactionMode(params) {\n\t\treturn ('writeRedactionMode' in params)\n\t\t\t? params.writeRedactionMode\n\t\t\t: undefined\n\t},\n\tgeoLocation(params, secretParams) {\n\t\treturn ('geoLocation' in params)\n\t\t\t? getGeoLocation(params, secretParams)\n\t\t\t: undefined\n\t},\n\tproxySessionId(params, secretParams) {\n\t\treturn ('proxySessionId' in params)\n\t\t\t? getProxySessionId(params, secretParams)\n\t\t\t: undefined\n\t},\n\tadditionalClientOptions(params): TLSConnectionOptions {\n\t\tlet defaultOptions: TLSConnectionOptions = {\n\t\t\tapplicationLayerProtocols: ['http/1.1']\n\t\t}\n\t\tif('additionalClientOptions' in params) {\n\t\t\tdefaultOptions = {\n\t\t\t\t...defaultOptions,\n\t\t\t\t...params.additionalClientOptions\n\t\t\t}\n\t\t}\n\n\t\treturn defaultOptions\n\t},\n\tcreateRequest(secretParams, params, logger) {\n\t\tif(\n\t\t\t!secretParams.cookieStr &&\n\t\t\t!secretParams.authorisationHeader &&\n\t\t\t!secretParams.headers\n\t\t) {\n\t\t\tthrow new Error('auth parameters are not set')\n\t\t}\n\n\t\tconst pubHeaders = params.headers || {}\n\t\tconst secHeaders = { ...secretParams.headers }\n\t\tif(secretParams.cookieStr) {\n\t\t\tsecHeaders['Cookie'] = secretParams.cookieStr\n\t\t}\n\n\t\tif(secretParams.authorisationHeader) {\n\t\t\tsecHeaders['Authorization'] = secretParams.authorisationHeader\n\t\t}\n\n\t\tconst hasUserAgent = Object.keys(pubHeaders)\n\t\t\t.some(k => k.toLowerCase() === 'user-agent') ||\n\t\t\tObject.keys(secHeaders)\n\t\t\t\t.some(k => k.toLowerCase() === 'user-agent')\n\t\tif(!hasUserAgent) {\n\t\t\t//only set user-agent if not set by provider\n\t\t\tpubHeaders['User-Agent'] = RECLAIM_USER_AGENT\n\t\t}\n\n\t\tconst newParams = substituteParamValues(params, secretParams)\n\t\tparams = newParams.newParams\n\n\t\tconst url = new URL(params.url)\n\t\tconst { pathname } = url\n\t\tconst searchParams = params.url.includes('?') ? params.url.split('?')[1] : ''\n\t\tlogger.info({ url: params.url, path: pathname, query: searchParams.toString() })\n\t\tconst body = params.body instanceof Uint8Array\n\t\t\t? params.body\n\t\t\t: strToUint8Array(params.body || '')\n\t\tconst contentLength = body.length\n\t\tconst reqLine = `${params.method} ${pathname}${searchParams?.length ? '?' + searchParams : ''} HTTP/1.1`\n\t\tconst secHeadersList = buildHeaders(secHeaders)\n\t\tlogger.info({ requestLine: reqLine })\n\t\tconst httpReqHeaderStr = [\n\t\t\treqLine,\n\t\t\t`Host: ${getHostHeaderString(url)}`,\n\t\t\t`Content-Length: ${contentLength}`,\n\t\t\t'Connection: close',\n\t\t\t//no compression\n\t\t\t'Accept-Encoding: identity',\n\t\t\t...buildHeaders(pubHeaders),\n\t\t\t...secHeadersList,\n\t\t\t'\\r\\n',\n\t\t].join('\\r\\n')\n\t\tconst headerStr = strToUint8Array(httpReqHeaderStr)\n\t\tconst data = concatenateUint8Arrays([headerStr, body])\n\n\t\t// hide all secret headers\n\t\tconst secHeadersStr = secHeadersList.join('\\r\\n')\n\t\tconst tokenStartIndex\n\t\t\t= findIndexInUint8Array(data, strToUint8Array(secHeadersStr))\n\n\t\tconst redactions = [\n\t\t\t{\n\t\t\t\tfromIndex: tokenStartIndex,\n\t\t\t\ttoIndex: tokenStartIndex + secHeadersStr.length,\n\t\t\t}\n\t\t]\n\n\t\tif(newParams.hiddenBodyParts?.length > 0) {\n\t\t\tfor(const hiddenBodyPart of newParams.hiddenBodyParts) {\n\t\t\t\tif(hiddenBodyPart.length) {\n\t\t\t\t\tredactions.push({\n\t\t\t\t\t\tfromIndex: headerStr.length + hiddenBodyPart.index,\n\t\t\t\t\t\ttoIndex: headerStr.length + hiddenBodyPart.index + hiddenBodyPart.length,\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif(newParams.hiddenURLParts?.length > 0) {\n\t\t\tfor(const hiddenURLPart of newParams.hiddenURLParts) {\n\t\t\t\tif(hiddenURLPart.length) {\n\t\t\t\t\tredactions.push({\n\t\t\t\t\t\tfromIndex: hiddenURLPart.index,\n\t\t\t\t\t\ttoIndex: hiddenURLPart.index + hiddenURLPart.length,\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tredactions.sort((a, b) => a.toIndex - b.toIndex)\n\t\treturn {\n\t\t\tdata,\n\t\t\tredactions: redactions,\n\t\t}\n\t},\n\tgetResponseRedactions({ response, params: rawParams, logger, ctx }) {\n\t\tlogger.debug({ response: encodeBase64(response), params: rawParams })\n\n\t\tconst res = parseHttpResponse(response)\n\t\tif(!rawParams.responseRedactions?.length) {\n\t\t\treturn []\n\t\t}\n\n\t\tif(((res.statusCode / 100) >> 0) !== 2) {\n\t\t\tlogger.error({ response: encodeBase64(response), params: rawParams })\n\t\t\tthrow new Error(\n\t\t\t\t`Expected status 2xx, got ${res.statusCode} (${res.statusMessage})`\n\t\t\t)\n\t\t}\n\n\t\tconst newParams = substituteParamValues(rawParams, undefined, true)\n\t\tconst params = newParams.newParams\n\n\t\tconst headerEndIndex = res.statusLineEndIndex!\n\t\tconst bodyStartIdx = res.bodyStartIndex ?? 0\n\t\tif(bodyStartIdx < 4) {\n\t\t\tlogger.error({ response: encodeBase64(response) })\n\t\t\tthrow new Error('Failed to find response body')\n\t\t}\n\n\t\tconst reveals: RedactedOrHashedArraySlice[] = [\n\t\t\t{ fromIndex: 0, toIndex: headerEndIndex }\n\t\t]\n\n\t\t//reveal double CRLF which separates headers from body\n\t\tif(shouldRevealCrlf(ctx)) {\n\t\t\tconst crlfs = response\n\t\t\t\t.slice(res.headerEndIdx, res.headerEndIdx + 4)\n\t\t\tif(!areUint8ArraysEqual(crlfs, strToUint8Array('\\r\\n\\r\\n'))) {\n\t\t\t\tlogger.error({ response: encodeBase64(response) })\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Failed to find header/body separator at index ${res.headerEndIdx}`\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\n\t\treveals.push({ fromIndex: res.headerEndIdx, toIndex: res.headerEndIdx + 4 })\n\n\t\t//reveal date header\n\t\tif(res.headerIndices['date']) {\n\t\t\treveals.push(res.headerIndices['date'])\n\t\t}\n\n\t\tconst body = uint8ArrayToBinaryStr(res.body)\n\n\t\tconst redactions: RedactedOrHashedArraySlice[] = []\n\t\tfor(const rs of params.responseRedactions || []) {\n\t\t\tconst processor = processRedactionRequest(\n\t\t\t\tbody, rs, bodyStartIdx, res.chunks\n\t\t\t)\n\t\t\tfor(const { reveal, redactions: reds } of processor) {\n\t\t\t\treveals.push(reveal)\n\t\t\t\tredactions.push(...reds)\n\t\t\t}\n\t\t}\n\n\t\treveals.sort((a, b) => a.toIndex - b.toIndex)\n\n\t\tif(reveals.length > 1) {\n\t\t\tlet currentIndex = 0\n\t\t\tfor(const r of reveals) {\n\t\t\t\tif(currentIndex < r.fromIndex) {\n\t\t\t\t\tredactions.push({ fromIndex: currentIndex, toIndex: r.fromIndex })\n\t\t\t\t}\n\n\t\t\t\tcurrentIndex = r.toIndex\n\t\t\t}\n\n\t\t\tredactions.push({ fromIndex: currentIndex, toIndex: response.length })\n\t\t}\n\n\t\tfor(const r of reveals) {\n\t\t\tif(!r.hash) {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tredactions.push(r)\n\t\t}\n\n\t\tredactions.sort((a, b) => a.toIndex - b.toIndex)\n\n\t\treturn redactions\n\t},\n\tassertValidProviderReceipt({ receipt, params: paramsAny, logger, ctx }) {\n\t\tlogTranscript()\n\t\tlet extractedParams: { [_: string]: string } = {}\n\t\tconst secretParams = ('secretParams' in paramsAny)\n\t\t\t? paramsAny.secretParams as ProviderSecretParams<'http'>\n\t\t\t: undefined\n\t\tconst newParams = substituteParamValues(paramsAny, secretParams, !secretParams)\n\t\tconst params = newParams.newParams\n\t\textractedParams = { ...extractedParams, ...newParams.extractedValues }\n\n\t\tconst req = getHttpRequestDataFromTranscript(receipt)\n\t\tif(req.method !== params.method.toLowerCase()) {\n\t\t\tthrow new Error(`Invalid method: ${req.method}`)\n\t\t}\n\n\t\tconst url = new URL(params.url)\n\t\tconst { protocol, pathname } = url\n\n\t\tif(protocol !== 'https:') {\n\t\t\tlogger.error('params URL: %s', params.url)\n\t\t\tthrow new Error(`Expected protocol: https, found: ${protocol}`)\n\t\t}\n\n\t\tconst searchParams = params.url.includes('?') ? params.url.split('?')[1] : ''\n\t\t//brackets in URL path turn into %7B and %7D, so replace them back\n\t\tconst expectedPath = pathname.replaceAll('%7B', '{').replaceAll('%7D', '}') + (searchParams?.length ? '?' + searchParams : '')\n\t\tif(!matchRedactedStrings(strToUint8Array(expectedPath), strToUint8Array(req.url))) {\n\t\t\tlogger.error('params URL: %s', params.url)\n\t\t\tthrow new Error(`Expected path: ${expectedPath}, found: ${req.url}`)\n\t\t}\n\n\t\tconst expectedHostStr = getHostHeaderString(url)\n\t\tif(req.headers.host !== expectedHostStr) {\n\t\t\tthrow new Error(`Expected host: ${expectedHostStr}, found: ${req.headers.host}`)\n\t\t}\n\n\t\tconst connectionHeader = req.headers['connection']\n\t\tif(connectionHeader !== 'close') {\n\t\t\tthrow new Error(`Connection header must be \"close\", got \"${connectionHeader}\"`)\n\t\t}\n\n\t\tconst serverBlocks = receipt\n\t\t\t.filter(s => s.sender === 'server')\n\t\t\t.map((r) => r.message)\n\t\t\t// filter out fully redacted blocks\n\t\t\t.filter(b => !b.every(b => b === REDACTION_CHAR_CODE))\n\t\tconst response = concatArrays(...serverBlocks)\n\n\t\tlet res: string\n\t\tres = uint8ArrayToStr(response)\n\n\t\tconst okRegex = makeRegex('^HTTP\\\\/1.1 2\\\\d{2}')\n\t\tconst matchRes = okRegex.exec(res)\n\t\tif(!matchRes) {\n\t\t\tconst statusRegex = makeRegex('^HTTP\\\\/1.1 (\\\\d{3})')\n\t\t\tconst matchRes = statusRegex.exec(res)\n\t\t\tif(matchRes && matchRes.length > 1) {\n\t\t\t\tthrow new Error(`Provider returned error ${matchRes[1]}`)\n\t\t\t}\n\n\t\t\tlet lineEnd = res.indexOf('*')\n\t\t\tif(lineEnd === -1) {\n\t\t\t\tlineEnd = res.indexOf('\\n')\n\t\t\t}\n\n\t\t\tif(lineEnd === -1) {\n\t\t\t\tlineEnd = OK_HTTP_HEADER.length\n\t\t\t}\n\n\t\t\tthrow new Error(\n\t\t\t\t`Response did not start with \\\"HTTP/1.1 2XX\\\" got \"${res.slice(0, lineEnd)}\"`\n\t\t\t)\n\t\t}\n\n\t\tlet bodyStart: number\n\t\tif(shouldRevealCrlf(ctx)) {\n\t\t\tbodyStart = res.indexOf('\\r\\n\\r\\n', OK_HTTP_HEADER.length) + 4\n\t\t\tif(bodyStart < 4) {\n\t\t\t\tthrow new Error('Response body start not found')\n\t\t\t}\n\t\t} else {\n\t\t\tbodyStart = OK_HTTP_HEADER.length\n\t\t}\n\n\t\t//validate server Date header if present\n\t\tconst dateHeader = makeRegex(dateHeaderRegex).exec(res)\n\t\tif(dateHeader && dateHeader.length > 1) {\n\t\t\tconst serverDate = new Date(dateHeader[1])\n\t\t\tif((Date.now() - serverDate.getTime()) > dateDiff) {\n\n\t\t\t\tlogger.info({ dateHeader: dateHeader[0], current: Date.now() }, 'date header is off')\n\n\t\t\t\t// too many false positives\n\t\t\t\t// throw new Error(\n\t\t\t\t// \t`Server date is off by \"${(Date.now() - serverDate.getTime()) / 1000} s\"`\n\t\t\t\t// )\n\t\t\t}\n\t\t}\n\n\n\t\tconst paramBody = params.body instanceof Uint8Array\n\t\t\t? params.body\n\t\t\t: strToUint8Array(params.body || '')\n\n\t\tif(paramBody.length > 0 && !matchRedactedStrings(paramBody, req.body)) {\n\t\t\tthrow new Error('request body mismatch')\n\t\t}\n\n\n\t\t//remove asterisks to account for chunks in the middle of revealed strings\n\t\tif(!secretParams) {\n\t\t\tres = res.slice(bodyStart).replace(/(\\*){3,}/g, '')\n\t\t}\n\n\n\t\tfor(const { type, value, invert } of params.responseMatches || []) {\n\t\t\tconst inv = Boolean(invert) // explicitly cast to boolean\n\n\t\t\tswitch (type) {\n\t\t\tcase 'regex':\n\t\t\t\tconst regexRes = makeRegex(value).exec(res)\n\t\t\t\tconst match = regexRes !== null\n\t\t\t\tif(match === inv) { // if both true or both false then fail\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t'Invalid receipt.'\n\t\t\t\t\t\t+ ` Regex \"${value}\" ${invert ? 'matched' : 'didn\\'t match'}`\n\t\t\t\t\t)\n\t\t\t\t}\n\n\t\t\t\tif(!match) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\tconst groups = regexRes?.groups\n\t\t\t\tfor(const paramName in groups || []) {\n\t\t\t\t\tif(paramName in extractedParams) {\n\t\t\t\t\t\tthrow new Error(`Duplicate parameter ${paramName}`)\n\t\t\t\t\t}\n\n\t\t\t\t\tconst value = groups?.[paramName]\n\t\t\t\t\tif(typeof value !== 'string') {\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\n\t\t\t\t\textractedParams[paramName] = value\n\t\t\t\t}\n\n\t\t\t\tbreak\n\t\t\tcase 'contains':\n\t\t\t\tconst includes = res.includes(value)\n\t\t\t\tif(includes === inv) {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t`Invalid receipt. Response ${invert ? 'contains' : 'does not contain'} \"${value}\"`\n\t\t\t\t\t)\n\t\t\t\t}\n\n\t\t\t\tbreak\n\t\t\tdefault:\n\t\t\t\tthrow new Error(`Invalid response match type ${type}`)\n\t\t\t}\n\t\t}\n\n\t\tfunction concatArrays(...bufs: Uint8Array[]) {\n\t\t\tconst totalSize = bufs.reduce((acc, e) => acc + e.length, 0)\n\t\t\tconst merged = new Uint8Array(totalSize)\n\n\t\t\tlet lenDone = 0\n\t\t\tfor(const array of bufs) {\n\t\t\t\tmerged.set(array, lenDone)\n\t\t\t\tlenDone += array.length\n\t\t\t}\n\n\t\t\treturn merged\n\n\t\t}\n\n\t\treturn { extractedParameters: extractedParams }\n\n\t\tfunction logTranscript() {\n\t\t\tconst clientMsgs = receipt.filter(s => s.sender === 'client').map(m => m.message)\n\t\t\tconst serverMsgs = receipt.filter(s => s.sender === 'server').map(m => m.message)\n\n\t\t\tconst clientTranscript = encodeBase64(concatenateUint8Arrays(clientMsgs))\n\t\t\tconst serverTranscript = encodeBase64(concatenateUint8Arrays(serverMsgs))\n\n\t\t\tlogger.debug({ request: clientTranscript, response: serverTranscript, params: paramsAny })\n\t\t}\n\t},\n}\n\n// revealing CRLF is a breaking change -- and should only be done\n// if the client's version supports it\nfunction shouldRevealCrlf({ version }: ProviderCtx) {\n\treturn version >= AttestorVersion.ATTESTOR_VERSION_2_0_1\n}\n\nfunction getHostPort(params: ProviderParams<'http'>, secretParams: ProviderSecretParams<'http'>) {\n\tconst { host } = new URL(getURL(params, secretParams))\n\tif(!host) {\n\t\tthrow new Error('url is incorrect')\n\t}\n\n\treturn host\n}\n\n/**\n * Obtain the host header string from the URL.\n * https://stackoverflow.com/a/3364396\n */\nfunction getHostHeaderString(url: URL) {\n\tconst host = url.hostname\n\tconst port = url.port\n\treturn port && +port !== DEFAULT_HTTPS_PORT\n\t\t? `${host}:${port}`\n\t\t: host\n\n}\n\ntype ReplacedParams = {\n\tnewParam: string\n\textractedValues: { [_: string]: string }\n\thiddenParts: { index: number, length: number } []\n} | null\n\ntype RedactionItem = {\n\treveal: RedactedOrHashedArraySlice\n\tredactions: RedactedOrHashedArraySlice[]\n}\n\nconst paramsRegex = /{{([^{}]+)}}/sgi\n\nfunction* processRedactionRequest(\n\tbody: string,\n\trs: HTTPResponseRedaction,\n\tbodyStartIdx: number,\n\tresChunks: ArraySlice[] | undefined,\n): Generator<RedactionItem> {\n\tlet element = body\n\tlet elementIdx = 0\n\tlet elementLength = -1\n\n\tif(rs.xPath) {\n\t\tconst indexes = extractHTMLElementsIndexes(body, rs.xPath, !!rs.jsonPath)\n\t\tfor(const { start, end } of indexes) {\n\t\t\telement = body.slice(start, end)\n\t\t\telementIdx = start\n\t\t\telementLength = end - start\n\t\t\tif(rs.jsonPath) {\n\t\t\t\tyield* processJsonPath()\n\t\t\t} else if(rs.regex) {\n\t\t\t\tyield* processRegexp()\n\t\t\t} else {\n\t\t\t\tyield* addRedaction()\n\t\t\t}\n\t\t}\n\t} else if(rs.jsonPath) {\n\t\tyield* processJsonPath()\n\t} else if(rs.regex) {\n\t\tyield* processRegexp()\n\t} else {\n\t\tthrow new Error(\n\t\t\t'Expected either xPath, jsonPath or regex for redaction'\n\t\t)\n\t}\n\n\tfunction* processJsonPath() {\n\t\tconst jsonPathIndexes = extractJSONValueIndexes(element, rs.jsonPath!)\n\n\t\tconst eIndex = elementIdx\n\t\tfor(const ji of jsonPathIndexes) {\n\t\t\tconst jStart = ji.start\n\t\t\tconst jEnd = ji.end\n\t\t\telement = body.slice(eIndex + jStart, eIndex + jEnd)\n\t\t\telementIdx = eIndex + jStart\n\t\t\telementLength = jEnd - jStart\n\n\t\t\tif(rs.regex) {\n\t\t\t\tyield* processRegexp()\n\t\t\t} else {\n\t\t\t\tyield* addRedaction()\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction* processRegexp() {\n\t\tlogger.debug({\n\t\t\telement: encodeBase64(strToUint8Array(element)),\n\t\t\tbody: encodeBase64(strToUint8Array(body))\n\t\t})\n\t\tconst regexp = makeRegex(rs.regex!)\n\t\tconst elem = element || body\n\t\tconst match = regexp.exec(elem)\n\n\t\tif(!match?.[0]) {\n\t\t\tthrow new Error(\n\t\t\t\t`regexp ${rs.regex} does not match found element '${encodeBase64(strToUint8Array(elem))}'`\n\t\t\t)\n\t\t}\n\n\t\telementIdx += match.index\n\t\telementLength = regexp.lastIndex - match.index\n\t\telement = match[0]\n\n\t\tif(rs.hash && (!match.groups || Object.keys(match.groups).length > 1)) {\n\t\t\tthrow new Error(\n\t\t\t\t'Exactly one named capture group is needed per hashed redaction'\n\t\t\t)\n\t\t}\n\n\t\t// if there are groups in the regex,\n\t\t// we'll only hash the group values\n\t\tif(!rs.hash || !match.groups) {\n\t\t\tyield* addRedaction()\n\t\t\treturn\n\t\t}\n\n\n\t\tconst fullStr = match[0]\n\t\tconst grp = Object.values(match.groups)[0]\n\t\tconst grpIdx = fullStr.indexOf(grp)\n\n\t\t// don't hash the entire regex, we'll hash the group values\n\t\telementLength = grpIdx\n\t\telement = fullStr.slice(0, grpIdx)\n\t\tyield* addRedaction(null)\n\n\t\telementIdx += grpIdx\n\t\telement = grp\n\t\telementLength = grp.length\n\n\t\tconst reveal = getReveal(elementIdx, elementLength, rs.hash)\n\t\tconst chunkReds\n\t\t\t= getRedactionsForChunkHeaders(reveal.fromIndex, reveal.toIndex, resChunks)\n\t\tif(chunkReds.length) {\n\t\t\tthrow new Error(\n\t\t\t\t'Hash redactions cannot be performed if '\n\t\t\t\t+ 'the redacted string is split between 2'\n\t\t\t\t+ ' or more HTTP chunks'\n\t\t\t)\n\t\t}\n\n\t\tyield { reveal, redactions: chunkReds }\n\n\t\telementIdx += grp.length\n\t\telement = fullStr.slice(grpIdx + grp.length)\n\t\telementLength = element.length\n\t\tyield* addRedaction(null)\n\t}\n\n\tfunction* addRedaction(\n\t\thash: RedactedOrHashedArraySlice['hash'] | null = rs.hash,\n\t\t_resChunks = resChunks\n\t): Generator<RedactionItem> {\n\t\tif(elementIdx < 0 || !elementLength) {\n\t\t\treturn\n\t\t}\n\n\t\tconst reveal = getReveal(elementIdx, elementLength, hash || undefined)\n\n\t\tyield {\n\t\t\treveal,\n\t\t\tredactions: getRedactionsForChunkHeaders(\n\t\t\t\treveal.fromIndex,\n\t\t\t\treveal.toIndex,\n\t\t\t\t_resChunks\n\t\t\t)\n\t\t}\n\t}\n\n\tfunction getReveal(\n\t\tstartIdx: number,\n\t\tlen: number,\n\t\thash?: RedactedOrHashedArraySlice['hash']\n\t) {\n\t\tconst from = convertResponsePosToAbsolutePos(\n\t\t\tstartIdx,\n\t\t\tbodyStartIdx,\n\t\t\tresChunks\n\t\t)\n\t\tconst to = convertResponsePosToAbsolutePos(\n\t\t\tstartIdx + len,\n\t\t\tbodyStartIdx,\n\t\t\tresChunks\n\t\t)\n\n\t\treturn { fromIndex: from, toIndex: to, hash }\n\t}\n}\n\nexport function substituteParamValues(\n\tcurrentParams: HTTPProviderParams,\n\tsecretParams?: ProviderSecretParams<'http'>,\n\tignoreMissingParams?: boolean\n): {\n\tnewParams: HTTPProviderParams\n\textractedValues: { [_: string]: string }\n\thiddenBodyParts: { index: number, length: number } []\n\thiddenURLParts: { index: number, length: number } []\n} {\n\n\tconst params = JSON.parse(JSON.stringify(currentParams))\n\tlet extractedValues: { [_: string]: string } = {}\n\n\tconst hiddenURLParts: { index: number, length: number } [] = []\n\tconst urlParams = extractAndReplaceTemplateValues(params.url, ignoreMissingParams)\n\tif(urlParams) {\n\t\tparams.url = urlParams.newParam\n\t\textractedValues = { ...urlParams.extractedValues }\n\n\t\tif(urlParams.hiddenParts.length) {\n\t\t\tconst host = getHostHeaderString(new URL(params.url))\n\t\t\tconst offset = `https://${host}`.length - currentParams.method.length - 1 //space between method and start of the path\n\t\t\tfor(const hiddenURLPart of urlParams.hiddenParts) {\n\t\t\t\thiddenURLParts.push({ index: hiddenURLPart.index - offset, length: hiddenURLPart.length })\n\t\t\t}\n\t\t}\n\n\t}\n\n\n\tlet bodyParams: ReplacedParams\n\tlet hiddenBodyParts: { index: number, length: number } [] = []\n\tif(params.body) {\n\t\tconst strBody = typeof params.body === 'string' ? params.body : uint8ArrayToStr(params.body)\n\t\tbodyParams = extractAndReplaceTemplateValues(strBody, ignoreMissingParams)\n\t\tif(bodyParams) {\n\t\t\tparams.body = bodyParams.newParam\n\t\t\textractedValues = { ...extractedValues, ...bodyParams.extractedValues }\n\t\t\thiddenBodyParts = bodyParams.hiddenParts\n\t\t}\n\n\t}\n\n\tconst geoParams = extractAndReplaceTemplateValues(params.geoLocation)\n\tif(geoParams) {\n\t\tparams.geoLocation = geoParams.newParam\n\t\textractedValues = { ...extractedValues, ...geoParams.extractedValues }\n\t}\n\n\tconst proxySessionIdParams = extractAndReplaceTemplateValues(params.proxySessionId)\n\tif(proxySessionIdParams) {\n\t\tparams.proxySessionId = proxySessionIdParams.newParam\n\t\textractedValues = { ...extractedValues, ...proxySessionIdParams.extractedValues }\n\t}\n\n\tif(params.responseRedactions) {\n\t\tfor(const r of params.responseRedactions) {\n\t\t\tif(r.regex) {\n\t\t\t\tconst regexParams = extractAndReplaceTemplateValues(r.regex)\n\t\t\t\tr.regex = regexParams?.newParam\n\t\t\t}\n\n\t\t\tif(r.xPath) {\n\t\t\t\tconst xpathParams = extractAndReplaceTemplateValues(r.xPath)\n\t\t\t\tr.xPath = xpathParams?.newParam\n\t\t\t}\n\n\t\t\tif(r.jsonPath) {\n\t\t\t\tconst jsonPathParams = extractAndReplaceTemplateValues(r.jsonPath)\n\t\t\t\tr.jsonPath = jsonPathParams?.newParam\n\t\t\t}\n\t\t}\n\t}\n\n\tif(params.responseMatches) {\n\t\tfor(const r of params.responseMatches) {\n\t\t\tif(r.value !== '') {\n\t\t\t\tconst matchParam = extractAndReplaceTemplateValues(r.value)\n\t\t\t\tr.value = matchParam?.newParam!\n\t\t\t\textractedValues = { ...extractedValues, ...matchParam?.extractedValues }\n\t\t\t}\n\t\t}\n\t}\n\n\treturn {\n\t\tnewParams: params,\n\t\textractedValues: extractedValues,\n\t\thiddenBodyParts: hiddenBodyParts,\n\t\thiddenURLParts: hiddenURLParts\n\t}\n\n\tfunction extractAndReplaceTemplateValues(param: string | undefined, ignoreMissingParams?: boolean): ReplacedParams {\n\n\t\tif(!param) {\n\t\t\treturn null\n\t\t}\n\n\t\t//const paramNames: Set<string> = new Set()\n\t\tconst extractedValues: { [_: string]: string } = {}\n\t\tconst hiddenParts: { index: number, length: number }[] = []\n\n\n\t\tlet totalOffset = 0\n\t\tparam = param.replace(paramsRegex, (match, pn, offset) => {\n\t\t\tif(params.paramValues && pn in params.paramValues) {\n\t\t\t\textractedValues[pn] = params.paramValues[pn]\n\t\t\t\ttotalOffset += params.paramValues[pn].length - match.length\n\t\t\t\treturn params.paramValues[pn]\n\t\t\t} else if(secretParams) {\n\t\t\t\tif(secretParams?.paramValues && pn in secretParams?.paramValues) {\n\t\t\t\t\thiddenParts.push({\n\t\t\t\t\t\tindex: offset + totalOffset,\n\t\t\t\t\t\tlength: secretParams.paramValues[pn].length,\n\t\t\t\t\t})\n\t\t\t\t\ttotalOffset += secretParams.paramValues[pn].length - match.length\n\t\t\t\t\treturn secretParams.paramValues[pn]\n\t\t\t\t} else {\n\t\t\t\t\tthrow new Error(`parameter's \"${pn}\" value not found in paramValues and secret parameter's paramValues`)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif(!(!!ignoreMissingParams)) {\n\t\t\t\t\tthrow new Error(`parameter's \"${pn}\" value not found in paramValues`)\n\t\t\t\t} else {\n\t\t\t\t\treturn match\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\n\t\treturn {\n\t\t\tnewParam: param,\n\t\t\textractedValues: extractedValues,\n\t\t\thiddenParts: hiddenParts\n\t\t}\n\t}\n}\n\nfunction getGeoLocation(v2Params: HTTPProviderParams, secretParams?: ProviderSecretParams<'http'>) {\n\tif(v2Params?.geoLocation) {\n\t\tconst paramNames: Set<string> = new Set()\n\t\tlet geo = v2Params.geoLocation\n\t\t//extract param names\n\n\t\tlet match: RegExpExecArray | null = null\n\t\twhile(match = paramsRegex.exec(geo)) {\n\t\t\tparamNames.add(match[1])\n\t\t}\n\n\t\tfor(const pn of paramNames) {\n\t\t\tif(v2Params.paramValues && pn in v2Params.paramValues) {\n\t\t\t\tgeo = geo?.replaceAll(`{{${pn}}}`, v2Params.paramValues[pn].toString())\n\t\t\t} else if(secretParams?.paramValues && pn in secretParams.paramValues) {\n\t\t\t\tgeo = geo?.replaceAll(`{{${pn}}}`, secretParams.paramValues[pn].toString())\n\t\t\t} else {\n\t\t\t\tthrow new Error(`parameter \"${pn}\" value not found in templateParams`)\n\t\t\t}\n\t\t}\n\n\t\tconst geoRegex = /^[A-Za-z]{2}$/sgiu\n\t\tif(!geoRegex.test(geo)) {\n\t\t\tthrow new Error(`Geolocation ${geo} is invalid`)\n\t\t}\n\n\t\treturn geo\n\t}\n\n\treturn undefined\n}\n\nfunction getProxySessionId(v2Params: HTTPProviderParams, secretParams?: ProviderSecretParams<'http'>) {\n\tif(v2Params?.proxySessionId) {\n\t\tconst paramNames: Set<string> = new Set()\n\t\tlet proxySessionIdValue = v2Params.proxySessionId\n\t\t//extract param names\n\n\t\tlet match: RegExpExecArray | null = null\n\t\twhile(match = paramsRegex.exec(proxySessionIdValue)) {\n\t\t\tparamNames.add(match[1])\n\t\t}\n\n\t\tfor(const pn of paramNames) {\n\t\t\tif(v2Params.paramValues && pn in v2Params.paramValues) {\n\t\t\t\tproxySessionIdValue = proxySessionIdValue?.replaceAll(`{{${pn}}}`, v2Params.paramValues[pn].toString())\n\t\t\t} else if(secretParams?.paramValues && pn in secretParams.paramValues) {\n\t\t\t\tproxySessionIdValue = proxySessionIdValue?.replaceAll(`{{${pn}}}`, secretParams.paramValues[pn].toString())\n\t\t\t} else {\n\t\t\t\tthrow new Error(`parameter \"${pn}\" value not found in templateParams`)\n\t\t\t}\n\t\t}\n\n\t\tif(!isValidProxySessionId(proxySessionIdValue)) {\n\t\t\tthrow new Error(`proxySessionId ${proxySessionIdValue} is invalid`)\n\t\t}\n\n\t\treturn proxySessionIdValue\n\t}\n\n\treturn undefined\n}\n\nfunction getURL(v2Params: HTTPProviderParams, secretParams: ProviderSecretParams<'http'>) {\n\tlet hostPort = v2Params?.url\n\tconst paramNames: Set<string> = new Set()\n\n\t//extract param names\n\tlet match: RegExpExecArray | null = null\n\twhile(match = paramsRegex.exec(hostPort)) {\n\t\tparamNames.add(match[1])\n\t}\n\n\tfor(const pn of paramNames) {\n\t\tif(v2Params.paramValues && pn in v2Params.paramValues) {\n\t\t\thostPort = hostPort?.replaceAll(`{{${pn}}}`, v2Params.paramValues[pn].toString())\n\t\t} else if(secretParams?.paramValues && pn in secretParams.paramValues) {\n\t\t\thostPort = hostPort?.replaceAll(`{{${pn}}}`, secretParams.paramValues[pn].toString())\n\t\t} else {\n\t\t\tthrow new Error(`parameter \"${pn}\" value not found in templateParams`)\n\t\t}\n\t}\n\n\treturn hostPort\n}\n\n\nexport default HTTP_PROVIDER\n", "/** Types of elements found in htmlparser2's DOM */\nexport var ElementType;\n(function (ElementType) {\n /** Type for the root element of a document */\n ElementType[\"Root\"] = \"root\";\n /** Type for Text */\n ElementType[\"Text\"] = \"text\";\n /** Type for <? ... ?> */\n ElementType[\"Directive\"] = \"directive\";\n /** Type for <!-- ... --> */\n ElementType[\"Comment\"] = \"comment\";\n /** Type for <script> tags */\n ElementType[\"Script\"] = \"script\";\n /** Type for <style> tags */\n ElementType[\"Style\"] = \"style\";\n /** Type for Any tag */\n ElementType[\"Tag\"] = \"tag\";\n /** Type for <![CDATA[ ... ]]> */\n ElementType[\"CDATA\"] = \"cdata\";\n /** Type for <!doctype ...> */\n ElementType[\"Doctype\"] = \"doctype\";\n})(ElementType || (ElementType = {}));\n/**\n * Tests whether an element is a tag or not.\n *\n * @param elem Element to test\n */\nexport function isTag(elem) {\n return (elem.type === ElementType.Tag ||\n elem.type === ElementType.Script ||\n elem.type === ElementType.Style);\n}\n// Exports for backwards compatibility\n/** Type for the root element of a document */\nexport const Root = ElementType.Root;\n/** Type for Text */\nexport const Text = ElementType.Text;\n/** Type for <? ... ?> */\nexport const Directive = ElementType.Directive;\n/** Type for <!-- ... --> */\nexport const Comment = ElementType.Comment;\n/** Type for <script> tags */\nexport const Script = ElementType.Script;\n/** Type for <style> tags */\nexport const Style = ElementType.Style;\n/** Type for Any tag */\nexport const Tag = ElementType.Tag;\n/** Type for <![CDATA[ ... ]]> */\nexport const CDATA = ElementType.CDATA;\n/** Type for <!doctype ...> */\nexport const Doctype = ElementType.Doctype;\n", "import { ElementType, isTag as isTagRaw } from \"domelementtype\";\n/**\n * This object will be used as the prototype for Nodes when creating a\n * DOM-Level-1-compliant structure.\n */\nexport class Node {\n constructor() {\n /** Parent of the node */\n this.parent = null;\n /** Previous sibling */\n this.prev = null;\n /** Next sibling */\n this.next = null;\n /** The start index of the node. Requires `withStartIndices` on the handler to be `true. */\n this.startIndex = null;\n /** The end index of the node. Requires `withEndIndices` on the handler to be `true. */\n this.endIndex = null;\n }\n // Read-write aliases for properties\n /**\n * Same as {@link parent}.\n * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.\n */\n get parentNode() {\n return this.parent;\n }\n set parentNode(parent) {\n this.parent = parent;\n }\n /**\n * Same as {@link prev}.\n * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.\n */\n get previousSibling() {\n return this.prev;\n }\n set previousSibling(prev) {\n this.prev = prev;\n }\n /**\n * Same as {@link next}.\n * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.\n */\n get nextSibling() {\n return this.next;\n }\n set nextSibling(next) {\n this.next = next;\n }\n /**\n * Clone this node, and optionally its children.\n *\n * @param recursive Clone child nodes as well.\n * @returns A clone of the node.\n */\n cloneNode(recursive = false) {\n return cloneNode(this, recursive);\n }\n}\n/**\n * A node that contains some data.\n */\nexport class DataNode extends Node {\n /**\n * @param data The content of the data node\n */\n constructor(data) {\n super();\n this.data = data;\n }\n /**\n * Same as {@link data}.\n * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.\n */\n get nodeValue() {\n return this.data;\n }\n set nodeValue(data) {\n this.data = data;\n }\n}\n/**\n * Text within the document.\n */\nexport class Text extends DataNode {\n constructor() {\n super(...arguments);\n this.type = ElementType.Text;\n }\n get nodeType() {\n return 3;\n }\n}\n/**\n * Comments within the document.\n */\nexport class Comment extends DataNode {\n constructor() {\n super(...arguments);\n this.type = ElementType.Comment;\n }\n get nodeType() {\n return 8;\n }\n}\n/**\n * Processing instructions, including doc types.\n */\nexport class ProcessingInstruction extends DataNode {\n constructor(name, data) {\n super(data);\n this.name = name;\n this.type = ElementType.Directive;\n }\n get nodeType() {\n return 1;\n }\n}\n/**\n * A `Node` that can have children.\n */\nexport class NodeWithChildren extends Node {\n /**\n * @param children Children of the node. Only certain node types can have children.\n */\n constructor(children) {\n super();\n this.children = children;\n }\n // Aliases\n /** First child of the node. */\n get firstChild() {\n var _a;\n return (_a = this.children[0]) !== null && _a !== void 0 ? _a : null;\n }\n /** Last child of the node. */\n get lastChild() {\n return this.children.length > 0\n ? this.children[this.children.length - 1]\n : null;\n }\n /**\n * Same as {@link children}.\n * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.\n */\n get childNodes() {\n return this.children;\n }\n set childNodes(children) {\n this.children = children;\n }\n}\nexport class CDATA extends NodeWithChildren {\n constructor() {\n super(...arguments);\n this.type = ElementType.CDATA;\n }\n get nodeType() {\n return 4;\n }\n}\n/**\n * The root node of the document.\n */\nexport class Document extends NodeWithChildren {\n constructor() {\n super(...arguments);\n this.type = ElementType.Root;\n }\n get nodeType() {\n return 9;\n }\n}\n/**\n * An element within the DOM.\n */\nexport class Element extends NodeWithChildren {\n /**\n * @param name Name of the tag, eg. `div`, `span`.\n * @param attribs Object mapping attribute names to attribute values.\n * @param children Children of the node.\n */\n constructor(name, attribs, children = [], type = name === \"script\"\n ? ElementType.Script\n : name === \"style\"\n ? ElementType.Style\n : ElementType.Tag) {\n super(children);\n this.name = name;\n this.attribs = attribs;\n this.type = type;\n }\n get nodeType() {\n return 1;\n }\n // DOM Level 1 aliases\n /**\n * Same as {@link name}.\n * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.\n */\n get tagName() {\n return this.name;\n }\n set tagName(name) {\n this.name = name;\n }\n get attributes() {\n return Object.keys(this.attribs).map((name) => {\n var _a, _b;\n return ({\n name,\n value: this.attribs[name],\n namespace: (_a = this[\"x-attribsNamespace\"]) === null || _a === void 0 ? void 0 : _a[name],\n prefix: (_b = this[\"x-attribsPrefix\"]) === null || _b === void 0 ? void 0 : _b[name],\n });\n });\n }\n}\n/**\n * @param node Node to check.\n * @returns `true` if the node is a `Element`, `false` otherwise.\n */\nexport function isTag(node) {\n return isTagRaw(node);\n}\n/**\n * @param node Node to check.\n * @returns `true` if the node has the type `CDATA`, `false` otherwise.\n */\nexport function isCDATA(node) {\n return node.type === ElementType.CDATA;\n}\n/**\n * @param node Node to check.\n * @returns `true` if the node has the type `Text`, `false` otherwise.\n */\nexport function isText(node) {\n return node.type === ElementType.Text;\n}\n/**\n * @param node Node to check.\n * @returns `true` if the node has the type `Comment`, `false` otherwise.\n */\nexport function isComment(node) {\n return node.type === ElementType.Comment;\n}\n/**\n * @param node Node to check.\n * @returns `true` if the node has the type `ProcessingInstruction`, `false` otherwise.\n */\nexport function isDirective(node) {\n return node.type === ElementType.Directive;\n}\n/**\n * @param node Node to check.\n * @returns `true` if the node has the type `ProcessingInstruction`, `false` otherwise.\n */\nexport function isDocument(node) {\n return node.type === ElementType.Root;\n}\n/**\n * @param node Node to check.\n * @returns `true` if the node has children, `false` otherwise.\n */\nexport function hasChildren(node) {\n return Object.prototype.hasOwnProperty.call(node, \"children\");\n}\n/**\n * Clone a node, and optionally its children.\n *\n * @param recursive Clone child nodes as well.\n * @returns A clone of the node.\n */\nexport function cloneNode(node, recursive = false) {\n let result;\n if (isText(node)) {\n result = new Text(node.data);\n }\n else if (isComment(node)) {\n result = new Comment(node.data);\n }\n else if (isTag(node)) {\n const children = recursive ? cloneChildren(node.children) : [];\n const clone = new Element(node.name, { ...node.attribs }, children);\n children.forEach((child) => (child.parent = clone));\n if (node.namespace != null) {\n clone.namespace = node.namespace;\n }\n if (node[\"x-attribsNamespace\"]) {\n clone[\"x-attribsNamespace\"] = { ...node[\"x-attribsNamespace\"] };\n }\n if (node[\"x-attribsPrefix\"]) {\n clone[\"x-attribsPrefix\"] = { ...node[\"x-attribsPrefix\"] };\n }\n result = clone;\n }\n else if (isCDATA(node)) {\n const children = recursive ? cloneChildren(node.children) : [];\n const clone = new CDATA(children);\n children.forEach((child) => (child.parent = clone));\n result = clone;\n }\n else if (isDocument(node)) {\n const children = recursive ? cloneChildren(node.children) : [];\n const clone = new Document(children);\n children.forEach((child) => (child.parent = clone));\n if (node[\"x-mode\"]) {\n clone[\"x-mode\"] = node[\"x-mode\"];\n }\n result = clone;\n }\n else if (isDirective(node)) {\n const instruction = new ProcessingInstruction(node.name, node.data);\n if (node[\"x-name\"] != null) {\n instruction[\"x-name\"] = node[\"x-name\"];\n instruction[\"x-publicId\"] = node[\"x-publicId\"];\n instruction[\"x-systemId\"] = node[\"x-systemId\"];\n }\n result = instruction;\n }\n else {\n throw new Error(`Not implemented yet: ${node.type}`);\n }\n result.startIndex = node.startIndex;\n result.endIndex = node.endIndex;\n if (node.sourceCodeLocation != null) {\n result.sourceCodeLocation = node.sourceCodeLocation;\n }\n return result;\n}\nfunction cloneChildren(childs) {\n const children = childs.map((child) => cloneNode(child, true));\n for (let i = 1; i < children.length; i++) {\n children[i].prev = children[i - 1];\n children[i - 1].next = children[i];\n }\n return children;\n}\n", "// these patches are required to make \"xpath\" work with parse5\nimport { Element, Node } from 'domhandler'\n\nElement.prototype.toString = function() {\n\tthrow new Error('Element.toString() is not supported')\n\t// return ds(this)\n}\n\nObject.defineProperty(Node.prototype, 'nodeName', {\n\tget: function() {\n\t\treturn this.name\n\t},\n})\n\nObject.defineProperty(Node.prototype, 'localName', {\n\tget: function() {\n\t\treturn this.name\n\t},\n})\n\nconst origAttributes = Object.getOwnPropertyDescriptor(\n\tElement.prototype,\n\t'attributes'\n)?.get\n\nif(origAttributes) {\n\tObject.defineProperty(Element.prototype, 'attributes', {\n\t\tget: function(...args) {\n\n\t\t\tconst attrs = origAttributes.call(this, ...args)\n\t\t\tattrs.item = (idx: number) => {\n\t\t\t\tconst el = attrs[idx]\n\t\t\t\treturn { ...el, nodeType: 2, localName: el.name }\n\t\t\t}\n\n\t\t\treturn attrs\n\t\t},\n\t})\n} else {\n\tconsole.warn(\n\t\t'[WARN] Unable to patch DOM: Element.attributes property descriptor not found'\n\t)\n}\n\ndeclare module 'xpath' {\n\tfunction parse(expr: string): {\n\t\tselect(opts: unknown): Node[]\n\t}\n}", "// noinspection ExceptionCaughtLocallyJS\n\nimport '#src/providers/http/patch-parse5-tree.ts'\n\nimport { concatenateUint8Arrays } from '@reclaimprotocol/tls'\nimport type { Element, Node } from 'domhandler'\nimport type {\n\tExpression } from 'esprima-next'\nimport {\n\tArrayExpression,\n\tExpressionStatement,\n\tObjectExpression,\n\tparseScript,\n\tProperty,\n\tSyntax\n} from 'esprima-next'\nimport { JSONPath } from 'jsonpath-plus'\nimport { parse } from 'parse5'\nimport { adapter as htmlAdapter, } from 'parse5-htmlparser2-tree-adapter'\nimport RE2 from 're2'\nimport xpath from 'xpath'\n\nimport type { ArraySlice, CompleteTLSPacket, ProviderParams, RedactedOrHashedArraySlice, Transcript } from '#src/types/index.ts'\nimport type { HttpRequest, HttpResponse } from '#src/utils/index.ts'\nimport { getHttpRequestDataFromTranscript, isApplicationData, makeHttpResponseParser, REDACTION_CHAR_CODE } from '#src/utils/index.ts'\n\nexport type JSONIndex = {\n\tstart: number\n\tend: number\n}\n\ntype HTTPProviderParams = ProviderParams<'http'>\n\n/**\n * Returns only first extracted element\n * @param html\n * @param xpathExpression\n * @param contentsOnly\n */\nexport function extractHTMLElement(\n\thtml: string,\n\txpathExpression: string,\n\tcontentsOnly: boolean\n): string {\n\tconst { start, end } = extractHTMLElementIndex(html, xpathExpression, contentsOnly)\n\treturn html.slice(start, end)\n}\n\n/**\n * Returns all extracted elements\n * @param html\n * @param xpathExpression\n * @param contentsOnly\n */\nexport function extractHTMLElements(\n\thtml: string,\n\txpathExpression: string,\n\tcontentsOnly: boolean\n): string[] {\n\tconst indexes = extractHTMLElementsIndexes(html, xpathExpression, contentsOnly)\n\tconst res: string[] = []\n\tfor(const { start, end } of indexes) {\n\t\tres.push(html.slice(start, end))\n\t}\n\n\treturn res\n}\n\n/**\n * returns a single index of extracted element\n * @param html\n * @param xpathExpression\n * @param contentsOnly\n */\nexport function extractHTMLElementIndex(\n\thtml: string,\n\txpathExpression: string,\n\tcontentsOnly: boolean\n): { start: number, end: number } {\n\treturn extractHTMLElementsIndexes(html, xpathExpression, contentsOnly)[0]\n}\n\n/**\n * Returns indexes of all extracted elements\n * @param html\n * @param xpathExpression\n * @param contentsOnly indices of the start and end of the element's contents only,\n * \tnot the whole tag\n */\nexport function extractHTMLElementsIndexes(\n\thtml: string,\n\txpathExpression: string,\n\tcontentsOnly: boolean\n): { start: number, end: number }[] {\n\treturn extractHTMLElementIndexesParse5(html, xpathExpression, contentsOnly)\n}\n\nfunction extractHTMLElementIndexesParse5(\n\thtml: string,\n\txpathExpression: string,\n\tcontentsOnly: boolean\n) {\n\tconst domLight = parse(\n\t\thtml,\n\t\t{ treeAdapter: htmlAdapter, sourceCodeLocationInfo: true }\n\t)\n\t// lets xpath identify this as a node\n\tdomLight['name'] = 'root'\n\n\tconst parsedPath = xpath.parse(xpathExpression)\n\tconst nodes = parsedPath.select({\n\t\tnode: domLight,\n\t\tallowAnyNamespaceForNoPrefix: true,\n\t})\n\tif(!nodes.length) {\n\t\tthrow new Error(`Failed to find XPath: \"${xpathExpression}\"`)\n\t}\n\n\treturn nodes.map(node => getNodeRange(node, contentsOnly))\n}\n\nfunction getNodeRange(node: Node | Element, contentsOnly: boolean) {\n\tif(!contentsOnly) {\n\t\treturn { start: node.startIndex!, end: node.endIndex! }\n\t}\n\n\tif(!('firstChild' in node) || !node.firstChild) {\n\t\tthrow new Error(`Node \"${node['name']}\" has no children`)\n\t}\n\n\treturn {\n\t\tstart: node.firstChild.startIndex!,\n\t\tend: node.lastChild!.endIndex!\n\t}\n}\n\nexport function extractJSONValueIndex(json: string, jsonPath: string) {\n\treturn extractJSONValueIndexes(json, jsonPath)[0]\n}\n\nexport function extractJSONValueIndexes(json: string, jsonPath: string): { start: number, end: number }[] {\n\tconst pointers = JSONPath({\n\t\tpath: jsonPath,\n\t\tjson: JSON.parse(json),\n\t\twrap: false,\n\t\tresultType: 'pointer',\n\t\teval: 'safe',\n\t\t// @ts-ignore\n\t\tignoreEvalErrors: true\n\t})\n\tif(!pointers) {\n\t\tthrow new Error('jsonPath not found')\n\t}\n\n\t//wrap in parentheses for esprima to parse\n\tconst tree = parseScript('(' + json + ')', { range: true })\n\tif(tree.body[0] instanceof ExpressionStatement\n\t\t&& (tree.body[0].expression instanceof ObjectExpression || tree.body[0].expression instanceof ArrayExpression)) {\n\n\t\tconst traversePointers = Array.isArray(pointers) ? pointers : [pointers]\n\t\tconst res: { start: number, end: number }[] = []\n\t\tfor(const pointer of traversePointers) {\n\t\t\tconst index = traverse(tree.body[0].expression, '', [pointer])\n\t\t\tif(index) {\n\t\t\t\tres.push({\n\t\t\t\t\tstart: index.start - 1, //account for '('\n\t\t\t\t\tend: index.end - 1,\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\n\t\treturn res\n\t}\n\n\tthrow new Error('jsonPath not found')\n}\n\n/**\n * recursively go through AST tree and build a JSON path while it's not equal to the one we search for\n * @param o - esprima expression for root object\n * @param path - path that is being built\n * @param pointers - JSON pointers to compare to\n */\nfunction traverse(\n\to: Expression,\n\tpath: string,\n\tpointers: string[]\n): JSONIndex | null {\n\tif(o instanceof ObjectExpression) {\n\t\tfor(const p of o.properties) {\n\t\t\tif(!(p instanceof Property)) {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tconst localPath = p.key.type === Syntax.Literal\n\t\t\t\t? path + '/' + p.key.value\n\t\t\t\t: path\n\n\t\t\tif(pointers.includes(localPath) && 'range' in p && Array.isArray(p.range)) {\n\t\t\t\treturn {\n\t\t\t\t\tstart: p.range[0],\n\t\t\t\t\tend: p.range[1],\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif(\n\t\t\t\tp.value instanceof ObjectExpression\n\t\t\t\t|| p.value instanceof ArrayExpression\n\t\t\t) {\n\t\t\t\tconst res = traverse(p.value, localPath, pointers)\n\t\t\t\tif(res) {\n\t\t\t\t\treturn res\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tif(o instanceof ArrayExpression) {\n\t\tfor(let i = 0; i < o.elements.length; i++) {\n\t\t\tconst element = o.elements[i]\n\t\t\tif(!element) {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tconst localPath = path + '/' + i\n\n\t\t\tif(\n\t\t\t\tpointers.includes(localPath) &&\n 'range' in element &&\n Array.isArray(element.range)\n\t\t\t) {\n\t\t\t\treturn {\n\t\t\t\t\tstart: element.range[0],\n\t\t\t\t\tend: element.range[1],\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif(element instanceof ObjectExpression) {\n\t\t\t\tconst res = traverse(element, localPath, pointers)\n\t\t\t\tif(res) {\n\t\t\t\t\treturn res\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif(element instanceof ArrayExpression) {\n\t\t\t\tconst res = traverse(element, localPath, pointers)\n\t\t\t\tif(res) {\n\t\t\t\t\treturn res\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn null\n}\n\nexport function buildHeaders(input: HTTPProviderParams['headers']) {\n\tconst headers: string[] = []\n\n\tfor(const [key, value] of Object.entries(input || {})) {\n\t\theaders.push(`${key}: ${value}`)\n\t}\n\n\treturn headers\n}\n\n/**\n * Converts position in HTTP response body to an absolute position in TLS transcript considering chunked encoding\n * @param pos\n * @param bodyStartIdx\n * @param chunks\n */\nexport function convertResponsePosToAbsolutePos(pos: number, bodyStartIdx: number, chunks?: ArraySlice[]): number {\n\tif(chunks?.length) {\n\t\tlet chunkBodyStart = 0\n\t\tfor(const chunk of chunks) {\n\n\t\t\tconst chunkSize = chunk.toIndex - chunk.fromIndex\n\n\t\t\tif(pos >= chunkBodyStart && pos <= (chunkBodyStart + chunkSize)) {\n\t\t\t\treturn pos - chunkBodyStart + chunk.fromIndex\n\t\t\t}\n\n\t\t\tchunkBodyStart += chunkSize\n\t\t}\n\n\t\tthrow new Error('position out of range')\n\t}\n\n\treturn bodyStartIdx + pos\n}\n\n/**\n * If this reveal spans the boundary of two chunks, we'll\n *\n */\nexport function getRedactionsForChunkHeaders(\n\tfrom: number, to: number, chunks?: ArraySlice[]\n): ArraySlice[] {\n\tconst res: RedactedOrHashedArraySlice[] = []\n\tif(!chunks?.length) {\n\t\treturn res\n\t}\n\n\tfor(let i = 1; i < chunks?.length; i++) {\n\t\tconst chunk = chunks[i]\n\t\tif(chunk.fromIndex > from && chunk.fromIndex < to) {\n\t\t\tres.push({\n\t\t\t\tfromIndex: chunks[i - 1].toIndex,\n\t\t\t\ttoIndex: chunk.fromIndex,\n\t\t\t})\n\t\t}\n\t}\n\n\treturn res\n}\n\nexport function parseHttpResponse(buff: Uint8Array) {\n\tconst parser = makeHttpResponseParser()\n\tparser.onChunk(buff)\n\tparser.streamEnded()\n\treturn parser.res\n}\n\nexport function makeRegex(str: string) {\n\treturn RE2(str, 'sgiu')\n}\n\nconst TEMPLATE_START_CHARCODE = '{'.charCodeAt(0)\nconst TEMPLATE_END_CHARCODE = '}'.charCodeAt(0)\n\n/**\n * Try to match strings that contain templates like {{param}}\n * against redacted string that has *** instead of that param\n */\nexport function matchRedactedStrings(templateString: Uint8Array, redactedString?: Uint8Array): boolean {\n\n\tif(templateString.length === 0 && redactedString?.length === 0) {\n\t\treturn true\n\t}\n\n\tif(!redactedString) {\n\t\treturn false\n\t}\n\n\tlet ts = -1\n\tlet rs = -1\n\twhile(ts < templateString.length && rs < redactedString.length) {\n\t\tlet ct = getTChar()\n\t\tlet cr = getRChar()\n\t\tif(ct !== cr) {\n\t\t\t// only valid if param contains \"{\" & redacted contains \"*\"\n\t\t\tif(ct === TEMPLATE_START_CHARCODE && cr === REDACTION_CHAR_CODE) {\n\t\t\t\t//check that the char after first \"{\" is also \"{\"\n\t\t\t\tif(getTChar() !== TEMPLATE_START_CHARCODE) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\n\t\t\t\t//look for first closing bracket\n\t\t\t\twhile(((ct = getTChar()) !== TEMPLATE_END_CHARCODE) && ct !== -1) {\n\t\t\t\t}\n\n\t\t\t\t//look for second closing bracket\n\t\t\t\twhile(((ct = getTChar()) !== TEMPLATE_END_CHARCODE) && ct !== -1) {\n\t\t\t\t}\n\n\t\t\t\tif(ct === -1) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\n\t\t\t\t//find the end of redaction\n\t\t\t\twhile(((cr = getRChar()) === REDACTION_CHAR_CODE) && cr !== -1) {\n\t\t\t\t}\n\n\t\t\t\tif(cr === -1) {\n\t\t\t\t\t//if there's nothing after template too then both ended at the end of strings\n\t\t\t\t\treturn getTChar() === -1\n\t\t\t\t}\n\n\t\t\t\t//rewind redacted string position back 1 char because we read one extra\n\t\t\t\trs--\n\t\t\t} else {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\t}\n\n\n\tfunction getTChar(): number {\n\t\tts++\n\t\tif(ts < templateString.length) {\n\t\t\treturn templateString[ts]\n\t\t} else {\n\t\t\treturn -1\n\t\t}\n\t}\n\n\tfunction getRChar(): number {\n\t\tif(!redactedString) {\n\t\t\treturn -1\n\t\t}\n\n\t\trs++\n\t\tif(rs < redactedString.length) {\n\t\t\treturn redactedString[rs]\n\t\t} else {\n\t\t\treturn -1\n\t\t}\n\t}\n\n\treturn ts === templateString.length && rs === redactedString.length\n}\n\nexport function generateRequstAndResponseFromTranscript(transcript: Transcript<CompleteTLSPacket>, tlsVersion: string): { req: HttpRequest, res: HttpResponse } {\n\tconst allPackets = transcript\n\n\tconst packets: Transcript<Uint8Array> = []\n\tfor(const b of allPackets) {\n\t\tif(b.message.type !== 'ciphertext'\n\t\t\t|| !isApplicationData(b.message, tlsVersion)) {\n\t\t\tcontinue\n\t\t}\n\n\t\tconst plaintext = tlsVersion === 'TLS1_3'\n\t\t\t? b.message.plaintext.slice(0, -1)\n\t\t\t: b.message.plaintext\n\n\t\tpackets.push({\n\t\t\tmessage: plaintext,\n\t\t\tsender: b.sender\n\t\t})\n\t}\n\n\tconst req = getHttpRequestDataFromTranscript(packets)\n\n\tconst responsePackets = concatenateUint8Arrays(packets.filter(p => p.sender === 'server').map(p => p.message).filter(b => !b.every(b => b === REDACTION_CHAR_CODE)))\n\tconst res = parseHttpResponse(responsePackets)\n\n\treturn { req, res }\n}", "export function isValidProxySessionId(sessionId: string): boolean {\n\treturn typeof sessionId === 'string'\n\t\t&& sessionId.length >= 8\n\t\t&& sessionId.length < 15\n\t\t&& /^[a-z0-9]+$/.test(sessionId)\n}", "import http from '#src/providers/http/index.ts'\nimport type { Provider, ProviderName } from '#src/types/index.ts'\n\nexport const providers: {\n\t[T in ProviderName]: Provider<T>\n} = {\n\thttp,\n}", "import type { Logger } from '#src/types/index.ts'\n\ntype RetryLoopOptions = {\n\tmaxRetries?: number\n\tlogger: Logger\n\tshouldRetry: (error: Error) => boolean\n}\n\n/**\n * Execute a function, and upon failure -- retry\n * based on specified options.\n */\nexport async function executeWithRetries<T>(\n\tcode: (attempt: number) => Promise<T>,\n\t{\n\t\tmaxRetries = 3,\n\t\tshouldRetry,\n\t\tlogger,\n\t}: RetryLoopOptions\n) {\n\tlet retries = 0\n\twhile(retries < maxRetries) {\n\t\ttry {\n\t\t\tconst result = await code(retries)\n\t\t\treturn result\n\t\t} catch(err) {\n\t\t\tretries += 1\n\t\t\tif(retries >= maxRetries) {\n\t\t\t\tthrow err\n\t\t\t}\n\n\t\t\tif(!shouldRetry(err)) {\n\t\t\t\tthrow err\n\t\t\t}\n\n\t\t\tlogger.info({ err, retries }, 'retrying failed operation')\n\t\t}\n\t}\n\n\tthrow new Error('retries exhausted')\n}", "import type {\n\tCipherSuite } from '@reclaimprotocol/tls'\nimport {\n\tcrypto,\n\tencryptWrappedRecord,\n\tSUPPORTED_CIPHER_SUITE_MAP\n} from '@reclaimprotocol/tls'\nimport type { CompleteTLSPacket } from '#src/types/index.ts'\nimport { strToUint8Array } from '#src/utils/generics.ts'\nimport { logger } from '#src/utils/logger.ts'\nimport { makeZkProofGenerator } from '#src/utils/zk.ts'\n\nconst ZK_CIPHER_SUITES: CipherSuite[] = [\n\t'TLS_CHACHA20_POLY1305_SHA256',\n\t'TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384',\n\t'TLS_AES_128_GCM_SHA256'\n]\n\nexport async function benchmark() {\n\n\tlet benchmarkRes = ''\n\tfor(const cipherSuite of ZK_CIPHER_SUITES) {\n\n\t\tconst now = Date.now()\n\n\t\tconst alg = cipherSuite.includes('CHACHA20')\n\t\t\t? 'CHACHA20-POLY1305'\n\t\t\t: (\n\t\t\t\tcipherSuite.includes('AES_256_GCM')\n\t\t\t\t\t? 'AES-256-GCM'\n\t\t\t\t\t: 'AES-128-GCM'\n\t\t\t)\n\t\tconst keylength = alg === 'AES-128-GCM' ? 16 : 32\n\t\tconst key = Buffer.alloc(keylength, 0)\n\t\tconst {\n\t\t\tivLength: fixedIvLength,\n\t\t} = SUPPORTED_CIPHER_SUITE_MAP[cipherSuite]\n\t\tconst fixedIv = Buffer.alloc(fixedIvLength, 0)\n\n\t\tconst encKey = await crypto.importKey(alg, key)\n\t\tconst vectors = [\n\t\t\t{\n\t\t\t\tplaintext: 'My cool API secret is \"my name jeff\". Please don\\'t reveal it'\n\t\t\t}\n\t\t]\n\n\t\tconst proofGenerator = await makeZkProofGenerator({\n\t\t\tlogger,\n\t\t\tcipherSuite,\n\t\t})\n\t\tfor(const { plaintext } of vectors) {\n\t\t\tconst plaintextArr = strToUint8Array(plaintext)\n\n\t\t\tconst { ciphertext, iv } = await encryptWrappedRecord(\n\t\t\t\tplaintextArr,\n\t\t\t\t{\n\t\t\t\t\tkey: encKey,\n\t\t\t\t\tiv: fixedIv,\n\t\t\t\t\trecordNumber: 0,\n\t\t\t\t\trecordHeaderOpts: {\n\t\t\t\t\t\ttype: 'WRAPPED_RECORD'\n\t\t\t\t\t},\n\t\t\t\t\tcipherSuite,\n\t\t\t\t\tversion: cipherSuite.includes('ECDHE_')\n\t\t\t\t\t\t? 'TLS1_2'\n\t\t\t\t\t\t: 'TLS1_3',\n\t\t\t\t}\n\t\t\t)\n\n\t\t\tconst packet: CompleteTLSPacket = {\n\t\t\t\ttype: 'ciphertext',\n\t\t\t\tencKey,\n\t\t\t\tiv,\n\t\t\t\trecordNumber: 0,\n\t\t\t\tplaintext: plaintextArr,\n\t\t\t\tciphertext,\n\t\t\t\tfixedIv: new Uint8Array(0),\n\t\t\t\tdata: ciphertext\n\t\t\t}\n\n\t\t\tawait proofGenerator.addPacketToProve(\n\t\t\t\tpacket,\n\t\t\t\t{\n\t\t\t\t\ttype: 'zk',\n\t\t\t\t\tredactedPlaintext:plaintextArr,\n\t\t\t\t},\n\t\t\t\t() => {},\n\t\t\t\t() => {\n\t\t\t\t\tthrow new Error('should not be called in benchmark')\n\t\t\t\t}\n\t\t\t)\n\t\t\tawait proofGenerator.generateProofs()\n\n\t\t}\n\n\t\tbenchmarkRes = benchmarkRes + `Benchmark ${alg} ok. Took ${Date.now() - now} ms \\n`\n\t}\n\n\tlogger.info(benchmarkRes)\n\treturn benchmarkRes\n}\n", "type EventHandlerFn<T> = (data: T) => void\n\nexport class EventBus<T> {\n\n\t#listeners: EventHandlerFn<T>[] = []\n\n\taddListener(fn: EventHandlerFn<T>) {\n\t\tthis.#listeners.push(fn)\n\t\treturn () => {\n\t\t\tthis.#listeners = this.#listeners.filter(l => l !== fn)\n\t\t}\n\t}\n\n\tdispatch(data: T) {\n\t\tfor(const listener of this.#listeners) {\n\t\t\tlistener(data)\n\t\t}\n\t}\n}", "import { WS_PATHNAME } from '#src/config/index.ts'\nimport { EventBus } from '#src/external-rpc/event-bus.ts'\nimport type { ExternalRPCAppClient, ExternalRPCIncomingMsg, ExternalRPCOutgoingMsg, ExternalRPCRequest, ExternalRPCResponse } from '#src/external-rpc/types.ts'\nimport { B64_JSON_REPLACER } from '#src/utils/b64-json.ts'\nimport { AttestorError } from '#src/utils/error.ts'\n\nexport const RPC_MSG_BRIDGE = new EventBus<ExternalRPCIncomingMsg>()\n\n// track memory usage\nexport async function getCurrentMemoryUsage() {\n\tif(!window.crossOriginIsolated) {\n\t\treturn {\n\t\t\tavailable: false,\n\t\t\tcontent: 'N/A (page not cross-origin-isolated)'\n\t\t}\n\t} else if(!performance.measureUserAgentSpecificMemory) {\n\t\treturn {\n\t\t\tavailable: false,\n\t\t\tcontent: 'N/A (performance.measureUserAgentSpecificMemory() is not available)',\n\t\t}\n\t} else {\n\t\ttry {\n\t\t\tconst result = performance.measureUserAgentSpecificMemory()\n\t\t\tconst totalmb = Math.round(result.bytes / 1024 / 1024)\n\n\t\t\treturn { available: true, content: `${totalmb}mb` }\n\t\t} catch(error) {\n\t\t\tif(error instanceof DOMException && error.name === 'SecurityError') {\n\t\t\t\treturn { available: false, content: `N/A (${error.message})` }\n\t\t\t}\n\n\t\t\tthrow error\n\t\t}\n\t}\n}\n\nexport function generateRpcRequestId() {\n\treturn Math.random().toString(36).slice(2)\n}\n\n/**\n * The window RPC will be served from the same origin as the API server.\n * so we can get the API server's origin from the location.\n */\nexport function getWsApiUrlFromBaseUrl() {\n\tif(typeof ATTESTOR_BASE_URL !== 'string') {\n\t\tthrow new Error('ATTESTOR_BASE_URL is not set')\n\t}\n\n\tconst parsed = new URL(ATTESTOR_BASE_URL)\n\tconst { host, protocol } = parsed\n\tconst wsProtocol = protocol === 'https:' ? 'wss:' : 'ws:'\n\treturn `${wsProtocol}//${host}${WS_PATHNAME}`\n}\n\nexport function rpcRequest<T extends keyof ExternalRPCAppClient>(\n\topts: ExternalRPCRequest<ExternalRPCAppClient, T>\n): Promise<ExternalRPCResponse<ExternalRPCAppClient, T>['response']> {\n\tconst id = generateRpcRequestId()\n\tconst waitForRes = waitForResponse(opts.type, id)\n\n\t// @ts-expect-error\n\tsendMessageToApp({\n\t\tid,\n\t\ttype: opts.type,\n\t\trequest: opts.request,\n\t})\n\n\treturn waitForRes\n}\n\nexport function waitForResponse<T extends keyof ExternalRPCAppClient>(\n\ttype: T,\n\trequestId: string,\n\ttimeoutMs = 60_000\n) {\n\ttype R = Awaited<ReturnType<ExternalRPCAppClient[T]>>\n\tconst returnType = `${type}Done` as const\n\treturn new Promise<R>((resolve, reject) => {\n\t\tconst timeout = setTimeout(() => {\n\t\t\treject(\n\t\t\t\tnew AttestorError(\n\t\t\t\t\t'ERROR_INTERNAL',\n\t\t\t\t\t`Timeout waiting for response: ${type}`,\n\t\t\t\t\t{ requestId }\n\t\t\t\t)\n\t\t\t)\n\t\t\tcancel()\n\t\t}, timeoutMs)\n\n\t\tconst cancel = RPC_MSG_BRIDGE.addListener(msg => {\n\t\t\tif(msg.id !== requestId) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tif(msg.type === 'error') {\n\t\t\t\treject(new Error(msg.data.message))\n\t\t\t} else if(msg.type === returnType) {\n\t\t\t\tresolve(msg.response as R)\n\t\t\t} else {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tclearTimeout(timeout)\n\t\t\tcancel()\n\t\t})\n\t})\n}\n\n/**\n * Sends a message back to the host app\n * @param data\n */\nexport function sendMessageToApp(data: ExternalRPCOutgoingMsg) {\n\tconst str = JSON.stringify(data, B64_JSON_REPLACER)\n\tif(!RPC_CHANNEL_NAME) {\n\t\tthrow new Error('global RPC_CHANNEL_NAME is not set')\n\t}\n\n\tconst channel = globalThis[RPC_CHANNEL_NAME] as AttestorRPCChannel\n\tif(!channel) {\n\t\tthrow new Error(`RPC channel ${RPC_CHANNEL_NAME} not set on globalThis`)\n\t}\n\n\tchannel.postMessage(str)\n}", "import type { EncryptionAlgorithm, OPRFOperator, ZKEngine, ZKOperator } from '@reclaimprotocol/zk-symmetric-crypto'\n\nimport type { ExecuteOPRFOpts, ExecuteZKOpts } from '#src/external-rpc/types.ts'\nimport { rpcRequest } from '#src/external-rpc/utils.ts'\nimport { logger, makeDefaultZkOperator } from '#src/utils/index.ts'\n\nexport const ALL_ENC_ALGORITHMS: EncryptionAlgorithm[] = [\n\t'aes-256-ctr',\n\t'aes-128-ctr',\n\t'chacha20',\n]\n\n/**\n * The goal of this RPC operator is if the attestor client\n * is running in a WebView, it can call the native\n * application to perform the ZK operations\n */\nexport function makeExternalRpcZkOperator(\n\talgorithm: EncryptionAlgorithm,\n\tzkEngine: ZKEngine = 'snarkjs'\n): ZKOperator {\n\treturn {\n\t\tasync generateWitness(input) {\n\t\t\tconst operator = await makeDefaultZkOperator(algorithm, zkEngine, logger)\n\t\t\treturn operator.generateWitness(input)\n\t\t},\n\t\tgroth16Prove(input) {\n\t\t\treturn callFnZk({ fn: 'groth16Prove', args: [input] })\n\t\t},\n\t\tgroth16Verify(publicSignals, proof) {\n\t\t\treturn callFnZk({ fn: 'groth16Verify', args: [publicSignals, proof] })\n\t\t},\n\t}\n}\n\n\nfunction callFnZk(request: ExecuteZKOpts) {\n\treturn rpcRequest({ type: 'executeZkFunctionV3', request })\n}\n\n\n/**\n * The goal of this RPC operator is if the attestor client\n * is running in a WebView, it can call the native\n * application to perform the OPRF operations\n */\nexport function makeExternalRpcOprfOperator(\n\talgorithm: EncryptionAlgorithm,\n\tzkEngine: ZKEngine = 'snarkjs'\n): OPRFOperator {\n\treturn {\n\t\tasync generateWitness(input) {\n\t\t\tconst operator = await makeDefaultZkOperator(algorithm, zkEngine, logger)\n\t\t\treturn operator.generateWitness(input)\n\t\t},\n\t\tgroth16Prove(input) {\n\t\t\treturn callFnOprf({ fn: 'groth16Prove', args: [input] })\n\t\t},\n\t\tgroth16Verify(publicSignals, proof) {\n\t\t\treturn callFnOprf({ fn: 'groth16Verify', args: [publicSignals, proof] })\n\t\t},\n\t\tgenerateThresholdKeys(total, threshold) {\n\t\t\treturn callFnOprf({ fn: 'generateThresholdKeys', args: [total, threshold] })\n\t\t},\n\t\tgenerateOPRFRequestData(data, domainSeparator) {\n\t\t\treturn callFnOprf({ fn: 'generateOPRFRequestData', args: [data, domainSeparator] })\n\t\t},\n\t\tfinaliseOPRF(serverPublicKey, request, responses) {\n\t\t\treturn callFnOprf({ fn: 'finaliseOPRF', args: [serverPublicKey, request, responses] })\n\t\t},\n\t\tevaluateOPRF(serverPrivateKey, request) {\n\t\t\treturn callFnOprf({ fn: 'evaluateOPRF', args: [serverPrivateKey, request] })\n\t\t},\n\t}\n}\n\nfunction callFnOprf(request: ExecuteOPRFOpts) {\n\treturn rpcRequest({ type: 'executeOprfFunctionV3', request })\n}", "import { createClaimOnAttestor as _createClaimOnAttestor, getAttestorClientFromPool } from '#src/client/index.ts'\nimport { AttestorClient } from '#src/client/index.ts'\nimport type { CreateClaimOnMechainOpts } from '#src/mechain/types/index.ts'\nimport type { ClaimTunnelResponse } from '#src/proto/api.ts'\nimport type { ProviderName } from '#src/types/index.ts'\n\n/**\n * Creates a Reclaim claim on the AVS chain.\n */\nexport async function createClaimOnMechain<N extends ProviderName>({\n\tcreateClaimOnAttestor = _createClaimOnAttestor,\n\tonStep,\n\tclient,\n\t...opts\n}: CreateClaimOnMechainOpts<N>) {\n\n\n\tconst clientMechain = getAttestorClientFromPool(client.url)\n\n\tconst timestamp = Math.floor(Date.now() / 1000)\n\n\tawait clientMechain.waitForInit()\n\n\tonStep?.({ type: 'taskRequested', timestamp })\n\n\tconst { taskId, requiredAttestors, hosts } = await clientMechain.rpc('createTaskOnMechain', {\n\t\ttimestamp: timestamp\n\t})\n\n\tonStep?.({ type: 'taskCreated', taskId })\n\n\tconst responses: ClaimTunnelResponse [] = []\n\n\tfor(let i = 0; i < requiredAttestors; i++) {\n\n\t\tonStep?.({ type: 'attestorRequested', host: hosts[i] })\n\n\t\tconst client = new AttestorClient({\n\t\t\turl: hosts[i]\n\t\t})\n\n\t\tconst claimTunnelRes = await createClaimOnAttestor ({\n\t\t\t...opts,\n\t\t\tclient\n\t\t})\n\n\t\tresponses.push(claimTunnelRes)\n\t}\n\n\treturn { taskId, responses }\n\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["hexlify", "EventLog", "hexlify", "Wallet", "Contract", "Contract", "asciiToUint8Array", "concatenateUint8Arrays", "level", "REDACTION_CHAR_CODE", "REDACTION_CHAR_CODE", "redact", "concatenateUint8Arrays", "concatenateUint8Arrays", "REDACTION_CHAR_CODE", "concatenateUint8Arrays", "crypto", "logger", "crypto", "REDACTION_CHAR_CODE", "iv", "logger", "REDACTION_CHAR_CODE", "concatenateUint8Arrays", "crypto", "crypto", "concatenateUint8Arrays", "getBytes", "Wallet", "getBytes", "logger", "concatenateUint8Arrays", "err", "encodeBase64", "rpcRequest", "logger", "err", "logger", "makeWebSocket", "encodeBase64", "areUint8ArraysEqual", "concatenateUint8Arrays", "uint8ArrayToBinaryStr", "encodeBase64", "ElementType", "Text", "Comment", "CDATA", "isTag", "Text", "Comment", "isTag", "CDATA", "concatenateUint8Arrays", "REDACTION_CHAR_CODE", "concatenateUint8Arrays", "b", "logger", "concatenateUint8Arrays", "encodeBase64", "areUint8ArraysEqual", "uint8ArrayToBinaryStr", "b", "REDACTION_CHAR_CODE", "matchRes", "value", "ignoreMissingParams", "extractedValues", "shouldRetry", "logger", "logger", "updateProviderParams", "asciiToUint8Array", "result", "block", "getAddress", "hexlify", "createClaimOnAttestor", "logger", "Wallet", "rslt", "EventLog", "crypto", "SUPPORTED_CIPHER_SUITE_MAP", "ZK_CIPHER_SUITES", "SUPPORTED_CIPHER_SUITE_MAP", "crypto", "createClaimOnAttestor", "client", "data", "hexlify"]
|
|
7
|
+
}
|