@vechain/vechain-kit 1.7.0 → 1.8.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.
@@ -1,5 +1,38 @@
1
1
  import { LoginMethodOrderOption } from '@privy-io/react-auth';
2
2
 
3
+ /**
4
+ * The type of network that we are connected to (indentified by the genesis block)
5
+ * */
6
+ type NETWORK_TYPE = 'main' | 'test' | 'solo';
7
+ /**
8
+ * A model for the VechainThor network that we are connected to
9
+ * @field `id` - Unique ID for this network
10
+ * @field `defaultNet` - If the network is a default network
11
+ * @field `name` - A name for this network
12
+ * @field `type` - What type of network is it? `main, test, solo or custom`
13
+ * @field `urls` - A list of URLs for this network
14
+ * @field `currentUrl` - The current URL that we are connected to
15
+ * @field `explorerUrl` - The explorer URL for this network
16
+ * @field `genesis` - The genesis block for the network
17
+ * @field `blockTime` - The time it takes to mine a block in milliseconds
18
+ */
19
+ type Network = {
20
+ id: string;
21
+ defaultNet: boolean;
22
+ name: string;
23
+ type: NETWORK_TYPE;
24
+ urls: string[];
25
+ explorerUrl?: string;
26
+ genesis: typeof genesises.main;
27
+ blockTime: number;
28
+ };
29
+ declare const genesises: {
30
+ readonly main: Connex.Thor.Block;
31
+ readonly test: Connex.Thor.Block;
32
+ readonly solo: Connex.Thor.Block;
33
+ which(gid: string): "solo" | "main" | "test" | undefined;
34
+ };
35
+
3
36
  type ENSRecords = {
4
37
  display?: string;
5
38
  description?: string;
@@ -146,39 +179,6 @@ declare enum VePassportUserStatus {
146
179
  type CURRENCY = "usd" | "gbp" | "eur";
147
180
  declare const CURRENCY_SYMBOLS: Record<CURRENCY, string>;
148
181
 
149
- /**
150
- * The type of network that we are connected to (indentified by the genesis block)
151
- * */
152
- type NETWORK_TYPE = 'main' | 'test' | 'solo';
153
- /**
154
- * A model for the VechainThor network that we are connected to
155
- * @field `id` - Unique ID for this network
156
- * @field `defaultNet` - If the network is a default network
157
- * @field `name` - A name for this network
158
- * @field `type` - What type of network is it? `main, test, solo or custom`
159
- * @field `urls` - A list of URLs for this network
160
- * @field `currentUrl` - The current URL that we are connected to
161
- * @field `explorerUrl` - The explorer URL for this network
162
- * @field `genesis` - The genesis block for the network
163
- * @field `blockTime` - The time it takes to mine a block in milliseconds
164
- */
165
- type Network = {
166
- id: string;
167
- defaultNet: boolean;
168
- name: string;
169
- type: NETWORK_TYPE;
170
- urls: string[];
171
- explorerUrl?: string;
172
- genesis: typeof genesises.main;
173
- blockTime: number;
174
- };
175
- declare const genesises: {
176
- readonly main: Connex.Thor.Block;
177
- readonly test: Connex.Thor.Block;
178
- readonly solo: Connex.Thor.Block;
179
- which(gid: string): "main" | "test" | "solo" | undefined;
180
- };
181
-
182
182
  declare const TOKEN_LOGOS: Record<string, string>;
183
183
  declare const TOKEN_LOGO_COMPONENTS: Record<string, JSX.Element>;
184
184
  declare const VECHAIN_PRIVY_APP_ID = "cm4wxxujb022fyujl7g0thb21";
@@ -209,5 +209,17 @@ type PrivyEcosystemApp = {
209
209
  website: string;
210
210
  };
211
211
  declare const DEFAULT_PRIVY_ECOSYSTEM_APPS: PrivyEcosystemApp[];
212
+ declare const VECHAIN_KIT_TERMS_CONFIG: {
213
+ url: string;
214
+ version: number;
215
+ required: boolean;
216
+ displayName: string;
217
+ };
218
+ declare const VECHAIN_KIT_COOKIES_CONFIG: {
219
+ url: string;
220
+ version: number;
221
+ required: boolean;
222
+ displayName: string;
223
+ };
212
224
 
213
- export { type CURRENCY as C, DEFAULT_PRIVY_ECOSYSTEM_APPS as D, type EnhancedClause as E, type NETWORK_TYPE as N, type PrivyLoginMethod as P, type SmartAccount as S, TogglePassportCheck as T, VePassportUserStatus as V, type Wallet as W, type Network as a, type PrivyAppInfo as b, type TransactionStatus as c, type TransactionStatusErrorType as d, type ConnectionSource as e, type ENSRecords as f, NFTMediaType as g, type CrossAppConnectionCache as h, type ExecuteWithAuthorizationSignData as i, type ExecuteBatchWithAuthorizationSignData as j, CURRENCY_SYMBOLS as k, TOKEN_LOGOS as l, TOKEN_LOGO_COMPONENTS as m, VECHAIN_PRIVY_APP_ID as n, notFoundImage as o, VECHAIN_KIT_STORAGE_KEYS as p, ENV as q, VECHAIN_KIT_MIXPANEL_TOKENS as r, VECHAIN_KIT_MIXPANEL_PROJECT_TOKEN as s, VECHAIN_KIT_MIXPANEL_PROJECT_NAME as t, type PrivyEcosystemApp as u };
225
+ export { type CURRENCY as C, DEFAULT_PRIVY_ECOSYSTEM_APPS as D, type EnhancedClause as E, type NETWORK_TYPE as N, type PrivyLoginMethod as P, type SmartAccount as S, TogglePassportCheck as T, VePassportUserStatus as V, type Wallet as W, type Network as a, type PrivyAppInfo as b, type TransactionStatus as c, type TransactionStatusErrorType as d, type ConnectionSource as e, type ENSRecords as f, NFTMediaType as g, type CrossAppConnectionCache as h, type ExecuteWithAuthorizationSignData as i, type ExecuteBatchWithAuthorizationSignData as j, CURRENCY_SYMBOLS as k, TOKEN_LOGOS as l, TOKEN_LOGO_COMPONENTS as m, VECHAIN_PRIVY_APP_ID as n, notFoundImage as o, VECHAIN_KIT_STORAGE_KEYS as p, ENV as q, VECHAIN_KIT_MIXPANEL_TOKENS as r, VECHAIN_KIT_MIXPANEL_PROJECT_TOKEN as s, VECHAIN_KIT_MIXPANEL_PROJECT_NAME as t, type PrivyEcosystemApp as u, VECHAIN_KIT_TERMS_CONFIG as v, VECHAIN_KIT_COOKIES_CONFIG as w };
@@ -1,5 +1,38 @@
1
1
  import { LoginMethodOrderOption } from '@privy-io/react-auth';
2
2
 
3
+ /**
4
+ * The type of network that we are connected to (indentified by the genesis block)
5
+ * */
6
+ type NETWORK_TYPE = 'main' | 'test' | 'solo';
7
+ /**
8
+ * A model for the VechainThor network that we are connected to
9
+ * @field `id` - Unique ID for this network
10
+ * @field `defaultNet` - If the network is a default network
11
+ * @field `name` - A name for this network
12
+ * @field `type` - What type of network is it? `main, test, solo or custom`
13
+ * @field `urls` - A list of URLs for this network
14
+ * @field `currentUrl` - The current URL that we are connected to
15
+ * @field `explorerUrl` - The explorer URL for this network
16
+ * @field `genesis` - The genesis block for the network
17
+ * @field `blockTime` - The time it takes to mine a block in milliseconds
18
+ */
19
+ type Network = {
20
+ id: string;
21
+ defaultNet: boolean;
22
+ name: string;
23
+ type: NETWORK_TYPE;
24
+ urls: string[];
25
+ explorerUrl?: string;
26
+ genesis: typeof genesises.main;
27
+ blockTime: number;
28
+ };
29
+ declare const genesises: {
30
+ readonly main: Connex.Thor.Block;
31
+ readonly test: Connex.Thor.Block;
32
+ readonly solo: Connex.Thor.Block;
33
+ which(gid: string): "solo" | "main" | "test" | undefined;
34
+ };
35
+
3
36
  type ENSRecords = {
4
37
  display?: string;
5
38
  description?: string;
@@ -146,39 +179,6 @@ declare enum VePassportUserStatus {
146
179
  type CURRENCY = "usd" | "gbp" | "eur";
147
180
  declare const CURRENCY_SYMBOLS: Record<CURRENCY, string>;
148
181
 
149
- /**
150
- * The type of network that we are connected to (indentified by the genesis block)
151
- * */
152
- type NETWORK_TYPE = 'main' | 'test' | 'solo';
153
- /**
154
- * A model for the VechainThor network that we are connected to
155
- * @field `id` - Unique ID for this network
156
- * @field `defaultNet` - If the network is a default network
157
- * @field `name` - A name for this network
158
- * @field `type` - What type of network is it? `main, test, solo or custom`
159
- * @field `urls` - A list of URLs for this network
160
- * @field `currentUrl` - The current URL that we are connected to
161
- * @field `explorerUrl` - The explorer URL for this network
162
- * @field `genesis` - The genesis block for the network
163
- * @field `blockTime` - The time it takes to mine a block in milliseconds
164
- */
165
- type Network = {
166
- id: string;
167
- defaultNet: boolean;
168
- name: string;
169
- type: NETWORK_TYPE;
170
- urls: string[];
171
- explorerUrl?: string;
172
- genesis: typeof genesises.main;
173
- blockTime: number;
174
- };
175
- declare const genesises: {
176
- readonly main: Connex.Thor.Block;
177
- readonly test: Connex.Thor.Block;
178
- readonly solo: Connex.Thor.Block;
179
- which(gid: string): "main" | "test" | "solo" | undefined;
180
- };
181
-
182
182
  declare const TOKEN_LOGOS: Record<string, string>;
183
183
  declare const TOKEN_LOGO_COMPONENTS: Record<string, JSX.Element>;
184
184
  declare const VECHAIN_PRIVY_APP_ID = "cm4wxxujb022fyujl7g0thb21";
@@ -209,5 +209,17 @@ type PrivyEcosystemApp = {
209
209
  website: string;
210
210
  };
211
211
  declare const DEFAULT_PRIVY_ECOSYSTEM_APPS: PrivyEcosystemApp[];
212
+ declare const VECHAIN_KIT_TERMS_CONFIG: {
213
+ url: string;
214
+ version: number;
215
+ required: boolean;
216
+ displayName: string;
217
+ };
218
+ declare const VECHAIN_KIT_COOKIES_CONFIG: {
219
+ url: string;
220
+ version: number;
221
+ required: boolean;
222
+ displayName: string;
223
+ };
212
224
 
213
- export { type CURRENCY as C, DEFAULT_PRIVY_ECOSYSTEM_APPS as D, type EnhancedClause as E, type NETWORK_TYPE as N, type PrivyLoginMethod as P, type SmartAccount as S, TogglePassportCheck as T, VePassportUserStatus as V, type Wallet as W, type Network as a, type PrivyAppInfo as b, type TransactionStatus as c, type TransactionStatusErrorType as d, type ConnectionSource as e, type ENSRecords as f, NFTMediaType as g, type CrossAppConnectionCache as h, type ExecuteWithAuthorizationSignData as i, type ExecuteBatchWithAuthorizationSignData as j, CURRENCY_SYMBOLS as k, TOKEN_LOGOS as l, TOKEN_LOGO_COMPONENTS as m, VECHAIN_PRIVY_APP_ID as n, notFoundImage as o, VECHAIN_KIT_STORAGE_KEYS as p, ENV as q, VECHAIN_KIT_MIXPANEL_TOKENS as r, VECHAIN_KIT_MIXPANEL_PROJECT_TOKEN as s, VECHAIN_KIT_MIXPANEL_PROJECT_NAME as t, type PrivyEcosystemApp as u };
225
+ export { type CURRENCY as C, DEFAULT_PRIVY_ECOSYSTEM_APPS as D, type EnhancedClause as E, type NETWORK_TYPE as N, type PrivyLoginMethod as P, type SmartAccount as S, TogglePassportCheck as T, VePassportUserStatus as V, type Wallet as W, type Network as a, type PrivyAppInfo as b, type TransactionStatus as c, type TransactionStatusErrorType as d, type ConnectionSource as e, type ENSRecords as f, NFTMediaType as g, type CrossAppConnectionCache as h, type ExecuteWithAuthorizationSignData as i, type ExecuteBatchWithAuthorizationSignData as j, CURRENCY_SYMBOLS as k, TOKEN_LOGOS as l, TOKEN_LOGO_COMPONENTS as m, VECHAIN_PRIVY_APP_ID as n, notFoundImage as o, VECHAIN_KIT_STORAGE_KEYS as p, ENV as q, VECHAIN_KIT_MIXPANEL_TOKENS as r, VECHAIN_KIT_MIXPANEL_PROJECT_TOKEN as s, VECHAIN_KIT_MIXPANEL_PROJECT_NAME as t, type PrivyEcosystemApp as u, VECHAIN_KIT_TERMS_CONFIG as v, VECHAIN_KIT_COOKIES_CONFIG as w };
@@ -87,6 +87,18 @@ var DEFAULT_PRIVY_ECOSYSTEM_APPS = [
87
87
  website: "https://evearn.io"
88
88
  }
89
89
  ];
90
+ var VECHAIN_KIT_TERMS_CONFIG = {
91
+ url: "https://vechainkit.vechain.org/terms",
92
+ version: 1,
93
+ required: true,
94
+ displayName: "Vechain Kit Terms"
95
+ };
96
+ var VECHAIN_KIT_COOKIES_CONFIG = {
97
+ url: "https://vechainkit.vechain.org/cookies",
98
+ version: 1,
99
+ required: false,
100
+ displayName: "Vechain Kit Cookies"
101
+ };
90
102
  var humanAddress = (address2, charAtStart = 6, charAtEnd = 4) => `${address2.slice(0, charAtStart)}\u2022\u2022\u2022${address2.slice(-charAtEnd)}`;
91
103
  var humanDomain = (domain, lengthBefore = 8, lengthAfter = 6) => {
92
104
  if (domain.length <= lengthBefore + lengthAfter) return domain;
@@ -466,6 +478,54 @@ async function uploadBlobToIPFS(blob, filename, networkType) {
466
478
  }
467
479
  }
468
480
 
481
+ // src/types/Types.ts
482
+ var NFTMediaType = /* @__PURE__ */ ((NFTMediaType2) => {
483
+ NFTMediaType2["IMAGE"] = "image";
484
+ NFTMediaType2["VIDEO"] = "video";
485
+ NFTMediaType2["UNKNOWN"] = "unknown";
486
+ NFTMediaType2["TEXT"] = "text";
487
+ return NFTMediaType2;
488
+ })(NFTMediaType || {});
489
+ var VePassportUserStatus = /* @__PURE__ */ ((VePassportUserStatus2) => {
490
+ VePassportUserStatus2["NONE"] = "NONE";
491
+ VePassportUserStatus2["WHITELIST"] = "WHITELIST";
492
+ VePassportUserStatus2["BLACKLIST"] = "BLACKLIST";
493
+ return VePassportUserStatus2;
494
+ })(VePassportUserStatus || {});
495
+ var CURRENCY_SYMBOLS = {
496
+ usd: "$",
497
+ gbp: "\xA3",
498
+ eur: "\u20AC"
499
+ };
500
+
501
+ // src/types/ensTextRecords.ts
502
+ var ENS_TEXT_RECORDS = [
503
+ "display",
504
+ "avatar",
505
+ "description",
506
+ "keywords",
507
+ "email",
508
+ "url",
509
+ "header",
510
+ "notice",
511
+ "location",
512
+ "phone",
513
+ "com.x"
514
+ ];
515
+
516
+ // src/types/index.ts
517
+ var LegalDocumentType = /* @__PURE__ */ ((LegalDocumentType2) => {
518
+ LegalDocumentType2["TERMS"] = "terms";
519
+ LegalDocumentType2["PRIVACY"] = "privacy";
520
+ LegalDocumentType2["COOKIES"] = "cookies";
521
+ return LegalDocumentType2;
522
+ })(LegalDocumentType || {});
523
+ var LegalDocumentSource = /* @__PURE__ */ ((LegalDocumentSource2) => {
524
+ LegalDocumentSource2["VECHAIN_KIT"] = "vechain-kit";
525
+ LegalDocumentSource2["APPLICATION"] = "application";
526
+ return LegalDocumentSource2;
527
+ })(LegalDocumentSource || {});
528
+
469
529
  // src/utils/media.ts
470
530
  var isValidMimeType = (mime, type) => {
471
531
  const found = type.find((t) => {
@@ -623,6 +683,16 @@ var allNodeStrengthLevelToName = {
623
683
  ...XNodeStrengthLevelToName
624
684
  };
625
685
 
626
- export { DEFAULT_PRIVY_ECOSYSTEM_APPS, ENV, EconomicNodeStrengthLevelToName, MinXNodeLevel, NodeStrengthLevelToImage, TOKEN_LOGOS, TOKEN_LOGO_COMPONENTS, TogglePassportCheck, VECHAIN_KIT_MIXPANEL_PROJECT_NAME, VECHAIN_KIT_MIXPANEL_PROJECT_TOKEN, VECHAIN_KIT_MIXPANEL_TOKENS, VECHAIN_KIT_STORAGE_KEYS, VECHAIN_PRIVY_APP_ID, XNodeStrengthLevelToName, allNodeStrengthLevelToName, buildQueryString, compareAddresses, compareListOfAddresses, convertUriToUrl, getConfig, getPicassoImage, gmNfts, humanAddress, humanDomain, humanNumber, isValidAddress, isZero, leftPadWithZeros, notFoundImage, randomTransactionUser, regexPattern, resolveMediaTypeFromMimeType, toIPFSURL, uploadBlobToIPFS, validateIpfsUri, xNodeToGMstartingLevel };
627
- //# sourceMappingURL=chunk-M2BJB3OV.js.map
628
- //# sourceMappingURL=chunk-M2BJB3OV.js.map
686
+ // src/utils/url.ts
687
+ var isValidUrl = (value) => {
688
+ try {
689
+ new URL(value);
690
+ return true;
691
+ } catch {
692
+ return false;
693
+ }
694
+ };
695
+
696
+ export { CURRENCY_SYMBOLS, DEFAULT_PRIVY_ECOSYSTEM_APPS, ENS_TEXT_RECORDS, ENV, EconomicNodeStrengthLevelToName, LegalDocumentSource, LegalDocumentType, MinXNodeLevel, NFTMediaType, NodeStrengthLevelToImage, TOKEN_LOGOS, TOKEN_LOGO_COMPONENTS, TogglePassportCheck, VECHAIN_KIT_COOKIES_CONFIG, VECHAIN_KIT_MIXPANEL_PROJECT_NAME, VECHAIN_KIT_MIXPANEL_PROJECT_TOKEN, VECHAIN_KIT_MIXPANEL_TOKENS, VECHAIN_KIT_STORAGE_KEYS, VECHAIN_KIT_TERMS_CONFIG, VECHAIN_PRIVY_APP_ID, VePassportUserStatus, XNodeStrengthLevelToName, allNodeStrengthLevelToName, buildQueryString, compareAddresses, compareListOfAddresses, convertUriToUrl, getConfig, getPicassoImage, gmNfts, humanAddress, humanDomain, humanNumber, isValidAddress, isValidUrl, isZero, leftPadWithZeros, notFoundImage, randomTransactionUser, regexPattern, resolveMediaTypeFromMimeType, toIPFSURL, uploadBlobToIPFS, validateIpfsUri, xNodeToGMstartingLevel };
697
+ //# sourceMappingURL=chunk-3SI2CCB5.js.map
698
+ //# sourceMappingURL=chunk-3SI2CCB5.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/assets/icons/VechainLogo/VOT3Logo.tsx","../src/utils/Constants.tsx","../src/utils/FormattingUtils.tsx","../src/utils/RandomTxForwarder.tsx","../src/utils/HexUtils.ts","../src/utils/AddressUtils.ts","../src/config/solo.ts","../src/config/testnet.ts","../src/config/mainnet.ts","../src/config/index.ts","../src/utils/ipfs.ts","../src/types/Types.ts","../src/types/ensTextRecords.ts","../src/types/index.ts","../src/utils/media.ts","../src/utils/uri.ts","../src/utils/gmNfts.ts","../src/utils/buildQueryString.ts","../src/utils/XNode.ts","../src/utils/url.ts"],"names":["jsx","TogglePassportCheck","address","config","NFTMediaType","VePassportUserStatus","LegalDocumentType","LegalDocumentSource"],"mappings":"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","file":"chunk-3SI2CCB5.js","sourcesContent":["import { Icon, IconProps } from '@chakra-ui/react';\nimport React from 'react';\n\ntype Props = Omit<IconProps, 'dangerouslySetInnerHTML'>;\n\nexport const VOT3Logo: React.FC<Props> = ({ ...props }) => {\n return (\n <Icon viewBox=\"0 0 1684.56 1684.56\" {...props}>\n <rect\n fill=\"#b1f16c\"\n width=\"1684.56\"\n height=\"1684.56\"\n rx=\"157.74\"\n ry=\"157.74\"\n />\n <path\n fill=\"#1d1d1d\"\n d=\"M844.98,1386.28c-41.46,0-75.1-33.9-75.1-75.67,0-142.78-86.35-274.05-158.8-359.01-89.72-105.25-197.89-186.19-265.28-219.75-37.18-18.54-52.43-63.88-34.09-101.35,18.39-37.47,63.39-52.83,100.58-34.35,75.09,37.41,202.11,127.08,312.7,256.82,32.24,37.81,66.77,83.5,97.66,135.35,34.2-108.83,79.98-205.07,121.61-280.12,91.8-165.56,214.37-317.13,319.84-395.63,33.36-24.83,80.39-17.68,105.02,15.93,24.64,33.61,17.55,81-15.81,105.82-88.03,65.47-197.1,201.95-277.93,347.68-70.82,127.7-155.25,323.08-155.25,528.6,0,41.78-33.64,75.67-75.1,75.67h-.06Z\"\n />\n </Icon>\n );\n};\n","import { VeBetterIcon, VTHOLogo } from '@/assets';\nimport { VETLogo } from '@/assets/icons/VechainLogo/VETLogo';\nimport { VOT3Logo } from '@/assets/icons/VechainLogo/VOT3Logo';\n\nexport const TOKEN_LOGOS: Record<string, string> = {\n VET: 'https://cryptologos.cc/logos/vechain-vet-logo.png',\n VTHO: 'https://s2.coinmarketcap.com/static/img/coins/64x64/3012.png',\n B3TR: 'https://vechain.github.io/token-registry/assets/3d55edb42b09a634f7f2f26756a02571de901a5b.png',\n VOT3: 'https://vechain.github.io/token-registry/assets/17ff70aa1d898bc97ad690dbfad1a3b5643f7e0b.png',\n veDelegate:\n 'https://vechain.github.io/token-registry/assets/1c641b86096d56bf13d49f38388accd6db8b8b2e.png',\n USDGLO: 'https://raw.githubusercontent.com/vechain/app-hub/439fba60c80ba2521d435981102d88c4aec050d6/apps/org.glodollar.app/logo.png',\n};\n\nexport const TOKEN_LOGO_COMPONENTS: Record<string, JSX.Element> = {\n VET: <VETLogo />,\n VTHO: <VTHOLogo />,\n B3TR: <VeBetterIcon />,\n VOT3: <VOT3Logo />,\n};\n\nexport const VECHAIN_PRIVY_APP_ID = 'cm4wxxujb022fyujl7g0thb21';\n\nexport const notFoundImage =\n 'https://upload.wikimedia.org/wikipedia/commons/a/a3/Image-not-found.png';\n\nexport enum TogglePassportCheck {\n WhitelistCheck = 1,\n BlacklistCheck = 2,\n SignalingCheck = 3,\n ParticipationScoreCheck = 4,\n GmOwnershipCheck = 5,\n}\n\nexport const VECHAIN_KIT_STORAGE_KEYS = {\n NETWORK: 'vechain-kit:network',\n};\n\nexport const ENV = {\n isDevelopment:\n localStorage.getItem(VECHAIN_KIT_STORAGE_KEYS.NETWORK) === 'test',\n isProduction:\n localStorage.getItem(VECHAIN_KIT_STORAGE_KEYS.NETWORK) === 'main',\n};\n\nexport const VECHAIN_KIT_MIXPANEL_TOKENS = {\n development: 'e9627dff3f9ac07c28c28615fa86b181',\n production: '2c9e0d4c8a37e9f31e3d59361f48b0dc',\n};\n\nexport const VECHAIN_KIT_MIXPANEL_PROJECT_TOKEN = ENV.isProduction\n ? VECHAIN_KIT_MIXPANEL_TOKENS.production\n : VECHAIN_KIT_MIXPANEL_TOKENS.development;\n\nexport const VECHAIN_KIT_MIXPANEL_PROJECT_NAME = 'vechain-kit';\n\nexport type PrivyEcosystemApp = {\n id: string;\n name: string;\n website: string;\n};\n\nexport const DEFAULT_PRIVY_ECOSYSTEM_APPS: PrivyEcosystemApp[] = [\n {\n id: 'clz41gcg00e4ay75dmq3uzzgr',\n name: 'Cleanify',\n website: 'https://app.cleanify.vet',\n },\n {\n id: 'cm153hrup0817axti38avlfyg',\n name: 'GreenCart',\n website: 'https://greencart.ai',\n },\n {\n id: 'clv9sfos20j6x1431ga80d95f',\n name: 'Mughsot',\n website: 'https://mugshot.vet/',\n },\n {\n id: 'cm4l8tiai070i108zo17oieyc',\n name: 'EVearn',\n website: 'https://evearn.io',\n },\n];\n\n//Hardcoded for displaying in the \"Terms and Privacy\" agreements modal\nexport const VECHAIN_KIT_TERMS_CONFIG = {\n url: 'https://vechainkit.vechain.org/terms',\n version: 1,\n required: true,\n displayName: 'Vechain Kit Terms',\n};\n\n//Hardcoded for showing up if allowAnalytics is true\n//So we ask users if they agree with data tracking\nexport const VECHAIN_KIT_COOKIES_CONFIG = {\n url: 'https://vechainkit.vechain.org/cookies',\n version: 1,\n required: false,\n displayName: 'Vechain Kit Cookies',\n};\n","import { picasso } from '@vechain/picasso';\nimport { BigNumber } from 'bignumber.js';\n\nexport const humanAddress = (\n address: string,\n charAtStart = 6,\n charAtEnd = 4,\n): string => `${address.slice(0, charAtStart)}•••${address.slice(-charAtEnd)}`;\n\nexport const humanDomain = (\n domain: string,\n lengthBefore = 8,\n lengthAfter = 6,\n) => {\n // if domain is smaller than lengthBefore + lengthAfter, return the domain\n if (domain.length <= lengthBefore + lengthAfter) return domain;\n\n const before = domain.substring(0, lengthBefore);\n const after = domain.substring(domain.length - lengthAfter);\n return `${before}•••${after}`;\n};\n\nexport const humanNumber = (\n formattedValue: BigNumber.Value,\n originalValue?: BigNumber.Value,\n symbol: string | null = null,\n) => {\n const suffix = symbol ? ' ' + symbol : '';\n\n originalValue = originalValue || formattedValue;\n const formatter = new Intl.NumberFormat('en-US', {\n style: 'decimal',\n minimumFractionDigits:\n Number.parseFloat(formattedValue.toString()) % 1 === 0 ? 0 : 2,\n });\n\n let value = formatter.format(\n roundDownSignificantDigits(Number(formattedValue), 2),\n );\n\n //If the original number got scaled down to 0\n if (!isZero(originalValue) && isZero(value)) {\n value = '< 0.01';\n }\n\n return value + suffix;\n};\n\nexport const isZero = (value?: BigNumber.Value) => {\n if (!value && value !== 0) return false;\n return new BigNumber(value).isZero();\n};\n\nexport const getPicassoImage = (address: string, base64 = false): string => {\n const image = picasso(address.toLowerCase());\n if (base64) {\n const base64data = Buffer.from(image, 'utf8').toString('base64');\n return `data:image/svg+xml;base64,${base64data}`;\n }\n return `data:image/svg+xml;utf8,${image}`;\n};\n\n/**\n * Format the number human friendly\n * @param formattedValue - value in string or number\n * @param originalValue - value in string or number to determine if the original value is 0\n * @param symbol - (optional) symbol to append at end of number (with a space)\n * @returns the formatted number\n */\n\nfunction roundDownSignificantDigits(numbers: number, decimals: number = 0) {\n if (typeof numbers !== 'number' || typeof decimals !== 'number') {\n throw new Error(\n 'Invalid input: number and decimals must be of type number',\n );\n }\n\n const significantDigits = parseInt(\n numbers.toExponential().split('e-')[1] || '0',\n 10,\n );\n\n const effectiveDecimals = Math.max(0, decimals + significantDigits);\n const scaleFactor = Math.pow(10, effectiveDecimals);\n\n return Math.floor(numbers * scaleFactor) / scaleFactor;\n}\n","import {\n generatePrivateKey,\n privateKeyToAccount,\n Account,\n} from 'viem/accounts';\n\nexport const randomTransactionUser: {\n privateKey: string;\n account: Account;\n address: string;\n} = (() => {\n const privateKey = generatePrivateKey();\n const account = privateKeyToAccount(privateKey);\n return {\n privateKey,\n account,\n address: account.address,\n };\n})();\n","import crypto from \"crypto\";\nconst PREFIX = \"0x\";\nconst PREFIX_REGEX = /^0[xX]/;\nconst HEX_REGEX = /^(0[xX])?[a-fA-F0-9]+$/;\n\n/**\n * Returns the provied hex string with the hex prefix removed.\n * If the prefix doesn't exist the hex is returned unmodified\n * @param hex - the input hex string\n * @returns the input hex string with the hex prefix removed\n * @throws an error if the input is not a valid hex string\n */\nexport const removePrefix = (hex: string): string => {\n validate(hex);\n return hex.replace(PREFIX_REGEX, \"\");\n};\n\n/**\n * Returns the provided hex string with the hex prefix added.\n * If the prefix already exists the string is returned unmodified.\n * If the string contains an UPPER case `X` in the prefix it will be replaced with a lower case `x`\n * @param hex - the input hex string\n * @returns the input hex string with the hex prefix added\n * @throws an error if the input is not a valid hex string\n */\nexport const addPrefix = (hex: string): string => {\n validate(hex);\n return PREFIX_REGEX.test(hex)\n ? hex.replace(PREFIX_REGEX, PREFIX)\n : `${PREFIX}${hex}`;\n};\n\n/**\n * Validate the hex string. Throws an Error if not valid\n * @param hex - the input hex string\n * @throws an error if the input is not a valid hex string\n */\nexport const validate = (hex: string) => {\n if (!isValid(hex)) throw Error(\"Provided hex value is not valid\");\n};\n\n/**\n * Check if input string is valid\n * @param hex - the input hex string\n * @returns boolean representing whether the input hex is valid\n */\nexport const isValid = (hex?: string | null): boolean => {\n return !!hex && HEX_REGEX.test(hex);\n};\n\nexport const isInvalid = (hex?: string | null): boolean => {\n return !isValid(hex);\n};\n\nexport const normalize = (hex: string): string => {\n return addPrefix(hex.toLowerCase().trim());\n};\n\nexport const compare = (hex1: string, hex2: string): boolean => {\n try {\n return (\n removePrefix(hex1).toLowerCase() ===\n removePrefix(hex2).toLowerCase()\n );\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n } catch (e) {\n return false;\n }\n};\n\n/**\n * Generate a random hex string of the defined length\n * @param size - the length of the random hex output\n * @returns a random hex string of length `size`\n */\nexport const generateRandom = (size: number): string => {\n if (size < 1) throw Error(\"Size must be > 0\");\n const randBuffer = crypto.randomBytes(Math.ceil(size / 2));\n if (!randBuffer) throw Error(\"Failed to generate random hex\");\n return `${PREFIX}${randBuffer.toString(\"hex\").substring(0, size)}`;\n};\n","import { address } from \"thor-devkit\";\nimport * as HexUtils from \"./HexUtils\";\n\n/**\n * Checks if two addresses are equal. Returns true if both values are strings AND:\n * - The two values are equal OR\n * - The checksumed addresses are equal\n *\n * @param address1\n * @param address2\n */\nexport const compareAddresses = (\n address1?: string,\n address2?: string\n): boolean => {\n if (!address1 || !address2) return false;\n\n if (address2 === address1) {\n return true;\n }\n\n try {\n return HexUtils.normalize(address1) === HexUtils.normalize(address2);\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n } catch (e) {\n return false;\n }\n};\n\nexport const compareListOfAddresses = (add1: string[], add2: string[]) => {\n if (add1.length !== add2.length) return false;\n const sortedAdd1 = [...add1]\n .map((e) => e.toLowerCase())\n .sort((a, b) => a.localeCompare(b));\n const sortedAdd2 = [...add2]\n .map((e) => e.toLowerCase())\n .sort((a, b) => a.localeCompare(b));\n\n for (let i = 0; i < sortedAdd1.length; i++) {\n if (!compareAddresses(sortedAdd1[i], sortedAdd2[i])) return false;\n }\n\n return true;\n};\n\nexport const regexPattern = () => {\n return /^0x[a-fA-F0-9]{40}$/;\n};\n\nexport const isValidAddress = (addr: string | undefined | null): boolean => {\n try {\n if (typeof addr !== \"string\") return false;\n address.toChecksumed(HexUtils.addPrefix(addr));\n return true;\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n } catch (e) {\n return false;\n }\n};\n\nexport const leftPadWithZeros = (str: string, length: number): string => {\n // Remove '0x' prefix if it exists\n const cleanStr = str.startsWith(\"0x\") ? str.slice(2) : str;\n if (cleanStr.length > length) {\n throw new Error(\"Input string is longer than the specified length\");\n }\n // Pad the string to the specified length\n const paddedStr = cleanStr.padStart(length, \"0\");\n return `0x${paddedStr}`;\n};\n","import { AppConfig } from '.';\nconst config: AppConfig = {\n ipfsFetchingService: 'https://api.dev.gateway-proxy.vechain.org/ipfs',\n ipfsPinningService:\n 'https://api.dev.gateway-proxy.vechain.org/api/v1/pinning/pinFileToIPFS',\n vthoContractAddress: '0x0000000000000000000000000000456E65726779',\n b3trContractAddress: '0xd31A6f2DBa8785cE41AB68Ea192791B5175309F4',\n vot3ContractAddress: '0x028Af33230576c1e073C8245F72a7A4aa53564E4',\n b3trGovernorAddress: '0x36E0e9b46D56dF12Dd69fD560e41954C73cE9ded',\n timelockContractAddress: '0x125389845c93Efcf6471BA8BE1AC19c11e128603',\n xAllocationPoolContractAddress:\n '0xC8232c91E2f744E533322B99F95f809b9f7ec446',\n xAllocationVotingContractAddress:\n '0x074F093f4C534a16cDD09cb4b2669713218A762a',\n emissionsContractAddress: '0x6a084E85f38400790043788FcCee39595616aa3A',\n voterRewardsContractAddress: '0xbAb852081C459c0060960287aDcf9a0C2c1dc4b8',\n galaxyMemberContractAddress: '0xbdA1cff75d2D43AB9186Ada41fECF79e25c49Ba3',\n treasuryContractAddress: '0xe9414513Fe0e3b9bf7a61eC5c1AC7Df943fB3e77',\n x2EarnAppsContractAddress: '0x432C46476f4970575C43B19588A170D237dC4929',\n x2EarnRewardsPoolContractAddress:\n '0x134E4Fce6761f660401808CF86aE0e62cE52a81E',\n nodeManagementContractAddress: '0xa96B5057171D797298A71178b48449A7bC615D8E',\n veBetterPassportContractAddress:\n '0x8db6D14452fE36ba86C341AfEFaC0f90A0Db2bcb',\n x2EarnCreatorContractAddress: '0x4e5f7eb452e9ecd75c0B29e3540014cBe01bBF52',\n veDelegate: '0xfc32a9895C78CE00A1047d602Bd81Ea8134CC32b',\n veDelegateVotes: '0xeb71148c9B3cd57e228c2152d79f6e78F5F1ef9a',\n veDelegateTokenContractAddress:\n '0xD3f7b82Df5705D34f64C634d2dEf6B1cB3116950',\n oracleContractAddress: '0x49eC7192BF804Abc289645ca86F1eD01a6C17713',\n accountFactoryAddress: '0xC06Ad8573022e2BE416CA89DA47E8c592971679A',\n cleanifyCampaignsContractAddress:\n '0x7a11D63338576aE8c038868433ea199d7E5319A6',\n cleanifyChallengesContractAddress:\n '0xa58681692AdDD2e8E37f9113D40Bb9253C03F65e',\n veWorldSubdomainClaimerContractAddress:\n '0x0000000000000000000000000000000000000000',\n vetDomainsContractAddress: '0x0000000000000000000000000000000000000000',\n vetDomainsPublicResolverAddress:\n '0x0000000000000000000000000000000000000000',\n vetDomainsReverseRegistrarAddress:\n '0x5c970901a587BA3932C835D4ae5FAE2BEa7e78Bc',\n vnsResolverAddress: '0x0000000000000000000000000000000000000000',\n gloDollarContractAddress: '0x0000000000000000000000000000000000000000',\n vetDomainAvatarUrl: 'https://testnet.vet.domains/api/avatar',\n indexerUrl: 'https://b3tr.testnet.vechain.org/api/v1',\n b3trIndexerUrl: 'https://b3tr.testnet.vechain.org/api/v1',\n graphQlIndexerUrl: 'https://graph.vet/subgraphs/name/vns',\n nodeUrl: 'http://localhost:8669',\n network: {\n id: 'solo',\n name: 'solo',\n type: 'solo',\n defaultNet: true,\n urls: ['http://localhost:8669'],\n explorerUrl: 'https://explore-testnet.vechain.org',\n blockTime: 10000,\n genesis: {\n number: 0,\n id: '0x00000000c05a20fbca2bf6ae3affba6af4a74b800b585bf7a4988aba7aea69f6',\n size: 170,\n parentID:\n '0xffffffff53616c757465202620526573706563742c20457468657265756d2100',\n timestamp: 1530316800,\n gasLimit: 10000000,\n beneficiary: '0x0000000000000000000000000000000000000000',\n gasUsed: 0,\n totalScore: 0,\n txsRoot:\n '0x45b0cfc220ceec5b7c1c62c4d4193d38e4eba48e8815729ce75f9c0ab0e4c1c0',\n txsFeatures: 0,\n stateRoot:\n '0x93de0ffb1f33bc0af053abc2a87c4af44594f5dcb1cb879dd823686a15d68550',\n receiptsRoot:\n '0x45b0cfc220ceec5b7c1c62c4d4193d38e4eba48e8815729ce75f9c0ab0e4c1c0',\n signer: '0x0000000000000000000000000000000000000000',\n isTrunk: true,\n transactions: [],\n },\n },\n explorerUrl: 'https://explore-testnet.vechain.org',\n};\nexport default config;\n","import { AppConfig } from '.';\n\nconst config: AppConfig = {\n ipfsFetchingService: 'https://api.dev.gateway-proxy.vechain.org/ipfs',\n ipfsPinningService:\n 'https://api.dev.gateway-proxy.vechain.org/api/v1/pinning/pinFileToIPFS',\n vthoContractAddress: '0x0000000000000000000000000000456E65726779',\n b3trContractAddress: '0xbf64cf86894Ee0877C4e7d03936e35Ee8D8b864F',\n vot3ContractAddress: '0xa704c45971995467696EE9544Da77DD42Bc9706E',\n b3trGovernorAddress: '0xDF5E114D391CAC840529802fe8D01f6bdeBE41eC',\n timelockContractAddress: '0x30ee94F303643902a68aD8A7A6456cA69d763192',\n xAllocationPoolContractAddress:\n '0x9B9CA9D0C41Add1d204f90BA0E9a6844f1843A84',\n xAllocationVotingContractAddress:\n '0x5859ff910d8b0c127364c98E24233b0af7443c1c',\n emissionsContractAddress: '0x3D7616213191a10460e49CfdB7edBf88D6a10942',\n voterRewardsContractAddress: '0x2E47fc4aabB3403037fB5E1f38995E7a91Ce8Ed2',\n galaxyMemberContractAddress: '0xa9aC49C030c1148b95F056E86f2531f8F3d5bf27',\n x2EarnCreatorContractAddress: '',\n nodeManagementContractAddress: '',\n x2EarnAppsContractAddress: '0xcB23Eb1bBD5c07553795b9538b1061D0f4ABA153',\n treasuryContractAddress: '0x039893EBe092A2D22B08E2b029735D211bfF7F50',\n x2EarnRewardsPoolContractAddress:\n '0x5F8f86B8D0Fa93cdaE20936d150175dF0205fB38',\n veBetterPassportContractAddress:\n '0x63c061a2753e84635a22ff05954e1687f104f002',\n veDelegate: '0xfc32a9895C78CE00A1047d602Bd81Ea8134CC32b',\n veDelegateVotes: '0xeb71148c9B3cd57e228c2152d79f6e78F5F1ef9a',\n veDelegateTokenContractAddress:\n '0xD3f7b82Df5705D34f64C634d2dEf6B1cB3116950',\n oracleContractAddress: '0xdcCAaBd81B38e0dEEf4c202bC7F1261A4D9192C6',\n accountFactoryAddress: '0x713b908Bcf77f3E00EFEf328E50b657a1A23AeaF',\n cleanifyCampaignsContractAddress:\n '0x22d19ACBD2cBf6b2B6C546395c26B9Cb448248BF',\n cleanifyChallengesContractAddress:\n '0x8Cc885DC3e5c376632CCEA0e8e1a51F1B3572442',\n veWorldSubdomainClaimerContractAddress:\n '0xe5af50e7ad1aaab4fbe4efbb2b30f764013918b3',\n vetDomainsContractAddress: '0xcBFB30c1F267914816668d53AcBA7bA7c9806D13',\n vetDomainsPublicResolverAddress:\n '0xA6eFd130085a127D090ACb0b100294aD1079EA6f',\n vetDomainsReverseRegistrarAddress:\n '0x6878f1aD5e3015310CfE5B38d7B7071C5D8818Ca',\n vnsResolverAddress: '0xc403b8EA53F707d7d4de095f0A20bC491Cf2bc94',\n gloDollarContractAddress: '0x0000000000000000000000000000000000000000',\n vetDomainAvatarUrl: 'https://testnet.vet.domains/api/avatar',\n indexerUrl: 'https://indexer.testnet.vechain.org/api/v1',\n b3trIndexerUrl: 'https://b3tr.testnet.vechain.org/api/v1',\n graphQlIndexerUrl: 'https://graph.vet/subgraphs/name/vns',\n nodeUrl: 'https://testnet.vechain.org',\n network: {\n id: 'testnet',\n name: 'testnet',\n type: 'test',\n defaultNet: true,\n urls: [\n 'https://testnet.vechain.org',\n 'https://vethor-node-test.vechaindev.com',\n 'https://sync-testnet.veblocks.net',\n 'https://testnet.vecha.in',\n ],\n explorerUrl: 'https://insight.vecha.in/#/test',\n blockTime: 10000,\n genesis: {\n number: 0,\n id: '0x000000000b2bce3c70bc649a02749e8687721b09ed2e15997f466536b20bb127',\n size: 170,\n parentID:\n '0xffffffff00000000000000000000000000000000000000000000000000000000',\n timestamp: 1530014400,\n gasLimit: 10000000,\n beneficiary: '0x0000000000000000000000000000000000000000',\n gasUsed: 0,\n totalScore: 0,\n txsRoot:\n '0x45b0cfc220ceec5b7c1c62c4d4193d38e4eba48e8815729ce75f9c0ab0e4c1c0',\n txsFeatures: 0,\n stateRoot:\n '0x4ec3af0acbad1ae467ad569337d2fe8576fe303928d35b8cdd91de47e9ac84bb',\n receiptsRoot:\n '0x45b0cfc220ceec5b7c1c62c4d4193d38e4eba48e8815729ce75f9c0ab0e4c1c0',\n signer: '0x0000000000000000000000000000000000000000',\n isTrunk: true,\n transactions: [],\n },\n },\n explorerUrl: 'https://explore-testnet.vechain.org/transactions',\n};\nexport default config;\n","import { AppConfig } from '.';\nconst config: AppConfig = {\n ipfsFetchingService: 'https://api.gateway-proxy.vechain.org/ipfs',\n indexerUrl: 'https://indexer.mainnet.vechain.org/api/v1',\n ipfsPinningService:\n 'https://api.gateway-proxy.vechain.org/api/v1/pinning/pinFileToIPFS',\n b3trIndexerUrl: 'https://b3tr.mainnet.vechain.org/api/v1',\n graphQlIndexerUrl: 'https://graph.vet/subgraphs/name/vns',\n nodeUrl: 'https://mainnet.vechain.org',\n network: {\n id: 'main',\n name: 'main',\n type: 'main',\n defaultNet: true,\n urls: [\n 'https://mainnet.vechain.org',\n 'https://vethor-node.vechain.com',\n 'https://mainnet.veblocks.net',\n 'https://mainnet.vecha.in',\n ],\n explorerUrl: 'https://vechainstats.com',\n blockTime: 10000,\n genesis: {\n number: 0,\n id: '0x00000000851caf3cfdb6e899cf5958bfb1ac3413d346d43539627e6be7ec1b4a',\n size: 170,\n parentID:\n '0xffffffff53616c757465202620526573706563742c20457468657265756d2100',\n timestamp: 1530316800,\n gasLimit: 10000000,\n beneficiary: '0x0000000000000000000000000000000000000000',\n gasUsed: 0,\n totalScore: 0,\n txsRoot:\n '0x45b0cfc220ceec5b7c1c62c4d4193d38e4eba48e8815729ce75f9c0ab0e4c1c0',\n txsFeatures: 0,\n stateRoot:\n '0x09bfdf9e24dd5cd5b63f3c1b5d58b97ff02ca0490214a021ed7d99b93867839c',\n receiptsRoot:\n '0x45b0cfc220ceec5b7c1c62c4d4193d38e4eba48e8815729ce75f9c0ab0e4c1c0',\n signer: '0x0000000000000000000000000000000000000000',\n isTrunk: true,\n transactions: [],\n },\n },\n explorerUrl: 'https://vechainstats.com/transaction',\n // general\n vthoContractAddress: '0x0000000000000000000000000000456E65726779',\n //VeBetterDAO\n b3trContractAddress: '0x5ef79995FE8a89e0812330E4378eB2660ceDe699',\n vot3ContractAddress: '0x76Ca782B59C74d088C7D2Cce2f211BC00836c602',\n b3trGovernorAddress: '0x1c65C25fABe2fc1bCb82f253fA0C916a322f777C',\n timelockContractAddress: '0x7B7EaF620d88E38782c6491D7Ce0B8D8cF3227e4',\n xAllocationPoolContractAddress:\n '0x4191776F05f4bE4848d3f4d587345078B439C7d3',\n xAllocationVotingContractAddress:\n '0x89A00Bb0947a30FF95BEeF77a66AEdE3842Fe5B7',\n emissionsContractAddress: '0xDf94739bd169C84fe6478D8420Bb807F1f47b135',\n voterRewardsContractAddress: '0x838A33AF756a6366f93e201423E1425f67eC0Fa7',\n galaxyMemberContractAddress: '0x93B8cD34A7Fc4f53271b9011161F7A2B5fEA9D1F',\n treasuryContractAddress: '0xD5903BCc66e439c753e525F8AF2FeC7be2429593',\n x2EarnAppsContractAddress: '0x8392B7CCc763dB03b47afcD8E8f5e24F9cf0554D',\n x2EarnRewardsPoolContractAddress:\n '0x6Bee7DDab6c99d5B2Af0554EaEA484CE18F52631',\n x2EarnCreatorContractAddress: '0xe8e96a768ffd00417d4bd985bec9EcfC6F732a7f',\n nodeManagementContractAddress: '0xB0EF9D89C6b49CbA6BBF86Bf2FDf0Eee4968c6AB',\n veBetterPassportContractAddress:\n '0x35a267671d8EDD607B2056A9a13E7ba7CF53c8b3',\n //veDelegate\n veDelegate: '0xfc32a9895C78CE00A1047d602Bd81Ea8134CC32b',\n veDelegateVotes: '0xeb71148c9B3cd57e228c2152d79f6e78F5F1ef9a',\n veDelegateTokenContractAddress:\n '0xD3f7b82Df5705D34f64C634d2dEf6B1cB3116950',\n //utility\n oracleContractAddress: '0x49eC7192BF804Abc289645ca86F1eD01a6C17713',\n accountFactoryAddress: '0xC06Ad8573022e2BE416CA89DA47E8c592971679A',\n //cleanify\n cleanifyCampaignsContractAddress:\n '0x7a11D63338576aE8c038868433ea199d7E5319A6',\n cleanifyChallengesContractAddress:\n '0xa58681692AdDD2e8E37f9113D40Bb9253C03F65e',\n veWorldSubdomainClaimerContractAddress:\n '0xa4173c32fe8a61a8fd0d0234675b559fc360446a',\n vetDomainsContractAddress: '0xa9231da8BF8D10e2df3f6E03Dd5449caD600129b',\n vetDomainsPublicResolverAddress:\n '0xabac49445584C8b6c1472b030B1076Ac3901D7cf',\n vetDomainsReverseRegistrarAddress:\n '0x5c970901a587BA3932C835D4ae5FAE2BEa7e78Bc',\n vnsResolverAddress: '0xA11413086e163e41901bb81fdc5617c975Fa5a1A',\n vetDomainAvatarUrl: 'https://vet.domains/api/avatar',\n gloDollarContractAddress: '0x29c630cce4ddb23900f5fe66ab55e488c15b9f5e',\n};\nexport default config;\n","import localConfig from './solo';\nimport testnetConfig from './testnet';\nimport mainnetConfig from './mainnet';\nimport { Network, NETWORK_TYPE } from './network';\n\nexport type AppConfig = {\n ipfsFetchingService: string;\n ipfsPinningService: string;\n vthoContractAddress: string;\n b3trContractAddress: string;\n vot3ContractAddress: string;\n b3trGovernorAddress: string;\n timelockContractAddress: string;\n xAllocationPoolContractAddress: string;\n xAllocationVotingContractAddress: string;\n emissionsContractAddress: string;\n voterRewardsContractAddress: string;\n galaxyMemberContractAddress: string;\n treasuryContractAddress: string;\n x2EarnAppsContractAddress: string;\n x2EarnCreatorContractAddress: string;\n x2EarnRewardsPoolContractAddress: string;\n nodeManagementContractAddress: string;\n veBetterPassportContractAddress: string;\n veDelegate: string;\n veDelegateVotes: string;\n veDelegateTokenContractAddress: string;\n oracleContractAddress: string;\n accountFactoryAddress: string;\n cleanifyCampaignsContractAddress: string;\n cleanifyChallengesContractAddress: string;\n veWorldSubdomainClaimerContractAddress: string;\n vetDomainsContractAddress: string;\n vetDomainsPublicResolverAddress: string;\n vetDomainsReverseRegistrarAddress: string;\n vnsResolverAddress: string;\n gloDollarContractAddress: string;\n vetDomainAvatarUrl: string;\n nodeUrl: string;\n indexerUrl: string;\n b3trIndexerUrl: string;\n graphQlIndexerUrl: string;\n network: Network;\n explorerUrl: string;\n};\n\nexport const getConfig = (env: NETWORK_TYPE): AppConfig => {\n if (env === 'solo') return localConfig;\n if (env === 'test') return testnetConfig;\n if (env === 'main') return mainnetConfig;\n throw new Error(`Unsupported NETWORK_TYPE ${env}`);\n};\n","import { getConfig } from '@/config';\nimport { NETWORK_TYPE } from '@/config/network';\n\n/**\n * Validate IPFS URI strings. An example of a valid IPFS URI is:\n * - ipfs://QmfSTia1TJUiKQ2fyW9NTPzEKNdjMGzbUgrC3QPSTpkum6/406.json\n * - ipfs://QmVPqKfwRXjg5Fqwy6RNRbKR2ZP4pKKVLvmfjmhQfdM3MH/4\n * - ipfs://QmVPqKfwRXjg5Fqwy6RNRbKR2ZP4pKKVLvmfjmhQfdM3MH\n * @param uri\n * @returns\n */\nexport const validateIpfsUri = (uri: string): boolean => {\n const trimmedUri = uri.trim();\n return /^ipfs:\\/\\/[a-zA-Z0-9]+(\\/[^/]+)*\\/?$/.test(trimmedUri);\n};\n\n/**\n * Converts a CID to an IPFS native URL.\n *\n * @param cid - The CID to convert.\n * @param fileName - The name of the file to append to the URL.\n *\n * @returns The IPFS URL in the format `ipfs://${cid}/${fileName}`.\n */\nexport function toIPFSURL(cid: string, fileName?: string): string {\n return `ipfs://${cid}/${fileName ?? ''}`;\n}\n\n/**\n * Uploads a blob to IPFS.\n * @param blob The Blob object to upload.\n * @param filename A name for the file in the FormData payload.\n * @param networkType The network type to use for the IPFS pinning service.\n * @returns The IPFS hash of the uploaded blob.\n */\nexport async function uploadBlobToIPFS(\n blob: Blob,\n filename: string,\n networkType: NETWORK_TYPE,\n): Promise<string> {\n try {\n const form = new FormData();\n form.append('file', blob, filename);\n const response = await fetch(\n getConfig(networkType).ipfsPinningService,\n {\n method: 'POST',\n headers: {\n 'X-Project-Id': 'vechain-kit',\n },\n body: form,\n },\n );\n\n if (!response.ok) {\n throw new Error(`HTTP error! status: ${response.status}`);\n }\n\n const data = await response.json();\n return data.IpfsHash;\n } catch (error) {\n console.error('Error uploading blob:', error);\n throw new Error('Failed to upload blob to IPFS');\n }\n}\n","import { LoginMethodOrderOption } from '@privy-io/react-auth';\n\nexport type ENSRecords = {\n display?: string;\n description?: string;\n email?: string;\n url?: string;\n header?: string;\n notice?: string;\n location?: string;\n phone?: string;\n [key: string]: string | undefined;\n};\n\nexport type Wallet = {\n address: string;\n domain?: string;\n image?: string;\n isLoadingMetadata?: boolean;\n metadata?: ENSRecords;\n} | null;\n\nexport type SmartAccount = Wallet & {\n isDeployed: boolean;\n isActive: boolean;\n version: number | null;\n};\n\nexport type ConnectionSource = {\n type: 'privy' | 'wallet' | 'privy-cross-app';\n displayName: string;\n};\n\n/**\n * Data that the Privy user must sign in order to execute a transaction\n * by authorizing the Smart Account contract\n */\nexport type ExecuteWithAuthorizationSignData = {\n domain: {\n name: string;\n version: string;\n chainId: number;\n verifyingContract: string;\n };\n types: {\n ExecuteWithAuthorization: {\n name: string;\n type: string;\n }[];\n EIP712Domain: {\n name: string;\n type: string;\n }[];\n };\n primaryType: string;\n message: {\n validAfter: number;\n validBefore: number;\n to: string | null | undefined;\n value: string;\n data: string;\n };\n};\n\nexport type ExecuteBatchWithAuthorizationSignData = {\n domain: {\n name: string;\n version: string;\n chainId: number;\n verifyingContract: string;\n };\n types: {\n ExecuteBatchWithAuthorization: {\n name: string;\n type: string;\n }[];\n EIP712Domain: {\n name: string;\n type: string;\n }[];\n };\n primaryType: string;\n message: {\n to: string[] | null | undefined;\n value: string[] | null | undefined;\n data: string[] | null | undefined;\n validAfter: number;\n validBefore: number;\n nonce: string;\n };\n};\n\n/**\n * ready: the user has not clicked on the button yet\n * pending: the user has clicked on the button and we're waiting for the transaction to be sent\n * waitingConfirmation: the transaction has been sent and we're waiting for the transaction to be confirmed by the chain\n * success: the transaction has been confirmed by the chain\n * error: the transaction has failed\n * unknown: the transaction receipt has failed to load\n */\nexport type TransactionStatus =\n | 'ready'\n | 'pending'\n | 'waitingConfirmation'\n | 'success'\n | 'error'\n | 'unknown';\n\nexport type TransactionStatusErrorType = {\n type:\n | 'SendTransactionError'\n | 'TxReceiptError'\n | 'RevertReasonError'\n | 'UserRejectedError';\n reason?: string;\n};\n\n/**\n * An enhanced clause with a comment and an abi\n * @param comment a comment to add to the clause\n * @param abi the abi of the contract to call\n */\nexport type EnhancedClause = Connex.VM.Clause & {\n comment?: string;\n abi?: object;\n};\n\nexport type PrivyAppInfo = {\n id: string;\n name: string;\n logo_url: string;\n icon_url: string | null;\n terms_and_conditions_url: string;\n privacy_policy_url: string;\n theme: string;\n accent_color: string;\n wallet_auth: boolean;\n email_auth: boolean;\n google_oauth: boolean;\n twitter_oauth: boolean;\n url: string;\n website?: string;\n};\n\nexport type PrivyLoginMethod = LoginMethodOrderOption;\n\nexport interface CrossAppConnectionCache {\n timestamp: number;\n ecosystemApp: {\n name: string;\n logoUrl?: string;\n appId: string;\n website?: string;\n };\n}\n\nexport enum NFTMediaType {\n IMAGE = 'image',\n VIDEO = 'video',\n UNKNOWN = 'unknown',\n TEXT = 'text', // mp4 appears as text sometimes\n}\n\nexport enum VePassportUserStatus {\n NONE = 'NONE',\n WHITELIST = 'WHITELIST',\n BLACKLIST = 'BLACKLIST',\n}\n\nexport type CURRENCY = \"usd\" | \"gbp\" | \"eur\";\n\nexport const CURRENCY_SYMBOLS: Record<CURRENCY, string> = {\n usd: \"$\",\n gbp: \"£\",\n eur: \"€\"\n};\n","export const ENS_TEXT_RECORDS = [\n 'display',\n 'avatar',\n 'description',\n 'keywords',\n 'email',\n 'url',\n 'header',\n 'notice',\n 'location',\n 'phone',\n 'com.x',\n] as const;\n\nexport type TextRecords = {\n [K in (typeof ENS_TEXT_RECORDS)[number]]?: string;\n};\n","import { LegalDocument } from '@/providers';\n\nexport * from './Types';\nexport * from './ensTextRecords';\n\nexport enum LegalDocumentType {\n TERMS = 'terms',\n PRIVACY = 'privacy',\n COOKIES = 'cookies',\n}\n\nexport enum LegalDocumentSource {\n VECHAIN_KIT = 'vechain-kit',\n APPLICATION = 'application',\n}\n\n// Base type for all legal documents (terms, privacy policy, cookies)\nexport type EnrichedLegalDocument = LegalDocument & {\n id: string;\n documentType: LegalDocumentType;\n documentSource: LegalDocumentSource;\n};\n\n// Agreement record stored in localStorage\nexport type LegalDocumentAgreement = EnrichedLegalDocument & {\n walletAddress: string;\n timestamp: number;\n};\n","import { NFTMediaType } from \"@/types\"\n\nconst isValidMimeType = (mime: string, type: NFTMediaType[]) => {\n const found = type.find(t => {\n if (mime?.split(\"/\")[0] === t) {\n return true\n }\n })\n\n return !!found\n}\n\nexport const resolveMediaTypeFromMimeType = (mimeType: string): NFTMediaType => {\n if (isValidMimeType(mimeType, [NFTMediaType.IMAGE])) return NFTMediaType.IMAGE\n else if (isValidMimeType(mimeType, [NFTMediaType.VIDEO])) return NFTMediaType.VIDEO\n\n return NFTMediaType.UNKNOWN\n}\n","import { NETWORK_TYPE } from '@/config/network';\nimport { validateIpfsUri } from './ipfs';\nimport { getConfig } from '@/config';\n\n/**\n * Convert a URI to a URL\n * We support both IPFS and Arweave URIs. Both should be converted to their https gateway URLs.\n * All other URIs should pass through unchanged.\n *\n * @param uri\n */\nexport const convertUriToUrl = (uri: string, networkType: NETWORK_TYPE) => {\n // if it is a data uri just return it\n if (uri.startsWith('data:')) return uri;\n\n const splitUri = uri?.split('://');\n if (splitUri.length !== 2) return null;\n // if (splitUri.length !== 2) throw new Error(`Invalid URI ${uri}`);\n\n const protocol = splitUri?.[0]?.trim();\n const uriWithoutProtocol = splitUri[1];\n\n switch (protocol) {\n case 'ipfs':\n if (!validateIpfsUri(uri))\n throw new Error(`Invalid IPFS URI ${uri}`);\n\n // Check cache for IPFS document\n return `${\n getConfig(networkType).ipfsFetchingService\n }/${uriWithoutProtocol}`;\n\n case 'ar':\n return `https://arweave.net/${uriWithoutProtocol}`;\n\n default:\n return uri;\n }\n};\n","export const gmNfts = [\n {\n level: '1',\n name: 'Earth',\n image: '/images/nft-levels/0.png',\n multiplier: 1,\n b3trToUpgrade: 0,\n },\n {\n level: '2',\n name: 'Moon',\n image: '/images/nft-levels/1.png',\n multiplier: 1.1,\n b3trToUpgrade: 10_000,\n },\n {\n level: '3',\n name: 'Mercury',\n image: '/images/nft-levels/2.png',\n multiplier: 1.2,\n b3trToUpgrade: 25_000,\n },\n {\n level: '4',\n name: 'Venus',\n image: '/images/nft-levels/3.png',\n multiplier: 1.5,\n b3trToUpgrade: 50_000,\n },\n {\n level: '5',\n name: 'Mars',\n image: '/images/nft-levels/4.png',\n multiplier: 2,\n b3trToUpgrade: 100_000,\n },\n {\n level: '6',\n name: 'Jupiter',\n image: '/images/nft-levels/5.png',\n multiplier: 2.5,\n b3trToUpgrade: 250_000,\n },\n {\n level: '7',\n name: 'Saturn',\n image: '/images/nft-levels/6.png',\n multiplier: 3,\n b3trToUpgrade: 500_000,\n },\n {\n level: '8',\n name: 'Uranus',\n image: '/images/nft-levels/7.png',\n multiplier: 5,\n b3trToUpgrade: 2_500_000,\n },\n {\n level: '9',\n name: 'Neptune',\n image: '/images/nft-levels/8.png',\n multiplier: 10,\n b3trToUpgrade: 5_000_000,\n },\n {\n level: '10',\n name: 'Galaxy',\n image: '/images/nft-levels/9.png',\n multiplier: 25,\n b3trToUpgrade: 25_000_000,\n },\n];\n\n/**\n * Maps the XNode level to the GM starting level.\n */\nexport const xNodeToGMstartingLevel: Record<number, number> = {\n 1: 2,\n 2: 4,\n 3: 6,\n 4: 2,\n 5: 4,\n 6: 6,\n 7: 7,\n};\n","// Function to build query string dynamically\nexport const buildQueryString = (params: { [key: string]: any }) => {\n const searchParams = new URLSearchParams()\n\n // Iterate over the parameters and append only the defined values\n Object.keys(params).forEach(key => {\n const value = params[key]\n if (value !== undefined && value !== null) {\n searchParams.append(key, String(value))\n }\n })\n\n return searchParams.toString()\n}\n","/**\n * Map strength level coming from contract to hq image\n */\nexport const NodeStrengthLevelToImage: { [key: string]: string } = {\n \"0\": \"/images/vnt/00-noNode.webp\",\n \"1\": \"/images/vnt/01-strength.webp\",\n \"2\": \"/images/vnt/02-thunder.webp\",\n \"3\": \"/images/vnt/03-mjolnir.webp\",\n \"4\": \"/images/vnt/04-vethorX.webp\",\n \"5\": \"/images/vnt/05-strengthX.webp\",\n \"6\": \"/images/vnt/06-thunderX.webp\",\n \"7\": \"/images/vnt/07-mjolnirX.webp\",\n}\n\n//after this level the nfts are considered xNode\nexport const MinXNodeLevel = 4\nexport const EconomicNodeStrengthLevelToName: { [key: string]: string } = {\n \"1\": \"Strength\",\n \"2\": \"Thunder\",\n \"3\": \"Mjolnir\",\n}\n\nexport const XNodeStrengthLevelToName: { [key: string]: string } = {\n \"4\": \"VeThorX\",\n \"5\": \"StrengthX\",\n \"6\": \"ThunderX\",\n \"7\": \"MjolnirX\",\n}\n\nexport const allNodeStrengthLevelToName: { [key: string]: string } = {\n ...EconomicNodeStrengthLevelToName,\n ...XNodeStrengthLevelToName,\n}\n","export const isValidUrl = (value: string) => {\n try {\n new URL(value);\n return true;\n } catch {\n return false;\n }\n};\n"]}
@@ -89,6 +89,18 @@ var DEFAULT_PRIVY_ECOSYSTEM_APPS = [
89
89
  website: "https://evearn.io"
90
90
  }
91
91
  ];
92
+ var VECHAIN_KIT_TERMS_CONFIG = {
93
+ url: "https://vechainkit.vechain.org/terms",
94
+ version: 1,
95
+ required: true,
96
+ displayName: "Vechain Kit Terms"
97
+ };
98
+ var VECHAIN_KIT_COOKIES_CONFIG = {
99
+ url: "https://vechainkit.vechain.org/cookies",
100
+ version: 1,
101
+ required: false,
102
+ displayName: "Vechain Kit Cookies"
103
+ };
92
104
  var humanAddress = (address2, charAtStart = 6, charAtEnd = 4) => `${address2.slice(0, charAtStart)}\u2022\u2022\u2022${address2.slice(-charAtEnd)}`;
93
105
  var humanDomain = (domain, lengthBefore = 8, lengthAfter = 6) => {
94
106
  if (domain.length <= lengthBefore + lengthAfter) return domain;
@@ -468,6 +480,54 @@ async function uploadBlobToIPFS(blob, filename, networkType) {
468
480
  }
469
481
  }
470
482
 
483
+ // src/types/Types.ts
484
+ var NFTMediaType = /* @__PURE__ */ ((NFTMediaType2) => {
485
+ NFTMediaType2["IMAGE"] = "image";
486
+ NFTMediaType2["VIDEO"] = "video";
487
+ NFTMediaType2["UNKNOWN"] = "unknown";
488
+ NFTMediaType2["TEXT"] = "text";
489
+ return NFTMediaType2;
490
+ })(NFTMediaType || {});
491
+ var VePassportUserStatus = /* @__PURE__ */ ((VePassportUserStatus2) => {
492
+ VePassportUserStatus2["NONE"] = "NONE";
493
+ VePassportUserStatus2["WHITELIST"] = "WHITELIST";
494
+ VePassportUserStatus2["BLACKLIST"] = "BLACKLIST";
495
+ return VePassportUserStatus2;
496
+ })(VePassportUserStatus || {});
497
+ var CURRENCY_SYMBOLS = {
498
+ usd: "$",
499
+ gbp: "\xA3",
500
+ eur: "\u20AC"
501
+ };
502
+
503
+ // src/types/ensTextRecords.ts
504
+ var ENS_TEXT_RECORDS = [
505
+ "display",
506
+ "avatar",
507
+ "description",
508
+ "keywords",
509
+ "email",
510
+ "url",
511
+ "header",
512
+ "notice",
513
+ "location",
514
+ "phone",
515
+ "com.x"
516
+ ];
517
+
518
+ // src/types/index.ts
519
+ var LegalDocumentType = /* @__PURE__ */ ((LegalDocumentType2) => {
520
+ LegalDocumentType2["TERMS"] = "terms";
521
+ LegalDocumentType2["PRIVACY"] = "privacy";
522
+ LegalDocumentType2["COOKIES"] = "cookies";
523
+ return LegalDocumentType2;
524
+ })(LegalDocumentType || {});
525
+ var LegalDocumentSource = /* @__PURE__ */ ((LegalDocumentSource2) => {
526
+ LegalDocumentSource2["VECHAIN_KIT"] = "vechain-kit";
527
+ LegalDocumentSource2["APPLICATION"] = "application";
528
+ return LegalDocumentSource2;
529
+ })(LegalDocumentSource || {});
530
+
471
531
  // src/utils/media.ts
472
532
  var isValidMimeType = (mime, type) => {
473
533
  const found = type.find((t) => {
@@ -625,19 +685,37 @@ var allNodeStrengthLevelToName = {
625
685
  ...XNodeStrengthLevelToName
626
686
  };
627
687
 
688
+ // src/utils/url.ts
689
+ var isValidUrl = (value) => {
690
+ try {
691
+ new URL(value);
692
+ return true;
693
+ } catch {
694
+ return false;
695
+ }
696
+ };
697
+
698
+ exports.CURRENCY_SYMBOLS = CURRENCY_SYMBOLS;
628
699
  exports.DEFAULT_PRIVY_ECOSYSTEM_APPS = DEFAULT_PRIVY_ECOSYSTEM_APPS;
700
+ exports.ENS_TEXT_RECORDS = ENS_TEXT_RECORDS;
629
701
  exports.ENV = ENV;
630
702
  exports.EconomicNodeStrengthLevelToName = EconomicNodeStrengthLevelToName;
703
+ exports.LegalDocumentSource = LegalDocumentSource;
704
+ exports.LegalDocumentType = LegalDocumentType;
631
705
  exports.MinXNodeLevel = MinXNodeLevel;
706
+ exports.NFTMediaType = NFTMediaType;
632
707
  exports.NodeStrengthLevelToImage = NodeStrengthLevelToImage;
633
708
  exports.TOKEN_LOGOS = TOKEN_LOGOS;
634
709
  exports.TOKEN_LOGO_COMPONENTS = TOKEN_LOGO_COMPONENTS;
635
710
  exports.TogglePassportCheck = TogglePassportCheck;
711
+ exports.VECHAIN_KIT_COOKIES_CONFIG = VECHAIN_KIT_COOKIES_CONFIG;
636
712
  exports.VECHAIN_KIT_MIXPANEL_PROJECT_NAME = VECHAIN_KIT_MIXPANEL_PROJECT_NAME;
637
713
  exports.VECHAIN_KIT_MIXPANEL_PROJECT_TOKEN = VECHAIN_KIT_MIXPANEL_PROJECT_TOKEN;
638
714
  exports.VECHAIN_KIT_MIXPANEL_TOKENS = VECHAIN_KIT_MIXPANEL_TOKENS;
639
715
  exports.VECHAIN_KIT_STORAGE_KEYS = VECHAIN_KIT_STORAGE_KEYS;
716
+ exports.VECHAIN_KIT_TERMS_CONFIG = VECHAIN_KIT_TERMS_CONFIG;
640
717
  exports.VECHAIN_PRIVY_APP_ID = VECHAIN_PRIVY_APP_ID;
718
+ exports.VePassportUserStatus = VePassportUserStatus;
641
719
  exports.XNodeStrengthLevelToName = XNodeStrengthLevelToName;
642
720
  exports.allNodeStrengthLevelToName = allNodeStrengthLevelToName;
643
721
  exports.buildQueryString = buildQueryString;
@@ -651,6 +729,7 @@ exports.humanAddress = humanAddress;
651
729
  exports.humanDomain = humanDomain;
652
730
  exports.humanNumber = humanNumber;
653
731
  exports.isValidAddress = isValidAddress;
732
+ exports.isValidUrl = isValidUrl;
654
733
  exports.isZero = isZero;
655
734
  exports.leftPadWithZeros = leftPadWithZeros;
656
735
  exports.notFoundImage = notFoundImage;
@@ -661,5 +740,5 @@ exports.toIPFSURL = toIPFSURL;
661
740
  exports.uploadBlobToIPFS = uploadBlobToIPFS;
662
741
  exports.validateIpfsUri = validateIpfsUri;
663
742
  exports.xNodeToGMstartingLevel = xNodeToGMstartingLevel;
664
- //# sourceMappingURL=chunk-N7QRCWJ3.cjs.map
665
- //# sourceMappingURL=chunk-N7QRCWJ3.cjs.map
743
+ //# sourceMappingURL=chunk-ZZOAVX47.cjs.map
744
+ //# sourceMappingURL=chunk-ZZOAVX47.cjs.map