diff --git a/packages/filecoin-api/src/dealer/service.js b/packages/filecoin-api/src/dealer/service.js index 3f9687154..9e368b1e0 100644 --- a/packages/filecoin-api/src/dealer/service.js +++ b/packages/filecoin-api/src/dealer/service.js @@ -74,7 +74,7 @@ export const aggregateOffer = async ({ capability, invocation }, context) => { * @param {import('./api').ServiceContext} context * @returns {Promise | API.UcantoInterface.JoinBuilder>} */ -export const add = async ({ capability, invocation }, context) => { +export const aggregateAccept = async ({ capability, invocation }, context) => { const { aggregate, pieces: offerCid, storefront } = capability.nb const pieces = getOfferBlock(offerCid, invocation.iterateIPLDBlocks()) diff --git a/packages/filecoin-api/src/storefront/events.js b/packages/filecoin-api/src/storefront/events.js new file mode 100644 index 000000000..4ddb11800 --- /dev/null +++ b/packages/filecoin-api/src/storefront/events.js @@ -0,0 +1,49 @@ +import { StoreOperationFailed } from '../errors.js' + +/** + * @param {import('./api').ServiceContext} context + * @param {import('./api').FilecoinSubmitMessage} message + */ +export const handleFilecoinSubmitMessage = async (context, message) => { + // TODO: verify piece + + const putRes = await context.pieceStore.put({ + piece: message.piece, + content: message.content, + group: message.group, + status: 'submitted', + insertedAt: Date.now(), + updatedAt: Date.now() + }) + if (putRes.error) { + return { error: new StoreOperationFailed(putRes.error.message) } + } + return { ok: {} } +} + +/** + * @param {import('./api').ServiceContext} context + * @param {import('./api').PieceRecord} record + */ +export const handlePieceInsert = async (context, record) => { + // TODO: invoke filecoin/submit + return { ok: {} } +} + +/** + * @param {import('./api').ServiceContext} context + */ +export const handleCronTick = async (context) => { + // TODO: get pieces where status === submitted + // read receipts to determine if an aggregate accepted for each piece + // update piece status to accepted if yes +} + +/** + * @param {import('./api').ServiceContext} context + * @param {import('./api').PieceRecord} record + */ +export const handlePieceStatusAccepted = async (context, record) => { + // TODO: invoke filecoin/accept /w content & piece + return { ok: {} } +} \ No newline at end of file diff --git a/packages/filecoin-api/src/storefront/service.js b/packages/filecoin-api/src/storefront/service.js index 11fc5b1c7..ccd650582 100644 --- a/packages/filecoin-api/src/storefront/service.js +++ b/packages/filecoin-api/src/storefront/service.js @@ -22,18 +22,6 @@ export const filecoinOffer = async ({ capability }, context) => { const group = context.id.did() if (!exists) { - const putRes = await context.pieceStore.put({ - piece, - content, - group, - status: 'offered', - insertedAt: Date.now(), - updatedAt: Date.now() - }) - if (putRes.error) { - return { error: new StoreOperationFailed(putRes.error.message) } - } - // Queue the piece for validation etc. const queueRes = await context.filecoinSubmitQueue.add({ piece,