diff --git a/lib/contracts.js b/lib/contracts.js index 180dacdf..591ea828 100644 --- a/lib/contracts.js +++ b/lib/contracts.js @@ -3,6 +3,7 @@ import pRetry from 'p-retry' import * as Name from 'w3name' import { ethers } from 'ethers' import * as SparkImpactEvaluator from '@filecoin-station/spark-impact-evaluator' +import { reportW3NameError } from './telemetry.js' const { // https://github.com/filecoin-station/contract-addresses @@ -61,6 +62,14 @@ async function getContractsWithRetry ({ provider }) { async function getContractAddresses () { const name = Name.parse(CONTRACT_ADDRESSES_IPNS_KEY) - const revision = await Name.resolve(name) + let revision + try { + revision = await Name.resolve(name) + } catch (err) { + reportW3NameError() + // These errors aren't actionable + err.reportToSentry = false + throw err + } return revision.value.split('\n').filter(Boolean) } diff --git a/lib/modules.js b/lib/modules.js index 48020447..753c5b18 100644 --- a/lib/modules.js +++ b/lib/modules.js @@ -12,6 +12,7 @@ import { CarReader } from '@ipld/car' import { validateBlock } from '@web3-storage/car-block-validator' import { recursive as exporter } from 'ipfs-unixfs-exporter' import * as tar from 'tar' +import { reportW3NameError } from './telemetry.js' /** @typedef {import('unzip-stream').UnzipStreamEntry} UnzipStreamEntry */ @@ -106,7 +107,15 @@ export const installBinaryModule = async ({ async function getLatestCID (ipnsKey) { const name = Name.parse(ipnsKey) - const revision = await Name.resolve(name) + let revision + try { + revision = await Name.resolve(name) + } catch (err) { + reportW3NameError() + // These errors aren't actionable + err.reportToSentry = false + throw err + } // /ipfs/:cid return revision.value.split('/').pop() } diff --git a/lib/telemetry.js b/lib/telemetry.js index 100c48bb..db56bf01 100644 --- a/lib/telemetry.js +++ b/lib/telemetry.js @@ -102,3 +102,10 @@ export const runMachinesLoop = async ({ STATION_ID }) => { await timers.setTimeout(24 * 3600 * 1000) // 1 day } } + +export const reportW3NameError = () => { + const point = new Point('w3name-error') + point.stringField('version', pkg.version) + writeClient.writePoint(point) + writeClient.flush().catch(handleFlushError) +}