@reclaimprotocol/js-sdk 0.1.3 → 0.1.5

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
@@ -122,6 +122,9 @@ interface Payload {
122
122
  matchType?: string;
123
123
  injectionType: string;
124
124
  disableRequestReplay: boolean;
125
+ parameters: {
126
+ [key: string]: string | undefined;
127
+ };
125
128
  }
126
129
  interface Context {
127
130
  contextAddress: string;
@@ -189,7 +192,7 @@ declare class Reclaim {
189
192
  setSignature(signature: Signature): NoReturn;
190
193
  getAppCallbackUrl(): AppCallbackUrl;
191
194
  getStatusUrl(): StatusUrl;
192
- getRequestedProofs(): Promise<RequestedProofs>;
195
+ getRequestedProofs(): RequestedProofs;
193
196
  generateSignature(applicationSecret: string): Promise<Signature>;
194
197
  buildProofRequest(providerId: string): Promise<RequestedProofs>;
195
198
  createVerificationRequest(): Promise<{
@@ -198,6 +201,10 @@ declare class Reclaim {
198
201
  }>;
199
202
  startSession({ onSuccessCallback, onFailureCallback }: StartSessionParams): Promise<void>;
200
203
  scheduleIntervalEndingTask(onFailureCallback: OnFailureCallback): void;
204
+ availableParams(): string[];
205
+ setParams(params: {
206
+ [key: string]: string;
207
+ }): NoReturn;
201
208
  };
202
209
  };
203
210
  }
package/dist/index.js CHANGED
@@ -679,12 +679,17 @@ var config_default = {
679
679
  chainName: "opt-goerli",
680
680
  address: "0xF93F605142Fb1Efad7Aa58253dDffF67775b4520",
681
681
  rpcUrl: "https://opt-goerli.g.alchemy.com/v2/rksDkSUXd2dyk2ANy_zzODknx_AAokui"
682
+ },
683
+ "0xaa37dc": {
684
+ chainName: "opt-sepolia",
685
+ address: "0x6D0f81BDA11995f25921aAd5B43359630E65Ca96",
686
+ rpcUrl: "https://opt-sepolia.g.alchemy.com/v2/aO1-SfG4oFRLyAiLREqzyAUu0HTCwHgs"
682
687
  }
683
688
  };
684
689
 
685
690
  // src/smart-contract.ts
686
691
  var import_ethers3 = require("ethers");
687
- var DEFAULT_CHAIN_ID = 420;
692
+ var DEFAULT_CHAIN_ID = 11155420;
688
693
  function makeBeacon(chainId) {
689
694
  chainId = chainId || DEFAULT_CHAIN_ID;
690
695
  const contract = getContract(chainId);
@@ -821,6 +826,12 @@ var ProviderFailedError = class extends Error {
821
826
  this.name = "ProviderFailedError";
822
827
  }
823
828
  };
829
+ var InvalidParamError = class extends Error {
830
+ constructor(message) {
831
+ super(message);
832
+ this.name = "InvalidParamError";
833
+ }
834
+ };
824
835
 
825
836
  // src/utils.ts
826
837
  function validateURL(url) {
@@ -950,6 +961,8 @@ function validateProviderIdsAndReturnProviders(providerId, providers) {
950
961
  return providers.find((provider) => providerId == provider.httpProviderId);
951
962
  }
952
963
  function generateRequestedProofs(provider, context, callbackUrl, statusUrl, sessionId) {
964
+ const providerParams = {};
965
+ provider.responseSelections.forEach((rs) => rs.responseMatch.split(/{{(.*?)}}/).filter((e, i) => i % 2).forEach((param) => providerParams[param] = void 0));
953
966
  const claims = [{
954
967
  provider: encodeURIComponent(provider.name),
955
968
  context: JSON.stringify(context),
@@ -974,7 +987,8 @@ function generateRequestedProofs(provider, context, callbackUrl, statusUrl, sess
974
987
  geoLocation: provider.geoLocation,
975
988
  matchType: provider.matchType,
976
989
  injectionType: provider.injectionType,
977
- disableRequestReplay: provider.disableRequestReplay
990
+ disableRequestReplay: provider.disableRequestReplay,
991
+ parameters: providerParams
978
992
  }
979
993
  }];
980
994
  return {
@@ -1102,18 +1116,16 @@ _Reclaim.ProofRequest = class {
1102
1116
  return this.statusUrl || `${constants.DEFAULT_RECLAIM_STATUS_URL}${this.sessionId}`;
1103
1117
  }
1104
1118
  getRequestedProofs() {
1105
- return __async(this, null, function* () {
1106
- try {
1107
- if (!this.requestedProofs) {
1108
- throw new BuildProofRequestError(
1109
- "Call buildProofRequest(providerId: string) first!"
1110
- );
1111
- }
1112
- return this.requestedProofs;
1113
- } catch (err) {
1114
- throw err;
1119
+ try {
1120
+ if (!this.requestedProofs) {
1121
+ throw new BuildProofRequestError(
1122
+ "Call buildProofRequest(providerId: string) first!"
1123
+ );
1115
1124
  }
1116
- });
1125
+ return this.requestedProofs;
1126
+ } catch (err) {
1127
+ throw err;
1128
+ }
1117
1129
  }
1118
1130
  generateSignature(applicationSecret) {
1119
1131
  return __async(this, null, function* () {
@@ -1268,6 +1280,38 @@ _Reclaim.ProofRequest = class {
1268
1280
  }
1269
1281
  }), 1e3 * 60 * 5);
1270
1282
  }
1283
+ availableParams() {
1284
+ const requestedProofs = this.getRequestedProofs();
1285
+ if (!requestedProofs || !this.requestedProofs) {
1286
+ throw new BuildProofRequestError(
1287
+ "Requested proofs are not built yet. Call buildProofRequest(providerId: string) first!"
1288
+ );
1289
+ }
1290
+ return Object.keys(requestedProofs.claims[0].payload.parameters);
1291
+ }
1292
+ setParams(params) {
1293
+ try {
1294
+ const requestedProofs = this.getRequestedProofs();
1295
+ if (!requestedProofs || !this.requestedProofs) {
1296
+ throw new BuildProofRequestError(
1297
+ "Requested proofs are not built yet. Call buildProofRequest(providerId: string) first!"
1298
+ );
1299
+ }
1300
+ const availableParams = this.availableParams();
1301
+ const paramsToSet = Object.keys(params);
1302
+ for (let i = 0; i < paramsToSet.length; i++) {
1303
+ if (!availableParams.includes(paramsToSet[i])) {
1304
+ throw new InvalidParamError(
1305
+ `Cannot Set parameter ${paramsToSet[i]} for provider ${this.providerId} available Prameters inculde : ${availableParams}`
1306
+ );
1307
+ }
1308
+ }
1309
+ this.requestedProofs.claims[0].payload.parameters = __spreadValues(__spreadValues({}, requestedProofs.claims[0].payload.parameters), params);
1310
+ } catch (error) {
1311
+ logger.error("Error Setting Params:", error);
1312
+ throw error;
1313
+ }
1314
+ }
1271
1315
  };
1272
1316
  var Reclaim = _Reclaim;
1273
1317
  // Annotate the CommonJS export names for ESM import in node:
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/witness.ts","../src/Reclaim.ts","../src/utils.ts","../src/contract-types/contracts/factories/Reclaim__factory.ts","../src/contract-types/config.json","../src/smart-contract.ts","../src/constants.ts","../src/errors.ts"],"sourcesContent":["export * from './Reclaim';\nexport * from './interfaces';","import { ethers } from 'ethers';\nimport type { WitnessData } from './interfaces';\nimport type { ClaimID, ClaimInfo, CompleteClaimData } from './types';\n\ntype BeaconState = {\n witnesses: WitnessData[];\n epoch: number;\n witnessesRequiredForClaim: number;\n nextEpochTimestampS: number;\n};\n\nexport function fetchWitnessListForClaim(\n { witnesses, witnessesRequiredForClaim, epoch }: BeaconState,\n params: string | ClaimInfo,\n timestampS: number\n) {\n const identifier =\n typeof params === 'string' ? params : getIdentifierFromClaimInfo(params);\n const completeInput = [\n identifier,\n epoch.toString(),\n witnessesRequiredForClaim.toString(),\n timestampS.toString(),\n ].join('\\n');\n const completeHashStr = ethers.keccak256(strToUint8Array(completeInput));\n const completeHash = ethers.getBytes(completeHashStr);\n const completeHashView = uint8ArrayToDataView(completeHash);\n const witnessesLeft = [...witnesses];\n const selectedWitnesses: WitnessData[] = [];\n // we'll use 32 bits of the hash to select\n // each witness\n let byteOffset = 0;\n for (let i = 0; i < witnessesRequiredForClaim; i++) {\n const randomSeed = completeHashView.getUint32(byteOffset);\n const witnessIndex = randomSeed % witnessesLeft.length;\n const witness = witnessesLeft[witnessIndex] as WitnessData;\n selectedWitnesses.push(witness);\n\n // Remove the selected witness from the list of witnesses left\n witnessesLeft[witnessIndex] = witnessesLeft[\n witnessesLeft.length - 1\n ] as WitnessData;\n witnessesLeft.pop();\n byteOffset = (byteOffset + 4) % completeHash.length;\n }\n\n return selectedWitnesses;\n}\n\nexport function getIdentifierFromClaimInfo(info: ClaimInfo): ClaimID {\n const str = `${info.provider}\\n${info.parameters}\\n${info.context || ''}`;\n return ethers.keccak256(strToUint8Array(str)).toLowerCase();\n}\n\nexport function strToUint8Array(str: string) {\n return new TextEncoder().encode(str);\n}\n\nexport function uint8ArrayToDataView(arr: Uint8Array) {\n return new DataView(arr.buffer, arr.byteOffset, arr.byteLength);\n}\n\nexport function createSignDataForClaim(data: CompleteClaimData) {\n const identifier =\n 'identifier' in data ? data.identifier : getIdentifierFromClaimInfo(data);\n const lines = [\n identifier,\n data.owner.toLowerCase(),\n data.timestampS.toString(),\n data.epoch.toString(),\n ];\n\n return lines.join('\\n');\n}\n","import type { Proof, RequestedProofs, Context } from './interfaces'\nimport { getIdentifierFromClaimInfo } from './witness'\nimport type {\n AppCallbackUrl,\n ApplicationId,\n NoReturn,\n OnFailureCallback,\n SessionId,\n Signature,\n SignedClaim,\n StatusUrl,\n ProofRequestOptions,\n StartSessionParams\n} from './types'\nimport { SessionStatus } from './types'\nimport { v4 } from 'uuid'\nimport { ethers } from 'ethers'\nimport canonicalize from 'canonicalize'\nimport {\n getWitnessesForClaim,\n assertValidSignedClaim,\n getShortenedUrl,\n fetchProvidersByAppId,\n generateRequestedProofs,\n validateProviderIdsAndReturnProviders,\n validateSignature,\n replaceAll,\n validateURL,\n updateSession,\n createSession\n} from './utils'\nimport { constants } from './constants'\nimport P from 'pino'\nimport {\n BuildProofRequestError,\n ProofNotVerifiedError,\n ProviderFailedError,\n SessionNotStartedError,\n SignatureNotFoundError,\n TimeoutError\n} from './errors'\n\nconst logger = P()\n\nexport class Reclaim {\n static async verifySignedProof(proof: Proof) {\n if (!proof.signatures.length) {\n throw new Error('No signatures')\n }\n const witnesses = await getWitnessesForClaim(\n proof.claimData.epoch,\n proof.identifier,\n proof.claimData.timestampS\n )\n\n try {\n // then hash the claim info with the encoded ctx to get the identifier\n const calculatedIdentifier = getIdentifierFromClaimInfo({\n parameters: JSON.parse(\n canonicalize(proof.claimData.parameters) as string\n ),\n provider: proof.claimData.provider,\n context: proof.claimData.context\n })\n proof.identifier = replaceAll(proof.identifier, '\"', '')\n // check if the identifier matches the one in the proof\n if (calculatedIdentifier !== proof.identifier) {\n throw new ProofNotVerifiedError('Identifier Mismatch')\n }\n\n const signedClaim: SignedClaim = {\n claim: {\n ...proof.claimData\n },\n signatures: proof.signatures.map(signature => {\n return ethers.getBytes(signature)\n })\n }\n\n // verify the witness signature\n assertValidSignedClaim(signedClaim, witnesses)\n } catch (e: Error | unknown) {\n logger.error(e)\n return false\n }\n\n return true\n }\n static transformForOnchain(proof: Proof) {\n const claimInfoBuilder = new Map([\n ['context', proof.claimData.context],\n ['parameters', proof.claimData.parameters],\n ['provider', proof.claimData.provider],\n ]);\n const claimInfo = Object.fromEntries(claimInfoBuilder);\n const claimBuilder = new Map<string, number | string>([\n ['epoch', proof.claimData.epoch],\n ['identifier', proof.claimData.identifier],\n ['owner', proof.claimData.owner],\n ['timestampS', proof.claimData.timestampS],\n ]);\n const signedClaim = {\n claim: Object.fromEntries(claimBuilder),\n signatures: proof.signatures,\n };\n return { claimInfo, signedClaim };\n }\n static ProofRequest = class {\n applicationId: ApplicationId\n signature?: Signature\n appCallbackUrl?: AppCallbackUrl\n sessionId: SessionId\n statusUrl?: StatusUrl\n context: Context = { contextAddress: '0x0', contextMessage: '' }\n requestedProofs?: RequestedProofs\n providerId?: string\n intervals: Map<string, NodeJS.Timer> = new Map()\n\n constructor(applicationId: string, options?: ProofRequestOptions) {\n this.applicationId = applicationId\n this.sessionId = options?.sessionId || v4().toString()\n logger.level = options?.log ? 'info' : 'silent'\n logger.info(\n `Initializing client with applicationId: ${this.applicationId} and sessionId: ${this.sessionId}`\n )\n }\n\n addContext(address: string, message: string): NoReturn {\n this.context = { contextAddress: address, contextMessage: message }\n }\n\n setAppCallbackUrl(url: string): NoReturn {\n validateURL(url)\n this.appCallbackUrl = url\n }\n\n setStatusUrl(url: string): NoReturn {\n validateURL(url)\n this.statusUrl = url\n }\n\n setSignature(signature: Signature): NoReturn {\n this.signature = signature\n }\n\n getAppCallbackUrl(): AppCallbackUrl {\n return (\n this.appCallbackUrl ||\n `${constants.DEFAULT_RECLAIM_CALLBACK_URL}${this.sessionId}`\n )\n }\n\n getStatusUrl(): StatusUrl {\n return (\n this.statusUrl ||\n `${constants.DEFAULT_RECLAIM_STATUS_URL}${this.sessionId}`\n )\n }\n\n async getRequestedProofs(): Promise<RequestedProofs> {\n try {\n if (!this.requestedProofs) {\n throw new BuildProofRequestError(\n 'Call buildProofRequest(providerId: string) first!'\n )\n }\n return this.requestedProofs!\n } catch (err) {\n throw err\n }\n }\n\n async generateSignature(applicationSecret: string): Promise<Signature> {\n try {\n const wallet = new ethers.Wallet(applicationSecret)\n const signature: Signature = (await wallet.signMessage(\n ethers.getBytes(\n ethers.keccak256(\n new TextEncoder().encode(\n canonicalize(await this.getRequestedProofs())!\n )\n )\n )\n )) as unknown as Signature\n\n return signature\n } catch (err) {\n logger.error(err)\n throw new BuildProofRequestError(\n 'Error generating signature for applicationSecret: ' +\n applicationSecret\n )\n }\n }\n\n async buildProofRequest(providerId: string): Promise<RequestedProofs> {\n try {\n\n let providers = await fetchProvidersByAppId(this.applicationId)\n\n const provider = validateProviderIdsAndReturnProviders(\n providerId,\n providers\n )\n this.providerId = providerId\n this.requestedProofs = generateRequestedProofs(\n provider,\n this.context,\n this.getAppCallbackUrl(),\n this.getStatusUrl(),\n this.sessionId\n )\n\n return this.requestedProofs\n } catch (err: Error | unknown) {\n logger.error(err)\n throw new BuildProofRequestError(\n 'Something went wrong while generating proof request'\n )\n }\n }\n\n async createVerificationRequest(): Promise<{\n statusUrl: StatusUrl\n requestUrl: string\n }> {\n try {\n const requestedProofs = await this.getRequestedProofs()\n\n if (!requestedProofs) {\n throw new BuildProofRequestError(\n 'Requested proofs are not built yet. Call buildProofRequest(providerId: string) first!'\n )\n }\n\n if (!this.signature) {\n throw new SignatureNotFoundError(\n 'Signature is not set. Use reclaim.setSignature(signature) to set the signature'\n )\n }\n\n validateSignature(requestedProofs, this.signature, this.applicationId)\n\n const templateData = {\n ...requestedProofs,\n signature: this.signature\n }\n let template = `${constants.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 await createSession(this.sessionId, this.applicationId, this.providerId!)\n return { requestUrl: template, statusUrl: this.getStatusUrl() }\n } catch (error) {\n logger.error('Error creating verification request:', error)\n throw error\n }\n }\n\n async startSession({\n onSuccessCallback,\n onFailureCallback\n }: StartSessionParams) {\n const statusUrl = this.getStatusUrl()\n if (statusUrl && this.sessionId) {\n logger.info('Starting session')\n try {\n await updateSession(this.sessionId, SessionStatus.SDK_STARTED)\n } catch (e) {\n logger.error(e)\n }\n const interval = setInterval(async () => {\n try {\n const res = await fetch(statusUrl)\n const data = await res.json()\n\n if (!data.session) return\n if (data.session.status === SessionStatus.FAILED) throw new ProviderFailedError()\n if (data.session.proofs.length === 0) return\n\n data.session.proofs.forEach(async (proof: Proof) => {\n const verified = await Reclaim.verifySignedProof(proof)\n if (!verified) {\n throw new ProofNotVerifiedError()\n }\n })\n if (onSuccessCallback) {\n try {\n await updateSession(this.sessionId, SessionStatus.SDK_RECEIVED)\n } catch (e) {\n logger.error(e)\n }\n onSuccessCallback(data.session.proofs)\n }\n clearInterval(this.intervals.get(this.sessionId!))\n this.intervals.delete(this.sessionId!)\n } catch (e) {\n if (!(e instanceof ProviderFailedError)) {\n try {\n await updateSession(this.sessionId, SessionStatus.FAILED)\n } catch (e) {\n logger.error(e)\n }\n }\n if (onFailureCallback) {\n onFailureCallback(e as Error)\n }\n clearInterval(this.intervals.get(this.sessionId!))\n this.intervals.delete(this.sessionId!)\n }\n }, 3000)\n\n this.intervals.set(this.sessionId, interval)\n this.scheduleIntervalEndingTask(onFailureCallback)\n } else {\n const message =\n \"Session can't be started due to undefined value of statusUrl and sessionId\"\n logger.error(message)\n throw new SessionNotStartedError(message)\n }\n }\n\n scheduleIntervalEndingTask(onFailureCallback: OnFailureCallback) {\n setTimeout(async () => {\n if (this.intervals.has(this.sessionId)) {\n const message = 'Interval ended without receiveing proofs'\n await updateSession(this.sessionId, SessionStatus.FAILED)\n onFailureCallback(new TimeoutError(message))\n logger.warn(message)\n clearInterval(this.intervals.get(this.sessionId!))\n }\n }, 1000 * 60 * 5)\n }\n }\n}\n","import URL from 'url-parse'\nimport type { ApplicationId, ParsedURL, SignedClaim, Signature, SessionStatus } from './types'\nimport type { Context, ProviderV2, RequestedClaim, RequestedProofs, WitnessData } from './interfaces'\nimport { ethers } from 'ethers'\nimport { makeBeacon } from './smart-contract'\nimport { fetchWitnessListForClaim, createSignDataForClaim } from './witness'\nimport canonicalize from 'canonicalize'\nimport { BACKEND_BASE_URL, constants } from './constants'\nimport { CreateSessionError, InvalidSignatureError, ProofNotVerifiedError, ProviderAPIError, UpdateSessionError } from './errors'\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\nexport function 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 ProofNotVerifiedError(\n `Missing signatures from ${expectedWitnessAddresses.join(', ')}`\n )\n }\n}\n\nexport async function getShortenedUrl(url: string) {\n try {\n const response = await fetch(BACKEND_BASE_URL + '/api/sdk/shortener', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n fullUrl: url\n })\n })\n const res = await response.json()\n const shortenedVerificationUrl = res.result.shortUrl\n return shortenedVerificationUrl\n } catch (err) {\n return url\n }\n}\n\nexport async function createSession(sessionId: string, appId: string, providerId: string) {\n try {\n const response = await fetch(BACKEND_BASE_URL + '/api/sdk/create-session/', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n sessionId,\n appId,\n providerId\n })\n })\n if (!response.ok) {\n throw new CreateSessionError('Error creating session with sessionId: ' + sessionId)\n }\n const res = await response.json()\n return res\n } catch (err) {\n throw new CreateSessionError('Error creating session with sessionId: ' + sessionId)\n }\n}\n\nexport async function updateSession(sessionId: string, status: SessionStatus) {\n try {\n const response = await fetch(BACKEND_BASE_URL + '/api/sdk/update-session/', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n sessionId,\n status\n })\n })\n if (!response.ok) {\n throw new UpdateSessionError('Error updating session with sessionId: ' + sessionId)\n }\n const res = await response.json()\n return res\n } catch (err) {\n throw new UpdateSessionError('Error updating session with sessionId: ' + sessionId)\n }\n}\n\nexport async function fetchProvidersByAppId(appId: string) {\n try {\n const response = await fetch(`${constants.GET_PROVIDERS_BY_ID_API}/${appId}`)\n const res = await response.json()\n return res.providers.httpProvider\n } catch (err) {\n throw new ProviderAPIError('Error fetching provider with AppId: ' + appId)\n }\n}\n\nexport function validateProviderIdsAndReturnProviders(providerId: string, providers: ProviderV2[]): ProviderV2 {\n let providerExists = providers.some(provider => providerId == provider.httpProviderId)\n if (!providerExists) {\n throw new ProviderAPIError(`The following provider Id is not included in your application => ${providerId}`)\n }\n return providers.find(provider => providerId == provider.httpProviderId) as ProviderV2\n}\n\nexport function generateRequestedProofs(provider: ProviderV2, context: Context, callbackUrl: string, statusUrl: string, sessionId: string): RequestedProofs {\n const claims = [{\n provider: encodeURIComponent(provider.name),\n context: JSON.stringify(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,\n matchType: provider.matchType,\n injectionType: provider.injectionType,\n disableRequestReplay: provider.disableRequestReplay\n }\n }] as RequestedClaim[];\n\n\n return {\n id: sessionId,\n sessionId: sessionId,\n name: 'web-SDK',\n callbackUrl: callbackUrl,\n statusUrl: statusUrl,\n claims: claims\n };\n}\n\nexport function validateSignature(requestedProofs: RequestedProofs, signature: Signature, applicationId: ApplicationId) {\n try {\n const appId = ethers\n .verifyMessage(\n ethers.getBytes(\n ethers.keccak256(\n new TextEncoder().encode(canonicalize(requestedProofs)!)\n )\n ),\n ethers.hexlify(signature as unknown as string)\n )\n .toLowerCase()\n\n if (ethers.getAddress(appId) !== ethers.getAddress(applicationId)) {\n throw new InvalidSignatureError(`Signature does not match the application id: ${appId}`)\n }\n } catch (err) {\n throw err\n }\n}\n\nexport function escapeRegExp(string: string) {\n return string.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&'); // $& means the whole matched string\n}\n\nexport function replaceAll(str: string, find: string, replace: string) {\n return str.replace(new RegExp(escapeRegExp(find), 'g'), replace);\n}","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n\nimport { Contract } from 'ethers';\n\nconst _abi = [\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: 'address',\n name: 'previousAdmin',\n type: 'address',\n },\n {\n indexed: false,\n internalType: 'address',\n name: 'newAdmin',\n type: 'address',\n },\n ],\n name: 'AdminChanged',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'address',\n name: 'beacon',\n type: 'address',\n },\n ],\n name: 'BeaconUpgraded',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n components: [\n {\n internalType: 'uint32',\n name: 'id',\n type: 'uint32',\n },\n {\n internalType: 'uint32',\n name: 'timestampStart',\n type: 'uint32',\n },\n {\n internalType: 'uint32',\n name: 'timestampEnd',\n type: 'uint32',\n },\n {\n components: [\n {\n internalType: 'address',\n name: 'addr',\n type: 'address',\n },\n {\n internalType: 'string',\n name: 'host',\n type: 'string',\n },\n ],\n internalType: 'struct Reclaim.Witness[]',\n name: 'witnesses',\n type: 'tuple[]',\n },\n {\n internalType: 'uint8',\n name: 'minimumWitnessesForClaimCreation',\n type: 'uint8',\n },\n ],\n indexed: false,\n internalType: 'struct Reclaim.Epoch',\n name: 'epoch',\n type: 'tuple',\n },\n ],\n name: 'EpochAdded',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: 'uint8',\n name: 'version',\n type: 'uint8',\n },\n ],\n name: 'Initialized',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'address',\n name: 'previousOwner',\n type: 'address',\n },\n {\n indexed: true,\n internalType: 'address',\n name: 'newOwner',\n type: 'address',\n },\n ],\n name: 'OwnershipTransferred',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'address',\n name: 'implementation',\n type: 'address',\n },\n ],\n name: 'Upgraded',\n type: 'event',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'witnessAddress',\n type: 'address',\n },\n {\n internalType: 'string',\n name: 'host',\n type: 'string',\n },\n ],\n name: 'addAsWitness',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [],\n name: 'addNewEpoch',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'uint32',\n name: 'epochNum',\n type: 'uint32',\n },\n {\n components: [\n {\n internalType: 'string',\n name: 'provider',\n type: 'string',\n },\n {\n internalType: 'string',\n name: 'parameters',\n type: 'string',\n },\n {\n internalType: 'string',\n name: 'context',\n type: 'string',\n },\n ],\n internalType: 'struct Claims.ClaimInfo',\n name: 'claimInfo',\n type: 'tuple',\n },\n {\n components: [\n {\n internalType: 'bytes32',\n name: 'identifier',\n type: 'bytes32',\n },\n {\n internalType: 'address',\n name: 'owner',\n type: 'address',\n },\n {\n internalType: 'uint32',\n name: 'timestampS',\n type: 'uint32',\n },\n {\n internalType: 'uint256',\n name: 'epoch',\n type: 'uint256',\n },\n ],\n internalType: 'struct Claims.CompleteClaimData',\n name: 'claimData',\n type: 'tuple',\n },\n {\n internalType: 'bytes[]',\n name: 'signatures',\n type: 'bytes[]',\n },\n ],\n name: 'assertValidEpochAndSignedClaim',\n outputs: [],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'currentEpoch',\n outputs: [\n {\n internalType: 'uint32',\n name: '',\n type: 'uint32',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'epochDurationS',\n outputs: [\n {\n internalType: 'uint32',\n name: '',\n type: 'uint32',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n name: 'epochs',\n outputs: [\n {\n internalType: 'uint32',\n name: 'id',\n type: 'uint32',\n },\n {\n internalType: 'uint32',\n name: 'timestampStart',\n type: 'uint32',\n },\n {\n internalType: 'uint32',\n name: 'timestampEnd',\n type: 'uint32',\n },\n {\n internalType: 'uint8',\n name: 'minimumWitnessesForClaimCreation',\n type: 'uint8',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'uint32',\n name: 'epoch',\n type: 'uint32',\n },\n ],\n name: 'fetchEpoch',\n outputs: [\n {\n components: [\n {\n internalType: 'uint32',\n name: 'id',\n type: 'uint32',\n },\n {\n internalType: 'uint32',\n name: 'timestampStart',\n type: 'uint32',\n },\n {\n internalType: 'uint32',\n name: 'timestampEnd',\n type: 'uint32',\n },\n {\n components: [\n {\n internalType: 'address',\n name: 'addr',\n type: 'address',\n },\n {\n internalType: 'string',\n name: 'host',\n type: 'string',\n },\n ],\n internalType: 'struct Reclaim.Witness[]',\n name: 'witnesses',\n type: 'tuple[]',\n },\n {\n internalType: 'uint8',\n name: 'minimumWitnessesForClaimCreation',\n type: 'uint8',\n },\n ],\n internalType: 'struct Reclaim.Epoch',\n name: '',\n type: 'tuple',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'uint32',\n name: 'epoch',\n type: 'uint32',\n },\n {\n internalType: 'bytes32',\n name: 'identifier',\n type: 'bytes32',\n },\n {\n internalType: 'uint32',\n name: 'timestampS',\n type: 'uint32',\n },\n ],\n name: 'fetchWitnessesForClaim',\n outputs: [\n {\n components: [\n {\n internalType: 'address',\n name: 'addr',\n type: 'address',\n },\n {\n internalType: 'string',\n name: 'host',\n type: 'string',\n },\n ],\n internalType: 'struct Reclaim.Witness[]',\n name: '',\n type: 'tuple[]',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'initialize',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [],\n name: 'minimumWitnessesForClaimCreation',\n outputs: [\n {\n internalType: 'uint8',\n name: '',\n type: 'uint8',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'owner',\n outputs: [\n {\n internalType: 'address',\n name: '',\n type: 'address',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'proxiableUUID',\n outputs: [\n {\n internalType: 'bytes32',\n name: '',\n type: 'bytes32',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'witnessAddress',\n type: 'address',\n },\n ],\n name: 'removeAsWitness',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [],\n name: 'renounceOwnership',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'newOwner',\n type: 'address',\n },\n ],\n name: 'transferOwnership',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'addr',\n type: 'address',\n },\n {\n internalType: 'bool',\n name: 'isWhitelisted',\n type: 'bool',\n },\n ],\n name: 'updateWitnessWhitelist',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'newImplementation',\n type: 'address',\n },\n ],\n name: 'upgradeTo',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'newImplementation',\n type: 'address',\n },\n {\n internalType: 'bytes',\n name: 'data',\n type: 'bytes',\n },\n ],\n name: 'upgradeToAndCall',\n outputs: [],\n stateMutability: 'payable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n name: 'witnesses',\n outputs: [\n {\n internalType: 'address',\n name: 'addr',\n type: 'address',\n },\n {\n internalType: 'string',\n name: 'host',\n type: 'string',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n] as const;\n\nexport class Reclaim__factory {\n static readonly abi = _abi;\n\n static connect(address: string, signerOrProvider: any): Contract {\n return new Contract(address, _abi, signerOrProvider);\n }\n}\n","{\n \"0x1a4\": {\n \"chainName\": \"opt-goerli\",\n \"address\": \"0xF93F605142Fb1Efad7Aa58253dDffF67775b4520\",\n \"rpcUrl\": \"https://opt-goerli.g.alchemy.com/v2/rksDkSUXd2dyk2ANy_zzODknx_AAokui\"\n }\n}\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 BACKEND_BASE_URL = \"http://localhost:3003\"\nexport const BACKEND_BASE_URL = \"https://api.reclaimprotocol.org\"\nexport const constants = {\n GET_PROVIDERS_BY_ID_API:\n BACKEND_BASE_URL + '/api/applications/providers',\n DEFAULT_RECLAIM_CALLBACK_URL:\n BACKEND_BASE_URL + '/api/sdk/callback?callbackId=',\n DEFAULT_RECLAIM_STATUS_URL:\n BACKEND_BASE_URL + '/api/sdk/session/',\n RECLAIM_SHARE_URL: 'https://share.reclaimprotocol.org/instant/?template=',\n};\n","\n\nexport class TimeoutError extends Error {\n constructor(message: string) {\n super(message)\n this.name = 'TimeoutError'\n }\n}\n\n\nexport class ProofNotVerifiedError extends Error {\n constructor(message?: string) {\n super(message)\n this.name = 'ProofNotVerifiedError'\n }\n}\n\nexport class SessionNotStartedError extends Error {\n constructor(message?: string) {\n super(message)\n this.name = 'SessionNotStartedError'\n }\n}\n\nexport class ProviderAPIError extends Error {\n constructor(message?: string) {\n super(message)\n this.name = 'ProviderAPIError'\n }\n}\n\nexport class BuildProofRequestError extends Error {\n constructor(message?: string) {\n super(message)\n this.name = 'BuildProofRequest'\n }\n}\n\nexport class SignatureGeneratingError extends Error {\n constructor(message?: string) {\n super(message)\n this.name = 'SignatureGeneratingError'\n }\n}\n\nexport class SignatureNotFoundError extends Error {\n constructor(message?: string) {\n super(message)\n this.name = 'SignatureNotFound'\n }\n}\n\nexport class InvalidSignatureError extends Error {\n constructor(message?: string) {\n super(message)\n this.name = 'InvalidSignatureError'\n }\n}\n\n\nexport class UpdateSessionError extends Error {\n constructor(message?: string) {\n super(message)\n this.name = 'UpdateSessionError'\n }\n}\n\nexport class CreateSessionError extends Error {\n constructor(message?: string) {\n super(message)\n this.name = 'CreateSessionError'\n }\n}\n\nexport class ProviderFailedError extends Error {\n constructor(message?: string) {\n super(message)\n this.name = 'ProviderFailedError'\n }\n}"],"mappings":"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","names":["import_ethers","import_canonicalize","import_ethers","import_ethers","import_ethers","canonicalize","P","canonicalize","e"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/witness.ts","../src/Reclaim.ts","../src/utils.ts","../src/contract-types/contracts/factories/Reclaim__factory.ts","../src/contract-types/config.json","../src/smart-contract.ts","../src/constants.ts","../src/errors.ts"],"sourcesContent":["export * from './Reclaim';\nexport * from './interfaces';","import { ethers } from 'ethers';\nimport type { WitnessData } from './interfaces';\nimport type { ClaimID, ClaimInfo, CompleteClaimData } from './types';\n\ntype BeaconState = {\n witnesses: WitnessData[];\n epoch: number;\n witnessesRequiredForClaim: number;\n nextEpochTimestampS: number;\n};\n\nexport function fetchWitnessListForClaim(\n { witnesses, witnessesRequiredForClaim, epoch }: BeaconState,\n params: string | ClaimInfo,\n timestampS: number\n) {\n const identifier =\n typeof params === 'string' ? params : getIdentifierFromClaimInfo(params);\n const completeInput = [\n identifier,\n epoch.toString(),\n witnessesRequiredForClaim.toString(),\n timestampS.toString(),\n ].join('\\n');\n const completeHashStr = ethers.keccak256(strToUint8Array(completeInput));\n const completeHash = ethers.getBytes(completeHashStr);\n const completeHashView = uint8ArrayToDataView(completeHash);\n const witnessesLeft = [...witnesses];\n const selectedWitnesses: WitnessData[] = [];\n // we'll use 32 bits of the hash to select\n // each witness\n let byteOffset = 0;\n for (let i = 0; i < witnessesRequiredForClaim; i++) {\n const randomSeed = completeHashView.getUint32(byteOffset);\n const witnessIndex = randomSeed % witnessesLeft.length;\n const witness = witnessesLeft[witnessIndex] as WitnessData;\n selectedWitnesses.push(witness);\n\n // Remove the selected witness from the list of witnesses left\n witnessesLeft[witnessIndex] = witnessesLeft[\n witnessesLeft.length - 1\n ] as WitnessData;\n witnessesLeft.pop();\n byteOffset = (byteOffset + 4) % completeHash.length;\n }\n\n return selectedWitnesses;\n}\n\nexport function getIdentifierFromClaimInfo(info: ClaimInfo): ClaimID {\n const str = `${info.provider}\\n${info.parameters}\\n${info.context || ''}`;\n return ethers.keccak256(strToUint8Array(str)).toLowerCase();\n}\n\nexport function strToUint8Array(str: string) {\n return new TextEncoder().encode(str);\n}\n\nexport function uint8ArrayToDataView(arr: Uint8Array) {\n return new DataView(arr.buffer, arr.byteOffset, arr.byteLength);\n}\n\nexport function createSignDataForClaim(data: CompleteClaimData) {\n const identifier =\n 'identifier' in data ? data.identifier : getIdentifierFromClaimInfo(data);\n const lines = [\n identifier,\n data.owner.toLowerCase(),\n data.timestampS.toString(),\n data.epoch.toString(),\n ];\n\n return lines.join('\\n');\n}\n","import type { Proof, RequestedProofs, Context } from './interfaces'\nimport { getIdentifierFromClaimInfo } from './witness'\nimport type {\n AppCallbackUrl,\n ApplicationId,\n NoReturn,\n OnFailureCallback,\n SessionId,\n Signature,\n SignedClaim,\n StatusUrl,\n ProofRequestOptions,\n StartSessionParams\n} from './types'\nimport { SessionStatus } from './types'\nimport { v4 } from 'uuid'\nimport { ethers } from 'ethers'\nimport canonicalize from 'canonicalize'\nimport {\n getWitnessesForClaim,\n assertValidSignedClaim,\n getShortenedUrl,\n fetchProvidersByAppId,\n generateRequestedProofs,\n validateProviderIdsAndReturnProviders,\n validateSignature,\n replaceAll,\n validateURL,\n updateSession,\n createSession\n} from './utils'\nimport { constants } from './constants'\nimport P from 'pino'\nimport {\n BuildProofRequestError,\n InvalidParamError,\n ProofNotVerifiedError,\n ProviderFailedError,\n SessionNotStartedError,\n SignatureNotFoundError,\n TimeoutError\n} from './errors'\n\nconst logger = P()\n\nexport class Reclaim {\n static async verifySignedProof(proof: Proof) {\n if (!proof.signatures.length) {\n throw new Error('No signatures')\n }\n const witnesses = await getWitnessesForClaim(\n proof.claimData.epoch,\n proof.identifier,\n proof.claimData.timestampS\n )\n\n try {\n // then hash the claim info with the encoded ctx to get the identifier\n const calculatedIdentifier = getIdentifierFromClaimInfo({\n parameters: JSON.parse(\n canonicalize(proof.claimData.parameters) as string\n ),\n provider: proof.claimData.provider,\n context: proof.claimData.context\n })\n proof.identifier = replaceAll(proof.identifier, '\"', '')\n // check if the identifier matches the one in the proof\n if (calculatedIdentifier !== proof.identifier) {\n throw new ProofNotVerifiedError('Identifier Mismatch')\n }\n\n const signedClaim: SignedClaim = {\n claim: {\n ...proof.claimData\n },\n signatures: proof.signatures.map(signature => {\n return ethers.getBytes(signature)\n })\n }\n\n // verify the witness signature\n assertValidSignedClaim(signedClaim, witnesses)\n } catch (e: Error | unknown) {\n logger.error(e)\n return false\n }\n\n return true\n }\n static transformForOnchain(proof: Proof) {\n const claimInfoBuilder = new Map([\n ['context', proof.claimData.context],\n ['parameters', proof.claimData.parameters],\n ['provider', proof.claimData.provider],\n ]);\n const claimInfo = Object.fromEntries(claimInfoBuilder);\n const claimBuilder = new Map<string, number | string>([\n ['epoch', proof.claimData.epoch],\n ['identifier', proof.claimData.identifier],\n ['owner', proof.claimData.owner],\n ['timestampS', proof.claimData.timestampS],\n ]);\n const signedClaim = {\n claim: Object.fromEntries(claimBuilder),\n signatures: proof.signatures,\n };\n return { claimInfo, signedClaim };\n }\n static ProofRequest = class {\n applicationId: ApplicationId\n signature?: Signature\n appCallbackUrl?: AppCallbackUrl\n sessionId: SessionId\n statusUrl?: StatusUrl\n context: Context = { contextAddress: '0x0', contextMessage: '' }\n requestedProofs?: RequestedProofs\n providerId?: string\n intervals: Map<string, NodeJS.Timer> = new Map()\n\n constructor(applicationId: string, options?: ProofRequestOptions) {\n this.applicationId = applicationId\n this.sessionId = options?.sessionId || v4().toString()\n logger.level = options?.log ? 'info' : 'silent'\n logger.info(\n `Initializing client with applicationId: ${this.applicationId} and sessionId: ${this.sessionId}`\n )\n }\n\n addContext(address: string, message: string): NoReturn {\n this.context = { contextAddress: address, contextMessage: message }\n }\n\n setAppCallbackUrl(url: string): NoReturn {\n validateURL(url)\n this.appCallbackUrl = url\n }\n\n setStatusUrl(url: string): NoReturn {\n validateURL(url)\n this.statusUrl = url\n }\n\n setSignature(signature: Signature): NoReturn {\n this.signature = signature\n }\n\n getAppCallbackUrl(): AppCallbackUrl {\n return (\n this.appCallbackUrl ||\n `${constants.DEFAULT_RECLAIM_CALLBACK_URL}${this.sessionId}`\n )\n }\n\n getStatusUrl(): StatusUrl {\n return (\n this.statusUrl ||\n `${constants.DEFAULT_RECLAIM_STATUS_URL}${this.sessionId}`\n )\n }\n\n getRequestedProofs(): RequestedProofs {\n try {\n if (!this.requestedProofs) {\n throw new BuildProofRequestError(\n 'Call buildProofRequest(providerId: string) first!'\n )\n }\n return this.requestedProofs!\n } catch (err) {\n throw err\n }\n }\n\n async generateSignature(applicationSecret: string): Promise<Signature> {\n try {\n const wallet = new ethers.Wallet(applicationSecret)\n const signature: Signature = (await wallet.signMessage(\n ethers.getBytes(\n ethers.keccak256(\n new TextEncoder().encode(\n canonicalize(await this.getRequestedProofs())!\n )\n )\n )\n )) as unknown as Signature\n\n return signature\n } catch (err) {\n logger.error(err)\n throw new BuildProofRequestError(\n 'Error generating signature for applicationSecret: ' +\n applicationSecret\n )\n }\n }\n\n async buildProofRequest(providerId: string): Promise<RequestedProofs> {\n try {\n\n let providers = await fetchProvidersByAppId(this.applicationId)\n\n const provider = validateProviderIdsAndReturnProviders(\n providerId,\n providers\n )\n this.providerId = providerId\n this.requestedProofs = generateRequestedProofs(\n provider,\n this.context,\n this.getAppCallbackUrl(),\n this.getStatusUrl(),\n this.sessionId\n )\n\n return this.requestedProofs\n } catch (err: Error | unknown) {\n logger.error(err)\n throw new BuildProofRequestError(\n 'Something went wrong while generating proof request'\n )\n }\n }\n\n async createVerificationRequest(): Promise<{\n statusUrl: StatusUrl\n requestUrl: string\n }> {\n try {\n const requestedProofs = await this.getRequestedProofs()\n\n if (!requestedProofs) {\n throw new BuildProofRequestError(\n 'Requested proofs are not built yet. Call buildProofRequest(providerId: string) first!'\n )\n }\n\n if (!this.signature) {\n throw new SignatureNotFoundError(\n 'Signature is not set. Use reclaim.setSignature(signature) to set the signature'\n )\n }\n\n validateSignature(requestedProofs, this.signature, this.applicationId)\n\n const templateData = {\n ...requestedProofs,\n signature: this.signature\n }\n let template = `${constants.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 await createSession(this.sessionId, this.applicationId, this.providerId!)\n return { requestUrl: template, statusUrl: this.getStatusUrl() }\n } catch (error) {\n logger.error('Error creating verification request:', error)\n throw error\n }\n }\n\n async startSession({\n onSuccessCallback,\n onFailureCallback\n }: StartSessionParams) {\n const statusUrl = this.getStatusUrl()\n if (statusUrl && this.sessionId) {\n logger.info('Starting session')\n try {\n await updateSession(this.sessionId, SessionStatus.SDK_STARTED)\n } catch (e) {\n logger.error(e)\n }\n const interval = setInterval(async () => {\n try {\n const res = await fetch(statusUrl)\n const data = await res.json()\n\n if (!data.session) return\n if (data.session.status === SessionStatus.FAILED) throw new ProviderFailedError()\n if (data.session.proofs.length === 0) return\n\n data.session.proofs.forEach(async (proof: Proof) => {\n const verified = await Reclaim.verifySignedProof(proof)\n if (!verified) {\n throw new ProofNotVerifiedError()\n }\n })\n if (onSuccessCallback) {\n try {\n await updateSession(this.sessionId, SessionStatus.SDK_RECEIVED)\n } catch (e) {\n logger.error(e)\n }\n onSuccessCallback(data.session.proofs)\n }\n clearInterval(this.intervals.get(this.sessionId!))\n this.intervals.delete(this.sessionId!)\n } catch (e) {\n if (!(e instanceof ProviderFailedError)) {\n try {\n await updateSession(this.sessionId, SessionStatus.FAILED)\n } catch (e) {\n logger.error(e)\n }\n }\n if (onFailureCallback) {\n onFailureCallback(e as Error)\n }\n clearInterval(this.intervals.get(this.sessionId!))\n this.intervals.delete(this.sessionId!)\n }\n }, 3000)\n\n this.intervals.set(this.sessionId, interval)\n this.scheduleIntervalEndingTask(onFailureCallback)\n } else {\n const message =\n \"Session can't be started due to undefined value of statusUrl and sessionId\"\n logger.error(message)\n throw new SessionNotStartedError(message)\n }\n }\n\n scheduleIntervalEndingTask(onFailureCallback: OnFailureCallback) {\n setTimeout(async () => {\n if (this.intervals.has(this.sessionId)) {\n const message = 'Interval ended without receiveing proofs'\n await updateSession(this.sessionId, SessionStatus.FAILED)\n onFailureCallback(new TimeoutError(message))\n logger.warn(message)\n clearInterval(this.intervals.get(this.sessionId!))\n }\n }, 1000 * 60 * 5)\n }\n\n availableParams(): string[] {\n const requestedProofs = this.getRequestedProofs();\n\n if (!requestedProofs || !this.requestedProofs) {\n throw new BuildProofRequestError(\n 'Requested proofs are not built yet. Call buildProofRequest(providerId: string) first!'\n );\n }\n return Object.keys(requestedProofs.claims[0].payload.parameters)\n }\n\n setParams(params: { [key: string]: string }): NoReturn {\n try {\n const requestedProofs = this.getRequestedProofs();\n\n if (!requestedProofs || !this.requestedProofs) {\n throw new BuildProofRequestError(\n 'Requested proofs are not built yet. Call buildProofRequest(providerId: string) first!'\n );\n }\n const availableParams = this.availableParams()\n const paramsToSet = Object.keys(params)\n for (let i = 0; i < paramsToSet.length; i++) {\n if (!availableParams.includes(paramsToSet[i])) {\n throw new InvalidParamError(\n `Cannot Set parameter ${paramsToSet[i]} for provider ${this.providerId} available Prameters inculde : ${availableParams}`\n );\n }\n }\n this.requestedProofs.claims[0].payload.parameters = { ...requestedProofs.claims[0].payload.parameters, ...params }\n\n } catch (error) {\n logger.error('Error Setting Params:', error);\n throw error;\n }\n }\n }\n}\n","import URL from 'url-parse'\nimport type { ApplicationId, ParsedURL, SignedClaim, Signature, SessionStatus } from './types'\nimport type { Context, ProviderV2, RequestedClaim, RequestedProofs, WitnessData } from './interfaces'\nimport { ethers } from 'ethers'\nimport { makeBeacon } from './smart-contract'\nimport { fetchWitnessListForClaim, createSignDataForClaim } from './witness'\nimport canonicalize from 'canonicalize'\nimport { BACKEND_BASE_URL, constants } from './constants'\nimport { CreateSessionError, InvalidSignatureError, ProofNotVerifiedError, ProviderAPIError, UpdateSessionError } from './errors'\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\nexport function 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 ProofNotVerifiedError(\n `Missing signatures from ${expectedWitnessAddresses.join(', ')}`\n )\n }\n}\n\nexport async function getShortenedUrl(url: string) {\n try {\n const response = await fetch(BACKEND_BASE_URL + '/api/sdk/shortener', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n fullUrl: url\n })\n })\n const res = await response.json()\n const shortenedVerificationUrl = res.result.shortUrl\n return shortenedVerificationUrl\n } catch (err) {\n return url\n }\n}\n\nexport async function createSession(sessionId: string, appId: string, providerId: string) {\n try {\n const response = await fetch(BACKEND_BASE_URL + '/api/sdk/create-session/', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n sessionId,\n appId,\n providerId\n })\n })\n if (!response.ok) {\n throw new CreateSessionError('Error creating session with sessionId: ' + sessionId)\n }\n const res = await response.json()\n return res\n } catch (err) {\n throw new CreateSessionError('Error creating session with sessionId: ' + sessionId)\n }\n}\n\nexport async function updateSession(sessionId: string, status: SessionStatus) {\n try {\n const response = await fetch(BACKEND_BASE_URL + '/api/sdk/update-session/', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n sessionId,\n status\n })\n })\n if (!response.ok) {\n throw new UpdateSessionError('Error updating session with sessionId: ' + sessionId)\n }\n const res = await response.json()\n return res\n } catch (err) {\n throw new UpdateSessionError('Error updating session with sessionId: ' + sessionId)\n }\n}\n\nexport async function fetchProvidersByAppId(appId: string) {\n try {\n const response = await fetch(`${constants.GET_PROVIDERS_BY_ID_API}/${appId}`)\n const res = await response.json()\n return res.providers.httpProvider\n } catch (err) {\n throw new ProviderAPIError('Error fetching provider with AppId: ' + appId)\n }\n}\n\nexport function validateProviderIdsAndReturnProviders(providerId: string, providers: ProviderV2[]): ProviderV2 {\n let providerExists = providers.some(provider => providerId == provider.httpProviderId)\n if (!providerExists) {\n throw new ProviderAPIError(`The following provider Id is not included in your application => ${providerId}`)\n }\n return providers.find(provider => providerId == provider.httpProviderId) as ProviderV2\n}\n\nexport function generateRequestedProofs(provider: ProviderV2, context: Context, callbackUrl: string, statusUrl: string, sessionId: string): RequestedProofs {\n const providerParams: { [key: string]: string | undefined } = {}\n provider.responseSelections.forEach(rs => rs.responseMatch.split(/{{(.*?)}}/).filter((e, i) => i % 2).forEach(param => providerParams[param] = undefined))\n const claims = [{\n provider: encodeURIComponent(provider.name),\n context: JSON.stringify(context),\n 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,\n matchType: provider.matchType,\n injectionType: provider.injectionType,\n disableRequestReplay: provider.disableRequestReplay,\n parameters: providerParams\n }\n }] as RequestedClaim[];\n\n\n return {\n id: sessionId,\n sessionId: sessionId,\n name: 'web-SDK',\n callbackUrl: callbackUrl,\n statusUrl: statusUrl,\n claims: claims\n };\n}\n\nexport function validateSignature(requestedProofs: RequestedProofs, signature: Signature, applicationId: ApplicationId) {\n try {\n const appId = ethers\n .verifyMessage(\n ethers.getBytes(\n ethers.keccak256(\n new TextEncoder().encode(canonicalize(requestedProofs)!)\n )\n ),\n ethers.hexlify(signature as unknown as string)\n )\n .toLowerCase()\n\n if (ethers.getAddress(appId) !== ethers.getAddress(applicationId)) {\n throw new InvalidSignatureError(`Signature does not match the application id: ${appId}`)\n }\n } catch (err) {\n throw err\n }\n}\n\nexport function escapeRegExp(string: string) {\n return string.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&'); // $& means the whole matched string\n}\n\nexport function replaceAll(str: string, find: string, replace: string) {\n return str.replace(new RegExp(escapeRegExp(find), 'g'), replace);\n}","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n\nimport { Contract } from 'ethers';\n\nconst _abi = [\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: 'address',\n name: 'previousAdmin',\n type: 'address',\n },\n {\n indexed: false,\n internalType: 'address',\n name: 'newAdmin',\n type: 'address',\n },\n ],\n name: 'AdminChanged',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'address',\n name: 'beacon',\n type: 'address',\n },\n ],\n name: 'BeaconUpgraded',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n components: [\n {\n internalType: 'uint32',\n name: 'id',\n type: 'uint32',\n },\n {\n internalType: 'uint32',\n name: 'timestampStart',\n type: 'uint32',\n },\n {\n internalType: 'uint32',\n name: 'timestampEnd',\n type: 'uint32',\n },\n {\n components: [\n {\n internalType: 'address',\n name: 'addr',\n type: 'address',\n },\n {\n internalType: 'string',\n name: 'host',\n type: 'string',\n },\n ],\n internalType: 'struct Reclaim.Witness[]',\n name: 'witnesses',\n type: 'tuple[]',\n },\n {\n internalType: 'uint8',\n name: 'minimumWitnessesForClaimCreation',\n type: 'uint8',\n },\n ],\n indexed: false,\n internalType: 'struct Reclaim.Epoch',\n name: 'epoch',\n type: 'tuple',\n },\n ],\n name: 'EpochAdded',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: 'uint8',\n name: 'version',\n type: 'uint8',\n },\n ],\n name: 'Initialized',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'address',\n name: 'previousOwner',\n type: 'address',\n },\n {\n indexed: true,\n internalType: 'address',\n name: 'newOwner',\n type: 'address',\n },\n ],\n name: 'OwnershipTransferred',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'address',\n name: 'implementation',\n type: 'address',\n },\n ],\n name: 'Upgraded',\n type: 'event',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'witnessAddress',\n type: 'address',\n },\n {\n internalType: 'string',\n name: 'host',\n type: 'string',\n },\n ],\n name: 'addAsWitness',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [],\n name: 'addNewEpoch',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'uint32',\n name: 'epochNum',\n type: 'uint32',\n },\n {\n components: [\n {\n internalType: 'string',\n name: 'provider',\n type: 'string',\n },\n {\n internalType: 'string',\n name: 'parameters',\n type: 'string',\n },\n {\n internalType: 'string',\n name: 'context',\n type: 'string',\n },\n ],\n internalType: 'struct Claims.ClaimInfo',\n name: 'claimInfo',\n type: 'tuple',\n },\n {\n components: [\n {\n internalType: 'bytes32',\n name: 'identifier',\n type: 'bytes32',\n },\n {\n internalType: 'address',\n name: 'owner',\n type: 'address',\n },\n {\n internalType: 'uint32',\n name: 'timestampS',\n type: 'uint32',\n },\n {\n internalType: 'uint256',\n name: 'epoch',\n type: 'uint256',\n },\n ],\n internalType: 'struct Claims.CompleteClaimData',\n name: 'claimData',\n type: 'tuple',\n },\n {\n internalType: 'bytes[]',\n name: 'signatures',\n type: 'bytes[]',\n },\n ],\n name: 'assertValidEpochAndSignedClaim',\n outputs: [],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'currentEpoch',\n outputs: [\n {\n internalType: 'uint32',\n name: '',\n type: 'uint32',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'epochDurationS',\n outputs: [\n {\n internalType: 'uint32',\n name: '',\n type: 'uint32',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n name: 'epochs',\n outputs: [\n {\n internalType: 'uint32',\n name: 'id',\n type: 'uint32',\n },\n {\n internalType: 'uint32',\n name: 'timestampStart',\n type: 'uint32',\n },\n {\n internalType: 'uint32',\n name: 'timestampEnd',\n type: 'uint32',\n },\n {\n internalType: 'uint8',\n name: 'minimumWitnessesForClaimCreation',\n type: 'uint8',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'uint32',\n name: 'epoch',\n type: 'uint32',\n },\n ],\n name: 'fetchEpoch',\n outputs: [\n {\n components: [\n {\n internalType: 'uint32',\n name: 'id',\n type: 'uint32',\n },\n {\n internalType: 'uint32',\n name: 'timestampStart',\n type: 'uint32',\n },\n {\n internalType: 'uint32',\n name: 'timestampEnd',\n type: 'uint32',\n },\n {\n components: [\n {\n internalType: 'address',\n name: 'addr',\n type: 'address',\n },\n {\n internalType: 'string',\n name: 'host',\n type: 'string',\n },\n ],\n internalType: 'struct Reclaim.Witness[]',\n name: 'witnesses',\n type: 'tuple[]',\n },\n {\n internalType: 'uint8',\n name: 'minimumWitnessesForClaimCreation',\n type: 'uint8',\n },\n ],\n internalType: 'struct Reclaim.Epoch',\n name: '',\n type: 'tuple',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'uint32',\n name: 'epoch',\n type: 'uint32',\n },\n {\n internalType: 'bytes32',\n name: 'identifier',\n type: 'bytes32',\n },\n {\n internalType: 'uint32',\n name: 'timestampS',\n type: 'uint32',\n },\n ],\n name: 'fetchWitnessesForClaim',\n outputs: [\n {\n components: [\n {\n internalType: 'address',\n name: 'addr',\n type: 'address',\n },\n {\n internalType: 'string',\n name: 'host',\n type: 'string',\n },\n ],\n internalType: 'struct Reclaim.Witness[]',\n name: '',\n type: 'tuple[]',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'initialize',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [],\n name: 'minimumWitnessesForClaimCreation',\n outputs: [\n {\n internalType: 'uint8',\n name: '',\n type: 'uint8',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'owner',\n outputs: [\n {\n internalType: 'address',\n name: '',\n type: 'address',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'proxiableUUID',\n outputs: [\n {\n internalType: 'bytes32',\n name: '',\n type: 'bytes32',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'witnessAddress',\n type: 'address',\n },\n ],\n name: 'removeAsWitness',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [],\n name: 'renounceOwnership',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'newOwner',\n type: 'address',\n },\n ],\n name: 'transferOwnership',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'addr',\n type: 'address',\n },\n {\n internalType: 'bool',\n name: 'isWhitelisted',\n type: 'bool',\n },\n ],\n name: 'updateWitnessWhitelist',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'newImplementation',\n type: 'address',\n },\n ],\n name: 'upgradeTo',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'newImplementation',\n type: 'address',\n },\n {\n internalType: 'bytes',\n name: 'data',\n type: 'bytes',\n },\n ],\n name: 'upgradeToAndCall',\n outputs: [],\n stateMutability: 'payable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n name: 'witnesses',\n outputs: [\n {\n internalType: 'address',\n name: 'addr',\n type: 'address',\n },\n {\n internalType: 'string',\n name: 'host',\n type: 'string',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n] as const;\n\nexport class Reclaim__factory {\n static readonly abi = _abi;\n\n static connect(address: string, signerOrProvider: any): Contract {\n return new Contract(address, _abi, signerOrProvider);\n }\n}\n","{\n \"0x1a4\": {\n \"chainName\": \"opt-goerli\",\n \"address\": \"0xF93F605142Fb1Efad7Aa58253dDffF67775b4520\",\n \"rpcUrl\": \"https://opt-goerli.g.alchemy.com/v2/rksDkSUXd2dyk2ANy_zzODknx_AAokui\"\n },\n \"0xaa37dc\": {\n \"chainName\": \"opt-sepolia\",\n \"address\": \"0x6D0f81BDA11995f25921aAd5B43359630E65Ca96\",\n \"rpcUrl\": \"https://opt-sepolia.g.alchemy.com/v2/aO1-SfG4oFRLyAiLREqzyAUu0HTCwHgs\"\n}\n\n}\n","import type { Beacon, BeaconState } from './interfaces';\nimport { Reclaim__factory as ReclaimFactory } from './contract-types';\nimport CONTRACTS_CONFIG from './contract-types/config.json';\nimport { Contract, ethers } from 'ethers';\n\nconst DEFAULT_CHAIN_ID = 11155420;\n\nexport function makeBeacon(chainId?: number): Beacon | undefined {\n chainId = chainId || DEFAULT_CHAIN_ID;\n const contract = getContract(chainId);\n if (contract) {\n return makeBeaconCacheable({\n async getState(epochId: number | undefined): Promise<BeaconState> {\n //@ts-ignore\n const epoch = await contract.fetchEpoch(epochId || 0);\n if (!epoch.id) {\n throw new Error(`Invalid epoch ID: ${epochId}`);\n }\n\n return {\n epoch: epoch.id,\n witnesses: epoch.witnesses.map((w: any) => ({\n id: w.addr.toLowerCase(),\n url: w.host,\n })),\n witnessesRequiredForClaim: epoch.minimumWitnessesForClaimCreation,\n nextEpochTimestampS: epoch.timestampEnd,\n };\n },\n });\n } else {\n return undefined;\n }\n}\n\nexport function makeBeaconCacheable(beacon: Beacon): Beacon {\n const cache: { [epochId: number]: Promise<BeaconState> } = {};\n\n return {\n ...beacon,\n async getState(epochId: number | undefined): Promise<BeaconState> {\n if (!epochId) {\n // TODO: add cache here\n const state = await beacon.getState();\n return state;\n }\n\n const key = epochId;\n\n if (!cache[key]) {\n cache[key] = beacon.getState(epochId);\n }\n\n return cache[key] as unknown as BeaconState;\n },\n };\n}\n\nconst existingContractsMap: { [chain: string]: Contract } = {};\n\nfunction getContract(chainId: number): Contract {\n const chainKey = `0x${chainId.toString(16)}`;\n if (!existingContractsMap[chainKey]) {\n const contractData =\n CONTRACTS_CONFIG[chainKey as keyof typeof CONTRACTS_CONFIG];\n if (!contractData) {\n throw new Error(`Unsupported chain: \"${chainKey}\"`);\n }\n\n const rpcProvider = new ethers.JsonRpcProvider(contractData.rpcUrl);\n existingContractsMap[chainKey] = ReclaimFactory.connect(\n contractData.address,\n rpcProvider\n );\n }\n\n return existingContractsMap[chainKey] as Contract;\n}\n","// export const BACKEND_BASE_URL = \"http://localhost:3003\"\nexport const BACKEND_BASE_URL = \"https://api.reclaimprotocol.org\"\nexport const constants = {\n GET_PROVIDERS_BY_ID_API:\n BACKEND_BASE_URL + '/api/applications/providers',\n DEFAULT_RECLAIM_CALLBACK_URL:\n BACKEND_BASE_URL + '/api/sdk/callback?callbackId=',\n DEFAULT_RECLAIM_STATUS_URL:\n BACKEND_BASE_URL + '/api/sdk/session/',\n RECLAIM_SHARE_URL: 'https://share.reclaimprotocol.org/instant/?template=',\n};\n","\n\nexport class TimeoutError extends Error {\n constructor(message: string) {\n super(message)\n this.name = 'TimeoutError'\n }\n}\n\n\nexport class ProofNotVerifiedError extends Error {\n constructor(message?: string) {\n super(message)\n this.name = 'ProofNotVerifiedError'\n }\n}\n\nexport class SessionNotStartedError extends Error {\n constructor(message?: string) {\n super(message)\n this.name = 'SessionNotStartedError'\n }\n}\n\nexport class ProviderAPIError extends Error {\n constructor(message?: string) {\n super(message)\n this.name = 'ProviderAPIError'\n }\n}\n\nexport class BuildProofRequestError extends Error {\n constructor(message?: string) {\n super(message)\n this.name = 'BuildProofRequest'\n }\n}\n\nexport class SignatureGeneratingError extends Error {\n constructor(message?: string) {\n super(message)\n this.name = 'SignatureGeneratingError'\n }\n}\n\nexport class SignatureNotFoundError extends Error {\n constructor(message?: string) {\n super(message)\n this.name = 'SignatureNotFound'\n }\n}\n\nexport class InvalidSignatureError extends Error {\n constructor(message?: string) {\n super(message)\n this.name = 'InvalidSignatureError'\n }\n}\n\n\nexport class UpdateSessionError extends Error {\n constructor(message?: string) {\n super(message)\n this.name = 'UpdateSessionError'\n }\n}\n\nexport class CreateSessionError extends Error {\n constructor(message?: string) {\n super(message)\n this.name = 'CreateSessionError'\n }\n}\n\nexport class ProviderFailedError extends Error {\n constructor(message?: string) {\n super(message)\n this.name = 'ProviderFailedError'\n }\n}\nexport class InvalidParamError extends Error {\n constructor(message?: string) {\n super(message)\n this.name = 'InvalidParamError'\n }\n}"],"mappings":"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","names":["import_ethers","import_canonicalize","import_ethers","import_ethers","import_ethers","canonicalize","P","canonicalize","e"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@reclaimprotocol/js-sdk",
3
- "version": "0.1.3",
3
+ "version": "0.1.5",
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",