diff --git a/src/eventHandlers/AccountMetadataEmittedEvent/handlers/handleProjectMetadata.ts b/src/eventHandlers/AccountMetadataEmittedEvent/handlers/handleProjectMetadata.ts index 84153d3..8bb1111 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 ('orcidId' 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, 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, + });