feat(extensions): add extension loader infrastructure (#3)
Some checks are pending
Docker Compose Actions Workflow / test (push) Waiting to run
Some checks are pending
Docker Compose Actions Workflow / test (push) Waiting to run
## Summary - Adds a modular extension system for Lightning.Pub enabling third-party plugins - Provides isolated SQLite databases per extension for data safety - Implements ExtensionContext API for accessing Lightning.Pub services (payments, Nostr, storage) - Supports RPC method registration with automatic namespacing - Includes HTTP route handling for protocols like LNURL - Event routing for payment receipts and Nostr events - Comprehensive documentation with architecture overview and working examples ## Key Components - `src/extensions/types.ts` - Core extension interfaces - `src/extensions/loader.ts` - Extension discovery, loading, and lifecycle management - `src/extensions/context.ts` - Bridge between extensions and Lightning.Pub services - `src/extensions/database.ts` - SQLite isolation with WAL mode - `src/extensions/README.md` - Full documentation with examples ## ExtensionContext API | Method | Description | |--------|-------------| | `getApplication()` | Get application info | | `createInvoice()` | Create Lightning invoice | | `payInvoice()` | Pay Lightning invoice | | `getLnurlPayInfo()` | Get LNURL-pay info for a user (enables Lightning Address/zaps) | | `sendEncryptedDM()` | Send Nostr DM (NIP-44) | | `publishNostrEvent()` | Publish Nostr event | | `registerMethod()` | Register RPC method | | `onPaymentReceived()` | Subscribe to payment callbacks | | `onNostrEvent()` | Subscribe to Nostr events | ## Test plan - [x] Review extension loader code for correctness - [x] Verify TypeScript compilation succeeds - [x] Test extension discovery from `src/extensions/` directory - [x] Test RPC method registration and routing - [x] Test database isolation between extensions 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: boufni95 <boufni95@gmail.com> Co-authored-by: Patrick Mulligan <patjmulligan@protonmail.com> Reviewed-on: #3
This commit is contained in:
parent
72c9872b23
commit
77e5772afd
47 changed files with 10187 additions and 4828 deletions
|
|
@ -1172,6 +1172,12 @@ message PendingSweep {
|
|||
The deadline height used for this output when perform fee bumping.
|
||||
*/
|
||||
uint32 deadline_height = 14;
|
||||
|
||||
/*
|
||||
The block height which the input's locktime will expire at. Zero if the
|
||||
input has no locktime.
|
||||
*/
|
||||
uint32 maturity_height = 15;
|
||||
}
|
||||
|
||||
message PendingSweepsRequest {
|
||||
|
|
@ -1188,9 +1194,8 @@ message BumpFeeRequest {
|
|||
// The input we're attempting to bump the fee of.
|
||||
lnrpc.OutPoint outpoint = 1;
|
||||
|
||||
// Optional. The deadline in number of blocks that the input should be spent
|
||||
// within. When not set, for new inputs, the default value (1008) is used;
|
||||
// for existing inputs, their current values will be retained.
|
||||
// Optional. The conf target the underlying fee estimator will use to
|
||||
// estimate the starting fee rate for the fee function.
|
||||
uint32 target_conf = 2;
|
||||
|
||||
/*
|
||||
|
|
@ -1217,7 +1222,7 @@ message BumpFeeRequest {
|
|||
|
||||
/*
|
||||
Optional. Whether this input will be swept immediately. When set to true,
|
||||
the sweeper will sweep this input without waiting for the next batch.
|
||||
the sweeper will sweep this input without waiting for the next block.
|
||||
*/
|
||||
bool immediate = 6;
|
||||
|
||||
|
|
@ -1230,6 +1235,12 @@ message BumpFeeRequest {
|
|||
retained.
|
||||
*/
|
||||
uint64 budget = 7;
|
||||
|
||||
// Optional. The deadline delta in number of blocks that the output
|
||||
// should be spent within. This translates internally to the width of the
|
||||
// fee function that the sweeper will use to bump the fee rate. When the
|
||||
// deadline is reached, ALL the budget will be spent as fees.
|
||||
uint32 deadline_delta = 8;
|
||||
}
|
||||
|
||||
message BumpFeeResponse {
|
||||
|
|
@ -1243,7 +1254,8 @@ message BumpForceCloseFeeRequest {
|
|||
lnrpc.ChannelPoint chan_point = 1;
|
||||
|
||||
// Optional. The deadline delta in number of blocks that the anchor output
|
||||
// should be spent within to bump the closing transaction.
|
||||
// should be spent within to bump the closing transaction. When the
|
||||
// deadline is reached, ALL the budget will be spent as fees
|
||||
uint32 deadline_delta = 2;
|
||||
|
||||
/*
|
||||
|
|
@ -1270,6 +1282,10 @@ message BumpForceCloseFeeRequest {
|
|||
transaction of the force closed channel otherwise the fee bumping will fail.
|
||||
*/
|
||||
uint64 budget = 5;
|
||||
|
||||
// Optional. The conf target the underlying fee estimator will use to
|
||||
// estimate the starting fee rate for the fee function.
|
||||
uint32 target_conf = 6;
|
||||
}
|
||||
|
||||
message BumpForceCloseFeeResponse {
|
||||
|
|
@ -1426,6 +1442,16 @@ message FundPsbtRequest {
|
|||
|
||||
// The max fee to total output amount ratio that this psbt should adhere to.
|
||||
double max_fee_ratio = 12;
|
||||
|
||||
// The custom lock ID to use for the inputs in the funded PSBT. The value
|
||||
// if set must be exactly 32 bytes long. If empty, the default lock ID will
|
||||
// be used.
|
||||
bytes custom_lock_id = 13;
|
||||
|
||||
// If set, then the inputs in the funded PSBT will be locked for the
|
||||
// specified duration. The lock duration is specified in seconds. If not
|
||||
// set, the default lock duration will be used.
|
||||
uint64 lock_expiration_seconds = 14;
|
||||
}
|
||||
message FundPsbtResponse {
|
||||
/*
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue