From ffb2c60b620bbac8d350e9fc57b3cc02ef844d92 Mon Sep 17 00:00:00 2001 From: Morgan Brown Date: Mon, 20 Oct 2025 16:11:57 +0200 Subject: [PATCH 1/3] Add repoDriverAccountMetadataSchemaV6 to support orcid repo driver split --- src/metadata/schemas/index.ts | 2 ++ src/metadata/schemas/repo-driver/v3.ts | 2 +- src/metadata/schemas/repo-driver/v6.ts | 25 ++++++++++++++++++++++--- 3 files changed, 25 insertions(+), 4 deletions(-) diff --git a/src/metadata/schemas/index.ts b/src/metadata/schemas/index.ts index 49b8d2f..7838ef8 100644 --- a/src/metadata/schemas/index.ts +++ b/src/metadata/schemas/index.ts @@ -13,6 +13,7 @@ import { nftDriverAccountMetadataSchemaV5 } from './nft-driver/v5'; import { subListMetadataSchemaV1 } from './immutable-splits-driver/v1'; import { nftDriverAccountMetadataSchemaV6 } from './nft-driver/v6'; import { nftDriverAccountMetadataSchemaV7 } from './nft-driver/v7'; +import { repoDriverAccountMetadataSchemaV6 } from './repo-driver/v6'; export const nftDriverAccountMetadataParser = createVersionedParser([ nftDriverAccountMetadataSchemaV7.parse, @@ -29,6 +30,7 @@ export const addressDriverAccountMetadataParser = createVersionedParser([ ]); export const repoDriverAccountMetadataParser = createVersionedParser([ + repoDriverAccountMetadataSchemaV6.parse, repoDriverAccountMetadataSchemaV5.parse, repoDriverAccountMetadataSchemaV4.parse, repoDriverAccountMetadataSchemaV3.parse, diff --git a/src/metadata/schemas/repo-driver/v3.ts b/src/metadata/schemas/repo-driver/v3.ts index 86b7288..2ffaef1 100644 --- a/src/metadata/schemas/repo-driver/v3.ts +++ b/src/metadata/schemas/repo-driver/v3.ts @@ -5,7 +5,7 @@ import { repoDriverSplitReceiverSchema, } from './v2'; -const dripListSplitReceiverSchema = z.object({ +export const dripListSplitReceiverSchema = z.object({ type: z.literal('dripList'), weight: z.number(), accountId: z.string(), diff --git a/src/metadata/schemas/repo-driver/v6.ts b/src/metadata/schemas/repo-driver/v6.ts index b5acd88..158ad75 100644 --- a/src/metadata/schemas/repo-driver/v6.ts +++ b/src/metadata/schemas/repo-driver/v6.ts @@ -1,4 +1,10 @@ import z from 'zod'; +import { repoDriverAccountMetadataSchemaV5 } from './v5'; +import { + addressDriverSplitReceiverSchema, + repoDriverSplitReceiverSchema, +} from './v2'; +import { dripListSplitReceiverSchema } from './v3'; export const orcidSplitReceiverSchema = z.object({ type: z.literal('orcid'), @@ -7,6 +13,19 @@ export const orcidSplitReceiverSchema = z.object({ orcidId: z.string(), }); -// TODO: actually export new version -// should allow orcidSplitReceiverSchema as a dependency -// for repoDriverAccountSplitsSchema +const repoDriverAccountSplitsSchema = z.object({ + maintainers: z.array(addressDriverSplitReceiverSchema), + dependencies: z.array( + z.union([ + dripListSplitReceiverSchema, + repoDriverSplitReceiverSchema, + addressDriverSplitReceiverSchema, + orcidSplitReceiverSchema, + ]), + ), +}); + +export const repoDriverAccountMetadataSchemaV6 = + repoDriverAccountMetadataSchemaV5.extend({ + splits: repoDriverAccountSplitsSchema, + }); From 3156326b92df662a9c95990de2ec58a1edff7ef3 Mon Sep 17 00:00:00 2001 From: Morgan Brown Date: Mon, 20 Oct 2025 16:42:54 +0200 Subject: [PATCH 2/3] Fix handling of orcids when creating new split receivers --- .../handlers/handleProjectMetadata.ts | 20 ++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/src/eventHandlers/AccountMetadataEmittedEvent/handlers/handleProjectMetadata.ts b/src/eventHandlers/AccountMetadataEmittedEvent/handlers/handleProjectMetadata.ts index 84153d3..9f472c4 100644 --- a/src/eventHandlers/AccountMetadataEmittedEvent/handlers/handleProjectMetadata.ts +++ b/src/eventHandlers/AccountMetadataEmittedEvent/handlers/handleProjectMetadata.ts @@ -245,13 +245,7 @@ async function createNewSplitReceivers({ const dependencyPromises = dependencies.map(async (dependency) => { if (isRepoDriverId(dependency.accountId)) { - if (!('source' in dependency)) { - throw new Error( - `Project dependency ${dependency.accountId} is missing source information.`, - ); - } - - if (dependency.source.forge === 'orcid') { + if ('orcid' in dependency) { await ensureLinkedIdentityExists( dependency.accountId, { blockNumber, logIndex }, @@ -274,6 +268,18 @@ async function createNewSplitReceivers({ }); } + if (!('source' in dependency)) { + throw new Error( + `Project dependency ${dependency.accountId} is missing source information.`, + ); + } + + if (dependency.source.forge !== 'github') { + throw new Error( + `Project dependency ${dependency.accountId} has unsupported source forge: ${dependency.source.forge}. Expected 'github'.`, + ); + } + await ProjectModel.findOrCreate({ transaction, lock: transaction.LOCK.UPDATE, From 724bb24bc8e283d4abbfa8f7e21be480726cf145 Mon Sep 17 00:00:00 2001 From: Morgan Brown Date: Mon, 20 Oct 2025 17:07:56 +0200 Subject: [PATCH 3/3] Properly resolve orcidId for dependency receivers --- .../handlers/handleProjectMetadata.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/eventHandlers/AccountMetadataEmittedEvent/handlers/handleProjectMetadata.ts b/src/eventHandlers/AccountMetadataEmittedEvent/handlers/handleProjectMetadata.ts index 9f472c4..8bb1111 100644 --- a/src/eventHandlers/AccountMetadataEmittedEvent/handlers/handleProjectMetadata.ts +++ b/src/eventHandlers/AccountMetadataEmittedEvent/handlers/handleProjectMetadata.ts @@ -245,7 +245,7 @@ async function createNewSplitReceivers({ const dependencyPromises = dependencies.map(async (dependency) => { if (isRepoDriverId(dependency.accountId)) { - if ('orcid' in dependency) { + if ('orcidId' in dependency) { await ensureLinkedIdentityExists( dependency.accountId, { blockNumber, logIndex },