From f587f1c27377d5d6ed7dc0b00320140105f24e64 Mon Sep 17 00:00:00 2001 From: Jaco Date: Thu, 9 Feb 2023 19:56:53 +0200 Subject: [PATCH] Cater for pinata unpin rate limits (#2939) * Cater for pinata unpin rate limits * Delay after pin * Additional delay --- scripts/ipfsUpload.mjs | 55 ++++++++++++++++++++++++++++++------------ 1 file changed, 39 insertions(+), 16 deletions(-) diff --git a/scripts/ipfsUpload.mjs b/scripts/ipfsUpload.mjs index 0929a3f6c..9a10efa0e 100755 --- a/scripts/ipfsUpload.mjs +++ b/scripts/ipfsUpload.mjs @@ -11,31 +11,44 @@ const PINMETA = { name: `${SUB_DOMAIN}.${DOMAIN}` }; const pinata = pinataSDK(process.env.PINATA_API_KEY, process.env.PINATA_SECRET_KEY); +async function wait (delay = 2500) { + return new Promise((resolve) => { + setTimeout(() => resolve(), delay); + }); +} + async function pin () { const result = await pinata.pinFromFS(DST, { pinataMetadata: PINMETA }); console.log(`Pinned ${result.IpfsHash}`); + await wait(); + return result.IpfsHash; } async function unpin (exclude) { const result = await pinata.pinList({ metadata: PINMETA, status: 'pinned' }); + await wait(); + if (result.count > 1) { - const filtered = result.rows + const hashes = result.rows .map((r) => r.ipfs_pin_hash) .filter((hash) => hash !== exclude); - if (filtered.length) { - await Promise.all( - filtered.map((hash) => - pinata - .unpin(hash) - .then(() => console.log(`Unpinned ${hash}`)) - .catch(console.error) - ) - ); + for (let i = 0; i < hashes.length; i++) { + const hash = hashes[i]; + + try { + await pinata.unpin(hash); + + console.log(`Unpinned ${hash}`); + } catch (error) { + console.error(`Failed unpinning ${hash}`, error); + } + + await wait(); } } } @@ -43,12 +56,22 @@ async function unpin (exclude) { async function dnslink (hash) { const records = [`_dnslink.${SUB_DOMAIN}.${DOMAIN}`]; - await Promise.all(records.map((record) => - cloudflare( - { token: process.env.CF_API_TOKEN }, - { link: `/ipfs/${hash}`, record, zone: DOMAIN } - ) - )); + for (let i = 0; i < records.length; i++) { + const record = records[i]; + + try { + await cloudflare( + { token: process.env.CF_API_TOKEN }, + { link: `/ipfs/${hash}`, record, zone: DOMAIN } + ); + + console.log(`Updated dnslink ${record}`); + + await wait(); + } catch (error) { + console.error(`Failed updating dnslink ${record}`, error); + } + } console.log(`Dnslink ${hash} for ${records.join(', ')}`); }