```javascript const platforms = [{ id: 'soundxyz', name: 'Sound.xyz', createdAtBlock: 1337, deprecatedAtBlock: 1339, // could be used to ignore crawling future blocks if platform depricated usage selectors: { events: ['0x....'], addresses: ['0x...'] }, filter: async (log) => {}, // filter out based on selectors.event , selectors.addresses transform: async (nft) => {}, // schema-fy extract: async (log) => {}, }, { id: 'sound-protocol', name: 'Sound Protocol', createdAtBlock: 1337, deprecatedAtBlock: null, selectors: { events: ['0x....'], addresses: ['0x...'] }, filter: async (log) => {}, transform: async (nft) => {}, extract: async (log) => {}, }] const options = { refetch: true , //overwrite persisted log / transformations etc. } // Sync Operations: used to fetch logs per platform using eth_getLogs await syncRange([platforms], from, to, options) // Syncs logs for each platform createdAtBlock -> latest block. // Overlapping platform ranges -> only fetches each block once. await syncAll([platforms], options) // Filter Operations: filter out logs per platform using fetched logs from syncRange / syncAll () await filterRange([platforms], from, to, options) await filterAll([platforms], options) // Transform Operations: Runs all transformers such as injectOwner, injectOwnershipHistory,, injectArtist, etc. await transformRange([platforms], from, to, options) await transformAll([platforms]) await exportRange([platforms], from, to, options) await exportAll([platforms], options) ```