diff options
Diffstat (limited to 'src/features/index.js')
| -rw-r--r-- | src/features/index.js | 35 |
1 files changed, 22 insertions, 13 deletions
diff --git a/src/features/index.js b/src/features/index.js index 5ecb7c0..a32bced 100644 --- a/src/features/index.js +++ b/src/features/index.js @@ -3,24 +3,33 @@ // build.js replaces this module's contents based on HAL_FEATURES, so a // disabled feature's code — and its network endpoints — never enters the // bundle. See featureIndexSource() in build.js. - -import { giftsFeature } from './gifts.js'; -import { nostrLoginFeature } from './nostrlogin.js'; +// +// This checked-in copy must stay byte-equivalent (comments aside) to +// featureIndexSource(all features) — tools/feature-registry-check.js enforces +// it. Deferred features (gifts, nwc, hats) hold their array position with an +// empty placeholder — hook precedence is position — and are filled in place +// by loadDeferredFeatures right after boot, as separate chunks in the split +// build. NB order is meaningful where hooks stack: gifts' receive takeover +// and balance line come before ark's; zaps sits after ark so an npub prefers +// an instant Ark zap; nwc sits after ark because it drives ark's headless +// pay/balance seam; names sits between ark and zaps so a pasted user@domain +// resolves over DNS (BIP-353) before zaps treats it as a Lightning address. import { arkFeature } from './ark.js'; +import { nostrLoginFeature } from './nostrlogin.js'; import { namesFeature } from './names.js'; import { zapsFeature } from './zaps.js'; import { syncFeature } from './sync.js'; -import { nwcFeature } from './nwc.js'; -import { hatsFeature } from './hats.js'; import { messagesFeature } from './messages.js'; -// NB order is meaningful where hooks stack: gifts' receive takeover and -// balance line come before ark's, matching the pre-plugin layout. zaps sits -// after ark so an npub prefers an instant Ark zap and only falls through to a -// Lightning zap when Ark can't serve it. nwc sits after ark because it -// drives ark's headless pay/balance seam. -// names sits between ark and zaps: a pasted user@domain resolves over DNS -// (BIP-353) before the zaps feature treats it as a plain Lightning address. export function buildFeatures(ctx) { - return [giftsFeature(ctx), arkFeature(ctx), nostrLoginFeature(ctx), namesFeature(ctx), zapsFeature(ctx), nwcFeature(ctx), hatsFeature(ctx), syncFeature(ctx), messagesFeature(ctx)]; + return [{}, arkFeature(ctx), nostrLoginFeature(ctx), namesFeature(ctx), zapsFeature(ctx), {}, {}, syncFeature(ctx), messagesFeature(ctx)]; +} +export async function loadDeferredFeatures(ctx, features) { + const late = []; + await Promise.all([ + import('./gifts.js').then((m) => { late.push(features[0] = m.giftsFeature(ctx)); }), + import('./nwc.js').then((m) => { late.push(features[5] = m.nwcFeature(ctx)); }), + import('./hats.js').then((m) => { late.push(features[6] = m.hatsFeature(ctx)); }) + ]); + return late; } |
