diff --git a/.changeset/forward-client-capabilities-to-key-packages.md b/.changeset/forward-client-capabilities-to-key-packages.md new file mode 100644 index 0000000..d3e98a5 --- /dev/null +++ b/.changeset/forward-client-capabilities-to-key-packages.md @@ -0,0 +1,5 @@ +--- +"@internet-privacy/marmot-ts": patch +--- + +Forward the `MarmotClient` `capabilities` option to `KeyPackageManager` so custom capabilities (such as adding SelfRemove proposal type `0x000A` for Amethyst interop) are reflected in generated key packages instead of being silently ignored. diff --git a/src/client/key-package-manager.ts b/src/client/key-package-manager.ts index 7584c71..55deac5 100644 --- a/src/client/key-package-manager.ts +++ b/src/client/key-package-manager.ts @@ -4,6 +4,7 @@ import { EventSigner } from "applesauce-core"; import { NostrEvent } from "applesauce-core/helpers/event"; import { EventEmitter } from "eventemitter3"; import { + Capabilities, CiphersuiteName, ciphersuites, CryptoProvider, @@ -265,6 +266,8 @@ export type KeyPackageManagerOptions = { network: NostrNetworkInterface; /** The crypto provider to use for cryptographic operations */ cryptoProvider?: CryptoProvider; + /** Capabilities to advertise in generated key packages. Falls back to ts-mls `defaultCapabilities()` when omitted. */ + capabilities?: Capabilities; }; /** @@ -287,6 +290,7 @@ export class KeyPackageManager extends EventEmitter { private readonly cryptoProvider: CryptoProvider; private readonly signer: EventSigner; private readonly network: NostrNetworkInterface; + private readonly capabilities: Capabilities | undefined; #log = logger.extend("KeyPackageManager"); @@ -297,6 +301,7 @@ export class KeyPackageManager extends EventEmitter { this.signer = options.signer; this.network = options.network; this.clientId = options.clientId; + this.capabilities = options.capabilities; } // --------------------------------------------------------------------------- @@ -506,6 +511,7 @@ export class KeyPackageManager extends EventEmitter { credential, ciphersuiteImpl: ciphersuite, isLastResort: options.isLastResort, + capabilities: this.capabilities, }); // Store private material locally, including the slot identifier diff --git a/src/client/marmot-client.ts b/src/client/marmot-client.ts index 15344b8..ec8a549 100644 --- a/src/client/marmot-client.ts +++ b/src/client/marmot-client.ts @@ -106,6 +106,7 @@ export class MarmotClient< signer: options.signer, network: options.network, clientId: options.clientId, + capabilities: this.capabilities, }); const historyFactory = (