starknet 6.2.0 → 6.3.0

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.mjs CHANGED
@@ -1311,13 +1311,40 @@ function extractCairo0Tuple(type) {
1311
1311
  }
1312
1312
  return recomposed;
1313
1313
  }
1314
+ function getClosureOffset(input, open, close) {
1315
+ for (let i = 0, counter = 0; i < input.length; i++) {
1316
+ if (input[i] === open) {
1317
+ counter++;
1318
+ } else if (input[i] === close && --counter === 0) {
1319
+ return i;
1320
+ }
1321
+ }
1322
+ return Number.POSITIVE_INFINITY;
1323
+ }
1314
1324
  function extractCairo1Tuple(type) {
1315
- const cleanType = type.replace(/\s/g, "").slice(1, -1);
1316
- const { subTuple, result } = parseSubTuple(cleanType);
1317
- const recomposed = result.split(",").map((it) => {
1318
- return subTuple.length ? it.replace(" ", subTuple.shift()) : it;
1319
- });
1320
- return recomposed;
1325
+ const input = type.slice(1, -1);
1326
+ const result = [];
1327
+ let currentIndex = 0;
1328
+ let limitIndex;
1329
+ while (currentIndex < input.length) {
1330
+ switch (true) {
1331
+ case input[currentIndex] === "(": {
1332
+ limitIndex = currentIndex + getClosureOffset(input.slice(currentIndex), "(", ")") + 1;
1333
+ break;
1334
+ }
1335
+ case (input.startsWith("core::result::Result::<", currentIndex) || input.startsWith("core::array::Array::<", currentIndex) || input.startsWith("core::option::Option::<", currentIndex)): {
1336
+ limitIndex = currentIndex + getClosureOffset(input.slice(currentIndex), "<", ">") + 1;
1337
+ break;
1338
+ }
1339
+ default: {
1340
+ const commaIndex = input.indexOf(",", currentIndex);
1341
+ limitIndex = commaIndex !== -1 ? commaIndex : Number.POSITIVE_INFINITY;
1342
+ }
1343
+ }
1344
+ result.push(input.slice(currentIndex, limitIndex));
1345
+ currentIndex = limitIndex + 2;
1346
+ }
1347
+ return result;
1321
1348
  }
1322
1349
  function extractTupleMemberTypes(type) {
1323
1350
  if (isCairo1Type(type)) {
@@ -4467,7 +4494,20 @@ import { Mixin } from "ts-mixer";
4467
4494
  var starknetId_exports = {};
4468
4495
  __export(starknetId_exports, {
4469
4496
  StarknetIdContract: () => StarknetIdContract,
4497
+ StarknetIdIdentityContract: () => StarknetIdIdentityContract,
4498
+ StarknetIdMulticallContract: () => StarknetIdMulticallContract,
4499
+ StarknetIdPfpContract: () => StarknetIdPfpContract,
4500
+ StarknetIdPopContract: () => StarknetIdPopContract,
4501
+ StarknetIdVerifierContract: () => StarknetIdVerifierContract,
4502
+ dynamicCallData: () => dynamicCallData,
4503
+ dynamicFelt: () => dynamicFelt,
4504
+ execution: () => execution,
4470
4505
  getStarknetIdContract: () => getStarknetIdContract,
4506
+ getStarknetIdIdentityContract: () => getStarknetIdIdentityContract,
4507
+ getStarknetIdMulticallContract: () => getStarknetIdMulticallContract,
4508
+ getStarknetIdPfpContract: () => getStarknetIdPfpContract,
4509
+ getStarknetIdPopContract: () => getStarknetIdPopContract,
4510
+ getStarknetIdVerifierContract: () => getStarknetIdVerifierContract,
4471
4511
  useDecoded: () => useDecoded,
4472
4512
  useEncoded: () => useEncoded
4473
4513
  });
@@ -4555,6 +4595,7 @@ function useEncoded(decoded) {
4555
4595
  var StarknetIdContract = /* @__PURE__ */ ((StarknetIdContract2) => {
4556
4596
  StarknetIdContract2["MAINNET"] = "0x6ac597f8116f886fa1c97a23fa4e08299975ecaf6b598873ca6792b9bbfb678";
4557
4597
  StarknetIdContract2["TESTNET"] = "0x3bab268e932d2cecd1946f100ae67ce3dff9fd234119ea2f6da57d16d29fce";
4598
+ StarknetIdContract2["TESTNET_SEPOLIA"] = "0x5847d20f9757de24395a7b3b47303684003753858737bf288716855dfb0aaf2";
4558
4599
  return StarknetIdContract2;
4559
4600
  })(StarknetIdContract || {});
4560
4601
  function getStarknetIdContract(chainId) {
@@ -4563,10 +4604,121 @@ function getStarknetIdContract(chainId) {
4563
4604
  return "0x6ac597f8116f886fa1c97a23fa4e08299975ecaf6b598873ca6792b9bbfb678" /* MAINNET */;
4564
4605
  case "0x534e5f474f45524c49" /* SN_GOERLI */:
4565
4606
  return "0x3bab268e932d2cecd1946f100ae67ce3dff9fd234119ea2f6da57d16d29fce" /* TESTNET */;
4607
+ case "0x534e5f5345504f4c4941" /* SN_SEPOLIA */:
4608
+ return "0x5847d20f9757de24395a7b3b47303684003753858737bf288716855dfb0aaf2" /* TESTNET_SEPOLIA */;
4566
4609
  default:
4567
4610
  throw new Error("Starknet.id is not yet deployed on this network");
4568
4611
  }
4569
4612
  }
4613
+ var StarknetIdIdentityContract = /* @__PURE__ */ ((StarknetIdIdentityContract2) => {
4614
+ StarknetIdIdentityContract2["MAINNET"] = "0x05dbdedc203e92749e2e746e2d40a768d966bd243df04a6b712e222bc040a9af";
4615
+ StarknetIdIdentityContract2["TESTNET"] = "0x783a9097b26eae0586373b2ce0ed3529ddc44069d1e0fbc4f66d42b69d6850d";
4616
+ StarknetIdIdentityContract2["TESTNET_SEPOLIA"] = "0x718d9172f6e36183abeeff1a0db76a1851cef4ed9b9c13896da79ef4bfcb4d0";
4617
+ return StarknetIdIdentityContract2;
4618
+ })(StarknetIdIdentityContract || {});
4619
+ function getStarknetIdIdentityContract(chainId) {
4620
+ switch (chainId) {
4621
+ case "0x534e5f4d41494e" /* SN_MAIN */:
4622
+ return "0x05dbdedc203e92749e2e746e2d40a768d966bd243df04a6b712e222bc040a9af" /* MAINNET */;
4623
+ case "0x534e5f474f45524c49" /* SN_GOERLI */:
4624
+ return "0x783a9097b26eae0586373b2ce0ed3529ddc44069d1e0fbc4f66d42b69d6850d" /* TESTNET */;
4625
+ case "0x534e5f5345504f4c4941" /* SN_SEPOLIA */:
4626
+ return "0x718d9172f6e36183abeeff1a0db76a1851cef4ed9b9c13896da79ef4bfcb4d0" /* TESTNET_SEPOLIA */;
4627
+ default:
4628
+ throw new Error("Starknet.id verifier contract is not yet deployed on this network");
4629
+ }
4630
+ }
4631
+ var StarknetIdMulticallContract = "0x034ffb8f4452df7a613a0210824d6414dbadcddce6c6e19bf4ddc9e22ce5f970";
4632
+ function getStarknetIdMulticallContract(chainId) {
4633
+ switch (chainId) {
4634
+ case "0x534e5f4d41494e" /* SN_MAIN */:
4635
+ return StarknetIdMulticallContract;
4636
+ case "0x534e5f474f45524c49" /* SN_GOERLI */:
4637
+ return StarknetIdMulticallContract;
4638
+ case "0x534e5f5345504f4c4941" /* SN_SEPOLIA */:
4639
+ return StarknetIdMulticallContract;
4640
+ default:
4641
+ throw new Error("Starknet.id multicall contract is not yet deployed on this network");
4642
+ }
4643
+ }
4644
+ var StarknetIdVerifierContract = /* @__PURE__ */ ((StarknetIdVerifierContract2) => {
4645
+ StarknetIdVerifierContract2["MAINNET"] = "0x07d14dfd8ee95b41fce179170d88ba1f0d5a512e13aeb232f19cfeec0a88f8bf";
4646
+ StarknetIdVerifierContract2["TESTNET"] = "0x057c942544063c3aea6ea6c37009cc9d1beacd750cb6801549a129c7265f0f11";
4647
+ StarknetIdVerifierContract2["TESTNET_SEPOLIA"] = "0x041a78e741e5af2fec34b695679bc6891742439f7afb8484ecd7766661ad02bf";
4648
+ return StarknetIdVerifierContract2;
4649
+ })(StarknetIdVerifierContract || {});
4650
+ function getStarknetIdVerifierContract(chainId) {
4651
+ switch (chainId) {
4652
+ case "0x534e5f4d41494e" /* SN_MAIN */:
4653
+ return "0x07d14dfd8ee95b41fce179170d88ba1f0d5a512e13aeb232f19cfeec0a88f8bf" /* MAINNET */;
4654
+ case "0x534e5f474f45524c49" /* SN_GOERLI */:
4655
+ return "0x057c942544063c3aea6ea6c37009cc9d1beacd750cb6801549a129c7265f0f11" /* TESTNET */;
4656
+ case "0x534e5f5345504f4c4941" /* SN_SEPOLIA */:
4657
+ return "0x041a78e741e5af2fec34b695679bc6891742439f7afb8484ecd7766661ad02bf" /* TESTNET_SEPOLIA */;
4658
+ default:
4659
+ throw new Error("Starknet.id verifier contract is not yet deployed on this network");
4660
+ }
4661
+ }
4662
+ var StarknetIdPfpContract = /* @__PURE__ */ ((StarknetIdPfpContract2) => {
4663
+ StarknetIdPfpContract2["MAINNET"] = "0x070aaa20ec4a46da57c932d9fd89ca5e6bb9ca3188d3df361a32306aff7d59c7";
4664
+ StarknetIdPfpContract2["TESTNET"] = "0x03cac3228b434259734ee0e4ff445f642206ea11adace7e4f45edd2596748698";
4665
+ StarknetIdPfpContract2["TESTNET_SEPOLIA"] = "0x070c035557d6fed57eed2ed7fa861616b487f8a95439347b805639ca076f29f0";
4666
+ return StarknetIdPfpContract2;
4667
+ })(StarknetIdPfpContract || {});
4668
+ function getStarknetIdPfpContract(chainId) {
4669
+ switch (chainId) {
4670
+ case "0x534e5f4d41494e" /* SN_MAIN */:
4671
+ return "0x070aaa20ec4a46da57c932d9fd89ca5e6bb9ca3188d3df361a32306aff7d59c7" /* MAINNET */;
4672
+ case "0x534e5f474f45524c49" /* SN_GOERLI */:
4673
+ return "0x03cac3228b434259734ee0e4ff445f642206ea11adace7e4f45edd2596748698" /* TESTNET */;
4674
+ case "0x534e5f5345504f4c4941" /* SN_SEPOLIA */:
4675
+ return "0x070c035557d6fed57eed2ed7fa861616b487f8a95439347b805639ca076f29f0" /* TESTNET_SEPOLIA */;
4676
+ default:
4677
+ throw new Error(
4678
+ "Starknet.id profile picture verifier contract is not yet deployed on this network"
4679
+ );
4680
+ }
4681
+ }
4682
+ var StarknetIdPopContract = /* @__PURE__ */ ((StarknetIdPopContract2) => {
4683
+ StarknetIdPopContract2["MAINNET"] = "0x0293eb2ba9862f762bd3036586d5755a782bd22e6f5028320f1d0405fd47bff4";
4684
+ StarknetIdPopContract2["TESTNET"] = "0x03528caf090179e337931ee669a5b0214041e1bae30d460ff07d2cea2c7a9106";
4685
+ StarknetIdPopContract2["TESTNET_SEPOLIA"] = "0x00f80f68443becd0e0a4a08ff5734e36dd8028507333e4a0ec034dcfdf1b793e";
4686
+ return StarknetIdPopContract2;
4687
+ })(StarknetIdPopContract || {});
4688
+ function getStarknetIdPopContract(chainId) {
4689
+ switch (chainId) {
4690
+ case "0x534e5f4d41494e" /* SN_MAIN */:
4691
+ return "0x0293eb2ba9862f762bd3036586d5755a782bd22e6f5028320f1d0405fd47bff4" /* MAINNET */;
4692
+ case "0x534e5f474f45524c49" /* SN_GOERLI */:
4693
+ return "0x03528caf090179e337931ee669a5b0214041e1bae30d460ff07d2cea2c7a9106" /* TESTNET */;
4694
+ case "0x534e5f5345504f4c4941" /* SN_SEPOLIA */:
4695
+ return "0x00f80f68443becd0e0a4a08ff5734e36dd8028507333e4a0ec034dcfdf1b793e" /* TESTNET_SEPOLIA */;
4696
+ default:
4697
+ throw new Error(
4698
+ "Starknet.id proof of personhood verifier contract is not yet deployed on this network"
4699
+ );
4700
+ }
4701
+ }
4702
+ function execution(staticEx, ifEqual = void 0, ifNotEqual = void 0) {
4703
+ return new CairoCustomEnum({
4704
+ Static: staticEx,
4705
+ IfEqual: ifEqual ? tuple(ifEqual[0], ifEqual[1], ifEqual[2]) : void 0,
4706
+ IfNotEqual: ifNotEqual ? tuple(ifNotEqual[0], ifNotEqual[1], ifNotEqual[2]) : void 0
4707
+ });
4708
+ }
4709
+ function dynamicFelt(hardcoded, reference = void 0) {
4710
+ return new CairoCustomEnum({
4711
+ Hardcoded: hardcoded,
4712
+ Reference: reference ? tuple(reference[0], reference[1]) : void 0
4713
+ });
4714
+ }
4715
+ function dynamicCallData(hardcoded, reference = void 0, arrayReference = void 0) {
4716
+ return new CairoCustomEnum({
4717
+ Hardcoded: hardcoded,
4718
+ Reference: reference ? tuple(reference[0], reference[1]) : void 0,
4719
+ ArrayReference: arrayReference ? tuple(arrayReference[0], arrayReference[1]) : void 0
4720
+ });
4721
+ }
4570
4722
 
4571
4723
  // src/provider/extensions/starknetId.ts
4572
4724
  var StarknetId = class _StarknetId {
@@ -4586,6 +4738,19 @@ var StarknetId = class _StarknetId {
4586
4738
  StarknetIdContract2
4587
4739
  );
4588
4740
  }
4741
+ async getStarkProfile(address, StarknetIdContract2, StarknetIdIdentityContract2, StarknetIdVerifierContract2, StarknetIdPfpContract2, StarknetIdPopContract2, StarknetIdMulticallContract2) {
4742
+ return _StarknetId.getStarkProfile(
4743
+ // After Mixin, this is ProviderInterface
4744
+ this,
4745
+ address,
4746
+ StarknetIdContract2,
4747
+ StarknetIdIdentityContract2,
4748
+ StarknetIdVerifierContract2,
4749
+ StarknetIdPfpContract2,
4750
+ StarknetIdPopContract2,
4751
+ StarknetIdMulticallContract2
4752
+ );
4753
+ }
4589
4754
  static async getStarkName(provider, address, StarknetIdContract2) {
4590
4755
  const chainId = await provider.getChainId();
4591
4756
  const contract = StarknetIdContract2 ?? getStarknetIdContract(chainId);
@@ -4614,18 +4779,159 @@ var StarknetId = class _StarknetId {
4614
4779
  const chainId = await provider.getChainId();
4615
4780
  const contract = StarknetIdContract2 ?? getStarknetIdContract(chainId);
4616
4781
  try {
4782
+ const encodedDomain = name.replace(".stark", "").split(".").map((part) => useEncoded(part).toString(10));
4617
4783
  const addressData = await provider.callContract({
4618
4784
  contractAddress: contract,
4619
4785
  entrypoint: "domain_to_address",
4620
- calldata: CallData.compile({
4621
- domain: [useEncoded(name.replace(".stark", "")).toString(10)]
4622
- })
4786
+ calldata: CallData.compile({ domain: encodedDomain, hint: [] })
4623
4787
  });
4624
4788
  return addressData[0];
4625
4789
  } catch {
4626
4790
  throw Error("Could not get address from stark name");
4627
4791
  }
4628
4792
  }
4793
+ static async getStarkProfile(provider, address, StarknetIdContract2, StarknetIdIdentityContract2, StarknetIdVerifierContract2, StarknetIdPfpContract2, StarknetIdPopContract2, StarknetIdMulticallContract2) {
4794
+ const chainId = await provider.getChainId();
4795
+ const contract = StarknetIdContract2 ?? getStarknetIdContract(chainId);
4796
+ const identityContract = StarknetIdIdentityContract2 ?? getStarknetIdIdentityContract(chainId);
4797
+ const verifierContract = StarknetIdVerifierContract2 ?? getStarknetIdVerifierContract(chainId);
4798
+ const pfpContract = StarknetIdPfpContract2 ?? getStarknetIdPfpContract(chainId);
4799
+ const popContract = StarknetIdPopContract2 ?? getStarknetIdPopContract(chainId);
4800
+ const multicallAddress = StarknetIdMulticallContract2 ?? getStarknetIdMulticallContract(chainId);
4801
+ try {
4802
+ const data = await provider.callContract({
4803
+ contractAddress: multicallAddress,
4804
+ entrypoint: "aggregate",
4805
+ calldata: CallData.compile({
4806
+ calls: [
4807
+ {
4808
+ execution: execution({}),
4809
+ to: dynamicFelt(contract),
4810
+ selector: dynamicFelt(getSelectorFromName("address_to_domain")),
4811
+ calldata: [dynamicCallData(address)]
4812
+ },
4813
+ {
4814
+ execution: execution({}),
4815
+ to: dynamicFelt(contract),
4816
+ selector: dynamicFelt(getSelectorFromName("domain_to_id")),
4817
+ calldata: [dynamicCallData(void 0, void 0, [0, 0])]
4818
+ },
4819
+ {
4820
+ execution: execution({}),
4821
+ to: dynamicFelt(identityContract),
4822
+ selector: dynamicFelt(getSelectorFromName("get_verifier_data")),
4823
+ calldata: [
4824
+ dynamicCallData(void 0, [1, 0]),
4825
+ dynamicCallData(encodeShortString("twitter")),
4826
+ dynamicCallData(verifierContract),
4827
+ dynamicCallData("0")
4828
+ ]
4829
+ },
4830
+ {
4831
+ execution: execution({}),
4832
+ to: dynamicFelt(identityContract),
4833
+ selector: dynamicFelt(getSelectorFromName("get_verifier_data")),
4834
+ calldata: [
4835
+ dynamicCallData(void 0, [1, 0]),
4836
+ dynamicCallData(encodeShortString("github")),
4837
+ dynamicCallData(verifierContract),
4838
+ dynamicCallData("0")
4839
+ ]
4840
+ },
4841
+ {
4842
+ execution: execution({}),
4843
+ to: dynamicFelt(identityContract),
4844
+ selector: dynamicFelt(getSelectorFromName("get_verifier_data")),
4845
+ calldata: [
4846
+ dynamicCallData(void 0, [1, 0]),
4847
+ dynamicCallData(encodeShortString("discord")),
4848
+ dynamicCallData(verifierContract),
4849
+ dynamicCallData("0")
4850
+ ]
4851
+ },
4852
+ {
4853
+ execution: execution({}),
4854
+ to: dynamicFelt(identityContract),
4855
+ selector: dynamicFelt(getSelectorFromName("get_verifier_data")),
4856
+ calldata: [
4857
+ dynamicCallData(void 0, [1, 0]),
4858
+ dynamicCallData(encodeShortString("proof_of_personhood")),
4859
+ dynamicCallData(popContract),
4860
+ dynamicCallData("0")
4861
+ ]
4862
+ },
4863
+ // PFP
4864
+ {
4865
+ execution: execution({}),
4866
+ to: dynamicFelt(identityContract),
4867
+ selector: dynamicFelt(getSelectorFromName("get_verifier_data")),
4868
+ calldata: [
4869
+ dynamicCallData(void 0, [1, 0]),
4870
+ dynamicCallData(encodeShortString("nft_pp_contract")),
4871
+ dynamicCallData(pfpContract),
4872
+ dynamicCallData("0")
4873
+ ]
4874
+ },
4875
+ {
4876
+ execution: execution({}),
4877
+ to: dynamicFelt(identityContract),
4878
+ selector: dynamicFelt(getSelectorFromName("get_extended_verifier_data")),
4879
+ calldata: [
4880
+ dynamicCallData(void 0, [1, 0]),
4881
+ dynamicCallData(encodeShortString("nft_pp_id")),
4882
+ dynamicCallData("2"),
4883
+ dynamicCallData(pfpContract),
4884
+ dynamicCallData("0")
4885
+ ]
4886
+ },
4887
+ {
4888
+ execution: execution(void 0, void 0, [6, 0, 0]),
4889
+ to: dynamicFelt(void 0, [6, 0]),
4890
+ selector: dynamicFelt(getSelectorFromName("tokenURI")),
4891
+ calldata: [dynamicCallData(void 0, [7, 1]), dynamicCallData(void 0, [7, 2])]
4892
+ }
4893
+ ]
4894
+ })
4895
+ });
4896
+ if (Array.isArray(data)) {
4897
+ const size = parseInt(data[0], 16);
4898
+ const finalArray = [];
4899
+ let index = 1;
4900
+ for (let i = 0; i < size; i += 1) {
4901
+ if (index < data.length) {
4902
+ const subArraySize = parseInt(data[index], 16);
4903
+ index += 1;
4904
+ const subArray = data.slice(index, index + subArraySize);
4905
+ finalArray.push(subArray);
4906
+ index += subArraySize;
4907
+ } else {
4908
+ break;
4909
+ }
4910
+ }
4911
+ const name = useDecoded(finalArray[0].slice(1).map((hexString) => BigInt(hexString)));
4912
+ const twitter = finalArray[2][0] !== "0x0" ? BigInt(finalArray[2][0]).toString() : void 0;
4913
+ const github = finalArray[3][0] !== "0x0" ? BigInt(finalArray[3][0]).toString() : void 0;
4914
+ const discord = finalArray[4][0] !== "0x0" ? BigInt(finalArray[4][0]).toString() : void 0;
4915
+ const proofOfPersonhood = finalArray[5][0] === "0x1";
4916
+ const profilePictureMetadata = data[0] === "0x9" ? finalArray[8].slice(1).map((val) => decodeShortString(val)).join("") : void 0;
4917
+ const profilePicture = profilePictureMetadata || `https://starknet.id/api/identicons/${BigInt(finalArray[1][0]).toString()}`;
4918
+ return {
4919
+ name,
4920
+ twitter,
4921
+ github,
4922
+ discord,
4923
+ proofOfPersonhood,
4924
+ profilePicture
4925
+ };
4926
+ }
4927
+ throw Error("Error while calling aggregate function");
4928
+ } catch (e) {
4929
+ if (e instanceof Error) {
4930
+ throw e;
4931
+ }
4932
+ throw Error("Could not get user stark profile data from address");
4933
+ }
4934
+ }
4629
4935
  };
4630
4936
 
4631
4937
  // src/provider/extensions/default.ts