diff --git a/.github/workflows/e2e.yml b/.github/workflows/e2e.yml index e63706c..bdc0c34 100644 --- a/.github/workflows/e2e.yml +++ b/.github/workflows/e2e.yml @@ -48,6 +48,8 @@ jobs: VITE_APP_NETWORK: local VITE_NETWORK_TYPE: testnet VITE_RPC_URL_1337: http://127.0.0.1:8545 + VITE_RPC_URL_80002: https://rpc-amoy.polygon.technology/ + VITE_RPC_URL_137: https://rpc.ankr.com/polygon - name: Wait for dev server run: npx wait-on http://localhost:5173 --timeout 180000 diff --git a/e2e/fixtures/pol-amoy/amoy/oa-amoy-minted.json b/e2e/fixtures/pol-amoy/amoy/oa-amoy-minted.json new file mode 100644 index 0000000..ea26b38 --- /dev/null +++ b/e2e/fixtures/pol-amoy/amoy/oa-amoy-minted.json @@ -0,0 +1,34 @@ +{ + "version": "https://schema.openattestation.com/2.0/schema.json", + "data": { + "version": "e701574c-bce2-4e96-8c5c-cb9d02c4ce28:string:https://schema.openattestation.com/2.0/schema.json", + "$template": { + "name": "c1fe588b-da05-45af-afee-3680a9414b39:string:GOVTECH_DEMO", + "type": "f2779150-a9f7-48be-a4f4-7685ca9b6f33:string:EMBEDDED_RENDERER", + "url": "c3b6972d-e54a-43cf-83c4-11d2063207a6:string:https://demo-renderer.opencerts.io" + }, + "issuers": [ + { + "name": "14003050-4b55-47d2-9cc5-24e17b05275d:string:TrustVC Amoy Issuer", + "tokenRegistry": "ab2394fd-f6b9-4094-8f3c-37da1515abe7:string:0xa5f9a7106a599E4caAFacE6872da097aa802Cc64", + "identityProof": { + "type": "ef0308c9-0a7f-4fae-a38f-7d1f3797712b:string:DNS-TXT", + "location": "c8155f34-c97a-4745-a576-7e52eee1f5f0:string:example.tradetrust.io" + } + } + ], + "recipient": { + "name": "0f987694-19cf-4b29-a5ab-3aa7cde13246:string:TrustVC Amoy Test" + }, + "network": { + "chain": "f999cdb8-445e-4e0e-92b1-5d554bc3c852:string:POL", + "chainId": "a5a27920-e63b-49a9-b4df-2f2af37a8c24:string:80002" + } + }, + "signature": { + "type": "SHA3MerkleProof", + "targetHash": "8d4ddb4f0252c1d61f0b72ad585573317c2d3f9268ebbd6d785699e12ebbb077", + "proof": [], + "merkleRoot": "8d4ddb4f0252c1d61f0b72ad585573317c2d3f9268ebbd6d785699e12ebbb077" + } +} diff --git a/e2e/fixtures/pol-amoy/amoy/w3c-amoy-minted.json b/e2e/fixtures/pol-amoy/amoy/w3c-amoy-minted.json new file mode 100644 index 0000000..b39b74b --- /dev/null +++ b/e2e/fixtures/pol-amoy/amoy/w3c-amoy-minted.json @@ -0,0 +1,64 @@ +{ + "@context": [ + "https://www.w3.org/ns/credentials/v2", + "https://w3id.org/security/data-integrity/v2", + "https://trustvc.io/context/render-method-context-v2.json", + "https://trustvc.io/context/promissory-note.json", + "https://trustvc.io/context/transferable-records-context.json", + "https://trustvc.io/context/qrcode-context.json" + ], + "renderMethod": [ + { + "type": "EMBEDDED_RENDERER", + "templateName": "PROMISSORY_NOTE", + "id": "https://generic-templates.tradetrust.io" + } + ], + "credentialSubject": { + "type": [ + "PromissoryNote" + ], + "drawerCompanyName": "XYZ Exports Pvt. Ltd.", + "drawerCompanyNo": "CIN-XYZ1234567", + "drawerJurisdiction": "India", + "drawerWalletAddress": "0x433097a1C1b8a3e9188d8C54eCC057B1D69f1638", + "drawerPlaceOfIssue": "Mumbai, India", + "draweeCompanyName": "XYZ Imports Ltd.", + "draweeCompanyNo": "REG-XYZ9876543", + "draweeJurisdiction": "California, United States", + "draweeWalletAddress": "0xca93690bb57eeab273c796a9309246bc0fb93649", + "dueDate": "2025-06-19", + "currency": "USD", + "amount": "50,000.00", + "clause": "Payment to be made in full without set-off or counterclaim, subject to terms agreed between Drawer and Drawee.", + "signerName": "John Doe", + "signerPosition": "Chief Financial Officer", + "signerTimeStamp": "2025-06-10", + "logo": "data:image/png;base64,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", + "pNoteId": "PN-9081-2231-SGP", + "commitmentDate": "2025-12-10" + }, + "type": [ + "VerifiableCredential" + ], + "credentialStatus": { + "type": "TransferableRecords", + "tokenNetwork": { + "chain": "POL", + "chainId": 80002 + }, + "tokenRegistry": "0xa5f9a7106a599E4caAFacE6872da097aa802Cc64", + "tokenId": "d320d1e7eaf6a0f9ec185c8b25470d027115ef2059e5b1bcb41cde09f799be75" + }, + "issuer": "did:web:trustvc.github.io:did:1", + "validFrom": "2024-04-01T12:19:52Z", + "id": "urn:uuid:019ea8ea-2cf5-7662-9ab6-4b8b261174c7", + "proof": { + "type": "DataIntegrityProof", + "created": "2026-06-08T20:26:19Z", + "verificationMethod": "did:web:trustvc.github.io:did:1#multikey-1", + "cryptosuite": "ecdsa-sd-2023", + "proofPurpose": "assertionMethod", + "proofValue": "u2V0AhVhA2a6bF4PPP3Mnid815CspDt-DMcGPm-iDwkYPBY2KgbprArYR9urtjfaaarNzxxsnBVuLUVJRmgBJdPAKkPhp0lgjgCQCcxtBLaHQBHKdzPUjrOoAUVnAqpYInt6hFitn3f96aotYIPgjo4q0O9-JKXdEK5MyNbPcr2XTCY0MD2hJ_gWjp6hdmB9YQCP8qUh7sZnTA9ATmpuIjMPwVkUQTACNPWiM1LYUHlPMxSVOChUnWnCXL7DRs2ZcwbDkBzLjHOoDMi1JxdjnzJ9YQG_tUBTFL8R9cKH04hvAdaNi71BK8qoQqNNe0f_89R2yuWR1fFe2dtI9edydW6qiNvSwXtuCFAhRQOZqlt_8Q3lYQPob4-pdjgIMUnLjYP64LYKq45uwgd6XyXGwUO1l7W7GpO_kgAKuM99t1MXp6IB6A9XbRNYaCSiJAgCbyqodHbJYQNPsYqo-lf-CPvcv0fC2kOXvaFQsouhiuCVdWSYXEsVCvxw96-Z-lZm9ywHLl1ZTCefxgikLkcYnLod232LGVqJYQDdGVqY1bWtTC6A_knvz9l_JGLJlFE_VFg4Ke4_Ipmzfu9mBQU-47e_11FB9ksO4cvvTstFWuxpAEC_JP7RqRJ5YQA3cxqybEuYIqSRkyDvmSaYIdcLrOsNWXL2kI-24SvhplRJH5S44BVPK_cvVAtHXLtDurfqeHjrmRnC0Cid_0DdYQEi0vKYmHUQGVuJuvUpmtoWsPCiW3uXUhrQUzXqK02YpLwV9Rv7mpi8Ttf4ZKyB94sdTh6YIJ9I3-A9OXjQsvFxYQDAl3ueb3hT243goN3x8oZWZ10whyuR8FOGUCBH0OLHBBvFDGvYJxgGpoyTanZP3rda5KTGp8FwRg0GPWJYL4wRYQJxc7azJM-xLzBNvdaRkXo79nFW44uNVh5MdURrVr8o-ZtBcSEAih0M22Si56IHwJEOdEeBg7-gR7T5Id1ERSpZYQMIuWoTRj1efe2uYiZyf1Ls65uCjTmdLXlstDDgGNVSeZY25cKuxiFORPkWDzxYF-f8UMXzN933O3f-eeB5bnPNYQGbc5MuhppkPQMSTO720vxYfXNSTT9efTsnx6JViQGsyNKlk01Uq5Q7uEyAl60bBFIfOCvwS8Fi5wlSs_dPb-uFYQMbKw4rwwtb9a4DGVHMOJ5jfDQ4sdHFUY3OC3tFf5L8M_shEJSbj_b6_9eNAuZ2GYIrKXM_md3UiWYHQX73TIXdYQGPFJpDLxCtFLpwd1Zc9_yXpRhG1TKKX9yJZArFM8x0ZZwAHSMUXt6mqADMDR1kd3o1jT4WsKZ9am3pWugyDFtJYQA5iROJ_BPhMBm1gPmJF71XcIFhMRSbxq_EZIKHTN4zrNKvJth4_tPir8IQpES8DxuV_25bYvmUMTh2RA3XAMlxYQBenzrw26uucwbHZ7wo_QpkLQFroVPJhBbgPoOHyO9nwkm77jOagHUHapviZdyCCXF6e_zia4dWek5kB5DmcMglYQJO44U9o4BUZ59DFch5dYDIdk7nUSKAd4TUK9QTYQMjauUaNAxpFeuwZdAh8oSSfQ3chjFmg1jpn9kesq43xWQxYQABM0ACr639sNX4x3jH_NRkfxFbiKDQJ-DukfF8UYD_Y1aY-j47JcHpIJhu1WhafVCqKkrRvr0dZ3PymQZnt7LVYQCXMa2Z1j_p28XLE0SqvKae10V-q-dwc_hGI_Eyx_obbPEw02ErzOd4dMpUTffsIU3Tauc-UwNs7iK_FdJYzaBtYQOSssxQPNn1qMR_AHonbY_UPNYb6aY9ek4HMrh2FEUWBllKOO_-j5nRIs1M_e9yrmMaxPYJWi4wxpaFgR1SkXZhYQBGUhHcZ7fEHYGkCuWcofP8VNs_z2FifSzQ-U2pok0Mz4M6hZ1Kn-r6c6AD0KyJUZq7yARCa6ZVwJB2OoF9Wy0hYQI7QjPqTZoDArXYrSa21EN_5zmCn7yWeXzyyDe3bEsV0jTbuQ14sTj5-OCXsqf8PITGVbWp2cZgE6dBch4KRR7hYQLcw1Pcl94lXpeNzjPIg3jtPgklA9_R3fNthHSt1PHOkEznmowHnZgZWo-3C4oyeD8Lpt0ARBOYSqbUqLGk6mGtYQIrpRQ5AyxUYZGtEXvcMe1Vbyc7Tn1rRB7Ev6Z0h__iAum798w81mnJU5eIlyRwAyIQ0cwnGf6Zo74JcQyh4sH9YQIfhd4d0Y23Cufs2VQBHi86tlqMtrHk2RTJy455m_DzX0qm_nQty90WDKDC92A3rRxPqi_ZxX2c-ChLrPoxLja9YQF_6ODroXBzfXkm9MYcyQVZ0SsfLdPliMmy9gem22PV7fdrSNvPY0hiqs6qPlFuVt2zBNEpf03R6axXzV2iAJhpYQNXGgigVpkgO8BrYvQWvDMKslyi6oQwG3i2AjcdzxCot72c79Kj-54G1kMMZs1E5jbyYuYzTOuFcXUjbJp0taYpYQKTpzL3cXC7dXgGDN6ke18BJ6pRvSuTAqK1UqIbfq6PyP3pys3fm_O4xsbEvAJjXddMBEigQ3dQOoQiBPX1GRrVYQMD5sLp7muEOz0LBub6_bJDvJmOwL2duPrU3FVXN1po0pcddNcBCYB7XGPHK-ptrqGpVIX4jyxJprKLQR0bsyJZYQJBIZ6wZV0yCPzN7p9q6-qMOCb1wa5jIew9NnG9akwDMiAciLZuR5TE0NQoalY7m7aICiM8lbEVByAdddwECxJZYQJXbLhIt1YYHRxAygGPM2m-i7E98ySYHLZ99MdZ6SSMvP_FnakQMlDeHoN7Z5V9f9von_QoqS4mijhOhR5wsfKpYQKFsz3VVgvYOYtvs-6mwX97tTOv6OlYYwa5NTzptPz_tttNjbtqT_8D0cwCVWjlc4M4daOmjXZo7KmXtqDnh3WGCZy9pc3N1ZXJqL3ZhbGlkRnJvbQ" + } +} \ No newline at end of file diff --git a/e2e/fixtures/pol-amoy/pol/oa-pol-minted.json b/e2e/fixtures/pol-amoy/pol/oa-pol-minted.json new file mode 100644 index 0000000..31cafa3 --- /dev/null +++ b/e2e/fixtures/pol-amoy/pol/oa-pol-minted.json @@ -0,0 +1,33 @@ +{ + "version": "https://schema.openattestation.com/2.0/schema.json", + "data": { + "$template": { + "name": "d08b56ed-9f91-44d8-8748-4ef17c10084e:string:GOVTECH_DEMO", + "type": "17fbeec8-9712-4e3a-bf17-dd74ba348644:string:EMBEDDED_RENDERER", + "url": "a1061e20-318c-4bde-89d5-1ec42ef1eea9:string:https://demo-renderer.opencerts.io" + }, + "issuers": [ + { + "name": "7c8c3632-df92-492d-84fa-bb59363c9cf0:string:TrustVC POL Issuer", + "tokenRegistry": "0a0be8f4-c4af-4ec2-8bd8-ef787f72ea0a:string:0x0961d9C2dA9a7105fDFC9DC4ec45951C024F88B0", + "identityProof": { + "type": "21a24a77-34fc-4d8a-9cd4-7678304ce11d:string:DNS-TXT", + "location": "e201feac-f6cc-466c-98ae-3cc35dd03891:string:example.tradetrust.io" + } + } + ], + "recipient": { + "name": "9847a1cf-8151-42d7-b240-607d7a0f2fb7:string:TrustVC POL Test" + }, + "network": { + "chain": "da056415-f675-49d8-942b-6c4c76bf664e:string:POL", + "chainId": "39922aa7-aaa1-49b8-a77c-d230eae018fb:string:137" + } + }, + "signature": { + "type": "SHA3MerkleProof", + "targetHash": "5382d7c3c19d4b5730537a234b01b2084fdd71c3196dd0f5df00b23d9756d8d0", + "proof": [], + "merkleRoot": "5382d7c3c19d4b5730537a234b01b2084fdd71c3196dd0f5df00b23d9756d8d0" + } +} diff --git a/e2e/fixtures/pol-amoy/pol/w3c-pol-minted.json b/e2e/fixtures/pol-amoy/pol/w3c-pol-minted.json new file mode 100644 index 0000000..2cf74bb --- /dev/null +++ b/e2e/fixtures/pol-amoy/pol/w3c-pol-minted.json @@ -0,0 +1,64 @@ +{ + "@context": [ + "https://www.w3.org/ns/credentials/v2", + "https://w3id.org/security/data-integrity/v2", + "https://trustvc.io/context/render-method-context-v2.json", + "https://trustvc.io/context/promissory-note.json", + "https://trustvc.io/context/transferable-records-context.json", + "https://trustvc.io/context/qrcode-context.json" + ], + "renderMethod": [ + { + "type": "EMBEDDED_RENDERER", + "templateName": "PROMISSORY_NOTE", + "id": "https://generic-templates.tradetrust.io" + } + ], + "credentialSubject": { + "type": [ + "PromissoryNote" + ], + "drawerCompanyName": "XYZ Exports Pvt. Ltd.", + "drawerCompanyNo": "CIN-XYZ1234567", + "drawerJurisdiction": "India", + "drawerWalletAddress": "0x433097a1C1b8a3e9188d8C54eCC057B1D69f1638", + "drawerPlaceOfIssue": "Mumbai, India", + "draweeCompanyName": "XYZ Imports Ltd.", + "draweeCompanyNo": "REG-XYZ9876543", + "draweeJurisdiction": "California, United States", + "draweeWalletAddress": "0xca93690bb57eeab273c796a9309246bc0fb93649", + "dueDate": "2025-06-19", + "currency": "USD", + "amount": "50,000.00", + "clause": "Payment to be made in full without set-off or counterclaim, subject to terms agreed between Drawer and Drawee.", + "signerName": "John Doe", + "signerPosition": "Chief Financial Officer", + "signerTimeStamp": "2025-06-10", + "logo": "data:image/png;base64,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", + "pNoteId": "PN-9081-2231-SGP", + "commitmentDate": "2025-12-10" + }, + "type": [ + "VerifiableCredential" + ], + "credentialStatus": { + "type": "TransferableRecords", + "tokenNetwork": { + "chain": "POL", + "chainId": 137 + }, + "tokenRegistry": "0x0961d9C2dA9a7105fDFC9DC4ec45951C024F88B0", + "tokenId": "1174afa500e1b265450b55200cb16487e92e7c5410cff84b693eda59194b10fd" + }, + "issuer": "did:web:trustvc.github.io:did:1", + "validFrom": "2024-04-01T12:19:52Z", + "id": "urn:uuid:019ea68d-006c-7887-9ea8-3f54f562ac65", + "proof": { + "type": "DataIntegrityProof", + "created": "2026-06-08T09:25:19Z", + "verificationMethod": "did:web:trustvc.github.io:did:1#multikey-1", + "cryptosuite": "ecdsa-sd-2023", + "proofPurpose": "assertionMethod", + "proofValue": "u2V0AhVhAHlKJtL9UV-_snL5rOlLyCznZu_oNyzOE3s6XAFR4USM0D68IJsm6qf5M01opyFXDW3Xn8mtLb6AZEgRWH6C4fVgjgCQD-WN_Q-KfWRbl6pQ5HB4u4khdD6xR1mPuWcTcLYNwPkhYIJy9GT0cT7-l_I9XOnoDDJyy5IV9LvUECuSSvNoluakUmB9YQDn8hL0e7mW-1DC0i74pcWcskNkMU82TgfA0P1eeJLFHdkuhd-HhqWH2wTd9CG48KJ0UvVkt3jzPXWHMhkkxzMRYQCnL8QQIZ-Ki2Cjf1_u43B3AM5BwAAXiC2NkfK6AhcWVoBnVtEBN2vBZc4pWJveWd_qVJU5ALqL3Dz1JmIAwkHlYQNfW5JmtYILhhIZufZ9j4FX9IA4x9hk0ULLhEenxAaYlfnYnewVsI3AvRdGmJc6QwL1PTR-hTVG3txGVL3SNWBtYQABtgC4W-r6VH649Et1xGg1NB2VE_ZshNSK2yQN1hDok36f6bwcAJ1n91y52u3XmpxOYyGmsPM8yp6udzO9YRwtYQAQz4UhnkiIQovoJHD6Y-kq3X2YegxXFTnh4zH_qNWvjhZVa0nx9CCDvBDpmlH0lWqSAkNiTTx0XWE298vAK54xYQGFfs4um2IWamhe_4da7qsInmTR5VZgIhqPlkfaQd4-Vw9INv8orNrqXOhIMssCG1MCAr1vnsM6zVq75fVnABP5YQA0idgyw13Uwb8N4e_CFH_kIX9M21lLmeZ_ZWA9z5HfsN8qxBEU4VeODqi97QjgRtVBKL4ijHXT1_-YZyZZByB5YQHcGLRUvnezhWKd8kDw2cn12hfnc6rLlyy3dXUDvUzfr6n3zUqCA_cDopBbmhtGIQTHMff4uuiiFnT0a9dRkC09YQKbQ0HIMNzM2IkbGp14_JouEXXhvR3rMCKb8y2S4QzrqrZZMbbTNQaoHvTi07DbEeZINZlfJa-OhtIt82ulauc1YQJGDTkF2B9txoMSEZqHn5dKuw5-XVxIt7c-FGeeMQ0cZ3bW3P5EorCyF3Vq3iCP2a8gGyndXbXRp0ZiJhxLp2y5YQGNf8SRVKhEMF5FSH4xgFokxbcp4Kl2T70gCfGVJigO_kjxyZt8H69gNDnNYSc8QzpkFKT3UxWz_tZSQ9Ia8IIJYQJx0MTX75Tw_qBhANFD_brQ6L-AzNBjm_OH5bh8gAVusyVhnDpmXY51gQrN6JyjqtLxaYtjY1cfDJwuC35atF8xYQHAl47bk03u2wlrCHigRI5e37vqpR1JDzegTysqwLWqduOWqgU948Rk2upFSrQyhmgFX7Fl7DtBuHo8ZpgMujUlYQChDnKQjbDqWalmDH8w8LX474u9CYIFWK4cQwBlKhBADVfKU1Qqica4w9bzA5GNfjB33CX9XUMplTJSowJEUr1FYQBkKA9cJV4Um_B88M2n5_baaiAPFznINZpMLK5EJgQ-0wUuvI50_t6K8bWegTer1fnQOSnAlfBtUcK8yYL_QOfJYQLlh6ZzWPSorsSl3JZm9rp2L_lxiTbY0DWY9pSJMMiA9EKQaTZkpZqeSKEmoT6Aq-eFAuTbwr906jhg4NprWI1RYQEghFR8i1Dc8TpbjkoLndak2DYuG1SxtPZgzVgp1BPyEj5GPyL4FL1a-ikORWgV-HVJMEfarAkSiarXyUgvNxMRYQHkm3JeRRLKAKaP6gAf657NnGmmA1uxzFQ4Gq--ypILf-bpWEE4cTvEWCqfQSD3am8bFOhUJXFB5Kw4UqcTsQMFYQP0klTeYpKIXTeZQfVGBu7TBu2ZAwpDQ2lVVP0mXhP84NSdKKq9sIhD2GczdN_WMe89fSLvOEFY89y_h2SEyWqNYQNkQsRlN7U6tNJClz7rTiRXBEYfJGcHr8DzOsbckVOcovkhLIXPQvza8k87XZVLbCQiM9EZjS-Qi_izstH7RBZ5YQP5o3vy24Z8-mdlf6gyILBobX49kkTJ_-K5QLVNRH49pbxMNri4y2TPRHK6dlH-RmqB0ODEJUtD22k2ctVpvZxlYQODUnQlNDHujgjU-zv2OKx8VULunh8F2Zc5a8zSe8et7nbYiHoR1zoJpny2FJNrcpaZsyCfYkFdMBY92-2fIMMVYQLriZAVY1yLNmVMmsvp1eNLJGuLhVbNW5Yeg0Q7MUDKiQWwfCIUAdpssw4NCzttMVc2BFOIUfLWeY2gOWZGeABJYQMFdZ5HH3AuukE_nIvGY3L7pCFj-fPC98peSXOrlSDndTpMD5YpAJ7llX1mu6eQh-3HM8pcXRyPMgIJ8Mts7brZYQCMMCir0KK66Cwn0PBloywyFio9K9FCVUNwm7EmR6cDET2f1eCMBuAWmogHnQq6Uaq9zbmPlh_61a2AX3plYA1NYQDTEXLX4HprsDgr6z9NQ4zsGughnID20MqLH8Ekcc-oaC-jePS9Oza-aF9AU83JPeYdixWUN_wIJzzp7HxPkCidYQOpN0b7tWiFYXRRF_WeNDkXzRKzUyx_AoysQSnjQ2tibBzdN0-YvGEkeHrxvurr1hh8K9YL4yNsaw7Xpx6CrjSJYQO9Q0rdzs8UlnYhVQYxFbEbmaJppeTTFYjH3rXZ9SmDvPTdkL57r8cqxHCPTpG1xgxL1fuYOrE__p7PZohCwiy1YQHJaNYwpgjeDOPO6Txoz0Q-jkVMDr9XUWM1qp-SL8JtLpqImZ9iw54uHKFxuMuETSSKXEN6ZnKlpbpLDM4FL3i1YQEUVVNdExM1KWU3orB-s5n50br-e7LubUo6FhZYghz1RFvSwFkGmtsqGOk67W0rtUd8TERoHjDq137ocHM4LRrNYQCG5DS_HAcrUXBI_eoxy1AJlKx9L4lY4VsNum6b4_F3lJJQ7wLor0NhbcpK3-0U-Iuf_J4_NKFiFwiQ9ZhE_Ll-CZy9pc3N1ZXJqL3ZhbGlkRnJvbQ" + } +} \ No newline at end of file diff --git a/e2e/helpers/verify-helpers.ts b/e2e/helpers/verify-helpers.ts new file mode 100644 index 0000000..80a0cb7 --- /dev/null +++ b/e2e/helpers/verify-helpers.ts @@ -0,0 +1,88 @@ +import path from 'path' +import fs from 'fs' +import os from 'os' +import { expect, type Page } from '@playwright/test' + +export const TEMP_DIR = path.join(os.tmpdir(), 'trustvc-pol-amoy-tests') +fs.mkdirSync(TEMP_DIR, { recursive: true }) + +const UNUSED_HASH = 'deadbeef' + '0'.repeat(56) + +export function writeTamperedOa(srcPath: string, name: string): string { + const doc = JSON.parse(fs.readFileSync(srcPath, 'utf8')) + doc.signature = { ...doc.signature, targetHash: UNUSED_HASH } + const dest = path.join(TEMP_DIR, name) + fs.writeFileSync(dest, JSON.stringify(doc)) + return dest +} + +export function writeNotMintedOa(srcPath: string, name: string): string { + const doc = JSON.parse(fs.readFileSync(srcPath, 'utf8')) + doc.signature = { ...doc.signature, targetHash: UNUSED_HASH, merkleRoot: UNUSED_HASH } + const dest = path.join(TEMP_DIR, name) + fs.writeFileSync(dest, JSON.stringify(doc)) + return dest +} + +export function writeTamperedW3c(srcPath: string, name: string): string { + const doc = JSON.parse(fs.readFileSync(srcPath, 'utf8')) + const pv: string = doc.proof.proofValue + doc.proof = { ...doc.proof, proofValue: pv.slice(0, -1) + (pv.endsWith('A') ? 'B' : 'A') } + const dest = path.join(TEMP_DIR, name) + fs.writeFileSync(dest, JSON.stringify(doc)) + return dest +} + +export function writeNotMintedW3c(srcPath: string, name: string): string { + const doc = JSON.parse(fs.readFileSync(srcPath, 'utf8')) + doc.credentialStatus = { ...doc.credentialStatus, tokenId: UNUSED_HASH } + const dest = path.join(TEMP_DIR, name) + fs.writeFileSync(dest, JSON.stringify(doc)) + return dest +} + +export async function uploadDoc(page: Page, filePath: string) { + const resetBtn = page.locator('[data-testid="upload-new-file-btn"]') + if (await resetBtn.isVisible({ timeout: 2_000 }).catch(() => false)) { + await resetBtn.click() + } + const tryAnotherBtn = page.locator('[data-testid="try-another-btn"]') + if (await tryAnotherBtn.isVisible({ timeout: 2_000 }).catch(() => false)) { + await tryAnotherBtn.click() + } + + await page.locator('#file-upload').setInputFiles(filePath) + + const verifying = page.locator('[data-testid="verifying-state"]') + // Loader may appear too briefly or be delayed by React batching; don't fail if missed. + await verifying.waitFor({ state: 'visible', timeout: 5_000 }).catch(() => {}) + await verifying.waitFor({ state: 'hidden', timeout: 90_000 }).catch(() => {}) + + // VerifyResult shown for valid docs; VerifyError (try-another-btn) for invalid/error. + await page + .locator('[data-testid="verify-result"], [data-testid="try-another-btn"]') + .first() + .waitFor({ state: 'visible', timeout: 60_000 }) +} + +export async function assertCheckStatus( + page: Page, + check: 'document_integrity' | 'document_status' | 'issuer_identity', + status: 'VALID', +) { + await expect( + page.locator(`[data-testid="check-${check}"][data-status="${status}"]`), + ).toBeVisible() +} + +// The component renders VerifyError (not VerifyResult) for invalid/error docs, +// so individual check statuses are not in the DOM for failing scenarios. +export async function assertVerificationFailed(page: Page) { + await expect(page.locator('[data-testid="try-another-btn"]')).toBeVisible() +} + +export async function assertAllValid(page: Page) { + await assertCheckStatus(page, 'document_integrity', 'VALID') + await assertCheckStatus(page, 'document_status', 'VALID') + await assertCheckStatus(page, 'issuer_identity', 'VALID') +} diff --git a/e2e/tests/amoy-verify.spec.ts b/e2e/tests/amoy-verify.spec.ts new file mode 100644 index 0000000..d778c9a --- /dev/null +++ b/e2e/tests/amoy-verify.spec.ts @@ -0,0 +1,90 @@ +/** + * End-to-end verification tests for Polygon Amoy testnet (chainId 80002). + * Covers OA v2 and W3C VC document types. + * + * Prerequisites: the app must be running on http://localhost:5173 + */ + +import path from 'path' +import { fileURLToPath } from 'url' +import { test } from '@playwright/test' +import { + uploadDoc, + assertAllValid, + assertVerificationFailed, + writeTamperedOa, + writeNotMintedOa, + writeTamperedW3c, + writeNotMintedW3c, +} from '../helpers/verify-helpers' + +const __filename = fileURLToPath(import.meta.url) +const __dirname = path.dirname(__filename) + +const FIXTURE_DIR = path.resolve(__dirname, '../fixtures/pol-amoy/amoy') + +const OA_AMOY_MINTED = path.join(FIXTURE_DIR, 'oa-amoy-minted.json') +const W3C_AMOY_MINTED = path.join(FIXTURE_DIR, 'w3c-amoy-minted.json') + +const OA_AMOY_TAMPERED = writeTamperedOa( OA_AMOY_MINTED, 'oa-amoy-tampered.json') +const OA_AMOY_NOT_MINTED = writeNotMintedOa(OA_AMOY_MINTED, 'oa-amoy-not-minted.json') +const W3C_AMOY_TAMPERED = writeTamperedW3c( W3C_AMOY_MINTED, 'w3c-amoy-tampered.json') +const W3C_AMOY_NOT_MINTED = writeNotMintedW3c(W3C_AMOY_MINTED, 'w3c-amoy-not-minted.json') + +// ══════════════════════════════════════════════════════════════════════════ +// Polygon Amoy testnet (chainId 80002) – OA v2 +// ══════════════════════════════════════════════════════════════════════════ + +test.describe('Amoy testnet – OA v2 document', () => { + test.beforeEach(async ({ page }) => { + await page.goto('/') + const dismissBtn = page.locator('[data-testid="dismiss-modal"]') + if (await dismissBtn.isVisible({ timeout: 2_000 }).catch(() => false)) { + await dismissBtn.click() + } + }) + + test('[Amoy OA] valid minted document – all three checks VALID', async ({ page }) => { + await uploadDoc(page, OA_AMOY_MINTED) + await assertAllValid(page) + }) + + test('[Amoy OA] tampered document (targetHash mutated) – DOCUMENT_INTEGRITY INVALID', async ({ page }) => { + await uploadDoc(page, OA_AMOY_TAMPERED) + await assertVerificationFailed(page) + }) + + test('[Amoy OA] not-minted document (merkleRoot replaced) – DOCUMENT_STATUS INVALID', async ({ page }) => { + await uploadDoc(page, OA_AMOY_NOT_MINTED) + await assertVerificationFailed(page) + }) +}) + +// ────────────────────────────────────────────────────────────────────────── +// Polygon Amoy testnet – W3C VC +// ────────────────────────────────────────────────────────────────────────── + +test.describe('Amoy testnet – W3C VC document', () => { + test.beforeEach(async ({ page }) => { + await page.goto('/') + const dismissBtn = page.locator('[data-testid="dismiss-modal"]') + if (await dismissBtn.isVisible({ timeout: 2_000 }).catch(() => false)) { + await dismissBtn.click() + } + }) + + test('[Amoy W3C] valid minted document – all three checks VALID', async ({ page }) => { + await uploadDoc(page, W3C_AMOY_MINTED) + await assertAllValid(page) + }) + + test('[Amoy W3C] tampered document (proofValue mutated) – DOCUMENT_INTEGRITY INVALID', async ({ page }) => { + await uploadDoc(page, W3C_AMOY_TAMPERED) + await assertVerificationFailed(page) + }) + + test('[Amoy W3C] not-minted document (tokenId replaced) – DOCUMENT_STATUS INVALID', async ({ page }) => { + await uploadDoc(page, W3C_AMOY_NOT_MINTED) + await assertVerificationFailed(page) + }) +}) diff --git a/e2e/tests/pol-verify.spec.ts b/e2e/tests/pol-verify.spec.ts new file mode 100644 index 0000000..2728e7d --- /dev/null +++ b/e2e/tests/pol-verify.spec.ts @@ -0,0 +1,99 @@ +/** + * End-to-end verification tests for Polygon POL mainnet (chainId 137). + * Covers OA v2 and W3C VC document types. + * + * Prerequisites: the app must be running on http://localhost:5173 + */ + +import path from 'path' +import { fileURLToPath } from 'url' +import { test } from '@playwright/test' +import { + uploadDoc, + assertAllValid, + assertVerificationFailed, + writeTamperedOa, + writeNotMintedOa, + writeTamperedW3c, + writeNotMintedW3c, +} from '../helpers/verify-helpers' + +const __filename = fileURLToPath(import.meta.url) +const __dirname = path.dirname(__filename) + +const FIXTURE_DIR = path.resolve(__dirname, '../fixtures/pol-amoy/pol') + +const OA_POL_MINTED = path.join(FIXTURE_DIR, 'oa-pol-minted.json') +const W3C_POL_MINTED = path.join(FIXTURE_DIR, 'w3c-pol-minted.json') + +const OA_POL_TAMPERED = writeTamperedOa( OA_POL_MINTED, 'oa-pol-tampered.json') +const OA_POL_NOT_MINTED = writeNotMintedOa(OA_POL_MINTED, 'oa-pol-not-minted.json') +const W3C_POL_TAMPERED = writeTamperedW3c( W3C_POL_MINTED, 'w3c-pol-tampered.json') +const W3C_POL_NOT_MINTED = writeNotMintedW3c(W3C_POL_MINTED, 'w3c-pol-not-minted.json') + +// ══════════════════════════════════════════════════════════════════════════ +// Polygon POL mainnet (chainId 137) – OA v2 +// ══════════════════════════════════════════════════════════════════════════ + +test.describe('POL mainnet – OA v2 document', () => { + test.describe.configure({ retries: 2 }) + test.beforeEach(async ({ page }) => { + await page.goto('/') + const dismissBtn = page.locator('[data-testid="dismiss-modal"]') + if (await dismissBtn.isVisible({ timeout: 2_000 }).catch(() => false)) { + await dismissBtn.click() + } + }) + + // fixme: requires POL mainnet infrastructure — deploy token registry + // 0x0961d9C2dA9a7105fDFC9DC4ec45951C024F88B0 on chainId 137, mint the + // merkleRoot in oa-pol-minted.json, and add DNS-TXT records for that + // registry to example.tradetrust.io before enabling this test. + test.fixme('[POL OA] valid minted document – all three checks VALID', async ({ page }) => { + await uploadDoc(page, OA_POL_MINTED) + await assertAllValid(page) + }) + + test('[POL OA] tampered document (targetHash mutated) – DOCUMENT_INTEGRITY INVALID', async ({ page }) => { + await uploadDoc(page, OA_POL_TAMPERED) + await assertVerificationFailed(page) + }) + + test('[POL OA] not-minted document (merkleRoot replaced) – DOCUMENT_STATUS INVALID', async ({ page }) => { + await uploadDoc(page, OA_POL_NOT_MINTED) + await assertVerificationFailed(page) + }) +}) + +// ────────────────────────────────────────────────────────────────────────── +// Polygon POL mainnet – W3C VC +// ────────────────────────────────────────────────────────────────────────── + +test.describe('POL mainnet – W3C VC document', () => { + test.describe.configure({ retries: 2 }) + test.beforeEach(async ({ page }) => { + await page.goto('/') + const dismissBtn = page.locator('[data-testid="dismiss-modal"]') + if (await dismissBtn.isVisible({ timeout: 2_000 }).catch(() => false)) { + await dismissBtn.click() + } + }) + + // fixme: requires POL mainnet infrastructure — token registry + // 0x0961d9C2dA9a7105fDFC9DC4ec45951C024F88B0 on chainId 137 must have + // the tokenId from w3c-pol-minted.json minted before enabling this test. + test.fixme('[POL W3C] valid minted document – all three checks VALID', async ({ page }) => { + await uploadDoc(page, W3C_POL_MINTED) + await assertAllValid(page) + }) + + test('[POL W3C] tampered document (proofValue mutated) – DOCUMENT_INTEGRITY INVALID', async ({ page }) => { + await uploadDoc(page, W3C_POL_TAMPERED) + await assertVerificationFailed(page) + }) + + test('[POL W3C] not-minted document (tokenId replaced) – DOCUMENT_STATUS INVALID', async ({ page }) => { + await uploadDoc(page, W3C_POL_NOT_MINTED) + await assertVerificationFailed(page) + }) +}) diff --git a/package-lock.json b/package-lock.json index f9cacc3..0554aa4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,7 +11,7 @@ "@sanity/client": "^7.20.0", "@sanity/image-url": "^2.1.1", "@trustvc/decentralized-renderer-react-components": "^1.0.3", - "@trustvc/trustvc": "^2.12.4", + "@trustvc/trustvc": "^2.14.1", "@types/lodash": "^4.17.24", "clsx": "^2.1.1", "date-fns": "^4.1.0", @@ -1517,32 +1517,42 @@ "node": ">=18" } }, + "node_modules/@digitalbazaar/bbs-2023-cryptosuite/node_modules/cborg": { + "version": "4.5.8", + "resolved": "https://registry.npmjs.org/cborg/-/cborg-4.5.8.tgz", + "integrity": "sha512-6/viltD51JklRhq4L7jC3zgy6gryuG5xfZ3kzpE+PravtyeQLeQmCYLREhQH7pWENg5pY4Yu/XCd6a7dKScVlw==", + "license": "Apache-2.0", + "bin": { + "cborg": "lib/bin.js" + } + }, "node_modules/@digitalbazaar/bbs-signatures": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@digitalbazaar/bbs-signatures/-/bbs-signatures-3.0.0.tgz", - "integrity": "sha512-mQMCMnCWAraVSswJg1kJK/qmUrb3jMoWB9c8kOmztsWfnMZJcyYAcavuF8jgrVZ5cl/ZRNMK61ZbIvkqd6BE6g==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@digitalbazaar/bbs-signatures/-/bbs-signatures-3.1.0.tgz", + "integrity": "sha512-wx86l/PFOaRcoLBPmzwpF9Oo4uYJrm4uq/B1rHX5OHD15NakmUINfRr8NAGDG356GeTBDGZkMsBFgNj1x0dc+g==", "license": "BSD-3-Clause", "dependencies": { - "@noble/curves": "^1.3.0" + "@noble/curves": "^2.2.0", + "@noble/hashes": "^2.2.0" }, "engines": { "node": ">=18" } }, "node_modules/@digitalbazaar/bls12-381-multikey": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@digitalbazaar/bls12-381-multikey/-/bls12-381-multikey-2.1.0.tgz", - "integrity": "sha512-JelU85fNhvHl2/mqRdmrtrE2ZQJ0//+UwI0l/YFmvsOr6YN2GuKPzdkfXjpm7f3UvnBqz5f8QKFTb9mVa7mVVg==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@digitalbazaar/bls12-381-multikey/-/bls12-381-multikey-2.2.0.tgz", + "integrity": "sha512-C71W5QIVSkLK24XsDWENOqihfy8ITKXqP2c+aKtx09j4vbHstwG6grn4sF9qKEQ2FOMm3KPIrL2byiIIqt61ow==", "license": "BSD-3-Clause", "dependencies": { "@digitalbazaar/bbs-signatures": "^3.0.0", - "@noble/curves": "^1.3.0", + "@noble/curves": "^2.2.0", "base58-universal": "^2.0.0", "base64url-universal": "^2.0.0", - "cborg": "^4.2.0" + "cborg": "^5.1.1" }, "engines": { - "node": ">=18" + "node": ">=22" } }, "node_modules/@digitalbazaar/data-integrity": { @@ -1560,19 +1570,18 @@ } }, "node_modules/@digitalbazaar/di-sd-primitives": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@digitalbazaar/di-sd-primitives/-/di-sd-primitives-3.2.0.tgz", - "integrity": "sha512-DydbRtDPY2vVVk7hLicSFfCCzd1d5e3GLjzqamLV4t9f9mGbHtnU2IeNhtUDGJZRpviFmtFjPMZwuns6sCAP9A==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@digitalbazaar/di-sd-primitives/-/di-sd-primitives-3.3.0.tgz", + "integrity": "sha512-ljbopcxLts2ALg6ce1EG3AjIlXOC77EHmkqvghtyZBNl3XwOZueBQJmTDD6XvRQq930n6kfCtvt4JUWOrg5CrQ==", "license": "BSD-3-Clause", "dependencies": { "base64url-universal": "^2.0.0", "jsonld": "^9.0.0", "klona": "^2.0.6", - "rdf-canonize": "^5.0.0", - "uuid": "^10.0.0" + "rdf-canonize": "^5.0.0" }, "engines": { - "node": ">=18" + "node": ">=20" } }, "node_modules/@digitalbazaar/di-sd-primitives/node_modules/@digitalbazaar/http-client": { @@ -1649,27 +1658,14 @@ } }, "node_modules/@digitalbazaar/di-sd-primitives/node_modules/undici": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/undici/-/undici-6.23.0.tgz", - "integrity": "sha512-VfQPToRA5FZs/qJxLIinmU59u0r7LXqoJkCzinq3ckNJp3vKEh7jTWN589YQ5+aoAC/TGRLyJLCPKcLQbM8r9g==", + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-6.26.0.tgz", + "integrity": "sha512-4yqz8a3n5HmGTlsbADNtr/dJlhkh/55Rq798G6ibiULcXbDtaLpTl1pvdqcbFfeoj3iSi52lePFM7h9H21cw/A==", "license": "MIT", "engines": { "node": ">=18.17" } }, - "node_modules/@digitalbazaar/di-sd-primitives/node_modules/uuid": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz", - "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==", - "funding": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" - ], - "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" - } - }, "node_modules/@digitalbazaar/di-sd-primitives/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", @@ -1706,6 +1702,15 @@ "node": ">=18" } }, + "node_modules/@digitalbazaar/ecdsa-sd-2023-cryptosuite/node_modules/cborg": { + "version": "4.5.8", + "resolved": "https://registry.npmjs.org/cborg/-/cborg-4.5.8.tgz", + "integrity": "sha512-6/viltD51JklRhq4L7jC3zgy6gryuG5xfZ3kzpE+PravtyeQLeQmCYLREhQH7pWENg5pY4Yu/XCd6a7dKScVlw==", + "license": "Apache-2.0", + "bin": { + "cborg": "lib/bin.js" + } + }, "node_modules/@digitalbazaar/http-client": { "version": "3.4.1", "resolved": "https://registry.npmjs.org/@digitalbazaar/http-client/-/http-client-3.4.1.tgz", @@ -4372,15 +4377,15 @@ } }, "node_modules/@noble/curves": { - "version": "1.9.7", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.9.7.tgz", - "integrity": "sha512-gbKGcRUYIjA3/zCCNaWDciTMFI0dCkvou3TL8Zmy5Nc7sJ47a0jtOeZoTaMxkuqRo9cRhjOdZJXegxYE5FN/xw==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-2.2.0.tgz", + "integrity": "sha512-T/BoHgFXirb0ENSPBquzX0rcjXeM6Lo892a2jlYJkqk83LqZx0l1Of7DzlKJ6jkpvMrkHSnAcgb5JegL8SeIkQ==", "license": "MIT", "dependencies": { - "@noble/hashes": "1.8.0" + "@noble/hashes": "2.2.0" }, "engines": { - "node": "^14.21.3 || >=16" + "node": ">= 20.19.0" }, "funding": { "url": "https://paulmillr.com/funding/" @@ -4396,12 +4401,12 @@ } }, "node_modules/@noble/hashes": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz", - "integrity": "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-2.2.0.tgz", + "integrity": "sha512-IYqDGiTXab6FniAgnSdZwgWbomxpy9FtYvLKs7wCUs2a8RkITG+DFGO1DM9cr+E3/RgADRpFjrKVaJ1z6sjtEg==", "license": "MIT", "engines": { - "node": "^14.21.3 || >=16" + "node": ">= 20.19.0" }, "funding": { "url": "https://paulmillr.com/funding/" @@ -5186,18 +5191,6 @@ "@noble/hashes": "^2.0.0" } }, - "node_modules/@sanity/signed-urls/node_modules/@noble/hashes": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-2.0.1.tgz", - "integrity": "sha512-XlOlEbQcE9fmuXxrVTXCTlG2nlRXa9Rj3rr5Ue/+tX+nmkgbX720YHh0VR3hBF9xDvwnb8D2shVGOwNx+ulArw==", - "license": "MIT", - "engines": { - "node": ">= 20.19.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, "node_modules/@scure/base": { "version": "1.1.9", "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.9.tgz", @@ -7376,13 +7369,23 @@ "node": ">=8" } }, + "node_modules/@tradetrust-tt/tradetrust/node_modules/web-did-resolver": { + "version": "2.0.32", + "resolved": "https://registry.npmjs.org/web-did-resolver/-/web-did-resolver-2.0.32.tgz", + "integrity": "sha512-L91/ApTmDjgzS0UDstTKn3kN/1hlQBnVcUN8K29e3xhVBpPktHYC6uvVAQ8ohbIg9D6wrrbaBQvfRArDxgJG2g==", + "license": "Apache-2.0", + "dependencies": { + "cross-fetch": "^4.1.0", + "did-resolver": "^4.1.0" + } + }, "node_modules/@tradetrust-tt/tt-verify": { - "version": "9.7.2", - "resolved": "https://registry.npmjs.org/@tradetrust-tt/tt-verify/-/tt-verify-9.7.2.tgz", - "integrity": "sha512-LZvjF/1Lj0a0TwLiyRAhygVxe7jnwlmcDiaFu/rpiHCvwySUh5iehJeha0erpU7xeSyMZPRqeWOKQE3XXbtLRA==", + "version": "9.7.5", + "resolved": "https://registry.npmjs.org/@tradetrust-tt/tt-verify/-/tt-verify-9.7.5.tgz", + "integrity": "sha512-LoVrJLiWB9ZnMHoe7IGBAc4edK2upKYsfCRgo9T7VNLo3XiBM4cIr25RQ5e1AQ58m+3gKWRnpP9ZKj0qqN+xFg==", "license": "Apache-2.0", "dependencies": { - "@tradetrust-tt/dnsprove": "^2.20.0", + "@tradetrust-tt/dnsprove": "^2.21.0", "@tradetrust-tt/token-registry": "^5.5.0", "@tradetrust-tt/tradetrust": "^6.10.3", "@trustvc/document-store": "^1.0.3", @@ -7402,25 +7405,6 @@ "ethers": "^5.8.0" } }, - "node_modules/@tradetrust-tt/tt-verify/node_modules/cross-fetch": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.2.0.tgz", - "integrity": "sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q==", - "license": "MIT", - "dependencies": { - "node-fetch": "^2.7.0" - } - }, - "node_modules/@tradetrust-tt/tt-verify/node_modules/web-did-resolver": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/web-did-resolver/-/web-did-resolver-2.0.4.tgz", - "integrity": "sha512-PORpoA4P0I3m0cLJX2IIDZ0gMKgC1PjS8DuDeg9/JCdIlFiXrZCyTG1hxvw4a4vhDKr0sZKSZL1pQDXTgqLm8w==", - "license": "Apache-2.0", - "dependencies": { - "cross-fetch": "^3.1.2", - "did-resolver": "^3.1.0" - } - }, "node_modules/@trustvc/decentralized-renderer-react-components": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/@trustvc/decentralized-renderer-react-components/-/decentralized-renderer-react-components-1.0.3.tgz", @@ -7459,9 +7443,9 @@ "license": "Apache-2.0" }, "node_modules/@trustvc/trustvc": { - "version": "2.12.4", - "resolved": "https://registry.npmjs.org/@trustvc/trustvc/-/trustvc-2.12.4.tgz", - "integrity": "sha512-9Ff/BuXmT5guZBjBLtEXNynCHnxLeH7awsS8/LMoZSPXcFczk8vAAFtx+4iTEBv2mRXQ3hZpe+T4zoueSe/gxQ==", + "version": "2.14.1", + "resolved": "https://registry.npmjs.org/@trustvc/trustvc/-/trustvc-2.14.1.tgz", + "integrity": "sha512-vGR6/s8nn69sl3Ntr/rE8+kg64RuqsRN2AeB0yeNOAUwTWEmQRk16cvB4g1xW7+CsLc5yI5sRuAqeAmbhHdV0g==", "license": "Apache-2.0", "dependencies": { "@tradetrust-tt/dnsprove": "^2.18.0", @@ -7469,13 +7453,13 @@ "@tradetrust-tt/token-registry-v4": "npm:@tradetrust-tt/token-registry@^4.16.0", "@tradetrust-tt/token-registry-v5": "npm:@tradetrust-tt/token-registry@^5.5.0", "@tradetrust-tt/tradetrust": "^6.10.3", - "@tradetrust-tt/tt-verify": "^9.7.2", + "@tradetrust-tt/tt-verify": "^9.7.5", "@trustvc/document-store": "^1.0.3", - "@trustvc/w3c": "^2.0.0", - "@trustvc/w3c-context": "^2.0.0", - "@trustvc/w3c-credential-status": "^2.0.0", - "@trustvc/w3c-issuer": "^2.0.0", - "@trustvc/w3c-vc": "^2.0.0", + "@trustvc/w3c": "^2.2.0", + "@trustvc/w3c-context": "^2.2.0", + "@trustvc/w3c-credential-status": "^2.2.0", + "@trustvc/w3c-issuer": "^2.2.0", + "@trustvc/w3c-vc": "^2.2.0", "ethers": "^5.8.0", "ethersV6": "npm:ethers@^6.14.4", "js-sha3": "^0.9.3", @@ -7516,24 +7500,24 @@ } }, "node_modules/@trustvc/w3c": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@trustvc/w3c/-/w3c-2.0.2.tgz", - "integrity": "sha512-xWgyhdVjw1mR0GdLjzeoH1s4jseaEJpmJ2ndM0Xcn0zCzqeUql2C1ijnb0Sb/76R7XLUuc0hgAo1CzLp27lQKw==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@trustvc/w3c/-/w3c-2.2.0.tgz", + "integrity": "sha512-2WhAoYZW7JLt9H1OrT1qcwTL0g6LymMVg9uiZ3xxlaRgYzOmEqClN3Pq6apo1kRZTzJMHcKWECKADkHGa0Jgqw==", "license": "Apache-2.0", "dependencies": { - "@trustvc/w3c-context": "^2.0.2", - "@trustvc/w3c-credential-status": "^2.0.2", - "@trustvc/w3c-issuer": "^2.0.2", - "@trustvc/w3c-vc": "^2.0.2" + "@trustvc/w3c-context": "^2.2.0", + "@trustvc/w3c-credential-status": "^2.2.0", + "@trustvc/w3c-issuer": "^2.2.0", + "@trustvc/w3c-vc": "^2.2.0" }, "engines": { "node": ">=18.x" } }, "node_modules/@trustvc/w3c-context": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@trustvc/w3c-context/-/w3c-context-2.0.2.tgz", - "integrity": "sha512-2DM73n1z2FXML9/suGHea6BcJqs7GKiJsvpozRf6lE9d3ZyFRmCd6H84f7Z7zGvacuLXMRnPX2A9DKE0ETs8HA==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@trustvc/w3c-context/-/w3c-context-2.2.0.tgz", + "integrity": "sha512-p9mtIWZ1v1hhqiGLJ5Fu+2PK9ClIRsdo04vgCVC8BxhIjwUU7ZHb95sYF1E8Ay9pP2BRyFujBdoaYXHH8n5v4A==", "license": "Apache-2.0", "dependencies": { "did-resolver": "^4.1.0", @@ -7550,13 +7534,13 @@ "license": "Apache-2.0" }, "node_modules/@trustvc/w3c-credential-status": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@trustvc/w3c-credential-status/-/w3c-credential-status-2.0.2.tgz", - "integrity": "sha512-8f5sHoDAT8YqLlHm82t/wh1HrZdmR3PgRGfDcgbKWrJtA+X2769kk6qVXCNP6tq1Ghyqe8v/HLortrXp9JSdGw==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@trustvc/w3c-credential-status/-/w3c-credential-status-2.2.0.tgz", + "integrity": "sha512-lfgnvAUSwdi5hWnuf+wqTkpPTYxmZyZ8kdzVPRQeKWqb0ysdWN+n32ROoNpQAFSPqYlSL0pLWuI/vg35WuhnEA==", "license": "Apache-2.0", "dependencies": { - "@trustvc/w3c-context": "^2.0.2", - "@trustvc/w3c-issuer": "^2.0.2", + "@trustvc/w3c-context": "^2.2.0", + "@trustvc/w3c-issuer": "^2.2.0", "base64url-universal": "^2.0.0", "pako": "^2.1.0" }, @@ -7565,9 +7549,9 @@ } }, "node_modules/@trustvc/w3c-issuer": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@trustvc/w3c-issuer/-/w3c-issuer-2.0.2.tgz", - "integrity": "sha512-NDtEcGV7ryuWHbaX3hwlz2cN/hhDWHzA+D2AF56I7teNfev+X62pro+HrXYAa3EclPET7BI+fYmLgh61/DAl7w==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@trustvc/w3c-issuer/-/w3c-issuer-2.2.0.tgz", + "integrity": "sha512-o5XWh52c3KeNqrrIpSvjPt+3zwZ/wwh2hlGOst6PZXVzS9nMab+jUwhs52d+HBhe2r8BL4Z81sdMGA8YAEnk6Q==", "license": "Apache-2.0", "dependencies": { "@digitalbazaar/bls12-381-multikey": "^2.1.0", @@ -7588,10 +7572,20 @@ "integrity": "sha512-S6fWHvCXkZg2IhS4RcVHxwuyVejPR7c+a4Go0xbQ9ps5kILa8viiYQgrM4gfTyeTjJ0ekgJH9gk/BawTpmkbZA==", "license": "Apache-2.0" }, + "node_modules/@trustvc/w3c-issuer/node_modules/web-did-resolver": { + "version": "2.0.32", + "resolved": "https://registry.npmjs.org/web-did-resolver/-/web-did-resolver-2.0.32.tgz", + "integrity": "sha512-L91/ApTmDjgzS0UDstTKn3kN/1hlQBnVcUN8K29e3xhVBpPktHYC6uvVAQ8ohbIg9D6wrrbaBQvfRArDxgJG2g==", + "license": "Apache-2.0", + "dependencies": { + "cross-fetch": "^4.1.0", + "did-resolver": "^4.1.0" + } + }, "node_modules/@trustvc/w3c-vc": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@trustvc/w3c-vc/-/w3c-vc-2.0.2.tgz", - "integrity": "sha512-3A488DgukqrKXDSNdtZE02tOfj6V9C6uRJAEKEnMiaUevxNzFO9TFpqXkeOdxNhg9yHEH7m68b6SqfwU/tbVXQ==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@trustvc/w3c-vc/-/w3c-vc-2.2.0.tgz", + "integrity": "sha512-QAfoEgNndi2X+V0Nz9nBGiUk4Ko0XUFVLn0BY6qJK8GHJndMMCEcZ14PlaHyKG8nIossQeKZbsBwnavm2jRFdg==", "license": "Apache-2.0", "dependencies": { "@digitalbazaar/bbs-2023-cryptosuite": "^2.0.1", @@ -7600,8 +7594,8 @@ "@digitalbazaar/ecdsa-multikey": "^1.8.0", "@digitalbazaar/ecdsa-sd-2023-cryptosuite": "^3.4.1", "@mattrglobal/jsonld-signatures-bbs": "^1.2.0", - "@trustvc/w3c-credential-status": "^2.0.2", - "@trustvc/w3c-issuer": "^2.0.2", + "@trustvc/w3c-credential-status": "^2.2.0", + "@trustvc/w3c-issuer": "^2.2.0", "base64url-universal": "^2.0.0", "cbor": "^9.0.2", "did-resolver": "^4.1.0", @@ -7627,6 +7621,7 @@ "version": "10.0.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz", "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==", + "deprecated": "uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028).", "funding": [ "https://github.com/sponsors/broofa", "https://github.com/sponsors/ctavan" @@ -9596,6 +9591,18 @@ "@noble/hashes": "^1.2.0" } }, + "node_modules/bip39/node_modules/@noble/hashes": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz", + "integrity": "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==", + "license": "MIT", + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/bluebird": { "version": "3.4.7", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz", @@ -10211,9 +10218,9 @@ } }, "node_modules/cborg": { - "version": "4.5.8", - "resolved": "https://registry.npmjs.org/cborg/-/cborg-4.5.8.tgz", - "integrity": "sha512-6/viltD51JklRhq4L7jC3zgy6gryuG5xfZ3kzpE+PravtyeQLeQmCYLREhQH7pWENg5pY4Yu/XCd6a7dKScVlw==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/cborg/-/cborg-5.1.1.tgz", + "integrity": "sha512-BDbSRIp6XrQXkTc7g+DN0RB9RrDPTUfals2ecWUlt3juPLjbAvy/V72mJcXY0Ehu0Dq/3WpNCOCT68HUTbW+lw==", "license": "Apache-2.0", "bin": { "cborg": "lib/bin.js" @@ -15952,9 +15959,9 @@ } }, "node_modules/jsonld-signatures/node_modules/undici": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/undici/-/undici-6.23.0.tgz", - "integrity": "sha512-VfQPToRA5FZs/qJxLIinmU59u0r7LXqoJkCzinq3ckNJp3vKEh7jTWN589YQ5+aoAC/TGRLyJLCPKcLQbM8r9g==", + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-6.26.0.tgz", + "integrity": "sha512-4yqz8a3n5HmGTlsbADNtr/dJlhkh/55Rq798G6ibiULcXbDtaLpTl1pvdqcbFfeoj3iSi52lePFM7h9H21cw/A==", "license": "MIT", "engines": { "node": ">=18.17" @@ -16999,9 +17006,9 @@ } }, "node_modules/neon-cli/node_modules/semver": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", - "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.4.tgz", + "integrity": "sha512-rUCObTnP32Q08R2uuIrt7r9PlEonuTmtuXYcW6s5kjdlj3xbnwe+21yXptAUYcMAABLkYYTtnmzb3w3EDZfueA==", "license": "ISC", "optional": true, "bin": { @@ -18607,7 +18614,7 @@ "version": "3.4.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "deprecated": "uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028).", "license": "MIT", "bin": { "uuid": "bin/uuid" @@ -21130,621 +21137,88 @@ "webidl-conversions": "^4.0.2" } }, - "node_modules/tsx": { - "version": "4.22.3", - "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.22.3.tgz", - "integrity": "sha512-mdoNxBC/cSQObGGVQ5Bpn5i+yv7j68gk3Nfm3wFjcJg3Z0Mix9jzAFfP12prmm5eVGmDKtp0yyArrs0Q+8gZHg==", + "node_modules/tty-browserify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz", + "integrity": "sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==", "dev": true, - "license": "MIT", - "optional": true, - "peer": true, + "license": "MIT" + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "license": "Apache-2.0", "dependencies": { - "esbuild": "~0.28.0" - }, - "bin": { - "tsx": "dist/cli.mjs" + "safe-buffer": "^5.0.1" }, "engines": { - "node": ">=18.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.3" + "node": "*" } }, - "node_modules/tsx/node_modules/@esbuild/aix-ppc64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.28.0.tgz", - "integrity": "sha512-lhRUCeuOyJQURhTxl4WkpFTjIsbDayJHih5kZC1giwE+MhIzAb7mEsQMqMf18rHLsrb5qI1tafG20mLxEWcWlA==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "aix" - ], - "peer": true, - "engines": { - "node": ">=18" - } + "node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", + "license": "Unlicense" }, - "node_modules/tsx/node_modules/@esbuild/android-arm": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.28.0.tgz", - "integrity": "sha512-wqh0ByljabXLKHeWXYLqoJ5jKC4XBaw6Hk08OfMrCRd2nP2ZQ5eleDZC41XHyCNgktBGYMbqnrJKq/K/lzPMSQ==", - "cpu": [ - "arm" - ], + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "peer": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, "engines": { - "node": ">=18" + "node": ">= 0.8.0" } }, - "node_modules/tsx/node_modules/@esbuild/android-arm64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.28.0.tgz", - "integrity": "sha512-+WzIXQOSaGs33tLEgYPYe/yQHf0WTU0X42Jca3y8NWMbUVhp7rUnw+vAsRC/QiDrdD31IszMrZy+qwPOPjd+rw==", - "cpu": [ - "arm64" - ], - "dev": true, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", "license": "MIT", - "optional": true, - "os": [ - "android" - ], "peer": true, "engines": { - "node": ">=18" + "node": ">=4" } }, - "node_modules/tsx/node_modules/@esbuild/android-x64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.28.0.tgz", - "integrity": "sha512-+VJggoaKhk2VNNqVL7f6S189UzShHC/mR9EE8rDdSkdpN0KflSwWY/gWjDrNxxisg8Fp1ZCD9jLMo4m0OUfeUA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "peer": true, + "node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "license": "(MIT OR CC0-1.0)", "engines": { - "node": ">=18" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/tsx/node_modules/@esbuild/darwin-arm64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.28.0.tgz", - "integrity": "sha512-0T+A9WZm+bZ84nZBtk1ckYsOvyA3x7e2Acj1KdVfV4/2tdG4fzUp91YHx+GArWLtwqp77pBXVCPn2We7Letr0Q==", - "cpu": [ - "arm64" - ], - "dev": true, + "node_modules/typechain": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/typechain/-/typechain-8.3.2.tgz", + "integrity": "sha512-x/sQYr5w9K7yv3es7jo4KTX05CLxOf7TRWwoHlrjRh8H82G64g+k7VuWPJlgMo6qrjfCulOdfBjiaDtmhFYD/Q==", "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], "peer": true, - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/darwin-x64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.28.0.tgz", - "integrity": "sha512-fyzLm/DLDl/84OCfp2f/XQ4flmORsjU7VKt8HLjvIXChJoFFOIL6pLJPH4Yhd1n1gGFF9mPwtlN5Wf82DZs+LQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "peer": true, - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/freebsd-arm64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.28.0.tgz", - "integrity": "sha512-l9GeW5UZBT9k9brBYI+0WDffcRxgHQD8ShN2Ur4xWq/NFzUKm3k5lsH4PdaRgb2w7mI9u61nr2gI2mLI27Nh3Q==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "peer": true, - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/freebsd-x64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.28.0.tgz", - "integrity": "sha512-BXoQai/A0wPO6Es3yFJ7APCiKGc1tdAEOgeTNy3SsB491S3aHn4S4r3e976eUnPdU+NbdtmBuLncYir2tMU9Nw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "peer": true, - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/linux-arm": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.28.0.tgz", - "integrity": "sha512-CjaaREJagqJp7iTaNQjjidaNbCKYcd4IDkzbwwxtSvjI7NZm79qiHc8HqciMddQ6CKvJT6aBd8lO9kN/ZudLlw==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/linux-arm64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.28.0.tgz", - "integrity": "sha512-RVyzfb3FWsGA55n6WY0MEIEPURL1FcbhFE6BffZEMEekfCzCIMtB5yyDcFnVbTnwk+CLAgTujmV/Lgvih56W+A==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/linux-ia32": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.28.0.tgz", - "integrity": "sha512-KBnSTt1kxl9x70q+ydterVdl+Cn0H18ngRMRCEQfrbqdUuntQQ0LoMZv47uB97NljZFzY6HcfqEZ2SAyIUTQBQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/linux-loong64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.28.0.tgz", - "integrity": "sha512-zpSlUce1mnxzgBADvxKXX5sl8aYQHo2ezvMNI8I0lbblJtp8V4odlm3Yzlj7gPyt3T8ReksE6bK+pT3WD+aJRg==", - "cpu": [ - "loong64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/linux-mips64el": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.28.0.tgz", - "integrity": "sha512-2jIfP6mmjkdmeTlsX/9vmdmhBmKADrWqN7zcdtHIeNSCH1SqIoNI63cYsjQR8J+wGa4Y5izRcSHSm8K3QWmk3w==", - "cpu": [ - "mips64el" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/linux-ppc64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.28.0.tgz", - "integrity": "sha512-bc0FE9wWeC0WBm49IQMPSPILRocGTQt3j5KPCA8os6VprfuJ7KD+5PzESSrJ6GmPIPJK965ZJHTUlSA6GNYEhg==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/linux-riscv64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.28.0.tgz", - "integrity": "sha512-SQPZOwoTTT/HXFXQJG/vBX8sOFagGqvZyXcgLA3NhIqcBv1BJU1d46c0rGcrij2B56Z2rNiSLaZOYW5cUk7yLQ==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/linux-s390x": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.28.0.tgz", - "integrity": "sha512-SCfR0HN8CEEjnYnySJTd2cw0k9OHB/YFzt5zgJEwa+wL/T/raGWYMBqwDNAC6dqFKmJYZoQBRfHjgwLHGSrn3Q==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/linux-x64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.28.0.tgz", - "integrity": "sha512-us0dSb9iFxIi8srnpl931Nvs65it/Jd2a2K3qs7fz2WfGPHqzfzZTfec7oxZJRNPXPnNYZtanmRc4AL/JwVzHQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/netbsd-arm64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.28.0.tgz", - "integrity": "sha512-CR/RYotgtCKwtftMwJlUU7xCVNg3lMYZ0RzTmAHSfLCXw3NtZtNpswLEj/Kkf6kEL3Gw+BpOekRX0BYCtklhUw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "peer": true, - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/netbsd-x64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.28.0.tgz", - "integrity": "sha512-nU1yhmYutL+fQ71Kxnhg8uEOdC0pwEW9entHykTgEbna2pw2dkbFSMeqjjyHZoCmt8SBkOSvV+yNmm94aUrrqw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "peer": true, - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/openbsd-arm64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.28.0.tgz", - "integrity": "sha512-cXb5vApOsRsxsEl4mcZ1XY3D4DzcoMxR/nnc4IyqYs0rTI8ZKmW6kyyg+11Z8yvgMfAEldKzP7AdP64HnSC/6g==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "peer": true, - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/openbsd-x64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.28.0.tgz", - "integrity": "sha512-8wZM2qqtv9UP3mzy7HiGYNH/zjTA355mpeuA+859TyR+e+Tc08IHYpLJuMsfpDJwoLo1ikIJI8jC3GFjnRClzA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "peer": true, - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/openharmony-arm64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.28.0.tgz", - "integrity": "sha512-FLGfyizszcef5C3YtoyQDACyg95+dndv79i2EekILBofh5wpCa1KuBqOWKrEHZg3zrL3t5ouE5jgr94vA+Wb2w==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openharmony" - ], - "peer": true, - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/sunos-x64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.28.0.tgz", - "integrity": "sha512-1ZgjUoEdHZZl/YlV76TSCz9Hqj9h9YmMGAgAPYd+q4SicWNX3G5GCyx9uhQWSLcbvPW8Ni7lj4gDa1T40akdlw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "sunos" - ], - "peer": true, - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/win32-arm64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.28.0.tgz", - "integrity": "sha512-Q9StnDmQ/enxnpxCCLSg0oo4+34B9TdXpuyPeTedN/6+iXBJ4J+zwfQI28u/Jl40nOYAxGoNi7mFP40RUtkmUA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "peer": true, - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/win32-ia32": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.28.0.tgz", - "integrity": "sha512-zF3ag/gfiCe6U2iczcRzSYJKH1DCI+ByzSENHlM2FcDbEeo5Zd2C86Aq0tKUYAJJ1obRP84ymxIAksZUcdztHA==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "peer": true, - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/win32-x64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.28.0.tgz", - "integrity": "sha512-pEl1bO9mfAmIC+tW5btTmrKaujg3zGtUmWNdCw/xs70FBjwAL3o9OEKNHvNmnyylD6ubxUERiEhdsL0xBQ9efw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "peer": true, - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/esbuild": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.28.0.tgz", - "integrity": "sha512-sNR9MHpXSUV/XB4zmsFKN+QgVG82Cc7+/aaxJ8Adi8hyOac+EXptIp45QBPaVyX3N70664wRbTcLTOemCAnyqw==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "peer": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.28.0", - "@esbuild/android-arm": "0.28.0", - "@esbuild/android-arm64": "0.28.0", - "@esbuild/android-x64": "0.28.0", - "@esbuild/darwin-arm64": "0.28.0", - "@esbuild/darwin-x64": "0.28.0", - "@esbuild/freebsd-arm64": "0.28.0", - "@esbuild/freebsd-x64": "0.28.0", - "@esbuild/linux-arm": "0.28.0", - "@esbuild/linux-arm64": "0.28.0", - "@esbuild/linux-ia32": "0.28.0", - "@esbuild/linux-loong64": "0.28.0", - "@esbuild/linux-mips64el": "0.28.0", - "@esbuild/linux-ppc64": "0.28.0", - "@esbuild/linux-riscv64": "0.28.0", - "@esbuild/linux-s390x": "0.28.0", - "@esbuild/linux-x64": "0.28.0", - "@esbuild/netbsd-arm64": "0.28.0", - "@esbuild/netbsd-x64": "0.28.0", - "@esbuild/openbsd-arm64": "0.28.0", - "@esbuild/openbsd-x64": "0.28.0", - "@esbuild/openharmony-arm64": "0.28.0", - "@esbuild/sunos-x64": "0.28.0", - "@esbuild/win32-arm64": "0.28.0", - "@esbuild/win32-ia32": "0.28.0", - "@esbuild/win32-x64": "0.28.0" - } - }, - "node_modules/tty-browserify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz", - "integrity": "sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==", - "dev": true, - "license": "MIT" - }, - "node_modules/tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", - "license": "Apache-2.0", - "dependencies": { - "safe-buffer": "^5.0.1" - }, - "engines": { - "node": "*" - } - }, - "node_modules/tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", - "license": "Unlicense" - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/typechain": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/typechain/-/typechain-8.3.2.tgz", - "integrity": "sha512-x/sQYr5w9K7yv3es7jo4KTX05CLxOf7TRWwoHlrjRh8H82G64g+k7VuWPJlgMo6qrjfCulOdfBjiaDtmhFYD/Q==", - "license": "MIT", - "peer": true, - "dependencies": { - "@types/prettier": "^2.1.1", - "debug": "^4.3.1", - "fs-extra": "^7.0.0", - "glob": "7.1.7", - "js-sha3": "^0.8.0", - "lodash": "^4.17.15", - "mkdirp": "^1.0.4", - "prettier": "^2.3.1", - "ts-command-line-args": "^2.2.0", - "ts-essentials": "^7.0.1" - }, - "bin": { - "typechain": "dist/cli/cli.js" - }, - "peerDependencies": { - "typescript": ">=4.3.0" + "dependencies": { + "@types/prettier": "^2.1.1", + "debug": "^4.3.1", + "fs-extra": "^7.0.0", + "glob": "7.1.7", + "js-sha3": "^0.8.0", + "lodash": "^4.17.15", + "mkdirp": "^1.0.4", + "prettier": "^2.3.1", + "ts-command-line-args": "^2.2.0", + "ts-essentials": "^7.0.1" + }, + "bin": { + "typechain": "dist/cli/cli.js" + }, + "peerDependencies": { + "typescript": ">=4.3.0" } }, "node_modules/typechain/node_modules/glob": { @@ -23593,20 +23067,23 @@ } }, "node_modules/web-did-resolver": { - "version": "2.0.32", - "resolved": "https://registry.npmjs.org/web-did-resolver/-/web-did-resolver-2.0.32.tgz", - "integrity": "sha512-L91/ApTmDjgzS0UDstTKn3kN/1hlQBnVcUN8K29e3xhVBpPktHYC6uvVAQ8ohbIg9D6wrrbaBQvfRArDxgJG2g==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/web-did-resolver/-/web-did-resolver-2.0.4.tgz", + "integrity": "sha512-PORpoA4P0I3m0cLJX2IIDZ0gMKgC1PjS8DuDeg9/JCdIlFiXrZCyTG1hxvw4a4vhDKr0sZKSZL1pQDXTgqLm8w==", "license": "Apache-2.0", "dependencies": { - "cross-fetch": "^4.1.0", - "did-resolver": "^4.1.0" + "cross-fetch": "^3.1.2", + "did-resolver": "^3.1.0" } }, - "node_modules/web-did-resolver/node_modules/did-resolver": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/did-resolver/-/did-resolver-4.1.0.tgz", - "integrity": "sha512-S6fWHvCXkZg2IhS4RcVHxwuyVejPR7c+a4Go0xbQ9ps5kILa8viiYQgrM4gfTyeTjJ0ekgJH9gk/BawTpmkbZA==", - "license": "Apache-2.0" + "node_modules/web-did-resolver/node_modules/cross-fetch": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.2.0.tgz", + "integrity": "sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q==", + "license": "MIT", + "dependencies": { + "node-fetch": "^2.7.0" + } }, "node_modules/web-streams-polyfill": { "version": "3.3.3", @@ -24076,9 +23553,9 @@ "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" }, "node_modules/yaml": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.3.tgz", - "integrity": "sha512-AvbaCLOO2Otw/lW5bmh9d/WEdcDFdQp2Z2ZUH3pX9U2ihyUY0nvLv7J6TrWowklRGPYbB/IuIMfYgxaCPg5Bpg==", + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.9.0.tgz", + "integrity": "sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA==", "dev": true, "license": "ISC", "bin": { diff --git a/package.json b/package.json index a413919..dd35c6f 100644 --- a/package.json +++ b/package.json @@ -32,7 +32,7 @@ "@sanity/client": "^7.20.0", "@sanity/image-url": "^2.1.1", "@trustvc/decentralized-renderer-react-components": "^1.0.3", - "@trustvc/trustvc": "^2.12.4", + "@trustvc/trustvc": "^2.14.1", "@types/lodash": "^4.17.24", "clsx": "^2.1.1", "date-fns": "^4.1.0", diff --git a/src/components/home/VerifySection/NetworkModal.test.tsx b/src/components/home/VerifySection/NetworkModal.test.tsx index 881bdfa..313d459 100644 --- a/src/components/home/VerifySection/NetworkModal.test.tsx +++ b/src/components/home/VerifySection/NetworkModal.test.tsx @@ -111,7 +111,7 @@ describe('NetworkModal', () => { expect(screen.getAllByText('Sepolia').length).toBeGreaterThan(0) expect(screen.getByText('Polygon Amoy')).toBeInTheDocument() expect(screen.getByText('Apothem')).toBeInTheDocument() - expect(screen.queryByText('Polygon')).not.toBeInTheDocument() + expect(screen.queryByText('Polygon (POL)')).not.toBeInTheDocument() expect(screen.queryByText('XDC Network')).not.toBeInTheDocument() }) @@ -146,7 +146,7 @@ describe('NetworkModal', () => { render() fireEvent.click(getDropdownToggle()) expect(screen.getAllByText('Ethereum').length).toBeGreaterThan(0) - expect(screen.getByText('Polygon')).toBeInTheDocument() + expect(screen.getByText('Polygon (POL)')).toBeInTheDocument() expect(screen.getByText('XDC Network')).toBeInTheDocument() expect(screen.queryByText('Sepolia')).not.toBeInTheDocument() expect(screen.queryByText('Polygon Amoy')).not.toBeInTheDocument() @@ -180,7 +180,7 @@ describe('NetworkModal', () => { /> ) fireEvent.click(getDropdownToggle()) - fireEvent.click(screen.getByText('Polygon')) + fireEvent.click(screen.getByText('Polygon (POL)')) fireEvent.click(screen.getByRole('button', { name: /proceed/i })) expect(onConfirm).toHaveBeenCalledWith('137') }) diff --git a/src/components/home/VerifySection/NetworkModal.tsx b/src/components/home/VerifySection/NetworkModal.tsx index e03cc36..e700659 100644 --- a/src/components/home/VerifySection/NetworkModal.tsx +++ b/src/components/home/VerifySection/NetworkModal.tsx @@ -17,7 +17,7 @@ const NETWORK_OPTIONS: NetworkOption[] = [ }, { chainId: '137', - label: 'Polygon', + label: 'Polygon (POL)', group: 'Mainnet', logo: '/images/networks/polygon.gif', }, diff --git a/src/components/home/VerifySection/VerifySection.tsx b/src/components/home/VerifySection/VerifySection.tsx index 13f08ba..8a9600a 100644 --- a/src/components/home/VerifySection/VerifySection.tsx +++ b/src/components/home/VerifySection/VerifySection.tsx @@ -19,7 +19,7 @@ interface VerifySectionProps { const CHAIN_NAMES: Record = { '1': 'Ethereum', - '137': 'Polygon', + '137': 'Polygon (POL)', '50': 'XDC Network', '101010': 'Stability (Beta)', '1338': 'Astron', diff --git a/src/configs/chain-config.ts b/src/configs/chain-config.ts index c9fe533..0fb3807 100644 --- a/src/configs/chain-config.ts +++ b/src/configs/chain-config.ts @@ -8,7 +8,7 @@ export { NETWORK_NAME, IS_TESTNET, INFURA_API_KEY } from './env-config' */ export const MAIN_NETWORKS = [ CHAIN_ID.mainnet, // - CHAIN_ID.matic, + CHAIN_ID.pol, CHAIN_ID.xdc, CHAIN_ID.stability, CHAIN_ID.astron, diff --git a/src/utils/chain-info.ts b/src/utils/chain-info.ts index 5a0589e..45e315a 100644 --- a/src/utils/chain-info.ts +++ b/src/utils/chain-info.ts @@ -16,7 +16,7 @@ export type Network = export const InitialAddress = '0x0000000000000000000000000000000000000000' export const BurnAddress = '0x000000000000000000000000000000000000dEaD' -export type AvailableBlockChains = 'ETH' | 'MATIC' | 'XDC' | 'FREE' | 'ASTRON' +export type AvailableBlockChains = 'ETH' | 'POL' | 'XDC' | 'FREE' | 'ASTRON' type IChainInfo = Record @@ -24,8 +24,8 @@ export const CHAIN: Record = { [CHAIN_ID.local]: 'ETH', [CHAIN_ID.mainnet]: 'ETH', [CHAIN_ID.sepolia]: 'ETH', - [CHAIN_ID.matic]: 'MATIC', - [CHAIN_ID.amoy]: 'MATIC', + [CHAIN_ID.pol]: 'POL', + [CHAIN_ID.amoy]: 'POL', [CHAIN_ID.xdc]: 'XDC', [CHAIN_ID.xdcapothem]: 'XDC', [CHAIN_ID.stability]: 'FREE', @@ -56,7 +56,7 @@ export const ChainInfo: IChainInfo = { export const supportedMainnet = [ ChainInfo[CHAIN_ID.mainnet].name, - ChainInfo[CHAIN_ID.matic].name, + ChainInfo[CHAIN_ID.pol].name, ChainInfo[CHAIN_ID.xdc].name, ChainInfo[CHAIN_ID.stability].name, ChainInfo[CHAIN_ID.astron].name,