@reclaimprotocol/js-sdk 1.3.6 → 1.3.7

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/dist/index.d.ts CHANGED
@@ -198,7 +198,7 @@ declare class Reclaim {
198
198
  getStatusUrl(): StatusUrl;
199
199
  getRequestedProofs(): RequestedProofs;
200
200
  generateSignature(applicationSecret: string): Promise<Signature>;
201
- buildProofRequest(providerId: string): Promise<RequestedProofs>;
201
+ buildProofRequest(providerId: string, redirectUser?: boolean): Promise<RequestedProofs>;
202
202
  createVerificationRequest(): Promise<{
203
203
  statusUrl: StatusUrl;
204
204
  requestUrl: string;
package/dist/index.js CHANGED
@@ -978,7 +978,7 @@ function validateProviderIdsAndReturnProviders(providerId, providers) {
978
978
  }
979
979
  return providers.find((provider) => providerId == provider.httpProviderId);
980
980
  }
981
- function generateRequestedProofs(provider, context, callbackUrl, statusUrl, sessionId) {
981
+ function generateRequestedProofs(provider, context, callbackUrl, statusUrl, sessionId, redirectUser) {
982
982
  const providerParams = {};
983
983
  provider.responseSelections.forEach((rs) => rs.responseMatch.split(/{{(.*?)}}/).filter((e, i) => i % 2).forEach((param) => providerParams[param] = void 0));
984
984
  const claims = [{
@@ -1012,7 +1012,7 @@ function generateRequestedProofs(provider, context, callbackUrl, statusUrl, sess
1012
1012
  return {
1013
1013
  id: sessionId,
1014
1014
  sessionId,
1015
- name: "web-SDK",
1015
+ name: redirectUser ? "web-r-SDK" : "web-SDK",
1016
1016
  callbackUrl,
1017
1017
  statusUrl,
1018
1018
  claims
@@ -1199,7 +1199,7 @@ _Reclaim.ProofRequest = class {
1199
1199
  }
1200
1200
  });
1201
1201
  }
1202
- buildProofRequest(providerId) {
1202
+ buildProofRequest(providerId, redirectUser = false) {
1203
1203
  return __async(this, null, function* () {
1204
1204
  let providers = yield fetchProvidersByAppId(this.applicationId, providerId);
1205
1205
  const provider = validateProviderIdsAndReturnProviders(
@@ -1213,7 +1213,8 @@ _Reclaim.ProofRequest = class {
1213
1213
  this.context,
1214
1214
  this.getAppCallbackUrl(),
1215
1215
  this.getStatusUrl(),
1216
- this.sessionId
1216
+ this.sessionId,
1217
+ redirectUser
1217
1218
  );
1218
1219
  return this.requestedProofs;
1219
1220
  } catch (err) {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/witness.ts","../src/Reclaim.ts","../src/utils.ts","../src/contract-types/contracts/factories/Reclaim__factory.ts","../src/contract-types/config.json","../src/smart-contract.ts","../src/constants.ts","../src/errors.ts"],"sourcesContent":["export * from './Reclaim';\nexport * from './interfaces';","import { ethers } from 'ethers';\nimport type { WitnessData } from './interfaces';\nimport type { ClaimID, ClaimInfo, CompleteClaimData } from './types';\n\ntype BeaconState = {\n witnesses: WitnessData[];\n epoch: number;\n witnessesRequiredForClaim: number;\n nextEpochTimestampS: number;\n};\n\nexport function fetchWitnessListForClaim(\n { witnesses, witnessesRequiredForClaim, epoch }: BeaconState,\n params: string | ClaimInfo,\n timestampS: number\n) {\n const identifier =\n typeof params === 'string' ? params : getIdentifierFromClaimInfo(params);\n const completeInput = [\n identifier,\n epoch.toString(),\n witnessesRequiredForClaim.toString(),\n timestampS.toString(),\n ].join('\\n');\n const completeHashStr = ethers.keccak256(strToUint8Array(completeInput));\n const completeHash = ethers.getBytes(completeHashStr);\n const completeHashView = uint8ArrayToDataView(completeHash);\n const witnessesLeft = [...witnesses];\n const selectedWitnesses: WitnessData[] = [];\n // we'll use 32 bits of the hash to select\n // each witness\n let byteOffset = 0;\n for (let i = 0; i < witnessesRequiredForClaim; i++) {\n const randomSeed = completeHashView.getUint32(byteOffset);\n const witnessIndex = randomSeed % witnessesLeft.length;\n const witness = witnessesLeft[witnessIndex] as WitnessData;\n selectedWitnesses.push(witness);\n\n // Remove the selected witness from the list of witnesses left\n witnessesLeft[witnessIndex] = witnessesLeft[\n witnessesLeft.length - 1\n ] as WitnessData;\n witnessesLeft.pop();\n byteOffset = (byteOffset + 4) % completeHash.length;\n }\n\n return selectedWitnesses;\n}\n\nexport function getIdentifierFromClaimInfo(info: ClaimInfo): ClaimID {\n const str = `${info.provider}\\n${info.parameters}\\n${info.context || ''}`;\n return ethers.keccak256(strToUint8Array(str)).toLowerCase();\n}\n\nexport function strToUint8Array(str: string) {\n return new TextEncoder().encode(str);\n}\n\nexport function uint8ArrayToDataView(arr: Uint8Array) {\n return new DataView(arr.buffer, arr.byteOffset, arr.byteLength);\n}\n\nexport function createSignDataForClaim(data: CompleteClaimData) {\n const identifier =\n 'identifier' in data ? data.identifier : getIdentifierFromClaimInfo(data);\n const lines = [\n identifier,\n data.owner.toLowerCase(),\n data.timestampS.toString(),\n data.epoch.toString(),\n ];\n\n return lines.join('\\n');\n}\n","import type { Proof, RequestedProofs, Context } from './interfaces'\nimport { getIdentifierFromClaimInfo } from './witness'\nimport type {\n AppCallbackUrl,\n ApplicationId,\n NoReturn,\n OnFailureCallback,\n SessionId,\n Signature,\n SignedClaim,\n StatusUrl,\n ProofRequestOptions,\n StartSessionParams\n} from './types'\nimport { SessionStatus } from './types'\nimport { v4 } from 'uuid'\nimport { ethers } from 'ethers'\nimport canonicalize from 'canonicalize'\nimport {\n getWitnessesForClaim,\n assertValidSignedClaim,\n getShortenedUrl,\n fetchProvidersByAppId,\n generateRequestedProofs,\n validateProviderIdsAndReturnProviders,\n validateSignature,\n replaceAll,\n validateURL,\n updateSession,\n createSession,\n validateNotNullOrUndefined,\n validateNonEmptyString\n} from './utils'\nimport { constants } from './constants'\nimport P from 'pino'\nimport {\n BuildProofRequestError,\n InvalidParamError,\n ProofNotVerifiedError,\n ProviderFailedError,\n SessionNotStartedError,\n SignatureNotFoundError,\n TimeoutError\n} from './errors'\n\nconst logger = P()\n\nexport class Reclaim {\n static async verifySignedProof(proof: Proof) {\n if (!proof.signatures.length) {\n throw new Error('No signatures')\n }\n const witnesses = await getWitnessesForClaim(\n proof.claimData.epoch,\n proof.identifier,\n proof.claimData.timestampS\n )\n\n try {\n // then hash the claim info with the encoded ctx to get the identifier\n const calculatedIdentifier = getIdentifierFromClaimInfo({\n parameters: JSON.parse(\n canonicalize(proof.claimData.parameters) as string\n ),\n provider: proof.claimData.provider,\n context: proof.claimData.context\n })\n proof.identifier = replaceAll(proof.identifier, '\"', '')\n // check if the identifier matches the one in the proof\n if (calculatedIdentifier !== proof.identifier) {\n throw new ProofNotVerifiedError('Identifier Mismatch')\n }\n\n const signedClaim: SignedClaim = {\n claim: {\n ...proof.claimData\n },\n signatures: proof.signatures.map(signature => {\n return ethers.getBytes(signature)\n })\n }\n\n // verify the witness signature\n assertValidSignedClaim(signedClaim, witnesses)\n } catch (e: Error | unknown) {\n logger.error(e)\n return false\n }\n\n return true\n }\n static transformForOnchain(proof: Proof) {\n const claimInfoBuilder = new Map([\n ['context', proof.claimData.context],\n ['parameters', proof.claimData.parameters],\n ['provider', proof.claimData.provider],\n ]);\n const claimInfo = Object.fromEntries(claimInfoBuilder);\n const claimBuilder = new Map<string, number | string>([\n ['epoch', proof.claimData.epoch],\n ['identifier', proof.claimData.identifier],\n ['owner', proof.claimData.owner],\n ['timestampS', proof.claimData.timestampS],\n ]);\n const signedClaim = {\n claim: Object.fromEntries(claimBuilder),\n signatures: proof.signatures,\n };\n return { claimInfo, signedClaim };\n }\n static verifyProvider(proof: Proof, providerHash: string): boolean {\n try {\n validateNotNullOrUndefined(providerHash, 'applicationId', 'verifyProvider function')\n validateNotNullOrUndefined(proof, 'proof', 'verifyProvider function')\n\n validateNonEmptyString(providerHash, 'applicationId', 'verifyProvider function')\n validateNonEmptyString(proof.claimData.context, 'context', 'verifyProvider function')\n\n const jsonContext = JSON.parse(proof.claimData.context)\n if (!jsonContext.providerHash) {\n logger.info(`ProviderHash is not included in proof's context`)\n return false\n }\n if (providerHash !== jsonContext.providerHash) {\n logger.info(`ProviderHash in context: ${jsonContext.providerHash} does not match the stored providerHash: ${providerHash}`)\n return false\n }\n return true\n } catch (e: Error | unknown) {\n logger.error(e)\n return false\n }\n }\n static ProofRequest = class {\n applicationId: ApplicationId\n signature?: Signature\n appCallbackUrl?: AppCallbackUrl\n sessionId: SessionId\n statusUrl?: StatusUrl\n context: Context = { contextAddress: '0x0', contextMessage: '' }\n requestedProofs?: RequestedProofs\n providerId?: string\n intervals: Map<string, NodeJS.Timer> = new Map()\n\n constructor(applicationId: string, options?: ProofRequestOptions) {\n validateNotNullOrUndefined(applicationId, 'applicationId', 'the constructor')\n validateNonEmptyString(applicationId, 'applicationId', 'the constructor')\n if (options?.sessionId) {\n validateNonEmptyString(options?.sessionId, 'sessionId', 'the constructor')\n }\n\n this.applicationId = applicationId\n this.sessionId = options?.sessionId || v4().toString()\n logger.level = options?.log ? 'info' : 'silent'\n logger.info(\n `Initializing client with applicationId: ${this.applicationId} and sessionId: ${this.sessionId}`\n )\n }\n\n addContext(address: string, message: string): NoReturn {\n validateNotNullOrUndefined(address, 'address', 'addContext')\n validateNotNullOrUndefined(message, 'message', 'addContext')\n this.context = { contextAddress: address, contextMessage: message }\n }\n\n setAppCallbackUrl(url: string): NoReturn {\n validateURL(url, 'setAppCallbackUrl')\n const urlObj = new URL(url)\n urlObj.searchParams.append('callbackId', this.sessionId)\n this.appCallbackUrl = urlObj.toString()\n }\n\n setStatusUrl(url: string): NoReturn {\n validateURL(url, 'setStatusUrl')\n this.statusUrl = url\n }\n\n setSignature(signature: Signature): NoReturn {\n validateNotNullOrUndefined(signature, 'signature', 'setSignature')\n validateNonEmptyString(signature, 'signature', 'setSignature')\n this.signature = signature\n }\n\n getAppCallbackUrl(): AppCallbackUrl {\n return (\n this.appCallbackUrl ||\n `${constants.DEFAULT_RECLAIM_CALLBACK_URL}${this.sessionId}`\n )\n }\n\n getStatusUrl(): StatusUrl {\n return (\n this.statusUrl ||\n `${constants.DEFAULT_RECLAIM_STATUS_URL}${this.sessionId}`\n )\n }\n\n getRequestedProofs(): RequestedProofs {\n try {\n if (!this.requestedProofs) {\n throw new BuildProofRequestError(\n 'Call buildProofRequest(providerId: string) first!'\n )\n }\n return this.requestedProofs!\n } catch (err) {\n throw err\n }\n }\n\n async generateSignature(applicationSecret: string): Promise<Signature> {\n try {\n const wallet = new ethers.Wallet(applicationSecret)\n const signature: Signature = (await wallet.signMessage(\n ethers.getBytes(\n ethers.keccak256(\n new TextEncoder().encode(\n canonicalize(this.getRequestedProofs())!\n )\n )\n )\n )) as unknown as Signature\n\n return signature\n } catch (err) {\n logger.error(err)\n throw new BuildProofRequestError(\n 'Error generating signature for applicationSecret: ' +\n applicationSecret\n )\n }\n }\n\n async buildProofRequest(providerId: string): Promise<RequestedProofs> {\n let providers = await fetchProvidersByAppId(this.applicationId, providerId)\n const provider = validateProviderIdsAndReturnProviders(\n providerId,\n providers\n )\n try {\n this.providerId = providerId\n this.requestedProofs = generateRequestedProofs(\n provider,\n this.context,\n this.getAppCallbackUrl(),\n this.getStatusUrl(),\n this.sessionId\n )\n return this.requestedProofs\n } catch (err: Error | unknown) {\n logger.error(err)\n throw new BuildProofRequestError(\n 'Something went wrong while generating proof request'\n )\n }\n }\n\n async createVerificationRequest(): Promise<{\n statusUrl: StatusUrl\n requestUrl: string\n }> {\n try {\n const requestedProofs = await this.getRequestedProofs()\n\n if (!requestedProofs) {\n throw new BuildProofRequestError(\n 'Requested proofs are not built yet. Call buildProofRequest(providerId: string) first!'\n )\n }\n\n if (!this.signature) {\n throw new SignatureNotFoundError(\n 'Signature is not set. Use reclaim.setSignature(signature) to set the signature'\n )\n }\n\n validateSignature(requestedProofs, this.signature, this.applicationId)\n\n const templateData = {\n ...requestedProofs,\n signature: this.signature\n }\n \n let template = encodeURIComponent(\n JSON.stringify(templateData)\n )\n\n template = replaceAll(template, '(', '%28')\n template = replaceAll(template, ')', '%29')\n\n const options = {\n method: 'POST',\n headers: {accept: 'application/json', 'content-type': 'application/json'},\n body: JSON.stringify({\n template: template,\n })\n };\n \n const response = await fetch(constants.RECLAIM_GET_BRANCH_URL, options)\n if(response.status!== 200) {\n throw new Error(\n 'Error creating verification request - Branch Link not created'\n )\n }\n const data = await response.json()\n const link = data?.branchUrl\n if(!link){\n throw new Error(\n 'Error creating verification request - Branch Link not created'\n )\n }\n await createSession(this.sessionId, this.applicationId, this.providerId!)\n return { requestUrl: link, statusUrl: this.getStatusUrl() }\n } catch (error) {\n logger.error('Error creating verification request:', error)\n throw error\n }\n }\n\n async startSession({\n onSuccessCallback,\n onFailureCallback\n }: StartSessionParams) {\n const statusUrl = this.getStatusUrl()\n if (statusUrl && this.sessionId) {\n logger.info('Starting session')\n try {\n await updateSession(this.sessionId, SessionStatus.SDK_STARTED)\n } catch (e) {\n logger.error(e)\n }\n const interval = setInterval(async () => {\n try {\n const res = await fetch(statusUrl)\n const data = await res.json()\n\n if (!data.session) return\n if (data.session.status === SessionStatus.FAILED) throw new ProviderFailedError()\n if (data.session.proofs.length === 0) return\n\n const proof = data.session.proofs[0]\n const verified = await Reclaim.verifySignedProof(proof)\n if (!verified) {\n throw new ProofNotVerifiedError()\n }\n if (onSuccessCallback) {\n try {\n await updateSession(this.sessionId, SessionStatus.SDK_RECEIVED)\n } catch (e) {\n logger.error(e)\n }\n onSuccessCallback(data.session.proofs)\n }\n clearInterval(this.intervals.get(this.sessionId!))\n this.intervals.delete(this.sessionId!)\n } catch (e) {\n if (!(e instanceof ProviderFailedError)) {\n try {\n await updateSession(this.sessionId, SessionStatus.FAILED)\n } catch (e) {\n logger.error(e)\n }\n }\n if (onFailureCallback) {\n onFailureCallback(e as Error)\n }\n clearInterval(this.intervals.get(this.sessionId!))\n this.intervals.delete(this.sessionId!)\n }\n }, 3000)\n\n this.intervals.set(this.sessionId, interval)\n this.scheduleIntervalEndingTask(onFailureCallback)\n } else {\n const message =\n \"Session can't be started due to undefined value of statusUrl and sessionId\"\n logger.error(message)\n throw new SessionNotStartedError(message)\n }\n }\n\n scheduleIntervalEndingTask(onFailureCallback: OnFailureCallback) {\n setTimeout(async () => {\n if (this.intervals.has(this.sessionId)) {\n const message = 'Interval ended without receiveing proofs'\n await updateSession(this.sessionId, SessionStatus.FAILED)\n onFailureCallback(new TimeoutError(message))\n logger.warn(message)\n clearInterval(this.intervals.get(this.sessionId!))\n }\n }, 1000 * 60 * 10)\n }\n\n availableParams(): string[] {\n const requestedProofs = this.getRequestedProofs();\n\n if (!requestedProofs || !this.requestedProofs) {\n throw new BuildProofRequestError(\n 'Requested proofs are not built yet. Call buildProofRequest(providerId: string) first!'\n );\n }\n let availableParamsStore = Object.keys(requestedProofs.claims[0].payload.parameters)\n availableParamsStore = availableParamsStore.concat(requestedProofs.claims[0].payload.url\n .split(/{{(.*?)}}/)\n .filter((_: string, i: number) => i % 2))\n availableParamsStore = availableParamsStore.concat(requestedProofs.claims[0].payload.login.url\n .split(/{{(.*?)}}/)\n .filter((_: string, i: number) => i % 2))\n \n return [...new Set(availableParamsStore)];\n }\n\n setParams(params: { [key: string]: string }): NoReturn {\n try {\n const requestedProofs = this.getRequestedProofs();\n\n if (!requestedProofs || !this.requestedProofs) {\n throw new BuildProofRequestError(\n 'Requested proofs are not built yet. Call buildProofRequest(providerId: string) first!'\n );\n }\n const availableParams = this.availableParams()\n const paramsToSet = Object.keys(params)\n for (let i = 0; i < paramsToSet.length; i++) {\n if (!availableParams.includes(paramsToSet[i])) {\n throw new InvalidParamError(\n `Cannot Set parameter ${paramsToSet[i]} for provider ${this.providerId} available Prameters inculde : ${availableParams}`\n );\n }\n }\n this.requestedProofs.claims[0].payload.parameters = { ...requestedProofs.claims[0].payload.parameters, ...params }\n\n } catch (error) {\n logger.error('Error Setting Params:', error);\n throw error;\n }\n }\n }\n}\n","import URL from 'url-parse'\nimport type { ApplicationId, ParsedURL, SignedClaim, Signature, SessionStatus } from './types'\nimport type { Context, ProviderV2, RequestedClaim, RequestedProofs, WitnessData } from './interfaces'\nimport { ethers } from 'ethers'\nimport { makeBeacon } from './smart-contract'\nimport { fetchWitnessListForClaim, createSignDataForClaim } from './witness'\nimport canonicalize from 'canonicalize'\nimport { BACKEND_BASE_URL, constants } from './constants'\nimport { ApplicationError, CreateSessionError, InvalidParamError, InvalidSignatureError, ProofNotVerifiedError, ProviderAPIError, UpdateSessionError } from './errors'\n\n/*\n Params validations utils\n*/\nexport function validateNotNullOrUndefined(input: any, paramName: string, functionName: string) {\n if (input == null) {\n throw new InvalidParamError(`${paramName} passed to ${functionName} must not be null or undefined.`);\n }\n}\n\nexport function validateNonEmptyString(input: string, paramName: string, functionName: string) {\n if (typeof input !== 'string') {\n throw new InvalidParamError(`${paramName} passed to ${functionName} must be a string.`);\n }\n if (input.trim() === \"\") {\n throw new InvalidParamError(`${paramName} passed to ${functionName} must be a non-empty string.`);\n }\n}\n\n/*\n URL utils\n*/\nexport function parse(url: string): ParsedURL {\n validateURL(url, 'parse')\n\n const parsed = URL(url, /* parseQueryString */ true)\n\n for (const param in parsed.query) {\n parsed.query[param] = decodeURIComponent(parsed.query[param]!)\n }\n const queryParams = parsed.query\n\n let path = parsed.pathname || null\n let hostname = parsed.hostname || null\n let scheme = parsed.protocol || null\n\n if (scheme) {\n // Remove colon at end\n scheme = scheme.substring(0, scheme.length - 1)\n }\n\n return {\n hostname,\n path,\n queryParams,\n scheme\n }\n}\n\nexport function validateURL(url: string, functionName: string): void {\n validateNotNullOrUndefined(url, 'url', functionName)\n validateNonEmptyString(url, 'url', functionName)\n try {\n new URL(url);\n } catch (e) {\n throw new InvalidParamError(`Invalid URL format passed to ${functionName}.`);\n }\n}\n\n/*\n Witness Utils\n*/\n\nexport async function getWitnessesForClaim(\n epoch: number,\n identifier: string,\n timestampS: number\n) {\n const beacon = makeBeacon()\n if (!beacon) throw new Error('No beacon')\n const state = await beacon.getState(epoch)\n const witnessList = fetchWitnessListForClaim(state, identifier, timestampS)\n return witnessList.map((w: WitnessData) => w.id.toLowerCase())\n}\n\n/*\n Proof Utils\n*/\n\n/** recovers the addresses of those that signed the claim */\nexport function recoverSignersOfSignedClaim({\n claim,\n signatures\n}: SignedClaim) {\n const dataStr = createSignDataForClaim({ ...claim })\n return signatures.map(signature =>\n ethers.verifyMessage(dataStr, ethers.hexlify(signature)).toLowerCase()\n )\n}\n\n/**\n * Asserts that the claim is signed by the expected witnesses\n * @param claim\n * @param expectedWitnessAddresses\n */\nexport function assertValidSignedClaim(\n claim: SignedClaim,\n expectedWitnessAddresses: string[]\n) {\n const witnessAddresses = recoverSignersOfSignedClaim(claim)\n // set of witnesses whose signatures we've not seen\n const witnessesNotSeen = new Set(expectedWitnessAddresses)\n for (const witness of witnessAddresses) {\n if (witnessesNotSeen.has(witness)) {\n witnessesNotSeen.delete(witness)\n }\n }\n\n // check if all witnesses have signed\n if (witnessesNotSeen.size > 0) {\n throw new ProofNotVerifiedError(\n `Missing signatures from ${expectedWitnessAddresses.join(', ')}`\n )\n }\n}\n\nexport async function getShortenedUrl(url: string) {\n try {\n validateURL(url, 'getShortenedUrl')\n const response = await fetch(BACKEND_BASE_URL + '/api/sdk/shortener', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n fullUrl: url\n })\n })\n const res = await response.json()\n const shortenedVerificationUrl = res.result.shortUrl\n return shortenedVerificationUrl\n } catch (err) {\n return url\n }\n}\n\nexport async function createSession(sessionId: string, appId: string, providerId: string) {\n validateNotNullOrUndefined(sessionId, 'sessionId', 'createSession')\n validateNotNullOrUndefined(appId, 'appId', 'createSession')\n validateNotNullOrUndefined(providerId, 'providerId', 'createSession')\n validateNonEmptyString(sessionId, 'sessionId', 'createSession')\n validateNonEmptyString(appId, 'appId', 'createSession')\n validateNonEmptyString(providerId, 'providerId', 'createSession')\n try {\n const response = await fetch(BACKEND_BASE_URL + '/api/sdk/create-session/', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n sessionId,\n appId,\n providerId\n })\n })\n if (!response.ok) {\n throw new CreateSessionError('Error creating session with sessionId: ' + sessionId)\n }\n const res = await response.json()\n return res\n } catch (err) {\n throw new CreateSessionError('Error creating session with sessionId: ' + sessionId)\n }\n}\n\nexport async function updateSession(sessionId: string, status: SessionStatus) {\n validateNotNullOrUndefined(sessionId, 'sessionId', 'updateSession')\n validateNonEmptyString(sessionId, 'sessionId', 'updateSession')\n try {\n const response = await fetch(BACKEND_BASE_URL + '/api/sdk/update-session/', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n sessionId,\n status\n })\n })\n if (!response.ok) {\n throw new UpdateSessionError('Error updating session with sessionId: ' + sessionId)\n }\n const res = await response.json()\n return res\n } catch (err) {\n throw new UpdateSessionError('Error updating session with sessionId: ' + sessionId)\n }\n}\n\nexport async function fetchProvidersByAppId(appId: string, providerId: string) {\n try {\n const response = await fetch(`${constants.GET_PROVIDERS_BY_ID_API}/${appId}/provider/${providerId}`)\n if (response.status === 404) {\n throw new ApplicationError('Application not found with AppId: ' + appId)\n }\n if (response.status !== 200) {\n throw new Error()\n }\n\n const res = await response.json()\n return res.providers.httpProvider\n } catch (err) {\n if (err instanceof ApplicationError) {\n throw err\n }\n throw new ProviderAPIError('Error fetching provider with AppId: ' + appId)\n }\n}\n\nexport function validateProviderIdsAndReturnProviders(providerId: string, providers: ProviderV2[]): ProviderV2 {\n let providerExists = providers.some(provider => providerId == provider.httpProviderId)\n if (!providerExists) {\n throw new ProviderAPIError(`The following provider Id is not included in your application => ${providerId}`)\n }\n return providers.find(provider => providerId == provider.httpProviderId) as ProviderV2\n}\n\nexport function generateRequestedProofs(provider: ProviderV2, context: Context, callbackUrl: string, statusUrl: string, sessionId: string): RequestedProofs {\n const providerParams: { [key: string]: string | undefined } = {}\n provider.responseSelections.forEach(rs => rs.responseMatch.split(/{{(.*?)}}/).filter((e, i) => i % 2).forEach(param => providerParams[param] = undefined))\n const claims = [{\n provider: encodeURIComponent(provider.name),\n context: JSON.stringify(context),\n httpProviderId: provider.httpProviderId,\n payload: {\n metadata: {\n name: encodeURIComponent(provider.name),\n logoUrl: provider.logoUrl,\n proofCardText: provider.proofCardText,\n proofCardTitle: provider.proofCardTitle,\n },\n url: provider.url,\n urlType: provider.urlType as \"CONSTANT\" | \"REGEX\",\n method: provider.method as \"GET\" | \"POST\",\n login: {\n url: provider.loginUrl\n },\n responseSelections: provider.responseSelections,\n customInjection: provider.customInjection,\n bodySniff: provider.bodySniff,\n userAgent: provider.userAgent,\n geoLocation: provider.geoLocation,\n matchType: provider.matchType,\n injectionType: provider.injectionType,\n disableRequestReplay: provider.disableRequestReplay,\n parameters: providerParams\n }\n }] as RequestedClaim[];\n\n\n return {\n id: sessionId,\n sessionId: sessionId,\n name: 'web-SDK',\n callbackUrl: callbackUrl,\n statusUrl: statusUrl,\n claims: claims\n };\n}\n\nexport function validateSignature(requestedProofs: RequestedProofs, signature: Signature, applicationId: ApplicationId) {\n try {\n const appId = ethers\n .verifyMessage(\n ethers.getBytes(\n ethers.keccak256(\n new TextEncoder().encode(canonicalize(requestedProofs)!)\n )\n ),\n ethers.hexlify(signature as unknown as string)\n )\n .toLowerCase()\n\n if (ethers.getAddress(appId) !== ethers.getAddress(applicationId)) {\n throw new InvalidSignatureError(`Signature does not match the application id: ${appId}`)\n }\n } catch (err) {\n throw err\n }\n}\n\nexport function escapeRegExp(string: string) {\n return string.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&'); // $& means the whole matched string\n}\n\nexport function replaceAll(str: string, find: string, replace: string) {\n return str.replace(new RegExp(escapeRegExp(find), 'g'), replace);\n}","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n\nimport { Contract } from 'ethers';\n\nconst _abi = [\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: 'address',\n name: 'previousAdmin',\n type: 'address',\n },\n {\n indexed: false,\n internalType: 'address',\n name: 'newAdmin',\n type: 'address',\n },\n ],\n name: 'AdminChanged',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'address',\n name: 'beacon',\n type: 'address',\n },\n ],\n name: 'BeaconUpgraded',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n components: [\n {\n internalType: 'uint32',\n name: 'id',\n type: 'uint32',\n },\n {\n internalType: 'uint32',\n name: 'timestampStart',\n type: 'uint32',\n },\n {\n internalType: 'uint32',\n name: 'timestampEnd',\n type: 'uint32',\n },\n {\n components: [\n {\n internalType: 'address',\n name: 'addr',\n type: 'address',\n },\n {\n internalType: 'string',\n name: 'host',\n type: 'string',\n },\n ],\n internalType: 'struct Reclaim.Witness[]',\n name: 'witnesses',\n type: 'tuple[]',\n },\n {\n internalType: 'uint8',\n name: 'minimumWitnessesForClaimCreation',\n type: 'uint8',\n },\n ],\n indexed: false,\n internalType: 'struct Reclaim.Epoch',\n name: 'epoch',\n type: 'tuple',\n },\n ],\n name: 'EpochAdded',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: 'uint8',\n name: 'version',\n type: 'uint8',\n },\n ],\n name: 'Initialized',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'address',\n name: 'previousOwner',\n type: 'address',\n },\n {\n indexed: true,\n internalType: 'address',\n name: 'newOwner',\n type: 'address',\n },\n ],\n name: 'OwnershipTransferred',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'address',\n name: 'implementation',\n type: 'address',\n },\n ],\n name: 'Upgraded',\n type: 'event',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'witnessAddress',\n type: 'address',\n },\n {\n internalType: 'string',\n name: 'host',\n type: 'string',\n },\n ],\n name: 'addAsWitness',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [],\n name: 'addNewEpoch',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'uint32',\n name: 'epochNum',\n type: 'uint32',\n },\n {\n components: [\n {\n internalType: 'string',\n name: 'provider',\n type: 'string',\n },\n {\n internalType: 'string',\n name: 'parameters',\n type: 'string',\n },\n {\n internalType: 'string',\n name: 'context',\n type: 'string',\n },\n ],\n internalType: 'struct Claims.ClaimInfo',\n name: 'claimInfo',\n type: 'tuple',\n },\n {\n components: [\n {\n internalType: 'bytes32',\n name: 'identifier',\n type: 'bytes32',\n },\n {\n internalType: 'address',\n name: 'owner',\n type: 'address',\n },\n {\n internalType: 'uint32',\n name: 'timestampS',\n type: 'uint32',\n },\n {\n internalType: 'uint256',\n name: 'epoch',\n type: 'uint256',\n },\n ],\n internalType: 'struct Claims.CompleteClaimData',\n name: 'claimData',\n type: 'tuple',\n },\n {\n internalType: 'bytes[]',\n name: 'signatures',\n type: 'bytes[]',\n },\n ],\n name: 'assertValidEpochAndSignedClaim',\n outputs: [],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'currentEpoch',\n outputs: [\n {\n internalType: 'uint32',\n name: '',\n type: 'uint32',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'epochDurationS',\n outputs: [\n {\n internalType: 'uint32',\n name: '',\n type: 'uint32',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n name: 'epochs',\n outputs: [\n {\n internalType: 'uint32',\n name: 'id',\n type: 'uint32',\n },\n {\n internalType: 'uint32',\n name: 'timestampStart',\n type: 'uint32',\n },\n {\n internalType: 'uint32',\n name: 'timestampEnd',\n type: 'uint32',\n },\n {\n internalType: 'uint8',\n name: 'minimumWitnessesForClaimCreation',\n type: 'uint8',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'uint32',\n name: 'epoch',\n type: 'uint32',\n },\n ],\n name: 'fetchEpoch',\n outputs: [\n {\n components: [\n {\n internalType: 'uint32',\n name: 'id',\n type: 'uint32',\n },\n {\n internalType: 'uint32',\n name: 'timestampStart',\n type: 'uint32',\n },\n {\n internalType: 'uint32',\n name: 'timestampEnd',\n type: 'uint32',\n },\n {\n components: [\n {\n internalType: 'address',\n name: 'addr',\n type: 'address',\n },\n {\n internalType: 'string',\n name: 'host',\n type: 'string',\n },\n ],\n internalType: 'struct Reclaim.Witness[]',\n name: 'witnesses',\n type: 'tuple[]',\n },\n {\n internalType: 'uint8',\n name: 'minimumWitnessesForClaimCreation',\n type: 'uint8',\n },\n ],\n internalType: 'struct Reclaim.Epoch',\n name: '',\n type: 'tuple',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'uint32',\n name: 'epoch',\n type: 'uint32',\n },\n {\n internalType: 'bytes32',\n name: 'identifier',\n type: 'bytes32',\n },\n {\n internalType: 'uint32',\n name: 'timestampS',\n type: 'uint32',\n },\n ],\n name: 'fetchWitnessesForClaim',\n outputs: [\n {\n components: [\n {\n internalType: 'address',\n name: 'addr',\n type: 'address',\n },\n {\n internalType: 'string',\n name: 'host',\n type: 'string',\n },\n ],\n internalType: 'struct Reclaim.Witness[]',\n name: '',\n type: 'tuple[]',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'initialize',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [],\n name: 'minimumWitnessesForClaimCreation',\n outputs: [\n {\n internalType: 'uint8',\n name: '',\n type: 'uint8',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'owner',\n outputs: [\n {\n internalType: 'address',\n name: '',\n type: 'address',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'proxiableUUID',\n outputs: [\n {\n internalType: 'bytes32',\n name: '',\n type: 'bytes32',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'witnessAddress',\n type: 'address',\n },\n ],\n name: 'removeAsWitness',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [],\n name: 'renounceOwnership',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'newOwner',\n type: 'address',\n },\n ],\n name: 'transferOwnership',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'addr',\n type: 'address',\n },\n {\n internalType: 'bool',\n name: 'isWhitelisted',\n type: 'bool',\n },\n ],\n name: 'updateWitnessWhitelist',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'newImplementation',\n type: 'address',\n },\n ],\n name: 'upgradeTo',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'newImplementation',\n type: 'address',\n },\n {\n internalType: 'bytes',\n name: 'data',\n type: 'bytes',\n },\n ],\n name: 'upgradeToAndCall',\n outputs: [],\n stateMutability: 'payable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n name: 'witnesses',\n outputs: [\n {\n internalType: 'address',\n name: 'addr',\n type: 'address',\n },\n {\n internalType: 'string',\n name: 'host',\n type: 'string',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n] as const;\n\nexport class Reclaim__factory {\n static readonly abi = _abi;\n\n static connect(address: string, signerOrProvider: any): Contract {\n return new Contract(address, _abi, signerOrProvider);\n }\n}\n","{\n \"0x1a4\": {\n \"chainName\": \"opt-goerli\",\n \"address\": \"0xF93F605142Fb1Efad7Aa58253dDffF67775b4520\",\n \"rpcUrl\": \"https://opt-goerli.g.alchemy.com/v2/rksDkSUXd2dyk2ANy_zzODknx_AAokui\"\n },\n \"0xaa37dc\": {\n \"chainName\": \"opt-sepolia\",\n \"address\": \"0x6D0f81BDA11995f25921aAd5B43359630E65Ca96\",\n \"rpcUrl\": \"https://opt-sepolia.g.alchemy.com/v2/aO1-SfG4oFRLyAiLREqzyAUu0HTCwHgs\"\n}\n\n}\n","import type { Beacon, BeaconState } from './interfaces';\nimport { Reclaim__factory as ReclaimFactory } from './contract-types';\nimport CONTRACTS_CONFIG from './contract-types/config.json';\nimport { Contract, ethers } from 'ethers';\n\nconst DEFAULT_CHAIN_ID = 11155420;\n\nexport function makeBeacon(chainId?: number): Beacon | undefined {\n chainId = chainId || DEFAULT_CHAIN_ID;\n const contract = getContract(chainId);\n if (contract) {\n return makeBeaconCacheable({\n async getState(epochId: number | undefined): Promise<BeaconState> {\n //@ts-ignore\n const epoch = await contract.fetchEpoch(epochId || 0);\n if (!epoch.id) {\n throw new Error(`Invalid epoch ID: ${epochId}`);\n }\n\n return {\n epoch: epoch.id,\n witnesses: epoch.witnesses.map((w: any) => ({\n id: w.addr.toLowerCase(),\n url: w.host,\n })),\n witnessesRequiredForClaim: epoch.minimumWitnessesForClaimCreation,\n nextEpochTimestampS: epoch.timestampEnd,\n };\n },\n });\n } else {\n return undefined;\n }\n}\n\nexport function makeBeaconCacheable(beacon: Beacon): Beacon {\n const cache: { [epochId: number]: Promise<BeaconState> } = {};\n\n return {\n ...beacon,\n async getState(epochId: number | undefined): Promise<BeaconState> {\n if (!epochId) {\n // TODO: add cache here\n const state = await beacon.getState();\n return state;\n }\n\n const key = epochId;\n\n if (!cache[key]) {\n cache[key] = beacon.getState(epochId);\n }\n\n return cache[key] as unknown as BeaconState;\n },\n };\n}\n\nconst existingContractsMap: { [chain: string]: Contract } = {};\n\nfunction getContract(chainId: number): Contract {\n const chainKey = `0x${chainId.toString(16)}`;\n if (!existingContractsMap[chainKey]) {\n const contractData =\n CONTRACTS_CONFIG[chainKey as keyof typeof CONTRACTS_CONFIG];\n if (!contractData) {\n throw new Error(`Unsupported chain: \"${chainKey}\"`);\n }\n\n const rpcProvider = new ethers.JsonRpcProvider(contractData.rpcUrl);\n existingContractsMap[chainKey] = ReclaimFactory.connect(\n contractData.address,\n rpcProvider\n );\n }\n\n return existingContractsMap[chainKey] as Contract;\n}\n","// export const BACKEND_BASE_URL = \"http://localhost:3003\"\nexport const BACKEND_BASE_URL = \"https://api.reclaimprotocol.org\"\nexport const constants = {\n GET_PROVIDERS_BY_ID_API:\n BACKEND_BASE_URL + '/api/applications',\n DEFAULT_RECLAIM_CALLBACK_URL:\n BACKEND_BASE_URL + '/api/sdk/callback?callbackId=',\n DEFAULT_RECLAIM_STATUS_URL:\n BACKEND_BASE_URL + '/api/sdk/session/',\n RECLAIM_SHARE_URL: 'https://share.reclaimprotocol.org/instant/?template=',\n RECLAIM_GET_BRANCH_URL: \n BACKEND_BASE_URL + '/api/sdk/get-branch-url' \n};\n","\n\nexport class TimeoutError extends Error {\n constructor(message: string) {\n super(message)\n this.name = 'TimeoutError'\n }\n}\n\n\nexport class ProofNotVerifiedError extends Error {\n constructor(message?: string) {\n super(message)\n this.name = 'ProofNotVerifiedError'\n }\n}\n\nexport class SessionNotStartedError extends Error {\n constructor(message?: string) {\n super(message)\n this.name = 'SessionNotStartedError'\n }\n}\n\nexport class ProviderAPIError extends Error {\n constructor(message?: string) {\n super(message)\n this.name = 'ProviderAPIError'\n }\n}\n\nexport class BuildProofRequestError extends Error {\n constructor(message?: string) {\n super(message)\n this.name = 'BuildProofRequest'\n }\n}\n\nexport class SignatureGeneratingError extends Error {\n constructor(message?: string) {\n super(message)\n this.name = 'SignatureGeneratingError'\n }\n}\n\nexport class SignatureNotFoundError extends Error {\n constructor(message?: string) {\n super(message)\n this.name = 'SignatureNotFound'\n }\n}\n\nexport class InvalidSignatureError extends Error {\n constructor(message?: string) {\n super(message)\n this.name = 'InvalidSignatureError'\n }\n}\n\n\nexport class UpdateSessionError extends Error {\n constructor(message?: string) {\n super(message)\n this.name = 'UpdateSessionError'\n }\n}\n\nexport class CreateSessionError extends Error {\n constructor(message?: string) {\n super(message)\n this.name = 'CreateSessionError'\n }\n}\n\nexport class ProviderFailedError extends Error {\n constructor(message?: string) {\n super(message)\n this.name = 'ProviderFailedError'\n }\n}\nexport class InvalidParamError extends Error {\n constructor(message?: string) {\n super(message)\n this.name = 'InvalidParamError'\n }\n}\nexport class ApplicationError extends Error {\n constructor(message?: string) {\n super(message)\n this.name = 'ApplicationError'\n }\n}"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,oBAAuB;AAWhB,SAAS,yBACd,EAAE,WAAW,2BAA2B,MAAM,GAC9C,QACA,YACA;AACA,QAAM,aACJ,OAAO,WAAW,WAAW,SAAS,2BAA2B,MAAM;AACzE,QAAM,gBAAgB;AAAA,IACpB;AAAA,IACA,MAAM,SAAS;AAAA,IACf,0BAA0B,SAAS;AAAA,IACnC,WAAW,SAAS;AAAA,EACtB,EAAE,KAAK,IAAI;AACX,QAAM,kBAAkB,qBAAO,UAAU,gBAAgB,aAAa,CAAC;AACvE,QAAM,eAAe,qBAAO,SAAS,eAAe;AACpD,QAAM,mBAAmB,qBAAqB,YAAY;AAC1D,QAAM,gBAAgB,CAAC,GAAG,SAAS;AACnC,QAAM,oBAAmC,CAAC;AAG1C,MAAI,aAAa;AACjB,WAAS,IAAI,GAAG,IAAI,2BAA2B,KAAK;AAClD,UAAM,aAAa,iBAAiB,UAAU,UAAU;AACxD,UAAM,eAAe,aAAa,cAAc;AAChD,UAAM,UAAU,cAAc,YAAY;AAC1C,sBAAkB,KAAK,OAAO;AAG9B,kBAAc,YAAY,IAAI,cAC5B,cAAc,SAAS,CACzB;AACA,kBAAc,IAAI;AAClB,kBAAc,aAAa,KAAK,aAAa;AAAA,EAC/C;AAEA,SAAO;AACT;AAEO,SAAS,2BAA2B,MAA0B;AACnE,QAAM,MAAM,GAAG,KAAK,QAAQ;AAAA,EAAK,KAAK,UAAU;AAAA,EAAK,KAAK,WAAW,EAAE;AACvE,SAAO,qBAAO,UAAU,gBAAgB,GAAG,CAAC,EAAE,YAAY;AAC5D;AAEO,SAAS,gBAAgB,KAAa;AAC3C,SAAO,IAAI,YAAY,EAAE,OAAO,GAAG;AACrC;AAEO,SAAS,qBAAqB,KAAiB;AACpD,SAAO,IAAI,SAAS,IAAI,QAAQ,IAAI,YAAY,IAAI,UAAU;AAChE;AAEO,SAAS,uBAAuB,MAAyB;AAC9D,QAAM,aACJ,gBAAgB,OAAO,KAAK,aAAa,2BAA2B,IAAI;AAC1E,QAAM,QAAQ;AAAA,IACZ;AAAA,IACA,KAAK,MAAM,YAAY;AAAA,IACvB,KAAK,WAAW,SAAS;AAAA,IACzB,KAAK,MAAM,SAAS;AAAA,EACtB;AAEA,SAAO,MAAM,KAAK,IAAI;AACxB;;;AC1DA,kBAAmB;AACnB,IAAAA,iBAAuB;AACvB,IAAAC,uBAAyB;;;ACjBzB,uBAAgB;AAGhB,IAAAC,iBAAuB;;;ACAvB,IAAAC,iBAAyB;AAEzB,IAAM,OAAO;AAAA,EACX;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,YAAY;AAAA,UACV;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,YAAY;AAAA,cACV;AAAA,gBACE,cAAc;AAAA,gBACd,MAAM;AAAA,gBACN,MAAM;AAAA,cACR;AAAA,cACA;AAAA,gBACE,cAAc;AAAA,gBACd,MAAM;AAAA,gBACN,MAAM;AAAA,cACR;AAAA,YACF;AAAA,YACA,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,QACF;AAAA,QACA,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,YAAY;AAAA,UACV;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,QACF;AAAA,QACA,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,YAAY;AAAA,UACV;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,QACF;AAAA,QACA,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,YAAY;AAAA,UACV;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,YAAY;AAAA,cACV;AAAA,gBACE,cAAc;AAAA,gBACd,MAAM;AAAA,gBACN,MAAM;AAAA,cACR;AAAA,cACA;AAAA,gBACE,cAAc;AAAA,gBACd,MAAM;AAAA,gBACN,MAAM;AAAA,cACR;AAAA,YACF;AAAA,YACA,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,QACF;AAAA,QACA,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,YAAY;AAAA,UACV;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,QACF;AAAA,QACA,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AACF;AAEO,IAAM,mBAAN,MAAuB;AAAA,EAG5B,OAAO,QAAQ,SAAiB,kBAAiC;AAC/D,WAAO,IAAI,wBAAS,SAAS,MAAM,gBAAgB;AAAA,EACrD;AACF;AANa,iBACK,MAAM;;;AC7hBxB;AAAA,EACE,SAAS;AAAA,IACP,WAAa;AAAA,IACb,SAAW;AAAA,IACX,QAAU;AAAA,EACZ;AAAA,EACA,YAAY;AAAA,IACV,WAAa;AAAA,IACb,SAAW;AAAA,IACX,QAAU;AAAA,EACd;AAEA;;;ACTA,IAAAC,iBAAiC;AAEjC,IAAM,mBAAmB;AAElB,SAAS,WAAW,SAAsC;AAC/D,YAAU,WAAW;AACrB,QAAM,WAAW,YAAY,OAAO;AACpC,MAAI,UAAU;AAVhB;AAWI,WAAO,oBAAoB;AAAA,MACnB,SAAS,SAAmD;AAAA;AAEhE,gBAAM,QAAQ,MAAM,SAAS,WAAW,WAAW,CAAC;AACpD,cAAI,CAAC,MAAM,IAAI;AACb,kBAAM,IAAI,MAAM,qBAAqB,OAAO,EAAE;AAAA,UAChD;AAEA,iBAAO;AAAA,YACL,OAAO,MAAM;AAAA,YACb,WAAW,MAAM,UAAU,IAAI,CAAC,OAAY;AAAA,cAC1C,IAAI,EAAE,KAAK,YAAY;AAAA,cACvB,KAAK,EAAE;AAAA,YACT,EAAE;AAAA,YACF,2BAA2B,MAAM;AAAA,YACjC,qBAAqB,MAAM;AAAA,UAC7B;AAAA,QACF;AAAA;AAAA,IACF,CAAC;AAAA,EACH,OAAO;AACL,WAAO;AAAA,EACT;AACF;AAEO,SAAS,oBAAoB,QAAwB;AAC1D,QAAM,QAAqD,CAAC;AAE5D,SAAO,iCACF,SADE;AAAA,IAEC,SAAS,SAAmD;AAAA;AAChE,YAAI,CAAC,SAAS;AAEZ,gBAAM,QAAQ,MAAM,OAAO,SAAS;AACpC,iBAAO;AAAA,QACT;AAEA,cAAM,MAAM;AAEZ,YAAI,CAAC,MAAM,GAAG,GAAG;AACf,gBAAM,GAAG,IAAI,OAAO,SAAS,OAAO;AAAA,QACtC;AAEA,eAAO,MAAM,GAAG;AAAA,MAClB;AAAA;AAAA,EACF;AACF;AAEA,IAAM,uBAAsD,CAAC;AAE7D,SAAS,YAAY,SAA2B;AAC9C,QAAM,WAAW,KAAK,QAAQ,SAAS,EAAE,CAAC;AAC1C,MAAI,CAAC,qBAAqB,QAAQ,GAAG;AACnC,UAAM,eACJ,eAAiB,QAAyC;AAC5D,QAAI,CAAC,cAAc;AACjB,YAAM,IAAI,MAAM,uBAAuB,QAAQ,GAAG;AAAA,IACpD;AAEA,UAAM,cAAc,IAAI,sBAAO,gBAAgB,aAAa,MAAM;AAClE,yBAAqB,QAAQ,IAAI,iBAAe;AAAA,MAC9C,aAAa;AAAA,MACb;AAAA,IACF;AAAA,EACF;AAEA,SAAO,qBAAqB,QAAQ;AACtC;;;AHvEA,0BAAyB;;;AILlB,IAAM,mBAAmB;AACzB,IAAM,YAAY;AAAA,EACrB,yBACI,mBAAmB;AAAA,EACvB,8BACI,mBAAmB;AAAA,EACvB,4BACI,mBAAmB;AAAA,EACvB,mBAAmB;AAAA,EACnB,wBACI,mBAAmB;AAC3B;;;ACVO,IAAM,eAAN,cAA2B,MAAM;AAAA,EACpC,YAAY,SAAiB;AACzB,UAAM,OAAO;AACb,SAAK,OAAO;AAAA,EAChB;AACJ;AAGO,IAAM,wBAAN,cAAoC,MAAM;AAAA,EAC7C,YAAY,SAAkB;AAC1B,UAAM,OAAO;AACb,SAAK,OAAO;AAAA,EAChB;AACJ;AAEO,IAAM,yBAAN,cAAqC,MAAM;AAAA,EAC9C,YAAY,SAAkB;AAC1B,UAAM,OAAO;AACb,SAAK,OAAO;AAAA,EAChB;AACJ;AAEO,IAAM,mBAAN,cAA+B,MAAM;AAAA,EACxC,YAAY,SAAkB;AAC1B,UAAM,OAAO;AACb,SAAK,OAAO;AAAA,EAChB;AACJ;AAEO,IAAM,yBAAN,cAAqC,MAAM;AAAA,EAC9C,YAAY,SAAkB;AAC1B,UAAM,OAAO;AACb,SAAK,OAAO;AAAA,EAChB;AACJ;AASO,IAAM,yBAAN,cAAqC,MAAM;AAAA,EAC9C,YAAY,SAAkB;AAC1B,UAAM,OAAO;AACb,SAAK,OAAO;AAAA,EAChB;AACJ;AAEO,IAAM,wBAAN,cAAoC,MAAM;AAAA,EAC7C,YAAY,SAAkB;AAC1B,UAAM,OAAO;AACb,SAAK,OAAO;AAAA,EAChB;AACJ;AAGO,IAAM,qBAAN,cAAiC,MAAM;AAAA,EAC1C,YAAY,SAAkB;AAC1B,UAAM,OAAO;AACb,SAAK,OAAO;AAAA,EAChB;AACJ;AAEO,IAAM,qBAAN,cAAiC,MAAM;AAAA,EAC1C,YAAY,SAAkB;AAC1B,UAAM,OAAO;AACb,SAAK,OAAO;AAAA,EAChB;AACJ;AAEO,IAAM,sBAAN,cAAkC,MAAM;AAAA,EAC3C,YAAY,SAAkB;AAC1B,UAAM,OAAO;AACb,SAAK,OAAO;AAAA,EAChB;AACJ;AACO,IAAM,oBAAN,cAAgC,MAAM;AAAA,EACzC,YAAY,SAAkB;AAC1B,UAAM,OAAO;AACb,SAAK,OAAO;AAAA,EAChB;AACJ;AACO,IAAM,mBAAN,cAA+B,MAAM;AAAA,EACxC,YAAY,SAAkB;AAC1B,UAAM,OAAO;AACb,SAAK,OAAO;AAAA,EAChB;AACJ;;;AL9EO,SAAS,2BAA2B,OAAY,WAAmB,cAAsB;AAC9F,MAAI,SAAS,MAAM;AACjB,UAAM,IAAI,kBAAkB,GAAG,SAAS,cAAc,YAAY,iCAAiC;AAAA,EACrG;AACF;AAEO,SAAS,uBAAuB,OAAe,WAAmB,cAAsB;AAC7F,MAAI,OAAO,UAAU,UAAU;AAC7B,UAAM,IAAI,kBAAkB,GAAG,SAAS,cAAc,YAAY,oBAAoB;AAAA,EACxF;AACA,MAAI,MAAM,KAAK,MAAM,IAAI;AACvB,UAAM,IAAI,kBAAkB,GAAG,SAAS,cAAc,YAAY,8BAA8B;AAAA,EAClG;AACF;AAgCO,SAAS,YAAY,KAAa,cAA4B;AACnE,6BAA2B,KAAK,OAAO,YAAY;AACnD,yBAAuB,KAAK,OAAO,YAAY;AAC/C,MAAI;AACF,QAAI,iBAAAC,QAAI,GAAG;AAAA,EACb,SAAS,GAAG;AACV,UAAM,IAAI,kBAAkB,gCAAgC,YAAY,GAAG;AAAA,EAC7E;AACF;AAMA,SAAsB,qBACpB,OACA,YACA,YACA;AAAA;AACA,UAAM,SAAS,WAAW;AAC1B,QAAI,CAAC;AAAQ,YAAM,IAAI,MAAM,WAAW;AACxC,UAAM,QAAQ,MAAM,OAAO,SAAS,KAAK;AACzC,UAAM,cAAc,yBAAyB,OAAO,YAAY,UAAU;AAC1E,WAAO,YAAY,IAAI,CAAC,MAAmB,EAAE,GAAG,YAAY,CAAC;AAAA,EAC/D;AAAA;AAOO,SAAS,4BAA4B;AAAA,EAC1C;AAAA,EACA;AACF,GAAgB;AACd,QAAM,UAAU,uBAAuB,mBAAK,MAAO;AACnD,SAAO,WAAW;AAAA,IAAI,eACpB,sBAAO,cAAc,SAAS,sBAAO,QAAQ,SAAS,CAAC,EAAE,YAAY;AAAA,EACvE;AACF;AAOO,SAAS,uBACd,OACA,0BACA;AACA,QAAM,mBAAmB,4BAA4B,KAAK;AAE1D,QAAM,mBAAmB,IAAI,IAAI,wBAAwB;AACzD,aAAW,WAAW,kBAAkB;AACtC,QAAI,iBAAiB,IAAI,OAAO,GAAG;AACjC,uBAAiB,OAAO,OAAO;AAAA,IACjC;AAAA,EACF;AAGA,MAAI,iBAAiB,OAAO,GAAG;AAC7B,UAAM,IAAI;AAAA,MACR,2BAA2B,yBAAyB,KAAK,IAAI,CAAC;AAAA,IAChE;AAAA,EACF;AACF;AAsBA,SAAsB,cAAc,WAAmB,OAAe,YAAoB;AAAA;AACxF,+BAA2B,WAAW,aAAa,eAAe;AAClE,+BAA2B,OAAO,SAAS,eAAe;AAC1D,+BAA2B,YAAY,cAAc,eAAe;AACpE,2BAAuB,WAAW,aAAa,eAAe;AAC9D,2BAAuB,OAAO,SAAS,eAAe;AACtD,2BAAuB,YAAY,cAAc,eAAe;AAChE,QAAI;AACF,YAAM,WAAW,MAAM,MAAM,mBAAmB,4BAA4B;AAAA,QAC1E,QAAQ;AAAA,QACR,SAAS;AAAA,UACP,gBAAgB;AAAA,QAClB;AAAA,QACA,MAAM,KAAK,UAAU;AAAA,UACnB;AAAA,UACA;AAAA,UACA;AAAA,QACF,CAAC;AAAA,MACH,CAAC;AACD,UAAI,CAAC,SAAS,IAAI;AAChB,cAAM,IAAI,mBAAmB,4CAA4C,SAAS;AAAA,MACpF;AACA,YAAM,MAAM,MAAM,SAAS,KAAK;AAChC,aAAO;AAAA,IACT,SAAS,KAAK;AACZ,YAAM,IAAI,mBAAmB,4CAA4C,SAAS;AAAA,IACpF;AAAA,EACF;AAAA;AAEA,SAAsB,cAAc,WAAmB,QAAuB;AAAA;AAC5E,+BAA2B,WAAW,aAAa,eAAe;AAClE,2BAAuB,WAAW,aAAa,eAAe;AAC9D,QAAI;AACF,YAAM,WAAW,MAAM,MAAM,mBAAmB,4BAA4B;AAAA,QAC1E,QAAQ;AAAA,QACR,SAAS;AAAA,UACP,gBAAgB;AAAA,QAClB;AAAA,QACA,MAAM,KAAK,UAAU;AAAA,UACnB;AAAA,UACA;AAAA,QACF,CAAC;AAAA,MACH,CAAC;AACD,UAAI,CAAC,SAAS,IAAI;AAChB,cAAM,IAAI,mBAAmB,4CAA4C,SAAS;AAAA,MACpF;AACA,YAAM,MAAM,MAAM,SAAS,KAAK;AAChC,aAAO;AAAA,IACT,SAAS,KAAK;AACZ,YAAM,IAAI,mBAAmB,4CAA4C,SAAS;AAAA,IACpF;AAAA,EACF;AAAA;AAEA,SAAsB,sBAAsB,OAAe,YAAoB;AAAA;AAC7E,QAAI;AACF,YAAM,WAAW,MAAM,MAAM,GAAG,UAAU,uBAAuB,IAAI,KAAK,aAAa,UAAU,EAAE;AACnG,UAAI,SAAS,WAAW,KAAK;AAC3B,cAAM,IAAI,iBAAiB,uCAAuC,KAAK;AAAA,MACzE;AACA,UAAI,SAAS,WAAW,KAAK;AAC3B,cAAM,IAAI,MAAM;AAAA,MAClB;AAEA,YAAM,MAAM,MAAM,SAAS,KAAK;AAChC,aAAO,IAAI,UAAU;AAAA,IACvB,SAAS,KAAK;AACZ,UAAI,eAAe,kBAAkB;AACnC,cAAM;AAAA,MACR;AACA,YAAM,IAAI,iBAAiB,yCAAyC,KAAK;AAAA,IAC3E;AAAA,EACF;AAAA;AAEO,SAAS,sCAAsC,YAAoB,WAAqC;AAC7G,MAAI,iBAAiB,UAAU,KAAK,cAAY,cAAc,SAAS,cAAc;AACrF,MAAI,CAAC,gBAAgB;AACnB,UAAM,IAAI,iBAAiB,oEAAoE,UAAU,EAAE;AAAA,EAC7G;AACA,SAAO,UAAU,KAAK,cAAY,cAAc,SAAS,cAAc;AACzE;AAEO,SAAS,wBAAwB,UAAsB,SAAkB,aAAqB,WAAmB,WAAoC;AAC1J,QAAM,iBAAwD,CAAC;AAC/D,WAAS,mBAAmB,QAAQ,QAAM,GAAG,cAAc,MAAM,WAAW,EAAE,OAAO,CAAC,GAAG,MAAM,IAAI,CAAC,EAAE,QAAQ,WAAS,eAAe,KAAK,IAAI,MAAS,CAAC;AACzJ,QAAM,SAAS,CAAC;AAAA,IACd,UAAU,mBAAmB,SAAS,IAAI;AAAA,IAC1C,SAAS,KAAK,UAAU,OAAO;AAAA,IAC/B,gBAAgB,SAAS;AAAA,IACzB,SAAS;AAAA,MACP,UAAU;AAAA,QACR,MAAM,mBAAmB,SAAS,IAAI;AAAA,QACtC,SAAS,SAAS;AAAA,QAClB,eAAe,SAAS;AAAA,QACxB,gBAAgB,SAAS;AAAA,MAC3B;AAAA,MACA,KAAK,SAAS;AAAA,MACd,SAAS,SAAS;AAAA,MAClB,QAAQ,SAAS;AAAA,MACjB,OAAO;AAAA,QACL,KAAK,SAAS;AAAA,MAChB;AAAA,MACA,oBAAoB,SAAS;AAAA,MAC7B,iBAAiB,SAAS;AAAA,MAC1B,WAAW,SAAS;AAAA,MACpB,WAAW,SAAS;AAAA,MACpB,aAAa,SAAS;AAAA,MACtB,WAAW,SAAS;AAAA,MACpB,eAAe,SAAS;AAAA,MACxB,sBAAsB,SAAS;AAAA,MAC/B,YAAY;AAAA,IACd;AAAA,EACF,CAAC;AAGD,SAAO;AAAA,IACL,IAAI;AAAA,IACJ;AAAA,IACA,MAAM;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAEO,SAAS,kBAAkB,iBAAkC,WAAsB,eAA8B;AACtH,MAAI;AACF,UAAM,QAAQ,sBACX;AAAA,MACC,sBAAO;AAAA,QACL,sBAAO;AAAA,UACL,IAAI,YAAY,EAAE,WAAO,oBAAAC,SAAa,eAAe,CAAE;AAAA,QACzD;AAAA,MACF;AAAA,MACA,sBAAO,QAAQ,SAA8B;AAAA,IAC/C,EACC,YAAY;AAEf,QAAI,sBAAO,WAAW,KAAK,MAAM,sBAAO,WAAW,aAAa,GAAG;AACjE,YAAM,IAAI,sBAAsB,gDAAgD,KAAK,EAAE;AAAA,IACzF;AAAA,EACF,SAAS,KAAK;AACZ,UAAM;AAAA,EACR;AACF;AAEO,SAAS,aAAa,QAAgB;AAC3C,SAAO,OAAO,QAAQ,uBAAuB,MAAM;AACrD;AAEO,SAAS,WAAW,KAAa,MAAc,SAAiB;AACrE,SAAO,IAAI,QAAQ,IAAI,OAAO,aAAa,IAAI,GAAG,GAAG,GAAG,OAAO;AACjE;;;ADtQA,kBAAc;AAWd,IAAM,aAAS,YAAAC,SAAE;AAEV,IAAM,WAAN,MAAM,SAAQ;AAAA,EACjB,OAAa,kBAAkB,OAAc;AAAA;AACzC,UAAI,CAAC,MAAM,WAAW,QAAQ;AAC1B,cAAM,IAAI,MAAM,eAAe;AAAA,MACnC;AACA,YAAM,YAAY,MAAM;AAAA,QACpB,MAAM,UAAU;AAAA,QAChB,MAAM;AAAA,QACN,MAAM,UAAU;AAAA,MACpB;AAEA,UAAI;AAEA,cAAM,uBAAuB,2BAA2B;AAAA,UACpD,YAAY,KAAK;AAAA,gBACb,qBAAAC,SAAa,MAAM,UAAU,UAAU;AAAA,UAC3C;AAAA,UACA,UAAU,MAAM,UAAU;AAAA,UAC1B,SAAS,MAAM,UAAU;AAAA,QAC7B,CAAC;AACD,cAAM,aAAa,WAAW,MAAM,YAAY,KAAK,EAAE;AAEvD,YAAI,yBAAyB,MAAM,YAAY;AAC3C,gBAAM,IAAI,sBAAsB,qBAAqB;AAAA,QACzD;AAEA,cAAM,cAA2B;AAAA,UAC7B,OAAO,mBACA,MAAM;AAAA,UAEb,YAAY,MAAM,WAAW,IAAI,eAAa;AAC1C,mBAAO,sBAAO,SAAS,SAAS;AAAA,UACpC,CAAC;AAAA,QACL;AAGA,+BAAuB,aAAa,SAAS;AAAA,MACjD,SAAS,GAAoB;AACzB,eAAO,MAAM,CAAC;AACd,eAAO;AAAA,MACX;AAEA,aAAO;AAAA,IACX;AAAA;AAAA,EACA,OAAO,oBAAoB,OAAc;AACrC,UAAM,mBAAmB,oBAAI,IAAI;AAAA,MAC7B,CAAC,WAAW,MAAM,UAAU,OAAO;AAAA,MACnC,CAAC,cAAc,MAAM,UAAU,UAAU;AAAA,MACzC,CAAC,YAAY,MAAM,UAAU,QAAQ;AAAA,IACzC,CAAC;AACD,UAAM,YAAY,OAAO,YAAY,gBAAgB;AACrD,UAAM,eAAe,oBAAI,IAA6B;AAAA,MAClD,CAAC,SAAS,MAAM,UAAU,KAAK;AAAA,MAC/B,CAAC,cAAc,MAAM,UAAU,UAAU;AAAA,MACzC,CAAC,SAAS,MAAM,UAAU,KAAK;AAAA,MAC/B,CAAC,cAAc,MAAM,UAAU,UAAU;AAAA,IAC7C,CAAC;AACD,UAAM,cAAc;AAAA,MAChB,OAAO,OAAO,YAAY,YAAY;AAAA,MACtC,YAAY,MAAM;AAAA,IACtB;AACA,WAAO,EAAE,WAAW,YAAY;AAAA,EACpC;AAAA,EACA,OAAO,eAAe,OAAc,cAA+B;AAC/D,QAAI;AACA,iCAA2B,cAAc,iBAAiB,yBAAyB;AACnF,iCAA2B,OAAO,SAAS,yBAAyB;AAEpE,6BAAuB,cAAc,iBAAiB,yBAAyB;AAC/E,6BAAuB,MAAM,UAAU,SAAS,WAAW,yBAAyB;AAEpF,YAAM,cAAc,KAAK,MAAM,MAAM,UAAU,OAAO;AACtD,UAAI,CAAC,YAAY,cAAc;AAC3B,eAAO,KAAK,iDAAiD;AAC7D,eAAO;AAAA,MACX;AACA,UAAI,iBAAiB,YAAY,cAAc;AAC3C,eAAO,KAAK,4BAA4B,YAAY,YAAY,4CAA4C,YAAY,EAAE;AAC1H,eAAO;AAAA,MACX;AACA,aAAO;AAAA,IACX,SAAS,GAAoB;AACzB,aAAO,MAAM,CAAC;AACd,aAAO;AAAA,IACX;AAAA,EACJ;AAkTJ;AAvYa,SAsFF,eAAe,MAAM;AAAA,EAWxB,YAAY,eAAuB,SAA+B;AALlE,mBAAmB,EAAE,gBAAgB,OAAO,gBAAgB,GAAG;AAG/D,qBAAuC,oBAAI,IAAI;AAG3C,+BAA2B,eAAe,iBAAiB,iBAAiB;AAC5E,2BAAuB,eAAe,iBAAiB,iBAAiB;AACxE,QAAI,mCAAS,WAAW;AACpB,6BAAuB,mCAAS,WAAW,aAAa,iBAAiB;AAAA,IAC7E;AAEA,SAAK,gBAAgB;AACrB,SAAK,aAAY,mCAAS,kBAAa,gBAAG,EAAE,SAAS;AACrD,WAAO,SAAQ,mCAAS,OAAM,SAAS;AACvC,WAAO;AAAA,MACH,2CAA2C,KAAK,aAAa,mBAAmB,KAAK,SAAS;AAAA,IAClG;AAAA,EACJ;AAAA,EAEA,WAAW,SAAiB,SAA2B;AACnD,+BAA2B,SAAS,WAAW,YAAY;AAC3D,+BAA2B,SAAS,WAAW,YAAY;AAC3D,SAAK,UAAU,EAAE,gBAAgB,SAAS,gBAAgB,QAAQ;AAAA,EACtE;AAAA,EAEA,kBAAkB,KAAuB;AACrC,gBAAY,KAAK,mBAAmB;AACpC,UAAM,SAAS,IAAI,IAAI,GAAG;AAC1B,WAAO,aAAa,OAAO,cAAc,KAAK,SAAS;AACvD,SAAK,iBAAiB,OAAO,SAAS;AAAA,EAC1C;AAAA,EAEA,aAAa,KAAuB;AAChC,gBAAY,KAAK,cAAc;AAC/B,SAAK,YAAY;AAAA,EACrB;AAAA,EAEA,aAAa,WAAgC;AACzC,+BAA2B,WAAW,aAAa,cAAc;AACjE,2BAAuB,WAAW,aAAa,cAAc;AAC7D,SAAK,YAAY;AAAA,EACrB;AAAA,EAEA,oBAAoC;AAChC,WACI,KAAK,kBACL,GAAG,UAAU,4BAA4B,GAAG,KAAK,SAAS;AAAA,EAElE;AAAA,EAEA,eAA0B;AACtB,WACI,KAAK,aACL,GAAG,UAAU,0BAA0B,GAAG,KAAK,SAAS;AAAA,EAEhE;AAAA,EAEA,qBAAsC;AAClC,QAAI;AACA,UAAI,CAAC,KAAK,iBAAiB;AACvB,cAAM,IAAI;AAAA,UACN;AAAA,QACJ;AAAA,MACJ;AACA,aAAO,KAAK;AAAA,IAChB,SAAS,KAAK;AACV,YAAM;AAAA,IACV;AAAA,EACJ;AAAA,EAEM,kBAAkB,mBAA+C;AAAA;AACnE,UAAI;AACA,cAAM,SAAS,IAAI,sBAAO,OAAO,iBAAiB;AAClD,cAAM,YAAwB,MAAM,OAAO;AAAA,UACvC,sBAAO;AAAA,YACH,sBAAO;AAAA,cACH,IAAI,YAAY,EAAE;AAAA,oBACd,qBAAAA,SAAa,KAAK,mBAAmB,CAAC;AAAA,cAC1C;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AAEA,eAAO;AAAA,MACX,SAAS,KAAK;AACV,eAAO,MAAM,GAAG;AAChB,cAAM,IAAI;AAAA,UACN,uDACA;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ;AAAA;AAAA,EAEM,kBAAkB,YAA8C;AAAA;AAClE,UAAI,YAAY,MAAM,sBAAsB,KAAK,eAAe,UAAU;AAC1E,YAAM,WAAW;AAAA,QACb;AAAA,QACA;AAAA,MACJ;AACA,UAAI;AACA,aAAK,aAAa;AAClB,aAAK,kBAAkB;AAAA,UACnB;AAAA,UACA,KAAK;AAAA,UACL,KAAK,kBAAkB;AAAA,UACvB,KAAK,aAAa;AAAA,UAClB,KAAK;AAAA,QACT;AACA,eAAO,KAAK;AAAA,MAChB,SAAS,KAAsB;AAC3B,eAAO,MAAM,GAAG;AAChB,cAAM,IAAI;AAAA,UACN;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ;AAAA;AAAA,EAEM,4BAGH;AAAA;AACC,UAAI;AACA,cAAM,kBAAkB,MAAM,KAAK,mBAAmB;AAEtD,YAAI,CAAC,iBAAiB;AAClB,gBAAM,IAAI;AAAA,YACN;AAAA,UACJ;AAAA,QACJ;AAEA,YAAI,CAAC,KAAK,WAAW;AACjB,gBAAM,IAAI;AAAA,YACN;AAAA,UACJ;AAAA,QACJ;AAEA,0BAAkB,iBAAiB,KAAK,WAAW,KAAK,aAAa;AAErE,cAAM,eAAe,iCACd,kBADc;AAAA,UAEjB,WAAW,KAAK;AAAA,QACpB;AAEA,YAAI,WAAW;AAAA,UACX,KAAK,UAAU,YAAY;AAAA,QAC/B;AAEA,mBAAW,WAAW,UAAU,KAAK,KAAK;AAC1C,mBAAW,WAAW,UAAU,KAAK,KAAK;AAE1C,cAAM,UAAU;AAAA,UACZ,QAAQ;AAAA,UACR,SAAS,EAAC,QAAQ,oBAAoB,gBAAgB,mBAAkB;AAAA,UACxE,MAAM,KAAK,UAAU;AAAA,YACjB;AAAA,UACJ,CAAC;AAAA,QACH;AAEF,cAAM,WAAW,MAAM,MAAM,UAAU,wBAAwB,OAAO;AACtE,YAAG,SAAS,WAAU,KAAK;AACvB,gBAAM,IAAI;AAAA,YACN;AAAA,UACJ;AAAA,QACJ;AACA,cAAM,OAAO,MAAM,SAAS,KAAK;AACjC,cAAM,OAAO,6BAAM;AACnB,YAAG,CAAC,MAAK;AACL,gBAAM,IAAI;AAAA,YACN;AAAA,UACJ;AAAA,QACJ;AACA,cAAM,cAAc,KAAK,WAAW,KAAK,eAAe,KAAK,UAAW;AACxE,eAAO,EAAE,YAAY,MAAM,WAAW,KAAK,aAAa,EAAE;AAAA,MAC9D,SAAS,OAAO;AACZ,eAAO,MAAM,wCAAwC,KAAK;AAC1D,cAAM;AAAA,MACV;AAAA,IACJ;AAAA;AAAA,EAEM,aAAa,IAGI;AAAA,+CAHJ;AAAA,MACf;AAAA,MACA;AAAA,IACJ,GAAuB;AACnB,YAAM,YAAY,KAAK,aAAa;AACpC,UAAI,aAAa,KAAK,WAAW;AAC7B,eAAO,KAAK,kBAAkB;AAC9B,YAAI;AACA,gBAAM,cAAc,KAAK,0CAAoC;AAAA,QACjE,SAAS,GAAG;AACR,iBAAO,MAAM,CAAC;AAAA,QAClB;AACA,cAAM,WAAW,YAAY,MAAY;AACrC,cAAI;AACA,kBAAM,MAAM,MAAM,MAAM,SAAS;AACjC,kBAAM,OAAO,MAAM,IAAI,KAAK;AAE5B,gBAAI,CAAC,KAAK;AAAS;AACnB,gBAAI,KAAK,QAAQ;AAAiC,oBAAM,IAAI,oBAAoB;AAChF,gBAAI,KAAK,QAAQ,OAAO,WAAW;AAAG;AAEtC,kBAAM,QAAQ,KAAK,QAAQ,OAAO,CAAC;AACnC,kBAAM,WAAW,MAAM,SAAQ,kBAAkB,KAAK;AACtD,gBAAI,CAAC,UAAU;AACX,oBAAM,IAAI,sBAAsB;AAAA,YACpC;AACA,gBAAI,mBAAmB;AACnB,kBAAI;AACA,sBAAM,cAAc,KAAK,4CAAqC;AAAA,cAClE,SAAS,GAAG;AACR,uBAAO,MAAM,CAAC;AAAA,cAClB;AACA,gCAAkB,KAAK,QAAQ,MAAM;AAAA,YACzC;AACA,0BAAc,KAAK,UAAU,IAAI,KAAK,SAAU,CAAC;AACjD,iBAAK,UAAU,OAAO,KAAK,SAAU;AAAA,UACzC,SAAS,GAAG;AACR,gBAAI,EAAE,aAAa,sBAAsB;AACrC,kBAAI;AACA,sBAAM,cAAc,KAAK,gCAA+B;AAAA,cAC5D,SAASC,IAAG;AACR,uBAAO,MAAMA,EAAC;AAAA,cAClB;AAAA,YACJ;AACA,gBAAI,mBAAmB;AACnB,gCAAkB,CAAU;AAAA,YAChC;AACA,0BAAc,KAAK,UAAU,IAAI,KAAK,SAAU,CAAC;AACjD,iBAAK,UAAU,OAAO,KAAK,SAAU;AAAA,UACzC;AAAA,QACJ,IAAG,GAAI;AAEP,aAAK,UAAU,IAAI,KAAK,WAAW,QAAQ;AAC3C,aAAK,2BAA2B,iBAAiB;AAAA,MACrD,OAAO;AACH,cAAM,UACF;AACJ,eAAO,MAAM,OAAO;AACpB,cAAM,IAAI,uBAAuB,OAAO;AAAA,MAC5C;AAAA,IACJ;AAAA;AAAA,EAEA,2BAA2B,mBAAsC;AAC7D,eAAW,MAAY;AACnB,UAAI,KAAK,UAAU,IAAI,KAAK,SAAS,GAAG;AACpC,cAAM,UAAU;AAChB,cAAM,cAAc,KAAK,gCAA+B;AACxD,0BAAkB,IAAI,aAAa,OAAO,CAAC;AAC3C,eAAO,KAAK,OAAO;AACnB,sBAAc,KAAK,UAAU,IAAI,KAAK,SAAU,CAAC;AAAA,MACrD;AAAA,IACJ,IAAG,MAAO,KAAK,EAAE;AAAA,EACrB;AAAA,EAEA,kBAA4B;AACxB,UAAM,kBAAkB,KAAK,mBAAmB;AAEhD,QAAI,CAAC,mBAAmB,CAAC,KAAK,iBAAiB;AAC3C,YAAM,IAAI;AAAA,QACN;AAAA,MACJ;AAAA,IACJ;AACA,QAAI,uBAAuB,OAAO,KAAK,gBAAgB,OAAO,CAAC,EAAE,QAAQ,UAAU;AACnF,2BAAuB,qBAAqB,OAAO,gBAAgB,OAAO,CAAC,EAAE,QAAQ,IAChF,MAAM,WAAW,EACjB,OAAO,CAAC,GAAW,MAAc,IAAI,CAAC,CAAC;AAC5C,2BAAuB,qBAAqB,OAAO,gBAAgB,OAAO,CAAC,EAAE,QAAQ,MAAM,IACtF,MAAM,WAAW,EACjB,OAAO,CAAC,GAAW,MAAc,IAAI,CAAC,CAAC;AAE5C,WAAO,CAAC,GAAG,IAAI,IAAI,oBAAoB,CAAC;AAAA,EAC5C;AAAA,EAEA,UAAU,QAA6C;AACnD,QAAI;AACA,YAAM,kBAAkB,KAAK,mBAAmB;AAEhD,UAAI,CAAC,mBAAmB,CAAC,KAAK,iBAAiB;AAC3C,cAAM,IAAI;AAAA,UACN;AAAA,QACJ;AAAA,MACJ;AACA,YAAM,kBAAkB,KAAK,gBAAgB;AAC7C,YAAM,cAAc,OAAO,KAAK,MAAM;AACtC,eAAS,IAAI,GAAG,IAAI,YAAY,QAAQ,KAAK;AACzC,YAAI,CAAC,gBAAgB,SAAS,YAAY,CAAC,CAAC,GAAG;AAC3C,gBAAM,IAAI;AAAA,YACN,wBAAwB,YAAY,CAAC,CAAC,iBAAiB,KAAK,UAAU,kCAAkC,eAAe;AAAA,UAC3H;AAAA,QACJ;AAAA,MACJ;AACA,WAAK,gBAAgB,OAAO,CAAC,EAAE,QAAQ,aAAa,kCAAK,gBAAgB,OAAO,CAAC,EAAE,QAAQ,aAAe;AAAA,IAE9G,SAAS,OAAO;AACZ,aAAO,MAAM,yBAAyB,KAAK;AAC3C,YAAM;AAAA,IACV;AAAA,EACJ;AACJ;AAtYG,IAAM,UAAN;","names":["import_ethers","import_canonicalize","import_ethers","import_ethers","import_ethers","URL","canonicalize","P","canonicalize","e"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/witness.ts","../src/Reclaim.ts","../src/utils.ts","../src/contract-types/contracts/factories/Reclaim__factory.ts","../src/contract-types/config.json","../src/smart-contract.ts","../src/constants.ts","../src/errors.ts"],"sourcesContent":["export * from './Reclaim';\nexport * from './interfaces';","import { ethers } from 'ethers';\nimport type { WitnessData } from './interfaces';\nimport type { ClaimID, ClaimInfo, CompleteClaimData } from './types';\n\ntype BeaconState = {\n witnesses: WitnessData[];\n epoch: number;\n witnessesRequiredForClaim: number;\n nextEpochTimestampS: number;\n};\n\nexport function fetchWitnessListForClaim(\n { witnesses, witnessesRequiredForClaim, epoch }: BeaconState,\n params: string | ClaimInfo,\n timestampS: number\n) {\n const identifier =\n typeof params === 'string' ? params : getIdentifierFromClaimInfo(params);\n const completeInput = [\n identifier,\n epoch.toString(),\n witnessesRequiredForClaim.toString(),\n timestampS.toString(),\n ].join('\\n');\n const completeHashStr = ethers.keccak256(strToUint8Array(completeInput));\n const completeHash = ethers.getBytes(completeHashStr);\n const completeHashView = uint8ArrayToDataView(completeHash);\n const witnessesLeft = [...witnesses];\n const selectedWitnesses: WitnessData[] = [];\n // we'll use 32 bits of the hash to select\n // each witness\n let byteOffset = 0;\n for (let i = 0; i < witnessesRequiredForClaim; i++) {\n const randomSeed = completeHashView.getUint32(byteOffset);\n const witnessIndex = randomSeed % witnessesLeft.length;\n const witness = witnessesLeft[witnessIndex] as WitnessData;\n selectedWitnesses.push(witness);\n\n // Remove the selected witness from the list of witnesses left\n witnessesLeft[witnessIndex] = witnessesLeft[\n witnessesLeft.length - 1\n ] as WitnessData;\n witnessesLeft.pop();\n byteOffset = (byteOffset + 4) % completeHash.length;\n }\n\n return selectedWitnesses;\n}\n\nexport function getIdentifierFromClaimInfo(info: ClaimInfo): ClaimID {\n const str = `${info.provider}\\n${info.parameters}\\n${info.context || ''}`;\n return ethers.keccak256(strToUint8Array(str)).toLowerCase();\n}\n\nexport function strToUint8Array(str: string) {\n return new TextEncoder().encode(str);\n}\n\nexport function uint8ArrayToDataView(arr: Uint8Array) {\n return new DataView(arr.buffer, arr.byteOffset, arr.byteLength);\n}\n\nexport function createSignDataForClaim(data: CompleteClaimData) {\n const identifier =\n 'identifier' in data ? data.identifier : getIdentifierFromClaimInfo(data);\n const lines = [\n identifier,\n data.owner.toLowerCase(),\n data.timestampS.toString(),\n data.epoch.toString(),\n ];\n\n return lines.join('\\n');\n}\n","import type { Proof, RequestedProofs, Context } from './interfaces'\nimport { getIdentifierFromClaimInfo } from './witness'\nimport type {\n AppCallbackUrl,\n ApplicationId,\n NoReturn,\n OnFailureCallback,\n SessionId,\n Signature,\n SignedClaim,\n StatusUrl,\n ProofRequestOptions,\n StartSessionParams\n} from './types'\nimport { SessionStatus } from './types'\nimport { v4 } from 'uuid'\nimport { ethers } from 'ethers'\nimport canonicalize from 'canonicalize'\nimport {\n getWitnessesForClaim,\n assertValidSignedClaim,\n getShortenedUrl,\n fetchProvidersByAppId,\n generateRequestedProofs,\n validateProviderIdsAndReturnProviders,\n validateSignature,\n replaceAll,\n validateURL,\n updateSession,\n createSession,\n validateNotNullOrUndefined,\n validateNonEmptyString\n} from './utils'\nimport { constants } from './constants'\nimport P from 'pino'\nimport {\n BuildProofRequestError,\n InvalidParamError,\n ProofNotVerifiedError,\n ProviderFailedError,\n SessionNotStartedError,\n SignatureNotFoundError,\n TimeoutError\n} from './errors'\n\nconst logger = P()\n\nexport class Reclaim {\n static async verifySignedProof(proof: Proof) {\n if (!proof.signatures.length) {\n throw new Error('No signatures')\n }\n const witnesses = await getWitnessesForClaim(\n proof.claimData.epoch,\n proof.identifier,\n proof.claimData.timestampS\n )\n\n try {\n // then hash the claim info with the encoded ctx to get the identifier\n const calculatedIdentifier = getIdentifierFromClaimInfo({\n parameters: JSON.parse(\n canonicalize(proof.claimData.parameters) as string\n ),\n provider: proof.claimData.provider,\n context: proof.claimData.context\n })\n proof.identifier = replaceAll(proof.identifier, '\"', '')\n // check if the identifier matches the one in the proof\n if (calculatedIdentifier !== proof.identifier) {\n throw new ProofNotVerifiedError('Identifier Mismatch')\n }\n\n const signedClaim: SignedClaim = {\n claim: {\n ...proof.claimData\n },\n signatures: proof.signatures.map(signature => {\n return ethers.getBytes(signature)\n })\n }\n\n // verify the witness signature\n assertValidSignedClaim(signedClaim, witnesses)\n } catch (e: Error | unknown) {\n logger.error(e)\n return false\n }\n\n return true\n }\n static transformForOnchain(proof: Proof) {\n const claimInfoBuilder = new Map([\n ['context', proof.claimData.context],\n ['parameters', proof.claimData.parameters],\n ['provider', proof.claimData.provider],\n ]);\n const claimInfo = Object.fromEntries(claimInfoBuilder);\n const claimBuilder = new Map<string, number | string>([\n ['epoch', proof.claimData.epoch],\n ['identifier', proof.claimData.identifier],\n ['owner', proof.claimData.owner],\n ['timestampS', proof.claimData.timestampS],\n ]);\n const signedClaim = {\n claim: Object.fromEntries(claimBuilder),\n signatures: proof.signatures,\n };\n return { claimInfo, signedClaim };\n }\n static verifyProvider(proof: Proof, providerHash: string): boolean {\n try {\n validateNotNullOrUndefined(providerHash, 'applicationId', 'verifyProvider function')\n validateNotNullOrUndefined(proof, 'proof', 'verifyProvider function')\n\n validateNonEmptyString(providerHash, 'applicationId', 'verifyProvider function')\n validateNonEmptyString(proof.claimData.context, 'context', 'verifyProvider function')\n\n const jsonContext = JSON.parse(proof.claimData.context)\n if (!jsonContext.providerHash) {\n logger.info(`ProviderHash is not included in proof's context`)\n return false\n }\n if (providerHash !== jsonContext.providerHash) {\n logger.info(`ProviderHash in context: ${jsonContext.providerHash} does not match the stored providerHash: ${providerHash}`)\n return false\n }\n return true\n } catch (e: Error | unknown) {\n logger.error(e)\n return false\n }\n }\n static ProofRequest = class {\n applicationId: ApplicationId\n signature?: Signature\n appCallbackUrl?: AppCallbackUrl\n sessionId: SessionId\n statusUrl?: StatusUrl\n context: Context = { contextAddress: '0x0', contextMessage: '' }\n requestedProofs?: RequestedProofs\n providerId?: string\n intervals: Map<string, NodeJS.Timer> = new Map()\n\n constructor(applicationId: string, options?: ProofRequestOptions) {\n validateNotNullOrUndefined(applicationId, 'applicationId', 'the constructor')\n validateNonEmptyString(applicationId, 'applicationId', 'the constructor')\n if (options?.sessionId) {\n validateNonEmptyString(options?.sessionId, 'sessionId', 'the constructor')\n }\n\n this.applicationId = applicationId\n this.sessionId = options?.sessionId || v4().toString()\n logger.level = options?.log ? 'info' : 'silent'\n logger.info(\n `Initializing client with applicationId: ${this.applicationId} and sessionId: ${this.sessionId}`\n )\n }\n\n addContext(address: string, message: string): NoReturn {\n validateNotNullOrUndefined(address, 'address', 'addContext')\n validateNotNullOrUndefined(message, 'message', 'addContext')\n this.context = { contextAddress: address, contextMessage: message }\n }\n\n setAppCallbackUrl(url: string): NoReturn {\n validateURL(url, 'setAppCallbackUrl')\n const urlObj = new URL(url)\n urlObj.searchParams.append('callbackId', this.sessionId)\n this.appCallbackUrl = urlObj.toString()\n }\n\n setStatusUrl(url: string): NoReturn {\n validateURL(url, 'setStatusUrl')\n this.statusUrl = url\n }\n\n setSignature(signature: Signature): NoReturn {\n validateNotNullOrUndefined(signature, 'signature', 'setSignature')\n validateNonEmptyString(signature, 'signature', 'setSignature')\n this.signature = signature\n }\n\n getAppCallbackUrl(): AppCallbackUrl {\n return (\n this.appCallbackUrl ||\n `${constants.DEFAULT_RECLAIM_CALLBACK_URL}${this.sessionId}`\n )\n }\n\n getStatusUrl(): StatusUrl {\n return (\n this.statusUrl ||\n `${constants.DEFAULT_RECLAIM_STATUS_URL}${this.sessionId}`\n )\n }\n\n getRequestedProofs(): RequestedProofs {\n try {\n if (!this.requestedProofs) {\n throw new BuildProofRequestError(\n 'Call buildProofRequest(providerId: string) first!'\n )\n }\n return this.requestedProofs!\n } catch (err) {\n throw err\n }\n }\n\n async generateSignature(applicationSecret: string): Promise<Signature> {\n try {\n const wallet = new ethers.Wallet(applicationSecret)\n const signature: Signature = (await wallet.signMessage(\n ethers.getBytes(\n ethers.keccak256(\n new TextEncoder().encode(\n canonicalize(this.getRequestedProofs())!\n )\n )\n )\n )) as unknown as Signature\n\n return signature\n } catch (err) {\n logger.error(err)\n throw new BuildProofRequestError(\n 'Error generating signature for applicationSecret: ' +\n applicationSecret\n )\n }\n }\n\n async buildProofRequest(providerId: string, redirectUser: boolean = false): Promise<RequestedProofs> {\n let providers = await fetchProvidersByAppId(this.applicationId, providerId)\n const provider = validateProviderIdsAndReturnProviders(\n providerId,\n providers\n )\n try {\n this.providerId = providerId\n this.requestedProofs = generateRequestedProofs(\n provider,\n this.context,\n this.getAppCallbackUrl(),\n this.getStatusUrl(),\n this.sessionId,\n redirectUser\n )\n return this.requestedProofs\n } catch (err: Error | unknown) {\n logger.error(err)\n throw new BuildProofRequestError(\n 'Something went wrong while generating proof request'\n )\n }\n }\n\n async createVerificationRequest(): Promise<{\n statusUrl: StatusUrl\n requestUrl: string\n }> {\n try {\n const requestedProofs = await this.getRequestedProofs()\n\n if (!requestedProofs) {\n throw new BuildProofRequestError(\n 'Requested proofs are not built yet. Call buildProofRequest(providerId: string) first!'\n )\n }\n\n if (!this.signature) {\n throw new SignatureNotFoundError(\n 'Signature is not set. Use reclaim.setSignature(signature) to set the signature'\n )\n }\n\n validateSignature(requestedProofs, this.signature, this.applicationId)\n\n const templateData = {\n ...requestedProofs,\n signature: this.signature\n }\n\n let template = encodeURIComponent(\n JSON.stringify(templateData)\n )\n\n template = replaceAll(template, '(', '%28')\n template = replaceAll(template, ')', '%29')\n\n const options = {\n method: 'POST',\n headers: { accept: 'application/json', 'content-type': 'application/json' },\n body: JSON.stringify({\n template: template,\n })\n };\n\n const response = await fetch(constants.RECLAIM_GET_BRANCH_URL, options)\n if (response.status !== 200) {\n throw new Error(\n 'Error creating verification request - Branch Link not created'\n )\n }\n const data = await response.json()\n const link = data?.branchUrl\n if (!link) {\n throw new Error(\n 'Error creating verification request - Branch Link not created'\n )\n }\n await createSession(this.sessionId, this.applicationId, this.providerId!)\n return { requestUrl: link, statusUrl: this.getStatusUrl() }\n } catch (error) {\n logger.error('Error creating verification request:', error)\n throw error\n }\n }\n\n async startSession({\n onSuccessCallback,\n onFailureCallback\n }: StartSessionParams) {\n const statusUrl = this.getStatusUrl()\n if (statusUrl && this.sessionId) {\n logger.info('Starting session')\n try {\n await updateSession(this.sessionId, SessionStatus.SDK_STARTED)\n } catch (e) {\n logger.error(e)\n }\n const interval = setInterval(async () => {\n try {\n const res = await fetch(statusUrl)\n const data = await res.json()\n\n if (!data.session) return\n if (data.session.status === SessionStatus.FAILED) throw new ProviderFailedError()\n if (data.session.proofs.length === 0) return\n\n const proof = data.session.proofs[0]\n const verified = await Reclaim.verifySignedProof(proof)\n if (!verified) {\n throw new ProofNotVerifiedError()\n }\n if (onSuccessCallback) {\n try {\n await updateSession(this.sessionId, SessionStatus.SDK_RECEIVED)\n } catch (e) {\n logger.error(e)\n }\n onSuccessCallback(data.session.proofs)\n }\n clearInterval(this.intervals.get(this.sessionId!))\n this.intervals.delete(this.sessionId!)\n } catch (e) {\n if (!(e instanceof ProviderFailedError)) {\n try {\n await updateSession(this.sessionId, SessionStatus.FAILED)\n } catch (e) {\n logger.error(e)\n }\n }\n if (onFailureCallback) {\n onFailureCallback(e as Error)\n }\n clearInterval(this.intervals.get(this.sessionId!))\n this.intervals.delete(this.sessionId!)\n }\n }, 3000)\n\n this.intervals.set(this.sessionId, interval)\n this.scheduleIntervalEndingTask(onFailureCallback)\n } else {\n const message =\n \"Session can't be started due to undefined value of statusUrl and sessionId\"\n logger.error(message)\n throw new SessionNotStartedError(message)\n }\n }\n\n scheduleIntervalEndingTask(onFailureCallback: OnFailureCallback) {\n setTimeout(async () => {\n if (this.intervals.has(this.sessionId)) {\n const message = 'Interval ended without receiveing proofs'\n await updateSession(this.sessionId, SessionStatus.FAILED)\n onFailureCallback(new TimeoutError(message))\n logger.warn(message)\n clearInterval(this.intervals.get(this.sessionId!))\n }\n }, 1000 * 60 * 10)\n }\n\n availableParams(): string[] {\n const requestedProofs = this.getRequestedProofs();\n\n if (!requestedProofs || !this.requestedProofs) {\n throw new BuildProofRequestError(\n 'Requested proofs are not built yet. Call buildProofRequest(providerId: string) first!'\n );\n }\n let availableParamsStore = Object.keys(requestedProofs.claims[0].payload.parameters)\n availableParamsStore = availableParamsStore.concat(requestedProofs.claims[0].payload.url\n .split(/{{(.*?)}}/)\n .filter((_: string, i: number) => i % 2))\n availableParamsStore = availableParamsStore.concat(requestedProofs.claims[0].payload.login.url\n .split(/{{(.*?)}}/)\n .filter((_: string, i: number) => i % 2))\n\n return [...new Set(availableParamsStore)];\n }\n\n setParams(params: { [key: string]: string }): NoReturn {\n try {\n const requestedProofs = this.getRequestedProofs();\n\n if (!requestedProofs || !this.requestedProofs) {\n throw new BuildProofRequestError(\n 'Requested proofs are not built yet. Call buildProofRequest(providerId: string) first!'\n );\n }\n const availableParams = this.availableParams()\n const paramsToSet = Object.keys(params)\n for (let i = 0; i < paramsToSet.length; i++) {\n if (!availableParams.includes(paramsToSet[i])) {\n throw new InvalidParamError(\n `Cannot Set parameter ${paramsToSet[i]} for provider ${this.providerId} available Prameters inculde : ${availableParams}`\n );\n }\n }\n this.requestedProofs.claims[0].payload.parameters = { ...requestedProofs.claims[0].payload.parameters, ...params }\n\n } catch (error) {\n logger.error('Error Setting Params:', error);\n throw error;\n }\n }\n }\n}\n","import URL from 'url-parse'\nimport type { ApplicationId, ParsedURL, SignedClaim, Signature, SessionStatus } from './types'\nimport type { Context, ProviderV2, RequestedClaim, RequestedProofs, WitnessData } from './interfaces'\nimport { ethers } from 'ethers'\nimport { makeBeacon } from './smart-contract'\nimport { fetchWitnessListForClaim, createSignDataForClaim } from './witness'\nimport canonicalize from 'canonicalize'\nimport { BACKEND_BASE_URL, constants } from './constants'\nimport { ApplicationError, CreateSessionError, InvalidParamError, InvalidSignatureError, ProofNotVerifiedError, ProviderAPIError, UpdateSessionError } from './errors'\n\n/*\n Params validations utils\n*/\nexport function validateNotNullOrUndefined(input: any, paramName: string, functionName: string) {\n if (input == null) {\n throw new InvalidParamError(`${paramName} passed to ${functionName} must not be null or undefined.`);\n }\n}\n\nexport function validateNonEmptyString(input: string, paramName: string, functionName: string) {\n if (typeof input !== 'string') {\n throw new InvalidParamError(`${paramName} passed to ${functionName} must be a string.`);\n }\n if (input.trim() === \"\") {\n throw new InvalidParamError(`${paramName} passed to ${functionName} must be a non-empty string.`);\n }\n}\n\n/*\n URL utils\n*/\nexport function parse(url: string): ParsedURL {\n validateURL(url, 'parse')\n\n const parsed = URL(url, /* parseQueryString */ true)\n\n for (const param in parsed.query) {\n parsed.query[param] = decodeURIComponent(parsed.query[param]!)\n }\n const queryParams = parsed.query\n\n let path = parsed.pathname || null\n let hostname = parsed.hostname || null\n let scheme = parsed.protocol || null\n\n if (scheme) {\n // Remove colon at end\n scheme = scheme.substring(0, scheme.length - 1)\n }\n\n return {\n hostname,\n path,\n queryParams,\n scheme\n }\n}\n\nexport function validateURL(url: string, functionName: string): void {\n validateNotNullOrUndefined(url, 'url', functionName)\n validateNonEmptyString(url, 'url', functionName)\n try {\n new URL(url);\n } catch (e) {\n throw new InvalidParamError(`Invalid URL format passed to ${functionName}.`);\n }\n}\n\n/*\n Witness Utils\n*/\n\nexport async function getWitnessesForClaim(\n epoch: number,\n identifier: string,\n timestampS: number\n) {\n const beacon = makeBeacon()\n if (!beacon) throw new Error('No beacon')\n const state = await beacon.getState(epoch)\n const witnessList = fetchWitnessListForClaim(state, identifier, timestampS)\n return witnessList.map((w: WitnessData) => w.id.toLowerCase())\n}\n\n/*\n Proof Utils\n*/\n\n/** recovers the addresses of those that signed the claim */\nexport function recoverSignersOfSignedClaim({\n claim,\n signatures\n}: SignedClaim) {\n const dataStr = createSignDataForClaim({ ...claim })\n return signatures.map(signature =>\n ethers.verifyMessage(dataStr, ethers.hexlify(signature)).toLowerCase()\n )\n}\n\n/**\n * Asserts that the claim is signed by the expected witnesses\n * @param claim\n * @param expectedWitnessAddresses\n */\nexport function assertValidSignedClaim(\n claim: SignedClaim,\n expectedWitnessAddresses: string[]\n) {\n const witnessAddresses = recoverSignersOfSignedClaim(claim)\n // set of witnesses whose signatures we've not seen\n const witnessesNotSeen = new Set(expectedWitnessAddresses)\n for (const witness of witnessAddresses) {\n if (witnessesNotSeen.has(witness)) {\n witnessesNotSeen.delete(witness)\n }\n }\n\n // check if all witnesses have signed\n if (witnessesNotSeen.size > 0) {\n throw new ProofNotVerifiedError(\n `Missing signatures from ${expectedWitnessAddresses.join(', ')}`\n )\n }\n}\n\nexport async function getShortenedUrl(url: string) {\n try {\n validateURL(url, 'getShortenedUrl')\n const response = await fetch(BACKEND_BASE_URL + '/api/sdk/shortener', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n fullUrl: url\n })\n })\n const res = await response.json()\n const shortenedVerificationUrl = res.result.shortUrl\n return shortenedVerificationUrl\n } catch (err) {\n return url\n }\n}\n\nexport async function createSession(sessionId: string, appId: string, providerId: string) {\n validateNotNullOrUndefined(sessionId, 'sessionId', 'createSession')\n validateNotNullOrUndefined(appId, 'appId', 'createSession')\n validateNotNullOrUndefined(providerId, 'providerId', 'createSession')\n validateNonEmptyString(sessionId, 'sessionId', 'createSession')\n validateNonEmptyString(appId, 'appId', 'createSession')\n validateNonEmptyString(providerId, 'providerId', 'createSession')\n try {\n const response = await fetch(BACKEND_BASE_URL + '/api/sdk/create-session/', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n sessionId,\n appId,\n providerId\n })\n })\n if (!response.ok) {\n throw new CreateSessionError('Error creating session with sessionId: ' + sessionId)\n }\n const res = await response.json()\n return res\n } catch (err) {\n throw new CreateSessionError('Error creating session with sessionId: ' + sessionId)\n }\n}\n\nexport async function updateSession(sessionId: string, status: SessionStatus) {\n validateNotNullOrUndefined(sessionId, 'sessionId', 'updateSession')\n validateNonEmptyString(sessionId, 'sessionId', 'updateSession')\n try {\n const response = await fetch(BACKEND_BASE_URL + '/api/sdk/update-session/', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n sessionId,\n status\n })\n })\n if (!response.ok) {\n throw new UpdateSessionError('Error updating session with sessionId: ' + sessionId)\n }\n const res = await response.json()\n return res\n } catch (err) {\n throw new UpdateSessionError('Error updating session with sessionId: ' + sessionId)\n }\n}\n\nexport async function fetchProvidersByAppId(appId: string, providerId: string) {\n try {\n const response = await fetch(`${constants.GET_PROVIDERS_BY_ID_API}/${appId}/provider/${providerId}`)\n if (response.status === 404) {\n throw new ApplicationError('Application not found with AppId: ' + appId)\n }\n if (response.status !== 200) {\n throw new Error()\n }\n\n const res = await response.json()\n return res.providers.httpProvider\n } catch (err) {\n if (err instanceof ApplicationError) {\n throw err\n }\n throw new ProviderAPIError('Error fetching provider with AppId: ' + appId)\n }\n}\n\nexport function validateProviderIdsAndReturnProviders(providerId: string, providers: ProviderV2[]): ProviderV2 {\n let providerExists = providers.some(provider => providerId == provider.httpProviderId)\n if (!providerExists) {\n throw new ProviderAPIError(`The following provider Id is not included in your application => ${providerId}`)\n }\n return providers.find(provider => providerId == provider.httpProviderId) as ProviderV2\n}\n\nexport function generateRequestedProofs(provider: ProviderV2, context: Context, callbackUrl: string, statusUrl: string, sessionId: string, redirectUser: boolean): RequestedProofs {\n const providerParams: { [key: string]: string | undefined } = {}\n provider.responseSelections.forEach(rs => rs.responseMatch.split(/{{(.*?)}}/).filter((e, i) => i % 2).forEach(param => providerParams[param] = undefined))\n const claims = [{\n provider: encodeURIComponent(provider.name),\n context: JSON.stringify(context),\n httpProviderId: provider.httpProviderId,\n payload: {\n metadata: {\n name: encodeURIComponent(provider.name),\n logoUrl: provider.logoUrl,\n proofCardText: provider.proofCardText,\n proofCardTitle: provider.proofCardTitle,\n },\n url: provider.url,\n urlType: provider.urlType as \"CONSTANT\" | \"REGEX\",\n method: provider.method as \"GET\" | \"POST\",\n login: {\n url: provider.loginUrl\n },\n responseSelections: provider.responseSelections,\n customInjection: provider.customInjection,\n bodySniff: provider.bodySniff,\n userAgent: provider.userAgent,\n geoLocation: provider.geoLocation,\n matchType: provider.matchType,\n injectionType: provider.injectionType,\n disableRequestReplay: provider.disableRequestReplay,\n parameters: providerParams\n }\n }] as RequestedClaim[];\n\n return {\n id: sessionId,\n sessionId: sessionId,\n name: redirectUser ? \"web-r-SDK\" : 'web-SDK',\n callbackUrl: callbackUrl,\n statusUrl: statusUrl,\n claims: claims\n };\n}\n\nexport function validateSignature(requestedProofs: RequestedProofs, signature: Signature, applicationId: ApplicationId) {\n try {\n const appId = ethers\n .verifyMessage(\n ethers.getBytes(\n ethers.keccak256(\n new TextEncoder().encode(canonicalize(requestedProofs)!)\n )\n ),\n ethers.hexlify(signature as unknown as string)\n )\n .toLowerCase()\n\n if (ethers.getAddress(appId) !== ethers.getAddress(applicationId)) {\n throw new InvalidSignatureError(`Signature does not match the application id: ${appId}`)\n }\n } catch (err) {\n throw err\n }\n}\n\nexport function escapeRegExp(string: string) {\n return string.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&'); // $& means the whole matched string\n}\n\nexport function replaceAll(str: string, find: string, replace: string) {\n return str.replace(new RegExp(escapeRegExp(find), 'g'), replace);\n}","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n\nimport { Contract } from 'ethers';\n\nconst _abi = [\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: 'address',\n name: 'previousAdmin',\n type: 'address',\n },\n {\n indexed: false,\n internalType: 'address',\n name: 'newAdmin',\n type: 'address',\n },\n ],\n name: 'AdminChanged',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'address',\n name: 'beacon',\n type: 'address',\n },\n ],\n name: 'BeaconUpgraded',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n components: [\n {\n internalType: 'uint32',\n name: 'id',\n type: 'uint32',\n },\n {\n internalType: 'uint32',\n name: 'timestampStart',\n type: 'uint32',\n },\n {\n internalType: 'uint32',\n name: 'timestampEnd',\n type: 'uint32',\n },\n {\n components: [\n {\n internalType: 'address',\n name: 'addr',\n type: 'address',\n },\n {\n internalType: 'string',\n name: 'host',\n type: 'string',\n },\n ],\n internalType: 'struct Reclaim.Witness[]',\n name: 'witnesses',\n type: 'tuple[]',\n },\n {\n internalType: 'uint8',\n name: 'minimumWitnessesForClaimCreation',\n type: 'uint8',\n },\n ],\n indexed: false,\n internalType: 'struct Reclaim.Epoch',\n name: 'epoch',\n type: 'tuple',\n },\n ],\n name: 'EpochAdded',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: 'uint8',\n name: 'version',\n type: 'uint8',\n },\n ],\n name: 'Initialized',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'address',\n name: 'previousOwner',\n type: 'address',\n },\n {\n indexed: true,\n internalType: 'address',\n name: 'newOwner',\n type: 'address',\n },\n ],\n name: 'OwnershipTransferred',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'address',\n name: 'implementation',\n type: 'address',\n },\n ],\n name: 'Upgraded',\n type: 'event',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'witnessAddress',\n type: 'address',\n },\n {\n internalType: 'string',\n name: 'host',\n type: 'string',\n },\n ],\n name: 'addAsWitness',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [],\n name: 'addNewEpoch',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'uint32',\n name: 'epochNum',\n type: 'uint32',\n },\n {\n components: [\n {\n internalType: 'string',\n name: 'provider',\n type: 'string',\n },\n {\n internalType: 'string',\n name: 'parameters',\n type: 'string',\n },\n {\n internalType: 'string',\n name: 'context',\n type: 'string',\n },\n ],\n internalType: 'struct Claims.ClaimInfo',\n name: 'claimInfo',\n type: 'tuple',\n },\n {\n components: [\n {\n internalType: 'bytes32',\n name: 'identifier',\n type: 'bytes32',\n },\n {\n internalType: 'address',\n name: 'owner',\n type: 'address',\n },\n {\n internalType: 'uint32',\n name: 'timestampS',\n type: 'uint32',\n },\n {\n internalType: 'uint256',\n name: 'epoch',\n type: 'uint256',\n },\n ],\n internalType: 'struct Claims.CompleteClaimData',\n name: 'claimData',\n type: 'tuple',\n },\n {\n internalType: 'bytes[]',\n name: 'signatures',\n type: 'bytes[]',\n },\n ],\n name: 'assertValidEpochAndSignedClaim',\n outputs: [],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'currentEpoch',\n outputs: [\n {\n internalType: 'uint32',\n name: '',\n type: 'uint32',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'epochDurationS',\n outputs: [\n {\n internalType: 'uint32',\n name: '',\n type: 'uint32',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n name: 'epochs',\n outputs: [\n {\n internalType: 'uint32',\n name: 'id',\n type: 'uint32',\n },\n {\n internalType: 'uint32',\n name: 'timestampStart',\n type: 'uint32',\n },\n {\n internalType: 'uint32',\n name: 'timestampEnd',\n type: 'uint32',\n },\n {\n internalType: 'uint8',\n name: 'minimumWitnessesForClaimCreation',\n type: 'uint8',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'uint32',\n name: 'epoch',\n type: 'uint32',\n },\n ],\n name: 'fetchEpoch',\n outputs: [\n {\n components: [\n {\n internalType: 'uint32',\n name: 'id',\n type: 'uint32',\n },\n {\n internalType: 'uint32',\n name: 'timestampStart',\n type: 'uint32',\n },\n {\n internalType: 'uint32',\n name: 'timestampEnd',\n type: 'uint32',\n },\n {\n components: [\n {\n internalType: 'address',\n name: 'addr',\n type: 'address',\n },\n {\n internalType: 'string',\n name: 'host',\n type: 'string',\n },\n ],\n internalType: 'struct Reclaim.Witness[]',\n name: 'witnesses',\n type: 'tuple[]',\n },\n {\n internalType: 'uint8',\n name: 'minimumWitnessesForClaimCreation',\n type: 'uint8',\n },\n ],\n internalType: 'struct Reclaim.Epoch',\n name: '',\n type: 'tuple',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'uint32',\n name: 'epoch',\n type: 'uint32',\n },\n {\n internalType: 'bytes32',\n name: 'identifier',\n type: 'bytes32',\n },\n {\n internalType: 'uint32',\n name: 'timestampS',\n type: 'uint32',\n },\n ],\n name: 'fetchWitnessesForClaim',\n outputs: [\n {\n components: [\n {\n internalType: 'address',\n name: 'addr',\n type: 'address',\n },\n {\n internalType: 'string',\n name: 'host',\n type: 'string',\n },\n ],\n internalType: 'struct Reclaim.Witness[]',\n name: '',\n type: 'tuple[]',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'initialize',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [],\n name: 'minimumWitnessesForClaimCreation',\n outputs: [\n {\n internalType: 'uint8',\n name: '',\n type: 'uint8',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'owner',\n outputs: [\n {\n internalType: 'address',\n name: '',\n type: 'address',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'proxiableUUID',\n outputs: [\n {\n internalType: 'bytes32',\n name: '',\n type: 'bytes32',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'witnessAddress',\n type: 'address',\n },\n ],\n name: 'removeAsWitness',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [],\n name: 'renounceOwnership',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'newOwner',\n type: 'address',\n },\n ],\n name: 'transferOwnership',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'addr',\n type: 'address',\n },\n {\n internalType: 'bool',\n name: 'isWhitelisted',\n type: 'bool',\n },\n ],\n name: 'updateWitnessWhitelist',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'newImplementation',\n type: 'address',\n },\n ],\n name: 'upgradeTo',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'newImplementation',\n type: 'address',\n },\n {\n internalType: 'bytes',\n name: 'data',\n type: 'bytes',\n },\n ],\n name: 'upgradeToAndCall',\n outputs: [],\n stateMutability: 'payable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n name: 'witnesses',\n outputs: [\n {\n internalType: 'address',\n name: 'addr',\n type: 'address',\n },\n {\n internalType: 'string',\n name: 'host',\n type: 'string',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n] as const;\n\nexport class Reclaim__factory {\n static readonly abi = _abi;\n\n static connect(address: string, signerOrProvider: any): Contract {\n return new Contract(address, _abi, signerOrProvider);\n }\n}\n","{\n \"0x1a4\": {\n \"chainName\": \"opt-goerli\",\n \"address\": \"0xF93F605142Fb1Efad7Aa58253dDffF67775b4520\",\n \"rpcUrl\": \"https://opt-goerli.g.alchemy.com/v2/rksDkSUXd2dyk2ANy_zzODknx_AAokui\"\n },\n \"0xaa37dc\": {\n \"chainName\": \"opt-sepolia\",\n \"address\": \"0x6D0f81BDA11995f25921aAd5B43359630E65Ca96\",\n \"rpcUrl\": \"https://opt-sepolia.g.alchemy.com/v2/aO1-SfG4oFRLyAiLREqzyAUu0HTCwHgs\"\n}\n\n}\n","import type { Beacon, BeaconState } from './interfaces';\nimport { Reclaim__factory as ReclaimFactory } from './contract-types';\nimport CONTRACTS_CONFIG from './contract-types/config.json';\nimport { Contract, ethers } from 'ethers';\n\nconst DEFAULT_CHAIN_ID = 11155420;\n\nexport function makeBeacon(chainId?: number): Beacon | undefined {\n chainId = chainId || DEFAULT_CHAIN_ID;\n const contract = getContract(chainId);\n if (contract) {\n return makeBeaconCacheable({\n async getState(epochId: number | undefined): Promise<BeaconState> {\n //@ts-ignore\n const epoch = await contract.fetchEpoch(epochId || 0);\n if (!epoch.id) {\n throw new Error(`Invalid epoch ID: ${epochId}`);\n }\n\n return {\n epoch: epoch.id,\n witnesses: epoch.witnesses.map((w: any) => ({\n id: w.addr.toLowerCase(),\n url: w.host,\n })),\n witnessesRequiredForClaim: epoch.minimumWitnessesForClaimCreation,\n nextEpochTimestampS: epoch.timestampEnd,\n };\n },\n });\n } else {\n return undefined;\n }\n}\n\nexport function makeBeaconCacheable(beacon: Beacon): Beacon {\n const cache: { [epochId: number]: Promise<BeaconState> } = {};\n\n return {\n ...beacon,\n async getState(epochId: number | undefined): Promise<BeaconState> {\n if (!epochId) {\n // TODO: add cache here\n const state = await beacon.getState();\n return state;\n }\n\n const key = epochId;\n\n if (!cache[key]) {\n cache[key] = beacon.getState(epochId);\n }\n\n return cache[key] as unknown as BeaconState;\n },\n };\n}\n\nconst existingContractsMap: { [chain: string]: Contract } = {};\n\nfunction getContract(chainId: number): Contract {\n const chainKey = `0x${chainId.toString(16)}`;\n if (!existingContractsMap[chainKey]) {\n const contractData =\n CONTRACTS_CONFIG[chainKey as keyof typeof CONTRACTS_CONFIG];\n if (!contractData) {\n throw new Error(`Unsupported chain: \"${chainKey}\"`);\n }\n\n const rpcProvider = new ethers.JsonRpcProvider(contractData.rpcUrl);\n existingContractsMap[chainKey] = ReclaimFactory.connect(\n contractData.address,\n rpcProvider\n );\n }\n\n return existingContractsMap[chainKey] as Contract;\n}\n","// export const BACKEND_BASE_URL = \"http://localhost:3003\"\nexport const BACKEND_BASE_URL = \"https://api.reclaimprotocol.org\"\nexport const constants = {\n GET_PROVIDERS_BY_ID_API:\n BACKEND_BASE_URL + '/api/applications',\n DEFAULT_RECLAIM_CALLBACK_URL:\n BACKEND_BASE_URL + '/api/sdk/callback?callbackId=',\n DEFAULT_RECLAIM_STATUS_URL:\n BACKEND_BASE_URL + '/api/sdk/session/',\n RECLAIM_SHARE_URL: 'https://share.reclaimprotocol.org/instant/?template=',\n RECLAIM_GET_BRANCH_URL: \n BACKEND_BASE_URL + '/api/sdk/get-branch-url' \n};\n","\n\nexport class TimeoutError extends Error {\n constructor(message: string) {\n super(message)\n this.name = 'TimeoutError'\n }\n}\n\n\nexport class ProofNotVerifiedError extends Error {\n constructor(message?: string) {\n super(message)\n this.name = 'ProofNotVerifiedError'\n }\n}\n\nexport class SessionNotStartedError extends Error {\n constructor(message?: string) {\n super(message)\n this.name = 'SessionNotStartedError'\n }\n}\n\nexport class ProviderAPIError extends Error {\n constructor(message?: string) {\n super(message)\n this.name = 'ProviderAPIError'\n }\n}\n\nexport class BuildProofRequestError extends Error {\n constructor(message?: string) {\n super(message)\n this.name = 'BuildProofRequest'\n }\n}\n\nexport class SignatureGeneratingError extends Error {\n constructor(message?: string) {\n super(message)\n this.name = 'SignatureGeneratingError'\n }\n}\n\nexport class SignatureNotFoundError extends Error {\n constructor(message?: string) {\n super(message)\n this.name = 'SignatureNotFound'\n }\n}\n\nexport class InvalidSignatureError extends Error {\n constructor(message?: string) {\n super(message)\n this.name = 'InvalidSignatureError'\n }\n}\n\n\nexport class UpdateSessionError extends Error {\n constructor(message?: string) {\n super(message)\n this.name = 'UpdateSessionError'\n }\n}\n\nexport class CreateSessionError extends Error {\n constructor(message?: string) {\n super(message)\n this.name = 'CreateSessionError'\n }\n}\n\nexport class ProviderFailedError extends Error {\n constructor(message?: string) {\n super(message)\n this.name = 'ProviderFailedError'\n }\n}\nexport class InvalidParamError extends Error {\n constructor(message?: string) {\n super(message)\n this.name = 'InvalidParamError'\n }\n}\nexport class ApplicationError extends Error {\n constructor(message?: string) {\n super(message)\n this.name = 'ApplicationError'\n }\n}"],"mappings":"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","names":["import_ethers","import_canonicalize","import_ethers","import_ethers","import_ethers","URL","canonicalize","P","canonicalize","e"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@reclaimprotocol/js-sdk",
3
- "version": "1.3.6",
3
+ "version": "1.3.7",
4
4
  "description": "Designed to request proofs from the Reclaim protocol and manage the flow of claims and witness interactions.",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -72,4 +72,4 @@
72
72
  "url-parse": "^1.5.10",
73
73
  "uuid": "^9.0.1"
74
74
  }
75
- }
75
+ }