@reclaimprotocol/js-sdk 0.0.21 → 0.0.23

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
@@ -102,9 +102,6 @@ interface Payload {
102
102
  xPath?: string;
103
103
  jsonPath?: string;
104
104
  }[];
105
- parameters: {
106
- [key: string]: string;
107
- };
108
105
  headers?: {
109
106
  [key: string]: string;
110
107
  };
@@ -117,7 +114,6 @@ interface Payload {
117
114
  ios?: string;
118
115
  android?: string;
119
116
  };
120
- useZk?: boolean;
121
117
  geoLocation?: string;
122
118
  matchType?: string;
123
119
  }
package/dist/index.js CHANGED
@@ -964,12 +964,10 @@ var ReclaimClient = class {
964
964
  login: {
965
965
  url: provider.loginUrl
966
966
  },
967
- parameters: {},
968
967
  responseSelections: provider.responseSelections,
969
968
  customInjection: provider.customInjection,
970
969
  bodySniff: provider.bodySniff,
971
970
  userAgent: provider.userAgent,
972
- useZk: true,
973
971
  geoLocation: provider.geoLocation ? provider.geoLocation : "",
974
972
  matchType: provider.matchType ? provider.matchType : "greedy"
975
973
  }
@@ -1038,7 +1036,7 @@ var ReclaimClient = class {
1038
1036
  if (!appResponse.ok) {
1039
1037
  throw new Error("Failed to fetch HTTP providers");
1040
1038
  }
1041
- this.myProvidersList = (yield appResponse.json()).result.providers;
1039
+ this.myProvidersList = (yield appResponse.json()).providers.httpProvider;
1042
1040
  return this.myProvidersList;
1043
1041
  });
1044
1042
  }
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"],"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 { ProviderV2, Proof, RequestedProofs, Context, RequestedClaim } from './interfaces'\nimport { getIdentifierFromClaimInfo } from './witness'\nimport type { SignedClaim } from './types'\nimport { v4 } from 'uuid'\nimport { ethers } from 'ethers'\nimport canonicalize from 'canonicalize'\nimport { getWitnessesForClaim, assertValidSignedClaim, getShortenedUrl } from './utils'\nimport { constants } from './constants'\n\nconst DEFAULT_RECLAIM_CALLBACK_URL =\n 'https://api.reclaimprotocol.org/api/sdk/callback?callbackId='\nconst DEFAULT_RECLAIM_STATUS_URL =\n 'https://api.reclaimprotocol.org/api/sdk/session/'\nconst RECLAIM_SHARE_URL = 'https://share.reclaimprotocol.org/instant/?template='\n\nfunction escapeRegExp(string: string) {\n return string.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&'); // $& means the whole matched string\n}\nfunction replaceAll(str: string, find: string, replace: string) {\n return str.replace(new RegExp(escapeRegExp(find), 'g'), replace);\n}\n\n\n\nexport class ReclaimClient {\n applicationId: string\n signature?: string\n appCallbackUrl?: string\n statusUrl?: string\n sessionId: string = ''\n requestedProofs?: RequestedProofs\n context: Context = { contextAddress: '0x0', contextMessage: '' }\n verificationRequest?: ReclaimVerificationRequest\n myProvidersList: ProviderV2[] = []\n\n constructor(applicationId: string, sessionId?: string) {\n this.applicationId = applicationId\n if (sessionId) {\n this.sessionId = sessionId\n } else {\n this.sessionId = v4().toString()\n }\n }\n\n async createVerificationRequest(providers: string[]) {\n const template = await this.createLinkRequest(providers)\n this.verificationRequest = new ReclaimVerificationRequest(\n this.sessionId,\n this.getStatusUrl(),\n template\n )\n\n return this.verificationRequest\n }\n\n async createLinkRequest(providers: string[]) {\n const appCallbackUrl = await this.getAppCallbackUrl()\n const providersV2 = await this.buildHttpProviderV2ByID(providers)\n if (!this.requestedProofs) {\n await this.buildRequestedProofs(providersV2, appCallbackUrl)\n }\n\n if (!this.signature) {\n throw new Error('Signature is not set')\n }\n\n const appId = ethers\n .verifyMessage(\n ethers.getBytes(\n ethers.keccak256(\n new TextEncoder().encode(canonicalize(this.requestedProofs)!)\n )\n ),\n ethers.hexlify(this.signature)\n )\n .toLowerCase()\n\n if (ethers.getAddress(appId) !== ethers.getAddress(this.applicationId)) {\n throw new Error('Invalid signature')\n }\n\n\n const templateData = { ...this.requestedProofs, signature: this.signature }\n let template = `${RECLAIM_SHARE_URL}${encodeURIComponent(\n JSON.stringify(templateData)\n )}`\n template = replaceAll(template, '(', '%28')\n template = replaceAll(template, ')', '%29')\n template = await getShortenedUrl(template)\n\n return template\n }\n\n setAppCallbackUrl(url: string) {\n this.appCallbackUrl = url\n }\n\n getAppCallbackUrl() {\n let appCallbackUrl = this.appCallbackUrl\n if (!appCallbackUrl) {\n appCallbackUrl = `${DEFAULT_RECLAIM_CALLBACK_URL}${this.sessionId}`\n }\n return appCallbackUrl\n }\n\n setStatusUrl(url: string) {\n this.statusUrl = url\n }\n\n getStatusUrl() {\n let statusUrl = this.statusUrl\n if (!statusUrl) {\n statusUrl = `${DEFAULT_RECLAIM_STATUS_URL}${this.sessionId}`\n }\n return statusUrl\n }\n\n setSignature(signature: string) {\n this.signature = signature\n }\n\n // @dev Use this function only in development environments\n async getSignature(\n requestedProofs: RequestedProofs,\n applicationSecret: string\n ): Promise<string> {\n const wallet = new ethers.Wallet(applicationSecret)\n const signature = await wallet.signMessage(\n ethers.getBytes(\n ethers.keccak256(\n new TextEncoder().encode(canonicalize(requestedProofs)!)\n )\n )\n )\n\n return signature\n }\n\n async buildHttpProviderV2ByID(\n providerIds: string[]\n ): Promise<ProviderV2[]> {\n\n let appProviders: ProviderV2[] = [];\n\n try {\n\n if (providerIds.length === 0) throw new Error('No provider Ids provided. Please pass at least one provider Id. Check https://dev.reclaimprotocol.org/applications for more details.')\n\n if(this.myProvidersList.length > 0) {\n appProviders = this.myProvidersList\n } else {\n const appProvidersUrl = `${constants.GET_PROVIDERS_BY_ID_API}/${this.applicationId}`\n const appResponse = await fetch(appProvidersUrl)\n \n if (!appResponse.ok) {\n throw new Error('Failed to fetch HTTP providers')\n }\n \n try {\n appProviders = (await appResponse.json()).providers.httpProvider as ProviderV2[]\n } catch (e) {\n throw new Error('APP_ID is not valid! Please try again once more.')\n }\n }\n\n for (let i = 0; i < providerIds.length; i++) {\n const providerToAdd = appProviders.find(provider => {\n return provider.httpProviderId === providerIds[i]\n })\n if (!providerToAdd) {\n throw new Error('Required provider Id ' + providerIds[i] + ' not register to the app make sure you are using the right providerId Available Provider Ids : ' + appProviders.map(p => p.httpProviderId).join(','))\n }\n }\n return appProviders.filter(provider => providerIds.includes(provider.httpProviderId))\n } catch (error) {\n console.error(`Error fetching HTTP providers ${providerIds}:`, error)\n throw error\n }\n }\n\n buildRequestedProofs(\n providers: ProviderV2[],\n callbackUrl: string,\n statusUrl?: string\n ): RequestedProofs {\n const claims = providers.map(provider => {\n return {\n provider: encodeURIComponent(provider.name),\n context: JSON.stringify(this.context),\n templateClaimId: provider.id,\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 parameters: {},\n responseSelections: provider.responseSelections,\n customInjection: provider.customInjection,\n bodySniff: provider.bodySniff,\n userAgent: provider.userAgent,\n useZk: true,\n geoLocation: provider.geoLocation ? provider.geoLocation : '',\n matchType: provider.matchType ? provider.matchType : 'greedy'\n }\n } as RequestedClaim;\n });\n\n this.requestedProofs = {\n id: v4().toString(),\n sessionId: this.sessionId,\n name: 'web-SDK',\n callbackUrl: callbackUrl,\n statusUrl: statusUrl ? statusUrl : this.getStatusUrl(),\n claims: claims\n };\n\n return this.requestedProofs!;\n }\n\n addContext(address: string, message: string) {\n // TODO: sync data on backend\n this.context = {\n contextAddress: address,\n contextMessage: message\n }\n return this.context\n }\n\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 = proof.identifier.replace('\"', '')\n proof.identifier = proof.identifier.replace('\"', '')\n // check if the identifier matches the one in the proof\n if (calculatedIdentifier !== proof.identifier) {\n throw new Error('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 console.error(e)\n return false\n }\n\n return true\n }\n\n async getMyProvidersList() {\n if (this.myProvidersList.length > 0) return this.myProvidersList\n\n const appProvidersUrl = `${constants.GET_PROVIDERS_BY_ID_API}/${this.applicationId}`\n const appResponse = await fetch(appProvidersUrl)\n if (!appResponse.ok) {\n throw new Error('Failed to fetch HTTP providers')\n }\n\n this.myProvidersList = (await appResponse.json()).result.providers as ProviderV2[]\n return this.myProvidersList\n }\n}\n\nexport class ReclaimVerificationRequest {\n onSuccessCallback?: (data: Proof | Error | unknown) => void | unknown\n onFailureCallback?: (data: Proof | Error | unknown) => void | unknown\n sessionId: string\n template: string\n statusUrl: string\n intervals: Map<string, NodeJS.Timer> = new Map()\n\n constructor(sessionId: string, statusUrl: string, template: string) {\n this.sessionId = sessionId\n this.statusUrl = statusUrl\n this.template = template\n }\n\n on(\n event: string,\n callback: (data: Proof | Error | unknown) => void | unknown\n ) {\n if (event === 'success') {\n this.onSuccessCallback = callback\n }\n if (event === 'error') {\n this.onFailureCallback = callback\n }\n return this\n }\n\n async start() {\n if (this.statusUrl && this.sessionId) {\n const interval = setInterval(async () => {\n try {\n const res = await fetch(this.statusUrl)\n const data = await res.json()\n\n if (!data.session) return\n\n data.session.proofs.forEach(async (proof: Proof) => {\n const verified = await ReclaimClient.verifySignedProof(proof)\n if (!verified) {\n throw new Error('Proof not verified')\n }\n })\n if (this.onSuccessCallback) {\n this.onSuccessCallback(data.session.proofs)\n }\n clearInterval(this.intervals.get(this.sessionId!))\n this.intervals.delete(this.sessionId!)\n } catch (e: Error | unknown) {\n if (this.onFailureCallback) {\n this.onFailureCallback(e)\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\n setTimeout(() => {\n if (this.intervals.has(this.sessionId)) {\n clearInterval(this.intervals.get(this.sessionId!))\n }\n }, 1000 * 60 * 5)\n\n return this.template\n }\n }\n}\n","import URL from 'url-parse'\nimport type { ParsedURL, SignedClaim } from './types'\nimport type { WitnessData } from './interfaces'\nimport { ethers } from 'ethers'\nimport { makeBeacon } from './smart-contract'\nimport { fetchWitnessListForClaim, createSignDataForClaim } from './witness'\n\n/*\n URL utils\n*/\nexport function parse (url: string): ParsedURL {\n validateURL(url)\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\nfunction validateURL (url: string): void {\n if (typeof url !== 'string') {\n throw new Error(`Invalid URL: ${url}. URL must be a string.`)\n }\n if (!url) {\n throw new Error(`Invalid URL: ${url}. URL cannot be empty`)\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 Error(\n `Missing signatures from ${expectedWitnessAddresses.join(', ')}`\n )\n }\n}\n\nexport async function getShortenedUrl (url: string) {\n try {\n const response = await fetch('https://api.reclaimprotocol.org/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","/* 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}\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 = 420;\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 constants = {\n \"GET_PROVIDERS_BY_ID_API\": \"https://api.reclaimprotocol.org/api/applications/providers\",\n};"],"mappings":"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","names":["import_ethers","import_ethers","import_ethers","import_ethers","canonicalize"]}
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"],"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 { ProviderV2, Proof, RequestedProofs, Context, RequestedClaim } from './interfaces'\nimport { getIdentifierFromClaimInfo } from './witness'\nimport type { SignedClaim } from './types'\nimport { v4 } from 'uuid'\nimport { ethers } from 'ethers'\nimport canonicalize from 'canonicalize'\nimport { getWitnessesForClaim, assertValidSignedClaim, getShortenedUrl } from './utils'\nimport { constants } from './constants'\n\nconst DEFAULT_RECLAIM_CALLBACK_URL =\n 'https://api.reclaimprotocol.org/api/sdk/callback?callbackId='\nconst DEFAULT_RECLAIM_STATUS_URL =\n 'https://api.reclaimprotocol.org/api/sdk/session/'\nconst RECLAIM_SHARE_URL = 'https://share.reclaimprotocol.org/instant/?template='\n\nfunction escapeRegExp(string: string) {\n return string.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&'); // $& means the whole matched string\n}\nfunction replaceAll(str: string, find: string, replace: string) {\n return str.replace(new RegExp(escapeRegExp(find), 'g'), replace);\n}\n\n\n\nexport class ReclaimClient {\n applicationId: string\n signature?: string\n appCallbackUrl?: string\n statusUrl?: string\n sessionId: string = ''\n requestedProofs?: RequestedProofs\n context: Context = { contextAddress: '0x0', contextMessage: '' }\n verificationRequest?: ReclaimVerificationRequest\n myProvidersList: ProviderV2[] = []\n\n constructor(applicationId: string, sessionId?: string) {\n this.applicationId = applicationId\n if (sessionId) {\n this.sessionId = sessionId\n } else {\n this.sessionId = v4().toString()\n }\n }\n\n async createVerificationRequest(providers: string[]) {\n const template = await this.createLinkRequest(providers)\n this.verificationRequest = new ReclaimVerificationRequest(\n this.sessionId,\n this.getStatusUrl(),\n template\n )\n\n return this.verificationRequest\n }\n\n async createLinkRequest(providers: string[]) {\n const appCallbackUrl = await this.getAppCallbackUrl()\n const providersV2 = await this.buildHttpProviderV2ByID(providers)\n if (!this.requestedProofs) {\n await this.buildRequestedProofs(providersV2, appCallbackUrl)\n }\n\n if (!this.signature) {\n throw new Error('Signature is not set')\n }\n\n const appId = ethers\n .verifyMessage(\n ethers.getBytes(\n ethers.keccak256(\n new TextEncoder().encode(canonicalize(this.requestedProofs)!)\n )\n ),\n ethers.hexlify(this.signature)\n )\n .toLowerCase()\n\n if (ethers.getAddress(appId) !== ethers.getAddress(this.applicationId)) {\n throw new Error('Invalid signature')\n }\n\n\n const templateData = { ...this.requestedProofs, signature: this.signature }\n let template = `${RECLAIM_SHARE_URL}${encodeURIComponent(\n JSON.stringify(templateData)\n )}`\n template = replaceAll(template, '(', '%28')\n template = replaceAll(template, ')', '%29')\n template = await getShortenedUrl(template)\n\n return template\n }\n\n setAppCallbackUrl(url: string) {\n this.appCallbackUrl = url\n }\n\n getAppCallbackUrl() {\n let appCallbackUrl = this.appCallbackUrl\n if (!appCallbackUrl) {\n appCallbackUrl = `${DEFAULT_RECLAIM_CALLBACK_URL}${this.sessionId}`\n }\n return appCallbackUrl\n }\n\n setStatusUrl(url: string) {\n this.statusUrl = url\n }\n\n getStatusUrl() {\n let statusUrl = this.statusUrl\n if (!statusUrl) {\n statusUrl = `${DEFAULT_RECLAIM_STATUS_URL}${this.sessionId}`\n }\n return statusUrl\n }\n\n setSignature(signature: string) {\n this.signature = signature\n }\n\n // @dev Use this function only in development environments\n async getSignature(\n requestedProofs: RequestedProofs,\n applicationSecret: string\n ): Promise<string> {\n const wallet = new ethers.Wallet(applicationSecret)\n const signature = await wallet.signMessage(\n ethers.getBytes(\n ethers.keccak256(\n new TextEncoder().encode(canonicalize(requestedProofs)!)\n )\n )\n )\n\n return signature\n }\n\n async buildHttpProviderV2ByID(\n providerIds: string[]\n ): Promise<ProviderV2[]> {\n\n let appProviders: ProviderV2[] = [];\n\n try {\n\n if (providerIds.length === 0) throw new Error('No provider Ids provided. Please pass at least one provider Id. Check https://dev.reclaimprotocol.org/applications for more details.')\n\n if(this.myProvidersList.length > 0) {\n appProviders = this.myProvidersList\n } else {\n const appProvidersUrl = `${constants.GET_PROVIDERS_BY_ID_API}/${this.applicationId}`\n const appResponse = await fetch(appProvidersUrl)\n \n if (!appResponse.ok) {\n throw new Error('Failed to fetch HTTP providers')\n }\n \n try {\n appProviders = (await appResponse.json()).providers.httpProvider as ProviderV2[]\n } catch (e) {\n throw new Error('APP_ID is not valid! Please try again once more.')\n }\n }\n\n for (let i = 0; i < providerIds.length; i++) {\n const providerToAdd = appProviders.find(provider => {\n return provider.httpProviderId === providerIds[i]\n })\n if (!providerToAdd) {\n throw new Error('Required provider Id ' + providerIds[i] + ' not register to the app make sure you are using the right providerId Available Provider Ids : ' + appProviders.map(p => p.httpProviderId).join(','))\n }\n }\n return appProviders.filter(provider => providerIds.includes(provider.httpProviderId))\n } catch (error) {\n console.error(`Error fetching HTTP providers ${providerIds}:`, error)\n throw error\n }\n }\n\n buildRequestedProofs(\n providers: ProviderV2[],\n callbackUrl: string,\n statusUrl?: string\n ): RequestedProofs {\n const claims = providers.map(provider => {\n return {\n provider: encodeURIComponent(provider.name),\n context: JSON.stringify(this.context),\n templateClaimId: provider.id,\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 ? provider.geoLocation : '',\n matchType: provider.matchType ? provider.matchType : 'greedy'\n }\n } as RequestedClaim;\n });\n\n this.requestedProofs = {\n id: v4().toString(),\n sessionId: this.sessionId,\n name: 'web-SDK',\n callbackUrl: callbackUrl,\n statusUrl: statusUrl ? statusUrl : this.getStatusUrl(),\n claims: claims\n };\n\n return this.requestedProofs!;\n }\n\n addContext(address: string, message: string) {\n // TODO: sync data on backend\n this.context = {\n contextAddress: address,\n contextMessage: message\n }\n return this.context\n }\n\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 = proof.identifier.replace('\"', '')\n proof.identifier = proof.identifier.replace('\"', '')\n // check if the identifier matches the one in the proof\n if (calculatedIdentifier !== proof.identifier) {\n throw new Error('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 console.error(e)\n return false\n }\n\n return true\n }\n\n async getMyProvidersList() {\n if (this.myProvidersList.length > 0) return this.myProvidersList\n\n const appProvidersUrl = `${constants.GET_PROVIDERS_BY_ID_API}/${this.applicationId}`\n const appResponse = await fetch(appProvidersUrl)\n if (!appResponse.ok) {\n throw new Error('Failed to fetch HTTP providers')\n }\n\n this.myProvidersList = (await appResponse.json()).providers.httpProvider as ProviderV2[]\n return this.myProvidersList\n }\n}\n\nexport class ReclaimVerificationRequest {\n onSuccessCallback?: (data: Proof | Error | unknown) => void | unknown\n onFailureCallback?: (data: Proof | Error | unknown) => void | unknown\n sessionId: string\n template: string\n statusUrl: string\n intervals: Map<string, NodeJS.Timer> = new Map()\n\n constructor(sessionId: string, statusUrl: string, template: string) {\n this.sessionId = sessionId\n this.statusUrl = statusUrl\n this.template = template\n }\n\n on(\n event: string,\n callback: (data: Proof | Error | unknown) => void | unknown\n ) {\n if (event === 'success') {\n this.onSuccessCallback = callback\n }\n if (event === 'error') {\n this.onFailureCallback = callback\n }\n return this\n }\n\n async start() {\n if (this.statusUrl && this.sessionId) {\n const interval = setInterval(async () => {\n try {\n const res = await fetch(this.statusUrl)\n const data = await res.json()\n\n if (!data.session) return\n\n data.session.proofs.forEach(async (proof: Proof) => {\n const verified = await ReclaimClient.verifySignedProof(proof)\n if (!verified) {\n throw new Error('Proof not verified')\n }\n })\n if (this.onSuccessCallback) {\n this.onSuccessCallback(data.session.proofs)\n }\n clearInterval(this.intervals.get(this.sessionId!))\n this.intervals.delete(this.sessionId!)\n } catch (e: Error | unknown) {\n if (this.onFailureCallback) {\n this.onFailureCallback(e)\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\n setTimeout(() => {\n if (this.intervals.has(this.sessionId)) {\n clearInterval(this.intervals.get(this.sessionId!))\n }\n }, 1000 * 60 * 5)\n\n return this.template\n }\n }\n}\n","import URL from 'url-parse'\nimport type { ParsedURL, SignedClaim } from './types'\nimport type { WitnessData } from './interfaces'\nimport { ethers } from 'ethers'\nimport { makeBeacon } from './smart-contract'\nimport { fetchWitnessListForClaim, createSignDataForClaim } from './witness'\n\n/*\n URL utils\n*/\nexport function parse (url: string): ParsedURL {\n validateURL(url)\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\nfunction validateURL (url: string): void {\n if (typeof url !== 'string') {\n throw new Error(`Invalid URL: ${url}. URL must be a string.`)\n }\n if (!url) {\n throw new Error(`Invalid URL: ${url}. URL cannot be empty`)\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 Error(\n `Missing signatures from ${expectedWitnessAddresses.join(', ')}`\n )\n }\n}\n\nexport async function getShortenedUrl (url: string) {\n try {\n const response = await fetch('https://api.reclaimprotocol.org/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","/* 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}\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 = 420;\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 constants = {\n \"GET_PROVIDERS_BY_ID_API\": \"https://api.reclaimprotocol.org/api/applications/providers\",\n};"],"mappings":"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","names":["import_ethers","import_ethers","import_ethers","import_ethers","canonicalize"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@reclaimprotocol/js-sdk",
3
- "version": "0.0.21",
3
+ "version": "0.0.23",
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",