@paper-clip/pc 0.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/baked-config.json +18 -0
- package/dist/bin.js +18 -0
- package/dist/client.js +82 -0
- package/dist/config.js +99 -0
- package/dist/index.js +812 -0
- package/dist/privy.js +243 -0
- package/dist/settings.js +75 -0
- package/dist/storacha.js +97 -0
- package/dist/types.js +4 -0
- package/dist/ui.js +127 -0
- package/idl/paperclip_protocol.json +1060 -0
- package/package.json +43 -0
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"PAPERCLIP_NETWORK": "devnet",
|
|
3
|
+
"PAPERCLIP_RPC_URL": "",
|
|
4
|
+
"PAPERCLIP_RPC_FALLBACK_URL": "",
|
|
5
|
+
"PAPERCLIP_PROGRAM_ID": "",
|
|
6
|
+
"PAPERCLIP_WALLET": "",
|
|
7
|
+
"PAPERCLIP_WALLET_TYPE": "privy",
|
|
8
|
+
"STORACHA_GATEWAY_URL": "https://w3s.link/ipfs/",
|
|
9
|
+
"STORACHA_AGENT_KEY": "MgCaWsdLVAM14MjgQrTkzjvTOJWK7XoltnuYlp8sBsq0p8O0B93EN8yV3I1zrQG+dEGLAfwea4OheQDWakpwN7Pm3fGU=",
|
|
10
|
+
"W3UP_DATA_SPACE_DID": "did:key:z6MkoCzdNrDhBfQsaahy7QMUYmvsCrcE3DgNUuLppCp6JvtC",
|
|
11
|
+
"W3UP_DATA_SPACE_PROOF": "mAYIEALoQOqJlcm9vdHOB2CpYJQABcRIgj2aqK7XPCZXX3hCAvG05C2yXs93ahOpS7Yk6zZF2ocZndmVyc2lvbgG+BwFxEiDA3xdT2M4d9vqEYvg43urndkeBfoWXac1/pOwBgyVJr6hhc1hE7aEDQPZfxsP0mWHc+7LfKDD9g17qhN3Yj5SAt7wNpme/WObDxjJy+0c8A8xcqHyox04M/Iyy6HsnOeOpQ0IE+KtgpABhdmUwLjkuMWNhdHSJomNjYW5oYXNzZXJ0Lypkd2l0aHg4ZGlkOmtleTp6Nk1rb0N6ZE5yRGhCZlFzYWFoeTdRTVVZbXZzQ3JjRTNEZ05VdUxwcENwNkp2dEOiY2NhbmdzcGFjZS8qZHdpdGh4OGRpZDprZXk6ejZNa29DemROckRoQmZRc2FhaHk3UU1VWW12c0NyY0UzRGdOVXVMcHBDcDZKdnRDomNjYW5mYmxvYi8qZHdpdGh4OGRpZDprZXk6ejZNa29DemROckRoQmZRc2FhaHk3UU1VWW12c0NyY0UzRGdOVXVMcHBDcDZKdnRDomNjYW5naW5kZXgvKmR3aXRoeDhkaWQ6a2V5Ono2TWtvQ3pkTnJEaEJmUXNhYWh5N1FNVVltdnNDcmNFM0RnTlV1THBwQ3A2SnZ0Q6JjY2FuZ3N0b3JlLypkd2l0aHg4ZGlkOmtleTp6Nk1rb0N6ZE5yRGhCZlFzYWFoeTdRTVVZbXZzQ3JjRTNEZ05VdUxwcENwNkp2dEOiY2Nhbmh1cGxvYWQvKmR3aXRoeDhkaWQ6a2V5Ono2TWtvQ3pkTnJEaEJmUXNhYWh5N1FNVVltdnNDcmNFM0RnTlV1THBwQ3A2SnZ0Q6JjY2FuaGFjY2Vzcy8qZHdpdGh4OGRpZDprZXk6ejZNa29DemROckRoQmZRc2FhaHk3UU1VWW12c0NyY0UzRGdOVXVMcHBDcDZKdnRDomNjYW5qZmlsZWNvaW4vKmR3aXRoeDhkaWQ6a2V5Ono2TWtvQ3pkTnJEaEJmUXNhYWh5N1FNVVltdnNDcmNFM0RnTlV1THBwQ3A2SnZ0Q6JjY2FuZ3VzYWdlLypkd2l0aHg4ZGlkOmtleTp6Nk1rb0N6ZE5yRGhCZlFzYWFoeTdRTVVZbXZzQ3JjRTNEZ05VdUxwcENwNkp2dENjYXVkWCLtAdhaiZvLGJG/CyWkQnMgnNnzAJ3wgGQKOYcAOMl4fxtgY2V4cBprblVkY2ZjdIGhZXNwYWNlomRuYW1lbnBhcGVyY2xpcC1kYXRhZmFjY2Vzc6FkdHlwZWZwdWJsaWNjaXNzWCLtAYIRnlA8eekYTyHQ9mTgi1ZlJCd6gzULf6OHa74Y6GGlY3ByZoDjBwFxEiCVec+ee8Js5cKavJsOymA64TwaA8G8yGKUCYglLcriIqhhc1hE7aEDQLoWxj2U3/1HDbU9BGr6K+3Pui40RyXgutITVQ93EN26fzRE1jyDNN10XPGFJhMQx+4aKV2xUHK0ckqwNwgTNgZhdmUwLjkuMWNhdHSJomNjYW5oYXNzZXJ0Lypkd2l0aHg4ZGlkOmtleTp6Nk1rb0N6ZE5yRGhCZlFzYWFoeTdRTVVZbXZzQ3JjRTNEZ05VdUxwcENwNkp2dEOiY2NhbmdzcGFjZS8qZHdpdGh4OGRpZDprZXk6ejZNa29DemROckRoQmZRc2FhaHk3UU1VWW12c0NyY0UzRGdOVXVMcHBDcDZKdnRDomNjYW5mYmxvYi8qZHdpdGh4OGRpZDprZXk6ejZNa29DemROckRoQmZRc2FhaHk3UU1VWW12c0NyY0UzRGdOVXVMcHBDcDZKdnRDomNjYW5naW5kZXgvKmR3aXRoeDhkaWQ6a2V5Ono2TWtvQ3pkTnJEaEJmUXNhYWh5N1FNVVltdnNDcmNFM0RnTlV1THBwQ3A2SnZ0Q6JjY2FuZ3N0b3JlLypkd2l0aHg4ZGlkOmtleTp6Nk1rb0N6ZE5yRGhCZlFzYWFoeTdRTVVZbXZzQ3JjRTNEZ05VdUxwcENwNkp2dEOiY2Nhbmh1cGxvYWQvKmR3aXRoeDhkaWQ6a2V5Ono2TWtvQ3pkTnJEaEJmUXNhYWh5N1FNVVltdnNDcmNFM0RnTlV1THBwQ3A2SnZ0Q6JjY2FuaGFjY2Vzcy8qZHdpdGh4OGRpZDprZXk6ejZNa29DemROckRoQmZRc2FhaHk3UU1VWW12c0NyY0UzRGdOVXVMcHBDcDZKdnRDomNjYW5qZmlsZWNvaW4vKmR3aXRoeDhkaWQ6a2V5Ono2TWtvQ3pkTnJEaEJmUXNhYWh5N1FNVVltdnNDcmNFM0RnTlV1THBwQ3A2SnZ0Q6JjY2FuZ3VzYWdlLypkd2l0aHg4ZGlkOmtleTp6Nk1rb0N6ZE5yRGhCZlFzYWFoeTdRTVVZbXZzQ3JjRTNEZ05VdUxwcENwNkp2dENjYXVkWCLtAfdxDfMldyNc60BvnRBiwH8HmuDoXkA1mpKcDez5t3xlY2V4cPZjZmN0gaFlc3BhY2WiZG5hbWVucGFwZXJjbGlwLWRhdGFmYWNjZXNzoWR0eXBlZnB1YmxpY2Npc3NYIu0B2FqJm8sYkb8LJaRCcyCc2fMAnfCAZAo5hwA4yXh/G2BjcHJmgdgqWCUAAXESIMDfF1PYzh32+oRi+Dje6ud2R4F+hZdpzX+k7AGDJUmvWQFxEiCPZqortc8JldfeEIC8bTkLbJez3dqE6lLtiTrNkXahxqFqdWNhbkAwLjkuMdgqWCUAAXESIJV5z557wmzlwpq8mw7KYDrhPBoDwbzIYpQJiCUtyuIi",
|
|
12
|
+
"W3UP_TASKS_SPACE_DID": "did:key:z6MkeZYxzGf3Dz13eEWqPaiZy5czR3UGJT6VJ2xb9ov3fm92",
|
|
13
|
+
"W3UP_TASKS_SPACE_PROOF": "mAYIEALwQOqJlcm9vdHOB2CpYJQABcRIgahEmvJ67kC6QxyeYeMsPZMAwsEyJQedGsHudcG2ceQBndmVyc2lvbgG/BwFxEiB21RXvraF9YDGcc8CwUZX8HbE1VafxFKoRiJocP6tdJahhc1hE7aEDQN8vgfy3y0rGBDzw+lTmt5C9FAHUk/A2g0I3hhvbEn8XLTTPeIPWbU9/UE3gOISUtl7q+yOl1zNXvIHfreMT0AthdmUwLjkuMWNhdHSJomNjYW5oYXNzZXJ0Lypkd2l0aHg4ZGlkOmtleTp6Nk1rZVpZeHpHZjNEejEzZUVXcVBhaVp5NWN6UjNVR0pUNlZKMnhiOW92M2ZtOTKiY2NhbmdzcGFjZS8qZHdpdGh4OGRpZDprZXk6ejZNa2VaWXh6R2YzRHoxM2VFV3FQYWlaeTVjelIzVUdKVDZWSjJ4YjlvdjNmbTkyomNjYW5mYmxvYi8qZHdpdGh4OGRpZDprZXk6ejZNa2VaWXh6R2YzRHoxM2VFV3FQYWlaeTVjelIzVUdKVDZWSjJ4YjlvdjNmbTkyomNjYW5naW5kZXgvKmR3aXRoeDhkaWQ6a2V5Ono2TWtlWll4ekdmM0R6MTNlRVdxUGFpWnk1Y3pSM1VHSlQ2VkoyeGI5b3YzZm05MqJjY2FuZ3N0b3JlLypkd2l0aHg4ZGlkOmtleTp6Nk1rZVpZeHpHZjNEejEzZUVXcVBhaVp5NWN6UjNVR0pUNlZKMnhiOW92M2ZtOTKiY2Nhbmh1cGxvYWQvKmR3aXRoeDhkaWQ6a2V5Ono2TWtlWll4ekdmM0R6MTNlRVdxUGFpWnk1Y3pSM1VHSlQ2VkoyeGI5b3YzZm05MqJjY2FuaGFjY2Vzcy8qZHdpdGh4OGRpZDprZXk6ejZNa2VaWXh6R2YzRHoxM2VFV3FQYWlaeTVjelIzVUdKVDZWSjJ4YjlvdjNmbTkyomNjYW5qZmlsZWNvaW4vKmR3aXRoeDhkaWQ6a2V5Ono2TWtlWll4ekdmM0R6MTNlRVdxUGFpWnk1Y3pSM1VHSlQ2VkoyeGI5b3YzZm05MqJjY2FuZ3VzYWdlLypkd2l0aHg4ZGlkOmtleTp6Nk1rZVpZeHpHZjNEejEzZUVXcVBhaVp5NWN6UjNVR0pUNlZKMnhiOW92M2ZtOTJjYXVkWCLtAdhaiZvLGJG/CyWkQnMgnNnzAJ3wgGQKOYcAOMl4fxtgY2V4cBprblVrY2ZjdIGhZXNwYWNlomRuYW1lb3BhcGVyY2xpcC10YXNrc2ZhY2Nlc3OhZHR5cGVmcHVibGljY2lzc1gi7QEBnJ3490MIYA3IT+amd9V7jt9Ml6d6zU+zuxsAh/fRsWNwcmaA5AcBcRIggUxp27QPeiqho5Esms8ftreR0bpZAqdOObCkeyPMuLmoYXNYRO2hA0ASX5d2xfv3RMW8PGiS1Ec8tfdyK5+3hOid+nYAMKbSC4/T4mjDIGHu1n0mDIw8pg3I3WAUEc/Vd7kSvSybVBgDYXZlMC45LjFjYXR0iaJjY2FuaGFzc2VydC8qZHdpdGh4OGRpZDprZXk6ejZNa2VaWXh6R2YzRHoxM2VFV3FQYWlaeTVjelIzVUdKVDZWSjJ4YjlvdjNmbTkyomNjYW5nc3BhY2UvKmR3aXRoeDhkaWQ6a2V5Ono2TWtlWll4ekdmM0R6MTNlRVdxUGFpWnk1Y3pSM1VHSlQ2VkoyeGI5b3YzZm05MqJjY2FuZmJsb2IvKmR3aXRoeDhkaWQ6a2V5Ono2TWtlWll4ekdmM0R6MTNlRVdxUGFpWnk1Y3pSM1VHSlQ2VkoyeGI5b3YzZm05MqJjY2FuZ2luZGV4Lypkd2l0aHg4ZGlkOmtleTp6Nk1rZVpZeHpHZjNEejEzZUVXcVBhaVp5NWN6UjNVR0pUNlZKMnhiOW92M2ZtOTKiY2NhbmdzdG9yZS8qZHdpdGh4OGRpZDprZXk6ejZNa2VaWXh6R2YzRHoxM2VFV3FQYWlaeTVjelIzVUdKVDZWSjJ4YjlvdjNmbTkyomNjYW5odXBsb2FkLypkd2l0aHg4ZGlkOmtleTp6Nk1rZVpZeHpHZjNEejEzZUVXcVBhaVp5NWN6UjNVR0pUNlZKMnhiOW92M2ZtOTKiY2NhbmhhY2Nlc3MvKmR3aXRoeDhkaWQ6a2V5Ono2TWtlWll4ekdmM0R6MTNlRVdxUGFpWnk1Y3pSM1VHSlQ2VkoyeGI5b3YzZm05MqJjY2FuamZpbGVjb2luLypkd2l0aHg4ZGlkOmtleTp6Nk1rZVpZeHpHZjNEejEzZUVXcVBhaVp5NWN6UjNVR0pUNlZKMnhiOW92M2ZtOTKiY2Nhbmd1c2FnZS8qZHdpdGh4OGRpZDprZXk6ejZNa2VaWXh6R2YzRHoxM2VFV3FQYWlaeTVjelIzVUdKVDZWSjJ4YjlvdjNmbTkyY2F1ZFgi7QH3cQ3zJXcjXOtAb50QYsB/B5rg6F5ANZqSnA3s+bd8ZWNleHD2Y2ZjdIGhZXNwYWNlomRuYW1lb3BhcGVyY2xpcC10YXNrc2ZhY2Nlc3OhZHR5cGVmcHVibGljY2lzc1gi7QHYWombyxiRvwslpEJzIJzZ8wCd8IBkCjmHADjJeH8bYGNwcmaB2CpYJQABcRIgdtUV762hfWAxnHPAsFGV/B2xNVWn8RSqEYiaHD+rXSVZAXESIGoRJryeu5AukMcnmHjLD2TAMLBMiUHnRrB7nXBtnHkAoWp1Y2FuQDAuOS4x2CpYJQABcRIggUxp27QPeiqho5Esms8ftreR0bpZAqdOObCkeyPMuLk",
|
|
14
|
+
"W3UP_MESSAGES_SPACE_DID": "did:key:z6MkgcY3RmfgLbZj51XsJoEhsTavQDQiPjS24rWQQA8iKKy2",
|
|
15
|
+
"W3UP_MESSAGES_SPACE_PROOF": "mAYIEAMIQOqJlcm9vdHOB2CpYJQABcRIgnDvyvwgikqlL2XzCW/JQ3BHpsRe8bFHN6SEzc6wOtjpndmVyc2lvbgHCBwFxEiDVB/+rAUCZdRYW6EXDptPhUgNIV6CRyFnqWujo7+/uGahhc1hE7aEDQJHrfoqa//GbFoOALOUrvYlGR+T2m7i9aa66PmdqgKGqjn2NGWm6RJVTary3fl31REKAEeTEOcPBqsdtsSge1AthdmUwLjkuMWNhdHSJomNjYW5oYXNzZXJ0Lypkd2l0aHg4ZGlkOmtleTp6Nk1rZ2NZM1JtZmdMYlpqNTFYc0pvRWhzVGF2UURRaVBqUzI0cldRUUE4aUtLeTKiY2NhbmdzcGFjZS8qZHdpdGh4OGRpZDprZXk6ejZNa2djWTNSbWZnTGJaajUxWHNKb0Voc1RhdlFEUWlQalMyNHJXUVFBOGlLS3kyomNjYW5mYmxvYi8qZHdpdGh4OGRpZDprZXk6ejZNa2djWTNSbWZnTGJaajUxWHNKb0Voc1RhdlFEUWlQalMyNHJXUVFBOGlLS3kyomNjYW5naW5kZXgvKmR3aXRoeDhkaWQ6a2V5Ono2TWtnY1kzUm1mZ0xiWmo1MVhzSm9FaHNUYXZRRFFpUGpTMjRyV1FRQThpS0t5MqJjY2FuZ3N0b3JlLypkd2l0aHg4ZGlkOmtleTp6Nk1rZ2NZM1JtZmdMYlpqNTFYc0pvRWhzVGF2UURRaVBqUzI0cldRUUE4aUtLeTKiY2Nhbmh1cGxvYWQvKmR3aXRoeDhkaWQ6a2V5Ono2TWtnY1kzUm1mZ0xiWmo1MVhzSm9FaHNUYXZRRFFpUGpTMjRyV1FRQThpS0t5MqJjY2FuaGFjY2Vzcy8qZHdpdGh4OGRpZDprZXk6ejZNa2djWTNSbWZnTGJaajUxWHNKb0Voc1RhdlFEUWlQalMyNHJXUVFBOGlLS3kyomNjYW5qZmlsZWNvaW4vKmR3aXRoeDhkaWQ6a2V5Ono2TWtnY1kzUm1mZ0xiWmo1MVhzSm9FaHNUYXZRRFFpUGpTMjRyV1FRQThpS0t5MqJjY2FuZ3VzYWdlLypkd2l0aHg4ZGlkOmtleTp6Nk1rZ2NZM1JtZmdMYlpqNTFYc0pvRWhzVGF2UURRaVBqUzI0cldRUUE4aUtLeTJjYXVkWCLtAdhaiZvLGJG/CyWkQnMgnNnzAJ3wgGQKOYcAOMl4fxtgY2V4cBprblVxY2ZjdIGhZXNwYWNlomRuYW1lcnBhcGVyY2xpcC1tZXNzYWdlc2ZhY2Nlc3OhZHR5cGVmcHVibGljY2lzc1gi7QEgF7Bv4SLxvgEurq71mo5LvqCxESOmpuc8faW0/E29uWNwcmaA5wcBcRIgtDaUBVGzv2+pJPPufePJ7dfIZKTjeqpAYa6Jjv5mtLeoYXNYRO2hA0AIvxSpZSSR9cbUg3BnCpFGejW6Mc1nJNWIHgF6qvmzz5FrmD9TZ1WDnliMpMMoNahYIJJUZreH+wpM8ZO08RgPYXZlMC45LjFjYXR0iaJjY2FuaGFzc2VydC8qZHdpdGh4OGRpZDprZXk6ejZNa2djWTNSbWZnTGJaajUxWHNKb0Voc1RhdlFEUWlQalMyNHJXUVFBOGlLS3kyomNjYW5nc3BhY2UvKmR3aXRoeDhkaWQ6a2V5Ono2TWtnY1kzUm1mZ0xiWmo1MVhzSm9FaHNUYXZRRFFpUGpTMjRyV1FRQThpS0t5MqJjY2FuZmJsb2IvKmR3aXRoeDhkaWQ6a2V5Ono2TWtnY1kzUm1mZ0xiWmo1MVhzSm9FaHNUYXZRRFFpUGpTMjRyV1FRQThpS0t5MqJjY2FuZ2luZGV4Lypkd2l0aHg4ZGlkOmtleTp6Nk1rZ2NZM1JtZmdMYlpqNTFYc0pvRWhzVGF2UURRaVBqUzI0cldRUUE4aUtLeTKiY2NhbmdzdG9yZS8qZHdpdGh4OGRpZDprZXk6ejZNa2djWTNSbWZnTGJaajUxWHNKb0Voc1RhdlFEUWlQalMyNHJXUVFBOGlLS3kyomNjYW5odXBsb2FkLypkd2l0aHg4ZGlkOmtleTp6Nk1rZ2NZM1JtZmdMYlpqNTFYc0pvRWhzVGF2UURRaVBqUzI0cldRUUE4aUtLeTKiY2NhbmhhY2Nlc3MvKmR3aXRoeDhkaWQ6a2V5Ono2TWtnY1kzUm1mZ0xiWmo1MVhzSm9FaHNUYXZRRFFpUGpTMjRyV1FRQThpS0t5MqJjY2FuamZpbGVjb2luLypkd2l0aHg4ZGlkOmtleTp6Nk1rZ2NZM1JtZmdMYlpqNTFYc0pvRWhzVGF2UURRaVBqUzI0cldRUUE4aUtLeTKiY2Nhbmd1c2FnZS8qZHdpdGh4OGRpZDprZXk6ejZNa2djWTNSbWZnTGJaajUxWHNKb0Voc1RhdlFEUWlQalMyNHJXUVFBOGlLS3kyY2F1ZFgi7QH3cQ3zJXcjXOtAb50QYsB/B5rg6F5ANZqSnA3s+bd8ZWNleHD2Y2ZjdIGhZXNwYWNlomRuYW1lcnBhcGVyY2xpcC1tZXNzYWdlc2ZhY2Nlc3OhZHR5cGVmcHVibGljY2lzc1gi7QHYWombyxiRvwslpEJzIJzZ8wCd8IBkCjmHADjJeH8bYGNwcmaB2CpYJQABcRIg1Qf/qwFAmXUWFuhFw6bT4VIDSFegkchZ6lro6O/v7hlZAXESIJw78r8IIpKpS9l8wlvyUNwR6bEXvGxRzekhM3OsDrY6oWp1Y2FuQDAuOS4x2CpYJQABcRIgtDaUBVGzv2+pJPPufePJ7dfIZKTjeqpAYa6Jjv5mtLc",
|
|
16
|
+
"PRIVY_APP_ID": "",
|
|
17
|
+
"PRIVY_APP_SECRET": ""
|
|
18
|
+
}
|
package/dist/bin.js
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* CLI entry point — suppresses Node ≥ 21 punycode deprecation (DEP0040)
|
|
4
|
+
* before any dependency can trigger it, then hands off to the real CLI.
|
|
5
|
+
*/
|
|
6
|
+
const originalEmit = process.emit;
|
|
7
|
+
process.emit = function (event, ...args) {
|
|
8
|
+
const warning = args[0];
|
|
9
|
+
if (event === "warning" &&
|
|
10
|
+
warning?.name === "DeprecationWarning" &&
|
|
11
|
+
warning?.code === "DEP0040") {
|
|
12
|
+
return false;
|
|
13
|
+
}
|
|
14
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
15
|
+
return originalEmit.apply(process, [event, ...args]);
|
|
16
|
+
};
|
|
17
|
+
await import("./index.js");
|
|
18
|
+
export {};
|
package/dist/client.js
ADDED
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import fs from "fs";
|
|
2
|
+
import path from "path";
|
|
3
|
+
import { fileURLToPath } from "url";
|
|
4
|
+
import * as anchor from "@coral-xyz/anchor";
|
|
5
|
+
import { Keypair, PublicKey } from "@solana/web3.js";
|
|
6
|
+
import { PROGRAM_ID, RPC_URL, WALLET_PATH, WALLET_TYPE } from "./config.js";
|
|
7
|
+
import { getPrivyWalletInstance } from "./privy.js";
|
|
8
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
9
|
+
const __dirname = path.dirname(__filename);
|
|
10
|
+
const PROTOCOL_SEED = Buffer.from("protocol");
|
|
11
|
+
const AGENT_SEED = Buffer.from("agent");
|
|
12
|
+
const TASK_SEED = Buffer.from("task");
|
|
13
|
+
const CLAIM_SEED = Buffer.from("claim");
|
|
14
|
+
const INVITE_SEED = Buffer.from("invite");
|
|
15
|
+
export function loadKeypair(filePath) {
|
|
16
|
+
const raw = fs.readFileSync(filePath, "utf8");
|
|
17
|
+
const bytes = Uint8Array.from(JSON.parse(raw));
|
|
18
|
+
return Keypair.fromSecretKey(bytes);
|
|
19
|
+
}
|
|
20
|
+
export function getLocalProvider() {
|
|
21
|
+
const connection = new anchor.web3.Connection(RPC_URL, "confirmed");
|
|
22
|
+
const keypair = loadKeypair(WALLET_PATH);
|
|
23
|
+
const wallet = new anchor.Wallet(keypair);
|
|
24
|
+
return new anchor.AnchorProvider(connection, wallet, {
|
|
25
|
+
commitment: "confirmed",
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
export async function getProvider() {
|
|
29
|
+
const connection = new anchor.web3.Connection(RPC_URL, "confirmed");
|
|
30
|
+
if (WALLET_TYPE === "privy") {
|
|
31
|
+
const privyWallet = await getPrivyWalletInstance();
|
|
32
|
+
return new anchor.AnchorProvider(connection, privyWallet, { commitment: "confirmed" });
|
|
33
|
+
}
|
|
34
|
+
const keypair = loadKeypair(WALLET_PATH);
|
|
35
|
+
const wallet = new anchor.Wallet(keypair);
|
|
36
|
+
return new anchor.AnchorProvider(connection, wallet, {
|
|
37
|
+
commitment: "confirmed",
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
export async function getProgram() {
|
|
41
|
+
const provider = await getProvider();
|
|
42
|
+
anchor.setProvider(provider);
|
|
43
|
+
const idlPath = path.resolve(__dirname, "..", "..", "target", "idl", "paperclip_protocol.json");
|
|
44
|
+
const idl = JSON.parse(fs.readFileSync(idlPath, "utf8"));
|
|
45
|
+
// Override address with env-configurable PROGRAM_ID
|
|
46
|
+
idl.address = PROGRAM_ID.toBase58();
|
|
47
|
+
return new anchor.Program(idl, provider);
|
|
48
|
+
}
|
|
49
|
+
export function toFixedBytes(input, size) {
|
|
50
|
+
const buf = Buffer.alloc(size);
|
|
51
|
+
const data = Buffer.from(input, "utf8");
|
|
52
|
+
if (data.length > size) {
|
|
53
|
+
throw new Error(`Input exceeds ${size} bytes`);
|
|
54
|
+
}
|
|
55
|
+
data.copy(buf);
|
|
56
|
+
return Array.from(buf);
|
|
57
|
+
}
|
|
58
|
+
export function fromFixedBytes(data) {
|
|
59
|
+
const buf = Buffer.from(data);
|
|
60
|
+
const end = buf.indexOf(0);
|
|
61
|
+
return buf.slice(0, end === -1 ? buf.length : end).toString("utf8");
|
|
62
|
+
}
|
|
63
|
+
export function taskIdBytes(taskId) {
|
|
64
|
+
const buf = Buffer.alloc(4);
|
|
65
|
+
buf.writeUInt32LE(taskId, 0);
|
|
66
|
+
return buf;
|
|
67
|
+
}
|
|
68
|
+
export function getProtocolPda(programId) {
|
|
69
|
+
return PublicKey.findProgramAddressSync([PROTOCOL_SEED], programId)[0];
|
|
70
|
+
}
|
|
71
|
+
export function getAgentPda(programId, agent) {
|
|
72
|
+
return PublicKey.findProgramAddressSync([AGENT_SEED, agent.toBuffer()], programId)[0];
|
|
73
|
+
}
|
|
74
|
+
export function getTaskPda(programId, taskId) {
|
|
75
|
+
return PublicKey.findProgramAddressSync([TASK_SEED, taskIdBytes(taskId)], programId)[0];
|
|
76
|
+
}
|
|
77
|
+
export function getClaimPda(programId, taskId, agent) {
|
|
78
|
+
return PublicKey.findProgramAddressSync([CLAIM_SEED, taskIdBytes(taskId), agent.toBuffer()], programId)[0];
|
|
79
|
+
}
|
|
80
|
+
export function getInvitePda(programId, inviter) {
|
|
81
|
+
return PublicKey.findProgramAddressSync([INVITE_SEED, inviter.toBuffer()], programId)[0];
|
|
82
|
+
}
|
package/dist/config.js
ADDED
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import fs from "fs";
|
|
2
|
+
import os from "os";
|
|
3
|
+
import path from "path";
|
|
4
|
+
import { fileURLToPath } from "url";
|
|
5
|
+
import { PublicKey } from "@solana/web3.js";
|
|
6
|
+
import { getConfiguredNetwork, getNetwork, } from "./settings.js";
|
|
7
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
8
|
+
const __dirname = path.dirname(__filename);
|
|
9
|
+
const BAKED_CONFIG_PATH = path.resolve(__dirname, "..", "baked-config.json");
|
|
10
|
+
function readBakedConfig() {
|
|
11
|
+
try {
|
|
12
|
+
if (!fs.existsSync(BAKED_CONFIG_PATH)) {
|
|
13
|
+
return {};
|
|
14
|
+
}
|
|
15
|
+
return JSON.parse(fs.readFileSync(BAKED_CONFIG_PATH, "utf8"));
|
|
16
|
+
}
|
|
17
|
+
catch {
|
|
18
|
+
return {};
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
function clean(value) {
|
|
22
|
+
const trimmed = value?.trim();
|
|
23
|
+
return trimmed ? trimmed : undefined;
|
|
24
|
+
}
|
|
25
|
+
function parseNetwork(value) {
|
|
26
|
+
const normalized = value?.toLowerCase().trim();
|
|
27
|
+
if (normalized === "devnet" || normalized === "localnet") {
|
|
28
|
+
return normalized;
|
|
29
|
+
}
|
|
30
|
+
return undefined;
|
|
31
|
+
}
|
|
32
|
+
function parseWalletType(value) {
|
|
33
|
+
const normalized = value?.toLowerCase().trim();
|
|
34
|
+
if (normalized === "privy" || normalized === "local") {
|
|
35
|
+
return normalized;
|
|
36
|
+
}
|
|
37
|
+
return undefined;
|
|
38
|
+
}
|
|
39
|
+
function networkFromArgv(argv) {
|
|
40
|
+
const longIdx = argv.indexOf("--network");
|
|
41
|
+
if (longIdx !== -1) {
|
|
42
|
+
return parseNetwork(argv[longIdx + 1]);
|
|
43
|
+
}
|
|
44
|
+
const shortIdx = argv.indexOf("-n");
|
|
45
|
+
if (shortIdx !== -1) {
|
|
46
|
+
return parseNetwork(argv[shortIdx + 1]);
|
|
47
|
+
}
|
|
48
|
+
return undefined;
|
|
49
|
+
}
|
|
50
|
+
const baked = readBakedConfig();
|
|
51
|
+
const DEVNET_RPC_URL = "https://api.devnet.solana.com";
|
|
52
|
+
const LOCALNET_RPC_URL = "http://127.0.0.1:8899";
|
|
53
|
+
const DEFAULT_RPC_FALLBACK_URL = "https://devnet.helius-rpc.com/?api-key=4d93203f-a21c-40f1-88aa-7f8e61d5a7c9";
|
|
54
|
+
const DEVNET_PROGRAM_ID = "Fehg9nbFCRnrZAuaW6tiqnegbHpHgizV9bvakhAWix6v";
|
|
55
|
+
const LOCALNET_PROGRAM_ID = "Fehg9nbFCRnrZAuaW6tiqnegbHpHgizV9bvakhAWix6v";
|
|
56
|
+
const bakedNetwork = parseNetwork(baked.PAPERCLIP_NETWORK);
|
|
57
|
+
export const NETWORK = networkFromArgv(process.argv) ||
|
|
58
|
+
parseNetwork(process.env.PAPERCLIP_NETWORK) ||
|
|
59
|
+
getConfiguredNetwork() ||
|
|
60
|
+
bakedNetwork ||
|
|
61
|
+
getNetwork();
|
|
62
|
+
const NETWORK_RPC_URL = NETWORK === "localnet" ? LOCALNET_RPC_URL : DEVNET_RPC_URL;
|
|
63
|
+
const NETWORK_PROGRAM_ID = NETWORK === "localnet" ? LOCALNET_PROGRAM_ID : DEVNET_PROGRAM_ID;
|
|
64
|
+
export const RPC_URL = clean(process.env.PAPERCLIP_RPC_URL) || clean(baked.PAPERCLIP_RPC_URL) || NETWORK_RPC_URL;
|
|
65
|
+
export const RPC_FALLBACK_URL = clean(process.env.PAPERCLIP_RPC_FALLBACK_URL) ||
|
|
66
|
+
clean(baked.PAPERCLIP_RPC_FALLBACK_URL) ||
|
|
67
|
+
DEFAULT_RPC_FALLBACK_URL;
|
|
68
|
+
export const PROGRAM_ID = new PublicKey(clean(process.env.PAPERCLIP_PROGRAM_ID) ||
|
|
69
|
+
clean(baked.PAPERCLIP_PROGRAM_ID) ||
|
|
70
|
+
NETWORK_PROGRAM_ID);
|
|
71
|
+
export const WALLET_PATH = clean(process.env.PAPERCLIP_WALLET) ||
|
|
72
|
+
clean(baked.PAPERCLIP_WALLET) ||
|
|
73
|
+
path.join(os.homedir(), ".config", "solana", "id.json");
|
|
74
|
+
export const STORACHA_GATEWAY_URL = clean(process.env.STORACHA_GATEWAY_URL) ||
|
|
75
|
+
clean(baked.STORACHA_GATEWAY_URL) ||
|
|
76
|
+
"https://w3s.link/ipfs/";
|
|
77
|
+
export const STORACHA_AGENT_KEY = clean(process.env.STORACHA_AGENT_KEY) || clean(baked.STORACHA_AGENT_KEY) || "";
|
|
78
|
+
export const W3UP_DATA_SPACE_DID = clean(process.env.W3UP_DATA_SPACE_DID) || clean(baked.W3UP_DATA_SPACE_DID) || "";
|
|
79
|
+
export const W3UP_DATA_SPACE_PROOF = clean(process.env.W3UP_DATA_SPACE_PROOF) ||
|
|
80
|
+
clean(baked.W3UP_DATA_SPACE_PROOF) ||
|
|
81
|
+
"";
|
|
82
|
+
export const W3UP_TASKS_SPACE_DID = clean(process.env.W3UP_TASKS_SPACE_DID) || clean(baked.W3UP_TASKS_SPACE_DID) || "";
|
|
83
|
+
export const W3UP_TASKS_SPACE_PROOF = clean(process.env.W3UP_TASKS_SPACE_PROOF) ||
|
|
84
|
+
clean(baked.W3UP_TASKS_SPACE_PROOF) ||
|
|
85
|
+
"";
|
|
86
|
+
export const W3UP_MESSAGES_SPACE_DID = clean(process.env.W3UP_MESSAGES_SPACE_DID) ||
|
|
87
|
+
clean(baked.W3UP_MESSAGES_SPACE_DID) ||
|
|
88
|
+
"";
|
|
89
|
+
export const W3UP_MESSAGES_SPACE_PROOF = clean(process.env.W3UP_MESSAGES_SPACE_PROOF) ||
|
|
90
|
+
clean(baked.W3UP_MESSAGES_SPACE_PROOF) ||
|
|
91
|
+
"";
|
|
92
|
+
export const PRIVY_APP_ID = clean(process.env.PRIVY_APP_ID) || clean(baked.PRIVY_APP_ID) || "";
|
|
93
|
+
export const PRIVY_APP_SECRET = clean(process.env.PRIVY_APP_SECRET) || clean(baked.PRIVY_APP_SECRET) || "";
|
|
94
|
+
const envWalletType = parseWalletType(process.env.PAPERCLIP_WALLET_TYPE);
|
|
95
|
+
const bakedWalletType = parseWalletType(baked.PAPERCLIP_WALLET_TYPE);
|
|
96
|
+
const hasPrivyCreds = Boolean(PRIVY_APP_ID && PRIVY_APP_SECRET);
|
|
97
|
+
export const WALLET_TYPE = envWalletType ||
|
|
98
|
+
(bakedWalletType === "privy" && !hasPrivyCreds ? undefined : bakedWalletType) ||
|
|
99
|
+
(hasPrivyCreds ? "privy" : "local");
|