A type-safe library to build automation at the top of ATProto/Bluesky API.
- Builder Pattern: Easily create our automation with an intuitive DSL.
- Reduce Complexity: Design advanced scenarios with a single expression in minutes.
- Type-safety: Benefit from type-safety and autocompletion for a robut development experience.
- Lifecycle Hooks: Extend scenarios with beforeStep and afterStep hooks for logging, monitoring, validation, and more.
- Discover: Find inspirations with a curated list of Trotsky implementations.
Install Trotsky from NPM with your favorite package manager:
yarn add trotsky
Then write your script using Trotsky:
import { AtpAgent } from "@atproto/api"
import { Trotsky } from "trotsky"
async function main() {
const agent = new AtpAgent({ service: "https://bsky.social" })
// Ensure you logged in with your agent, for instance using the login method
await agent.login({ identifier: 'trotsky.pirhoo.com', password: 'h0rs3!' })
await Trotsky
.init(agent)
.searchPost({ q: 'trotsky' })
.take(5)
.each()
.like()
.run()
}
main()Extend your scenarios with beforeStep and afterStep hooks for logging, monitoring, validation, and more:
import { Trotsky } from "trotsky"
const trotsky = new Trotsky(agent)
// Log when steps start
trotsky.beforeStep((step, context) => {
console.log(`Starting: ${step.constructor.name}`)
})
// Track performance after each step
trotsky.afterStep((step, context, result) => {
console.log(`Completed: ${step.constructor.name} (${result.executionTime}ms)`)
if (result.executionTime > 1000) {
console.warn('Slow step detected!')
}
})
await trotsky
.actor('alice.bsky.social')
.createPost('Hello world!')
.run()See the Hooks Documentation for comprehensive guides and examples.
Find out more about how to use Trotsky with advanced scenario on the official documentation.