Storage, backend constructors and the active signer.
A MessagingRegistry.
const messaging = createDefaultMessaging({ storage: localStorage });
messaging.get('private')?.availability; // { available: false, reason: 'sign-in-required' }
messaging.get('ratchet')?.availability; // { available: false, reason: 'no-runtime' }
messaging.get('group')?.availability; // { available: false, reason: 'no-runtime' }
The shell's messaging registry with kernl's four providers registered and preferences persisted at
kernl:messaging:v1.createKernlpasses the account-signer backends for all four providers and the active account's signer, so each follows the account:sign-in-requiredwhile nobody is signed in,signer-cannot-encryptwhile the signer lacks the encryption the format needs. A provider given no backend stays unavailable:no-runtimeforratchetandgroup,sign-in-requiredfor the others. The shell describes, it does not pretend.