NEAR Lake indexer basic tutorial
near-examples/near-lake-raw-printer-js
: source code for the tutorial on how to create an indexer that prints block height and number of shards
Recently we have published a JavaScript version of the NEAR Lake Framework on npmjs.org
We want to empower you with a basic tutorial on how to use the JavaScript Library. Let's get started!
Requirements​
Before we get started, please, ensure you have:
- nodejs installed
Create a project​
Create an indexer project:
mkdir near-lake-raw-printer-js && cd near-lake-raw-printer-js
Now we're going to call npm init
, we can continue with the default values pressing Enter on every question in the interactive mode:
npm init
version: (1.0.0)
description:
entry point: (index.js)
test command:
git repository:
keywords:
author:
license: (ISC)
About to write to /Users/near/projects/near-lake-raw-printer-js/package.json:
{
"name": "near-lake-raw-printer-js",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC"
}
Is this OK? (yes)
package.json
is ready. Let's install near-lake-framework
Install dependencies​
Install near-lake-framework
npm install near-lake-framework --save
Install typescript
as dev dependency
npm install typescript --save-dev
Setup TypeScript​
Now we can create tsconfig.json
for TypeScript settings:
touch tsconfig.json
Paste the content to the file:
{
"compilerOptions": {
"lib": [
"ES2018",
"dom"
]
}
}
Now let's add the scripts
section to the package.json
"scripts": {
"start": "tsc && node index.js"
}
After that your package.json
should look similar to:
{
"name": "near-lake-raw-printer",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"start": "tsc && node index.js"
},
"dependencies": {
"near-lake-framework": "^1.0.1"
},
"devDependencies": {
"typescript": "^4.6.4"
}
}
Now let's create index.ts
touch index.ts
Open index.ts
in your favorite editor to start coding.
Import near-lake-framework
​
In the index.ts
file let's import the necessary dependencies:
import { startStream, types } from 'near-lake-framework';
We've imported the main function startStream
, which will be called to actually run the indexer, and types
, which hold the LakeConfig
type we need to construct.
Create a config​
To get indexer running we need to start it with a config. We need to create an instance of LakeConfig
const lakeConfig: types.LakeConfig = {
s3BucketName: "near-lake-data-mainnet",
s3RegionName: "eu-central-1",
startBlockHeight: 63804051,
};
Create indexer handler​
Indexer will be streaming the StreamerMessage
instances we need to handle according to our needs.
In near-lake-framework
JS library the handler have to be presented as a callback function. This function have to:
- be asynchronous
- accept an argument of type
StreamerMessage
- return nothing (
void
)
Creating the callback:
async function handleStreamerMessage(streamerMessage: types.StreamerMessage): Promise<void> {
//
}
For this tutorial our requirement is to log the block height and the numer of shards. That's simple:
async function handleStreamerMessage(streamerMessage: types.StreamerMessage): Promise<void> {
console.log(`
Block #${streamerMessage.block.header.height}
Shards: ${streamerMessage.shards.length}
`);
}
Starting the stream​
And the last thing to write is the call to startStream
with the config and pass the callback function.
(async () => {
await startStream(lakeConfig, handleStreamerMessage);
})();
That's it. Now we can compile the code and run it
Compile and run​
To be able to access the data from NEAR Lake you need to provide credentials. Please, see the Credentials article
We've added the start
command to the scripts
, so the compilation and run should as easy as
npm run start
You should see something like the following:
Block #63804051 Shards: 4
Block #63804052 Shards: 4
Block #63804053 Shards: 4
Block #63804054 Shards: 4
Block #63804055 Shards: 4
Block #63804056 Shards: 4
Block #63804057 Shards: 4
Block #63804058 Shards: 4
Block #63804059 Shards: 4
Block #63804060 Shards: 4
You can stop the indexer by pressing CTRL+C
What's next?​
You can play around and change the content of the callback function handleStreamerMessage
to handle the data differently.
You can find the source code for this tutorial on the GitHub.