TypeScript SDK
Run a managed local server with Node.js 22+. Use Effect or Effect workflows to control it.
bun add @soulfiremc/sdk effect @effect/platformimport { Effect, Stream } from "effect";
import { AccountTypeCredentials } from "@soulfiremc/sdk";
import { SoulFire } from "@soulfiremc/sdk/node";
const program = Effect.scoped(
Effect.gen(function* () {
const soulfire = yield* SoulFire.install();
const name = "Hello World";
const existing = (yield* soulfire.instances()).find(
(item) => item.friendlyName === name,
);
const instance = existing
? soulfire.instance(existing.id)
: yield* soulfire.createInstance(name);
const username = "SoulFireBot";
let botId = (yield* instance.bots()).find(
(item) => item.accountName === username,
)?.profileId;
if (!botId) {
const results = yield* instance.loginCredentials({
service: AccountTypeCredentials.OFFLINE,
payload: [username],
}).pipe(Stream.runCollect);
for (const result of results) {
if (result.data.case === "oneSuccess" && result.data.value.account) {
const account = result.data.value.account;
yield* instance.addAccounts([account]);
botId = account.profileId;
}
}
}
if (!botId) throw new Error("Could not create an offline bot");
const bot = instance.bot(botId);
yield* bot.start();
yield* bot.waitForOnline();
yield* bot.chat.send("Hello from SoulFire");
}),
);
await Effect.runPromise(program);