diff --git a/package.json b/package.json index 83ef23a..6bd7d70 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "starknetid.js", - "version": "3.0.4", + "version": "3.0.5", "description": "JavaScript library for Starknet ID", "private": false, "license": "MIT", diff --git a/packages/core/__test__/profile_mainnet.test.ts b/packages/core/__test__/profile_mainnet.test.ts new file mode 100644 index 0000000..fc966f5 --- /dev/null +++ b/packages/core/__test__/profile_mainnet.test.ts @@ -0,0 +1,78 @@ +import { constants, Provider } from "starknet"; +import { StarknetIdNavigator } from "../src"; + +describe("test starknetid.js sdk on mainnet", () => { + jest.setTimeout(90000000); + const provider = new Provider({ + rpc: { + nodeUrl: "https://rpc.starknet.id", + }, + }); + + describe("getProfileData for a profile with a blobert pfp", () => { + test("getProfileData should return an undefined profile picture url", async () => { + const starknetIdNavigator = new StarknetIdNavigator( + provider, + constants.StarknetChainId.SN_MAIN, + ); + expect(starknetIdNavigator).toBeInstanceOf(StarknetIdNavigator); + const profile = await starknetIdNavigator.getProfileData( + "0x06fb5e4e650bb6ceb80923c008e81122129092efc7e6d6f3f5c9ac4eead25355", + false, + ); + const expectedProfile = { + name: "rmz.stark", + twitter: "302521256", + github: undefined, + discord: undefined, + proofOfPersonhood: false, + profilePicture: + "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaW5ZTWluIG1lZXQiIHN0eWxlPSJpbWFnZS1yZW5kZXJpbmc6IHBpeGVsYXRlZCIgdmlld0JveD0iMCAwIDM1MCAzNTAiPjxpbWFnZSBocmVmPSJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQURBQUFBQXdCQU1BQUFDbExPUzBBQUFBTFZCTVZFWFU0cmpRbWZmcVl2K0p4L3Vqbi83eGUvVDdqZUNiL01DNDg3SDZwZEx4eE1MUnlNeU02ZUd0LzZ1cGEra0gzelJpQUFBREtFbEVRVlE0eTAzUnNZdlRZQmdHOE5kRjJtYng2N1dpZHZMejdDaG9BZzZHdzE3aVpCRmFta0tkN0VFQ3VVbFJ5SEFWTW41VWhDQTBrTGpFNWJqRzVUcmMwU05qQ3pjWTV5NW1PZThQOGZsU1JETzBoQjk5bi9kNVM2eS8yL1dPc2k4Y3p4c0tEM1pWWFZVNzkxSmFzRWVHZDZTYzhmdWNqK2o0Z0t1cWhJUytzL3IxMDdjQVZ1ZHRxanJjK0FzTDF0RGZLdWVjc1hvN0lJYy9BSmdzcFRSanJIdTBCUjdJRUlBbVFWbXduUitVV1Qxem54L1NUWVJzSWFhTU5aNlZZQ0s5aGhCQUp5YVhGTWFlblNxMmhIWkNZZis2VEtkaFFJeTlQRldhRWg0R05MZDNqUklleG5TRE5US2FXUUNFVk8xSEFQTXVYYmtTWHBaUTV5NWgxbStFM0tZbm80Ull3NlF6cTJIc2M3d2N5NFcxRjdTSFZvQlRDVTg0WHFvMk4wcmdNYUg4OHpOcllHZ2NpZHU5VEZJNVFnQTNyWUdwY2hreVIzd0pJd0I3WHBXd3o5MEVoK3licWthcnEzYWdsTkJycUU4NGFwRnpzR3VZdE5wSElBRFZHL3BqM2tiSXVjMU5DUWlVNEZnREhlbUhDU2xPLzlxa0hITUJ0d0E5ZlZYbmg0bWcwTFlBZTNJdHdMbmQwM05ac1VJWHRtVlJydkZoY29PMWxITm5yT2RyYnNVVlA1c0JKaHJxQXVqQ0dYZnpWZE9LeVZlYUFBOGc5L1V2UXFlYjV5OHNOeEZLc3c5WVhXR3RMZXprK1dNTElmNk04eEpjd0xJV2hZM2NXMXZEb09JZlMwQVJ1ZGFTb25DUWV4TVpJbW9IZ1Bjb0VraVlSNWJ1ZVdmV0lXWjlBMHkyY01ldlJwYmhlZStzMTBsRktIWEFIb0JLc0hjdXZhTW0va1ZCaXhKR1dLc2xhbk43OE5UekdBNHNmQVdnOFZGRWk1YVlwck1lUWhZc3Bvb1FKUXlqNUVack9VM0RYdGZ6UHJCNy80UFNXdnExY0l6MENXTUkyVUk3U2lsYmltbGtHNWZlcE1PQ0xhei93UXhyYmRaeVZnbFhiVGM5eVRMaHo4UEcwNCtiOXgyV2xMQUN4Q2VmTWlFQStzZGlvckd2QkpCWGRBQ1lsVVlTTnV2TzNkTUtBRmQwY0o4U3hzYlBvcGlZK0FrQVY1VHdDVEFmNzF3V3hVYnIzRTBBdUluanBJUlowM1RNOUtJbzNtdnNIc0JEUXljbThRODh0Y1BvWTRHUW9ST1J3RjVweUdUSUJvdlJaM3p0dFIwM3FBaGZwTWNNSVpCVmgwU0J4Ujg2Yml4aE91K2hJdVNYQm9DL0dMclJpUkM0dkMyYjRKa0E4UGtLSVFGQXBIYlB3Q3c4ZndBeXdwdU9rZ1k0TkFBQUFBQkpSVTVFcmtKZ2dnPT0iIHg9IjAiIHk9IjAiIHdpZHRoPSIzNTBweCIgaGVpZ2h0PSIzNTBweCIgLz48aW1hZ2UgaHJlZj0iZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFEQUFBQUF3QkFNQUFBQ2xMT1MwQUFBQUlWQk1WRVVBQUFDbndWUkNlREVPRkI3cjdld2dUeTNaWWpuR3pjN28xYksxZTFiRmxuRWUyc2t2QUFBQUFYUlNUbE1BUU9iWVpnQUFBSlZKUkVGVU9NdnRrTDBOd21BTVJDMnlBQmRMRVNXZnM0RDV5UVpNRUlrQkVDdXdBQjB0SlNPd0pSYXR6eVVWZVhMMzVEdkw4aHRjT0FjVlNvZEM3TlJMVVVaNUlRcXpiOERJRmd4QVQxYW1oa0I1VXVBcGFjWnNNVTRxYnNlWU1WV0VPTVZvcXJEaEFtQzRsaUpWR1BCK1BhRk1iQjczTE9MV0wrU3FCdnFUYmpxSDZ0a1hEY0ZhbUFrbGxKVkp3YllXQzMvQUIyaklGWkZOMGpZcEFBQUFBRWxGVGtTdVFtQ0MiIHg9IjAiIHk9IjAiIHdpZHRoPSIzNTBweCIgaGVpZ2h0PSIzNTBweCIgLz48aW1hZ2UgaHJlZj0iZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFEQUFBQUF3Q0FNQUFBQmczQW0xQUFBQU9WQk1WRVVBQUFBT0ZCNXVFaldVRHpkS0VEREpKakYrbFpkK1RUOGZMampyN2V6R3pjNjFlMVk0U1ZFVkhTdFViM25hdDVFMkhpYU9UeWxsTVN1azl5b1BBQUFBQVhSU1RsTUFRT2JZWmdBQUFReEpSRUZVU01mdGtzdXVnekFNUkJuamhCQkNMcjMvLzdHZHBFRkN6YVBkZGNOaFlXVFB3VUV3M2R6Yy9BUU1SbWoxMXE3QkVScTkxWGNNZUE1UkNSN1d0Z3lrdnEvWHN5Mlp0N2F5cGMxSGdaTTVVZVZwTkZlWHZORkwwNnIyQmJ6eVJxMC80MVptVWRJV0ZwZ0VHUExydW5xU2RncElXOWlRMExrZ3BRZ25mN1dEWmRtMmJZRTJoZXk4Q3ptL3E1Z1NWTW5GS0JiU0VKRHlMb2lZRjFwS0FKS3dWV2NpKys2Y0U2SW5vaUVDM2ZkTytTRGw2Q3JDcWpHVWFFY0lUaTRyaEJ0R2d0dnJEVzZuTURTRTRmTG1Rb0g1UHJERTUrOXNBaS9QRzB1aEQyS01Oak9IRUdaclk4UTBCRXFFcFBPWC8zUU1rSTBDTUgwR0Y2WnZ3UC9qQVpiak9MNFVFbWU1eVR3QlBxVUpDOGVyTjJnQUFBQUFTVVZPUks1Q1lJST0iIHg9IjAiIHk9IjAiIHdpZHRoPSIzNTBweCIgaGVpZ2h0PSIzNTBweCIgLz48aW1hZ2UgaHJlZj0iZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFEQUFBQUF3QkFNQUFBQ2xMT1MwQUFBQUpGQk1WRVVBQUFBT0ZCN3I3ZXpRMUl6dHdHMm53VlRrbno1Q2VERWdUeTF5blQvR2VTZU9UeW1Eci9aSEFBQUFBWFJTVGxNQVFPYllaZ0FBQUZOSlJFRlVPTXRqR0FXamdHUWdLSUF1d2lnSUpqZGlxcFVTQUVrc3hKUmdkQVFTWWdKWWpCY1NGQlJNeEdZdm81S0xtd0IyRnhrSFluZXFzSks1QUE2SkNPd1NrcUV6c0Vzd2xqZmlEbzlSUUJjQUFDR2JCMXUzSVNFR0FBQUFBRWxGVGtTdVFtQ0MiIHg9IjAiIHk9IjAiIHdpZHRoPSIzNTBweCIgaGVpZ2h0PSIzNTBweCIgLz48aW1hZ2UgaHJlZj0iZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFEQUFBQUF3QkFNQUFBQ2xMT1MwQUFBQUcxQk1WRVVBQUFEU1dDa09GQjZtVUNPNG0yeFlJd0RmYURqZzJKa21PeTYrK3JhN0FBQUFBWFJTVGxNQVFPYllaZ0FBQUhaSlJFRlVPTXRqR0FXMEFFeEtTdGdsbEkwRkZiRHJDSFpVd0tGRkJKY0VGWFVJRGtZSkpWd1NETGdrbUFWeHhJY3lEZ2xXTTBFQjdOR1I2SUxWRWxVemtRNUhJYXdhZ0JJZ0xaZ1NKUjN1V0NYU0JWMEVDMG1TU0JRRUFxd1NMdVV1Z3FUb0FQckRCZVlQVEMwS1dLTURDQmdHR0FBQThmd1d4NjB2SXpRQUFBQUFTVVZPUks1Q1lJST0iIHg9IjAiIHk9IjAiIHdpZHRoPSIzNTBweCIgaGVpZ2h0PSIzNTBweCIgLz48L3N2Zz4=", + }; + expect(profile).toStrictEqual(expectedProfile); + }); + + test("getProfileData with a starkurabu pfp", async () => { + const starknetIdNavigator = new StarknetIdNavigator( + provider, + constants.StarknetChainId.SN_MAIN, + ); + expect(starknetIdNavigator).toBeInstanceOf(StarknetIdNavigator); + const profile = await starknetIdNavigator.getProfileData( + "0x061b6c0a78f9edf13cea17b50719f3344533fadd470b8cb29c2b4318014f52d3", + false, + ); + const expectedProfile = { + name: "fricoben.stark", + twitter: "1255853529866145794", + github: "78437165", + discord: "662387807901188096", + proofOfPersonhood: true, + profilePicture: + "https://img.starkurabu.com/41538374869489910341448844649168906.png", + }; + expect(profile).toStrictEqual(expectedProfile); + }); + + test("getProfileData with a duck pfp", async () => { + const starknetIdNavigator = new StarknetIdNavigator( + provider, + constants.StarknetChainId.SN_MAIN, + ); + expect(starknetIdNavigator).toBeInstanceOf(StarknetIdNavigator); + const profile = await starknetIdNavigator.getProfileData( + "0x029b96adaefdb4299be95cdee599bff6bcca26c4e85a4d8ace79231f4618017f", + ); + const expectedProfile = { + name: "iris.stark", + twitter: undefined, + github: undefined, + discord: undefined, + proofOfPersonhood: false, + profilePicture: + "https://api.briq.construction/v1/preview/starknet-mainnet-dojo/0x6cff01dd5d1e2ec5e792d66bd6edae386bd022b4ffd993c76c08cd000000003.png", + }; + expect(profile).toStrictEqual(expectedProfile); + }); + }); +}); diff --git a/packages/core/package.json b/packages/core/package.json index fded078..adb169b 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "starknetid.js", - "version": "3.0.4", + "version": "3.0.5", "keywords": [ "starknet", "starknetid", diff --git a/packages/core/src/starknetIdNavigator/default.ts b/packages/core/src/starknetIdNavigator/default.ts index 626391e..9b84526 100644 --- a/packages/core/src/starknetIdNavigator/default.ts +++ b/packages/core/src/starknetIdNavigator/default.ts @@ -576,7 +576,11 @@ export class StarknetIdNavigator implements StarknetIdNavigatorInterface { // extract nft_image from profile data const profilePicture = profilePictureMetadata - ? await this.fetchImageUrl(profilePictureMetadata) + ? profilePictureMetadata.includes("base64") + ? JSON.parse( + atob(profilePictureMetadata.split(",")[1].slice(0, -1)), + ).image + : await this.fetchImageUrl(profilePictureMetadata) : useDefaultPfp ? `https://starknet.id/api/identicons/${data[1][0].toString()}` : undefined;