
Product
Introducing Repository Access Permissions and Custom Roles
Socket now supports Custom Roles and Repository Access Permissions so organizations can control who can access specific repositories and actions.
@powforge/semantic-kernel-l402
Advanced tools
L402 Lightning payment middleware for Microsoft Semantic Kernel (JavaScript SDK) — wrap any async KernelFunction method with a pay-per-call Lightning gate backed by LNBits.
L402 Lightning payment middleware for Microsoft Semantic Kernel
(JavaScript SDK). Wrap any async KernelFunction-shaped method with a
pay-per-call Lightning gate backed by LNBits.
npm install @powforge/semantic-kernel-l402
Requires Node 18+ (for global fetch). @microsoft/semantic-kernel is
an optional peer dependency — this package is a pure wrapper and works
without Semantic Kernel installed (use the bare wrapKernelFunctionWithL402
for any async function).
const { wrapKernelFunctionWithL402 } = require('@powforge/semantic-kernel-l402');
const summarize = async (text) => `summary of ${text}`;
const paidSummarize = wrapKernelFunctionWithL402(summarize, {
lnbitsUrl: 'https://lnbits.example',
lnbitsApiKey: process.env.LNBITS_INVOICE_KEY,
satsAmount: 21,
});
// First call — no proof, returns a 402 envelope.
const challenge = await paidSummarize('hello world');
// {
// error: 'payment_required',
// invoice: 'lnbc...',
// payment_hash: 'abc123',
// sats: 21,
// next_step: 'Pay the invoice, then re-call with the payment_hash as paymentProof.'
// }
// Pay the invoice externally, then re-call with the payment_hash:
const result = await paidSummarize('hello world', 'abc123');
// "summary of hello world"
KernelFunction on a pluginconst { createL402KernelFunction } = require('@powforge/semantic-kernel-l402');
const { KernelFunction } = require('@microsoft/semantic-kernel');
const spec = createL402KernelFunction({
name: 'paid_summary',
description: 'Summarizes any text. Costs 21 sats per call.',
func: async (text) => `summary of ${text}`,
lnbitsUrl: 'https://lnbits.example',
lnbitsApiKey: process.env.LNBITS_INVOICE_KEY,
satsAmount: 21,
});
// Register on a kernel plugin via the canonical fromMethod path:
const kf = KernelFunction.fromMethod(spec.func, {
name: spec.name,
description: spec.description,
});
// kernel.addPlugin(...kf) — or attach to a plugin class — per your SK setup.
Because KernelFunction.fromMethod invokes its method with a single
input argument, callers smuggle the payment proof through a JSON
envelope:
await spec.func(JSON.stringify({
__payment_proof__: 'abc123',
__tool_input__: 'hello world',
}));
// "summary of hello world"
{ error: 'payment_required', invoice, payment_hash, sats }.payment_hash as the proof.{ error: 'invoice_not_paid', payment_hash }.| Option | Required | Default | Description |
|---|---|---|---|
lnbitsUrl | yes* | — | LNBits instance base URL |
lnbitsApiKey | yes* | — | Invoice/read key (NOT admin) |
satsAmount | no | 10 | Sats charged per call |
memo | no | semantic-kernel-l402 | Invoice memo |
fetchImpl | no | globalThis.fetch | Injectable fetch |
createInvoiceFn | no | LNBits adapter | Override the invoice minter |
checkPaidFn | no | LNBits adapter | Override the paid-check function |
state | no | new in-memory | Shared payment cache |
* Required unless you inject createInvoiceFn + checkPaidFn directly
(useful for tests or non-LNBits backends).
The wrapper never throws on the payment path — it returns a structured object so a Semantic Kernel planner / agent can read the error from the function output.
error | Meaning |
|---|---|
payment_required | No proof; pay the invoice and retry |
invoice_not_paid | Proof points at an unpaid hash |
payment_provider_unavailable | LNBits invoice mint failed |
payment_verifier_unavailable | LNBits paid-check failed |
This package accepts the LNBits payment_hash as the "proof" rather
than the canonical L402 preimage. Trade-off:
@powforge/mcp-l402-gate.| Package | Framework |
|---|---|
@powforge/langchain-l402-middleware | LangChain.js |
@powforge/paymcp-l402-provider | paymcp |
@powforge/mcp-l402-gate | MCP (full macaroon flow) |
MIT
FAQs
L402 Lightning payment middleware for Microsoft Semantic Kernel (JavaScript SDK) — wrap any async KernelFunction method with a pay-per-call Lightning gate backed by LNBits.
We found that @powforge/semantic-kernel-l402 demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Product
Socket now supports Custom Roles and Repository Access Permissions so organizations can control who can access specific repositories and actions.

Product
Socket MCP now lets AI assistants review org alerts, investigate threats using the Socket threat feed, and inspect package files in addition to dependency scoring.

Product
Socket Firewall blocks malicious VS Code and Open VSX extensions before install, protecting developers from compromised editor marketplaces.