---
# System prepended metadata

title: Untitled

---

```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)
```