An indexer module is the main place to implement your custom indexing logic. It consists of indexers for block data or contracts. Indexers are executed together and they share the same context data. The data are managed per block by the indexing cycle handler. An indexer module can also reference database entities used to store the indexed data.
Creates initial context data for indexing each block. Also, it can be executed before or after other indexers are executed, and it should handle blockchain reorganization.
Provide extension points for indexing block parts like block itself, operation groups, operations, operations results, balance updates, etc.
Provide extension points for block parts related to a contract like origination, entrypoint, big map diff, storage change, etc. Firstly, a contract indexer decides if it wants to index a contract based on its address, definition, and other details. At that point, it can associate some additional data with a contract which will be passed in by Dappetizer on each contract call. For example, you want to index contracts with a particular big map type, so you examine it and store some big map details, e.g. its schema.