🌳
pt0/ipfsF/ipfsPinsJobAI.mts
4import { collectMfsRootCids, type MfsRootCidEntry } from './collectAppCidsAI.mts'
13const collectEnsSiteCids = async (): Promise<MfsRootCidEntry[]> => {
14 try {
15 const contenthash = await ensGetContenthash({ensName: ossEnsName})
16 const cid = contenthash ? contenthashToCid(contenthash) : null
17 return cid ? [{label: `ens/${ossEnsName}`, cid}] : []
18 } catch (err) {
19 betLog('ensCidCollectFail', {errMsg: (err as Error).message})
20 return []
21 }
24export const mkIpfsPinsJob = ({dbConfigs}: {dbConfigs: {label: string, appConfig: object}[]}) => ({
25 name: 'ipfs3pins',
26 intervalSec: 60 * 60,
27 runFnc: async () => {
28 const rootCids: MfsRootCidEntry[] = []
29 const mfsParamsMap: Record<string, {mfsRoot: string, kvKey: string}> = {}
30 for (const {label, appConfig} of dbConfigs) {
31 await wrapDbEnv({appConfig, reuseConn: false}, async () => {
32 const cids = await collectMfsRootCids()
33 rootCids.push(...cids.map(c => ({...c, label: `${label}/${c.label}`})))
34 const qsName = getEnvConf().dbSecrets?.db
35 assertDefined(qsName, {label})
36 const params = deriveMfsParamsFromQs(qsName)
37 for (const c of cids) {
38 if (c.label === params.kvKey) {
39 mfsParamsMap[c.label] = {mfsRoot: params.mfsRoot, kvKey: params.kvKey}
40 }
41 }
42 })
43 }
44 await verifyIpfsPins({rootCids: [...rootCids, ...await collectEnsSiteCids()]})
45 await verifyMfsReplication({rootCids, mfsParamsMap})
47 rootCids: rootCids.map(r => ({label: r.label.split('/').pop()!, cid: r.cid})),
48 mfsParamsMap,
49 })
50 },
51})