@delta-base/alchemy
v0.0.1
Published
Alchemy.run resources for managing DeltaBase infrastructure
Downloads
75
Readme
@delta-base/alchemy
Reusable Alchemy.run resources for managing DeltaBase infrastructure.
Use this package when you want DeltaBase event stores and webhook subscriptions to live in the same alchemy.run.ts file as the rest of your infrastructure.
Install
pnpm add @delta-base/alchemy alchemy @delta-base/serverQuick start
import alchemy from 'alchemy';
import { DeltaBaseEventStore, DeltaBaseSubscription } from '@delta-base/alchemy';
const app = await alchemy('my-app');
const eventStore = await DeltaBaseEventStore('billing-events', {
baseUrl: process.env.DELTABASE_URL ?? 'https://api.delta-base.com',
apiKey: process.env.DELTABASE_API_KEY ?? '',
description: 'Billing service event store',
});
await DeltaBaseSubscription('billing-projection', {
baseUrl: process.env.DELTABASE_URL ?? 'https://api.delta-base.com',
apiKey: process.env.DELTABASE_API_KEY ?? '',
eventStoreName: eventStore.eventStoreName,
eventFilter: ['invoice.created', 'invoice.paid'],
webhook: {
url: 'https://billing.example.com/api/projections/invoices/events',
headers: {
Authorization: `Bearer ${process.env.PROJECTION_AUTH_TOKEN ?? ''}`,
},
retryPolicy: {
strategy: 'fixed',
maxAttempts: 5,
initialDelayMs: 60_000,
maxDelayMs: 60_000,
},
},
});
await app.finalize();What it manages
DeltaBaseEventStore- create, update, and delete event storesDeltaBaseSubscription- create, update, and delete webhook subscriptions
Why it builds on @delta-base/server
This package uses the public DeltaBase server SDK instead of its own HTTP client. That keeps IaC behavior aligned with the SDK you already use elsewhere.
Docs
- Alchemy resource lifecycle: https://alchemy.run/concepts/resource
- Alchemy bindings: https://alchemy.run/concepts/bindings
- DeltaBase docs: https://delta-base.com/docs
Gotchas
DeltaBaseSubscriptionis webhook-only in v1.- Changing
eventStoreNameorsubscriberIdafter creation is treated as invalid. Create a new resource instead. - Always call
await app.finalize(). Alchemy needs it to reconcile resources.
