Option 2: Designing a Feed in Typescript
It can be helpful to use language-server TypeScript features to configure feed inputs with a text editor. This example uses bun.sh
.
Initialising the Project
Create the example directory and navigate to it to initialize the bun project:
# create the example directory mkdir example cd example # initialize the bun project bun init
Press enter through each of the options to setup the
package.json
.Install the Switchboard On-Demand package
@switchboard-xyz/on-demand
:bun add @switchboard-xyz/on-demand @switchboard-xyz/common
Make sure things are installed:
bun run index.ts # Hello via Bun!
Boilerplate Script
To get started, replace the contents of index.ts
with the following:
index.ts
import { OracleJob } from "@switchboard-xyz/common";
const jobs: OracleJob[] = [
OracleJob.fromObject({
tasks: [
{
httpTask: {
url: "https://binance.com/api/v3/ticker/price?symbol=BTCUSDT",
}
},
{
jsonParseTask: {
path: "$.price"
}
}
],
}),
];
console.log("Running simulation...\n");
// Print the jobs that are being run.
const jobJson = JSON.stringify({ jobs: jobs.map((job) => job.toJSON()) });
console.log(jobJson);
console.log();
// Serialize the jobs to base64 strings.
const serializedJobs = jobs.map((oracleJob) => {
const encoded = OracleJob.encodeDelimited(oracleJob).finish();
const base64 = Buffer.from(encoded).toString("base64");
return base64;
});
// Call the simulation server.
const response = await fetch("https://api.switchboard.xyz/api/simulate", {
method: "POST",
headers: [["Content-Type", "application/json"]],
body: JSON.stringify({ cluster: "Mainnet", jobs: serializedJobs }),
});
// Check response.
if (response.ok) {
const data = await response.json();
console.log(`Response is good (${response.status})`);
console.log(JSON.stringify(data, null, 2));
} else {
console.log(`Response is bad (${response.status})`);
console.log(await response.text());
}
Note: The simulation server is heavily rate-limited, use it solely for test development purposes.
Running the Feed
Run the example feed:
bun run index.ts
The output should be similar to:
Running simulation...
{"jobs":[{"tasks":[{"httpTask":{"url":"https://binance.com/api/v3/ticker/price?symbol=BTCUSDT"}},{"jsonParseTask":{"path":"$.price"}}]}]}
Response is good (200)
{
"results": [
"64158.33000000"
],
"version": "RC_06_19_24_03_17"
}
Explore boilerplate feed definitions and how the task runner works in the Switchboard Feeds Documentation. Modify the job and add new ones until you're satisfied, then move to the next section.
Note: The @switchboard-xyz/on-demand
package is actively maintained. Ensure the version in your package.json
is up to date.
Last updated