From a18bf8df282c45e0f042af90913dedc1b12d5c56 Mon Sep 17 00:00:00 2001 From: m0ar Date: Fri, 27 Sep 2024 16:13:55 +0200 Subject: [PATCH 1/5] if resolving a legacy history entry from the dev contract, filter out the duplicate entries --- src/api/v2/resolvers/dpid.ts | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/src/api/v2/resolvers/dpid.ts b/src/api/v2/resolvers/dpid.ts index 0b0d6db..0d49e3c 100644 --- a/src/api/v2/resolvers/dpid.ts +++ b/src/api/v2/resolvers/dpid.ts @@ -3,7 +3,6 @@ import parentLogger from "../../../logger.js"; import { CACHE_TTL_ANCHORED, CACHE_TTL_PENDING, DPID_ENV, getDpidAliasRegistry } from "../../../util/config.js"; import { ResolverError } from "../../../errors.js"; import { getCodexHistory, type HistoryQueryResult, type HistoryVersion } from "../queries/history.js"; -import { BigNumber } from "ethers"; import { getFromCache, setToCache } from "../../../redis.js"; import type { DpidAliasRegistry } from "@desci-labs/desci-contracts/dist/typechain-types/DpidAliasRegistry.js"; @@ -152,7 +151,8 @@ export const resolveDpid = async (dpid: number, versionIx?: number): Promise ({ // No CommitID available version: "", - time: BigNumber.from(time).toNumber(), + time: time.toNumber(), manifest, })), }; @@ -179,5 +179,23 @@ export const resolveDpid = async (dpid: number, versionIx?: number): Promise {} + +type LegacyVersion = DpidAliasRegistry.LegacyVersionStructOutput; + +const undupeIfLegacyDevHistory = (versions: LegacyVersion[]) => { + if (DPID_ENV !== "dev") { + return versions; + } + + return versions.reduce((unduped, current) => { + if (unduped.length === 0 || !isLegacyDupe(current, unduped[unduped.length - 1])) { + unduped.push(current); + } + return unduped; + }, [] as LegacyVersion[]); +}; + +const isLegacyDupe = (a: LegacyVersion, b: LegacyVersion) => { + return a[0] === b[0] && a[1].toNumber() === b[1].toNumber(); +}; From 9b11bfb5593c7baceebf81095b1834e3af9a0777 Mon Sep 17 00:00:00 2001 From: m0ar Date: Mon, 30 Sep 2024 16:45:56 +0200 Subject: [PATCH 2/5] disable nvmrc versioning of base image, can't be used with docker hub integration --- Dockerfile | 3 +-- package.json | 1 - 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/Dockerfile b/Dockerfile index 1f51138..421de88 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,4 @@ -ARG NODE_VERSION -FROM node:${NODE_VERSION}-alpine3.20 AS base +FROM node:20.13.1-alpine3.20 AS base RUN apk update && apk add --no-cache bash dumb-init WORKDIR /usr/src/app diff --git a/package.json b/package.json index 8bb5d49..0ef11f2 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,6 @@ "type": "module", "scripts": { "build": "tsc", - "docker:build": "docker build --build-arg NODE_VERSION=$(< .nvmrc) .", "watch": "tsc --watch", "start": "node dist/index.js", "test": "PINO_LOG_LEVEL=silent PORT=5600 vitest --config vitest.config.ts", From dfe0f407b8e8d3fb4a0df7bf335a30f4ac23a497 Mon Sep 17 00:00:00 2001 From: m0ar Date: Tue, 1 Oct 2024 10:23:18 +0200 Subject: [PATCH 3/5] Fix test case using a now-filtered dupe from dev registry --- test/v2/resolvers.spec.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/test/v2/resolvers.spec.ts b/test/v2/resolvers.spec.ts index bdc4f19..5095323 100644 --- a/test/v2/resolvers.spec.ts +++ b/test/v2/resolvers.spec.ts @@ -279,7 +279,8 @@ describe("dPID", { timeout: 10_000 }, function () { .expect(200) .expect((res) => expect(res.body.manifest).toEqual( - "bafkreih5koqw5nvxucidlihwfslknj674oeuroclit74rkaqpe4mq6xuka", + // fourth published CID + "bafkreibn3jhdlsdsonv25t7i2bwtrbkl3jzwjbnnwylpeih3jmmzdhsfmi", ), ); }); From e2f3df3eb33669cc540e1971cefc5aa4633d83e9 Mon Sep 17 00:00:00 2001 From: m0ar Date: Tue, 1 Oct 2024 10:45:37 +0200 Subject: [PATCH 4/5] fix bug in deserialising BigNumbers from redis --- src/api/v2/resolvers/dpid.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/api/v2/resolvers/dpid.ts b/src/api/v2/resolvers/dpid.ts index 0d49e3c..0eccdef 100644 --- a/src/api/v2/resolvers/dpid.ts +++ b/src/api/v2/resolvers/dpid.ts @@ -5,6 +5,7 @@ import { ResolverError } from "../../../errors.js"; import { getCodexHistory, type HistoryQueryResult, type HistoryVersion } from "../queries/history.js"; import { getFromCache, setToCache } from "../../../redis.js"; import type { DpidAliasRegistry } from "@desci-labs/desci-contracts/dist/typechain-types/DpidAliasRegistry.js"; +import { BigNumber } from "ethers"; const MODULE_PATH = "/api/v2/resolvers/codex" as const; const logger = parentLogger.child({ @@ -163,7 +164,9 @@ export const resolveDpid = async (dpid: number, versionIx?: number): Promise ({ // No CommitID available version: "", - time: time.toNumber(), + // When restored from redis, the BigNumber is deserialised as a regular object + // Ethers can instantiate the class from that format + time: BigNumber.from(time).toNumber(), manifest, })), }; From e9090b6aa634014d8c2e9bded8527113ce6c7ab4 Mon Sep 17 00:00:00 2001 From: m0ar Date: Tue, 1 Oct 2024 10:53:39 +0200 Subject: [PATCH 5/5] demystify legacy version equality fn after review --- src/api/v2/resolvers/dpid.ts | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/api/v2/resolvers/dpid.ts b/src/api/v2/resolvers/dpid.ts index 0eccdef..81efa0c 100644 --- a/src/api/v2/resolvers/dpid.ts +++ b/src/api/v2/resolvers/dpid.ts @@ -199,6 +199,11 @@ const undupeIfLegacyDevHistory = (versions: LegacyVersion[]) => { }, [] as LegacyVersion[]); }; -const isLegacyDupe = (a: LegacyVersion, b: LegacyVersion) => { - return a[0] === b[0] && a[1].toNumber() === b[1].toNumber(); +const isLegacyDupe = ( + [aCid, aTimeBn]: LegacyVersion, + [bCid, bTimeBn]: LegacyVersion +): Boolean => { + const cidIsEqual = aCid === bCid; + const timeIsEqual = aTimeBn.toNumber() === bTimeBn.toNumber(); + return cidIsEqual && timeIsEqual; };