@reclaimprotocol/js-sdk 0.0.13 → 0.0.14

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
@@ -124,6 +124,7 @@ declare class ReclaimClient {
124
124
  requestedProofs?: RequestedProofs;
125
125
  context: Context;
126
126
  verificationRequest?: ReclaimVerificationRequest;
127
+ myProvidersList: ProviderV2[];
127
128
  constructor(applicationId: string, sessionId?: string);
128
129
  createVerificationRequest(providers: string[]): Promise<ReclaimVerificationRequest>;
129
130
  createLinkRequest(providers: string[]): Promise<string>;
@@ -137,6 +138,7 @@ declare class ReclaimClient {
137
138
  buildRequestedProofs(providers: ProviderV2[], callbackUrl: string, statusUrl?: string): RequestedProofs;
138
139
  addContext(address: string, message: string): Context;
139
140
  static verifySignedProof(proof: Proof): Promise<boolean>;
141
+ getMyProvidersList(): Promise<ProviderV2[]>;
140
142
  }
141
143
  declare class ReclaimVerificationRequest {
142
144
  onSuccessCallback?: (data: Proof | Error | unknown) => void | unknown;
package/dist/index.js CHANGED
@@ -804,6 +804,11 @@ function getShortenedUrl(url) {
804
804
  });
805
805
  }
806
806
 
807
+ // src/constants.ts
808
+ var constants = {
809
+ "GET_PROVIDERS_BY_ID_API": "https://api.reclaimprotocol.org/v2/app-http-providers"
810
+ };
811
+
807
812
  // src/Reclaim.ts
808
813
  var DEFAULT_RECLAIM_CALLBACK_URL = "https://api.reclaimprotocol.org/v2/callback?callbackId=";
809
814
  var DEFAULT_RECLAIM_STATUS_URL = "https://api.reclaimprotocol.org/v2/session/";
@@ -818,6 +823,7 @@ var ReclaimClient = class {
818
823
  constructor(applicationId, sessionId) {
819
824
  this.sessionId = "";
820
825
  this.context = { contextAddress: "0x0", contextMessage: "" };
826
+ this.myProvidersList = [];
821
827
  this.applicationId = applicationId;
822
828
  if (sessionId) {
823
829
  this.sessionId = sessionId;
@@ -906,19 +912,23 @@ var ReclaimClient = class {
906
912
  }
907
913
  buildHttpProviderV2ByID(providerIds) {
908
914
  return __async(this, null, function* () {
915
+ let appProviders = [];
909
916
  try {
910
917
  if (providerIds.length === 0)
911
918
  throw new Error("No provider Ids provided. Please pass at least one provider Id. Check https://dev.reclaimprotocol.org/applications for more details.");
912
- const appProvidersUrl = `https://api.reclaimprotocol.org/v2/app-http-providers/${this.applicationId}`;
913
- const appResponse = yield fetch(appProvidersUrl);
914
- if (!appResponse.ok) {
915
- throw new Error("Failed to fetch HTTP providers");
916
- }
917
- let appProviders = [];
918
- try {
919
- appProviders = (yield appResponse.json()).result.providers;
920
- } catch (e) {
921
- throw new Error("APP_ID is not valid! Please try again once more.");
919
+ if (this.myProvidersList.length > 0) {
920
+ appProviders = this.myProvidersList;
921
+ } else {
922
+ const appProvidersUrl = `${constants.GET_PROVIDERS_BY_ID_API}/${this.applicationId}`;
923
+ const appResponse = yield fetch(appProvidersUrl);
924
+ if (!appResponse.ok) {
925
+ throw new Error("Failed to fetch HTTP providers");
926
+ }
927
+ try {
928
+ appProviders = (yield appResponse.json()).result.providers;
929
+ } catch (e) {
930
+ throw new Error("APP_ID is not valid! Please try again once more.");
931
+ }
922
932
  }
923
933
  for (let i = 0; i < providerIds.length; i++) {
924
934
  const providerToAdd = appProviders.find((provider) => provider.httpProviderId === providerIds[i]);
@@ -1015,6 +1025,19 @@ var ReclaimClient = class {
1015
1025
  return true;
1016
1026
  });
1017
1027
  }
1028
+ getMyProvidersList() {
1029
+ return __async(this, null, function* () {
1030
+ if (this.myProvidersList.length > 0)
1031
+ return this.myProvidersList;
1032
+ const appProvidersUrl = `${constants.GET_PROVIDERS_BY_ID_API}/${this.applicationId}`;
1033
+ const appResponse = yield fetch(appProvidersUrl);
1034
+ if (!appResponse.ok) {
1035
+ throw new Error("Failed to fetch HTTP providers");
1036
+ }
1037
+ this.myProvidersList = (yield appResponse.json()).result.providers;
1038
+ return this.myProvidersList;
1039
+ });
1040
+ }
1018
1041
  };
1019
1042
  var ReclaimVerificationRequest = class {
1020
1043
  constructor(sessionId, statusUrl, template) {
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"],"sourcesContent":["export * from './Reclaim';","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'\n\nconst DEFAULT_RECLAIM_CALLBACK_URL =\n 'https://api.reclaimprotocol.org/v2/callback?callbackId='\nconst DEFAULT_RECLAIM_STATUS_URL =\n 'https://api.reclaimprotocol.org/v2/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\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 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 const appProvidersUrl = `https://api.reclaimprotocol.org/v2/app-http-providers/${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 let appProviders: ProviderV2[] = [];\n try {\n appProviders = (await appResponse.json()).result.providers as ProviderV2[]\n } catch (e) {\n throw new Error('APP_ID is not valid! Please try again once more.')\n }\n\n for (let i = 0; i < providerIds.length; i++) {\n const providerToAdd = appProviders.find(provider => provider.httpProviderId === providerIds[i])\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 }\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\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/v2/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"],"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';","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/v2/callback?callbackId='\nconst DEFAULT_RECLAIM_STATUS_URL =\n 'https://api.reclaimprotocol.org/v2/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()).result.providers 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 => provider.httpProviderId === providerIds[i])\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 }\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/v2/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/v2/app-http-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.13",
3
+ "version": "0.0.14",
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.dt.ts",