/**
* In-app / push copy for DSL lifecycle notifications.
*
* In-app text carries lightweight display markup the front-end renders:
* - `…` bold span
* - `${x}` a P&L value the FE colors green/red by sign
* - `
` a literal line break (the FE renders it as a newline)
* The push body is ALWAYS plain text (no markup) and carries no strategy label:
* there is no push title here at all — the notification service sets it to the
* strategy/skill name it resolves from `strategyWalletAddress`, so repeating the
* name in the body would double it.
*/
import type { DslCreatedEvent, DslTierAdvancedEvent, DslSlUpdatedEvent } from "../../types/dsl/index.js";
import type { NotificationCopy } from "../../types/notification.js";
/**
* DSL-activated notification — Part 2 of the position-opened pair: the runtime
* attaches a trailing DSL when it starts tracking a freshly-opened position. (Part 1,
* "position opened", is emitted by whoever opened the position.) Every value comes
* from the event.
*/
export declare function formatDslCreated(e: DslCreatedEvent): NotificationCopy;
/**
* Profit-lock notification — a tier advance locked in profit. The
* A-vs-B selection lives in the subscriber (`index.ts`): this fires only when the
* tier locked profit (`lockedProfitPct > 0`). The push body carries no label.
*/
export declare function formatDslTierAdvanced(e: DslTierAdvancedEvent): NotificationCopy;
/**
* Stop-raised notification — the DSL raised the stop but locked no
* profit yet. Both emit sites (local monitor and the backend-mapped path) carry
* leverage and the high-water price today; each is optional on the event, so the
* copy omits the `N×` / `new high` fragment cleanly rather than fabricating a
* value when a legacy emitter leaves it out. The push body carries no label.
*/
export declare function formatDslSlUpdated(e: DslSlUpdatedEvent): NotificationCopy;
//# sourceMappingURL=formatter.d.ts.map